import { Component, ViewEncapsulation, Injector, OnInit, AfterViewInit, ViewChild, ElementRef } from "@angular/core"; import { appModuleAnimation } from "@shared/animations/routerTransition"; import { AppComponentBase } from "@shared/common/app-component-base"; import { LocationServiceProxy, DriverProximityServiceProxy, DriverProximityDetails } from "@shared/service-proxies/service-proxies"; import { LazyLoadEvent } from "primeng/api"; import * as moment from 'moment-timezone'; import { Table } from "primeng/table"; import { Paginator } from 'primeng/components/paginator/paginator'; import { DriverProximityFlyOutComponent } from "@app/shared/layout/flyout/driver-proximity/driver-proximity-filter.component"; import { Moment } from "moment"; import { ViewDriverProximitiesMapComponent } from "./view-driver-proximities-map.component"; import { AgmCoreModule, MapsAPILoader } from "@agm/core"; import {} from 'googlemaps'; import { result } from "lodash"; import { EntityTypeHistoryModalComponent } from "@app/shared/common/entityHistory/entity-type-history-modal.component"; import * as _ from "lodash"; declare var $: any; @Component({ templateUrl: './driver-proximities.component.html', animations: [appModuleAnimation()], styleUrls: ['./driver-proximities.component.less'], providers: [DriverProximityServiceProxy] }) export class DriverProximitiesComponent extends AppComponentBase { @ViewChild('dataTable', { static: true }) dataTable: Table; @ViewChild('paginator', { static: true }) paginator: Paginator; @ViewChild('driverProximityFlyOutComponent', {static: false}) driverProximityFlyOutComponent: DriverProximityFlyOutComponent; @ViewChild('controllerHeader', {read: ElementRef,static: true}) cHeader: ElementRef; @ViewChild('viewDriverProximitiesMapModal', { static: true }) viewDriverProximitiesMapModal: ViewDriverProximitiesMapComponent; @ViewChild('entityTypeHistoryModal', { static: true }) entityTypeHistoryModal: EntityTypeHistoryModalComponent; _entityTypeFullName = 'SprintTek.Shipping.Orders.ProximityCode'; entityHistoryEnabled = false; locations: any; txtFilter: string; filters: { locationFilter: number, filterText: string, startDate: moment.Moment, endDate: moment.Moment, } = {}; locationName; // packageList: Array = []; routeIds = []; DriverProximityData = []; todaysDate: string; resultNum: number; isEnabledLaboratory: boolean; advancedFiltersAreShown = false; AdressFilter: string; OrderIdFilter: number; ProximityCodeFilter: string; isAccepted: boolean; accountNumber: string; clinicName: string; customerName: string; driverPage: boolean=true; constructor( injector: Injector, private _locationServiceProxy: LocationServiceProxy, private _driverProximityServiceProxys: DriverProximityServiceProxy ) { super(injector); } ngOnInit(): void { this.driverPage = true; let that = this; $('.kt-select2').select2(); this.setIsEntityHistoryEnabled(); that.getLocationsOnLoad().then(function(result) { if (localStorage.getItem('operatingLocationId') == null) { localStorage.setItem('operatingLocationId', "" +result); }else{ that.filters.locationFilter = parseInt(localStorage.getItem('operatingLocationId')); } that.todaysDate = moment(Date.now()).format(); if (localStorage.getItem('operatingLocationId') == null) { that.todaysDate = moment(Date.now()).format('MM/DD/YYYY'); localStorage.setItem('operatingLocationId', that.todaysDate); } that.filters.startDate = moment(localStorage.getItem('loadDate')); that.filters.endDate = moment(localStorage.getItem('loadDate')); that.driverProximityFlyOutComponent.flyoutDate = moment(localStorage.getItem('loadDate')).toDate(); // if (localStorage.getItem('dateInDriverproximity') == null) { // localStorage.setItem('dateInDriverproximity', moment(that.todaysDate).format('YYYY-MM-DD')); // that.filters.startDate = moment(localStorage.getItem('dateInDriverproximity')).toDate(); // } else { // that.filters.startDate = moment(localStorage.getItem('dateInDriverproximity')).toDate(); // that.filters.endDate = moment(localStorage.getItem('dateInDriverproximity')).toDate(); // // $(".datePicker").text(localStorage.getItem('dateInDriverproximity')); // } // if (localStorage.getItem('dateInDriverproximity') != null) { // $(".datePicker").text(moment(localStorage.getItem('dateInDriverproximity')).format('dddd, MMMM DD, YYYY')); // } // if(localStorage.getItem('locationInDriverProximity') == null){ // this.filters.locationFilter = localStorage.getItem('locationInDriverProximity'); // console.log("Hindi null") // } that.filter(); }); this.isEnabledLaboratory = abp.features.isEnabled('App.ControllerRouteManagementFeature.RouteDetailsManagementFeature'); } private setIsEntityHistoryEnabled(): void { let customSettings = (abp as any).custom; this.entityHistoryEnabled = customSettings.EntityHistory && customSettings.EntityHistory.isEnabled && _.filter(customSettings.EntityHistory.enabledEntities, entityType => entityType === this._entityTypeFullName).length === 1; } showHistory(role: DriverProximityDetails): void { this.entityTypeHistoryModal.show({ entityId: role.proximityId.toString(), entityTypeFullName: this._entityTypeFullName, entityTypeDescription: "Driver Proximity - " +role.proximityCode }); } getDriverProximity(event?: LazyLoadEvent) { this.spinnerService.show(); let locationFilter = this.filters.locationFilter; let timeId = localStorage.getItem('timeZoneId'); this.DriverProximityData = []; this.routeIds = []; this._driverProximityServiceProxys.getDriverProximity(this.filters.filterText, undefined, undefined, this.OrderIdFilter, undefined, locationFilter, undefined, this.AdressFilter, this.ProximityCodeFilter, this.isAccepted, moment.tz(localStorage.getItem('loadDate'), timeId), moment.tz(localStorage.getItem('loadDate'), timeId).endOf('day'), this.customerName, this.accountNumber, this.clinicName, undefined, 1000, undefined ).subscribe(result => { // let key, x = 1, DriverProximityDataArray = {}, initialDataArray = {}, lat1, long1, lat2, long2, distance; // for (key in result.items) { // lat1 = result.items[key].deliveryDetail.contact.address.geocode.latitude; // long1 = result.items[key].deliveryDetail.contact.address.geocode.longitude; // lat2 = result.items[key].proximityCode.geocode.latitude; // long2 = result.items[key].proximityCode.geocode.longitude; // distance = this.distance(lat1, long1, lat2, long2, "M"); // DriverProximityDataArray = { // 'RouteId': result.items[key].route.id, // 'OrderId': result.items[key].id, // 'VehicleId': result.items[key].route.vehicle.id, // 'VehicleName': result.items[key].route.vehicle.name, // 'UserId': result.items[key].route.vehicle.user.id, // 'DriverName': result.items[key].route.vehicle.user.name + " " + result.items[key].route.vehicle.user.surname, // 'ProximityCode': result.items[key].proximityCode.value, // 'Address': result.items[key].deliveryDetail.contact.firstName + " " + result.items[key].deliveryDetail.contact.lastName // + ", " + result.items[key].deliveryDetail.contact.address.addressLine1 + ", " // + result.items[key].deliveryDetail.contact.address.postalCode.city + ", " + result.items[key].deliveryDetail.contact.address.postalCode.state + ", " // + result.items[key].deliveryDetail.contact.address.postalCode.value + ", " // + result.items[key].deliveryDetail.contact.address.postalCode.country, // 'Distance': Number(distance).toFixed(4), // 'TimeCreated': result.items[key].proximityCode.creationTime, // 'DeliveryDate': result.items[key].deliveryDetail.etaEnd // } // this.DriverProximityData.push(DriverProximityDataArray); // } // var routeIds = this.DriverProximityData.map(item => item.RouteId).filter((value, index, self) => self.indexOf(value) === index); // var GetOneData = true; // for (let key in routeIds) { // for (var _i = 0; _i < this.DriverProximityData.length && GetOneData; _i++) { // if (this.DriverProximityData[_i].RouteId == routeIds[key]) { // initialDataArray = { // 'RouteId': routeIds[key], // 'DriverName': this.DriverProximityData[_i].DriverName, // 'VehicleName': this.DriverProximityData[_i].VehicleName // } // this.routeIds.push(initialDataArray); // GetOneData = false; // } // } // GetOneData = true; // } this.spinnerService.hide(); this.primengTableHelper.records = result; this.resultNum = result.length; // this.primengTableHelper.totalRecordsCount = 10; }); } ngAfterViewInit(): void { } onChange(event) { console.log(event); } getLocationsOnLoad() { let that = this; return new Promise(function (resolve, reject) { that._locationServiceProxy.getLocationNames(undefined, undefined, undefined, undefined, undefined, undefined) .subscribe(result => { that.locations = result; // that.filters.locationFilter = result.items["0"].id; if (localStorage.getItem('operatingLocationId') == null) { that.locationName = 'Please Select Location '; } else { that.locationName = that.locations['0']['name']; } that.txtFilter = null; null; null; resolve(result["0"].id); }); }); } filter() { let key; console.log(this.locations); for (key in this.locations) { if (this.locations[key].id == this.filters.locationFilter) { $(".location").text(this.locations[key].name + " - "); } } this.getDriverProximity(); // this.filters.startDate = moment(localStorage.getItem('dateInDriverproximity')); } distance(lat1, lon1, lat2, lon2, unit) { if ((lat1 == lat2) && (lon1 == lon2)) { return 0; } else { var radlat1 = Math.PI * lat1 / 180; var radlat2 = Math.PI * lat2 / 180; var theta = lon1 - lon2; var radtheta = Math.PI * theta / 180; var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta); if (dist > 1) { dist = 1; } dist = Math.acos(dist); dist = dist * 180 / Math.PI; dist = dist * 60 * 1.1515; if (unit == "K") { dist = dist * 1.609344 } if (unit == "N") { dist = dist * 0.8684 } return dist; } } showFlyOut(): void { this.driverProximityFlyOutComponent.showFlyout(this.locations); } mapClick(item: DriverProximityDetails, routeCode: string, driverName: string, driverPage: boolean, isDeliveryCode: boolean ){ this.spinnerService.show(); this._driverProximityServiceProxys.getDriverProximityDetails(item.orderId, this.filters.locationFilter, isDeliveryCode) .subscribe(result => { if(result!=null){ item= result; this.viewDriverProximitiesMapModal.show(item, routeCode, driverName, driverPage); this.spinnerService.hide(); } }); } }