File

src/app/yourtrip/yourtrip.component.ts

Implements

OnInit

Metadata

Index

Properties
Methods
Inputs

Constructor

constructor(route: ActivatedRoute, db: DbConnectionService)
Parameters :
Name Type Optional
route ActivatedRoute No
db DbConnectionService No

Inputs

accommodation
Type : Object
mainActivity
Type : Object

Methods

addDays
addDays(date, days: number)
Parameters :
Name Type Optional
date No
days number No
Returns : any
fetchTripArrivalDeparture
fetchTripArrivalDeparture()
Returns : void
fetchTripPrice
fetchTripPrice()
Returns : void
fetchYourTrip
fetchYourTrip()
Returns : void
getPeriod
getPeriod(activity)
Parameters :
Name Optional
activity No
Returns : string
ngOnInit
ngOnInit()
Returns : void
stringToSimpleDate
stringToSimpleDate(datestring: string)
Parameters :
Name Type Optional
datestring string No
Returns : string
toSimpleDate
toSimpleDate(date: Date)
Parameters :
Name Type Optional
date Date No
Returns : string

Properties

activities
Type : Object[]
Default value : []
activityId
Type : number
priceInfoMessage
Type : string
Default value : "The price includes transport, guide and other stuff"
trip
Type : Object
tripId
Type : number
tripPrice
Type : Number
tripPriceWithoutMainActivity
Type : Number
import { Component, Input, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { DbConnectionService } from '../db-connection.service';

@Component({
  selector: 'app-yourtrip',
  templateUrl: './yourtrip.component.html',
  styleUrls: ['./yourtrip.component.scss']
})
export class YourtripComponent implements OnInit {

  tripId: number;
  activities: Object[] = [];
  tripPrice: Number;
  tripPriceWithoutMainActivity: Number;
  trip: Object;
  activityId: number;
  @Input() mainActivity: Object;
  @Input() accommodation: Object;

  priceInfoMessage: string = "The price includes transport, guide and other stuff"


  constructor(
    private route: ActivatedRoute,
    private db: DbConnectionService
  ) { }

  ngOnInit(): void {
    this.route.params.subscribe(r => {
      // error handling
      if (!r["tripId"] || isNaN(Number(r["tripId"])))
        return alert("Invalid TripID");
      this.tripId = Number(r["tripId"]);

      if (r["activityId"]) {
        this.activityId = Number(r["activityId"]);
      }
      this.fetchTripArrivalDeparture();
      this.fetchYourTrip();
      this.fetchTripPrice();

    })
  }

  fetchTripArrivalDeparture() {
    this.db.executeQuery(`SELECT * FROM TripArrivalAndDepartureView WHERE tripID=${this.tripId}`).then(r => {
      this.trip = r["data"][0];
      // console.log(this.trip)
    })
  }
  fetchYourTrip() {
    this.db.executeQuery(`SELECT * FROM YourTripRightView WHERE tripID=${this.tripId}`).then(r => {
      this.activities = r["data"];
      // console.log(this.activities)
    })
  }

  fetchTripPrice() {
    this.db.executeQuery(`SELECT totalPrice FROM TripPriceView WHERE tripID=${this.tripId}`).then(r => {
      //need to include the active activity
      this.tripPrice = r["data"][0]["totalPrice"];
    })
    if (!isNaN(this.activityId) && !this.accommodation) {

      this.db.executeQuery(`SELECT sum(totalPrice) as totalPrice FROM TotalPriceView WHERE tripID=${this.tripId} and activityID <> ${this.activityId} GROUP BY tripID`).then(r => {

        let d = r["data"]
        // BUG? Query has no matches
        if (d.length === 0)
          return

        //need to include the active activity
        if (d[0]["totalPrice"]) {
          this.tripPriceWithoutMainActivity = d[0]["totalPrice"];
        }
        else {
          this.tripPriceWithoutMainActivity = 0
        }
      })
    }
  }

  // type "DD/MM"
  toSimpleDate(date: Date): string {
    return `${date.getDate()}/${date.getMonth() + 1}`
  }

  stringToSimpleDate(datestring: string): string {
    return this.toSimpleDate(new Date(datestring));
  }
  // type "DD/MM - DD/MM"
  getPeriod(activity) {
    let startDate = new Date(activity["startDate"]);
    let endDate = new Date(startDate);
    endDate.setDate(startDate.getDate() + activity["nights"]);
    if (activity["nights"] === 0) {
      return `${this.toSimpleDate(startDate)}`
    }
    else {
    return `${this.toSimpleDate(startDate)} - ${this.toSimpleDate(endDate)}`
    };
  }

  addDays(date, days: number) {
    let result = new Date(date);
    result.setDate(result.getDate() + days);
    return result;
  }

}


<div *ngIf="trip">
   <h3>Your Trip</h3>
   <hr />
   <div class="m-2">
      <b *ngIf="tripPrice && trip">Trip Price</b>
      <span class="fa-stack" [ngbPopover]="priceInfoMessage" triggers="mouseenter:mouseleave" popoverClass="myclass">
         <i class="fa fa-circle fa-stack-1x icon-background2"></i>
         <i class="fa fa-info fa-stack-1x"></i>
      </span>: {{ ((!activityId || accommodation)? this.tripPrice : this.tripPriceWithoutMainActivity +
      trip["arrivalPrice"] + trip["departurePrice"] + mainActivity["price"]) | currency:'EUR' : 'symbol' :
      '1.0-0'}} <br>
      <!-- <b> Travelers: </b> {{trip.persons}} <br> -->
   </div>
   <div class="day-part">
      <div class="card">
         <div *ngIf="trip" class="card-body">
            <h5 class="card-title">Arrival At {{ trip["arrivalPlace"] }}</h5>
            <b>Date:</b> {{ stringToSimpleDate(trip["startDate"]) }} <br>
            <b>Price:</b> {{ trip["arrivalPrice"] | currency:'EUR' : 'symbol' : '1.0-0'}}
            <br>
         </div>
      </div>
   </div>
   <div class="day-part" *ngFor="let activity of activities">
      <div class="card" *ngIf="!activityId || (activityId && activity.activityID !== activityId) || accommodation">
         <div class="card-body">
            <h5 class="card-title"> {{ activity["activity"] }}</h5>
            <div class="d-flex justify-content-left">
               <div class="content">
                  <b>Date:</b> {{ getPeriod(activity) }} <br>
                  <!-- <b>Persons:</b> {{ activity["persons"] }} <br> -->
                  <b>Day Activities:</b> {{ activity["dayActivities"] }} <br>
                  <b>Price:</b> {{ activity["price"] | currency:'EUR' : 'symbol' : '1.0-0'}} <br>
               </div>
            </div>
         </div>
      </div>
   </div>
   <div class="day-part">
      <div class="card" *ngIf="activityId && !accommodation && mainActivity">
         <div class="card-body">
            <h5 class="card-title"> {{ mainActivity["mainActivityType"] }}</h5>
            <div class="d-flex justify-content-left">
               <div class="content">
                  <b>Date:</b> {{ getPeriod(mainActivity)}} <br>
                  <!-- <b>Persons:</b> {{ mainActivity["persons"] }} <br> -->
                  <!-- <b>Day Activities:</b> {{ mainActivity["dayActivities"] }} <br> -->
                  <b>Price:</b> {{ mainActivity["price"] | currency:'EUR' : 'symbol' : '1.0-0'}} <br>
               </div>
            </div>
         </div>
      </div>
   </div>
   <div class="day-part">
      <div class="card" *ngIf="trip">
         <div class="card-body">
            <h5 class="card-title">Departure From {{
               trip["departurePlace"] }}</h5>
            <b>Date:</b> {{ stringToSimpleDate(trip["endDate"]) }} <br>
            <b>Price:</b> {{ trip["departurePrice"] | currency:'EUR' : 'symbol' : '1.0-0'}} <br>
         </div>
      </div>
   </div>
</div>

./yourtrip.component.scss

@import 'variables';
@import 'footer';
@import 'header';
@import 'custom-checkbox';
@import 'custom-card';
@import 'info-circle';

.day-part {
    width: 100%;
    padding: 0px 5px;
    margin-bottom: 5px;

    .card {
       width: 100%;
    }

    .images {
       max-width: 400px;
    }

    .content {
       margin-left: 15px;
    }
 }

 .day-by-day-table {
    margin: 0px 5px;
 }


 .card {
    background-color: $secondary-background-color;
 }
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""