{"version":3,"sources":["scripts/app-c85f21088a.js"],"names":["angular","module","value","undefined","factory","auth","init","options","OktaAuth","getClient","run","$rootScope","AdobeAnalyticsService","authService","authClient","authManager","tmhDynamicLocale","$translate","tokenService","localStorageService","$state","UserPermissionService","$window","WindowLocationHref","OKTA_CONFIG","$transitions","WalkthroughService","LaunchDarklyService","setFlags","overrideClient","featureFlags","etaAtRiskFeatureFlag","ldclient","variation","notifcationSettingsFeatureFlag","volumeQuoteFeatureFlag","oktaAuth","get","setupTokenManager","set","location","href","split","authenticate","checkAuthOnRefresh","redirectWhenUnauthenticated","isLoggedIn","authorizeUser","getUserData","readAcknowledgements","window","__karma__","sevenLetter","email","toUpperCase","initLD","then","on","userId","getAllWalkthroughs","$promise","data","$on","event","next","current","indexOf","onStart","transition","statePermission","to","name","permission","pageTitle","hasPermission","redirectToProductsPageNotFound","origin","url","localStorage","user","JSON","parse","tracking","provider","$get","_satellite","directive","scope","report","frequency","templateUrl","subscriptionTokenService","decodeToken","token","base64Url","base64","replace","atob","app","$inject","subscriptionToastService","$filter","$templateCache","toastr","toastrConfig","subscriptionSuccess","successText","put","extend","timeOut","positionClass","tapToDismiss","templates","toast","success","subscriptionError","errorText","error","subscriptionDisplayService","ListStringHelper","getDaysOfWeekOptions","display","selected","filteredDaysOfWeek","daysOfWeekOptions","_","filter","day","generateVerificationFrequencyText","subscriptionFrequency","preferences","strongify","text","days","buildListString","map","elm","strings","and","pleaseSelectADay","string","weekly","at","time","toLocaleTimeString","culture","hour","hour12","timeFormat","minute","centralTime","Date","setHours","setMinutes","toLowerCase","daily","monthly","UnsubscribeController","$scope","$stateParams","ReportingService","SubscriptionDisplayService","subscriptionDetail","analyticsService","SubscriptionToastService","reportName","previousRoute","reportConfigId","onInit","items","forEach","find","dayOfWeek","dowString","frequencySummary","go","unsubscribe","deleteSubscription","savedReportConfigId","analyticsUnsubscribeLog","catch","cancel","trackWithVar","controller","SubscriptionController","SubscriptionTokenService","subscriptionType","getSubscription","subscription","displaySubscription","recurringTypeID","length","dowStr","formChanged","daysOfWeekRequired","some","apiParams","join","dayOfMonth","hourOfDay","getHours","minuteOfHour","getMinutes","isMonthlyCustom","isWeekendOption","timeZoneName","submit","createSubscription","insertSubscription","$onInit","reportConfigID","SubscriptionDownloadController","downloadFile","fileId","fileid","fileType","reportFolderName","response","size","saveAs","fileName","$uibModalStack","WizardDataService","ModalService","ReportPersistanceService","$uibModal","restrict","reportInfo","reportConfig","configSchedules","createReportPath","runReportPath","savedReportPath","link","hasSubscriptionPermission","getLocationGroupNames","configItem","hasSubscription","item","savedReportConfigID","createReport","loadingSpinner","editReportConfig","configId","reportConfigPass","deleteReportConfig","onRouteChangeOff","routeChange","modalOptions","closeButtonText","actionButtonText","headerText","bodyText","showModal","result","dismissAll","deleteSavedReportConfig","reload","runReport","savedReportConfig","addReportConfig","preventDefault","notice","loadingModal","open","backdrop","resolve","title","config","reportConfiguration","pickGroup","pick","groupName","dropGroup","drop","Subscribe","reportNameByUser","unSubscribe","changeSubscription","wizardDataService","getSavedReportConfig","selectSavedReportConfig","createSavedReportConfig","finalize","createRequest","reportCategory","category","reportDescriptionByUser","reportDescription","stringify","sortOrder","insertSavedReportConfig","updateSavedReportConfig","updateRequest","input","substring","search","filterSet","lowSearch","push","displayName","addressLine1","addressLine2","addressLine3","addressLine4","unshift","customerModes","modesDisplay","statusDisplay","setupShipmentTypes","shipmentType","modes","selectAllModeStatus","includes","orderModeValue","translateConfig","status","selectAllOrderStatus","allOrderStatus","orderStatusToggled","toggleAll","createValueSet","allModeStatus","modeStatusToggled","createModeValueSet","selectionGroup","every","array","valueSet","orderModeText","LocationService","AddressService","configLocation","locationType","customerList","activeWidget","locationChange","type","codes","details","selectedLocations","locationResults","searchText","addLocation","toString","locationPartyName","createLocationSet","removeLocation","pull","removeAllLocations","unSelected","boxValid","$watch","newValue","oldValue","searchLocation","noResults","useSupplierLocation","customer","searchPartyLocation","partyNumberOrCode","accountSelection","term","limit","locationSearchType","getAddressLine1","address","GetAddressLine1","getAddressLine2","GetAddressLine2","getAddressLine3","GetAddressLine3","getAddressLine4","GetAddressLine4","locations","locationPartyCode","$locale","openStart","$event","stopPropagation","openedStart","openedEnd","openStartBlur","endDatePickerOptions","minDate","date","startDate","openEnd","openEndBlur","startDatePickerOptions","maxDate","endDate","format","DATETIME_FORMATS","setDate","getDate","showWeeks","$q","CustomerService","multiSelect","setupAccounts","customers","GetDisplayName","partyCode","createAccountSet","accountChanged","deferred","defer","types","promise","clickAccount","partycode","changed","removeAllAccounts","selectAllAccounts","accountSel","accountSelDisplay","accountSelectionDisplay","reportHubConfigService","getReportList","getReportConfig","rptid","cat","route","description","getReportBuild","this","i","getSubscriptionSummary","subscriptionSummary","Promise","reject","ReportHubController","ReportHubConfigService","reportBuild","hasCategory","navSelected","state","OverdueOrdersController","ServiceOffering","StatusMappingService","ExcelReportExporterService","ReportDataDisplayService","currentPage","totalRecords","sortBy","sortDescending","gridSort","offset","exportReady","daysText","onTimeText","reportHeaders","order","primaryRefNumber","orderCreateDate","shippingMethod","loadNumber","trackingNumber","orderActivityDate","originName","originLocation","earliestPickDate","latestPickupDate","actualPickupDate","pickupDateDifference","destinationName","destinationLocation","earliestDeliveryDate","latestDeliveryDate","deliveryDateDifference","reportRunning","reportTitle","goToOrderDetails","orderNum","redirectUrl","appConfig","ordersUIBaseUrl","setWindowLocationHref","goToTrackingDetails","trackingDetailsLink","grabOverdueOrders","overdueOrdersData","overdueOrders","from","pageSize","total","orderNumber","dataCheck","getPrimaryRefNumber","formatDate","createdDateTime","services","getTrackingNumber","loads","pickupFrom","pickupDateDiff","dateOverduePickDiff","overduePickup","dateDiff","deliverTo","deliveryDateDiff","dateOverdueDeliveryDiff","moment","now","overdueDelivery","getStatusResourceKey","grabOverdueOrdersDataExport","removeComma","serviceOfferingName","earliestPickupDate","dateOverduePickDiffExport","dateOverdueDeliveryDiffExport","exportData","limitChanged","Math","floor","plannedDateTime","actualDateTime","plannedDateTimeMoment","diff","plannedDate","actualDate","actualDateTimeMoment","overdue","hours","toFixed","daysLength","daysSpaceAdd","hoursSpaceAdd","nowMoment","exportOverdueOrders","exportReportExcel","sortOverdueOrders","ordersSummaryExportService","exportXLSX","params","reportSpinner","ordersSummaryReportExport","close","exportCSV","ordersSummaryReport","orderSummaryDetail","trackingReferenceNumber","account","primaryReferenceNumber","originCity","city","originState","earliestRequestesPickupDate","earliestRequestedDate","latestRequestedPickupDate","latestRequestedDate","earliestScheduledPickupDate","earliestScheduledDate","latestScheduledPickupDate","actualPickupArrivalDate","actualArrivalDate","actualPickupDepartureDate","actualDepartureDate","destinationCity","destinationState","earliestRequestesDeliveryDate","latestRequestedDeliveryDate","earliestScheduledDeliveryDate","latestScheduledDeliveryDate","actualDeliveryArrivalDate","actualDeliveryDepartureDate","orderStatus","orderMode","carrierName","carrier","proReferenceNumber","SavedOrdersSummaryController","savedReportConfigs","reportConfigsSchedules","message","OrdersSummaryController","OrdersSummaryExportService","getConfigVariable","accountViewSize","reportReturn","showAccounts","accountList","grabOrdersSummary","dateDisplay","createDateRange","CreateOrdersSummaryController","$timeout","orderCustomers","widget","range","startDatePass","endDatePass","buttonWidgetHeight","document","getElementById","offsetHeight","scrollPullHeight","showRefreshPrompt","createOrdersSummaryForm","$dirty","analyticsCancelLog","onbeforeunload","clickWidget","widgetClick","scrollIntoView","toState","initRouteChange","cancelCreation","saveReport","clearDates","analyticsUpdateLog","analyticsSaveLog","createOrdersSummarySettup","reportConfigSet","dateRangeValid","wizardScroll","wizardAreaHeight","dateWidgetTop","offsetTop","shipWidgetTop","shipWidgetHeight","finalizeWidgetHeight","scrollTop","reportDepartureTime","getTime","reportArrivalTime","trackWithMultipleVars","reportCreationDuration","reportAccount","reportDate","reportShipmentType","reportFinalize","element","bind","locationReportExportService","locationReportExport","locationReport","SavedLocationController","LocationReportController","LocationReportExportService","reportDataSetup","grabLocationReport","CreateLocationController","locationCustomers","createLocationReportForm","createLocationSettup","pickupWidgetTop","deliveryWidgetTop","reportPickup","reportDelivery","InTransitOrdersController","inTransitData","grabInTransit","inTransitV2","grabInTransitDataExport","exportInTransit","reportPersistanceService","configVariables","orderSummaryConfigID","orderSummaryConfig","locationConfigID","locationConfig","configVariable","clearReportConfig","reportDataDisplayService","DateTimeService","RefDataMappingService","isNil","referenceNumbers","entity","entityId","primary","referenceDataNumber","getCategoryId","datef","getDisplayDateAndTime","dateFormat","subtract","startOf","endOf","level","checktype","exportXlsx","exportCsv","downloadType","downloadReport","downloadDropDown","CaretPositionService","$document","require","attrs","ngModelController","parser","min","allowsNegatives","caretPosition","cleanVal","hasFocus","activeElement","getCaretPosition","nonCleanVals","parseInt","v","cleanInt","setCaretToEnd","max","val","$setViewValue","setCaretPosition","$parsers","$validators","wholeNumberValidator","modelValue","viewValue","$isEmpty","validInt","isNaN","steps","onStepClick","bindScrollEvent","stickProgressHeader","headerBottom","height","children","first","css","party","getAddressLine5","GetAddressLine5","transclude","calendarOptions","startDateOptions","getDateTwoYearsFromNow","endDateOptions","isOpen","openDate","dateType","startUpdated","getLatestDateMinDate","datePickerController","dateOptions","getToday","isOpened","decimalPlaces","integerPlaces","separatorUsed","decimalPlacesUsed","integerPlacesUsed","addCarrotPositions","NUMBER_FORMATS","DECIMAL_SEP","invariantValue","formatter","stringVal","localeVal","decPlaces","intPlaces","$formatters","localeDecimalValidator","validFloat","parseFloat","$setValidity","$modelValue","$render","compareTo","otherModelValue","attributes","ngModel","$viewValue","$validate","ngModelCtrl","enforceMaxLength","maxlength","transformedInput","Number","enforceMaxlength","trackingTagType","trackingTagName","trackingTagValue","trackingTagVariables","track","constant","closeOthers","template","heading","buttonText","addButtonText","onOpenFunc","isDisabled","step","isWide","hideHeading","hidePanel","setHeading","accordionCtrl","addGroup","visited","toggleOpen","canOpen","attr","accordionGroupCtrl","noop","panelTransclude","html","append","$attrs","panelConfig","groups","openGroup","isDefined","$eval","group","groupScope","that","removeGroup","index","splice","trackOrder","OrderService","externalRoutesService","goToShipmentEntry","showCreateOrderButton","widgetService","$resource","API_BASE_URL","getWidgets","method","isArray","widgetDefinitions","RecentOrdersDataModel","NotificationsDataModel","GlanceDataModel","defaultSettingsDataModel","GlanceShipmentsDataModel","userPermissionService","widgets","iconName","dataAttrName","dataModelType","dataModelOptions","statuses","translationKey","active","shippingMethods","timeFrames","atRisks","width","settingsModalOptions","count","isSupplier","shipmentsGlanceDataService","ShipmentService","$interval","startInterval","intervalPromise","searchForShipmentFacets","intervalRunning","subscribers","getShipmentsAtAGlance","shipmentFacet","notifySubscribers","glances","each","subscriber","subGlances","dataModel","optionVal","optionKey","glanceVal","glanceKey","oKeyVal","oKeyKey","gKeyVal","gKeyKey","callback","setUpdateCallback","updateCallback","subscribe","id","widgetScope","$id","remove","sub","service","ordersGlanceDataService","searchForOrderFacets","getOrdersAtAGlance","orderFacet","notificationDismissalService","dismissing","setDismissingFlag","unsetDismissingFlag","databaseStorage","User","$http","setItem","key","saveWidgets","getItem","detailUrlByEntityType","entityType","shipmentsUIBaseUrl","recentOrders","orders","orderDetails","formatCityState","isUndefined","recentOrdersDataModel","WidgetDataModel","prototype","Object","create","call","load","destroy","getRecentOrdersAtAGlance","updateScope","notificationsSettingsController","notificationSettingsLink","myNotifications","AlertService","notifications","NotificationDismissalService","dismissNotification","notification","dismiss","notificationsDataModel","SubscriptionService","getAlerts","alertService","setActiveEventTypes","eventTypes","events","defaultEvents","j","eventTypeNumber","eventNumber","getActiveEventTypesForSave","eventNums","eventName","subscriptionService","submitting","saveSubscription","eventNumbers","save","getSubscribedEvents","shipmentsGlanceDataModel","ShipmentsGlanceDataService","constructor","updateGlances","saveSettings","saveDashboard","glanceShipments","goToShipmentsWithTimeFrame","timeFrame","view","shipmentView","currentTimeframe","predefinedTimeFrame","goToShipmentsWithStatus","goToShipmentsWithMethod","goToShipmentsWithAtRisk","atRisk","glanceShipmentsDataModel","glanceSettingsController","$uibModalInstance","titleDisplay","configuration","ok","errorMessage","titleForm","saveTitleEdit","glanceSettingsForm","glance","goToOrdersWithTimeFrame","goToOrdersWithStatus","goToOrdersWithMethod","goToOrdersWithAtRisk","glanceDataModel","OrdersGlanceDataService","defaultSettingsController","userPreferencesController","preferenceData","setSelectedCulture","cultureName","sc","countryList","setClock","currentDate","ampm","vm","minutes","currentTime","countryChanged","use","savePreferences","unitOfMeasure","country","preferencesConfirmed","eventNotificationPreferences","userPreference","goToNotificationPreferences","dateExample","startIntro","runIntro","weightExample","unitText","reverseLogisticsService","FilterService","ReverseLogisticsResource","openLoadingModal","originalResults","filteredResults","setResults","results","clearResults","filterParams","filterThorough","uniq","ticket","ticketNumber","getDistinctTicketTypeOrStatusFilters","tickets","propertyName","uniqueKeys","distinct","checked","getDistinctCityStateFilters","locationTypes","cityState","getDistinctLocationNameFilters","getFilteredResults","getOriginalResults","getTicketCount","searchParams","referenceNumber","$broadcast","reverseLogisticsSearchController","customersWithRL","ReverseLogisticsService","checkKeyPress","keyCode","setRefNumType","refNumType","selectedRefNumType","refNumTypeMap","setSearchType","selection","searchType","setSortType","sortType","cCodes","pageNumber","ALL","TICKET_NUMBER","RA_NUMBER_POUND","BOL_POUND","CUSTOMER_PO_NUMBER","REFERENCE","PRO_TRIP_NUMBER_POUND","ORDER_POUND","reverseLogisticsResultsController","DocumentManagerService","calculateTotalReturn","processingFee","estimatedReturnCost","collapseFilter","filterType","expandFilter","getFilters","searchResults","filters","ticketTypes","ticketStatuses","cityStates","locationNames","getLocationInfo","ticketType","originalDestination","returnOrigin","getLocationLabel","getTicketDetail","getTicket","ticketId","ticketDetail","ticketStatus","rLSearchResults","pageChanged","onCityStateClick","toggleCheck","checkedCityStates","refreshFilterParams","totalTickets","openDocumentViewer","resolveObject","documents","DocumentService","getReverseLogisticsDocuments","setTicketTypeFilterParams","setTicketStatusFilterParams","setCityStateFilterParams","setLocationFilterParams","refreshResults","cityStateFilters","originalOrigin","returnDestination","locationFilters","setSortDescending","sortDesc","ticketStatusFilters","ticketTypeFilters","setValuesOnInstantiation","hideFilters","showNoResultsMessage","showCollapseButton","displayLimit","cityStatesDisplayLimit","locationNamesDisplayLimit","ticketStatusDisplayLimit","ticketTypeDisplayLimit","reverseLogisticsDetailController","customerSettings","notes","refNumTypes","backToResults","calculateTotals","ItemInformation","Items","Active","Salvageable","formatPhoneNumber","phone","formatDateTime","dateTime","getCustomerPickup","Carrier","CustomerPickUp","getDay","getEnteredByName","test","getMonth","months","month","getProcessingFee","fee","ProcessingFee","getProTripNum","proTrip","ReferenceNumbers","refNum","RefNumTypeRdn","Value","getRAEnteredDate","RaEnteredByDateTime","getRANumber","RANum","getRefNumType","Rdn","Description","getReturnCarrier","ReturnCarrier","getSealIntact","SealIntact","getSealSigned","SealSigned","getStatus","getTicketType","getTotalWeight","ActualWeight","Quantity","getTotalQty","getYear","year","goToOrderDetail","CustomerOrderNumber","openNoteModal","TicketId","onlineNote","OnlineNote","CreatedBy","firstName","lastName","CreateDateTime","Note","ActionType","DisplayInOnline","createNote","stopRoleMap","2094","2096","5138","5139","returnCost","EstimatedReturnCost","returnMiles","ReturnMiles","bolShipped","TotalBolPieces","bolSigned","TotalPiecesSignedFor","sealNumber","SealNumber","originalOriginLocation","originalDestLocation","returnOriginLocation","returnDestLocation","calls","reverse","Locations","StopRole","CallLogs","log","callParty","CallParties","CallPartyId","Contact","Name","Phone","Email","extension","PhoneExtension","CallDateTime","comments","Comments","addNoteController","add","resendInvitationController","InvitationService","invitation","processing","requestedBy","resendInvitationCompleteController","servicePerformanceReportController","dataComplete","getCustomersForRole","cCodeList","beginDate","periodBeginDate","beginDateDisp","getDisplayDate","endDateDisp","onTime","onTimePicks","onTimePickUpPercent","isEmpty","onTimeDrops","onTimeDeliveryPercent","pickCount","pickupCount","pickupFailCount","deliveryCount","deliveryFailCount","noZero","servicePerformance","freightMvmt","avg_elt","avgEnteredLeadTime","avg_pdt","avgPickupDwellTime","avg_tt","avgTransitTime","avg_ddt","avgDropDwellTime","avg_tct","avgTotalCycleTime","onTimePeriod","otPeriod","sbcp","sbcd","$","timePeriod","percent","ordersOverviewReportController","partyCodeList","orderStatusList","newArray","datetype","excelexport","exportfilename","dataexport","customerOrderNumber","partyCodeName","orderOriginPickupName","orderOriginPickupCity","orderOriginPickupState","earliestRequestedPickupDate","actualPickupArrival","actualPickupDeparture","orderDestinationDeliveryName","orderDestinationDeliveryCity","orderDestinationDeliveryState","earliestRequestedDeliveryDate","actualDeliveryArrival","actualDeliveryDeparture","loader","loading","dataexportfields","CustomerModesList","getCustomerModes","getDisplayArray","shippingMethodList","checkboxOrderStatusChanged","OSCount","SelectedOS","showButtonOS","selectAllOS","checkAllOrderStatus","checkboxShippingMethodsChanged","SMCount","SelectedSM","showButtonSM","selectAllSM","checkAllShippingMethods","getReport","modal","prop","noDataMessage","noStatusModeMessage","generatingMessage","orderStatusArray","shippingMethodArray","accountsArray","dataflatexport","createOrderStatusArray","createShippingMethodArray","createAccountsArray","getShippingMethodSelections","getOrderStatusSelections","getAccountsSelections","substr","beginDatePass","has","mode","accounts","historicOrders","partyCodesStr","modeStr","statusStr","dataexportresults","returnDataLogic","dataLength","displayMessages","exportCompleteExcelFile","triggerHandler","SelectedAccounts","originalArray","dupCheckOn","arrayType","removeDuplicates","col","counter","Text","partyName","columnCounter","cleanArray","lookupObject","cols","strdate","String","openBegin","openedBegin","beginDateOptions","jsonObject","csv","convertToCSV","exportedFileName","blob","Blob","navigator","msSaveBlob","createElement","download","URL","createObjectURL","setAttribute","style","visibility","body","appendChild","click","str","line","GAQAccessorialService","GAQService","QuoteHistoryService","QuoteHistoryTransformService","QuoteService","card","isMetric","itemDdlRefData","quoteId","stillUtc","utc","toDate","localdt","local","toISOString","prepForStateChange","quoteRequestId","isShippable","getQuoteDetails","transform","transformedQuote","buildParams","viewResults","viewResultsCallback","reQuote","reQuoteCallback","setInitialOrderState","merge","rawQuoteParams","getRequestType","quoteResults","isAfterTwoPMETLQuoteRequest","pickupDate","reRouteQuoteRequestScreen","isTeam","isTeamRequest","getQuote","quotes","truckloadQuotes","flatbedQuotes","ltlQuotes","quote","transportModeType","specialServiceList","todayDate","isLocalTimePastTwoPMEastern","noQuotesFound","BolCommentService","LocationSelectionHelperService","constructFilterParams","stateProvince","adminDistrictCode","countryCode","determineLocationRefinementMethod","locationCode","getLocation","locationPartyNumberOrCode","isZip","getCities","zipCode","postalCode","getSpecificLocation","resultSet","specialRequirementCodes","handleRateDescription","rateList","rate","rateCodeValue","rateDescription","hydrateCustomer","cust","customerCode","hydrateItems","itemList","commodityName","productName","weight","actualWeight","prefillComplexFields","hydrateItemSearch","getSearchItem","prefillPackaging","prefillTemperature","prefillFreightClass","packagingCode","packaging","Packaging","refDataCode","temperatureSensitiveCode","tempCategory","TemperatureSensitive","freightClass","FreightClass","hydrateLocation","capCities","determineAddressCityName","destCity","destinationRefinement","destination","originRefinement","all","restructureLocation","Array","hydrateQuoteCharges","quoteDetails","resultQuotes","quoteDetail","totalCharge","totalAccessorialCharge","totalAccessorial","quoteHistoryQuote","quoteDetailList","originAccessorials","getOriginAccessorialsWithSelections","destinationAccessorials","getDestinationAccessorialsWithSelections","overallAccessorials","getOverallAccessorialsWithSelections","accessorialList","isTruckload","transportModeList","isTransactional","deliver","pickup","getAQuoteParams","shipDate","useMetric","accessorials","constructQuoteHistoryRequest","customerCodeList","stateProvinceCode","countyRegion","userName","page","quotedStartDate","quotedEndDate","quoteStatusList","shipStartDate","shipEndDate","sourceSystemList","getTransactionalPricingFlag","QuoteHistoryController","quoteHistory","refDataDDLs","userPreferences","handleCustomer","request","shouldHideSeeMore","handleQuoteIdSearch","handleCanViewAnyone","canViewAnyone","handlePagination","pageLimit","handleStatuses","statusFilters","statusFilter","getQuoteHistory","quoteHistorySummaryList","translateStatus","totalQuotes","toggleCustomer","isEqual","isVisible","toggleStatusFilter","quoteStatus","code","customerDisplayLimit","dateFilters","tagColor","drawItemService","calculateDates","po","minBy","requestedPickupStartDate","isSameOrBefore","earliestDate","getRawDateTime","latestDate","delivery","maxBy","requestedDeliveryStartDate","aggs","quantity","sumBy","itemCount","createdViaPurchaseOrder","serviceOffering","displayKey","modeDescription","modeId","serviceTypeDescription","serviceTypeId","customerNumber","billToNumber","shipWithNumber","newRefNums","stepOneValid","stepTwoValid","itemUpdate","purchaseOrderItemId","getItems","getOrder","getTotals","setCustomer","clear","drawSearchController","DrawItemService","PurchaseOrderService","setDateDefaults","searchByDate","PICK","requestedPickupEndDate","getDateAddDays","endDateSelection","startDateSelection","DELIVERY","requestedDeliveryEndDate","dropDownCustomer","getPoDrawCustomers","poCustomers","onSelectedDropDownCustomerChange","getRefDataCategoryDDLs","defCountry","countries","countryStates","getStates","destinationCountry","currentParams","pagingInfo","totalItems","sortSelect","getDisplayDateOrTime","$parent","toggleSearchByDate","purchaseOrderNumber","customerItemId","destinationStateProvince","startDateOpened","endDateOpened","countryDropChanged","orderBy","orderByDirection","availableItems","purchaseOrderItems","hasNoResults","sortSelected","sortPieces","getCityStateProvince","physicalAddress","findRdnByValue","x","addAll","addItem","outerPackType","commodity","sku","upc","plu","outerPackWeight","weightUom","outerPackIsMetric","getItemId","availableQuantity","lineItemNumber","totalInsuranceValue","innerPackTotalValue","flatbed","hasDefaultPackaging","createOrder","getPreferences","$current","drawModalController","OrderConfirmationService","OrderTransformService","distributeTotal","propertyType","camelCased","slice","distributed","isLocationHomogenous","refData","displayDate","confirmation","getConfirmation","setStep","totalWeight","totalPallets","totalPalletSpaces","ismeridian","hourStep","minuteStep","relatedLocationId","addressName","dryReceivingHours","partyNumber","generalAddress","latestTime","getBeginningOfDay","refreshLocations","getWeightMeasurement","onPickupSelected","pickupHasNoResults","dryShippingHours","earliestTime","onDeliverySelected","shippingHours","dayName","getWeekDayName","dayClosedKey","dayOpenTimeKey","openTime","latestDateOptions","updateTotal","camelCasedPropertyType","earliestDateOptions","earliestTimeChanged","latestTimeChanged","showValidationError","validations","validationMessages","pickDeliverSequenceValid","latestPickLessThanEarliestDelivery","latestPickupTime","earliestDeliveryTime","submitOrder","drawForm","$valid","customerOrderRequest","getCustomerOrderSaveRequest","$save","hasError","setOrderConfirmation","errors","setPackagingTypeAllItems","packagingType","bolContext","bindToController","controllerAs","DocumentHelper","customerInfo","canViewBOL","Order","hasCustomerRole","statusRDN","serviceStatus","incomplete","viewBOL","showDocument","encodeURIComponent","CarrierLogService","CarrierRuleService","InteropService","getLoadNumber","isMultiLeg","getCarrier","showCarrier","carriers","orderHasNoService","serviceHasNoLoad","loadHasNoCarriers","carrierHasNoReferenceNumbers","getCarrierProNumber","getReferenceNumber","refNumberType","referenceNumberType","refDataNumber","getOrderedDateLabel","orderedDateLabel","actualArrivalDateTime","scheduledOpenDateTime","getOrderedDate","returnString","utcDateTime","getDeliveredDateLabel","deliveredDateLabel","getDeliveredDate","deliveredDate","getProgressBarCarrierLogInformation","carrierLogs","mostRecentCarrierLogEvent","getCarrierLogLastLocation","getHasDLTrackingReasonCode","driverLocation","carrierLogLastLocation","trackingReasonCode","hasDLTrackingReasonCode","redirectToOnlineOne","baseUrl","legacyOnlineBaseUrl","currentUrl","carrierProNumber","orderedDate","hasLoadViewPermission","getDisplayTime","rerun","warehouseDetailsController","locationInfo","operationHours","phoneNumber","locationToUse","useReceivingHours","tempControlledReceivingHours","tempControlledShippingHours","weekDays","dayOperationHour","closeTime","tryToGetLockAgainModalController","LockService","enableButton","isTryAgainButtonDisabled","lockOrder","referenceNumberEditController","addPrimaryRefNumberToBillTo","billTo","primaryRefNum","isPrimary","primaryBillToReferenceNumTypeRDN","addSecondaryRefNumberToCustomer","secondaryRefNum","primaryCustomerReferenceNumTypeRDN","addShipWithRefNumberToCustomer","shipWithRefNum","isOrderBad","billTos","secondaryRefNumber","shipWithRefNumber","isConfNum","isTrackingNumber","orderRefNumsFilter","filterBillToRefNums","filterCustomerRefNums","referenceNumberDetailsController","proNumber","setProNumberAndCarrierName","proNumberRDN","firstLoad","k","customerRefNumsFilter","hidePrimaryReferenceNumber","pickupEditController","originLocationResults","bolRefNum","puRefNum","refNumbFilter","test1","test2","editAllowed","openEarliestDate","earliestDateOpened","hstep","mstep","hasAddLocation","openLatestDate","latestDateOpened","uiEarliestTime","uiLatestTime","addNewLocation","pickupNeedsRefinement","supplier","supplierPartyCode","newLocation","pickupForm","$setDirty","uiLatestDate","dayCloseTimeKey","refreshOriginLocations","dropLocationNumber","pickLocationNumber","specialInstructions","uiEarliestDate","pickupDetailsController","refNumberFilter","pickupWarehouseDetails","locationDetail","displayDryHours","warehouseDetails","getDisplayDateTime","orderDetailsController","OrderLockHelper","NotificationService","OrderLockPromptService","ConversionService","OrderEditRulesService","UnitsOfMeasurementService","setUnitsOfMeasurement","lock","cancelInverval","interval","lockTimer","updateOrderDetails","releaseOrderLock","reloadPage","warn","d","getDefaultWeightRDN","weightUnitRDN","getWeightUnitRDNFromItem","sendTrackingModal","UserServiceHelper","getBillToRefNum","releaseOrderLockSync","QTY","getOrderForEdit","oneAtATime","orderIsDraw","sourceRDN","editRules","actionKey","allowed","reorder","createOrderUrl","redirectToBetaPage","createRedirectBetaPageUrl","initialize","orionStatus","orderIsCanceled","conditionRDN","hasEditPermission","hasReorderPermission","canEditShippingMethod","canEditPickupFrom","canEditDeliverTo","canEditShippingItems","unitRDN","isStackable","unitLength","unitWidth","unitHeight","billToRefNum","getDisplayName","serviceOfferingGenericType","serviceOfferingIconUrl","isHazmat","isHazardous","offering","genericType","sections","headerUrl","complete","validator","customerValid","disabled","isEditSection","charges","serviceOfferingValid","onOpen","pickupValid","deliveryValid","itemsValid","itemSummary","lineItems","insuranceValue","pallets","customerAndServiceOfferingValid","getUserPreferenceWeightUoM","uomTranslation","getUomTranslationByRefNum","getLocationDisplayName","getAll","cCode","submittingOrder","showValidationErrorModal","startDateTimeLessThanOrEqualEndDateTime","getCustomerOrderUpdateRequest","orderService","$update","orderDetailsForm","goBack","history","back","cancelOrder","cancelModalOptions","getOrderEditRules","serviceStatusRDN","$setPristine","windowOnBeforeUnload","returnValue","windowOnnUnload","onunload","carrierLogExpanded","carrierLogsLoading","expandCarrierLogs","getLocationDisplay","loc","summaryFieldUpdates","summaryUpdate","fieldName","inSummaryUpdate","$watchCollection","newVal","fieldChangedName","valueSum","getItemByRefNum","isFinite","convertLBtoKG","convertKGtoLB","updateSummary","toParams","fromState","newOrderDetailsController","reactOrderDetailsUrl","lockExpiredModalController","itemEditController","ItemService","ItemServiceHelper","FormService","setDDLValByRdn","tempCatRdn","tc","hydrateItem","itemId","itemDetails","isFlatbed","temperatureCategoryRDN","packagingTypeRDN","addSuggestedShipmentItem","suggestedItem","itemFilter","itemDetail","isNew","setPreviousItemsTouched","setUnitsOfMeasurment","addDefaultItemPoRefNum","addDefaultStackable","setFocusToAddedItem","registerItem","ieSelectFix","addNewlyAddedItem","isHot","qty","tarp","tarpTypeRDN","loadingTypeRDN","equipment","itemEquipmentRDN","maxTrailerAge","trailerage","requiredStrapsCount","straps","requiredChainsCount","chains","coilRacks","lockBars","locksbars","equipmentHeight","inUomRefNum","equipmentWidth","equipmentLength","ftUomRefNum","freightClassRDN","poNum","palletSpaces","unitQuantity","totalTrailerFeet","trailerFeet","setItemAsVisited","last","focus","deregisterItem","hasAddNewCommodityPerTrans","hasCreateNewCommodityInPartyCatalog","searchItemResults","newItemRefTypes","isStackableClick","itemHasPoRef","poRefNum","onItemSelected","cmdty","addShipmentItem","addDrawItem","convertedItem","unitRdn","lineItemId","addCatalogShipmentItem","isAddCatalogShipmentItem","showFlatbedAttributes","getWeightUomTranslationByRefNum","weightUnitRDNFromItem","removeItem","removed","itm","$$hashKey","maxItemSearchResults","itemsNoResults","maxSearchResultLimit","refreshSearchItems","searchHelper","showMaxItemSearchResults","showNoResultsFound","searchingItems","setDropdownSize","changeWeightUom","uom","refNumFilter","itemDetailsController","toggleItemDetails","expanded","getPackagingByRefNum","getDdlValueByCategoryAndRefNum","getDimensionsUOMByRefNum","getTarpTypeByRefNum","getLoadingTypeByRefNum","getEquipTypeByRefNum","getClassByRefNum","getTempCatByRefNum","getTempCategoryDisplay","tempCategoryDisplay","requiredTemperatureLow","requiredTemperatureHigh","temperatureUomRDN","displayFlatSpec","getStackableDisplay","getUomTranslation","itemIsTempControlled","deliveryEditController","deliveryLocationResults","deliveryRefNum","earliestDateDisabled","latestDateDisabled","deliveryNeedsRefinement","deliveryHasNoResults","deliveryForm","refreshDeliveryLocations","deliveryDetailsController","deliveryWarehouseDetails","chargesDetailsController","RefDataMapping","setHeaderLabel","charge","financialTypeRDN","freightHeader","currencyCodeRDN","customerHeader","baselineHeader","createChargesDisplay","freightTotal","amount","freightChargesExist","freightCharge","rateCodeRDN","customerTotal","customerChargesExist","customerCharge","baselineTotal","baselineChargesExist","baselineCharge","fillChargesDisplayFinancialTypeVacancy","chargesDisplay","chargePlaced","newChargesDisplay","orderEditConfirmationController","isGettingOrderNumber","createNewOrder","returnToDash","orderConfirmationController","ModeTranslatorService","getDateTimeDisplay","isEarliest","setShippingMethodIcon","summary","getSummary","hasViewBOLRole","hasOrderBOLContext","confirmationNumber","showBOLLink","accountName","orderTransportModeIdMap","showLTLMessage","shippingMethodIcon","pickName","pickEarliestDisplay","pickLatestDisplay","deliveryName","deliveryEarliestDisplay","deliveryLatestDisplay","viewBol","viewOrderDetails","getOrderNumber","ValidationErrorService","lengthUom","mUomRefNum","lengthUomLabel","mUom","lengthInUom","cmUomRefNum","lengthInUomLabel","cmUom","widthUom","widthUomLabel","heightUom","heightUomLabel","ftUom","inUom","setAndNullifyUnused","weightUomLabel","kgUomRefNum","kgUom","lbUomRefNum","lbUom","nullifyUnusedUom","nullifyMetric","lengthCmUom","lengthCmUomLabel","widthCmUom","widthCmUomLabel","heightCmUom","heightCmUomLabel","widthInUom","widthInUomLabel","heightInUom","heightInUomLabel","setMetric","orderTransformService","removeEmptyRefNums","removeItemsEmptyRefNums","removeBillToEmptyRefNums","removeServiceEmptyRefNums","getCustomerOrderItems","customerOrderItems","itemInfo","owod","nmfc","innerPackQuantity","IsStackable","TemperatureCategoryRDN","lengthIn","equipmentLengthIn","abs","RefDataNumber","convertRateTypeCodeToRDN","rateTypeRDN","rateTypes","rdn","mapReferenceNumbers","customerOrder","t","getCustomerOrder","customerOrderId","copy","offSet","getTimezoneOffset","orderForEdit","pickupNotes","volumeQuoteId","loadingType","carrierCode","preferredCarrier","carrierPartyNumber","ediFreightTermsRDN","billToReferenceNumber","customerReferenceNumber","mappedCharge","currencyCode","rateQuantity","totalRate","convertedRateTypeRDN","rateTypeCode","rateEntryType","unitRate","rateCodeCode","rateCode","quoteTypeId","salesQuoteId","rateSourceRDN","rateSourceMap","SQ","rateSource","sourceSystemRDN","quoteSeqNum","pickupNumber","bol","deliveryNumber","carrierPreProNumber","CM","CHR-FQ","CHR-FQ Custom","Transactional","Contractual","SGA","ManualQuote","OrderCreateService","isSameDayTruckloadOrder","orderForm","isTruckloadOrder","isSameDayQuote","transit","minimumTransitDays","maximumTransitDays","orderConfirmationService","_order","_confirmation","_summary","_preferences","CreateOrderRefNumberService","getNewRefNumList","CustomerPartyService","getBOLComment","bolComment","searchitems","commodityCode","hazardousDOTName","hazmatClassCode","hazmatPackagingGroup","hazmatTechnicalName","hazmatUNNumber","hazmatEmergencyPhone","refNums","orderRefNums","itself","out","itemMatches","orderRefNum","props","keys","recentCustomers","selectedRecentCustomer","selectedRecentCustomerChange","changeSelectedRecentCustomer","$parse","ctrl","validateDateRange","inputValue","latestDateValidator","isValidDateRange","assign","$observe","isValidDate","earliestDateValidator","pickupController","LocationSelectionHelper","LocationDateHelper","recentOrigins","isQuoteToOrder","locationDateTime","getLocationDateTime","pickupTemp","hydrateLocationDateTime","times","getEarliestAndLatestTimeFromScopeOrder","orderType","scopeOrder","scopeParentOrder","orderPickup","isRecent","onLocationSelected","getRecentOrigins","orderItemsController","ReferenceData","unitVolume","unitDensity","unitsPerPallet","dryTempCategory","clientId","clientIdCounter","setFreightClassByCode","perUnitLength","perUnitLengthUom","perUnitWidth","perUnitHeight","freightClassCode","fc","elements","elementObj","is","WEIGHT","TOTAL_INSURANCE_VALUE","PALLETS","$emit","handleTransactional","isNonLTLFlatbedTransactional","hasTransactionRate","isFlatbedRequestType","FLATBED_ONLY_RDN","shouldAddNewCard","asyncItemSelected","readOnlyProperties","firstFreightClass","freightClassList","isFreightClassExist","isItemAltered","setLengthUomFt","setLengthUomIn","setWidthUomIn","setHeightUomIn","setWeightUomLb","setWeightUomKg","resetItemSummary","getFlatbedLength","getFlatbedWidthAndHeight","flatbedOnlyEquipment","ItemEquipment","modeController","ServiceOfferingMapping","confirmModeChange","modeChangedConfirmation","setModelServiceOffering","setViewServiceOffering","form","oldValueEqualsNewValue","userDoesntHaveAnyCommodities","modeChangedToFlatbed","modeChangedFromFlatbed","tl","getServiceOfferingId","ltl","bulk","intermodal","serviceOfferings","serviceOfferingTL","serviceOfferingFB","serviceOfferingLTL","serviceOfferingBULK","serviceOfferingInterModal","deliveryController","recentDestinations","deliveryTemp","orderDelivery","setQuoteToOrderMinDate","getRecentDestinations","requstType","customerController","customerChanged","dirtyRefNums","askingToKeepCustomer","selectNewCustomer","isSingleCCode","createOrderCustomers","onSelectedRecentListCustomerChange","carriersController","preferredCarriers","onSelectedDropDownCarrierChange","notificationPreferencesController","SubscriptionsEventsService","activeSubscriptions","number","inApp","initialEvents","eventTypeNumbers","notificationPreference","e","saveNotificationPreferences","shouldEmail","goToUserPreferences","goToMergeAccounts","mergeAccountsUrl","myOrdersController","orderResults","filtersChanged","showTimeFrameHead","showShippingHead","showStatusHead","concat","methods","ranges","redirectToNewMicrosite","orderDetailUrl","facet","showTimeFrame","showShipping","showStatus","ceil","isRefNumberSearched","removeStatus","removeShippingMethod","removeRange","isStatusActive","inArray","isShippingMethodActive","isTimeFrameActive","shippingItemClicked","timeframeItemClicked","statusItemClicked","sortyByChanged","updatePage","notify","removeRefNumberSearch","onSearchKeyPress","displayStatus","resourceKey","displayCarrier","serviceOfferingNumber","displayProNumber","getServiceOfferingImageUrl","getDisplayPlannedDateTime","serverDateTime","dateParts","timeParts","plannedEarliestDate","plannedEarliestTime","getDisplayActualDateTime","actualArrivalTime","altKey","ctrlKey","shiftKey","loginController","loggedIn","render","getUserDataAndRedirect","login","deltaY","pageYOffset","documentElement","toggleClass","selectedState","navOptions","subNav","redirectToMicrosite","topNavContainsActiveSubNav","topNav","InternalHeaderController","OrderEntryPromptService","APPLICATIONS","WalkthroughHelper","searchBaseUrl","reportsUIBaseUrl","InternalHeaderService","$location","AcknowledgementHelper","MERGE_ACCOUNTS","ieBannerKey","walkthroughTimeOffset","introExitTimeStamp","introStartTimeStamp","introStepsViewed","introRunning","userApplications","closedBannerIds","userAppLinks","application","isEnabled","applicationId","Online1","appLink","isCurrentApp","Online2","bannerList","getBannerMessageByAppId","banners","banner","bannerStartDisplayTime","fromDate","fromTime","bannerEndDisplayTime","toTime","IntroOptions","showStepNumbers","exitOnOverlayClick","exitOnEsc","nextLabel","prevLabel","skipLabel","scrollToElement","doneLabel","disableInteraction","hideMaintenanceBanner","bannerMessageId","selectedIndex","sessionStorage","getInitials","stepViewed","introExited","recacheWalkthroughs","walkthrough","getCachedWalkthrough","insertUserWalkthrough","walkthroughID","WalkthroughID","setIntroRunningFlag","textKey","quotingNavOptions","isSubMenu","orderNavOptions","trackingNavOptions","hasApPermission","hasSecurePayPermission","apNavOptions","rptSet","inPermissionSet","showWalkthrough","Dismissed","dismissAllWalkthroughs","getWalkthrough","parsedSteps","Steps","introTimeOut","callWalkthrough","logOut","getEntryInProgress","logout","onTrackKeyPress","headerTrack","searchParam","headerSearch","isBrowserIE","MSInputMethodContext","hideIEBannerWarning","setSelectedState","onSuccess","transportModeMap","TL","DAIR","IAIR","IMDL","Consol","1481","1480","1336","1293","1084","1482","1483","1484","1486","1477","getAbbreviatedTransportMode","returnVal","adminDistrict","countryName","latitude","lat","longitude","lon","alternateNames","subDistricts","constructGetAQuoteParams","requestType","selectedAccessorials","getSelectedAccessorials","trackAccessorialSelections","dateValue","orderPickupDate","parseZone","getOriginLocation","getDestinationLocation","constructItems","constructAccessorialCodes","setSpecialServiceList","getAQuoteItems","cloneDeep","pieces","deleteTemporyItemFreightClassProperties","handleFreightClass","handleTempCategory","handleDeepFrozen","temporaryProperty","getAllAccessorials","apply","a","accessorial","RefDataCode","constructSpecialRequirementCodes","specialRequirementCode","noRatesCallbackType","getOnlineContact","partyID","contactInfo","emailAddress","quoteSummaryList","noRatesFoundMap","GAQNoRatesCallback","label","quoteHistoryNoRatesCallback","getDestinationAccessorials","getOriginAccessorials","getOverallAccessorials","getAQuote","getLocationAccessorialsWithSelections","createSelectedOverallAccessorial","createSelectedLocationAccessorial","containsSpecialRequirementCode","s","selectAddressController","locationSearchHasNoResults","dateTimeZoneHandling","shouldHighlightLocation","recent","recentLocations","quoteToOrderController","displaySelection","doesInitialLocationNeedRefinement","needsRefinement","editQuote","stateChangeMap","fillTime","timeType","formatLocationData","locationData","getLocationOptions","setDetailsForPreselectedLocation","locationOptions","selectedLocation","locationDateTimes","getShippingMethod","getTemplate","isInitialLocationValid","isTransactionalRate","isTransactionalQuote","getOrderShipDate","isTruckloadQuote","minimumPickupDate","returnToQuotes","setLoadingType","getLoadingTypeData","setLocation","loadingTypes","typeData","toggleInfoBox","shouldShowInfoBox","isTeamQuote","applySalesQuoteInfo","referenceNumberList","referenceNumberTypeCode","hasSalesQuote","hasSQ","app.getAQuote","app.getAQuoteResults","activeStep","customerDisplayName","deliveryFirstCheck","isPickupDatePickerDisabled","pickupFirstCheck","ritem","gitem","itemID","orderItemsConfig","shouldShowFilterByDescription","shouldShowCatalogSearch","isAllowedToRemoveItems","stepNames","isDeliveryDatePickerDisabled","minimumDeliveryDate","dateNoOffset","deliveryDate","orderShipDate","isoUtcDate","forIn","serviceOfferingId","getServiceOfferings","destroyDryShippingHoursWatcher","getOpenTimeFromHours","getCloseTimeFromHours","destroyDryReceivingHoursWatcher","carrierNameDisplay","shouldDisplayMode","getAQuoteResultsController","arrayToParamString","getModeFilters","getCarrierFilters","getAccessorialFilters","useNewQuoteToOrder","hasContractualRate","contractRate","isTruckloadResults","hasTruckload","hasLTL","filterOptionalAccessorials","filteredAccessorials","isOptional","rateListFiltersChecked","getDateRecommenderRequestedDateQuote","areDatesEqual","getDateRecommenderAsapPickupQuote","requestedDateQuote","earliestPickupQuote","getEarliestPickupQuote","isDateBefore","allQuotes","getDateRecommenderBestAlternativeQuote","asapPickupQuote","accessorialDisplayLimit","carrierDisplayLimit","isTruckloadOnlyResult","selectedCarriers","showAdditionalCharges","sort","isTLHazmat","hasTeamResult","dateRecommenderQuotes","dateRecommenderQuotesBreakDown","transactionalQuotes","bestAlternativeQuote","showVolumeQuoteInfoModal","showCargoLiabilitySection","transportModeDescription","cargoLiability","hasVolumeQuoteFeatureFlag","getMaxLiability","maxLiability","totalCost","perPound","minCargoLiability","getLTLQuoteLabel","rateSourceCode","isVolumeQuoteRateSource","getSelectedQuoteIds","valueToArray","shareEmail","quoteIds","sharePrint","quoteIdString","hasQuoteToOrderPermission","getDistinctModes","getDistinctCarriers","getDistinctAccessorials","editQuoteParams","getAddress","getDimensionMeasurement","getEstimatedDeliveryDate","maximumDeliveryDate","getTransitTimeRange","getFormattedPickupDate","changeQuoteSort","sortQuotesList","MAX_VALUE","weightUnitCode","getweightUnitCode","shareQuote","modeFilters","accessorialFilters","carrierFilters","toggleCharges","chargesOpen","accessorialSelected","setAccessorialChecked","RateCode","QuoteRequestId","Checked","getAccessorialChargeTotal","additionalCharges","shouldShowChargeInBreakdown","initiateQuoteToOrder","tlQuoteType","setTLHazmatShipButton","showDateRecommenderQuoteLabel","getDateRecommenderQuoteLabel","quoteLabel","displayShortDate","getDisplayShortDate","getAQuoteCustomerController","isFormAltered","setModeType","setItemsToDry","tempType","createQuoteCustomers","isCustomerTransactional","addNewItem","isNewlyTransactional","gaqFormSelected","setDatePickerOptions","getAQuoteController","$log","setOrderFromExistingRequest","ratingRequest","getRequestTypeFromQuoteDetails","isLTL","requestTypeLtl","getQuoteCustomers","customerResult","requestId","runFinalRequestSetupFunctions","getCustomersWithGAQ","setUnitCodes","removeUnsupportedTempTypes","prefillGAQForm","setPickupDateWithShipDateFromResultEdit","setDimensionValues","resetTeam","generateItem","deleteItem","quoteForm","$invalid","select","clearFieldsOnFormChange","initialOrder","customersWithGaQ","temperatureOptions","temp","linearUnitCode","maxDays","pastRateTime","pickupDateOptions","moveDateBy","buildFreightClassMessage","pickupLocation","deliverLocation","dimensions","getIncompleteFieldMessage","messages","setItemTemporaryProperties","_temporaryIsLoading","_temporarySuggestedFreightClass","_temporaryFreightClassErrorMessage","_temporaryFreightClassFieldsComplete","getFreightClassRequestPayload","Height","getItemHeight","TotalWeight","LinearUnit","WeightUnit","ShipmentDate","Width","Length","OriginCountryCode","CustomerCode","DestinationCountryCode","getAdjustedHeight","adjustedHeight","unitCode","validateRequestPayload","requestPayload","displayWarningMessage","submittedRequestType","requestTypeTruckload","requestTypeFlatbed","checkNonLTLDateTime","showNoHighValueMessage","showNoZeroDollarTLMessage","retrievingQuote","freightClassOptions","isFreightClassRequired","isHazardousClick","isTeamClick","parsedRequestId","setFreightClassRequirement","pickupCountryCode","deliverCountryCode","openPickupDate","pickupDateOpened","openAddressBook","isAddressBookDisabled","showTruckloadLTLButtons","isRequiredForTLAndFB","existingValue","gaqFormSubmitted","getAQuote_Account","getAQuote_PickupDate","getAQuote_Origin","getAQuote_Destination","getAQuote_CommoditiesQuantity","conditions","flag","condition","getWeightUnitCode","isGreyedOut","property","itemSearchInput","dropdownMenu","newWidth","showFreightInfoModal","displayIncompleteFieldsMessage","freightClassFieldsIncompleteMessage","getDensityBasedSuggestion","getItemFromOrderItemsController","getCalculatedFreightClass","post","useSuggestedFreightClass","option","sendAdobeEvent","setSelectedBox","emailQuoteController","showConfirmation","replyTos","docs","send","toAddys","sendEmail","footerController","applicationVersion","showFooter","documentManagerService","isDocumentViewerOpen","unsetIsDocumentViewerOpen","checkAll","noneChecked","allChecked","includePalletLabel","incBol","uibModalInstance","determineAllChecked","allChk","noneChk","ticketid","printAll","shipmentNum","docIds","filepaths","y","loadNumberParam","path","loadNumbers","doc","reduce","accumulator","sendDocument","palletLabel","includeBOL","sendDocuments","sendShipmentDocument","sendShipmentDocuments","shipmentDocumentViewerController","getDocumentLinkAction","getDocumentEmailAction","checkedResults","uploader","cancelAll","setValueToNull","console","transformedDocs","uiDoc","emailAllowed","printAllowed","docType","createdDate","selectAction","linkAction","emailAction","docSource","inputElem","sendShipmentDocumentController","sendDocumentController","docPaths","setDefaults","palletLabelDocs","sendBol","sendPalletlabel","documentId","filePath","filePaths","includeBol","reverseLogisticsDocumentViewerController","deleteAllowed","uncPath","isPending","orderDocumentViewerController","FileUploader","setDefaultLoad","setOrderNumber","sendPalletLabel","transformDocs","getPalletLabelLinkAction","getBolLinkAction","deleteAction","delete","refresh","getBolUrl","urlParams","isRefreshing","orderDocuments","getDefaultorderDocumentsAsync","defaultOrderDocuments","defaultOrderDocs","getDefaultOrderDocuments","upload","uploadAll","invalidFileType","invalidFileSize","headers","Authorization","getAccessToken","removeAfterUpload","onBeforeUploadItem","fileItem","formData","onCompleteItem","progress","uploadform","$setUntouched","fn","filename","lastIndexOf","fileSize","developmentFeatureTogglesController","loadDevFeatureToggles","devFeatureToggles","toggles","getDevelopmentFeatureToggles","featureKeys","toggleKeyValues","toggle","isActive","updateFeatureToggle","featureToggle","saveDevelopmentFeatureToggle","hasPermissionToPage","smallBarChart","d3Service","SmallBarChartLink","d3","chartValue","margin","top","right","bottom","left","color","scale","linear","domain","ordinal","rangeRoundBands","xAxis","svg","axis","orient","outerTickSize","tickValues","arrayLength","info","tickFormat","tip","datagroup","nest","entries","values","querySelector","selectAll","enter","classed","rangeBand","show","hide","dashboardController","WidgetService","resetDashboard","dashboardOptions","loadWidgets","defaultWidgets","loadDashboard","definition","widgetButtons","sortableOptions","placeholder","storage","storageId","hideWidgetName","hideToolbar","dismissAllNotifications","addWidget","serviceAnalytics","ServiceAnalyticsController","freightMovementTitle","dropsTitle","picksTitle","historicalPicksTitle","historicalDropsTitle","freightMovementCurrentMonthTitle","onTimeTitle","toTitle","reportFields","fields","header","field","Error","clickExport","bodyData","_bodyData","strData","_convertToExcel","dataItem","rowItems","curItem","fieldValue","isObject","_objectToString","object","output","grabInTransitData","InTransit","freightMovement","FreightMovementController","freightData","dataGrabber","freight","historicOrdersModes","percentGauge","percentGaugeLink","liquidFillGaugeDefaultSettings","minValue","maxValue","circleThickness","circleFillGap","circleColor","textRiseTime","textVertPosition","textSize","valueCountUp","displayPercent","textColor","otpValue","gaugeValue","moveit","needle","barWidth","chart","chartInset","repaintGauge","padRad","radius","totalPercent","el","percToDeg","perc","percToRad","degToRad","deg","PI","arc2","arc","outerRadius","innerRadius","arc1","arcStartRad","arcEndRad","next_start","startAngle","endAngle","Needle","len","moveTo","delay","ease","duration","tween","percentOfPercent","elementId","gauge","locationX","locationY","textPixels","textFinalValue","textStartValue","fillCircleMargin","fillCircleRadius","textRounder","round","textRiseScaleY","gaugeGroup","dispText","text1","textTween","interpolate","textContent","GaugeTextUpdater","update","newFinalValue","textRounderUpdater","needlemoveit","windowLocationHref","getIndexOfHref","productsUIUrl","DEV_FEATURES","loadDevelopmentFeatureToggles","localStorageKey_DevelopmentFeatureToggles","profilePermissions","loadPermissions","permissions","permissionName","trim","permissionSet","roleName","customerProfile","customersWithRole","hasDevelopmentFeatureAccess","featureName","UserApplicationService","jwtHelper","addTokensToManager","accessToken","idToken","tokenManager","accessTokenKey","idTokenKey","authData","decodedAccessToken","decode","decodedIdToken","identityToken","accessTokenExpirationDate","payload","exp","idTokenExpirationDate","throttle","no_trailing","debounce_mode","timeout_id","last_exec","elapsed","args","arguments","exec","debounce","at_begin","statusMappingService","readyToPlan","partiallyPlanned","planned","partiallyBooked","booked","intransit","delivered","servOffMap","FLATBED_SERVICE_OFFERING","LTL_SERVICE_OFFERING","TL_SERVICE_OFFERING","LTL_TRANSPORTATION","LTL_FLATBED_TRANSPORTATION","LTL_TEMP_CONTROLLED_TRANSPORTATION","TRUCKLOAD_TRANSPORTATION","TRUCKLOAD_TEMP_CONTROLLED_TRANSPORTATION","TRUCKLOAD_FLATBED_TRANSPORTATION","RAIL_INTERMODAL_TRANSPORTATION","DOMESTIC_AIR_TRANSPORTATION","LTL_EXPEDITED_TRANSPORTATION","LTL_TEMP_CONTROLLED_EXPEDITED_TRANSPORTATION","TRUCKLOAD_EXPEDITED_TRANSPORTATION","TRUCKLOAD_TEMP_CONTROLLED_EXPEDITED_TRANSPORTATION","INTERNATIONAL_AIR_HOUSE","INTERNATIONAL_AIR_DIRECT","INTERNATIONAL_OCEAN_NVOCC","DOMESTIC_AIR_SERVICE_OFFERING","INTERMODAL_FULL_CONTAINER_TRANSPORTATION","INTERMODAL_FULL_TEMP_CONTROLLED_TRANSPORTATION","PRODUCE_TRUCKLOAD_TEMP_CONTROLLED_TRANSPORTATION","PRODUCE_LTL_TEMP_CONTROLLED_TRANSPORTATION","BROKER_SOURCING_DIRECT_SHIP_OTHER","CONSOLIDATED_TRANSPORTATION","CONSOLIDATED_TEMP_CONTROLLED_TRANSPORTATION","BULK_TRANSPORTATION","TRUCKLOAD_TEMP_CONTROLLED_SERVICE_OFFERING","LTL_FLATBED_SERVICE_OFFERING","LTL_TEMP_CONTROLLED_SERVICE_OFFERING","SMALL_PARCEL","INTERMODAL_FULL_TEMP_CONTROLLED_SERVICE_OFFERING","BULK_SERVICE_OFFERING","CONSOLIDATED_SERVICE_OFFERING","CONSOLIDATED_TEMP_CONTROLLED_SERVICE_OFFERING","SMALL_PARCEL_TRANSPORTATION","OCEAN","TRUCKLOAD_TAUTLINER","TRUCKLOAD_TAUTLINER_EUROPE","itemName","refDataMappingService","categoryName","categoryMap","getWeightRDNFromLinearUnitRDN","itemMap","cacheItems","PACKAGING","FREIGHT_CLASS","TARP_TYPE","LOADING_TYPE","EQUIPMENT_TYPE","TEMP_CATEGORY","TEMP_UNIT_CATEGORY","SHIPWITH_NUMBER","PICKUP_NUMBER","DELIVERY_NUMBER","BOL_NUMBER","ORION_STATUS","CARRIER_PRO_NUMBER","TRACKING_NUMBER","FREIGHT_TERM_COLLECT","QUOTE_ID","DRY_TEMP_CATEGORY","CUSTOM_TEMP_CATEGORY","CONFIRMATION_NUMBER","PURCHASE_ORDER_NUMBER","CANCELED_CONDITION","FREIGHT_CHARGES","CUSTOMER_CHARGES","BASELINE_CHARGES","LINE_HAUL","USD","CAD","MXN","VENDOR_PO_LINE_NUMBER","FULFILMENT_ORDER_ITEM_IDENTIFIER","PO_DRAW_SOURCE","INCHES_UOM","CENTIMETERS_UOM","FEET_UOM","METERS_UOM","LB_UOM","KG_UOM","FAHRENHEIT_UOM","CELSIUS_UOM","CUBICFEET_UOM","CUBICMETERS_UOM","getReferenceDataByCategory","newItems","refDataCategoryDDLs","promises","refKeys","categoryCode","filteredArray","datum","getDefaultWeightUnitRDN","orderLockPromptService","orderEntryPromptService","isEntryInProgress","setEntryInProgress","notificationService","closeButton","extendedTimeOut","orderProcessed","clickCallback","onTap","allowHtml","monetaryValueFormatService","DisplayToHundredthsPlace","monetaryValue","modalService","modalDefaults","keyboard","modalFade","isError","customModalDefaults","customModalOptions","tempModalDefaults","tempModalOptions","startsWith","defineProperty","rawPos","pos","LDClient","launchDarklyClientId","anonymous","itemSearchInputId","subsetContainer","searchSubArray","filteredSubset","subArray","arrayName","valueFound","subArrayItem","propertyToCheck","searchValue","dateTimeService","getServerDateTime","estTime","tz","firstDate","secondDate","isSame","isBefore","addDays","newDate","fromMoment","toMoment","isValid","setFullYear","getFullYear","getDateFirstOfMonth","dateStr","rawDateTimeInfo","rawDate","rawTime","startTime","endTime","actualArrivalDateTimeInfo","dateInfo","customerService","conversionService","kgValue","lbValue","carrierRuleService","inputField","position","emptySelection","createRange","moveStart","selectionStart","inputElement","createTextRange","move","setSelectionRange","addLogoutFunction","logoutFunction","logoutFunctions","getWithRedirect","responseType","scopes","redirectUri","getRedirectUri","loginInterop","clearData","clearAll","session","exists","signOut","revokeAccessToken","checkApplicationAccess","applications","getUserApplications","userInfo","getCustomerProfilePermissions","err","finally","decodeURIComponent","authToken","isTokenExpired","getIdToken","getPermissions","hash","hashless","replaceState","parseFromUrl","res","tokens","errorCatch","AuthError","errorCode","checkAuthSession","getWithoutPrompt","sessionToken","tokenValues","expiresAt","renew","newAccessToken","newIdToken","baseUri","baseURI","baseNode","getAttribute","protocol","host","pathname","hashIndex","getAcknowledgements","satellite","ruleName","logError","variableName","variableValue","setVar","variableSet","exception","toJson","parseLogin","pagePath","validPageName","pageName","isInternal","getPageName","userType","getUserType","appEventData","site","gaqForm","addressService","$translatePartialLoaderProvider","loadTranslations","translationParts","fromJson","translationPart","addPart","getInvitation","getRoles","getDepartments","getCreateOrderCustomers","transformResponse","appendTransform","defaults","userCustomersResponse","recentCustomerCodes","recentCustCode","getReverseLogisticsCustomers","getInteropToken","userApplicationService","API_COMMON_URL","subscriptionsEventsService","shipmentService","roleService","reverseLogisticsResource","getNotes","getRefNumTypes","reportingService","timeout","reportingModeSet","ordersSummaryCustomers","reportConfigSubscription","getTimeformats","getCultures","getUnitofmeasures","quoteService","purchaseOrderService","PreferredCarrierResource","getRecentOrders","sendTracking","OrderLoadResource","searchGatewayApiBaseUrl","getShipments","getClusterDetails","getClusterDetailsContinent","getClusterDetailsCountry","getClusterDetailsState","releaseOrder","recommendedAddress","addSupplierLocation","addCustomerLocation","innerPacks","masterPacks","GetInvitationExpired","getBOL","getPalletLabel","getInvoice","combine","getBolSettings","CultureRecommendation","getCultureRecommendation","getCultureRecommendations","carrierLogService","AcknowledgementService","Cache-Control","Pragma","acknowledgeAcknowledgement","selectWalkthrough","walkthroughs","currentWalkthrough","AngularState","storedUser","lockOrderNumber","machine","ajax","beforeSend","setRequestHeader","async","newOrderNumber","hoursProperty","getDayNameFromDate","arr","shift","idx","shouldAddProperties","useSupplierCatalog","resource","hiddenField","updateAcknowledgement","acknowledgement","acknowledgements","isAcknowledged","hasAnyNotAcknowledgedAcknowledgements","findIndex","showAcknowledgementByName","myAcknowledgements","valueOf","charAt","showInfoController","sendTrackingController","toAddress","TrackingNumber","subject","emailConfirmationController","recommendedAddressController","recommendation","entered","useRecommended","addressCityLine","useRecommendationResult","useRecommendation","overrideReason","addLocationController","addErrorMessages","addLocationErrors","showLoadingModal","receivedRecommendation","overrodeRecommendation","submittingNewLocation","phoneDialingCode","selectedDialingCode","contact","phoneCountryCode","isOrigin","isDestination","isReadOnly","county","recommendationFound","recommendedModalInstance","overrideCode","customerPartyCode","newLocationForm","dialCodeChanged","locationIsOrigin","locationIsDestination","locationIsBoth","addItemController","mCubedUomRefNum","ftCubedUomRefNum","equipmentTypes","suggestedItems","newItem","perUnitWeightUom","perUnitWeightUomLabel","perUnitLengthUomLabel","perUnitWidthUom","perUnitWidthUomLabel","perUnitHeightUom","perUnitHeightUomLabel","perUnitVolumeUom","perUnitVolumeUomLabel","perUnitDensityUom","perUnitDensityUomLabel","getCreatingItemTitle","transformObject","poNumber","ponum","unitInsuranceValue","perUnitInsuranceValue","perUnitVolume","perUnitDensity","unitWeight","perUnitWeight","isDuplicate","newItemForm","isHotClick","suggestedItemSearchCriteriaChanged","criteria","useThisItem","addDrawController","$compile","invoice","openShipmentDocumentViewer","documentViewerModal","shipmentNumber","compiled","markup","comp","orderNumbers","invoiceService","searchInvoicesController","InvoiceService","MonetaryValueFormatService","displayToHundredthsPlace","invoiceStatus","printStartDate","printEndDate","actualPickupStartDate","actualPickupEndDate","invoiceNumber","listBilllNumber","checkNumber","export","openFromDate","fromDateOpened","fromDateOptions","openToDate","toDateOpened","toDateOptions","displayTax","tax","isTaxCalculated","viewInvoice","invoiceNum","accountSummaryController","invoiceResults","numberFilter","agingBucket","setActive","activeCard","validationModalController","shipmentMapController","geohash","mapsInitializer","graphicsService","displayInfobox","hashData","decode_bbox","target","metadata","hash_key","datapoints","topLeft","bottomRight","infoboxTransit","infoboxDelivered","getPinTotals","totals","totalAtPin","transitTotal","deliveredTotal","zoomLevel","infoboxTransitVisible","infoboxDeliveredVisible","zoom","geometry","bounds","box","seperationOfDetailedOrders","buckets","top_item","hits","_source","order_status","infoboxSizing","viewChanged","pushpins","mapObj","getZoom","getBounds","nw","getNorthwest","se","getSoutheast","getCustomersOrders","displayMode","weatherRefreshPromise","emptyLayer","showControlPanel","showRoadView","showAerialView","showGrayscaleView","showTraffic","showWeather","showLabels","trafficManager","weatherLayerVisible","infobox","showErrorMessage","setErrorMessage","toggleControlPanel","hideTransitInfobox","hideDeliveredInfobox","toggleMapView","mapType","toggleLabels","setView","labelOverlay","Microsoft","Maps","LabelOverlay","visible","hidden","toggleTraffic","toggleWeather","weatherOverlay","layers","weatherLayer","addPins","entities","center_lat","center_lon","Location","Infobox","pin","generatePinsSvg","doc_count","Pushpin","icon","anchor","Point","Events","addHandler","setMap","hashRect","LocationRect","fromCorners","newZoomLevel","center","tdata","ddata","deliveredData","transitData","detailedOrders","loadMap","mapInitialized","Map","credentials","bingMapKey","mapTypeId","MapTypeId","road","showLocateMeButton","showMapTypeSelector","showZoomButtons","minZoom","maxZoom","loadModule","trafficOverlay","responseStatus","Traffic","TrafficManager","emptyOverlay","EmptyOverlay","CustomOverlay","onAdd","container","setHtmlElement","insert","customWeatherOverlayOptions","weatherApiKey","series","seriesInfo","radarFcst","m","ts","l","fts","tileSources","tileSource","TileSource","uriConstructor","AnimatedTileLayer","mercator","frameRate","loadingScreen","removeSearch","textSearch","initialBox","newLocal","mapSelector","evt","start","className","roadContainer","aerialContainer","grayscaleContainer","hasClass","overlayImage","addClass","removeClass","setMapType","aerial","aerialPanelToggleText","grayscale","bingMapsInitilized","callbackName","script","src","createClusterPinSvg","getInTransitClusteredSingleDigitsSvg","getInTransitClusteredDoubleDigitsSvg","getInTransitClusteredMoreDigitsSvg","getInTransitSvg","getDeliveredClusteredSingleDigitsSvg","getDeliveredClusteredDoubleDigitsSvg","getDeliveredClusteredMoreDigitsSvg","getDeliveredSvg","getRadius","sectors","aRad","z","X","Y","R","drawFullCircle","fullCircleKey","aCalc","sqrt","cos","sin","statusColors","L","circle","sector","donut","verticalOffset","SVGGraphicsElement","In Transit","Delivered","Late","Early","pageNotFoundController","loadingSpinnerController","loginUser","sourceUserId","urlArr","onlineOneWindow","encodedUri","interopErrorModalController","cargoClaimPolicyController","$translateProvider","tmhDynamicLocaleProvider","useLoaderCache","useLoader","urlTemplate","translationsMap","preferredLanguage","fallbackLanguage","localeLocationPattern","$urlMatcherFactoryProvider","$stateProvider","$urlRouterProvider","$httpProvider","resourceLoaderProvider","$injector","$locationProvider","hashPrefix","caseInsensitive","otherwise","abstract","views","footer","translations","content","content@","dbCalls","query","onExit","CustomerPartyCode","quoteHistoryRequest","onEnter","$transition$","stateParams","router","stateService","isNull","clone","configPull","queryService","queryKey","encodeURI","localStorageServiceProvider","jwtOptionsProvider","okta_settings","setPrefix","tokenGetter","whiteListedDomains","unauthenticatedRedirector","interceptors","Load","applicationIds","Inventory","SmallBusiness","Products","ManagedProcurement","Insight","RobinsonLabs","apiUrl","devFeatures","commonApiUrl","issuer","clientID","expireEarlySeconds","autoRenew","pkce","postLogoutRedirectUri"],"mappings":"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","file":"scripts/app-c85f21088a.js","sourcesContent":["'use strict';\r\n\r\nangular.module('NavisphereOnline', ['NavisphereOnline.constants', 'angular-geohash', 'angulartics', 'angulartics.adobe.analytics', 'ngAria', 'ui.router', 'ngResource',\r\n 'pascalprecht.translate', 'tmh.dynamicLocale', 'resourceLoader', 'ui.utils', 'ui.bootstrap', 'ui.select',\r\n 'ngSanitize', 'angularFileUpload', 'ui.dashboard', 'toastr', 'angular-jwt',\r\n 'LocalStorageModule', 'angular-intro', 'uiSwitch'])\r\n .value(\"oktaAuth\", undefined)\r\n .factory(\"authClient\", function() {\r\n var auth;\r\n return {\r\n init : function(options) {\r\n auth = new OktaAuth(options);\r\n },\r\n getClient : function() {\r\n return auth;\r\n }\r\n };\r\n })\r\n .run(['$rootScope', 'AdobeAnalyticsService', 'authService', 'authClient', 'authManager', 'tmhDynamicLocale',\r\n '$translate', 'tokenService', 'localStorageService', '$state', 'UserPermissionService', '$window', 'WindowLocationHref',\r\n 'OKTA_CONFIG', '$transitions', 'WalkthroughService', 'LaunchDarklyService',\r\n function runBlock($rootScope, AdobeAnalyticsService, authService, authClient, authManager, tmhDynamicLocale,\r\n $translate, tokenService, localStorageService, $state, UserPermissionService, $window, WindowLocationHref,\r\n OKTA_CONFIG, $transitions, WalkthroughService, LaunchDarklyService) {\r\n authClient.init(OKTA_CONFIG.options);\r\n var oktaAuth = authClient.getClient();\r\n // Put the authService on $rootScope so its methods\r\n // can be accessed from the nav bar\r\n $rootScope.authService = authService;\r\n\r\n\r\n if(localStorageService.get('auth.data'))\r\n {\r\n authService.setupTokenManager(oktaAuth);\r\n }\r\n\r\n // Set the redirect in localStorage if provided\r\n if (!localStorageService.get('redirectUrl')) {\r\n localStorageService.set('redirectUrl', $window.location.href.split(\"&redirectUrl=\")[1]);\r\n }\r\n\r\n // launch Darkly initialization - do not remove\r\n $rootScope.featureFlags = {};\r\n function setFlags(overrideClient) {\r\n // add flags to rootScope here. ex: $rootScope.featureFlags.*someNameForFeature* = overrideClient || $rootScope.ldclient.variation('*name-of-feature-key*');\r\n $rootScope.featureFlags.etaAtRiskFeatureFlag = overrideClient || $rootScope.ldclient.variation('customer-platform-legacy-dashboard-eta-risk');\r\n $rootScope.featureFlags.notifcationSettingsFeatureFlag = overrideClient ? false : $rootScope.ldclient.variation('customer-platform-notification-settings-uplift');\r\n $rootScope.featureFlags.volumeQuoteFeatureFlag = overrideClient || $rootScope.ldclient.variation('customer_platform_volume_quote');\r\n }\r\n\r\n authService.authenticate(oktaAuth);\r\n\r\n // Use the authManager from angular-jwt to check for\r\n // the user's authentication state when the page is\r\n // refreshed and maintain authentication\r\n authManager.checkAuthOnRefresh();\r\n\r\n // Listen for 401 unauthorized requests and redirect\r\n // the user to the login page\r\n authManager.redirectWhenUnauthenticated();\r\n\r\n if(authService.isLoggedIn()) {\r\n authService.authorizeUser(oktaAuth);\r\n\r\n if (!localStorageService.get('User')) {\r\n authService.getUserData();\r\n }\r\n\r\n authService.readAcknowledgements();\r\n\r\n if($rootScope.ldclient === undefined) {\r\n // only initalize LD when not running tests\r\n if(typeof window.__karma__ === 'undefined') {\r\n var sevenLetter = localStorageService.get('User').email.split('@')[0].toUpperCase();\r\n LaunchDarklyService.initLD(sevenLetter).then(function (ldclient) {\r\n $rootScope.ldclient = ldclient\r\n setFlags();\r\n\r\n // listen for changes in the feature flag, and update the scope variable accordingly\r\n $rootScope.ldclient.on('change', function () {\r\n setFlags();\r\n })\r\n })\r\n }\r\n }\r\n\r\n if(!localStorageService.get('walkthroughs')) {\r\n var userId = localStorageService.get('User').userId;\r\n WalkthroughService.getAllWalkthroughs({ userId: userId }).$promise.then(function (data) {\r\n localStorageService.set('walkthroughs', data);\r\n });\r\n }\r\n } else {\r\n // running tests so override ld client\r\n if($rootScope.ldclient === undefined) {\r\n if(typeof window.__karma__ !== 'undefined') {\r\n setFlags(true);\r\n }\r\n }\r\n }\r\n\r\n $rootScope.$on('$locationChangeStart', function(event, next, current) {\r\n if(!localStorageService.get('redirectUrl') && next.indexOf('redirectUrl') !== -1) {\r\n localStorageService.set('redirectUrl', next.split(\"&redirectUrl=\")[1]);\r\n }\r\n });\r\n\r\n $transitions.onStart({}, function(transition) {\r\n var statePermission = $state.get(transition.to().name).permission;\r\n $rootScope.pageTitle = transition.to().data ? transition.to().data.pageTitle : '';\r\n if (authService.isLoggedIn() && statePermission && !UserPermissionService.hasPermission(statePermission)) {\r\n WindowLocationHref.redirectToProductsPageNotFound();\r\n }\r\n\r\n if(!localStorageService.get('redirectUrl') && !authService.isLoggedIn() && transition.to().name !== 'login' && transition.to().name !== 'pageNotFound') {\r\n localStorageService.set('redirectUrl', $window.location.origin + '/#' + transition.to().url);\r\n }\r\n });\r\n\r\n $rootScope.$on('$locationChangeSuccess', function () {\r\n if($window.localStorage[\"NavisphereOnline.User\"] !== undefined){\r\n var user = JSON.parse($window.localStorage[\"NavisphereOnline.User\"]);\r\n AdobeAnalyticsService.tracking(user);\r\n }\r\n });\r\n }\r\n ])\r\n .provider('satellite', function () {\r\n return {\r\n $get: ['$window', function ($window) {\r\n return $window._satellite;\r\n }]\r\n };\r\n });\r\n\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n \r\n app.directive('reportSubscriptionSummary', [function () {\r\n return {\r\n scope: {\r\n report: '=',\r\n email: '=',\r\n frequency: '='\r\n },\r\n templateUrl: 'app/reporting/subscription/templates/subscriptionSummary.tpl.html'\r\n };\r\n }]);\r\n })();\n(function () {\r\n 'use strict';\r\n \r\n var app = angular.module('NavisphereOnline');\r\n\r\n subscriptionTokenService.$inject = ['$window'];\r\n \r\n function subscriptionTokenService($window) {\r\n \r\n function decodeToken(token) {\r\n\r\n var base64Url = token.split('.')[1];\r\n var base64 = base64Url.replace('-', '+').replace('_', '/');\r\n return JSON.parse($window.atob(base64));\r\n\r\n };\r\n \r\n return {\r\n decodeToken: decodeToken\r\n };\r\n \r\n }\r\n\r\n app.factory('SubscriptionTokenService', subscriptionTokenService);\r\n })();\n(function (){\r\n 'use strict'\r\n\r\n subscriptionToastService.$inject = ['$filter', '$templateCache', 'toastr', 'toastrConfig'];\r\n\r\n function subscriptionToastService($filter, $templateCache, toastr, toastrConfig) {\r\n\r\n function subscriptionSuccess(successText){\r\n\r\n $templateCache.put('../app/reporting/subscription/templates/custom-toast-success.tpl.html',\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
' + $filter('translate')(successText) + '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
'\r\n );\r\n\r\n angular.extend(toastrConfig, {\r\n timeOut: 5000,\r\n positionClass: 'toast-bottom-right',\r\n tapToDismiss: false,\r\n templates: {\r\n toast: '../app/reporting/subscription/templates/custom-toast-success.tpl.html'\r\n }\r\n });\r\n\r\n return toastr.success();\r\n\r\n };\r\n\r\n function subscriptionError(errorText){\r\n\r\n $templateCache.put('../app/reporting/subscription/templates/custom-toast-error.tpl.html',\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
' + $filter('translate')(errorText) + '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
'\r\n );\r\n\r\n angular.extend(toastrConfig, {\r\n timeOut: 5000,\r\n positionClass: 'toast-bottom-right',\r\n tapToDismiss: false,\r\n templates: {\r\n toast: '../app/reporting/subscription/templates/custom-toast-error.tpl.html'\r\n }\r\n });\r\n\r\n return toastr.error();\r\n\r\n }\r\n\r\n return{\r\n\r\n subscriptionSuccess: subscriptionSuccess,\r\n subscriptionError: subscriptionError\r\n }\r\n\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('SubscriptionToastService', subscriptionToastService);\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n subscriptionDisplayService.$inject = ['$filter', 'ListStringHelper'];\r\n\r\n function subscriptionDisplayService($filter, ListStringHelper) {\r\n\r\n var time = new Date();\r\n time.setHours(8);\r\n time.setMinutes(0);\r\n\r\n var strings = {\r\n and: $filter('translate')('AND').toLowerCase(),\r\n on: $filter('translate')('ON'),\r\n at: $filter('translate')('AT'),\r\n daily: $filter('translate')('DAILY'),\r\n weekly: $filter('translate')('WEEKLY'),\r\n monthly: $filter('translate')('MONTHLY'),\r\n pleaseSelectADay: $filter('translate')('PLEASE_SELECT_A_DAY').toLowerCase(),\r\n centralTime: $filter('translate')('CENTRAL_TIME')\r\n };\r\n\r\n function getDaysOfWeekOptions(){\r\n\r\n var daysOfWeekOptions = [\r\n { display: 'SUNDAY', value: 1, selected: false },\r\n { display: 'MONDAY', value: 2, selected: false },\r\n { display: 'TUESDAY', value: 3, selected: false },\r\n { display: 'WEDNESDAY', value: 4, selected: false },\r\n { display: 'THURSDAY', value: 5, selected: false },\r\n { display: 'FRIDAY', value: 6, selected: false },\r\n { display: 'SATURDAY', value: 7, selected: false }\r\n ];\r\n\r\n return daysOfWeekOptions;\r\n }\r\n\r\n function filteredDaysOfWeek(daysOfWeekOptions) {\r\n return _.filter(daysOfWeekOptions, function (day) {\r\n return day.selected;\r\n });\r\n }\r\n\r\n function generateVerificationFrequencyText(subscriptionFrequency, daysOfWeekOptions, preferences) {\r\n\r\n function strongify(text) {\r\n return '' + text + '';\r\n }\r\n\r\n var space = ' ';\r\n\r\n switch (subscriptionFrequency) {\r\n case 'WEEKLY':\r\n var days = ListStringHelper.buildListString(_.map(filteredDaysOfWeek(daysOfWeekOptions), function (elm) {\r\n return $filter('translate')(elm.display);\r\n }), strings.and);\r\n if (days === '') {\r\n days = strings.pleaseSelectADay;\r\n }\r\n var string = strongify(strings.weekly) + space + strings.on + space;\r\n string += strongify(days);\r\n string += '
' + strings.at + space;\r\n string += strongify(time.toLocaleTimeString(preferences.culture, {\r\n hour: '2-digit',\r\n hour12: preferences.timeFormat === '12',\r\n minute: '2-digit'\r\n }) + space + strings.centralTime);\r\n return string;\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n return {\r\n\r\n generateVerificationFrequencyText : generateVerificationFrequencyText,\r\n filteredDaysOfWeek : filteredDaysOfWeek,\r\n getDaysOfWeekOptions : getDaysOfWeekOptions,\r\n time : time\r\n\r\n };\r\n\r\n }\r\n app.factory('SubscriptionDisplayService', subscriptionDisplayService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n UnsubscribeController.$inject = ['$scope','$state','$stateParams', 'ReportingService','SubscriptionDisplayService','subscriptionDetail', 'user', 'preferences', 'analyticsService', 'SubscriptionToastService'];\r\n\r\n function UnsubscribeController($scope, $state, $stateParams, ReportingService, SubscriptionDisplayService, subscriptionDetail, user, preferences, analyticsService, SubscriptionToastService) {\r\n\r\n $scope.subscriptionDetail = subscriptionDetail;\r\n $scope.reportName = subscriptionDetail.reportName;\r\n $scope.email = user.email;\r\n $scope.previousRoute = $stateParams.previousRoute ? $stateParams.previousRoute : 'app.reports.reportHub';\r\n $scope.reportName = $stateParams.reportName;\r\n $scope.reportConfigId = $stateParams.reportConfigId;\r\n $scope.subscriptionFrequency = 'WEEKLY';\r\n\r\n $scope.onInit = function(){\r\n\r\n if(!$scope.subscriptionDetail.items){\r\n\r\n $state.go('app.reports.noSubscriptionAccess');\r\n\r\n }\r\n else{\r\n\r\n var daysOfWeekOptions = SubscriptionDisplayService.getDaysOfWeekOptions();\r\n\r\n _.forEach(daysOfWeekOptions, function (day) {\r\n\r\n var reportDay = _.find($scope.subscriptionDetail.items.dayOfWeek.split(','), function (dowString) {\r\n return dowString == day.value;\r\n });\r\n\r\n if (reportDay) {\r\n day.selected = true;\r\n }\r\n });\r\n\r\n $scope.frequencySummary = SubscriptionDisplayService.generateVerificationFrequencyText($scope.subscriptionFrequency, daysOfWeekOptions, preferences);\r\n }\r\n\r\n };\r\n\r\n $scope.unsubscribe = function(){\r\n\r\n ReportingService.deleteSubscription({savedReportConfigId: $scope.reportConfigId})\r\n\r\n .$promise.then(function(){\r\n\r\n SubscriptionToastService.subscriptionSuccess('UNSUBSCRIBED');\r\n $scope.analyticsUnsubscribeLog();\r\n $state.go($scope.previousRoute);\r\n\r\n })\r\n .catch(function () {\r\n\r\n SubscriptionToastService.subscriptionError('ERROR_UNSUBSCRIBING');\r\n\r\n });\r\n };\r\n\r\n $scope.cancel = function(){\r\n\r\n $state.go($scope.previousRoute);\r\n\r\n };\r\n\r\n $scope.analyticsUnsubscribeLog = function(){\r\n\r\n analyticsService.trackWithVar('unsubscribeRoute', $scope.previousRoute);\r\n\r\n };\r\n\r\n $scope.onInit();\r\n\r\n }\r\n\r\n app.controller('UnsubscribeController', UnsubscribeController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n SubscriptionController.$inject = ['$scope', '$state', '$stateParams', 'ReportingService', 'user', 'preferences', 'SubscriptionDisplayService', 'SubscriptionTokenService', 'SubscriptionToastService'];\r\n\r\n function SubscriptionController($scope, $state, $stateParams, ReportingService, user, preferences, SubscriptionDisplayService, SubscriptionTokenService, SubscriptionToastService) {\r\n\r\n $scope.report = {\r\n reportName: $stateParams.reportName,\r\n reportConfigId: $stateParams.reportConfigId,\r\n subscriptionType: $stateParams.subscriptionType\r\n };\r\n\r\n $scope.getSubscription = function (reportConfigId) {\r\n\r\n ReportingService.subscriptionDetail({\r\n savedReportConfigId: reportConfigId\r\n })\r\n .$promise.then(function (subscription) {\r\n\r\n if(!subscription.items){\r\n\r\n $state.go('app.reports.noSubscriptionAccess');\r\n \r\n }\r\n else{\r\n\r\n $scope.report = subscription.items;\r\n $scope.displaySubscription();\r\n \r\n }\r\n\r\n })\r\n };\r\n\r\n $scope.displaySubscription = function () {\r\n\r\n switch ($scope.report.recurringTypeID) {\r\n case 2:\r\n default:\r\n $scope.subscriptionFrequency = 'WEEKLY';\r\n\r\n if ($scope.report.dayOfWeek.length === 0) {\r\n _.forEach($scope.daysOfWeekOptions, function (day) {\r\n day.selected = 2 <= day.value && day.value <= 6;\r\n });\r\n } else {\r\n _.forEach($scope.daysOfWeekOptions, function (day) {\r\n var reportDay = _.find($scope.report.dayOfWeek, function (dowStr) {\r\n return dowStr == day.value;\r\n });\r\n if (reportDay) {\r\n day.selected = true;\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n\r\n $scope.formChanged();\r\n\r\n }\r\n\r\n $scope.formChanged = function () {\r\n\r\n $scope.frequencySummary = SubscriptionDisplayService.generateVerificationFrequencyText($scope.subscriptionFrequency, $scope.daysOfWeekOptions, preferences);\r\n\r\n };\r\n\r\n $scope.daysOfWeekRequired = function () {\r\n return !_.some($scope.daysOfWeekOptions, function (day) {\r\n return day.selected;\r\n });\r\n };\r\n\r\n $scope.apiParams = function () {\r\n\r\n switch ($scope.subscriptionFrequency) {\r\n case 'WEEKLY':\r\n return {\r\n savedReportConfigId: $scope.reportConfigId,\r\n recurringTypeID: 2,\r\n dayOfWeek: _.map(SubscriptionDisplayService.filteredDaysOfWeek($scope.daysOfWeekOptions), function (day) {\r\n return day.value;\r\n }).join(','),\r\n dayOfMonth: 0,\r\n hourOfDay: $scope.time.getHours(),\r\n minuteOfHour: $scope.time.getMinutes(),\r\n isMonthlyCustom: false,\r\n isWeekendOption: false,\r\n timeZoneName: \"Central Standard Time\"\r\n };\r\n default:\r\n return {};\r\n }\r\n };\r\n\r\n $scope.cancel = function () {\r\n\r\n $state.go($scope.previousRoute);\r\n\r\n };\r\n\r\n $scope.submit = function () {\r\n\r\n var createSubscription = $scope.apiParams();\r\n\r\n ReportingService.insertSubscription(createSubscription)\r\n\r\n .$promise.then(function () {\r\n\r\n SubscriptionToastService.subscriptionSuccess('SUBSCRIPTION_SAVED');\r\n\r\n $state.go($scope.previousRoute);\r\n\r\n })\r\n\r\n .catch(function () {\r\n\r\n SubscriptionToastService.subscriptionError('ERROR_SAVING');\r\n\r\n });\r\n\r\n };\r\n\r\n $scope.$onInit = function () {\r\n\r\n $scope.email = user.email;\r\n $scope.time = SubscriptionDisplayService.time;\r\n $scope.daysOfWeekOptions = SubscriptionDisplayService.getDaysOfWeekOptions();\r\n $scope.previousRoute = $stateParams.previousRoute ? $stateParams.previousRoute : 'app.reports.reportHub';\r\n\r\n\r\n if ($stateParams.token) {\r\n\r\n $scope.token = SubscriptionTokenService.decodeToken($stateParams.token);\r\n $scope.reportName = $scope.token.reportName;\r\n $scope.reportConfigId = $scope.token.reportConfigID;\r\n $scope.previousRoute = $scope.token.previousRoute;\r\n $scope.getSubscription($scope.reportConfigId)\r\n\r\n } else if ($stateParams.subscriptionType === 'change') {\r\n\r\n $scope.reportName = $stateParams.reportName\r\n $scope.reportConfigId = $stateParams.reportConfigId\r\n\r\n $scope.getSubscription($scope.reportConfigId)\r\n\r\n } else {\r\n\r\n $scope.reportName = $stateParams.reportName\r\n $scope.reportConfigId = $stateParams.reportConfigId\r\n $scope.report.dayOfWeek = [];\r\n $scope.displaySubscription();\r\n\r\n }\r\n\r\n };\r\n\r\n $scope.$onInit();\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('SubscriptionController', SubscriptionController);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n SubscriptionDownloadController.$inject = ['$scope', '$stateParams', '$state', 'SubscriptionTokenService', 'ReportingService'];\r\n function SubscriptionDownloadController($scope, $stateParams, $state, SubscriptionTokenService, ReportingService) {\r\n \r\n $scope.$onInit = function () {\r\n\r\n $scope.pageTitle = \"DOWNLOAD_SUBSCRIPTION\";\r\n $scope.token = SubscriptionTokenService.decodeToken($stateParams.token);\r\n $scope.downloadFile();\r\n\r\n }\r\n \r\n $scope.downloadFile = function(){\r\n\r\n ReportingService.downloadFile({\r\n fileId: $scope.token.fileid,\r\n fileType: $scope.token.reportFolderName\r\n })\r\n \r\n .$promise.then(function (response) {\r\n\r\n if(response.data.size === 0){\r\n\r\n $state.go('app.reports.noSubscriptionAccess');\r\n\r\n }\r\n else{\r\n\r\n return saveAs(response.data, [$scope.token.fileName + '.xlsx']);\r\n\r\n }\r\n \r\n })\r\n\r\n }\r\n\r\n $scope.$onInit();\r\n \r\n }\r\n \r\n angular.module('NavisphereOnline').controller('SubscriptionDownloadController', SubscriptionDownloadController);\r\n \r\n })();\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('savedReportDisplay', ['$filter', '$state', '$uibModalStack', 'WizardDataService', 'ModalService', 'ReportPersistanceService', '$uibModal', 'SubscriptionDisplayService', 'UserPermissionService',\r\n function ($filter, $state, $uibModalStack, WizardDataService, ModalService, ReportPersistanceService, $uibModal, SubscriptionDisplayService, UserPermissionService) {\r\n return {\r\n templateUrl: 'app/reporting/savedReportDisplay/templates/savedReportDisplay.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n reportInfo: '=',\r\n reportConfig: '=',\r\n configSchedules: '=',\r\n createReportPath: '=',\r\n runReportPath: '=',\r\n savedReportPath: '=',\r\n preferences: '='\r\n },\r\n link: function (scope) {\r\n\r\n scope.createReport = createReport;\r\n scope.editReportConfig = editReportConfig;\r\n scope.deleteReportConfig = deleteReportConfig;\r\n scope.runReport = runReport;\r\n scope.routeChange = routeChange;\r\n scope.loadingSpinner = loadingSpinner;\r\n scope.Subscribe = Subscribe;\r\n scope.unSubscribe = unSubscribe;\r\n scope.changeSubscription = changeSubscription;\r\n scope.onInit = onInit;\r\n scope.getLocationGroupNames = getLocationGroupNames;\r\n\r\n scope.onRouteChangeOff;\r\n var loadingModal;\r\n\r\n function onInit() {\r\n\r\n scope.hasSubscriptionPermission = UserPermissionService.hasPermission('Report Subscription');\r\n\r\n if(scope.reportInfo.name === \"Location Report\"){getLocationGroupNames()};\r\n\r\n _.forEach(scope.reportConfig.items, function(configItem){\r\n\r\n configItem.hasSubscription = false;\r\n\r\n _.forEach(scope.configSchedules.items, function(item){\r\n\r\n var daysOfWeekOptions = SubscriptionDisplayService.getDaysOfWeekOptions();\r\n\r\n if(item.savedReportConfigID === configItem.savedReportConfigId){configItem.hasSubscription = true}\r\n\r\n _.forEach(daysOfWeekOptions, function (day) {\r\n var reportDay = _.find(item.dayOfWeek.split(','), function (dowString) {\r\n return dowString == day.value;\r\n });\r\n if (reportDay) {\r\n day.selected = true;\r\n }\r\n });\r\n\r\n item.frequency = SubscriptionDisplayService.generateVerificationFrequencyText('WEEKLY', daysOfWeekOptions, scope.preferences);\r\n\r\n });\r\n\r\n });\r\n\r\n }\r\n\r\n function createReport() {\r\n\r\n loadingSpinner('LOADING');\r\n\r\n $state.go(scope.createReportPath);\r\n\r\n }\r\n\r\n function editReportConfig(configId) {\r\n\r\n loadingSpinner('LOADING');\r\n\r\n var reportConfig = _.find(scope.reportConfig.items, ['savedReportConfigId', configId]);\r\n\r\n $state.go(scope.createReportPath, {reportConfigPass: reportConfig});\r\n }\r\n\r\n function deleteReportConfig(configId, reportName) {\r\n\r\n scope.onRouteChangeOff = scope.$on('$stateChangeStart', scope.routeChange);\r\n\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'OK',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_DELETE_THIS_REPORT',\r\n bodyText: $filter('translate')(\"THE\") + ' ' + reportName + ' ' + $filter('translate')(\"REPORT_WILL_BE_PERMANENTLY_DELETED\")\r\n };\r\n\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n\r\n $uibModalStack.dismissAll(result);\r\n\r\n WizardDataService.deleteSavedReportConfig(configId).then(function () {\r\n\r\n $state.reload();\r\n\r\n });\r\n\r\n scope.onRouteChangeOff();\r\n }\r\n },function(result) {\r\n if (result === 'cancel') {\r\n scope.onRouteChangeOff();\r\n }\r\n });\r\n }\r\n\r\n function runReport(configId) {\r\n\r\n var savedReportConfig = _.find(scope.reportConfig.items, ['savedReportConfigId', configId]);\r\n\r\n ReportPersistanceService.addReportConfig(configId, savedReportConfig).then(function () {\r\n\r\n $state.go(scope.runReportPath);\r\n\r\n });\r\n }\r\n\r\n function routeChange(event) {\r\n\r\n event.preventDefault();\r\n\r\n }\r\n\r\n function loadingSpinner(notice) {\r\n\r\n loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () {\r\n return $filter('translate')(notice);\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getLocationGroupNames(){\r\n\r\n _.forEach(scope.reportConfig.items, function (item) {\r\n\r\n var config = JSON.parse(item.reportConfiguration);\r\n\r\n item.pickGroup = config.pick.groupName;\r\n item.dropGroup = config.drop.groupName;\r\n\r\n });\r\n\r\n }\r\n\r\n function Subscribe(report){\r\n\r\n $state.go('app.reports.subscription',{reportConfigId : report.savedReportConfigId, reportName : report.reportNameByUser, previousRoute: scope.savedReportPath, subscriptionType: 'new'});\r\n \r\n }\r\n\r\n function unSubscribe(report){\r\n\r\n $state.go('app.reports.unsubscribe',{reportConfigId : report.savedReportConfigId, reportName: report.reportNameByUser, previousRoute: scope.savedReportPath});\r\n\r\n }\r\n\r\n function changeSubscription(report){\r\n\r\n $state.go('app.reports.subscription',{reportConfigId : report.savedReportConfigId, reportName: report.reportNameByUser, previousRoute: scope.savedReportPath, subscriptionType: \"change\"})\r\n\r\n }\r\n\r\n onInit();\r\n\r\n }\r\n }\r\n }]);\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n wizardDataService.$inject = ['ReportingService'];\r\n function wizardDataService(ReportingService) {\r\n\r\n function getSavedReportConfig(reportInfo) {\r\n\r\n return ReportingService.selectSavedReportConfig({reportName: reportInfo.name}).$promise;\r\n\r\n }\r\n\r\n function createSavedReportConfig(reportInfo, finalize, reportConfig) {\r\n\r\n var createRequest = {\r\n reportName: reportInfo.name,\r\n reportCategory: reportInfo.category,\r\n reportNameByUser: finalize.reportName,\r\n reportDescriptionByUser: finalize.reportDescription,\r\n reportConfiguration: JSON.stringify(reportConfig),\r\n sortOrder: 0\r\n };\r\n\r\n return ReportingService.insertSavedReportConfig(createRequest).$promise;\r\n\r\n }\r\n\r\n function updateSavedReportConfig(reportConfigId, finalize, reportConfig) {\r\n\r\n var updateRequest = {\r\n reportNameByUser: finalize.reportName,\r\n reportDescriptionByUser: finalize.reportDescription,\r\n reportConfiguration: JSON.stringify(reportConfig),\r\n sortOrder: 0\r\n };\r\n\r\n return ReportingService.updateSavedReportConfig({savedReportConfigId: reportConfigId}, updateRequest).$promise\r\n\r\n }\r\n\r\n function deleteSavedReportConfig(reportConfigId) {\r\n\r\n return ReportingService.deleteSavedReportConfig({savedReportConfigId: reportConfigId}).$promise;\r\n\r\n }\r\n\r\n return {\r\n getSavedReportConfig: getSavedReportConfig,\r\n createSavedReportConfig: createSavedReportConfig,\r\n updateSavedReportConfig: updateSavedReportConfig,\r\n deleteSavedReportConfig: deleteSavedReportConfig\r\n\r\n };\r\n }\r\n\r\n app.factory('WizardDataService', wizardDataService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n app.filter('displayLength', function () {\r\n return function (input, length) {\r\n\r\n return input.length > length ? input.substring(0, (length)) + '...' : input;\r\n\r\n };\r\n });\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n //Filter to Search only visible fields and keep selected\r\n var app = angular.module('NavisphereOnline');\r\n app.filter('accountSearch', function () {\r\n return function (input, search) {\r\n\r\n var filterSet = [];\r\n\r\n if (search === undefined) {\r\n return input;\r\n }\r\n\r\n var lowSearch = search.toLowerCase();\r\n\r\n _.forEach(input, function (item) {\r\n\r\n if (item.selected) {\r\n filterSet.push(item)\r\n\r\n }\r\n else if (item.displayName.toLowerCase().indexOf(lowSearch) !== -1\r\n || _.replace(item.addressLine1, null, \"\").toLowerCase().indexOf(lowSearch) !== -1\r\n || _.replace(item.addressLine2, null, \"\").toLowerCase().indexOf(lowSearch) !== -1\r\n || _.replace(item.addressLine3, null, \"\").toLowerCase().indexOf(lowSearch) !== -1\r\n || _.replace(item.addressLine4, null, \"\").toLowerCase().indexOf(lowSearch) !== -1\r\n ) {\r\n filterSet.unshift(item);\r\n\r\n }\r\n\r\n });\r\n return filterSet;\r\n };\r\n });\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('wizardShipmentType', ['$filter', function ($filter) {\r\n return {\r\n templateUrl: 'app/reporting/reportCreationWizard/templates/wizardShipmentType.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n customerModes: \"=customerModes\",\r\n reportConfig: \"=reportConfig\",\r\n modesDisplay: \"=modesDisplay\",\r\n statusDisplay: \"=statusDisplay\"\r\n\r\n },\r\n link: function (scope) {\r\n\r\n scope.setupShipmentTypes = setupShipmentTypes;\r\n scope.selectAllOrderStatus = selectAllOrderStatus;\r\n scope.orderStatusToggled = orderStatusToggled;\r\n scope.selectAllModeStatus = selectAllModeStatus;\r\n scope.modeStatusToggled = modeStatusToggled;\r\n scope.toggleAll = toggleAll;\r\n scope.translateConfig = translateConfig;\r\n scope.createValueSet = createValueSet;\r\n scope.createModeValueSet = createModeValueSet;\r\n\r\n scope.status = [\r\n {\"value\": \"INCOMPLETE\", \"selected\": false}\r\n , {\"value\": \"ORDERED\", \"selected\": false}\r\n , {\"value\": \"BOOKED\", \"selected\": false}\r\n , {\"value\": \"INTRANSIT\", \"selected\": false}\r\n , {\"value\": \"DELIVERED\", \"selected\": false}];\r\n\r\n scope.modesDisplay = '';\r\n scope.statusDisplay = '';\r\n\r\n function setupShipmentTypes() {\r\n\r\n if (scope.reportConfig.shipmentType.modes == 'ALL_ORDER_MODES') {\r\n scope.selectAllModeStatus();\r\n }\r\n else {\r\n\r\n _.forEach(scope.customerModes, function (modes) {\r\n\r\n if (_.includes(scope.reportConfig.shipmentType.modes, modes.orderModeValue)) {\r\n\r\n modes.selected = true;\r\n\r\n }\r\n });\r\n\r\n scope.modesDisplay = scope.translateConfig(scope.reportConfig.shipmentType.modes.split(','));\r\n }\r\n\r\n if (scope.reportConfig.shipmentType.status == 'ALL_ORDER_STATUS') {\r\n scope.selectAllOrderStatus();\r\n }\r\n else {\r\n scope.statusDisplay = scope.translateConfig(scope.reportConfig.shipmentType.status.split(','));\r\n\r\n _.forEach(scope.status, function (item) {\r\n if (_.includes(scope.reportConfig.shipmentType.status, item.value)) {\r\n item.selected = true;\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n function selectAllOrderStatus() {\r\n\r\n scope.allOrderStatus = !scope.allOrderStatus;\r\n scope.reportConfig.shipmentType.status = scope.allOrderStatus ? 'ALL_ORDER_STATUS' : null;\r\n scope.statusDisplay = scope.allOrderStatus ? $filter('translate')('ALL_ORDER_STATUS') : null;\r\n\r\n _.forEach(scope.status, function (item) {\r\n item.selected = scope.allOrderStatus;\r\n });\r\n\r\n }\r\n\r\n function orderStatusToggled(status) {\r\n\r\n status.selected = !status.selected;\r\n scope.allOrderStatus = scope.toggleAll(scope.status);\r\n\r\n scope.reportConfig.shipmentType.status = scope.allOrderStatus ? 'ALL_ORDER_STATUS' : scope.createValueSet(scope.status);\r\n scope.statusDisplay = scope.allOrderStatus ? $filter('translate')('ALL_ORDER_STATUS') : scope.translateConfig(scope.reportConfig.shipmentType.status.split(','));\r\n\r\n }\r\n\r\n function selectAllModeStatus() {\r\n\r\n scope.allModeStatus = !scope.allModeStatus;\r\n scope.reportConfig.shipmentType.modes = scope.allModeStatus ? 'ALL_ORDER_MODES' : null;\r\n scope.modesDisplay = scope.allModeStatus ? $filter('translate')('ALL_ORDER_MODES') : null;\r\n\r\n _.forEach(scope.customerModes, function (item) {\r\n item.selected = scope.allModeStatus;\r\n });\r\n\r\n }\r\n\r\n function modeStatusToggled(status) {\r\n\r\n status.selected = !status.selected;\r\n scope.allModeStatus = scope.toggleAll(scope.customerModes);\r\n\r\n scope.reportConfig.shipmentType.modes = scope.allModeStatus ? \"ALL_ORDER_MODES\" : scope.createModeValueSet(scope.customerModes);\r\n scope.modesDisplay = scope.allModeStatus ? $filter('translate')(\"ALL_ORDER_MODES\") : scope.translateConfig(scope.reportConfig.shipmentType.modes.split(','));\r\n\r\n }\r\n\r\n function toggleAll(selectionGroup) {\r\n\r\n return _.every(selectionGroup, ['selected', true]);\r\n\r\n }\r\n\r\n function translateConfig(config) {\r\n\r\n var display = [];\r\n\r\n _.forEach(config, function (item) {\r\n\r\n display.push($filter('translate')(item));\r\n\r\n });\r\n\r\n return display.join(', ');\r\n }\r\n\r\n function createValueSet(array) {\r\n\r\n var valueSet = [];\r\n _.forEach(array, function (item) {\r\n if (item.selected) {\r\n valueSet.push(item.value);\r\n }\r\n });\r\n\r\n return valueSet.join(',');\r\n }\r\n\r\n function createModeValueSet(array) {\r\n\r\n var valueSet = [];\r\n _.forEach(array, function (item) {\r\n if (item.selected) {\r\n valueSet.push(item.orderModeText);\r\n }\r\n });\r\n\r\n return valueSet.join(',');\r\n }\r\n\r\n scope.setupShipmentTypes();\r\n }\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('wizardLocation', ['UserPermissionService', 'LocationService', 'AddressService', function (UserPermissionService, LocationService, AddressService) {\r\n return {\r\n templateUrl: 'app/reporting/reportCreationWizard/templates/wizardLocation.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n reportConfig: '=reportConfig',\r\n configLocation: '=configLocation',\r\n locationType: '=locationType',\r\n customerList : '=customerList',\r\n activeWidget : '=activeWidget'\r\n\r\n },\r\n link: function (scope) {\r\n\r\n scope.locationChange = locationChange;\r\n scope.addLocation = addLocation;\r\n scope.removeLocation = removeLocation;\r\n scope.removeAllLocations = removeAllLocations;\r\n scope.unSelected = unSelected;\r\n scope.boxValid = boxValid;\r\n\r\n scope.selectedLocations = scope.configLocation.details;\r\n\r\n scope.searchText = '';\r\n\r\n scope.$watch('reportConfig.accountSelection', function (newValue, oldValue) {\r\n\r\n if(newValue !== oldValue) {\r\n\r\n scope.locationResults = null;\r\n scope.selectedLocations = [];\r\n scope.configLocation.codes = null;\r\n if(scope.configLocation.type !== 'ANYWHERE'){scope.configLocation.groupName = null}\r\n\r\n if (scope.searchText.length > 1) {\r\n scope.searchLocation();\r\n }\r\n\r\n }\r\n });\r\n\r\n scope.$watch('searchText', function (searchText) {\r\n\r\n if (searchText.length < 2) {\r\n scope.locationResults = [];\r\n scope.noResults = false;\r\n return [];\r\n }\r\n else{\r\n scope.searchLocation();\r\n }\r\n\r\n });\r\n\r\n scope.searchLocation = function(){\r\n\r\n scope.locationResults = null;\r\n\r\n var useSupplierLocation;\r\n\r\n _.forEach(scope.customerList, function (customer) {\r\n if (customer.selected == true) {\r\n return useSupplierLocation = customer.useSupplierLocation\r\n }\r\n });\r\n\r\n return LocationService.searchPartyLocation({\r\n partyNumberOrCode: scope.reportConfig.accountSelection,\r\n term: scope.searchText,\r\n limit: 20,\r\n locationSearchType: scope.locationType,\r\n useSupplierLocation: useSupplierLocation\r\n }, function (data) {\r\n scope.locationResults = data.items;\r\n \r\n\r\n });\r\n\r\n };\r\n\r\n scope.getAddressLine1 = function(address) {\r\n return AddressService.GetAddressLine1(address);\r\n };\r\n scope.getAddressLine2 = function (address) {\r\n return AddressService.GetAddressLine2(address);\r\n };\r\n scope.getAddressLine3 = function (address) {\r\n return AddressService.GetAddressLine3(address);\r\n };\r\n scope.getAddressLine4 = function (address) {\r\n return AddressService.GetAddressLine4(address);\r\n };\r\n\r\n scope.createLocationSet = function(){\r\n\r\n var locations = [];\r\n\r\n _.forEach(scope.selectedLocations, function (location) {\r\n if (location.selected == true) {\r\n\r\n locations.push(location.locationPartyCode).toString();\r\n\r\n }\r\n });\r\n\r\n scope.configLocation.codes = locations.join(',');\r\n\r\n scope.configLocation.details = scope.selectedLocations;\r\n\r\n };\r\n\r\n function locationChange(){\r\n\r\n if(scope.configLocation.type === 'ANYWHERE'){\r\n\r\n scope.configLocation.groupName = 'ANYWHERE';\r\n scope.configLocation.codes = 'ANYWHERE';\r\n scope.configLocation.details = [];\r\n scope.selectedLocations = [];\r\n scope.locationResults = [];\r\n scope.searchText = '';\r\n\r\n }\r\n else{\r\n scope.configLocation.groupName = null;\r\n }\r\n\r\n }\r\n\r\n function addLocation(location) {\r\n\r\n location.selected = !location.selected;\r\n scope.selectedLocations.push(location).toString();\r\n if(!scope.configLocation.groupName && scope.selectedLocations.length === 1)\r\n {\r\n scope.configLocation.groupName = location.locationPartyName\r\n }\r\n else if(scope.configLocation.groupName && scope.selectedLocations.length > 1\r\n && scope.selectedLocations[0].locationPartyName === scope.configLocation.groupName)\r\n {\r\n scope.configLocation.groupName = '';\r\n }\r\n\r\n scope.createLocationSet();\r\n\r\n }\r\n\r\n function removeLocation(selected) {\r\n\r\n selected.selected = !selected.selected;\r\n _.pull(scope.selectedLocations,selected);\r\n\r\n if(scope.selectedLocations.length === 0)\r\n {\r\n scope.configLocation.groupName = ''\r\n }\r\n else if(!scope.configLocation.groupName && scope.selectedLocations.length === 1)\r\n {\r\n scope.configLocation.groupName = scope.selectedLocations[0].locationPartyName\r\n }\r\n\r\n scope.createLocationSet();\r\n\r\n }\r\n\r\n function removeAllLocations(){\r\n\r\n _.forEach(scope.selectedLocations, function (location) {\r\n\r\n location.selected = false;\r\n\r\n });\r\n\r\n scope.configLocation.details = [];\r\n scope.selectedLocations = [];\r\n scope.configLocation.groupName = '';\r\n scope.configLocation.codes = null;\r\n\r\n }\r\n\r\n function unSelected(location){\r\n\r\n return !location.selected;\r\n }\r\n\r\n function boxValid() {\r\n\r\n return _.every(scope.customerList, ['selected', false]);\r\n }\r\n\r\n }\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('wizardFinalize', [function () {\r\n return {\r\n templateUrl: 'app/reporting/reportCreationWizard/templates/wizardFinalize.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n finalize: \"=finalize\"\r\n },\r\n link: function (scope) {\r\n\r\n }\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('wizardDate', ['$locale', function ($locale) {\r\n return {\r\n templateUrl: 'app/reporting/reportCreationWizard/templates/wizardDate.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n reportConfig: '=reportConfig'\r\n },\r\n link: function (scope) {\r\n\r\n scope.openStart = openStart;\r\n scope.openStartBlur = openStartBlur;\r\n scope.openEnd = openEnd;\r\n scope.openEndBlur = openEndBlur;\r\n\r\n\r\n scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n\r\n var maxDate = new Date();\r\n maxDate = maxDate.setDate(maxDate.getDate() + 365);\r\n\r\n scope.startDatePickerOptions = {\r\n showWeeks: false,\r\n minDate: \"01/01/2015\",\r\n maxDate: maxDate\r\n\r\n };\r\n\r\n scope.endDatePickerOptions = {\r\n showWeeks: false,\r\n minDate: \"01/01/2015\",\r\n maxDate: maxDate\r\n\r\n };\r\n\r\n function openStart($event) {\r\n\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n scope.openedStart = true;\r\n scope.openedEnd = false;\r\n\r\n }\r\n\r\n function openStartBlur() {\r\n\r\n scope.openedStart = false;\r\n scope.endDatePickerOptions.minDate = scope.reportConfig.date.startDate;\r\n\r\n }\r\n\r\n function openEnd($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n scope.openedEnd = true;\r\n scope.openedStart = false;\r\n\r\n }\r\n\r\n function openEndBlur() {\r\n\r\n scope.openedEnd = false;\r\n scope.startDatePickerOptions.maxDate = scope.reportConfig.date.endDate;\r\n\r\n }\r\n\r\n }\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('wizardAccount', ['$stateParams', '$q', '$uibModalStack', 'AddressService', 'CustomerService', 'ModalService'\r\n , function ($stateParams, $q, $uibModalStack, AddressService, CustomerService, ModalService) {\r\n return {\r\n templateUrl: 'app/reporting/reportCreationWizard/templates/wizardAccount.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n customerList: '=customerList',\r\n reportConfig: '=reportConfig',\r\n activeWidget: '=activeWidget',\r\n multiSelect: '=multiSelect'\r\n },\r\n link: function (scope) {\r\n\r\n scope.clickAccount = clickAccount;\r\n scope.setupAccounts = setupAccounts;\r\n scope.selectAllAccounts = selectAllAccounts;\r\n scope.removeAllAccounts = removeAllAccounts;\r\n scope.createAccountSet = createAccountSet;\r\n scope.accountChanged = accountChanged;\r\n\r\n scope.customers = scope.customerList;\r\n\r\n var modalOptions = {\r\n closeButtonText: 'NO_KEEP_ACCOUNT',\r\n actionButtonText: 'YES_I_AM_SURE',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_CHANGE_YOUR_ACCOUNT',\r\n bodyText: 'ALL_INFORMATION_ENTERED_FOR_THIS_ACCOUNT_WILL_BE_R'\r\n };\r\n\r\n function setupAccounts() {\r\n\r\n _.forEach(scope.customers, function (customers) {\r\n customers['addressLine1'] = AddressService.GetAddressLine1(customers.address);\r\n customers['addressLine2'] = AddressService.GetAddressLine2(customers.address);\r\n customers['addressLine3'] = AddressService.GetAddressLine3(customers.address);\r\n customers['addressLine4'] = AddressService.GetAddressLine4(customers.address);\r\n customers['displayName'] = CustomerService.GetDisplayName(customers);\r\n customers['selected'] = false;\r\n });\r\n\r\n if ($stateParams.reportConfigPass) {\r\n\r\n _.forEach(scope.customers, function (item) {\r\n if (_.includes(scope.reportConfig.accountSelection, item.partyCode)) {\r\n item.selected = true;\r\n }\r\n });\r\n }\r\n\r\n if(scope.customers.length == 1){\r\n\r\n scope.customers[0].selected = true;\r\n createAccountSet(scope.customers);\r\n }\r\n\r\n }\r\n\r\n function accountChanged() {\r\n\r\n var deferred = $q.defer();\r\n\r\n if ((scope.reportConfig.drop.types !== 'ANYWHERE' && scope.reportConfig.drop.codes)\r\n || (scope.reportConfig.pick.types !== 'ANYWHERE' && scope.reportConfig.pick.codes)){\r\n ModalService.showModal({}, modalOptions).then(function(result) {\r\n if (result === 'ok') {\r\n deferred.resolve(true);\r\n }\r\n if (result === 'cancel') {\r\n deferred.resolve(false);\r\n }\r\n });\r\n } else {\r\n deferred.resolve(true);\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n function clickAccount(customer) {\r\n\r\n if (!scope.multiSelect && scope.reportConfig.accountSelection !== customer.partycode) {\r\n\r\n accountChanged().then(function (changed) {\r\n\r\n if(changed) {\r\n\r\n removeAllAccounts();\r\n\r\n customer.selected = !customer.selected;\r\n\r\n scope.createAccountSet(scope.customers);\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n else{\r\n\r\n customer.selected = !customer.selected;\r\n scope.createAccountSet(scope.customers);\r\n\r\n }\r\n\r\n }\r\n\r\n function selectAllAccounts() {\r\n\r\n _.forEach(scope.customers, function (customers) {\r\n\r\n customers.selected = true;\r\n\r\n });\r\n\r\n scope.createAccountSet(scope.customers);\r\n }\r\n\r\n function removeAllAccounts() {\r\n\r\n _.forEach(scope.customers, function (customers) {\r\n\r\n customers.selected = false;\r\n\r\n });\r\n\r\n scope.createAccountSet(scope.customers);\r\n }\r\n\r\n function createAccountSet(customers) {\r\n\r\n var accountSel = [];\r\n var accountSelDisplay = [];\r\n\r\n _.forEach(customers, function (item) {\r\n if (item.selected == true) {\r\n accountSel.push(item.partyCode).toString();\r\n accountSelDisplay.push(item.displayName).toString();\r\n }\r\n });\r\n\r\n scope.reportConfig.accountSelection = accountSel.join(',');\r\n scope.reportConfig.accountSelectionDisplay = accountSelDisplay;\r\n\r\n }\r\n\r\n scope.setupAccounts();\r\n }\r\n };\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n reportHubConfigService.$inject = ['UserPermissionService','ReportingService'];\r\n function reportHubConfigService(UserPermissionService,ReportingService) {\r\n\r\n function getReportList(){\r\n var reportSet = ['In Transit Report', 'Orders Overview Report', 'Service Performance Report', 'Overdue Orders Report', 'Orders Summary Report', 'Location Report', 'Oceania Reports'];\r\n return reportSet;\r\n }\r\n\r\n var getReportConfig = function (){\r\n\r\n var reportConfig = [{\r\n 'rptid': 0,\r\n 'title': 'IN_TRANSIT_ORDERS',\r\n 'permission': 'In Transit Report',\r\n 'cat': 'Order Activity',\r\n 'route': 'app.reports.inTransitReport',\r\n 'description': 'VIEW_ALL_ORDERS_THAT_HAVE_BEEN_PICKED_UP_AND_NOT_Y'\r\n },\r\n {\r\n 'rptid': 1,\r\n 'title': 'ORDER_OVERVIEW',\r\n 'permission': 'Orders Overview Report',\r\n 'cat': 'Order Activity',\r\n 'route': 'app.reports.ordersOverviewReport',\r\n 'description': 'CHOOSE_ACCOUNT_STATUS_AND_MODE_TO_CREATE_CUSTOM_OR'\r\n },\r\n {\r\n 'rptid': 2,\r\n 'title': 'SERVICE_PERFORMANCE',\r\n 'permission': 'Service Performance Report',\r\n 'cat': 'Performance',\r\n 'route': 'app.reports.servicePerformanceReport',\r\n 'description': 'VIEW_ON_TIME_PICK_UP_AND_DELIVERY_PERFORMANCE'\r\n },\r\n {\r\n 'rptid': 3,\r\n 'title': 'OVERDUE_ORDERS',\r\n 'permission': 'Overdue Orders Report',\r\n 'cat': 'Order Activity',\r\n 'route': 'app.reports.overdueOrdersReport',\r\n 'description': 'VIEW_ALL_ORDERS_THAT_ARE_LATE_FOR_PICK_UP_OR_DELIV'\r\n },\r\n {\r\n 'rptid': 4,\r\n 'title': 'ORDERS_SUMMARY',\r\n 'permission': 'Orders Summary Report',\r\n 'cat': 'Order Activity',\r\n 'route': 'app.reports.savedOrdersSummary',\r\n 'description': 'CHOOSE_ACCOUNT_STATUS_AND_MODE_TO_CREATE_CUSTOM_OR'\r\n },\r\n {\r\n 'rptid': 5,\r\n 'title': 'LOCATION_REPORTS',\r\n 'permission': 'Location Report',\r\n 'cat': 'Order Activity',\r\n 'route': 'app.reports.savedLocation',\r\n 'description': 'VIEW_ORDERS_PICKING_UP_FROM_OR_DELIVERING_TO_A_SPE'\r\n }];\r\n\r\n return reportConfig;\r\n };\r\n\r\n //Return the only report config for the permissions the user has access to.\r\n var getReportBuild = function(){\r\n\r\n var reportConfig = this.getReportConfig();\r\n\r\n for(var i = 0; i < reportConfig.length ; i++) {\r\n if(UserPermissionService.hasPermission(reportConfig[i].permission) === false) {\r\n delete reportConfig[i];\r\n }\r\n }\r\n return reportConfig;\r\n\r\n };\r\n\r\n var getSubscriptionSummary = function(){\r\n\r\n\r\n if(UserPermissionService.hasPermission('Report Subscription')) {\r\n\r\n return ReportingService.subscriptionSummary().$promise;\r\n\r\n }\r\n else{\r\n\r\n return Promise.reject('No Permssion');\r\n\r\n }\r\n\r\n };\r\n\r\n return {\r\n getReportList : getReportList,\r\n getReportConfig : getReportConfig,\r\n getReportBuild : getReportBuild,\r\n getSubscriptionSummary : getSubscriptionSummary\r\n };\r\n\r\n }\r\n app.factory('ReportHubConfigService', reportHubConfigService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n ReportHubController.$inject = ['$scope', '$state', 'ReportHubConfigService', 'WizardDataService', 'SubscriptionDisplayService', 'preferences', 'UserPermissionService'];\r\n\r\n function ReportHubController($scope, $state, ReportHubConfigService, WizardDataService, SubscriptionDisplayService, preferences, UserPermissionService) {\r\n\r\n $scope.reportBuild = ReportHubConfigService.getReportBuild();\r\n\r\n if(UserPermissionService.hasPermission('Report Subscription')){\r\n ReportHubConfigService.getSubscriptionSummary().then(function(subscriptionSummary){\r\n\r\n $scope.subscriptionSummary = subscriptionSummary.subscriptionSummary;\r\n $scope.subscriptionFrequency = 'WEEKLY';\r\n\r\n _.forEach($scope.subscriptionSummary, function(item){\r\n\r\n var daysOfWeekOptions = SubscriptionDisplayService.getDaysOfWeekOptions();\r\n\r\n _.forEach(daysOfWeekOptions, function (day) {\r\n var reportDay = _.find(item.dayOfWeek.split(','), function (dowString) {\r\n return dowString == day.value;\r\n });\r\n if (reportDay) {\r\n day.selected = true;\r\n }\r\n });\r\n\r\n item.frequency = SubscriptionDisplayService.generateVerificationFrequencyText($scope.subscriptionFrequency, daysOfWeekOptions, preferences);\r\n\r\n });\r\n\r\n })\r\n }\r\n\r\n\r\n $scope.hasCategory = function(category)\r\n {\r\n return _.find($scope.reportBuild, ['cat' ,category]);\r\n };\r\n\r\n $scope.navSelected = function (state) {\r\n\r\n $state.go(state);\r\n\r\n };\r\n\r\n $scope.Subscribe = function(report, reportConfigId, type){\r\n\r\n if(reportConfigId === 0){\r\n\r\n var reportInfo = {\r\n 'name': report.permission,\r\n 'category': report.cat,\r\n 'title': ''\r\n };\r\n var reportConfig = {};\r\n\r\n var finalize = {'reportName': report.permission, 'reportDescription': 'testDescription'};\r\n\r\n WizardDataService.createSavedReportConfig(reportInfo, finalize, reportConfig).then(function (response) {\r\n\r\n $state.go('app.reports.subscription',{reportConfigId : response.configId, reportName : report.permission, subscriptionType: 'new'})\r\n\r\n });\r\n\r\n }\r\n\r\n else{$state.go('app.reports.subscription',{reportConfigId : reportConfigId, type: type})}\r\n };\r\n\r\n $scope.unSubscribe = function(report, reportConfigId){\r\n\r\n $state.go('app.reports.unsubscribe',{reportConfigId : reportConfigId, reportName: report.permission, previousRoute: 'app.reports.reportHub'});\r\n\r\n };\r\n\r\n $scope.changeSubscription = function(report, subscription){\r\n\r\n $state.go('app.reports.subscription',{reportConfigId : subscription.savedReportConfigID,\r\n reportName : report.permission,\r\n previousRoute: 'app.reports.reportHub',\r\n subscriptionType: 'change'\r\n\r\n })\r\n\r\n };\r\n }\r\n\r\n app.controller('ReportHubController', ReportHubController);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n OverdueOrdersController.$inject = ['$scope', '$state', '$window', '$filter', 'ReportingService', 'ServiceOffering'\r\n , 'StatusMappingService', 'ExcelReportExporterService', 'ReportDataDisplayService', 'WindowLocationHref'];\r\n function OverdueOrdersController($scope, $state, $window, $filter, ReportingService, ServiceOffering\r\n , StatusMappingService, ExcelReportExporterService, ReportDataDisplayService, WindowLocationHref) {\r\n\r\n $scope.currentPage = 1;\r\n $scope.totalRecords = 0;\r\n $scope.sortBy = 'account';\r\n $scope.sortDescending = \"false\";\r\n $scope.gridSort = \"\";\r\n $scope.limit = 50;\r\n $scope.offset = 0;\r\n $scope.exportReady = false;\r\n $scope.daysText = $filter('translate')(\"DAYS\");\r\n $scope.onTimeText = $filter('translate')(\"ON_TIME\");\r\n $scope.reportHeaders = {\r\n order: 'Orders',\r\n customer: 'Customer',\r\n primaryRefNumber: 'Primary Reference Number',\r\n orderCreateDate: 'Order Create Date',\r\n shippingMethod: 'Shipping Method',\r\n loadNumber: 'Load Number',\r\n trackingNumber: 'Tracking Number',\r\n orderActivityDate: 'Order Activity Date',\r\n originName: 'Order Pickup Location Name',\r\n originLocation: 'Order Pickup Location',\r\n earliestPickDate: 'Earliest Pickup Date',\r\n latestPickupDate: 'Latest Pickup Date',\r\n actualPickupDate: 'Actual Pickup Date',\r\n pickupDateDifference: 'Overdue for Pickup',\r\n destinationName: 'Order Delivery Location Name',\r\n destinationLocation: 'Order Delivery Location',\r\n earliestDeliveryDate: 'Earliest Delivery Date',\r\n latestDeliveryDate: 'Latest Delivery Date',\r\n deliveryDateDifference: 'Overdue for Delivery',\r\n status: 'Status'\r\n };\r\n $scope.reportRunning = false;\r\n $scope.reportTitle = $filter('translate')(\"OVERDUE_ORDERS\");\r\n\r\n $scope.goToOrderDetails = function (orderNum) {\r\n\t\t\tvar redirectUrl = appConfig.ordersUIBaseUrl + '/#/detail/' + orderNum;\r\n\t\t\tWindowLocationHref.setWindowLocationHref(redirectUrl);\r\n };\r\n\r\n $scope.goToTrackingDetails = function (trackingNumber) {\r\n\r\n $window.open(appConfig.trackingDetailsLink + '/#/?trackingNumber=' + trackingNumber);\r\n\r\n };\r\n\r\n $scope.grabOverdueOrders = function () {\r\n\r\n $scope.reportRunning = true;\r\n $scope.overdueOrdersData = [];\r\n\r\n ReportingService.overdueOrders({\r\n from: (($scope.currentPage || 0) - 1) * $scope.limit,\r\n pageSize: $scope.limit,\r\n sortBy: $scope.sortBy,\r\n sortDescending: $scope.sortDescending\r\n })\r\n .$promise.then(function (response) {\r\n\r\n $scope.totalRecords = response.total;\r\n\r\n var data = [];\r\n\r\n _.forEach(response.items, function (value) {\r\n\r\n data.push({\r\n\r\n 'order': value.orderNumber,\r\n 'customer': ReportDataDisplayService.dataCheck(value.customer, -1, 'name'),\r\n 'primaryRefNumber': ReportDataDisplayService.getPrimaryRefNumber(value),\r\n 'orderCreateDate': ReportDataDisplayService.formatDate(value.createdDateTime),\r\n 'shippingMethod': ServiceOffering.get(ReportDataDisplayService.dataCheck(value.services, 0, 'serviceOfferingNumber')),\r\n 'trackingNumber': ReportDataDisplayService.getTrackingNumber(value),\r\n 'orderActivityDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].loads, 0, 'activityDate')),\r\n 'originName': ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'name'),\r\n 'originLocation': ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'city') + ', ' + ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'state'),\r\n 'latestPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'plannedLatestTime')),\r\n 'actualPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'actualArrivalTime')),\r\n 'pickupDateDiff': $scope.dateOverduePickDiff(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'plannedLatestTime'), ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'plannedLatestDate'), ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'actualArrivalTime'), ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'actualArrivalDate')),\r\n 'overduePickup': $scope.dateDiff(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'plannedLatestTime'), ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'actualArrivalTime')),\r\n 'destinationName': ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'name'),\r\n 'destinationLocation': ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'city') + ', ' + ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'state'),\r\n 'earliestDeliveryDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'plannedEarliestTime')),\r\n 'latestDeliveryDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'plannedLatestTime')),\r\n 'deliveryDateDiff': $scope.dateOverdueDeliveryDiff(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'plannedLatestTime'), moment.now()),\r\n 'overdueDelivery': $scope.dateDiff(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'plannedLatestTime'), moment.now()),\r\n 'status': $filter('translate')(StatusMappingService.getStatusResourceKey(ReportDataDisplayService.dataCheck(value.services, 0, 'statusRDN')))\r\n\r\n });\r\n });\r\n\r\n $scope.overdueOrdersData = data;\r\n $scope.reportRunning = false;\r\n\r\n }, function () {\r\n\r\n });\r\n };\r\n\r\n $scope.grabOverdueOrdersDataExport = function () {\r\n ReportingService.overdueOrders({\r\n from: 0,\r\n pageSize: 500,\r\n sortBy: $scope.sortBy,\r\n sortDescending: $scope.sortDescending\r\n }).$promise.then(function (response) {\r\n var data = [];\r\n\r\n _.forEach(response.items, function (value) {\r\n\r\n data.push({\r\n 'order':'\"=HYPERLINK(\"\"' + appConfig.ordersUIBaseUrl + '/#/detail/' + value.orderNumber + '\"\",' + value.orderNumber + ')\"',\r\n 'customer': ReportDataDisplayService.dataCheck(value.customer, -1, 'name'),\r\n 'primaryRefNumber': ReportDataDisplayService.removeComma(ReportDataDisplayService.getPrimaryRefNumber(value)),\r\n 'orderCreateDate': ReportDataDisplayService.formatDate(value.createdDateTime),\r\n 'shippingMethod': ServiceOffering.get(ReportDataDisplayService.dataCheck(value.services, 0, 'serviceOfferingNumber')).serviceOfferingName,\r\n 'loadNumber': ReportDataDisplayService.dataCheck(value.services[0].loads, 0, 'loadNumber'),\r\n 'trackingNumber': '\"=HYPERLINK(\"\"' + appConfig.trackingDetailsLink + '/#/?trackingNumber=' + ReportDataDisplayService.getTrackingNumber(value) + '\"\",\"\"' + ReportDataDisplayService.getTrackingNumber(value) + '\"\")\"',\r\n 'orderActivityDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].loads, 0, 'activityDate')),\r\n 'originName': ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'name')),\r\n 'originLocation': ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'city') + ' ' + ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'state'))),\r\n 'earliestPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'plannedEarliestTime')),\r\n 'latestPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'plannedLatestTime')),\r\n 'actualPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'actualArrivalTime')),\r\n 'pickupDateDiff': $scope.dateOverduePickDiffExport(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'plannedLatestTime'), ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'plannedLatestDate'), ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'actualArrivalTime'), ReportDataDisplayService.dataCheck(value.services[0].pickupFrom, -1, 'actualArrivalDate'), 'p'),\r\n 'destinationName': ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'name')),\r\n 'destinationLocation': ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'city') + ' ' + ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'state'))),\r\n 'earliestDeliveryDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'plannedEarliestTime')),\r\n 'latestDeliveryDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'plannedLatestTime')),\r\n 'deliveryDateDiff': $scope.dateOverdueDeliveryDiffExport(ReportDataDisplayService.dataCheck(value.services[0].deliverTo, -1, 'plannedLatestTime'), moment.now()),\r\n 'status': $filter('translate')(StatusMappingService.getStatusResourceKey(ReportDataDisplayService.dataCheck(value.services, 0, 'statusRDN')))\r\n });\r\n\r\n $scope.exportData = data;\r\n $scope.exportReady = true;\r\n });\r\n\r\n $scope.exportData.unshift($scope.reportHeaders);\r\n\r\n }, function () {\r\n\r\n });\r\n };\r\n\r\n $scope.limitChanged = function (limit) {\r\n\r\n $scope.limit = limit;\r\n $scope.currentPage = Math.floor($scope.offset / $scope.limit) + 1;\r\n $scope.offset = ($scope.currentPage - 1) * $scope.limit;\r\n $scope.grabOverdueOrders();\r\n\r\n };\r\n\r\n $scope.dateDiff = function (plannedDateTime, actualDateTime) {\r\n\r\n var plannedDateTimeMoment = moment(plannedDateTime);\r\n var actualDateTimeMoment = moment(actualDateTime);\r\n var dateDiff = actualDateTimeMoment.diff(plannedDateTimeMoment, 'hours');\r\n\r\n return dateDiff;\r\n };\r\n\r\n $scope.dateOverduePickDiff = function (plannedDateTime, plannedDate, actualDateTime, actualDate) {\r\n\r\n var overdueVerbiage = \"\";\r\n\r\n var plannedDateTimeMoment = moment(plannedDateTime);\r\n var actualDateTimeMoment = moment(actualDateTime);\r\n\r\n var overdue = actualDateTimeMoment.diff(plannedDateTimeMoment, 'hours');\r\n var days = (overdue / 24);\r\n var hours = ((days % 1) * 24).toFixed(0);\r\n if (plannedDateTime === plannedDate) { days-- }\r\n\r\n if (plannedDateTime === actualDate) { overdueVerbiage = \"On Time\"; }\r\n else if (overdue >= 24) {\r\n overdueVerbiage = Math.floor(days) + \" \" + $scope.daysText + \" \" + hours + \" hrs\";\r\n }\r\n else if (overdue > 0) {\r\n overdueVerbiage = hours + \" hrs\";\r\n }\r\n else {\r\n overdueVerbiage = $scope.onTimeText;\r\n }\r\n return overdueVerbiage;\r\n };\r\n\r\n $scope.dateOverduePickDiffExport = function (plannedDateTime, plannedDate, actualDateTime, actualDate) {\r\n\r\n var overdueVerbiage = \"\";\r\n\r\n var plannedDateTimeMoment = moment(plannedDateTime);\r\n var actualDateTimeMoment = moment(actualDateTime);\r\n\r\n var overdue = actualDateTimeMoment.diff(plannedDateTimeMoment, 'hours');\r\n var days = overdue / 24;\r\n var hours = ((days % 1) * 24).toFixed(0);\r\n //space that export for sorting\r\n var daysLength = days.toFixed(0).length;\r\n if (plannedDateTime === plannedDate) {\r\n days--\r\n }\r\n var daysSpaceAdd = daysLength === 2 ? \" \" : daysLength === 1 ? \" \" : \"\";\r\n var hoursSpaceAdd = hours.length === 1 ? \" \" : \"\";\r\n\r\n if (plannedDateTime === actualDate) {\r\n overdueVerbiage = \" \" + $scope.onTimeText;\r\n }\r\n else if (overdue >= 24) {\r\n overdueVerbiage = daysSpaceAdd + Math.floor(days) + \" \" + $scope.daysText + \" \" + hours + \" hrs\";\r\n }\r\n else if (overdue > 0) {\r\n overdueVerbiage = hoursSpaceAdd + \" \" + hours + \" hrs\";\r\n }\r\n else {\r\n overdueVerbiage = \" \" + $scope.onTimeText;\r\n }\r\n return overdueVerbiage;\r\n };\r\n\r\n $scope.dateOverdueDeliveryDiff = function (plannedDateTime, now) {\r\n\r\n var overdueVerbiage = \"\";\r\n\r\n var plannedDateTimeMoment = moment(plannedDateTime);\r\n var nowMoment = moment(now);\r\n var overdue = nowMoment.diff(plannedDateTimeMoment, 'hours');\r\n\r\n var days = overdue / 24;\r\n var hours = ((days % 1) * 24).toFixed(0);\r\n\r\n\r\n if (overdue >= 24) {\r\n overdueVerbiage = Math.floor(days) + \" \" + $scope.daysText + \" \" + hours + \" hrs\";\r\n }\r\n else if (overdue > 0) {\r\n overdueVerbiage = hours + \" hrs\";\r\n }\r\n else {\r\n overdueVerbiage = \"\";\r\n }\r\n return overdueVerbiage;\r\n };\r\n\r\n\r\n $scope.dateOverdueDeliveryDiffExport = function (plannedDateTime, now) {\r\n\r\n var overdueVerbiage = \"\";\r\n var plannedDateTimeMoment = moment(plannedDateTime);\r\n var nowMoment = moment(now);\r\n\r\n var overdue = nowMoment.diff(plannedDateTimeMoment, 'hours');\r\n var days = overdue / 24;\r\n var hours = ((days % 1) * 24).toFixed(0);\r\n\r\n var daysLength = days.toFixed(0).length;\r\n var daysSpaceAdd = daysLength === 2 ? \" \" : daysLength === 1 ? \" \" : \"\";\r\n var hoursSpaceAdd = hours.length === 1 ? \" \" : \"\";\r\n\r\n if (overdue >= 24) {\r\n overdueVerbiage = daysSpaceAdd + Math.floor(days) + \" \" + $scope.daysText + \" \" + hours + \" hrs\";\r\n }\r\n else if (overdue > 0) {\r\n overdueVerbiage = daysSpaceAdd + hoursSpaceAdd + \" \" + hours + \" hrs\";\r\n }\r\n else {\r\n overdueVerbiage = \"\";\r\n }\r\n return overdueVerbiage;\r\n };\r\n\r\n\r\n $scope.exportOverdueOrders = function () {\r\n\r\n ExcelReportExporterService.exportReportExcel($scope.exportData, $scope.reportTitle);\r\n\r\n };\r\n\r\n $scope.sortOverdueOrders = function () {\r\n if ($scope.sortBy === 'overdueDelivery' || $scope.sortBy === 'overduePickup') {\r\n $scope.gridSort = $scope.sortDescending == \"true\" ? \"-\" + $scope.sortBy : $scope.sortBy;\r\n }\r\n else {\r\n $scope.gridSort = \"\";\r\n $scope.grabOverdueOrders();\r\n }\r\n };\r\n\r\n $scope.grabOverdueOrders();\r\n $scope.grabOverdueOrdersDataExport();\r\n }\r\n app.controller('OverdueOrdersController', OverdueOrdersController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n ordersSummaryExportService.$inject = ['$filter', '$uibModal', 'ReportingService', 'ReportDataDisplayService', 'ExcelReportExporterService'];\r\n function ordersSummaryExportService($filter, $uibModal, ReportingService, ReportDataDisplayService, ExcelReportExporterService) {\r\n\r\n var loadingModal;\r\n\r\n function exportXLSX(params) {\r\n\r\n reportSpinner('DOWNLOAD_REPORT');\r\n\r\n return ReportingService.ordersSummaryReportExport(params).$promise.then(function (response) {\r\n\r\n loadingModal.close();\r\n\r\n return saveAs(response.data, ['OrdersSummaryReport.xls']);\r\n\r\n });\r\n\r\n }\r\n\r\n function exportCSV(reportConfigId, sortBy, sortDescending, reportTitle, reportHeaders) {\r\n\r\n reportSpinner('DOWNLOAD_REPORT');\r\n\r\n return ReportingService.ordersSummaryReport({\r\n reportConfigId: reportConfigId,\r\n from: 0,\r\n pageSize: 1000,\r\n sortBy: sortBy,\r\n sortDescending: sortDescending\r\n }).$promise.then(function (response) {\r\n\r\n var data = [];\r\n var exportData = [];\r\n\r\n _.forEach(response.items, function (value) {\r\n\r\n data.push({\r\n 'order':'\"=HYPERLINK(\"\"' + appConfig.ordersUIBaseUrl + '/#/detail/' + value.orderNumber + '\"\",' + value.orderNumber + ')\"',\r\n 'trackingNumber': '\"=HYPERLINK(\"\"' + appConfig.trackingDetailsLink + '/#/?trackingNumber=' + value.orderSummaryDetail.trackingReferenceNumber + '\"\",\"\"' + value.orderSummaryDetail.trackingReferenceNumber + '\"\")\"',\r\n 'account': ReportDataDisplayService.removeComma(value.customer.name),\r\n 'primaryRefNumber': ReportDataDisplayService.removeComma(value.orderSummaryDetail.primaryReferenceNumber),\r\n 'originName': ReportDataDisplayService.removeComma(value.originLocation.name),\r\n 'originCity': ReportDataDisplayService.removeComma(value.originLocation.city),\r\n 'originState': ReportDataDisplayService.removeComma(value.originLocation.state),\r\n 'earliestRequestesPickupDate': ReportDataDisplayService.formatDate(value.originLocation.earliestRequestedDate),\r\n 'latestRequestedPickupDate': ReportDataDisplayService.formatDate(value.originLocation.latestRequestedDate),\r\n 'earliestScheduledPickupDate': ReportDataDisplayService.formatDate(value.originLocation.earliestScheduledDate),\r\n 'latestScheduledPickupDate': ReportDataDisplayService.formatDate(value.originLocation.earliestScheduledDate),\r\n 'actualPickupArrivalDate': ReportDataDisplayService.formatDate(value.originLocation.actualArrivalDate),\r\n 'actualPickupDepartureDate': ReportDataDisplayService.formatDate(value.originLocation.actualDepartureDate),\r\n 'destinationName': ReportDataDisplayService.removeComma(value.destinationLocation.name),\r\n 'destinationCity': ReportDataDisplayService.removeComma(value.destinationLocation.city),\r\n 'destinationState': ReportDataDisplayService.removeComma(value.destinationLocation.state),\r\n 'earliestRequestesDeliveryDate': ReportDataDisplayService.formatDate(value.destinationLocation.earliestRequestedDate),\r\n 'latestRequestedDeliveryDate': ReportDataDisplayService.formatDate(value.destinationLocation.latestRequestedDate),\r\n 'earliestScheduledDeliveryDate': ReportDataDisplayService.formatDate(value.destinationLocation.earliestScheduledDate),\r\n 'latestScheduledDeliveryDate': ReportDataDisplayService.formatDate(value.destinationLocation.earliestScheduledDate),\r\n 'actualDeliveryArrivalDate': ReportDataDisplayService.formatDate(value.destinationLocation.actualArrivalDate),\r\n 'actualDeliveryDepartureDate': ReportDataDisplayService.formatDate(value.destinationLocation.actualDepartureDate),\r\n 'orderStatus': $filter('translate')(ReportDataDisplayService.removeComma(value.orderSummaryDetail.orderStatus)),\r\n 'orderMode': $filter('translate')(ReportDataDisplayService.removeComma(value.orderSummaryDetail.orderMode)),\r\n 'carrierName': ReportDataDisplayService.removeComma(value.carrier.name),\r\n 'proReferenceNumber': ReportDataDisplayService.removeComma(value.orderSummaryDetail.proReferenceNumber)\r\n });\r\n\r\n exportData = data;\r\n\r\n });\r\n\r\n exportData.unshift(reportHeaders);\r\n\r\n ExcelReportExporterService.exportReportExcel(exportData, reportTitle);\r\n\r\n loadingModal.close();\r\n\r\n });\r\n }\r\n\r\n function reportSpinner(notice){\r\n\r\n loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () {\r\n return $filter('translate')(notice);\r\n }\r\n }\r\n });\r\n }\r\n\r\n return {\r\n exportXLSX: exportXLSX,\r\n exportCSV: exportCSV,\r\n reportSpinner: reportSpinner\r\n\r\n };\r\n }\r\n\r\n app.factory('OrdersSummaryExportService', ordersSummaryExportService);\r\n }\r\n\r\n )();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n SavedOrdersSummaryController.$inject = ['$scope', '$filter', 'savedReportConfigs','reportConfigsSchedules','preferences'];\r\n function SavedOrdersSummaryController($scope, $filter, savedReportConfigs, reportConfigsSchedules, preferences) {\r\n\r\n $scope.reportConfig = savedReportConfigs;\r\n\r\n $scope.configSchedules = reportConfigsSchedules;\r\n\r\n $scope.preferences = preferences;\r\n\r\n $scope.reportInfo = {name : 'Orders Summary Report', title: $filter('translate')('ORDERS_SUMMARY_REPORT'), message : $filter('translate')(\"YOU_HAVE_NOT_CREATED_ANY_ORDERS_SUMMARY_REPORTS_YE\")};\r\n\r\n $scope.createReportPath = 'app.reports.createOrdersSummary';\r\n\r\n $scope.runReportPath = 'app.reports.ordersSummary';\r\n\r\n $scope.savedReportPath = 'app.reports.savedOrdersSummary';\r\n\r\n }\r\n\r\n app.controller('SavedOrdersSummaryController', SavedOrdersSummaryController);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n OrdersSummaryController.$inject = ['$scope', '$filter', '$stateParams', '$state', '$window', 'ReportingService'\r\n ,'ReportDataDisplayService', 'OrdersSummaryExportService', 'ReportPersistanceService', 'WindowLocationHref'];\r\n function OrdersSummaryController($scope, $filter, $stateParams, $state, $window, ReportingService\r\n ,ReportDataDisplayService, OrdersSummaryExportService, ReportPersistanceService, WindowLocationHref) {\r\n\r\n $scope.reportTitle = $filter('translate')(\"ORDERS_SUMMARY_REPORT\");\r\n\r\n $scope.reportConfigId = ReportPersistanceService.getConfigVariable('orderSummaryConfigID');\r\n\t\t$scope.reportConfig = ReportPersistanceService.getConfigVariable('orderSummaryConfig');\r\n\r\n\t\t// If user is coming back from react order details or refreshes page \r\n\t\t// they wont have a reportConfig so send them back to savedOrdersSummary\r\n\t\tif ($scope.reportConfig) {\r\n\t\t\t$scope.reportConfiguration = JSON.parse($scope.reportConfig.reportConfiguration);\r\n\t\t} else {\r\n\t\t\t$state.go('app.reports.savedOrdersSummary')\r\n\t\t}\r\n\r\n $scope.currentPage = 1;\r\n $scope.sortBy = 'account';\r\n $scope.sortDescending = 'true';\r\n $scope.limit = 50;\r\n $scope.offset = 0;\r\n $scope.accountViewSize = 3;\r\n $scope.reportReturn = [];\r\n $scope.reportRunning = true;\r\n\r\n $scope.reportHeaders = {\r\n order: $filter('translate')('ORDER_NUMBER'),\r\n trackingNumber: $filter('translate')('TRACKING_NUMBER'),\r\n account: $filter('translate')('ACCOUNT_NAME'),\r\n primaryRefNumber: $filter('translate')('PRIMARY_REFERENCE_NUMBER'),\r\n originName: $filter('translate')('ORIGIN_PICKUP_NAME'),\r\n originCity: $filter('translate')('ORIGIN_PICKUP_CITY'),\r\n originState: $filter('translate')('ORIGIN_PICKUP_STATE'),\r\n earliestRequestesPickupDate: $filter('translate')('EARLIEST_REQUESTED_PICKUP_DATE'),\r\n latestRequestedPickupDate: $filter('translate')('LATEST_REQUESTED_PICKUP_DATE'),\r\n earliestScheduledPickupDate: $filter('translate')('EARLIEST_SCHEDULED_PICKUP_DATE'),\r\n latestScheduledPickupDate: $filter('translate')('LATEST_SCHEDULED_PICKUP_DATE'),\r\n actualPickupArrivalDate: $filter('translate')('ACTUAL_PICKUP_ARRIVAL'),\r\n actualPickupDepartureDate: $filter('translate')('ACTUAL_PICKUP_DEPARTURE'),\r\n destinationName: $filter('translate')('DESTINATION_DELIVERY_NAME'),\r\n destinationCity: $filter('translate')('DESTINATION_DELIVERY_CITY'),\r\n destinationState: $filter('translate')('DESTINATION_DELIVERY_STATE'),\r\n earliestRequestesDeliveryDate: $filter('translate')('EARLIEST_REQUESTED_DELIVERY_DATE'),\r\n latestRequestedDeliveryDate: $filter('translate')('LATEST_REQUESTED_DELIVERY_DATE'),\r\n earliestScheduledDeliveryDate: $filter('translate')('EARLIEST_SCHEDULED_DELIVERY_DATE'),\r\n latestScheduledDeliveryDate: $filter('translate')('LATEST_SCHEDULED_DELIVERY_DATE'),\r\n actualDeliveryArrivalDate: $filter('translate')('ACTUAL_DELIVERY_ARRIVAL'),\r\n actualDeliveryDepartureDate: $filter('translate')('ACTUAL_DELIVERY_DEPARTURE'),\r\n orderStatus: $filter('translate')('ORDER_STATUS'),\r\n orderMode: $filter('translate')('ORDER_MODE'),\r\n carrierName: $filter('translate')('CARRIER_NAME'),\r\n proReferenceNumber: $filter('translate')('PRO_REFERENCE_NUMBER')\r\n };\r\n\r\n $scope.goToOrderDetails = function (orderNum) {\r\n\t\t\tvar redirectUrl = appConfig.ordersUIBaseUrl + '/#/detail/' + orderNum;\r\n\t\t\tWindowLocationHref.setWindowLocationHref(redirectUrl);\r\n };\r\n\r\n $scope.goToTrackingDetails = function (trackingNumber) {\r\n\r\n $window.open(appConfig.trackingDetailsLink + '/#/?trackingNumber=' + trackingNumber);\r\n\r\n };\r\n\r\n $scope.showAccounts = function () {\r\n $scope.accountList = !$scope.accountList;\r\n $scope.accountViewSize = $scope.accountList ? 500 : 3;\r\n };\r\n\r\n $scope.limitChanged = function (limit) {\r\n\r\n $scope.limit = limit;\r\n $scope.currentPage = Math.floor($scope.offset / $scope.limit) + 1;\r\n $scope.offset = ($scope.currentPage - 1) * $scope.limit;\r\n $scope.grabOrdersSummary();\r\n\r\n };\r\n\r\n $scope.grabOrdersSummary = function () {\r\n\r\n $scope.reportReturn = [];\r\n $scope.reportRunning = true;\r\n\r\n ReportingService.ordersSummaryReport({\r\n reportConfigId: $scope.reportConfigId,\r\n from: (($scope.currentPage || 0) - 1) * $scope.limit,\r\n pageSize: $scope.limit,\r\n sortBy: $scope.sortBy,\r\n sortDescending: $scope.sortDescending\r\n })\r\n .$promise.then(function (ordersSummaryReport) {\r\n $scope.reportReturn = ordersSummaryReport.items;\r\n $scope.totalRecords = ordersSummaryReport.total;\r\n $scope.reportRunning = false;\r\n })\r\n\r\n };\r\n\r\n $scope.exportXLSX = function(){\r\n\r\n var params = {\r\n reportConfigId: $scope.reportConfigId,\r\n from: 0,\r\n pageSize: 5000,\r\n sortBy: $scope.sortBy,\r\n sortDescending: $scope.sortDescending\r\n };\r\n\r\n OrdersSummaryExportService.exportXLSX(params);\r\n\r\n };\r\n\r\n $scope.exportCSV = function(){\r\n\r\n OrdersSummaryExportService.exportCSV($scope.reportConfigId, $scope.sortBy, $scope.sortDescending, $scope.reportTitle, $scope.reportHeaders);\r\n\r\n };\r\n\r\n $scope.grabOrdersSummary();\r\n $scope.statusDisplay = ReportDataDisplayService.translateConfig($scope.reportConfiguration.shipmentType.status.split(','));\r\n $scope.modesDisplay = ReportDataDisplayService.translateConfig($scope.reportConfiguration.shipmentType.modes.split(','));\r\n $scope.dateDisplay = ReportDataDisplayService.createDateRange($scope.reportConfiguration.date);\r\n\r\n $scope.grabOrdersSummary();\r\n\r\n }\r\n\r\n app.controller('OrdersSummaryController', OrdersSummaryController);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n CreateOrdersSummaryController.$inject = ['$scope', '$filter', '$state', '$uibModalStack', '$stateParams', '$window', '$timeout'\r\n , 'WizardDataService', 'ModalService', 'customerModes', 'orderCustomers', 'analyticsService'];\r\n function CreateOrdersSummaryController($scope, $filter, $state, $uibModalStack, $stateParams, $window, $timeout,\r\n WizardDataService, ModalService, customerModes, orderCustomers, analyticsService) {\r\n\r\n $uibModalStack.dismissAll();\r\n var onRouteChangeOff;\r\n $scope.widget = 'accountWidget';\r\n\r\n $scope.reportInfo = {\r\n 'name': 'Orders Summary Report',\r\n 'category': 'Order Activity',\r\n 'title': $filter('translate')(\"CREATE_ORDERS_SUMMARY_REPORT\")\r\n };\r\n $scope.reportConfig = {\r\n 'accountSelection': '',\r\n 'date': { 'type': '', 'range': '', 'startDate': '', 'endDate': '', 'startDatePass': 0, 'endDatePass': 0 },\r\n 'shipmentType': { 'status': '', 'modes': '' },\r\n 'accountSelectionDisplay': []\r\n };\r\n\r\n $scope.statusDisplay = '';\r\n $scope.modesDisplay = '';\r\n\r\n $scope.finalize = { 'reportName': '', 'reportDescription': '' };\r\n\r\n $scope.activeWidget = 'accountWidget';\r\n $scope.customerList = orderCustomers.customers;\r\n\r\n $scope.customerModes = customerModes;\r\n\r\n $scope.buttonWidgetHeight = $window.document.getElementById('buttonWidget').offsetHeight;\r\n $scope.scrollPullHeight = 20;\r\n\r\n $scope.showRefreshPrompt = function () {\r\n\r\n if (!$scope.createOrdersSummaryForm.$dirty && $scope.reportConfig.accountSelection.length === 0\r\n && !$scope.reportConfig.shipmentType.status && !$scope.reportConfig.shipmentType.modes) {\r\n return;\r\n }\r\n\r\n $scope.analyticsCancelLog();\r\n\r\n return true;\r\n\r\n };\r\n\r\n $window.onbeforeunload = $scope.showRefreshPrompt;\r\n\r\n $scope.clickWidget = function (widget) {\r\n\r\n $scope.widgetClick = 1;\r\n $scope.activeWidget = widget;\r\n $window.document.getElementById(widget).scrollIntoView();\r\n\r\n };\r\n\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'OK',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_EXIT_THE_REPORT_CREATION',\r\n bodyText: 'ALL_INFORMATION_FOR_THIS_REPORT_WILL_BE_LOST'\r\n };\r\n\r\n $scope.routeChange = function (event, toState) {\r\n\r\n if ((!$scope.createOrdersSummaryForm.$dirty && $scope.reportConfig.accountSelection.length === 0\r\n && !$scope.reportConfig.shipmentType.status && !$scope.reportConfig.shipmentType.modes) || toState.name === 'login') {\r\n return;\r\n }\r\n\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n\r\n onRouteChangeOff();\r\n $uibModalStack.dismissAll(result);\r\n $scope.analyticsCancelLog();\r\n $state.go(toState);\r\n }\r\n });\r\n\r\n event.preventDefault();\r\n };\r\n\r\n $scope.initRouteChange = function () {\r\n\r\n onRouteChangeOff = $scope.$on('$stateChangeStart', $scope.routeChange);\r\n\r\n };\r\n\r\n $scope.cancelCreation = function () {\r\n\r\n $state.go('app.reports.savedOrdersSummary');\r\n\r\n };\r\n\r\n $scope.saveReport = function () {\r\n\r\n $scope.clearDates();\r\n\r\n if (!$scope.reportConfigId) {\r\n WizardDataService.createSavedReportConfig($scope.reportInfo, $scope.finalize, $scope.reportConfig).then(function () {\r\n\r\n onRouteChangeOff();\r\n $scope.analyticsSaveLog();\r\n $state.go('app.reports.savedOrdersSummary');\r\n\r\n });\r\n }\r\n else {\r\n\r\n WizardDataService.updateSavedReportConfig($scope.reportConfigId, $scope.finalize, $scope.reportConfig).then(function () {\r\n\r\n onRouteChangeOff();\r\n $scope.analyticsUpdateLog();\r\n $state.go('app.reports.savedOrdersSummary');\r\n\r\n });\r\n }\r\n };\r\n\r\n $scope.clearDates = function () {\r\n\r\n if ($scope.reportConfig.date.range !== 'CUSTOM') {\r\n\r\n $scope.reportConfig.date.startDate = '';\r\n $scope.reportConfig.date.endDate = '';\r\n\r\n }\r\n\r\n };\r\n\r\n $scope.createOrdersSummarySettup = function () {\r\n\r\n if ($stateParams.reportConfigPass) {\r\n\r\n var reportConfigSet = JSON.parse($stateParams.reportConfigPass.reportConfiguration);\r\n $scope.finalize.reportName = $stateParams.reportConfigPass.reportNameByUser;\r\n $scope.finalize.reportDescription = $stateParams.reportConfigPass.reportDescriptionByUser;\r\n $scope.reportConfigId = $stateParams.reportConfigPass.savedReportConfigId;\r\n $scope.reportConfig = reportConfigSet;\r\n $scope.reportConfig.date.startDate = $scope.reportConfig.date.startDate ? new Date($scope.reportConfig.date.startDate) : null;\r\n $scope.reportConfig.date.endDate = $scope.reportConfig.date.endDate ? new Date($scope.reportConfig.date.endDate) : null;\r\n\r\n }\r\n\r\n };\r\n\r\n $scope.dateRangeValid = function (date) {\r\n\r\n if (date.type !== '' && date.range !== '') {\r\n if (date.range !== 'CUSTOM') {\r\n return true;\r\n }\r\n else if (date.startDate && date.endDate) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n $scope.wizardScroll = function () {\r\n\r\n $scope.wizardAreaHeight = $window.document.getElementById('wizardScrollArea').offsetHeight;\r\n $scope.dateWidgetTop = $window.document.getElementById('dateWidget').offsetTop;\r\n $scope.shipWidgetTop = $window.document.getElementById('shipWidget').offsetTop;\r\n $scope.shipWidgetHeight = $window.document.getElementById('shipWidget').offsetHeight;\r\n $scope.finalizeWidgetHeight = $window.document.getElementById('finalizeWidget').offsetHeight;\r\n\r\n $scope.scrollTop = this.scrollTop;\r\n\r\n if ($scope.scrollTop < $scope.scrollPullHeight) {\r\n $scope.widget = 'accountWidget';\r\n }\r\n else if ($scope.scrollTop >= $scope.dateWidgetTop - $scope.scrollPullHeight && $scope.scrollTop < $scope.shipWidgetTop && $scope.widget === 'accountWidget') {\r\n $scope.widget = 'dateWidget';\r\n }\r\n else if ($scope.scrollTop <= $scope.dateWidgetTop + $scope.scrollPullHeight && $scope.widget !== 'accountWidget') {\r\n $scope.widget = 'dateWidget';\r\n }\r\n else if ($scope.scrollTop >= $scope.shipWidgetTop && $scope.scrollTop < $scope.shipWidgetTop + Math.floor($scope.shipWidgetHeight / 2) && $scope.widget !== 'finalizeWidget') {\r\n $scope.widget = 'shipWidget';\r\n }\r\n else if ($scope.scrollTop < $scope.shipWidgetTop + $scope.scrollPullHeight && $scope.widget === 'finalizeWidget') {\r\n $scope.widget = 'shipWidget';\r\n }\r\n else if (($scope.scrollTop + $scope.wizardAreaHeight) > ($scope.shipWidgetTop + $scope.shipWidgetHeight + $scope.finalizeWidgetHeight + $scope.buttonWidgetHeight - $scope.scrollPullHeight)) {\r\n $scope.widget = 'finalizeWidget';\r\n }\r\n\r\n if ($scope.widget !== $scope.activeWidget && $scope.widgetClick === 0) {\r\n\r\n $scope.activeWidget = $scope.widget;\r\n $timeout(0);\r\n\r\n $window.document.getElementById($scope.widget).scrollIntoView();\r\n\r\n }\r\n $scope.widgetClick = 0;\r\n\r\n };\r\n\r\n $scope.analyticsSaveLog = function () {\r\n\r\n var reportDepartureTime = new Date().getTime();\r\n\r\n analyticsService.trackWithVar('reportCreationSave', 'reportCreationDuration', Math.floor((reportDepartureTime - $scope.reportArrivalTime) / 1000));\r\n\r\n };\r\n\r\n $scope.analyticsUpdateLog = function () {\r\n\r\n var reportDepartureTime = new Date().getTime();\r\n\r\n analyticsService.trackWithVar('reportCreationUpdate', 'reportCreationDuration', Math.floor((reportDepartureTime - $scope.reportArrivalTime) / 1000));\r\n\r\n };\r\n\r\n $scope.analyticsCancelLog = function () {\r\n\r\n var reportDepartureTime = new Date().getTime();\r\n\r\n analyticsService.trackWithMultipleVars('reportCreationCancel',\r\n {\r\n 'reportCreationDuration': Math.floor((reportDepartureTime - $scope.reportArrivalTime) / 1000),\r\n 'reportAccount': $scope.reportConfig.accountSelection.length !== 0,\r\n 'reportDate': $scope.dateRangeValid($scope.reportConfig.date),\r\n 'reportShipmentType': ($scope.reportConfig.shipmentType.status.length !== 0 && $scope.reportConfig.shipmentType.modes.length !== 0),\r\n 'reportFinalize': $scope.finalize.reportName.length !== 0\r\n });\r\n\r\n };\r\n\r\n angular.element('#wizardScrollArea').bind(\"scroll\", $scope.wizardScroll);\r\n $scope.initRouteChange();\r\n $scope.createOrdersSummarySettup();\r\n\r\n }\r\n\r\n app.controller('CreateOrdersSummaryController', CreateOrdersSummaryController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n locationReportExportService.$inject = ['$filter', '$uibModal', 'ReportingService', 'ReportDataDisplayService', 'ExcelReportExporterService'];\r\n function locationReportExportService($filter, $uibModal, ReportingService, ReportDataDisplayService, ExcelReportExporterService) {\r\n\r\n var loadingModal;\r\n\r\n function exportXLSX(params) {\r\n\r\n reportSpinner('DOWNLOAD_REPORT');\r\n\r\n return ReportingService.locationReportExport(params).$promise.then(function (response) {\r\n\r\n loadingModal.close();\r\n\r\n return saveAs(response.data, ['LocationReport.xls']);\r\n\r\n });\r\n\r\n }\r\n\r\n function exportCSV(reportConfigId, sortBy, sortDescending, reportTitle, reportHeaders) {\r\n\r\n reportSpinner('DOWNLOAD_REPORT');\r\n\r\n return ReportingService.locationReport({\r\n reportConfigId: reportConfigId,\r\n from: 0,\r\n pageSize: 1000,\r\n sortBy: sortBy,\r\n sortDescending: sortDescending\r\n }).$promise.then(function (response) {\r\n\r\n var data = [];\r\n var exportData = [];\r\n\r\n _.forEach(response.items, function (value) {\r\n\r\n data.push({\r\n 'order':'\"=HYPERLINK(\"\"' + appConfig.ordersUIBaseUrl + '/#/detail/' + value.orderNumber + '\"\",' + value.orderNumber + ')\"',\r\n 'trackingNumber': '\"=HYPERLINK(\"\"' + appConfig.trackingDetailsLink + '/#/?trackingNumber=' + value.orderSummaryDetail.trackingReferenceNumber + '\"\",\"\"' + value.orderSummaryDetail.trackingReferenceNumber + '\"\")\"',\r\n 'account': ReportDataDisplayService.removeComma(value.customer.name),\r\n 'primaryRefNumber': ReportDataDisplayService.removeComma(value.orderSummaryDetail.primaryReferenceNumber),\r\n 'originName': ReportDataDisplayService.removeComma(value.originLocation.name),\r\n 'originCity': ReportDataDisplayService.removeComma(value.originLocation.city),\r\n 'originState': ReportDataDisplayService.removeComma(value.originLocation.state),\r\n 'earliestRequestesPickupDate': ReportDataDisplayService.formatDate(value.originLocation.earliestRequestedDate),\r\n 'latestRequestedPickupDate': ReportDataDisplayService.formatDate(value.originLocation.latestRequestedDate),\r\n 'earliestScheduledPickupDate': ReportDataDisplayService.formatDate(value.originLocation.earliestScheduledDate),\r\n 'latestScheduledPickupDate': ReportDataDisplayService.formatDate(value.originLocation.earliestScheduledDate),\r\n 'actualPickupArrivalDate': ReportDataDisplayService.formatDate(value.originLocation.actualArrivalDate),\r\n 'actualPickupDepartureDate': ReportDataDisplayService.formatDate(value.originLocation.actualDepartureDate),\r\n 'destinationName': ReportDataDisplayService.removeComma(value.destinationLocation.name),\r\n 'destinationCity': ReportDataDisplayService.removeComma(value.destinationLocation.city),\r\n 'destinationState': ReportDataDisplayService.removeComma(value.destinationLocation.state),\r\n 'earliestRequestesDeliveryDate': ReportDataDisplayService.formatDate(value.destinationLocation.earliestRequestedDate),\r\n 'latestRequestedDeliveryDate': ReportDataDisplayService.formatDate(value.destinationLocation.latestRequestedDate),\r\n 'earliestScheduledDeliveryDate': ReportDataDisplayService.formatDate(value.destinationLocation.earliestScheduledDate),\r\n 'latestScheduledDeliveryDate': ReportDataDisplayService.formatDate(value.destinationLocation.earliestScheduledDate),\r\n 'actualDeliveryArrivalDate': ReportDataDisplayService.formatDate(value.destinationLocation.actualArrivalDate),\r\n 'actualDeliveryDepartureDate': ReportDataDisplayService.formatDate(value.destinationLocation.actualDepartureDate),\r\n 'orderStatus': $filter('translate')(ReportDataDisplayService.removeComma(value.orderSummaryDetail.orderStatus)),\r\n 'orderMode': $filter('translate')(ReportDataDisplayService.removeComma(value.orderSummaryDetail.orderMode)),\r\n 'carrierName': ReportDataDisplayService.removeComma(value.carrier.name),\r\n 'proReferenceNumber': ReportDataDisplayService.removeComma(value.orderSummaryDetail.proReferenceNumber)\r\n });\r\n\r\n exportData = data;\r\n\r\n });\r\n\r\n exportData.unshift(reportHeaders);\r\n\r\n ExcelReportExporterService.exportReportExcel(exportData, reportTitle);\r\n\r\n loadingModal.close();\r\n\r\n });\r\n }\r\n\r\n function reportSpinner(notice){\r\n\r\n loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () {\r\n return $filter('translate')(notice);\r\n }\r\n }\r\n });\r\n }\r\n\r\n return {\r\n exportXLSX: exportXLSX,\r\n exportCSV: exportCSV,\r\n reportSpinner: reportSpinner\r\n\r\n };\r\n }\r\n\r\n app.factory('LocationReportExportService', locationReportExportService);\r\n }\r\n\r\n)();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n SavedLocationController.$inject = ['$scope', '$filter', 'savedReportConfigs','reportConfigsSchedules','preferences'];\r\n function SavedLocationController($scope, $filter, savedReportConfigs, reportConfigsSchedules, preferences) {\r\n\r\n $scope.reportConfig = savedReportConfigs;\r\n \r\n $scope.configSchedules = reportConfigsSchedules;\r\n\r\n $scope.preferences = preferences;\r\n\r\n $scope.reportInfo = {name : 'Location Report', title: $filter('translate')('LOCATION_REPORTS'), \r\n message : $filter('translate')(\"YOU_HAVE_NOT_CREATED_ANY_LOCATION_REPORTS_YET\")};\r\n\r\n $scope.createReportPath = 'app.reports.createLocation';\r\n\r\n $scope.runReportPath = 'app.reports.locationReport';\r\n\r\n $scope.savedReportPath = 'app.reports.savedLocation' \r\n\r\n }\r\n\r\n app.controller('SavedLocationController', SavedLocationController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n LocationReportController.$inject = ['$scope', '$filter', '$state', '$window', 'ReportingService',\r\n 'ReportPersistanceService', 'ReportDataDisplayService', 'LocationReportExportService', 'WindowLocationHref'];\r\n\r\n function LocationReportController($scope, $filter, $state, $window, ReportingService\r\n , ReportPersistanceService, ReportDataDisplayService, LocationReportExportService, WindowLocationHref) {\r\n\r\n $scope.reportTitle = $filter('translate')(\"LOCATION_REPORT\");\r\n\r\n $scope.currentPage = 1;\r\n $scope.sortBy = 'account';\r\n $scope.sortDescending = 'true';\r\n $scope.limit = 50;\r\n $scope.offset = 0;\r\n $scope.accountViewSize = 3;\r\n $scope.reportRunning = false;\r\n\r\n $scope.reportHeaders = {\r\n order: $filter('translate')('ORDER_NUMBER'),\r\n trackingNumber: $filter('translate')('TRACKING_NUMBER'),\r\n account: $filter('translate')('ACCOUNT_NAME'),\r\n primaryRefNumber: $filter('translate')('PRIMARY_REFERENCE_NUMBER'),\r\n originName: $filter('translate')('ORIGIN_PICKUP_NAME'),\r\n originCity: $filter('translate')('ORIGIN_PICKUP_CITY'),\r\n originState: $filter('translate')('ORIGIN_PICKUP_STATE'),\r\n earliestRequestesPickupDate: $filter('translate')('EARLIEST_REQUESTED_PICKUP_DATE'),\r\n latestRequestedPickupDate: $filter('translate')('LATEST_REQUESTED_PICKUP_DATE'),\r\n earliestScheduledPickupDate: $filter('translate')('EARLIEST_SCHEDULED_PICKUP_DATE'),\r\n latestScheduledPickupDate: $filter('translate')('LATEST_SCHEDULED_PICKUP_DATE'),\r\n actualPickupArrivalDate: $filter('translate')('ACTUAL_PICKUP_ARRIVAL'),\r\n actualPickupDepartureDate: $filter('translate')('ACTUAL_PICKUP_DEPARTURE'),\r\n destinationName: $filter('translate')('DESTINATION_DELIVERY_NAME'),\r\n destinationCity: $filter('translate')('DESTINATION_DELIVERY_CITY'),\r\n destinationState: $filter('translate')('DESTINATION_DELIVERY_STATE'),\r\n earliestRequestesDeliveryDate: $filter('translate')('EARLIEST_REQUESTED_DELIVERY_DATE'),\r\n latestRequestedDeliveryDate: $filter('translate')('LATEST_REQUESTED_DELIVERY_DATE'),\r\n earliestScheduledDeliveryDate: $filter('translate')('EARLIEST_SCHEDULED_DELIVERY_DATE'),\r\n latestScheduledDeliveryDate: $filter('translate')('LATEST_SCHEDULED_DELIVERY_DATE'),\r\n actualDeliveryArrivalDate: $filter('translate')('ACTUAL_DELIVERY_ARRIVAL'),\r\n actualDeliveryDepartureDate: $filter('translate')('ACTUAL_DELIVERY_DEPARTURE'),\r\n orderStatus: $filter('translate')('ORDER_STATUS'),\r\n orderMode: $filter('translate')('ORDER_MODE'),\r\n carrierName: $filter('translate')('CARRIER_NAME'),\r\n proReferenceNumber: $filter('translate')('PRO_REFERENCE_NUMBER')\r\n };\r\n\r\n $scope.reportDataSetup = function(){\r\n\r\n $scope.reportConfigId = ReportPersistanceService.getConfigVariable('locationConfigID');\r\n if(!$scope.reportConfigId){$state.go('app.reports.savedLocation')};\r\n \r\n $scope.reportConfig = ReportPersistanceService.getConfigVariable('locationConfig');\r\n $scope.reportConfiguration = JSON.parse($scope.reportConfig.reportConfiguration);\r\n\r\n $scope.statusDisplay = ReportDataDisplayService.translateConfig($scope.reportConfiguration.shipmentType.status.split(','));\r\n $scope.modesDisplay = ReportDataDisplayService.translateConfig($scope.reportConfiguration.shipmentType.modes.split(','));\r\n $scope.dateDisplay = ReportDataDisplayService.createDateRange($scope.reportConfiguration.date);\r\n\r\n $scope.grabLocationReport();\r\n\r\n }\r\n\r\n $scope.goToOrderDetails = function (orderNum) {\r\n\t\t\tvar redirectUrl = appConfig.ordersUIBaseUrl + '/#/detail/' + orderNum;\r\n\t\t\tWindowLocationHref.setWindowLocationHref(redirectUrl);\t\t\t\r\n };\r\n\r\n $scope.goToTrackingDetails = function (trackingNumber) {\r\n\r\n $window.open(appConfig.trackingDetailsLink + '/#/?trackingNumber=' + trackingNumber);\r\n\r\n };\r\n\r\n $scope.showAccounts = function () {\r\n $scope.accountList = !$scope.accountList;\r\n $scope.accountViewSize = $scope.accountList ? 500 : 3;\r\n };\r\n\r\n $scope.limitChanged = function (limit) {\r\n\r\n $scope.limit = limit;\r\n $scope.currentPage = Math.floor($scope.offset / $scope.limit) + 1;\r\n $scope.offset = ($scope.currentPage - 1) * $scope.limit;\r\n $scope.grabLocationReport();\r\n\r\n };\r\n\r\n $scope.grabLocationReport = function () {\r\n\r\n $scope.reportRunning = true;\r\n $scope.reportReturn = [];\r\n\r\n ReportingService.locationReport({\r\n reportConfigId: $scope.reportConfigId,\r\n from: (($scope.currentPage || 0) - 1) * $scope.limit,\r\n pageSize: $scope.limit,\r\n sortBy: $scope.sortBy,\r\n sortDescending: $scope.sortDescending\r\n })\r\n .$promise.then(function (locationReport) {\r\n\r\n $scope.reportReturn = locationReport.items;\r\n $scope.reportRunning = false;\r\n\r\n })\r\n };\r\n\r\n $scope.exportXLSX = function () {\r\n\r\n var params = {\r\n reportConfigId: $scope.reportConfigId,\r\n from: 0,\r\n pageSize: 5000,\r\n sortBy: $scope.sortBy,\r\n sortDescending: $scope.sortDescending\r\n };\r\n\r\n LocationReportExportService.exportXLSX(params);\r\n\r\n };\r\n\r\n $scope.exportCSV = function () {\r\n\r\n LocationReportExportService.exportCSV($scope.reportConfigId, $scope.sortBy, $scope.sortDescending, $scope.reportTitle, $scope.reportHeaders);\r\n\r\n };\r\n\r\n $scope.reportDataSetup();\r\n\r\n }\r\n\r\n app.controller('LocationReportController', LocationReportController);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n CreateLocationController.$inject = ['$scope', '$filter', '$state', '$uibModalStack', '$stateParams', '$window', '$timeout',\r\n 'WizardDataService', 'ModalService', 'customerModes', 'locationCustomers', 'analyticsService'];\r\n function CreateLocationController($scope, $filter, $state, $uibModalStack, $stateParams, $window, $timeout,\r\n WizardDataService, ModalService, customerModes, locationCustomers, analyticsService) {\r\n\r\n var onRouteChangeOff;\r\n $uibModalStack.dismissAll();\r\n $scope.widget = 'accountWidget';\r\n\r\n $scope.reportInfo = {\r\n 'name': 'Location Report',\r\n 'category': 'Order Activity',\r\n 'title': $filter('translate')(\"CREATE_LOCATION_REPORT\")\r\n };\r\n $scope.reportConfig = {\r\n 'accountSelection': '',\r\n 'date': { 'type': '', 'range': '', 'startDate': '', 'endDate': '', 'startDatePass': 0, 'endDatePass': 0 },\r\n 'shipmentType': { 'status': '', 'modes': '' },\r\n 'accountSelectionDisplay': [],\r\n 'pick': { 'groupName': '', 'codes': '', 'details': [] },\r\n 'drop': { 'groupName': '', 'codes': '', 'details': [] }\r\n };\r\n\r\n $scope.statusDisplay = '';\r\n $scope.modesDisplay = '';\r\n\r\n $scope.finalize = { 'reportName': '', 'reportDescription': '' };\r\n\r\n $scope.activeWidget = 'accountWidget';\r\n $scope.customerList = locationCustomers.customers;\r\n\r\n $scope.customerModes = customerModes;\r\n\r\n $scope.buttonWidgetHeight = $window.document.getElementById('buttonWidget').offsetHeight;\r\n $scope.scrollPullHeight = 20;\r\n\r\n $scope.showRefreshPrompt = function () {\r\n\r\n if (!$scope.createLocationReportForm.$dirty && $scope.reportConfig.accountSelection.length === 0\r\n && !$scope.reportConfig.shipmentType.status && !$scope.reportConfig.shipmentType.modes\r\n && !$scope.reportConfig.pick.groupName && !$scope.reportConfig.drop.groupName) {\r\n return;\r\n }\r\n\r\n $scope.analyticsCancelLog();\r\n\r\n return true;\r\n\r\n };\r\n\r\n $window.onbeforeunload = $scope.showRefreshPrompt;\r\n\r\n $scope.clickWidget = function (widget) {\r\n\r\n $scope.widgetClick = true;\r\n $scope.activeWidget = widget;\r\n $scope.widget = widget;\r\n $window.document.getElementById(widget).scrollIntoView();\r\n\r\n };\r\n\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'OK',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_EXIT_THE_REPORT_CREATION',\r\n bodyText: 'ALL_INFORMATION_FOR_THIS_REPORT_WILL_BE_LOST'\r\n };\r\n\r\n $scope.routeChange = function (event, toState) {\r\n\r\n if ((!$scope.createLocationReportForm.$dirty && $scope.reportConfig.accountSelection.length === 0\r\n && !$scope.reportConfig.shipmentType.status && !$scope.reportConfig.shipmentType.modes) || toState.name === 'login') {\r\n return;\r\n }\r\n\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n\r\n onRouteChangeOff();\r\n $uibModalStack.dismissAll(result);\r\n $scope.analyticsCancelLog();\r\n $state.go(toState);\r\n }\r\n });\r\n\r\n event.preventDefault();\r\n };\r\n\r\n $scope.initRouteChange = function () {\r\n\r\n onRouteChangeOff = $scope.$on('$stateChangeStart', $scope.routeChange);\r\n\r\n };\r\n\r\n $scope.cancelCreation = function () {\r\n\r\n $state.go('app.reports.savedLocation');\r\n\r\n };\r\n\r\n $scope.saveReport = function () {\r\n\r\n $scope.clearDates();\r\n\r\n if (!$scope.reportConfigId) {\r\n WizardDataService.createSavedReportConfig($scope.reportInfo, $scope.finalize, $scope.reportConfig).then(function () {\r\n\r\n onRouteChangeOff();\r\n $scope.analyticsSaveLog();\r\n $state.go('app.reports.savedLocation');\r\n\r\n });\r\n }\r\n else {\r\n\r\n WizardDataService.updateSavedReportConfig($scope.reportConfigId, $scope.finalize, $scope.reportConfig).then(function () {\r\n\r\n onRouteChangeOff();\r\n $scope.analyticsUpdateLog();\r\n $state.go('app.reports.savedLocation');\r\n\r\n });\r\n }\r\n };\r\n\r\n $scope.clearDates = function () {\r\n\r\n if ($scope.reportConfig.date.range !== 'CUSTOM') {\r\n\r\n $scope.reportConfig.date.startDate = '';\r\n $scope.reportConfig.date.endDate = '';\r\n\r\n }\r\n\r\n };\r\n\r\n $scope.createLocationSettup = function () {\r\n\r\n if ($stateParams.reportConfigPass) {\r\n\r\n var reportConfigSet = JSON.parse($stateParams.reportConfigPass.reportConfiguration);\r\n $scope.finalize.reportName = $stateParams.reportConfigPass.reportNameByUser;\r\n $scope.finalize.reportDescription = $stateParams.reportConfigPass.reportDescriptionByUser;\r\n $scope.reportConfigId = $stateParams.reportConfigPass.savedReportConfigId;\r\n $scope.reportConfig = reportConfigSet;\r\n $scope.reportConfig.date.startDate = $scope.reportConfig.date.startDate ? new Date($scope.reportConfig.date.startDate) : null;\r\n $scope.reportConfig.date.endDate = $scope.reportConfig.date.endDate ? new Date($scope.reportConfig.date.endDate) : null;\r\n\r\n }\r\n\r\n };\r\n\r\n $scope.dateRangeValid = function (date) {\r\n\r\n if (date.type !== '' && date.range !== '') {\r\n if (date.range !== 'CUSTOM') {\r\n return true;\r\n }\r\n else if (date.startDate !== '' && date.endDate !== '') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n $scope.wizardScroll = function () {\r\n\r\n $scope.wizardAreaHeight = $window.document.getElementById('wizardScrollArea').offsetHeight;\r\n $scope.pickupWidgetTop = $window.document.getElementById('pickupWidget').offsetTop;\r\n $scope.deliveryWidgetTop = $window.document.getElementById('deliveryWidget').offsetTop;\r\n $scope.dateWidgetTop = $window.document.getElementById('dateWidget').offsetTop;\r\n $scope.shipWidgetTop = $window.document.getElementById('shipWidget').offsetTop;\r\n $scope.shipWidgetHeight = $window.document.getElementById('shipWidget').offsetHeight;\r\n $scope.finalizeWidgetHeight = $window.document.getElementById('finalizeWidget').offsetHeight;\r\n\r\n $scope.scrollTop = this.scrollTop;\r\n\r\n if ($scope.scrollTop < $scope.scrollPullHeight) {\r\n $scope.widget = 'accountWidget';\r\n }\r\n else if ($scope.scrollTop >= $scope.pickupWidgetTop - $scope.scrollPullHeight && $scope.scrollTop < $scope.deliveryWidgetTop && $scope.widget === 'accountWidget') {\r\n $scope.widget = 'pickupWidget';\r\n }\r\n else if ($scope.scrollTop <= $scope.pickupWidgetTop + $scope.scrollPullHeight && $scope.widget === 'deliveryWidget') {\r\n $scope.widget = 'pickupWidget';\r\n }\r\n else if ($scope.scrollTop >= $scope.deliveryWidgetTop - $scope.scrollPullHeight && $scope.scrollTop < $scope.dateWidgetTop && $scope.widget === 'pickupWidget') {\r\n $scope.widget = 'deliveryWidget';\r\n }\r\n else if ($scope.scrollTop <= $scope.deliveryWidgetTop + $scope.scrollPullHeight && $scope.widget === 'dateWidget') {\r\n $scope.widget = 'deliveryWidget';\r\n }\r\n else if ($scope.scrollTop >= $scope.dateWidgetTop - $scope.scrollPullHeight && $scope.scrollTop < $scope.shipWidgetTop && $scope.widget === 'deliveryWidget') {\r\n $scope.widget = 'dateWidget';\r\n }\r\n else if ($scope.scrollTop <= $scope.dateWidgetTop + $scope.scrollPullHeight && $scope.widget === 'shipWidget') {\r\n $scope.widget = 'dateWidget';\r\n }\r\n else if ($scope.scrollTop >= $scope.shipWidgetTop && $scope.scrollTop < $scope.shipWidgetTop + Math.floor($scope.shipWidgetHeight / 2) && $scope.widget === 'dateWidget') {\r\n $scope.widget = 'shipWidget';\r\n }\r\n else if ($scope.scrollTop < $scope.shipWidgetTop + $scope.scrollPullHeight && $scope.widget === 'finalizeWidget') {\r\n $scope.widget = 'shipWidget';\r\n }\r\n else if ($scope.scrollTop + $scope.wizardAreaHeight > $scope.shipWidgetTop + $scope.shipWidgetHeight + $scope.finalizeWidgetHeight + $scope.buttonWidgetHeight - $scope.scrollPullHeight) {\r\n $scope.widget = 'finalizeWidget';\r\n }\r\n\r\n if ($scope.widget !== $scope.activeWidget && !$scope.widgetClick) {\r\n\r\n $scope.activeWidget = $scope.widget;\r\n $timeout(0);\r\n\r\n $window.document.getElementById($scope.widget).scrollIntoView();\r\n\r\n }\r\n $scope.widgetClick = false;\r\n\r\n };\r\n\r\n $scope.analyticsSaveLog = function () {\r\n\r\n var reportDepartureTime = new Date().getTime();\r\n\r\n analyticsService.trackWithVar('reportCreationSave', 'reportCreationDuration', Math.floor((reportDepartureTime - $scope.reportArrivalTime) / 1000));\r\n\r\n };\r\n\r\n $scope.analyticsUpdateLog = function () {\r\n\r\n var reportDepartureTime = new Date().getTime();\r\n\r\n analyticsService.trackWithVar('reportCreationUpdate', 'reportCreationDuration', Math.floor((reportDepartureTime - $scope.reportArrivalTime) / 1000));\r\n\r\n };\r\n\r\n $scope.analyticsCancelLog = function () {\r\n\r\n var reportDepartureTime = new Date().getTime();\r\n\r\n analyticsService.trackWithMultipleVars('reportCreationCancel',\r\n {\r\n 'reportCreationDuration': Math.floor((reportDepartureTime - $scope.reportArrivalTime) / 1000),\r\n 'reportAccount': $scope.reportConfig.accountSelection.length !== 0,\r\n 'reportPickup': $scope.reportConfig.pick.groupName !== null,\r\n 'reportDelivery': $scope.reportConfig.drop.groupName !== null,\r\n 'reportDate': $scope.dateRangeValid($scope.reportConfig.date),\r\n 'reportShipmentType': ($scope.reportConfig.shipmentType.status && $scope.reportConfig.shipmentType.modes),\r\n 'reportFinalize': $scope.finalize.reportName.length !== 0\r\n });\r\n\r\n };\r\n\r\n angular.element('#wizardScrollArea').bind(\"scroll\", $scope.wizardScroll);\r\n $scope.initRouteChange();\r\n $scope.createLocationSettup();\r\n\r\n }\r\n\r\n app.controller('CreateLocationController', CreateLocationController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n InTransitOrdersController.$inject = ['$scope', '$state', '$window', 'ReportingService', 'ServiceOffering',\r\n '$filter', 'StatusMappingService', 'ExcelReportExporterService', 'ReportDataDisplayService', 'WindowLocationHref'];\r\n function InTransitOrdersController($scope, $state, $window, ReportingService, ServiceOffering, $filter,\r\n StatusMappingService, ExcelReportExporterService, ReportDataDisplayService, WindowLocationHref) {\r\n\r\n $scope.inTransitData = [];\r\n $scope.currentPage = 1;\r\n $scope.totalRecords = 0;\r\n $scope.sortBy = 'deliveryDate';\r\n $scope.sortDescending = \"true\";\r\n $scope.limit = 50;\r\n $scope.offset = 0;\r\n $scope.exportReady = false;\r\n $scope.reportHeaders = {\r\n order: 'Orders',\r\n customer: 'Customer',\r\n primaryRefNumber:'Primary Reference Number',\r\n orderCreateDate:'Order Create Date',\r\n shippingMethod:'Shipping Method',\r\n loadNumber:'Load Number',\r\n trackingNumber:'Tracking Number',\r\n orderActivityDate:'Order Activity Date',\r\n originName:'Order Pickup Location Name',\r\n originLocation:'Order Pickup Location',\r\n earliestPickDate:'Earliest Pickup Date',\r\n latestPickupDate:'Latest Pickup Date',\r\n actualPickupDate:'Actual Pickup Date',\r\n destinationName:'Order Delivery Location Name',\r\n destinationLocation:'Order Delivery Location',\r\n earliestDeliveryDate:'Earliest Delivery Date',\r\n latestDeliveryDate:'Latest Delivery Date',\r\n status:'Status'\r\n };\r\n $scope.reportRunning = false;\r\n $scope.reportTitle = $filter('translate')(\"IN_TRANSIT_ORDERS\");\r\n\r\n $scope.goToOrderDetails = function (orderNum) {\r\n\t\t\tvar redirectUrl = appConfig.ordersUIBaseUrl + '/#/detail/' + orderNum;\r\n\t\t\tWindowLocationHref.setWindowLocationHref(redirectUrl);\r\n\t\t};\r\n\r\n $scope.goToTrackingDetails = function (trackingNumber) {\r\n\r\n $window.open(appConfig.trackingDetailsLink + '/#/?trackingNumber=' + trackingNumber);\r\n\r\n };\r\n\r\n $scope.grabInTransit = function(){\r\n\r\n $scope.reportRunning = true;\r\n $scope.inTransitData = [];\r\n\r\n ReportingService.inTransitV2({\r\n from: (($scope.currentPage || 0) - 1) * $scope.limit,\r\n pageSize:$scope.limit,\r\n sortBy: $scope.sortBy,\r\n sortDescending: $scope.sortDescending\r\n })\r\n .$promise.then(function(response)\r\n {\r\n\r\n $scope.totalRecords = response.total;\r\n $scope.reportRunning = false;\r\n\r\n var data = [];\r\n\r\n _.forEach(response.items, function(value) {\r\n\r\n data.push({\r\n\r\n 'order':value.orderNumber,\r\n 'customer':ReportDataDisplayService.dataCheck(value.customer,-1,'name'),\r\n 'primaryRefNumber':ReportDataDisplayService.getPrimaryRefNumber(value),\r\n 'orderCreateDate':ReportDataDisplayService.formatDate(value.createdDateTime),\r\n 'shippingMethod': ServiceOffering.get(ReportDataDisplayService.dataCheck(value.services,0,'serviceOfferingNumber')),\r\n 'trackingNumber': ReportDataDisplayService.getTrackingNumber(value),\r\n 'originName': ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'name'),\r\n 'originLocation': ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'city') + ', ' + ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'state'),\r\n 'actualPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'actualArrivalTime')),\r\n 'destinationName': ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'name'),\r\n 'destinationLocation': ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'city') + ', ' + ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'state'),\r\n 'orderActivityDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].loads,0,'activityDate')),\r\n 'earliestPickDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'plannedEarliestTime')),\r\n 'latestPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'plannedLatestTime')),\r\n 'earliestDeliveryDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'plannedEarliestTime')),\r\n 'latestDeliveryDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'plannedLatestTime')),\r\n 'status': $filter('translate')(StatusMappingService.getStatusResourceKey(ReportDataDisplayService.dataCheck(value.services,0,'statusRDN')))\r\n\r\n });\r\n });\r\n\r\n $scope.inTransitData = data;\r\n\r\n }, function() {\r\n\r\n });\r\n };\r\n\r\n $scope.grabInTransitDataExport = function(){\r\n\r\n ReportingService.inTransitV2({\r\n from:null,\r\n pageSize:null,\r\n sortBy: $scope.sortBy,\r\n sortDescending: $scope.sortDescending\r\n }).$promise.then(function(response)\r\n {\r\n var data = [];\r\n\r\n _.forEach(response.items, function(value) {\r\n\r\n data.push({\r\n 'order':'\"=HYPERLINK(\"\"' + appConfig.ordersUIBaseUrl + '/#/detail/' + value.orderNumber + '\"\",' + value.orderNumber + ')\"',\r\n 'customer':ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.customer,-1,'name')),\r\n 'primaryRefNumber':ReportDataDisplayService.removeComma(ReportDataDisplayService.getPrimaryRefNumber(value)),\r\n 'orderCreateDate':ReportDataDisplayService.formatDate(value.createdDateTime),\r\n 'shippingMethod': ServiceOffering.get(ReportDataDisplayService.dataCheck(value.services,0,'serviceOfferingNumber')).serviceOfferingName,\r\n 'loadNumber': ReportDataDisplayService.dataCheck(value.services[0].loads,0,'loadNumber'),\r\n 'trackingNumber': '\"=HYPERLINK(\"\"' + appConfig.trackingDetailsLink + '/#/?trackingNumber=' + ReportDataDisplayService.getTrackingNumber(value) + '\"\",\"\"' + ReportDataDisplayService.getTrackingNumber(value) + '\"\")\"',\r\n 'orderActivityDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].loads,0,'activityDate')),\r\n 'originName': ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'name')),\r\n 'originLocation': ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'city') + ' ' + ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'state'))),\r\n 'earliestPickDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'plannedEarliestTime')),\r\n 'latestPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'plannedLatestTime')),\r\n 'actualPickupDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].pickupFrom,-1,'actualArrivalTime')),\r\n 'destinationName': ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'name')),\r\n 'destinationLocation': ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'city') + ' ' + ReportDataDisplayService.removeComma(ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'state'))),\r\n 'earliestDeliveryDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'plannedEarliestTime')),\r\n 'latestDeliveryDate': ReportDataDisplayService.formatDate(ReportDataDisplayService.dataCheck(value.services[0].deliverTo,-1,'plannedLatestTime')),\r\n 'status': $filter('translate')(StatusMappingService.getStatusResourceKey(ReportDataDisplayService.dataCheck(value.services,0,'statusRDN')))\r\n });\r\n\r\n $scope.exportData = data;\r\n $scope.exportReady = true;\r\n });\r\n\r\n $scope.exportData.unshift($scope.reportHeaders);\r\n\r\n }, function() {\r\n\r\n });\r\n };\r\n\r\n $scope.limitChanged = function (limit) {\r\n\r\n $scope.limit = limit;\r\n $scope.currentPage = Math.floor($scope.offset / $scope.limit) + 1;\r\n $scope.offset = ($scope.currentPage - 1) * $scope.limit;\r\n $scope.grabInTransit();\r\n\r\n };\r\n\r\n $scope.exportInTransit = function() {\r\n\r\n ExcelReportExporterService.exportReportExcel($scope.exportData, $scope.reportTitle);\r\n\r\n };\r\n\r\n $scope.grabInTransit();\r\n $scope.grabInTransitDataExport();\r\n }\r\n app.controller('InTransitOrdersController', InTransitOrdersController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n subscriptionTokenService.$inject = ['$window'];\r\n \r\n function subscriptionTokenService($window) {\r\n \r\n function decodeToken(token) {\r\n\r\n var base64Url = token.split('.')[1];\r\n var base64 = base64Url.replace('-', '+').replace('_', '/');\r\n return JSON.parse($window.atob(base64));\r\n\r\n };\r\n \r\n return {\r\n decodeToken: decodeToken\r\n };\r\n \r\n }\r\n\r\n angular.module('NavisphereOnline').factory('SubscriptionTokenService', subscriptionTokenService);\r\n \r\n })();\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n\r\n reportPersistanceService.$inject = ['$q'];\r\n\r\n function reportPersistanceService($q) {\r\n\r\n var configVariables = {\r\n\r\n orderSummaryConfigID : null,\r\n orderSummaryConfig : null,\r\n locationConfigID : null,\r\n locationConfig : null\r\n\r\n };\r\n\r\n function addReportConfig(reportConfigID, savedReportConfig){\r\n\r\n var deferred = $q.defer();\r\n\r\n if(savedReportConfig.reportName === 'Orders Summary Report')\r\n {\r\n\r\n configVariables.orderSummaryConfigID = reportConfigID;\r\n configVariables.orderSummaryConfig = savedReportConfig;\r\n\r\n }\r\n else\r\n {\r\n\r\n configVariables.locationConfigID = reportConfigID;\r\n configVariables.locationConfig = savedReportConfig;\r\n\r\n }\r\n\r\n deferred.resolve();\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getConfigVariable(configVariable){\r\n\r\n return configVariables[configVariable];\r\n\r\n }\r\n\r\n function clearReportConfig(){\r\n\r\n configVariables = {};\r\n\r\n }\r\n\r\n return {\r\n addReportConfig: addReportConfig,\r\n clearReportConfig: clearReportConfig,\r\n getConfigVariable : getConfigVariable\r\n };\r\n\r\n }\r\n\r\n app.factory('ReportPersistanceService', reportPersistanceService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n\r\n reportDataDisplayService.$inject = ['DateTimeService', 'RefDataMappingService', '$filter', '$locale'];\r\n\r\n function reportDataDisplayService(DateTimeService, RefDataMappingService, $filter, $locale) {\r\n\r\n function getPrimaryRefNumber(order) {\r\n\r\n if (!_.isNil(order.referenceNumbers)) {\r\n for (var i = 0; i < order.referenceNumbers.length; i++) {\r\n\r\n if (order.referenceNumbers[i].entity === \"BillTo\" &&\r\n order.referenceNumbers[i].entityId === 2 &&\r\n order.referenceNumbers[i].primary) {\r\n return order.referenceNumbers[i].value;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function getTrackingNumber(order) {\r\n\r\n if (!_.isNil(order.referenceNumbers)) {\r\n\r\n for (var i = 0; i < order.referenceNumbers.length; i++) {\r\n\r\n if (order.referenceNumbers[i].referenceDataNumber === RefDataMappingService.getCategoryId('TRACKING_NUMBER') &&\r\n order.referenceNumbers[i].entityId === 1) {\r\n return order.referenceNumbers[i].value;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function removeComma(value) {\r\n\r\n if (value) {\r\n var valuef = value.replace(/,/g, \"\");\r\n return valuef\r\n }\r\n return '';\r\n }\r\n\r\n function formatDate(date) {\r\n\r\n var datef = DateTimeService.getDisplayDateAndTime(date);\r\n\r\n if (datef == \"Invalid Date\") {\r\n datef = '';\r\n }\r\n //remove 12:00 AM from any dates.\r\n datef = datef.replace(\"12:00 AM\", \"\");\r\n return datef;\r\n }\r\n\r\n function createDateRange(date) {\r\n\r\n var dateFormat = $locale.DATETIME_FORMATS['shortDate'] === 'dd/MM/yyyy' ? 'DD MMM' : 'MMM DD';\r\n\r\n var dateDisplay;\r\n\r\n if (date.range === 'LAST_MONTH') {\r\n dateDisplay = moment().subtract(1, 'month').startOf('month').format(dateFormat) + ' - ' + moment().subtract(1, 'month').endOf('month').format(dateFormat);\r\n }\r\n else if (date.range === 'THIS_MONTH') {\r\n dateDisplay = moment().startOf('month').format(dateFormat) + ' - ' + moment().endOf('month').format(dateFormat);\r\n }\r\n else if (date.range === 'LAST_WEEK') {\r\n dateDisplay = moment().subtract(1, 'week').startOf('week').format(dateFormat) + ' - ' + moment().subtract(1, 'week').endOf('week').format(dateFormat);\r\n }\r\n else if (date.range === 'THIS_WEEK') {\r\n dateDisplay = moment().startOf('week').format(dateFormat) + ' - ' + moment().endOf('week').format(dateFormat);\r\n }\r\n else {\r\n\r\n var startDate = new Date(date.startDate);\r\n var endDate = new Date(date.endDate);\r\n\r\n dateDisplay = moment(startDate).format(dateFormat) + ' - ' + moment(endDate).format(dateFormat)\r\n }\r\n\r\n return dateDisplay;\r\n\r\n }\r\n\r\n function dataCheck(data, level, checktype) {\r\n\r\n var datachecked;\r\n\r\n if (level >= 0 && !_.isNil(data) && data.length !== 0 && data[level][checktype] !== '') {\r\n datachecked = data[level][checktype];\r\n }\r\n else if (!_.isNil(data) && !_.isNil(data[checktype]) && data[checktype] !== '' && level === -1) {\r\n datachecked = data[checktype];\r\n }\r\n else {\r\n datachecked = null;\r\n }\r\n\r\n return datachecked;\r\n\r\n }\r\n\r\n function translateConfig(config) {\r\n\r\n var display = [];\r\n\r\n _.forEach(config, function (item) {\r\n\r\n display.push($filter('translate')(item));\r\n\r\n });\r\n\r\n return display.join(', ');\r\n\r\n }\r\n\r\n return {\r\n getPrimaryRefNumber: getPrimaryRefNumber,\r\n getTrackingNumber: getTrackingNumber,\r\n removeComma: removeComma,\r\n formatDate: formatDate,\r\n createDateRange: createDateRange,\r\n dataCheck: dataCheck,\r\n translateConfig: translateConfig\r\n };\r\n\r\n }\r\n\r\n app.factory('ReportDataDisplayService', reportDataDisplayService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('downloadButton', function () {\r\n return {\r\n templateUrl: 'app/reporting/common/views/downloadButton.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n exportXlsx: '&exportXlsx',\r\n exportCsv: '&exportCsv'\r\n },\r\n link: function (scope) {\r\n\r\n scope.downloadType = 'xlsx';\r\n\r\n scope.downloadReport = function(type) {\r\n\r\n scope.downloadDropDown = scope.downloadDropDown ? !scope.downloadDropDown : scope.downloadDropDown;\r\n\r\n type === 'xlsx' ? scope.exportXlsx()('Directive Args') : scope.exportCsv()('Directive Args');\r\n\r\n scope.downloadType = type;\r\n\r\n };\r\n }\r\n };\r\n });\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n //use min and max attributes to make this directive limit to said min and/or max values\r\n app.directive('wholeNumber', ['CaretPositionService', '$document',\r\n function (CaretPositionService, $document) {\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n link: function (scope, element, attrs, ngModelController) {\r\n\r\n ngModelController.$parsers.push(parser);\r\n\r\n function parser(value) {\r\n if (!value) {\r\n return null;\r\n }\r\n var cleanVal = '';\r\n var hasFocus = (element[0] == $document[0].activeElement);\r\n var min, allowsNegatives, caretPosition;\r\n\r\n if (hasFocus) {\r\n caretPosition = CaretPositionService.getCaretPosition(element[0]);\r\n }\r\n\r\n var nonCleanVals = 0;\r\n if (attrs.min) {\r\n min = parseInt(attrs.min);\r\n }\r\n allowsNegatives = !attrs.min || min < 0;\r\n\r\n var v = value.toString();\r\n for (var i = 0; i < v.length; i++) {\r\n if ((['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].indexOf(v[i]) >= 0) || (i == 0 && v[0] == '-' && allowsNegatives)) {\r\n cleanVal += v[i];\r\n } else {\r\n nonCleanVals++;\r\n }\r\n }\r\n\r\n var cleanInt = parseInt(cleanVal);\r\n var setCaretToEnd = undefined;\r\n if (attrs.max) {\r\n var max = parseInt(attrs.max);\r\n if (cleanInt > max) {\r\n cleanVal = max;\r\n setCaretToEnd = attrs.max.length;\r\n }\r\n }\r\n if (attrs.min) {\r\n if (cleanInt < min) {\r\n cleanVal = min;\r\n setCaretToEnd = attrs.min.length;\r\n }\r\n }\r\n element.val(cleanVal);\r\n ngModelController.$setViewValue(cleanVal);\r\n\r\n if (hasFocus) {\r\n CaretPositionService.setCaretPosition(element[0], setCaretToEnd ? setCaretToEnd : caretPosition - nonCleanVals);\r\n }\r\n return cleanVal;\r\n }\r\n\r\n ngModelController.$validators.wholeNumberValidator = function (modelValue, viewValue) {\r\n if (ngModelController.$isEmpty(viewValue)) {\r\n return true;\r\n }\r\n var validInt = parseInt(modelValue);\r\n if (isNaN(validInt) || (attrs.max && validInt > parseInt(attrs.max)) || (attrs.min && validInt < parseInt(attrs.min))) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n }\r\n }\r\n }]);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('navProgressBar', [function () {\r\n return {\r\n templateUrl: 'app/common/directives/progressBar/progressBar.tpl.html',\r\n restrict: 'E',\r\n link: function () {\r\n },\r\n scope: {\r\n steps: \"=\",\r\n onStepClick: \"&\"\r\n }\r\n };\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('stickySubHeader', ['$window', '$timeout', function ($window, $timeout) {\r\n\r\n function bindScrollEvent(element) {\r\n angular.element($window).bind(\"scroll\", function () {\r\n stickProgressHeader(element);\r\n });\r\n }\r\n function stickProgressHeader(element) {\r\n var headerBottom = angular.element('[header-scroll]').height();\r\n element.children().first().css('top', headerBottom);\r\n }\r\n return {\r\n restrict: 'E',\r\n scope: {},\r\n link: function (scope, element) {\r\n bindScrollEvent(element);\r\n $timeout(function () {\r\n stickProgressHeader(element);\r\n }, 0);\r\n }\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('showAddress', ['AddressService', function (AddressService) {\r\n return {\r\n templateUrl: 'app/common/directives/showAddress/showAddress.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n party: \"=\"\r\n },\r\n link: function(scope) {\r\n scope.getAddressLine1 = AddressService.GetAddressLine1;\r\n scope.getAddressLine2 = AddressService.GetAddressLine2;\r\n scope.getAddressLine3 = AddressService.GetAddressLine3;\r\n scope.getAddressLine4 = AddressService.GetAddressLine4;\r\n scope.getAddressLine5 = AddressService.GetAddressLine5;\r\n }\r\n }\r\n }]);\r\n})();\r\n\n(function() {\r\n angular.module('NavisphereOnline').directive('datePicker', ['$locale', 'DateTimeService', function($locale, DateTimeService) {\r\n return {\r\n templateUrl: 'app/common/directives/datePicker/datePicker.tpl.html',\r\n transclude: true,\r\n scope: {\r\n startDate: \"=start\",\r\n endDate: \"=end\"\r\n },\r\n link: function($scope, init, attrs) {\r\n $scope.calendarOptions = {\r\n format: $locale.DATETIME_FORMATS['shortDate'],\r\n startDateOptions: {\r\n showWeeks: false,\r\n minDate: \"01/01/17\",\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n },\r\n endDateOptions: {\r\n showWeeks: false,\r\n minDate: \"01/01/17\",\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n }\r\n };\r\n $scope.isOpen = {\r\n startDate: false,\r\n endDate: false\r\n };\r\n\r\n $scope.openDate = function (dateType) {\r\n $scope.isOpen[dateType] = true;\r\n };\r\n\r\n $scope.startUpdated = function() {\r\n $scope.calendarOptions.endDateOptions.minDate = DateTimeService.getLatestDateMinDate($scope.startDate)\r\n }\r\n }\r\n };\r\n }]);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n datePickerController.$inject = [\"$locale\", \"$scope\", \"DateTimeService\"];\r\n function datePickerController($locale, $scope, DateTimeService) {\r\n $scope.calendarOptions = {};\r\n $scope.calendarOptions.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.calendarOptions.dateOptions = {\r\n showWeeks: false,\r\n minDate: DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n\r\n $scope.openDate = function () {\r\n $scope.calendarOptions.isOpened = true;\r\n };\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").controller(\"datePickerController\", datePickerController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n //use decimal-places=\"#\" to set # decimal places allowed, defaults to 2\r\n app.directive('localeDecimalValidator', ['$locale', 'CaretPositionService', '$document',\r\n function ($locale, CaretPositionService,$document) {\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n scope: {\r\n decimalPlaces: '&',\r\n integerPlaces: '&'\r\n },\r\n link: function (scope, element, attrs, ngModelController) {\r\n var decimalPlaces = 2;\r\n var integerPlaces = 15;\r\n if (scope.decimalPlaces()) {\r\n var decPlaces = parseInt(scope.decimalPlaces());\r\n if (!isNaN(decPlaces)) {\r\n decimalPlaces = decPlaces;\r\n }\r\n }\r\n if (scope.integerPlaces()) {\r\n var intPlaces = parseInt(scope.integerPlaces());\r\n if (!isNaN(intPlaces)) {\r\n integerPlaces = intPlaces;\r\n }\r\n }\r\n ngModelController.$parsers.push(parser);\r\n ngModelController.$formatters.push(formatter);\r\n\r\n function parser(value) {\r\n var cleanVal = '';\r\n var hasFocus = (element[0] == $document[0].activeElement);\r\n\r\n var caretPosition;\r\n if (hasFocus) {\r\n caretPosition = CaretPositionService.getCaretPosition(element[0]);\r\n }\r\n\r\n var nonCleanVals = 0;\r\n var separatorUsed = false;\r\n var decimalPlacesUsed = 0;\r\n var integerPlacesUsed = 0;\r\n var addCarrotPositions = 0;\r\n for (var i = 0; i < value.length; i++) {\r\n\r\n if (['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', $locale.NUMBER_FORMATS.DECIMAL_SEP].indexOf(value[i]) >= 0) {\r\n if (separatorUsed && decimalPlacesUsed >= decimalPlaces) {\r\n break;\r\n }\r\n if ($locale.NUMBER_FORMATS.DECIMAL_SEP === value[i]) {\r\n if (separatorUsed && decimalPlacesUsed >= decimalPlaces) {\r\n break;\r\n }\r\n if (!separatorUsed) {\r\n separatorUsed = true;\r\n cleanVal += value[i];\r\n }\r\n } else{\r\n if (separatorUsed) {\r\n decimalPlacesUsed++;\r\n cleanVal += value[i];\r\n } else if (integerPlacesUsed >= integerPlaces) {\r\n cleanVal += $locale.NUMBER_FORMATS.DECIMAL_SEP;\r\n cleanVal += value[i];\r\n decimalPlacesUsed++;\r\n separatorUsed = true;\r\n if((caretPosition - 1) === integerPlaces){\r\n addCarrotPositions++;\r\n }\r\n } else {\r\n integerPlacesUsed++;\r\n cleanVal += value[i];\r\n }\r\n }\r\n } else {\r\n nonCleanVals++;\r\n }\r\n }\r\n\r\n ngModelController.$setViewValue(cleanVal);\r\n element.val(cleanVal);\r\n\r\n var invariantValue = cleanVal.split($locale.NUMBER_FORMATS.DECIMAL_SEP).join('.');\r\n if (hasFocus) {\r\n CaretPositionService.setCaretPosition(element[0], caretPosition - nonCleanVals + addCarrotPositions);\r\n }\r\n return invariantValue;\r\n }\r\n function formatter(value) {\r\n if (value === 0)\r\n return value;\r\n if (value) {\r\n var stringVal = value.toString();\r\n var invariantDecimalSeparator = '.';\r\n var localeVal = '';\r\n var separatorUsed = false;\r\n var decimalPlacesUsed = 0;\r\n for (var i = 0; i < stringVal.length; i++) {\r\n if (separatorUsed && decimalPlacesUsed >= decimalPlaces) {\r\n break;\r\n }\r\n if (stringVal[i] === invariantDecimalSeparator) {\r\n if (separatorUsed) {\r\n break;\r\n }\r\n localeVal += $locale.NUMBER_FORMATS.DECIMAL_SEP;\r\n separatorUsed = true;\r\n } else {\r\n if (separatorUsed) {\r\n decimalPlacesUsed++;\r\n }\r\n localeVal += stringVal[i];\r\n }\r\n }\r\n\r\n return localeVal;\r\n }\r\n }\r\n\r\n ngModelController.$validators.localeDecimalValidator = function (modelValue, viewValue) {\r\n if (ngModelController.$isEmpty(viewValue)) {\r\n return true;\r\n }\r\n if (viewValue.split($locale.NUMBER_FORMATS.DECIMAL_SEP).length > 2) {\r\n return false;\r\n }\r\n var validFloat = parseFloat(modelValue);\r\n if (isNaN(validFloat)) {\r\n return false;\r\n }\r\n if (attrs.min) {\r\n if (validFloat < parseFloat(attrs.min)) {\r\n ngModelController.$setValidity('min', false);\r\n } else {\r\n ngModelController.$setValidity('min', true);\r\n }\r\n }\r\n if (attrs.max) {\r\n return validFloat <= parseFloat(attrs.max);\r\n }\r\n return true;\r\n\r\n };\r\n }\r\n }\r\n }]);\r\n\r\n})();\r\n\nangular.module('NavisphereOnline').directive('formatDate', ['$filter', function ($filter) {\r\n return {\r\n restrict: 'A',\r\n require: '?ngModel',\r\n link: function (scope, element, attrs, ngModelController){\r\n element.bind('blur', function () {\r\n var val = ngModelController.$modelValue;\r\n if (val) {\r\n ngModelController.$setViewValue($filter('date')(val, 'shortDate'), 'blur');\r\n ngModelController.$render();\r\n }\r\n });\r\n }\r\n }\r\n}]);\r\n\n(function () {\r\n var compareTo = function () {\r\n return {\r\n require: \"ngModel\",\r\n scope: {\r\n otherModelValue: \"=compareTo\"\r\n },\r\n link: function (scope, element, attributes, ngModel) {\r\n\r\n ngModel.$validators.compareTo = function (modelValue) {\r\n return modelValue === scope.otherModelValue.$viewValue;\r\n };\r\n\r\n scope.$watch(\"otherModelValue.$viewValue\", function () {\r\n ngModel.$validate();\r\n });\r\n }\r\n };\r\n };\r\n\r\n angular.module('NavisphereOnline').directive(\"compareTo\", compareTo);\r\n}());\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('enforceMaxlength', function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModelCtrl) {\r\n var maxlength = Number(attrs.enforceMaxlength);\r\n function enforceMaxLength(text) {\r\n if (text) {\r\n if (text.length > maxlength) {\r\n var transformedInput = text.substring(0, maxlength);\r\n ngModelCtrl.$setViewValue(transformedInput);\r\n ngModelCtrl.$render();\r\n return transformedInput;\r\n }\r\n }return text;\r\n }\r\n\r\n ngModelCtrl.$parsers.push(enforceMaxLength);\r\n }\r\n };\r\n });\r\n}());\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .directive(\"analytics\", ['analyticsService', function(analyticsService) {\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n trackingTagType: '@',\r\n trackingTagName: '@',\r\n trackingTagValue: '@',\r\n trackingTagVariables: '='\r\n\r\n },\r\n link: function (scope, element) {\r\n element.on('click', function () {\r\n if (scope.trackingTagType === 'track') {\r\n analyticsService.track(scope.trackingTagName);\r\n }\r\n if (scope.trackingTagType === 'trackWithVar') {\r\n analyticsService.trackWithVar(scope.trackingTagName, scope.trackingTagValue, scope.trackingTagVariables);\r\n }\r\n if (scope.trackingTagType === 'trackWithMultipleVars') {\r\n analyticsService.trackWithMultipleVars(scope.trackingTagName, scope.trackingTagVariables);\r\n }\r\n });\r\n }\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.constant('panelConfig', {\r\n closeOthers: true\r\n });\r\n\r\n app.directive('panel', function () {\r\n return {\r\n restrict: 'EA',\r\n controller: 'PanelController',\r\n transclude: true,\r\n replace: false,\r\n template: '
'\r\n };\r\n });\r\n\r\n app.directive('panelGroup', function () {\r\n return {\r\n require: '^panel', // We need this directive to be inside an accordion\r\n restrict: 'EA',\r\n transclude: true, // It transcludes the contents of the directive into the template\r\n replace: true, // The element containing the directive will be replaced with the template\r\n templateUrl: 'app/common/directives/accordion/panelgroup-template.html',\r\n scope: {\r\n heading: '@', // Interpolate the heading attribute onto this scope\r\n title: '@',\r\n buttonText: '@',\r\n addButtonText: '@',\r\n isOpen: '=?',\r\n onOpenFunc: '&',\r\n isDisabled: '=?',\r\n step: '=step',\r\n isWide: '=?',\r\n hideHeading: '=?',\r\n hidePanel: '=?'\r\n },\r\n controller: function () {\r\n this.setHeading = function (element) {\r\n this.heading = element;\r\n };\r\n },\r\n link: function (scope, element, attrs, accordionCtrl) {\r\n accordionCtrl.addGroup(scope);\r\n\r\n scope.$watch('isOpen', function (value) {\r\n if (value) {\r\n accordionCtrl.closeOthers(scope);\r\n scope.step.visited = true;\r\n if (scope.onOpenFunc) {\r\n scope.onOpenFunc(scope.step);\r\n }\r\n }\r\n });\r\n\r\n scope.toggleOpen = function () {\r\n\r\n if (scope.step.canOpen) {\r\n scope.step.canOpen().then(function (canOpen) {\r\n if (canOpen) {\r\n if (!scope.isDisabled) {\r\n scope.isOpen = !scope.isOpen;\r\n }\r\n }\r\n });\r\n } else {\r\n if (!scope.isDisabled) {\r\n scope.isOpen = !scope.isOpen;\r\n }\r\n }\r\n };\r\n }\r\n };\r\n });\r\n\r\n app.directive('panelHeading', function () {\r\n return {\r\n restrict: 'EA',\r\n transclude: true, // Grab the contents to be used as the heading\r\n template: '', // In effect remove this element!\r\n replace: true,\r\n require: '^panelGroup',\r\n link: function (scope, element, attr, accordionGroupCtrl, transclude) {\r\n // Pass the heading to the accordion-group controller\r\n // so that it can be transcluded into the right place in the template\r\n // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]\r\n accordionGroupCtrl.setHeading(transclude(scope, angular.noop));\r\n }\r\n };\r\n });\r\n\r\n app.directive('panelTransclude', function () {\r\n return {\r\n require: '^panelGroup',\r\n link: function (scope, element, attr, controller) {\r\n scope.$watch(function () {\r\n return controller[attr.panelTransclude];\r\n }, function (heading) {\r\n if (heading) {\r\n element.html('');\r\n element.append(heading);\r\n }\r\n });\r\n }\r\n };\r\n });\r\n})();\r\n\r\n\n(function () {\r\n 'use strict';\r\n angular.module('NavisphereOnline').controller('PanelController', [\r\n '$scope', '$attrs', 'panelConfig', function ($scope, $attrs, panelConfig) {\r\n\r\n this.groups = [];\r\n\r\n /// Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to\r\n this.closeOthers = function (openGroup) {\r\n var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : panelConfig.closeOthers;\r\n if (closeOthers) {\r\n angular.forEach(this.groups, function (group) {\r\n if (group !== openGroup) {\r\n group.isOpen = false;\r\n }\r\n });\r\n }\r\n };\r\n\r\n // This is called from the accordion-group directive to add itself to the accordion\r\n this.addGroup = function (groupScope) {\r\n var that = this;\r\n this.groups.push(groupScope);\r\n\r\n groupScope.$on('$destroy', function () {\r\n that.removeGroup(groupScope);\r\n });\r\n };\r\n\r\n // This is called from the accordion-group directive when to remove itself\r\n this.removeGroup = function (group) {\r\n var index = this.groups.indexOf(group);\r\n if (index !== -1) {\r\n this.groups.splice(index, 1);\r\n }\r\n };\r\n\r\n }\r\n ]);\r\n\r\n})();\r\n\n/**\r\n * Created by okoaset on 3/30/2016.\r\n */\r\n(function () {\r\n\r\n trackOrder.$inject = ['OrderService', '$state', 'UserPermissionService', 'analyticsService', '$window', 'externalRoutesService', 'WindowLocationHref'];\r\n function trackOrder(OrderService, $state, UserPermissionService, analyticsService, $window, externalRoutesService, WindowLocationHref) {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n templateUrl: 'app/widgets/trackOrder/trackOrder.tpl.html',\r\n scope: {\r\n value: '='\r\n },\r\n controller: ['$scope', function ($scope) {\r\n\r\n $scope.track = function () {\r\n var search = {\r\n offset: 0,\r\n limit: 10,\r\n search: !$scope.value ? $scope.value : $scope.value.toString().toUpperCase()\r\n };\r\n\r\n analyticsService.trackWithVar('widgetSearch', 'widgetSearchValue', $scope.value);\r\n\r\n externalRoutesService.search({ search: search.search });\r\n };\r\n\r\n $scope.goToShipmentEntry = function () {\r\n $window.location.href = '/orders/#/create';\r\n };\r\n\r\n $scope.showCreateOrderButton = function () {\r\n return UserPermissionService.hasPermission('Create Order');\r\n };\r\n }]\r\n }\r\n }\r\n angular.module('NavisphereOnline').directive(\"trackOrder\", trackOrder);\r\n\r\n})();\r\n\n/**\r\n * Created by okoaset on 3/30/2016.\r\n */\r\n(function () {\r\n 'use strict';\r\n function widgetService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/widgets', null,{\r\n 'getWidgets': { method: 'GET', url: API_BASE_URL + 'api/widgets', isArray: true }\r\n });\r\n }\r\n widgetService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('WidgetService', widgetService);\r\n})();\r\n\r\n\n/**\r\n * Created by okoaset on 3/25/2016.\r\n */\r\n(function () {\r\n\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function widgetDefinitions(RecentOrdersDataModel, NotificationsDataModel, GlanceDataModel, defaultSettingsDataModel, GlanceShipmentsDataModel, userPermissionService) {\r\n var widgets = [\r\n {\r\n name: 'glance',\r\n iconName: 'glyphicon-eye-open',\r\n title : 'MY_ORDERS_AT_A_GLANCE',\r\n directive: 'glance',\r\n dataAttrName: 'glances',\r\n dataModelType: GlanceDataModel,\r\n dataModelOptions: {\r\n statuses:[{translationKey:\"BOOKED\", active: true},\r\n {translationKey:\"INCOMPLETE\"},\r\n {translationKey:\"IN_TRANSIT\", active: true},\r\n {translationKey:\"DELIVERED\", active: true},\r\n {translationKey:\"ORDERED\"}],\r\n shippingMethods:[{translationKey:\"TRUCKLOAD\"},\r\n {translationKey:\"INTERMODAL\"},\r\n {translationKey:\"LTL\"},\r\n {translationKey:\"FLATBED\"},\r\n {translationKey:\"AIR\"},\r\n {translationKey:\"CONSOLIDATED\"},\r\n {translationKey:\"BULK\"},\r\n {translationKey:\"OCEAN\"},\r\n {translationKey:\"RAIL\"},\r\n {translationKey:\"SMALL_PARCEL\"}],\r\n timeFrames:[{translationKey:\"NEW\", active: true},\r\n { translationKey: \"REQUESTED_PICKUP_TODAY\", active: true },\r\n { translationKey: \"REQUESTED_PICKUP_THIS_WEEK\", active: true },\r\n { translationKey: \"REQUESTED_DELIVERY_TODAY\" },\r\n { translationKey: \"REQUESTED_DELIVERY_THIS_WEEK\" }],\r\n atRisks:[{translationKey:\"AT_RISK\"}]\r\n },\r\n size: {\r\n width: '100%',\r\n height: '100%'\r\n },\r\n settingsModalOptions: {\r\n templateUrl: 'app/widgets/glance/glanceSettings.tpl.html',\r\n controller: 'GlanceSettingsController'\r\n }\r\n },\r\n {\r\n name: 'notifications',\r\n iconName: 'glyphicon-bell',\r\n title : 'MY_NOTIFICATIONS',\r\n directive: 'my-notifications',\r\n dataAttrName: 'notifications',\r\n dataModelType: NotificationsDataModel,\r\n dataModelOptions: {count: 0},\r\n size: {\r\n width: '50%',\r\n height: '300px'\r\n },\r\n settingsModalOptions: {\r\n controller: 'NotificationsSettingsController'\r\n }\r\n },\r\n {\r\n name: 'recentOrders',\r\n iconName: 'glyphicon-list',\r\n title : 'MY_RECENT_ACTIVITY',\r\n directive: 'recent-orders',\r\n dataAttrName: 'orders',\r\n dataModelType: RecentOrdersDataModel,\r\n size: {\r\n width: '50%',\r\n height: '300px'\r\n },\r\n settingsModalOptions: {\r\n templateUrl: 'app/widgets/default/defaultSettings.tpl.html',\r\n controller: 'DefaultSettingsController'\r\n }\r\n },\r\n {\r\n name: 'searchByReference',\r\n iconName: 'glyphicon-globe',\r\n title: 'SEARCH_BY_REFERENCE_HASHSIGN',\r\n directive: 'track-order',\r\n dataModelType: defaultSettingsDataModel,\r\n attrs: {\r\n value: 'referenceNumber'\r\n },\r\n size: {\r\n width: '100%',\r\n height: 'auto'\r\n },\r\n settingsModalOptions: {\r\n templateUrl: 'app/widgets/default/defaultSettings.tpl.html',\r\n controller: 'DefaultSettingsController'\r\n }\r\n }\r\n ];\r\n\r\n if (!userPermissionService.isSupplier()) {\r\n widgets.push({\r\n name: 'glanceShipments',\r\n iconName: 'glyphicon-eye-open',\r\n title: 'MY_SHIPMENTS_AT_A_GLANCE',\r\n directive: 'glance-shipments',\r\n dataAttrName: 'glances',\r\n dataModelType: GlanceShipmentsDataModel,\r\n dataModelOptions: {\r\n statuses: [{ translationKey: \"BOOKED\", active: true },\r\n { translationKey: \"INCOMPLETE\" },\r\n { translationKey: \"IN_TRANSIT\", active: true },\r\n { translationKey: \"DELIVERED\", active: true },\r\n { translationKey: \"ORDERED\" }],\r\n shippingMethods: [{ translationKey: \"TRUCKLOAD\" },\r\n { translationKey: \"INTERMODAL\" },\r\n { translationKey: \"LTL\" },\r\n { translationKey: \"FLATBED\" },\r\n { translationKey: \"AIR\" },\r\n { translationKey: \"CONSOLIDATED\" },\r\n { translationKey: \"BULK\" },\r\n { translationKey: \"OCEAN\" },\r\n { translationKey: \"RAIL\" },\r\n { translationKey: \"SMALL_PARCEL\" }],\r\n timeFrames: [{ translationKey: \"NEW\", active: true },\r\n { translationKey: \"REQUESTED_PICKUP_TODAY\", active: true },\r\n { translationKey: \"REQUESTED_PICKUP_THIS_WEEK\", active: true },\r\n { translationKey: \"REQUESTED_DELIVERY_TODAY\" },\r\n { translationKey: \"REQUESTED_DELIVERY_THIS_WEEK\" }],\r\n atRisks: [{ translationKey: \"AT_RISK\" }]\r\n },\r\n size: {\r\n width: '100%',\r\n height: '100%'\r\n },\r\n settingsModalOptions: {\r\n templateUrl: 'app/widgets/glance/glanceSettings.tpl.html',\r\n controller: 'GlanceSettingsController'\r\n }\r\n });\r\n }\r\n\r\n return widgets;\r\n\r\n }\r\n widgetDefinitions.$inject = ['RecentOrdersDataModel', 'NotificationsDataModel', 'GlanceDataModel', 'defaultSettingsDataModel', 'GlanceShipmentsDataModel', 'UserPermissionService'];\r\n app.factory('widgetDefinitions', widgetDefinitions);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n shipmentsGlanceDataService.$inject = ['ShipmentService', '$interval'];\r\n function shipmentsGlanceDataService(ShipmentService, $interval) {\r\n var subscribers = [];\r\n var glances = [];\r\n var intervalRunning;\r\n var intervalPromise;\r\n var shipmentFacet = {};\r\n var callback;\r\n this.setUpdateCallback = function (updateCallback) {\r\n callback = updateCallback;\r\n };\r\n this.subscribe = function (dataModel) {\r\n subscribers.push({ id: dataModel.widgetScope.$id, dataModel: dataModel });\r\n if (intervalRunning) {\r\n searchForShipmentFacets();\r\n } else {\r\n startInterval();\r\n }\r\n };\r\n this.unsubscribe = function (id) {\r\n _.remove(subscribers, function (sub) {\r\n return sub.id === id;\r\n });\r\n if (subscribers.length < 1) {\r\n $interval.cancel(intervalPromise);\r\n intervalRunning = false;\r\n }\r\n };\r\n function startInterval() {\r\n intervalPromise = $interval(function () {\r\n searchForShipmentFacets();\r\n }, 60000);\r\n intervalRunning = true;\r\n searchForShipmentFacets();\r\n }\r\n function searchForShipmentFacets() {\r\n if (subscribers.length < 1) {\r\n $interval.cancel(intervalPromise);\r\n } else {\r\n ShipmentService.getShipmentsAtAGlance().$promise.then(function (data) {\r\n shipmentFacet = data.shipmentFacet;\r\n notifySubscribers();\r\n });\r\n }\r\n }\r\n function notifySubscribers() {\r\n glances = [];\r\n _.each(subscribers, function (subscriber) {\r\n var subGlances = { statuses: [], shippingMethods: [], timeFrames: [], atRisks: [] };\r\n _.each(subscriber.dataModel.dataModelOptions, function (optionVal, optionKey) {\r\n _.each(shipmentFacet, function (glanceVal, glanceKey) {\r\n if (optionKey === glanceKey) {\r\n _.each(optionVal, function (oKeyVal, oKeyKey) {\r\n _.each(glanceVal, function (gKeyVal, gKeyKey) {\r\n if (oKeyVal.translationKey === gKeyVal.translationKey && oKeyVal.active === true) {\r\n subGlances[glanceKey].push(gKeyVal);\r\n }\r\n });\r\n });\r\n }\r\n });\r\n });\r\n callback(subGlances, subscriber.dataModel);\r\n });\r\n }\r\n }\r\n app.service('ShipmentsGlanceDataService', shipmentsGlanceDataService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n ordersGlanceDataService.$inject = ['OrderService', '$interval'];\r\n function ordersGlanceDataService(OrderService, $interval) {\r\n var subscribers = [];\r\n var glances = [];\r\n var intervalRunning;\r\n var intervalPromise;\r\n var orderFacet = {};\r\n var callback;\r\n this.setUpdateCallback = function (updateCallback) {\r\n callback = updateCallback;\r\n };\r\n this.subscribe = function (dataModel) {\r\n subscribers.push({ id: dataModel.widgetScope.$id, dataModel: dataModel });\r\n if (intervalRunning) {\r\n searchForOrderFacets();\r\n } else {\r\n startInterval();\r\n }\r\n };\r\n this.unsubscribe = function (id) {\r\n _.remove(subscribers, function (sub) {\r\n return sub.id === id;\r\n });\r\n if (subscribers.length < 1) {\r\n $interval.cancel(intervalPromise);\r\n intervalRunning = false;\r\n }\r\n };\r\n function startInterval() {\r\n intervalPromise = $interval(function () {\r\n searchForOrderFacets();\r\n }, 60000);\r\n intervalRunning = true;\r\n searchForOrderFacets();\r\n }\r\n function searchForOrderFacets() {\r\n if (subscribers.length < 1) {\r\n $interval.cancel(intervalPromise);\r\n } else {\r\n var search = {\r\n offset: 0,\r\n limit: 10\r\n };\r\n\r\n OrderService.getOrdersAtAGlance(search).$promise.then(function (data) {\r\n orderFacet = data.orderFacet;\r\n notifySubscribers();\r\n });\r\n }\r\n }\r\n function notifySubscribers() {\r\n glances = [];\r\n _.each(subscribers, function (subscriber) {\r\n var subGlances = { statuses: [], shippingMethods: [], timeFrames: [], atRisks: [] };\r\n _.each(subscriber.dataModel.dataModelOptions, function (optionVal, optionKey) {\r\n _.each(orderFacet, function (glanceVal, glanceKey) {\r\n if (optionKey === glanceKey) {\r\n _.each(optionVal, function (oKeyVal, oKeyKey) {\r\n _.each(glanceVal, function (gKeyVal, gKeyKey) {\r\n if (oKeyVal.translationKey === gKeyVal.translationKey && oKeyVal.active === true) {\r\n subGlances[glanceKey].push(gKeyVal);\r\n }\r\n });\r\n });\r\n }\r\n });\r\n });\r\n callback(subGlances, subscriber.dataModel);\r\n });\r\n }\r\n }\r\n app.service('OrdersGlanceDataService', ordersGlanceDataService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function notificationDismissalService() {\r\n this.dismissing = false;\r\n\r\n this.setDismissingFlag = function() {\r\n this.dismissing = true;\r\n };\r\n\r\n this.unsetDismissingFlag = function() {\r\n this.dismissing = false;\r\n };\r\n }\r\n\r\n app.service('NotificationDismissalService', notificationDismissalService);\r\n})();\r\n\n/**\r\n * Created by okoaset on 3/30/2016.\r\n */\r\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n databaseStorage.$inject = ['User','API_BASE_URL','$http'];\r\n function databaseStorage(User,API_BASE_URL,$http){\r\n this.setItem = function(key, value){\r\n User.saveWidgets(value).$promise.then(function () {\r\n return value;\r\n },function(){});\r\n };\r\n this.getItem = function(){\r\n return $http.get(API_BASE_URL + 'api/users/widgets').then(function(result) {\r\n // migrate the old user key's title and name to the new key while keeping the same customization\r\n return result.data.toString().replace('TRACK_MY_ORDER', 'SEARCH_BY_REFERENCE_HASHSIGN').replace('trackOrder', 'searchByReference');\r\n },function(){});\r\n };\r\n }\r\n app.service('databaseStorage', databaseStorage);\r\n})();\r\n\n/**\r\n * Created by okoaset on 3/30/2016.\r\n */\r\n(function () {\r\n\r\n function detailUrlByEntityType(order) {\r\n switch (order.entityType) {\r\n case 0: // Order\r\n return appConfig.ordersUIBaseUrl + '/#/detail/' + order.orderNumber;\r\n case 1: // Shipment\r\n return appConfig.shipmentsUIBaseUrl + '/#/detail/' + order.orderNumber;\r\n default:\r\n return appConfig.ordersUIBaseUrl + '/#/detail/' + order.orderNumber;\r\n }\r\n }\r\n\r\n function recentOrders($state, WindowLocationHref) {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n templateUrl: 'app/widgets/recentOrders/recentOrders.tpl.html',\r\n scope: {\r\n orders: '='\r\n },\r\n controller: ['$scope', function ($scope) {\r\n $scope.orderDetails = function (order) {\r\n var url = detailUrlByEntityType(order);\r\n WindowLocationHref.setWindowLocationHref(url);\r\n };\r\n $scope.formatCityState = function (location) {\r\n if (angular.isUndefined(location) || location === null) {\r\n return null;\r\n }\r\n var text = [location.city, location.state].filter(function (val) { return val; }).join(', ');\r\n return text;\r\n };\r\n }]\r\n };\r\n }\r\n\r\n recentOrders.$inject = ['$state', 'WindowLocationHref'];\r\n angular.module('NavisphereOnline').directive(\"recentOrders\", recentOrders);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n function recentOrdersDataModel(OrderService, WidgetDataModel, $interval) {\r\n function RecentOrdersDataModel() {\r\n }\r\n\r\n RecentOrdersDataModel.prototype = Object.create(WidgetDataModel.prototype);\r\n RecentOrdersDataModel.prototype.init = function () {\r\n WidgetDataModel.prototype.init.call(this);\r\n this.intervalPromise = $interval(function () {\r\n this.load();\r\n }.bind(this), 60000);\r\n this.load();\r\n };\r\n\r\n RecentOrdersDataModel.prototype.destroy = function () {\r\n WidgetDataModel.prototype.destroy.call(this);\r\n $interval.cancel(this.intervalPromise);\r\n };\r\n\r\n RecentOrdersDataModel.prototype.load = function () {\r\n OrderService.getRecentOrdersAtAGlance().$promise.then(function (data) {\r\n this.updateScope(data);\r\n }.bind(this));\r\n };\r\n return RecentOrdersDataModel;\r\n };\r\n\r\n recentOrdersDataModel.$inject = ['OrderService', 'WidgetDataModel', '$interval'];\r\n angular.module('NavisphereOnline').factory('RecentOrdersDataModel', recentOrdersDataModel);\r\n})();\n(function () {\r\n 'use strict';\r\n notificationsSettingsController.$inject = ['$state', '$window', '$rootScope'];\r\n function notificationsSettingsController($state, $window, $rootScope) {\r\n // This controller is now just here to trigger navigating to the notificationPreferences page.\r\n if ($rootScope.featureFlags.notifcationSettingsFeatureFlag){\r\n $window.location.href = appConfig.notificationSettingsLink;\r\n } else {\r\n $state.go('app.notificationPreferences');\r\n }\r\n }\r\n angular.module('NavisphereOnline').controller('NotificationsSettingsController', notificationsSettingsController);\r\n})();\r\n\n/**\r\n * Created by okoaset on 3/30/2016.\r\n */\r\n(function () {\r\n\r\n function myNotifications($state, AlertService, WindowLocationHref) {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n templateUrl: 'app/widgets/notifications/notifications.tpl.html',\r\n scope: {\r\n notifications: '='\r\n },\r\n controller: ['$scope', 'NotificationDismissalService', function ($scope, NotificationDismissalService) {\r\n $scope.dismissNotification = function (notification) {\r\n $scope.notifications = AlertService.dismiss(notification);\r\n };\r\n $scope.$watch(function() {\r\n return NotificationDismissalService.dismissing;\r\n }, function(newValue, oldValue) {\r\n if (newValue !== oldValue) {\r\n _.forEach($scope.notifications, function(notification) {\r\n $scope.notifications = AlertService.dismiss(notification);\r\n });\r\n NotificationDismissalService.unsetDismissingFlag();\r\n }\r\n });\r\n $scope.orderDetails = function (orderNum) {\r\n\t\t\t\t\tvar redirectUrl = appConfig.ordersUIBaseUrl + '/#/detail/' + orderNum;\r\n\t\t\t\t\tWindowLocationHref.setWindowLocationHref(redirectUrl);\r\n };\r\n }]\r\n };\r\n };\r\n\r\n myNotifications.$inject = ['$state', 'AlertService', 'WindowLocationHref'];\r\n angular.module('NavisphereOnline').directive(\"myNotifications\", myNotifications);\r\n\r\n})();\r\n\n(function () {\r\n notificationsDataModel.$inject = ['AlertService','WidgetDataModel','$interval', 'SubscriptionService', '$q'];\r\n function notificationsDataModel (AlertService, WidgetDataModel,$interval, SubscriptionService, $q) {\r\n function NotificationsDataModel() {\r\n\r\n }\r\n\r\n NotificationsDataModel.prototype = Object.create(WidgetDataModel.prototype);\r\n\r\n //putting these services on the object itself to facilitate unit testing\r\n NotificationsDataModel.prototype.subscriptionService = SubscriptionService;\r\n NotificationsDataModel.prototype.alertService = AlertService;\r\n\r\n NotificationsDataModel.prototype.events = defaultEvents();\r\n NotificationsDataModel.prototype.submitting = true;\r\n NotificationsDataModel.prototype.init = function () {\r\n WidgetDataModel.prototype.init.call(this);\r\n this.intervalPromise = $interval(function () {\r\n getAlerts(this);\r\n }.bind(this), 60000);\r\n this.load();\r\n };\r\n NotificationsDataModel.prototype.destroy = function () {\r\n WidgetDataModel.prototype.destroy.call(this);\r\n $interval.cancel(this.intervalPromise);\r\n };\r\n NotificationsDataModel.prototype.load = function () {\r\n getAlerts(this);\r\n };\r\n\r\n NotificationsDataModel.prototype.saveSubscription = function(){\r\n var that = this;\r\n that.submitting = true;\r\n var eventNumbers = getActiveEventTypesForSave(that);\r\n return that.subscriptionService.save(eventNumbers).$promise.then(function(){\r\n //getAlerts(that);\r\n },\r\n function(){\r\n //failed to save\r\n return $q.reject('WE_ARE_UNABLE_TO_UPDATE_YOUR_NOTIFICATION_PREFEREN');\r\n //return\r\n });\r\n };\r\n NotificationsDataModel.prototype.getSubscribedEvents = function(){\r\n\r\n return this.subscriptionService.get().$promise.then(function(eventTypes){\r\n setActiveEventTypes(eventTypes, this);\r\n return this.events;\r\n }.bind(this),\r\n function(){\r\n //failed to get event types\r\n return $q.reject('WE_ARE_UNABLE_TO_RETRIEVE_YOUR_NOTIFICATION_PREFER');\r\n });\r\n };\r\n function getAlerts(that){\r\n that.alertService.getAlerts().$promise.then(function(data){\r\n that.dataModelOptions.count = data.length;\r\n that.updateScope(data);\r\n });\r\n }\r\n function setActiveEventTypes(eventTypes, that){\r\n that.events = defaultEvents();\r\n for(var i = 0; i < eventTypes.length; i++){\r\n for(var j = 0; j < that.events.length; j++){\r\n if (eventTypes[i].eventTypeNumber === that.events[j].eventNumber){\r\n that.events[j].active = true;\r\n }\r\n }\r\n }\r\n }\r\n function getActiveEventTypesForSave(that){\r\n var eventNums = [];\r\n for(var j = 0; j < that.events.length; j++){\r\n if (that.events[j].active === true){\r\n eventNums.push(that.events[j].eventNumber);\r\n }\r\n }\r\n return eventNums;\r\n }\r\n function defaultEvents(){\r\n return [\r\n {eventName: 'Carrier Bounced', eventNumber: 26, active: false},\r\n {eventName: 'Shipment Booked', eventNumber: 16, active: false},\r\n {eventName: 'Late Arrival', eventNumber: 47, active: false},\r\n {eventName: 'Potentially Late', eventNumber: 69, active: false},\r\n {eventName: 'Order Cancelled', eventNumber: 110, active: false},\r\n {eventName: 'Order Delivered', eventNumber: 111, active: false},\r\n {eventName: 'Carrier Arrived', eventNumber: 46, active: false},\r\n {eventName: 'Carrier Departed', eventNumber: 48, active: false},\r\n {eventName: 'Order Created', eventNumber: 101, active: false},\r\n {eventName: 'Commodity Changed', eventNumber: 102, active: false},\r\n {eventName: 'Location Changed', eventNumber: 109, active: false},\r\n {eventName: 'Ready By Date/Time Changed', eventNumber: 105, active: false},\r\n {eventName: 'Pick Up By Date/Time Changed', eventNumber: 106, active: false},\r\n {eventName: 'Delivery Date/Time Changed', eventNumber: 107, active: false},\r\n {eventName: 'Deliver By Date/Time Changed', eventNumber: 108, active: false}\r\n ];\r\n }\r\n\r\n return NotificationsDataModel;\r\n }\r\n angular.module('NavisphereOnline').factory('NotificationsDataModel', notificationsDataModel);\r\n})();\r\n\n (function () {\r\n 'use strict';\r\n shipmentsGlanceDataModel.$inject = ['WidgetDataModel', 'ShipmentsGlanceDataService'];\r\n function shipmentsGlanceDataModel(WidgetDataModel, ShipmentsGlanceDataService) {\r\n function GlanceDataModel() {\r\n }\r\n\r\n GlanceDataModel.prototype = Object.create(WidgetDataModel.prototype);\r\n GlanceDataModel.prototype.constructor = WidgetDataModel;\r\n\r\n angular.extend(GlanceDataModel.prototype, {\r\n init: function () {\r\n WidgetDataModel.prototype.init.call(this);\r\n ShipmentsGlanceDataService.setUpdateCallback(this.updateGlances);\r\n this.load();\r\n },\r\n saveSettings: function () {\r\n this.widgetScope.options.saveDashboard(true);\r\n //unsubscribe, resub with new settings\r\n ShipmentsGlanceDataService.unsubscribe(this.widgetScope.$id);\r\n ShipmentsGlanceDataService.subscribe(this);\r\n },\r\n destroy: function () {\r\n WidgetDataModel.prototype.destroy.call(this);\r\n ShipmentsGlanceDataService.unsubscribe(this.widgetScope.$id);\r\n },\r\n load: function () {\r\n ShipmentsGlanceDataService.subscribe(this);\r\n },\r\n updateGlances: function(glances, dataModel){\r\n dataModel.updateScope(glances);\r\n }\r\n });\r\n return GlanceDataModel;\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('ShipmentsGlanceDataModel', shipmentsGlanceDataModel);\r\n})();\r\n\n(function () {\r\n glanceShipments.$inject = ['externalRoutesService'];\r\n var shipmentView = 'shipment';\r\n var predefinedTimeFrame = 'Pre-Defined';\r\n\r\n function glanceShipments(externalRoutesService) {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n templateUrl: 'app/widgets/glance/glanceShipments.tpl.html',\r\n scope: {\r\n glances: '='\r\n },\r\n controller: ['$scope', function ($scope) {\r\n $scope.goToShipmentsWithTimeFrame = function (timeFrame) {\r\n externalRoutesService.search({ view: shipmentView, timeFrame: timeFrame, currentTimeframe: predefinedTimeFrame });\r\n };\r\n\r\n $scope.goToShipmentsWithStatus = function (status) {\r\n externalRoutesService.search({ view: shipmentView, status: status });\r\n };\r\n\r\n $scope.goToShipmentsWithMethod = function (method) {\r\n externalRoutesService.search({ view: shipmentView, shippingMethod: method });\r\n };\r\n\r\n $scope.goToShipmentsWithAtRisk = function () {\r\n externalRoutesService.search({ view: shipmentView, atRisk: true });\r\n };\r\n }]\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').directive(\"glanceShipments\", glanceShipments);\r\n})();\r\n\n (function () {\r\n 'use strict';\r\n glanceShipmentsDataModel.$inject = ['WidgetDataModel', 'ShipmentsGlanceDataService'];\r\n function glanceShipmentsDataModel(WidgetDataModel, ShipmentsGlanceDataService) {\r\n function GlanceShipmentsDataModel() {\r\n }\r\n\r\n GlanceShipmentsDataModel.prototype = Object.create(WidgetDataModel.prototype);\r\n GlanceShipmentsDataModel.prototype.constructor = WidgetDataModel;\r\n\r\n angular.extend(GlanceShipmentsDataModel.prototype, {\r\n init: function () {\r\n WidgetDataModel.prototype.init.call(this);\r\n ShipmentsGlanceDataService.setUpdateCallback(this.updateGlances);\r\n this.load();\r\n },\r\n saveSettings: function () {\r\n this.widgetScope.options.saveDashboard(true);\r\n //unsubscribe, resub with new settings\r\n ShipmentsGlanceDataService.unsubscribe(this.widgetScope.$id);\r\n ShipmentsGlanceDataService.subscribe(this);\r\n },\r\n destroy: function () {\r\n WidgetDataModel.prototype.destroy.call(this);\r\n ShipmentsGlanceDataService.unsubscribe(this.widgetScope.$id);\r\n },\r\n load: function () {\r\n ShipmentsGlanceDataService.subscribe(this);\r\n },\r\n updateGlances: function(glances, dataModel){\r\n dataModel.updateScope(glances);\r\n }\r\n });\r\n return GlanceShipmentsDataModel;\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('GlanceShipmentsDataModel', glanceShipmentsDataModel);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n glanceSettingsController.$inject = ['$scope', '$rootScope', '$uibModalInstance', 'widget', '$filter'];\r\n function glanceSettingsController($scope, $rootScope, $uibModalInstance, widget, $filter) {\r\n $scope.events = [];\r\n $scope.widget = widget;\r\n $scope.titleDisplay = $filter('translate')(widget.title);\r\n\r\n $scope.configuration = widget.dataModel.dataModelOptions;\r\n\r\n $scope.submitting = false;\r\n\r\n $scope.etaAtRiskFeatureFlag = $rootScope.featureFlags.etaAtRiskFeatureFlag;\r\n\r\n $scope.ok = function(){\r\n $scope.errorMessage = '';\r\n if($scope.titleForm.$dirty) {\r\n $scope.widget.title = $scope.titleDisplay;\r\n $scope.widget.dataModel.widgetScope.saveTitleEdit($scope.widget);\r\n }\r\n if($scope.glanceSettingsForm.$dirty){\r\n $scope.submitting = true;\r\n\r\n $scope.widget.dataModel.saveSettings();\r\n $uibModalInstance.close();\r\n } else {\r\n $uibModalInstance.close();\r\n }\r\n\r\n };\r\n $scope.cancel = function(){\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('GlanceSettingsController', glanceSettingsController);\r\n})();\r\n\n/**\r\n * Created by KRIEBRA on 6/29/2016.\r\n */\r\n(function () {\r\n glance.$inject = ['externalRoutesService'];\r\n\r\n function glance(externalRoutesService) {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n templateUrl: 'app/widgets/glance/glance.tpl.html',\r\n scope: {\r\n glances: '='\r\n },\r\n controller: ['$scope', function ($scope) {\r\n $scope.goToOrdersWithTimeFrame = function (timeFrame) {\r\n externalRoutesService.search({ timeFrame: timeFrame, currentTimeframe: 'Pre-Defined' });\r\n };\r\n\r\n $scope.goToOrdersWithStatus = function (status) {\r\n externalRoutesService.search({ status: status });\r\n };\r\n\r\n $scope.goToOrdersWithMethod = function (method) {\r\n externalRoutesService.search({ shippingMethod: method });\r\n };\r\n\r\n $scope.goToOrdersWithAtRisk = function () {\r\n externalRoutesService.search({ atRisk: true });\r\n };\r\n }]\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').directive(\"glance\", glance);\r\n})();\r\n\n/**\r\n * Created by KRIEBRA on 6/28/2016.\r\n */\r\n(function () {\r\n 'use strict';\r\n glanceDataModel.$inject = ['WidgetDataModel', 'OrdersGlanceDataService'];\r\n function glanceDataModel(WidgetDataModel, OrdersGlanceDataService) {\r\n function GlanceDataModel() {\r\n }\r\n\r\n GlanceDataModel.prototype = Object.create(WidgetDataModel.prototype);\r\n GlanceDataModel.prototype.constructor = WidgetDataModel;\r\n\r\n angular.extend(GlanceDataModel.prototype, {\r\n init: function () {\r\n WidgetDataModel.prototype.init.call(this);\r\n OrdersGlanceDataService.setUpdateCallback(this.updateGlances);\r\n this.load();\r\n },\r\n saveSettings: function () {\r\n this.widgetScope.options.saveDashboard(true);\r\n //unsubscribe, resub with new settings\r\n OrdersGlanceDataService.unsubscribe(this.widgetScope.$id);\r\n OrdersGlanceDataService.subscribe(this);\r\n },\r\n destroy: function () {\r\n WidgetDataModel.prototype.destroy.call(this);\r\n OrdersGlanceDataService.unsubscribe(this.widgetScope.$id);\r\n },\r\n load: function () {\r\n OrdersGlanceDataService.subscribe(this);\r\n },\r\n updateGlances: function(glances, dataModel){\r\n dataModel.updateScope(glances);\r\n }\r\n });\r\n return GlanceDataModel;\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('GlanceDataModel', glanceDataModel);\r\n})();\r\n\n(function () {\r\n defaultSettingsDataModel.$inject = ['WidgetDataModel'];\r\n function defaultSettingsDataModel (WidgetDataModel) {\r\n function defaultSettingsDataModel() {\r\n\r\n }\r\n\r\n defaultSettingsDataModel.prototype = Object.create(WidgetDataModel.prototype);\r\n\r\n return defaultSettingsDataModel;\r\n }\r\n angular.module('NavisphereOnline').factory('defaultSettingsDataModel', defaultSettingsDataModel);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n defaultSettingsController.$inject = ['$scope', '$uibModalInstance', 'widget', '$filter'];\r\n function defaultSettingsController($scope, $uibModalInstance, widget, $filter) {\r\n $scope.events = [];\r\n $scope.widget = widget;\r\n $scope.titleDisplay = $filter('translate')(widget.title);\r\n\r\n $scope.ok = function(){\r\n if($scope.titleForm.$dirty) {\r\n $scope.widget.title = $scope.titleDisplay;\r\n $scope.widget.dataModel.widgetScope.saveTitleEdit($scope.widget);\r\n }\r\n $uibModalInstance.close();\r\n };\r\n $scope.cancel = function(){\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('DefaultSettingsController', defaultSettingsController);\r\n})();\r\n\n\r\n(function () {\r\n 'use strict';\r\n function userPreferencesController($scope, $rootScope, $window, $state, $interval, $translate, tmhDynamicLocale, User, preferenceData, localStorageService) {\r\n\r\n var vm = this;\r\n vm.countryList = preferenceData.countryList;\r\n vm.dateExample = new Date(1898, 6, 29);\r\n vm.unitOfMeasure = preferenceData.userPreference.unitOfMeasure.toLowerCase();\r\n vm.timeFormat = preferenceData.userPreference.timeFormat;\r\n vm.country = setSelectedCulture(preferenceData.userPreference.culture);\r\n\r\n vm.setSelectedCulture = setSelectedCulture;\r\n vm.setClock = setClock;\r\n vm.countryChanged = countryChanged;\r\n vm.savePreferences = savePreferences;\r\n vm.goToNotificationPreferences = goToNotificationPreferences;\r\n\r\n vm.startIntro = function () {\r\n $state.go('app.dashboard', {\r\n runIntro: true\r\n });\r\n };\r\n\r\n function setSelectedCulture(cultureName) {\r\n var sc = undefined;\r\n for (var i = 0; i < preferenceData.countryList.length; i++) {\r\n if (preferenceData.countryList[i].culture === cultureName) {\r\n sc = preferenceData.countryList[i];\r\n break;\r\n }\r\n }\r\n return sc;\r\n }\r\n\r\n function setClock() {\r\n var currentDate = new Date();\r\n var hours = currentDate.getHours();\r\n var ampm = '';\r\n if (vm.timeFormat === '12') {\r\n ampm = (hours >= 12) ? 'pm' : 'am';\r\n hours = hours % 12;\r\n hours = hours ? hours : 12;\r\n } else {\r\n hours = (hours < 10) ? '0' + hours : hours;\r\n }\r\n var minutes = currentDate.getMinutes();\r\n minutes = (minutes < 10) ? '0' + minutes : minutes;\r\n // if timeFormat is not set to '12', ampm is never set. Is this intentional?\r\n vm.currentTime = hours + \":\" + minutes + \" \" + ampm;\r\n }\r\n vm.setClock();\r\n $interval(vm.setClock, 1000);\r\n $scope.$watch('vm.timeFormat', function () {\r\n vm.setClock();\r\n });\r\n $scope.$watch('vm.unitOfMeasure', function (newValue) {\r\n vm.weightExample = (newValue === 'metric') ? 680425 : 150008;\r\n vm.unitText = (newValue === 'metric') ? 'kg' : 'lbs';\r\n });\r\n\r\n function countryChanged(item) {\r\n $translate.use(item.culture);\r\n tmhDynamicLocale.set(item.culture);\r\n }\r\n\r\n function savePreferences() {\r\n User.savePreferences({\r\n unitOfMeasure: vm.unitOfMeasure,\r\n timeFormat: vm.timeFormat,\r\n culture: vm.country.culture,\r\n preferencesConfirmed: true\r\n }).$promise.then(function (data) {\r\n data.eventNotificationPreferences = preferenceData.userPreference.eventNotificationPreferences;\r\n localStorageService.set(\"preferences\", data);\r\n $state.go('app.dashboard');\r\n }, null);\r\n }\r\n\r\n function goToNotificationPreferences() {\r\n if ($rootScope.featureFlags.notifcationSettingsFeatureFlag){\r\n $window.location.href = appConfig.notificationSettingsLink;\r\n } else {\r\n $state.go('app.notificationPreferences');\r\n }\r\n }\r\n }\r\n\r\n userPreferencesController.$inject = ['$scope', '$rootScope', '$window', '$state', '$interval', '$translate', 'tmhDynamicLocale', 'User', 'preferenceData', 'localStorageService'];\r\n angular.module('NavisphereOnline').controller('userPreferencesController', userPreferencesController);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n reverseLogisticsService.$inject = ['$filter', '$rootScope', '$uibModal', 'FilterService','ReverseLogisticsResource'];\r\n\r\n function reverseLogisticsService($filter, $rootScope, $uibModal, FilterService, ReverseLogisticsResource) {\r\n var originalResults = [];\r\n var filteredResults = [];\r\n var loadingModal;\r\n\r\n var setResults = function (results) {\r\n originalResults = results;\r\n filteredResults = results;\r\n };\r\n\r\n function openLoadingModal() {\r\n loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () {\r\n return $filter('translate')('PROCESSING');\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.clearResults = function () {\r\n originalResults = [];\r\n filteredResults = [];\r\n };\r\n\r\n this.filter = function (filterParams) {\r\n filteredResults = FilterService.filterThorough(originalResults, filterParams);\r\n filteredResults = _.uniq(filteredResults, function(ticket) {\r\n return ticket.ticketNumber;\r\n })\r\n\r\n };\r\n\r\n this.getDistinctTicketTypeOrStatusFilters = function (tickets, propertyName) {\r\n var uniqueKeys = {};\r\n var distinct = [];\r\n\r\n for (var index in tickets) {\r\n var result = tickets[index][propertyName];\r\n if (result && typeof(uniqueKeys[result]) === \"undefined\") {\r\n distinct.push({name: result, checked: false});\r\n uniqueKeys[result] = result;\r\n }\r\n }\r\n\r\n return distinct;\r\n };\r\n\r\n this.getDistinctCityStateFilters = function (tickets) {\r\n\r\n var uniqueKeys = {};\r\n var distinct = [];\r\n var locationTypes = ['originalDestination', 'originalOrigin', 'returnDestination', 'returnOrigin'];\r\n\r\n _.forEach(tickets, function(ticket) {\r\n _.forEach(locationTypes, function (locationType) {\r\n var location = ticket[locationType];\r\n if (location) {\r\n if (location.cityState && typeof(uniqueKeys[location.cityState]) === \"undefined\") {\r\n distinct.push({name: location.cityState, checked: false, state: location.state, city: location.city});\r\n uniqueKeys[location.cityState] = location.cityState;\r\n }\r\n }\r\n })\r\n });\r\n\r\n return _.sortBy(distinct, ['state', 'city']);\r\n };\r\n\r\n this.getDistinctLocationNameFilters = function(tickets) {\r\n var uniqueKeys = {};\r\n var distinct = [];\r\n var locationTypes = ['originalDestination', 'originalOrigin', 'returnDestination', 'returnOrigin'];\r\n\r\n _.forEach(tickets, function(ticket) {\r\n _.forEach(locationTypes, function (locationType) {\r\n var location = ticket[locationType];\r\n if (location) {\r\n if (location.name && typeof(uniqueKeys[location.name]) === \"undefined\") {\r\n distinct.push({name: location.name, checked: false, cityState: location.cityState});\r\n uniqueKeys[location.name] = location.name;\r\n }\r\n }\r\n })\r\n });\r\n\r\n return _.sortBy(distinct, [function(location) { return location.name.toLowerCase()}]);\r\n };\r\n\r\n this.getFilteredResults = function() {\r\n return filteredResults;\r\n };\r\n\r\n this.getOriginalResults = function() {\r\n return originalResults;\r\n };\r\n\r\n this.getTicketCount = function() {\r\n return filteredResults.length;\r\n };\r\n\r\n this.search = function(searchParams) {\r\n openLoadingModal();\r\n if(searchParams.referenceNumber) {\r\n searchParams.referenceNumber = searchParams.referenceNumber.toLowerCase();\r\n }\r\n ReverseLogisticsResource.search(searchParams).$promise.then(function(data){\r\n setResults(data.tickets);\r\n loadingModal.close();\r\n $rootScope.$broadcast('reverseLogisticsSearchComplete');\r\n });\r\n };\r\n\r\n this.setResults = setResults;\r\n }\r\n angular.module('NavisphereOnline').service('ReverseLogisticsService', reverseLogisticsService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n reverseLogisticsSearchController.$inject = ['customersWithRL', 'ReverseLogisticsService', '$scope', 'user'];\r\n function reverseLogisticsSearchController(customersWithRL, ReverseLogisticsService, $scope, user) {\r\n $scope.user = user;\r\n $scope.searchType = 'REFNUM';\r\n $scope.sortType = 'NEWEST';\r\n $scope.customersWithRL = customersWithRL;\r\n $scope.searchParams = {\r\n cCodes: [],\r\n referenceNumber: null,\r\n refNumType: 'TICKETNUMBER',\r\n startDate: null,\r\n endDate: null,\r\n pageSize: 500,\r\n pageNumber: 1\r\n };\r\n\r\n $scope.selectedRefNumType = 'TICKET_NUMBER';\r\n $scope.startDate = null;\r\n $scope.endDate = null;\r\n $scope.refNumTypeMap = {\r\n \"ALL\": \"ALL\",\r\n \"TICKET_NUMBER\": \"TICKETNUMBER\",\r\n \"RA_NUMBER_POUND\": \"RA Number\",\r\n \"BOL_POUND\": \"BOL\",\r\n \"CUSTOMER_PO_NUMBER\": \"CUST PO\",\r\n \"REFERENCE\": \"CRID\",\r\n \"PRO_TRIP_NUMBER_POUND\": \"RL Pro Number\",\r\n \"ORDER_POUND\": \"Cust Order Num\"\r\n };\r\n\r\n $scope.checkKeyPress = checkKeyPress;\r\n $scope.search = search;\r\n $scope.setRefNumType = setRefNumType;\r\n $scope.setSearchType = setSearchType;\r\n $scope.setSortType = setSortType;\r\n\r\n getCcodes();\r\n\r\n function checkKeyPress(event) {\r\n if (event.keyCode === 13) {\r\n $scope.search();\r\n }\r\n }\r\n\r\n function search() {\r\n ReverseLogisticsService.search($scope.searchParams);\r\n }\r\n\r\n function setRefNumType(refNumType) {\r\n $scope.selectedRefNumType = refNumType;\r\n $scope.searchParams.refNumType = $scope.refNumTypeMap[refNumType];\r\n }\r\n\r\n function setSearchType(selection){\r\n if(selection === \"REFNUM\") {\r\n $scope.searchParams.startDate = null;\r\n $scope.searchParams.endDate = null;\r\n }\r\n else if (selection === \"DATERANGE\") {\r\n $scope.searchParams.referenceNumber = null;\r\n $scope.searchParams.refNumType = 'TICKETNUMBER';\r\n }\r\n $scope.searchType = selection;\r\n }\r\n\r\n function setSortType(selection) {\r\n $scope.sortType = selection;\r\n }\r\n\r\n function getCcodes(){\r\n _.forEach($scope.customersWithRL.customers, function(customer){\r\n $scope.searchParams.cCodes.push(customer.partyCode);\r\n });\r\n }\r\n }\r\n app.controller('reverseLogisticsSearchController', reverseLogisticsSearchController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n reverseLogisticsResultsController.$inject = ['DocumentManagerService', 'ReverseLogisticsResource','ReverseLogisticsService', '$scope', '$state', '$stateParams'];\r\n function reverseLogisticsResultsController(DocumentManagerService, ReverseLogisticsResource, ReverseLogisticsService, $scope, $state, $stateParams) {\r\n $scope.cityStatesDisplayLimit = 10;\r\n $scope.currentPage = 1;\r\n $scope.filterParams = [];\r\n $scope.filters = {};\r\n $scope.hideFilters = true;\r\n $scope.limit = \"10\";\r\n $scope.locationNamesDisplayLimit = 10;\r\n $scope.offset = 0;\r\n $scope.sortDescending = true;\r\n $scope.totalTickets = 0;\r\n $scope.ticketStatusDisplayLimit = 10;\r\n $scope.ticketTypeDisplayLimit = 10;\r\n\r\n $scope.calculateTotalReturn = calculateTotalReturn;\r\n $scope.collapseFilter = collapseFilter;\r\n $scope.expandFilter = expandFilter;\r\n $scope.filter = filter;\r\n $scope.getFilteredResults = getFilteredResults;\r\n $scope.getFilters = getFilters;\r\n $scope.getLocationInfo = getLocationInfo;\r\n $scope.getLocationLabel = getLocationLabel;\r\n $scope.getTicketDetail = getTicketDetail;\r\n $scope.limitChanged = limitChanged;\r\n $scope.onCityStateClick = onCityStateClick;\r\n $scope.openDocumentViewer = openDocumentViewer;\r\n $scope.pageChanged = pageChanged;\r\n $scope.refreshResults = refreshResults;\r\n $scope.setCityStateFilterParams = setCityStateFilterParams;\r\n $scope.setLocationFilterParams = setLocationFilterParams;\r\n $scope.setSortDescending = setSortDescending;\r\n $scope.setTicketStatusFilterParams = setTicketStatusFilterParams;\r\n $scope.setTicketTypeFilterParams = setTicketTypeFilterParams;\r\n $scope.showCollapseButton = showCollapseButton;\r\n $scope.toggleCheck = toggleCheck;\r\n\r\n repopulateResults($stateParams);\r\n setReverseLogisticsListener();\r\n\r\n function calculateTotalReturn(ticket) {\r\n return ticket.processingFee + ticket.estimatedReturnCost;\r\n }\r\n\r\n function collapseFilter($event, filterType){\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope[filterType + \"DisplayLimit\"] = 10;\r\n }\r\n\r\n function expandFilter($event, filterType){\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope[filterType + \"DisplayLimit\"] += 10;\r\n }\r\n\r\n function filter() {\r\n ReverseLogisticsService.filter($scope.filterParams);\r\n }\r\n\r\n function getFilteredResults() {\r\n return ReverseLogisticsService.getFilteredResults();\r\n }\r\n\r\n function getFilters(searchResults) {\r\n $scope.filters.ticketTypes = ReverseLogisticsService.getDistinctTicketTypeOrStatusFilters(searchResults, \"ticketType\");\r\n $scope.filters.ticketStatuses = ReverseLogisticsService.getDistinctTicketTypeOrStatusFilters(searchResults, \"status\");\r\n $scope.filters.cityStates = ReverseLogisticsService.getDistinctCityStateFilters(searchResults);\r\n $scope.filters.locationNames = ReverseLogisticsService.getDistinctLocationNameFilters(searchResults);\r\n }\r\n\r\n /**\r\n * OSD tickets - display Original Destination in first field and Return Destination in second field\r\n * Customer Return tickets - display Return Origin in first field and Return Destination in second field\r\n */\r\n function getLocationInfo(ticket, propertyName) {\r\n\r\n if(ticket.ticketType === \"OSD\") {\r\n return ticket.originalDestination ? ticket.originalDestination[propertyName] : '';\r\n } else {\r\n return ticket.returnOrigin ? ticket.returnOrigin[propertyName] : '';\r\n }\r\n }\r\n\r\n function getLocationLabel(ticket) {\r\n if(ticket.ticketType === \"OSD\"){\r\n return \"Original Destination\"\r\n } else if(ticket.ticketType === \"Customer Return\" || ticket.ticketType === \"CustReturn\") {\r\n return \"Return Origin\"\r\n }\r\n }\r\n\r\n function getTicketDetail(ticket) {\r\n ReverseLogisticsResource.getTicket({\r\n ticketId: ticket.ticketNumber\r\n }).$promise.then(function (ticketDetail) {\r\n $stateParams.ticketDetail = ticketDetail;\r\n var results = ReverseLogisticsService.getOriginalResults();\r\n var status = ticket.status;\r\n var type = ticket.ticketType;\r\n $state.go('app.reverseLogisticsDetail', {\r\n ticketDetail: ticketDetail,\r\n ticketStatus: status,\r\n ticketType: type,\r\n rLSearchResults: results\r\n });\r\n });\r\n }\r\n\r\n function limitChanged() {\r\n $scope.currentPage = Math.floor($scope.offset / $scope.limit) + 1;\r\n $scope.pageChanged();\r\n }\r\n\r\n function onCityStateClick(cityState) {\r\n $scope.filterParams = [];\r\n $scope.toggleCheck(cityState);\r\n $scope.filters.locationNames = ReverseLogisticsService.getDistinctLocationNameFilters(ReverseLogisticsService.getOriginalResults());\r\n\r\n var checkedCityStates = [];\r\n _.forEach($scope.filters.cityStates, function(cityState) {\r\n if(cityState.checked) {\r\n checkedCityStates.push(cityState.name);\r\n }\r\n });\r\n\r\n if(checkedCityStates.length > 0) {\r\n $scope.filters.locationNames = _.filter($scope.filters.locationNames, function (location) {\r\n return _.includes(checkedCityStates, location.cityState);\r\n });\r\n }\r\n\r\n $scope.filters.locationNames = _.sortBy($scope.filters.locationNames, function(location) {\r\n return location.name.toLowerCase();\r\n });\r\n\r\n refreshFilterParams();\r\n $scope.filter();\r\n $scope.totalTickets = ReverseLogisticsService.getTicketCount();\r\n }\r\n\r\n function openDocumentViewer(ticketId) {\r\n var controller = 'reverseLogisticsDocumentViewerController';\r\n var resolveObject = {\r\n order: function () {\r\n return null;\r\n },\r\n documents: ['DocumentService', function (DocumentService) {\r\n return DocumentService.getReverseLogisticsDocuments({ticketId: ticketId}).$promise;\r\n }]\r\n };\r\n\r\n DocumentManagerService.openDocumentViewer(controller, ticketId, resolveObject);\r\n }\r\n\r\n function pageChanged() {\r\n $scope.offset = ($scope.currentPage - 1) * $scope.limit;\r\n }\r\n\r\n function refreshFilterParams() {\r\n $scope.setTicketTypeFilterParams();\r\n $scope.setTicketStatusFilterParams();\r\n $scope.setCityStateFilterParams();\r\n $scope.setLocationFilterParams();\r\n }\r\n\r\n function refreshResults(filter) {\r\n $scope.filterParams = [];\r\n\r\n $scope.toggleCheck(filter);\r\n refreshFilterParams();\r\n $scope.filter();\r\n\r\n $scope.totalTickets = ReverseLogisticsService.getTicketCount();\r\n }\r\n\r\n function repopulateResults($stateParams) {\r\n if ($stateParams.rLSearchResults) {\r\n ReverseLogisticsService.setResults($stateParams.rLSearchResults);\r\n setValuesOnInstantiation();\r\n }\r\n }\r\n\r\n function setCityStateFilterParams() {\r\n var cityStateFilters = [];\r\n\r\n _.forEach($scope.filters.cityStates, function(filter) {\r\n if (filter.checked) {\r\n cityStateFilters.push({\r\n originalDestination: {\r\n cityState: filter.name\r\n }\r\n });\r\n cityStateFilters.push({\r\n originalOrigin: {\r\n cityState: filter.name\r\n }\r\n });\r\n cityStateFilters.push({\r\n returnDestination: {\r\n cityState: filter.name\r\n }\r\n });\r\n cityStateFilters.push({\r\n returnOrigin: {\r\n cityState: filter.name\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (cityStateFilters.length) {\r\n $scope.filterParams.push(cityStateFilters);\r\n }\r\n }\r\n\r\n function setLocationFilterParams() {\r\n var locationFilters = [];\r\n\r\n _.forEach($scope.filters.locationNames, function(filter) {\r\n if (filter.checked) {\r\n locationFilters.push({\r\n originalDestination: {\r\n name: filter.name\r\n }\r\n });\r\n locationFilters.push({\r\n originalOrigin: {\r\n name: filter.name\r\n }\r\n });\r\n locationFilters.push({\r\n returnDestination: {\r\n name: filter.name\r\n }\r\n });\r\n locationFilters.push({\r\n returnOrigin: {\r\n name: filter.name\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (locationFilters.length) {\r\n $scope.filterParams.push(locationFilters);\r\n }\r\n }\r\n\r\n function setReverseLogisticsListener() {\r\n $scope.$on('reverseLogisticsSearchComplete', function () {\r\n setValuesOnInstantiation();\r\n });\r\n }\r\n\r\n function setSortDescending(sortDesc) {\r\n $scope.sortDescending = sortDesc;\r\n }\r\n\r\n function setTicketStatusFilterParams() {\r\n var ticketStatusFilters = [];\r\n\r\n _.forEach($scope.filters.ticketStatuses, function (filter) {\r\n if (filter.checked) {\r\n ticketStatusFilters.push({\r\n status: filter.name\r\n });\r\n }\r\n });\r\n\r\n if (ticketStatusFilters.length) {\r\n $scope.filterParams.push(ticketStatusFilters);\r\n }\r\n }\r\n\r\n function setTicketTypeFilterParams() {\r\n var ticketTypeFilters = [];\r\n\r\n _.forEach($scope.filters.ticketTypes, function (filter) {\r\n if (filter.checked) {\r\n ticketTypeFilters.push({\r\n ticketType: filter.name\r\n });\r\n }\r\n });\r\n\r\n if (ticketTypeFilters.length) {\r\n $scope.filterParams.push(ticketTypeFilters);\r\n }\r\n }\r\n\r\n function setValuesOnInstantiation() {\r\n $scope.hideFilters = false;\r\n $scope.showNoResultsMessage = !ReverseLogisticsService.getOriginalResults().length > 0;\r\n $scope.getFilters(ReverseLogisticsService.getOriginalResults());\r\n $scope.totalTickets = ReverseLogisticsService.getTicketCount();\r\n }\r\n\r\n function showCollapseButton(propertyName) {\r\n var displayLimit = propertyName + 'DisplayLimit';\r\n if($scope.filters[propertyName]) {\r\n var filterList = $scope.filters[propertyName];\r\n return filterList.length <= $scope[displayLimit] && $scope[displayLimit] > 10\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n function toggleCheck(filter) {\r\n filter.checked = !filter.checked;\r\n }\r\n }\r\n app.controller('reverseLogisticsResultsController', reverseLogisticsResultsController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module(\"NavisphereOnline\");\r\n\r\n\treverseLogisticsDetailController.$inject = ['customerSettings', 'DocumentManagerService', 'localStorageService', 'notes', 'refNumTypes',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'ReverseLogisticsResource', '$scope', '$state', '$stateParams', 'ticketDetail', '$uibModal', 'WindowLocationHref'];\r\n\tfunction reverseLogisticsDetailController(customerSettings, DocumentManagerService, localStorageService, notes, refNumTypes,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tReverseLogisticsResource, $scope, $state, $stateParams, ticketDetail, $uibModal, WindowLocationHref) {\r\n var stopRoleMap = {\r\n 2094: \"originalOriginLocation\",\r\n 2096: \"originalDestLocation\",\r\n 5138: \"returnOriginLocation\",\r\n 5139: \"returnDestLocation\"\r\n };\r\n\r\n $scope.ticket = ticketDetail;\r\n $scope.processingFee = customerSettings.ProcessingFee;\r\n $scope.returnCost = $scope.ticket.ItemInformation.EstimatedReturnCost;\r\n $scope.refNumTypes = refNumTypes;\r\n $scope.returnMiles = $scope.ticket.ItemInformation.ReturnMiles;\r\n $scope.bolShipped = $scope.ticket.ItemInformation.TotalBolPieces;\r\n $scope.bolSigned = $scope.ticket.ItemInformation.TotalPiecesSignedFor;\r\n $scope.sealNumber = $scope.ticket.ItemInformation.SealNumber;\r\n $scope.originalOriginLocation = null;\r\n $scope.originalDestLocation = null;\r\n $scope.returnOriginLocation = null;\r\n $scope.returnDestLocation = null;\r\n $scope.calls = [];\r\n $scope.notes = notes.reverse();\r\n $scope.months = [\"Jan\", \"Feb\", \"March\", \"April\", \"May\", \"June\", \"July\", \"Aug\", \"Sept\", \"Oct\", \"Nov\", \"Dec\"];\r\n\r\n $scope.backToResults = backToResults;\r\n $scope.calculateTotals = calculateTotals;\r\n $scope.formatDate = formatDate;\r\n $scope.formatDateTime = formatDateTime;\r\n $scope.formatPhoneNumber = formatPhoneNumber;\r\n $scope.getCustomerPickup = getCustomerPickup;\r\n $scope.getDay = getDay;\r\n $scope.getEnteredByName = getEnteredByName;\r\n $scope.getMonth = getMonth;\r\n $scope.getProcessingFee = getProcessingFee;\r\n $scope.getProTripNum = getProTripNum;\r\n $scope.getRAEnteredDate = getRAEnteredDate;\r\n $scope.getRANumber = getRANumber;\r\n $scope.getRefNumType = getRefNumType;\r\n $scope.getReturnCarrier = getReturnCarrier;\r\n $scope.getSealIntact = getSealIntact;\r\n $scope.getSealSigned = getSealSigned;\r\n $scope.getStatus = getStatus;\r\n $scope.getTicketType = getTicketType;\r\n $scope.getTime = getTime;\r\n $scope.getTotalWeight = getTotalWeight;\r\n $scope.getTotalQty = getTotalQty;\r\n $scope.getYear = getYear;\r\n $scope.goToOrderDetail = goToOrderDetail;\r\n $scope.openDocumentViewer = openDocumentViewer;\r\n $scope.openNoteModal = openNoteModal;\r\n\r\n setLocationInfo();\r\n setCallerInfo();\r\n\r\n function backToResults() {\r\n var results = $stateParams.rLSearchResults;\r\n $state.go('app.reverseLogisticsSearch', {rLSearchResults: results});\r\n }\r\n\r\n function calculateTotals(propertyName) {\r\n var total = 0;\r\n _.forEach($scope.ticket.ItemInformation.Items, function(item){\r\n if(item.Active && item.Salvageable) {\r\n total += item[propertyName];\r\n }\r\n });\r\n\r\n return propertyName === \"TotalValue\" ? total.toFixed(2) : total;\r\n }\r\n\r\n /**\r\n * Takes in a 10 digit number and inserts dashes\r\n * @param phone\r\n */\r\n function formatPhoneNumber(phone) {\r\n return phone.replace(/(\\d{3})(\\d{3})(\\d{4})/, \"$1-$2-$3\");\r\n }\r\n\r\n function formatDate(date) {\r\n if(date) {\r\n return moment(date).format(\"MM/DD/YYYY\");\r\n }\r\n }\r\n\r\n function formatDateTime(dateTime) {\r\n if(dateTime) {\r\n return moment(dateTime).format(\"MM/DD/YYYY hh:mm A\");\r\n }\r\n }\r\n\r\n function getCustomerPickup() {\r\n return $scope.ticket.Carrier.CustomerPickUp ? \"YES\" : \"NO\";\r\n }\r\n\r\n function getDay(dateTime) {\r\n if(dateTime) {\r\n return moment(dateTime).date();\r\n }\r\n }\r\n\r\n /**\r\n * If the entered by name is a CHR employee (6, 7, or 8-letter)\r\n * display \"CHR\" instead of the name\r\n * @param name\r\n * @returns {*}\r\n */\r\n function getEnteredByName(name) {\r\n var regex = /^[a-zA-Z]+\\s+[a-zA-Z]/;\r\n if (regex.test(name)) {\r\n return name;\r\n } else {\r\n return \"CHR\"\r\n }\r\n }\r\n\r\n function getMonth(dateTime) {\r\n if(dateTime) {\r\n var date = moment(dateTime);\r\n return $scope.months[date.month()];\r\n }\r\n }\r\n\r\n function getProcessingFee() {\r\n var fee = 0;\r\n _.forEach($scope.ticket.ItemInformation.Items, function(item){\r\n fee += item.ProcessingFee;\r\n });\r\n\r\n return fee;\r\n }\r\n\r\n function getProTripNum() {\r\n var proTrip = \"\";\r\n _.forEach($scope.ticket.ReferenceNumbers, function(refNum) {\r\n if(refNum.RefNumTypeRdn === 358) {\r\n proTrip = refNum.Value;\r\n }\r\n });\r\n\r\n return proTrip;\r\n }\r\n\r\n function getRAEnteredDate() {\r\n return moment($scope.ticket.RaEnteredByDateTime).format(\"MM/DD/YYYY\");\r\n }\r\n\r\n function getRANumber() {\r\n var RANum = \"\";\r\n _.forEach($scope.ticket.ReferenceNumbers, function (refNum) {\r\n if (refNum.RefNumTypeRdn === 357) {\r\n RANum = refNum.Value;\r\n }\r\n });\r\n\r\n return RANum;\r\n }\r\n\r\n function getRefNumType(refNum) {\r\n var refNumType = _.find($scope.refNumTypes, function(type) {\r\n return type.Rdn === refNum.RefNumTypeRdn;\r\n });\r\n\r\n return refNumType.Description;\r\n }\r\n\r\n function getReturnCarrier() {\r\n if(!$scope.ticket.ItemInformation.ReturnCarrier) {\r\n return \"\";\r\n } else if($scope.ticket.ItemInformation.ReturnCarrier.Rdn === 5135) {\r\n return \"CHR\";\r\n } else if($scope.ticket.ItemInformation.ReturnCarrier.Rdn === 5136) {\r\n return \"Original\";\r\n } else {\r\n return \"Other\"\r\n }\r\n }\r\n\r\n function getSealIntact() {\r\n return $scope.ticket.ItemInformation.SealIntact ? \"Intact\" : \"Not Intact\";\r\n }\r\n\r\n function getSealSigned() {\r\n return $scope.ticket.ItemInformation.SealSigned ? \"Signed\" : \"Not Signed\";\r\n }\r\n\r\n function getStatus() {\r\n return $stateParams.ticketStatus;\r\n }\r\n\r\n function getTicketType() {\r\n return $stateParams.ticketType;\r\n }\r\n\r\n function getTime(dateTime) {\r\n if(dateTime) {\r\n return moment(dateTime).format(\"h:mm A\");\r\n }\r\n }\r\n\r\n function getTotalWeight() {\r\n var total = 0;\r\n _.forEach($scope.ticket.ItemInformation.Items, function(item){\r\n if(item.Salvageable){\r\n total += (item.ActualWeight * item.Quantity);\r\n }\r\n });\r\n\r\n return total;\r\n }\r\n\r\n function getTotalQty() {\r\n var total = 0;\r\n _.forEach($scope.ticket.ItemInformation.Items, function(item){\r\n total += item.Quantity;\r\n });\r\n\r\n return total;\r\n }\r\n\r\n function getYear(dateTime) {\r\n if(dateTime) {\r\n return moment(dateTime).year();\r\n }\r\n }\r\n\r\n function goToOrderDetail() {\r\n\t\t\tvar redirectUrl = appConfig.ordersUIBaseUrl + '/#/detail/' + $scope.ticket.CustomerOrderNumber;\r\n\t\t\tWindowLocationHref.setWindowLocationHref(redirectUrl);\r\n }\r\n\r\n function openDocumentViewer(ticketId) {\r\n var controller = 'reverseLogisticsDocumentViewerController';\r\n var resolveObject = {\r\n order: function () {\r\n return null;\r\n },\r\n documents: ['DocumentService', function (DocumentService) {\r\n return DocumentService.getReverseLogisticsDocuments({ticketId: ticketId}).$promise;\r\n }]\r\n };\r\n\r\n DocumentManagerService.openDocumentViewer(controller, ticketId, resolveObject);\r\n }\r\n\r\n function openNoteModal() {\r\n $uibModal.open({\r\n templateUrl: 'app/reverseLogistics/views/addNoteModal.tpl.html',\r\n size: 'md',\r\n controller: 'addNoteController',\r\n scope: $scope\r\n }).result.then(function (data) {\r\n var ticketId = ticketDetail.TicketId;\r\n var onlineNote = {\r\n OnlineNote: {\r\n TicketId: ticketId,\r\n CreatedBy: localStorageService.get('User').firstName + \" \" + localStorageService.get('User').lastName,\r\n CreateDateTime: moment(),\r\n Note: data,\r\n ActionType: \"IsNew\",\r\n DisplayInOnline: true\r\n },\r\n TicketId: ticketId\r\n };\r\n ReverseLogisticsResource.createNote(onlineNote).$promise.then(function (result) {\r\n $scope.notes.unshift(onlineNote.OnlineNote)\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Call information is returned in two different arrays, CallLogs and CallParties.\r\n * Combine these into one dataset.\r\n */\r\n function setCallerInfo() {\r\n _.forEach($scope.ticket.CallLogs, function (log) {\r\n var callParty = _.find($scope.ticket.CallParties, function(party) {\r\n return log.CallPartyId === party.CallPartyId;\r\n });\r\n $scope.calls.push({\r\n name: callParty.Contact.Name,\r\n phone: callParty.Contact.Phone,\r\n email: callParty.Contact.Email,\r\n extension: callParty.Contact.PhoneExtension,\r\n dateTime: log.CallDateTime,\r\n comments: log.Comments\r\n });\r\n });\r\n }\r\n\r\n function setLocationInfo() {\r\n _.forEach($scope.ticket.Locations, function (location) {\r\n var locationType = stopRoleMap[location.StopRole.Rdn];\r\n $scope[locationType] = location;\r\n });\r\n }\r\n }\r\n\r\n app.controller('reverseLogisticsDetailController', reverseLogisticsDetailController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module(\"NavisphereOnline\");\r\n\r\n addNoteController.$inject = ['$uibModalInstance', '$scope'];\r\n function addNoteController($uibModalInstance, $scope) {\r\n\r\n $scope.onlineNote = \"\";\r\n\r\n $scope.close = function() {\r\n $uibModalInstance.dismiss(\"closed\");\r\n };\r\n\r\n $scope.add = function() {\r\n $uibModalInstance.close($scope.onlineNote);\r\n };\r\n\r\n\r\n }\r\n app.controller('addNoteController', addNoteController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n function resendInvitationController($scope, $state, InvitationService, invitation) {\r\n $scope.processing = false;\r\n\r\n if (invitation) {\r\n $scope.invitation = invitation;\r\n } else {\r\n $state.go('login');\r\n }\r\n $scope.submit = function () {\r\n if ($scope.invitation) {\r\n var invitation = {\r\n userId: $scope.invitation.userId,\r\n requestedBy: $scope.invitation.requestedBy,\r\n message: '',\r\n email: $scope.invitation.email\r\n };\r\n InvitationService.save(invitation, function () {\r\n $state.go('Resend Invitation Complete');\r\n });\r\n } else {\r\n $state.go('login');\r\n }\r\n };\r\n }\r\n resendInvitationController.$inject = ['$scope', '$state', 'InvitationService', 'invitation'];\r\n angular.module('NavisphereOnline').controller('resendInvitationController', resendInvitationController);\r\n}());\r\n\n(function() {\r\n 'use strict';\r\n function resendInvitationCompleteController() {\r\n }\r\n angular.module('NavisphereOnline').controller('resendInvitationCompleteController', resendInvitationCompleteController);\r\n}());\r\n\r\n\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n servicePerformanceReportController.$inject = ['$scope', 'DateTimeService', 'ReportingService', 'UserPermissionService', 'moment'];\r\n function servicePerformanceReportController($scope, DateTimeService, ReportingService, UserPermissionService, moment) {\r\n $scope.dataComplete = false;\r\n\r\n var customerList = UserPermissionService.getCustomersForRole('Service Performance Report');\r\n var cCodeList = [];\r\n\r\n var beginDate = moment().startOf('month').format('YYYYMMDD');\r\n var endDate = moment().endOf('month').format('YYYYMMDD');\r\n var periodBeginDate = moment().subtract(14, 'month').startOf('month').format('YYYYMMDD');\r\n $scope.beginDateDisp = DateTimeService.getDisplayDate(moment().startOf('month'));\r\n $scope.endDateDisp = DateTimeService.getDisplayDate(moment().endOf('month'));\r\n\r\n for(var i = 0; i < customerList.length; i++){\r\n cCodeList.push(customerList[i].partyCode);\r\n }\r\n\r\n ReportingService.onTime({\r\n \"beginDate\": beginDate,\r\n \"endDate\": endDate\r\n }).$promise.then(function(response) {\r\n $scope.onTimePicks = response.onTimePickUpPercent;\r\n $scope.isEmpty = response.isEmpty;\r\n $scope.onTimeDrops = response.onTimeDeliveryPercent;\r\n $scope.pickCount = response.pickupCount;\r\n $scope.pickupFailCount = response.pickupFailCount;\r\n $scope.deliveryCount = response.deliveryCount;\r\n $scope.deliveryFailCount = response.deliveryFailCount;\r\n\r\n $scope.noZero = function(value){\r\n var newValue = 0;\r\n if(value === 0){\r\n newValue = .0001;\r\n }\r\n else {\r\n newValue = value;\r\n }\r\n return newValue;\r\n\r\n };\r\n\r\n ReportingService.servicePerformance( {\r\n \"beginDate\": beginDate,\r\n \"endDate\": endDate\r\n }).$promise.then(function(response) {\r\n $scope.freightMvmt = {\r\n avg_elt:response.avgEnteredLeadTime/60,\r\n avg_pdt:response.avgPickupDwellTime/60,\r\n avg_tt:response.avgTransitTime/60,\r\n avg_ddt:response.avgDropDwellTime/60,\r\n avg_tct:response.avgTotalCycleTime/60};\r\n ReportingService.onTimePeriod({\r\n \"beginDate\": periodBeginDate,\r\n \"endDate\": endDate\r\n }).$promise.then(function(response) {\r\n $scope.otPeriod = response;\r\n\r\n var sbcp = [];\r\n var sbcd = [];\r\n\r\n $.each($scope.otPeriod, function( index, value ) {\r\n sbcp.push({'country':'Pick','year':value.timePeriod,'percent':$scope.noZero(value.onTimePickUpPercent)/100});\r\n sbcd.push({'country':'Pick','year':value.timePeriod,'percent':$scope.noZero(value.onTimeDeliveryPercent)/100});\r\n });\r\n\r\n $scope.sbcp = sbcp;\r\n $scope.sbcd = sbcd;\r\n\r\n $scope.dataComplete = true;\r\n }, function() {});\r\n }, function() {});\r\n }, function() {});\r\n }\r\n\r\n app.controller('ServicePerformanceReportController', servicePerformanceReportController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n ordersOverviewReportController.$inject = ['$scope', '$locale', 'ReportingService', 'UserPermissionService', 'moment', 'DateTimeService', 'customerModes', '$filter'];\r\n function ordersOverviewReportController($scope, $locale, ReportingService, UserPermissionService, moment, DateTimeService, customerModes, $filter) {\r\n\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n\r\n $scope.partyCodeList = UserPermissionService.getCustomersForRole('Orders Overview Report');\r\n\r\n $scope.orderStatusList = [{\r\n Name: \"Booked\", Value: \"BOOKED\"\r\n }, {\r\n Name: \"Incomplete\", Value: \"INCOMPLETE\"\r\n }, {\r\n Name: \"In Transit\", Value: \"INTRANSIT\"\r\n }, {\r\n Name: \"Delivered\", Value: \"DELIVERED\"\r\n }, {\r\n Name: \"Ordered\", Value: \"ORDERED\"\r\n }];\r\n\r\n $scope.newArray = [];\r\n $scope.datetype = {};\r\n $scope.datetype.name = 'delivery';\r\n\r\n $scope.excelexport = 'exportexcel.png';\r\n $scope.exportfilename = $filter('translate')('ORDERS_OVERVIEW_REPORT');\r\n $scope.dataexport = {\r\n customerOrderNumber: $filter('translate')('ORDER_NUMBER'),\r\n trackingReferenceNumber: $filter('translate')('TRACKING_NUMBER'),\r\n partyCodeName: $filter('translate')('ACCOUNT_NAME'),\r\n primaryReferenceNumber: $filter('translate')('PRIMARY_REFERENCE_NUMBER'),\r\n orderOriginPickupName: $filter('translate')('ORIGIN_PICKUP_NAME'),\r\n orderOriginPickupCity: $filter('translate')('ORIGIN_PICKUP_CITY'),\r\n orderOriginPickupState: $filter('translate')('ORIGIN_PICKUP_STATE'),\r\n earliestRequestedPickupDate: $filter('translate')('EARLIEST_REQUESTED_PICKUP_DATE'),\r\n latestRequestedPickupDate: $filter('translate')('LATEST_REQUESTED_PICKUP_DATE'),\r\n earliestScheduledPickupDate: $filter('translate')('EARLIEST_SCHEDULED_PICKUP_DATE'),\r\n latestScheduledPickupDate: $filter('translate')('LATEST_SCHEDULED_PICKUP_DATE'),\r\n actualPickupArrival: $filter('translate')('ACTUAL_PICKUP_ARRIVAL'),\r\n actualPickupDeparture: $filter('translate')('ACTUAL_PICKUP_DEPARTURE'),\r\n orderDestinationDeliveryName: $filter('translate')('DESTINATION_DELIVERY_NAME'),\r\n orderDestinationDeliveryCity: $filter('translate')('DESTINATION_DELIVERY_CITY'),\r\n orderDestinationDeliveryState: $filter('translate')('DESTINATION_DELIVERY_STATE'),\r\n earliestRequestedDeliveryDate: $filter('translate')('EARLIEST_REQUESTED_DELIVERY_DATE'),\r\n latestRequestedDeliveryDate: $filter('translate')('LATEST_REQUESTED_DELIVERY_DATE'),\r\n earliestScheduledDeliveryDate: $filter('translate')('EARLIEST_SCHEDULED_DELIVERY_DATE'),\r\n latestScheduledDeliveryDate: $filter('translate')('LATEST_SCHEDULED_DELIVERY_DATE'),\r\n actualDeliveryArrival: $filter('translate')('ACTUAL_DELIVERY_ARRIVAL'),\r\n actualDeliveryDeparture: $filter('translate')('ACTUAL_DELIVERY_DEPARTURE'),\r\n orderStatus: $filter('translate')('ORDER_STATUS'),\r\n orderMode: $filter('translate')('ORDER_MODE'),\r\n carrierName: $filter('translate')('CARRIER_NAME'),\r\n proReferenceNumber: $filter('translate')('PRO_REFERENCE_NUMBER')\r\n };\r\n\r\n $scope.loader = {\r\n\r\n loading: false\r\n\r\n };\r\n\r\n $scope.dataexportfields = $scope.dataexport;\r\n\r\n $scope.CustomerModesList = customerModes;\r\n\r\n $scope.getCustomerModes = function () {\r\n\r\n $scope.customerList = $scope.getDisplayArray($scope.CustomerModesList, 'partyCode', 'Customer');\r\n\r\n\r\n $scope.shippingMethodList = $scope.getDisplayArray($scope.CustomerModesList, 'orderModeValue', 'Mode');\r\n };\r\n\r\n $scope.checkboxOrderStatusChanged = function () {\r\n $scope.OSCount = 0;\r\n\r\n angular.forEach($scope.orderStatusList, function (item) {\r\n if (item.SelectedOS === true) { $scope.OSCount = $scope.OSCount + 1; }\r\n });\r\n\r\n if ($scope.OSCount === 0) { $scope.showButtonOS = false; }\r\n else { $scope.showButtonOS = true; }\r\n $scope.selectAllOS = false;\r\n };\r\n\r\n $scope.checkAllOrderStatus = function () {\r\n\r\n if ($scope.selectAllOS) {\r\n $scope.selectAllOS = true;\r\n $scope.showButtonOS = true;\r\n } else {\r\n $scope.selectAllOS = false;\r\n $scope.showButtonOS = false;\r\n }\r\n\r\n angular.forEach($scope.orderStatusList, function (item) {\r\n item.SelectedOS = $scope.selectAllOS;\r\n\r\n });\r\n\r\n };\r\n\r\n $scope.checkboxShippingMethodsChanged = function () {\r\n $scope.SMCount = 0;\r\n\r\n angular.forEach($scope.shippingMethodList, function (item) {\r\n if (item.SelectedSM === true) { $scope.SMCount = $scope.SMCount + 1; }\r\n });\r\n\r\n if ($scope.SMCount === 0) { $scope.showButtonSM = false; }\r\n else { $scope.showButtonSM = true; }\r\n $scope.selectAllSM = false;\r\n };\r\n\r\n $scope.checkAllShippingMethods = function () {\r\n\r\n if ($scope.selectAllSM) {\r\n $scope.selectAllSM = true;\r\n $scope.showButtonSM = true;\r\n } else {\r\n $scope.selectAllSM = false;\r\n $scope.showButtonSM = false;\r\n }\r\n\r\n angular.forEach($scope.shippingMethodList, function (item) {\r\n item.SelectedSM = $scope.selectAllSM;\r\n });\r\n\r\n };\r\n\r\n $scope.getReport = function () {\r\n\r\n $('#modalGenerate').modal('show');\r\n\r\n $('#ordersOverviewLaunch').prop('disabled', true);\r\n\r\n $scope.noDataMessage = false;\r\n $scope.noStatusModeMessage = false;\r\n $scope.generatingMessage = true;\r\n\r\n $scope.orderStatusArray = [];\r\n $scope.shippingMethodArray = [];\r\n $scope.accountsArray = [];\r\n $scope.dataflatexport = [];\r\n\r\n $scope.createOrderStatusArray($scope.orderStatusList);\r\n $scope.createShippingMethodArray($scope.shippingMethodList);\r\n $scope.createAccountsArray($scope.customerList);\r\n\r\n $scope.getShippingMethodSelections($scope.selectAllSM);\r\n $scope.getOrderStatusSelections($scope.selectAllOS);\r\n $scope.getAccountsSelections();\r\n\r\n $scope.dateType = ($scope.datetype.name).substr(0, 1);\r\n\r\n $scope.beginDatePass = moment($scope.beginDate).format('YYYYMMDD');\r\n\r\n $scope.endDatePass = moment($scope.endDate).format('YYYYMMDD');\r\n\r\n if (_.has($scope.item, 'SelectedAccounts') && $scope.mode !== '' && $scope.status !== '' && $scope.accounts !== '') {\r\n\r\n ReportingService.historicOrders(\r\n {\r\n \"partyCodesStr\": $scope.accounts,\r\n \"modeStr\": $scope.mode,\r\n \"statusStr\": $scope.status,\r\n \"beginDate\": $scope.beginDatePass,\r\n \"endDate\": $scope.endDatePass,\r\n \"dateType\": $scope.dateType\r\n }\r\n )\r\n .$promise\r\n .then(function (response) {\r\n\r\n $scope.dataexportresults = response;\r\n $('#ordersOverviewLaunch').prop('disabled', false);\r\n\r\n $scope.generatingMessage = false;\r\n $scope.noDataMessage = false;\r\n $scope.noStatusModeMessage = false;\r\n $scope.errorMessage = false;\r\n\r\n $scope.returnDataLogic($scope.dataexportresults);\r\n\r\n })\r\n .catch(function () {\r\n $scope.errorMessage = true;\r\n $('#ordersOverviewLaunch').prop('disabled', false);\r\n $('#modalGenerate').modal('hide');\r\n })\r\n\r\n }\r\n else {\r\n\r\n $('#ordersOverviewLaunch').prop('disabled', false);\r\n $scope.generatingMessage = false;\r\n $scope.noDataMessage = false;\r\n $scope.noStatusModeMessage = true;\r\n $scope.errorMessage = false;\r\n $('#modalGenerate').modal('hide');\r\n }\r\n\r\n };\r\n\r\n $scope.returnDataLogic = function (dataexportresults) {\r\n\r\n $scope.dataLength = dataexportresults.length;\r\n $scope.displayMessages($scope.dataLength);\r\n\r\n if ($scope.dataLength !== 0) {\r\n\r\n $.each(dataexportresults, function (index, value) {\r\n\r\n $scope.dataflatexport.push({\r\n\r\n 'customerOrderNumber': value.customerOrderNumber,\r\n 'trackingReferenceNumber': value.trackingReferenceNumber,\r\n 'partyCodeName': $scope.removeComma(value.partyCodeName),\r\n 'primaryReferenceNumber': $scope.removeComma(value.primaryReferenceNumber),\r\n 'orderOriginPickupName': $scope.removeComma(value.orderOriginPickupName),\r\n 'orderOriginPickupCity': $scope.removeComma(value.orderOriginPickupCity),\r\n 'orderOriginPickupState': $scope.removeComma(value.orderOriginPickupState),\r\n 'earliestRequestedPickupDate': $scope.formatDate(value.earliestRequestedPickupDate),\r\n 'latestRequestedPickupDate': $scope.formatDate(value.latestRequestedPickupDate),\r\n 'earliestScheduledPickupDate': $scope.formatDate(value.earliestScheduledPickupDate),\r\n 'latestScheduledPickupDate': $scope.formatDate(value.latestScheduledPickupDate),\r\n 'actualPickupArrival': $scope.formatDate(value.actualPickupArrival),\r\n 'actualPickupDeparture': $scope.formatDate(value.actualPickupDeparture),\r\n 'orderDestinationDeliveryName': $scope.removeComma(value.orderDestinationDeliveryName),\r\n 'orderDestinationDeliveryCity': $scope.removeComma(value.orderDestinationDeliveryCity),\r\n 'orderDestinationDeliveryState': $scope.removeComma(value.orderDestinationDeliveryState),\r\n 'earliestRequestedDeliveryDate': $scope.formatDate(value.earliestRequestedDeliveryDate),\r\n 'latestRequestedDeliveryDate': $scope.formatDate(value.latestRequestedDeliveryDate),\r\n 'earliestScheduledDeliveryDate': $scope.formatDate(value.earliestScheduledDeliveryDate),\r\n 'latestScheduledDeliveryDate': $scope.formatDate(value.latestScheduledDeliveryDate),\r\n 'actualDeliveryArrival': $scope.formatDate(value.actualDeliveryArrival),\r\n 'actualDeliveryDeparture': $scope.formatDate(value.actualDeliveryDeparture),\r\n 'orderStatus': $filter('translate')(value.orderStatus),\r\n 'orderMode': $filter('translate')(value.orderMode),\r\n 'carrierName': $scope.removeComma(value.carrierName),\r\n 'proReferenceNumber': $scope.removeComma(value.proReferenceNumber)\r\n\r\n });\r\n });\r\n $('#modalGenerate').modal('hide');\r\n $scope.exportCompleteExcelFile();\r\n }\r\n };\r\n\r\n $scope.exportCompleteExcelFile = function () {\r\n\r\n angular.element(\"#historicalordersexport\").triggerHandler('click');\r\n $scope.generatingMessage = false;\r\n\r\n };\r\n\r\n $scope.displayMessages = function (dataLength) {\r\n\r\n if (dataLength === 0) {\r\n $scope.generatingMessage = false;\r\n $scope.noDataMessage = true;\r\n $scope.errorMessage = false;\r\n $('#modalGenerate').modal('hide');\r\n }\r\n else {\r\n $scope.noDataMessage = false;\r\n }\r\n\r\n };\r\n\r\n $scope.getAccountsSelections = function (selectAllAccounts) {\r\n\r\n if (selectAllAccounts === true) {\r\n $scope.accounts = \"ALL\"\r\n } else {\r\n $scope.accounts = $scope.accountsArray.join()\r\n }\r\n\r\n return $scope.accounts;\r\n };\r\n\r\n $scope.getOrderStatusSelections = function (selectAllOS) {\r\n\r\n if (selectAllOS === true) {\r\n $scope.status = \"ALL\"\r\n } else {\r\n $scope.status = $scope.orderStatusArray.join()\r\n }\r\n\r\n return $scope.status;\r\n };\r\n\r\n $scope.getShippingMethodSelections = function (selectAllSM) {\r\n\r\n if (selectAllSM === true) {\r\n $scope.mode = \"ALL\"\r\n } else {\r\n $scope.mode = $scope.shippingMethodArray.join()\r\n }\r\n return $scope.mode;\r\n };\r\n\r\n $scope.createOrderStatusArray = function () {\r\n $scope.orderStatusArray = [];\r\n\r\n angular.forEach($scope.orderStatusList, function (item) {\r\n\r\n if (!!item.SelectedOS && $scope.orderStatusArray.indexOf(item) === -1) {\r\n $scope.orderStatusArray.push(item.Value);\r\n }\r\n });\r\n\r\n return $scope.orderStatusArray;\r\n\r\n };\r\n\r\n $scope.createShippingMethodArray = function () {\r\n\r\n $scope.shippingMethodArray = [];\r\n\r\n angular.forEach($scope.shippingMethodList, function (item) {\r\n if (!!item.SelectedSM && $scope.shippingMethodArray.indexOf(item) === -1) {\r\n $scope.shippingMethodArray.push(item.Value);\r\n }\r\n });\r\n\r\n return $scope.shippingMethodArray;\r\n\r\n };\r\n\r\n $scope.createAccountsArray = function () {\r\n $scope.accountsArray = [];\r\n\r\n if (!$scope.item) {\r\n return;\r\n }\r\n\r\n if ($scope.item.SelectedAccounts[0] === 'ALL') {\r\n\r\n angular.forEach($scope.customerList, function (item) {\r\n if ($scope.customerList.indexOf(item) !== 0) {\r\n $scope.accountsArray.push(item.Value);\r\n }\r\n });\r\n }\r\n else {\r\n\r\n for (var i = 0; i < $scope.item.SelectedAccounts.length; i++) {\r\n $scope.accountsArray.push($scope.item.SelectedAccounts[i]);\r\n }\r\n }\r\n\r\n return $scope.accountsArray;\r\n };\r\n\r\n //DisplayArray Creation\r\n $scope.getDisplayArray = function (originalArray, dupCheckOn, arrayType) {\r\n\r\n $scope.originalArray = $scope.removeDuplicates(originalArray, dupCheckOn);\r\n\r\n $scope.col = 0;\r\n $scope.counter = 1;\r\n $scope.newArray = [];\r\n\r\n if (arrayType === 'Customer') {\r\n $scope.newArray.push({ Text: $filter('translate')('ALL'), Value: 'ALL' });\r\n\r\n angular.forEach($scope.originalArray, function (item) {\r\n\r\n $scope.counter = $scope.counter + 1;\r\n if (item.partyCode !== undefined) {\r\n $scope.newArray.push({ Text: item.partyName, Value: item.partyCode });\r\n }\r\n });\r\n }\r\n else {\r\n angular.forEach($scope.originalArray, function (item) {\r\n\r\n $scope.col = $scope.columnCounter($scope.counter, $scope.col);\r\n\r\n $scope.counter = $scope.counter + 1;\r\n if (item.orderModeValue !== undefined) {\r\n $scope.newArray.push({ Text: item.orderModeText, Value: item.orderModeValue, col: $scope.col });\r\n }\r\n });\r\n }\r\n\r\n return $scope.newArray;\r\n\r\n };\r\n\r\n $scope.removeDuplicates = function (originalArray, prop) {\r\n $scope.cleanArray = [];\r\n $scope.lookupObject = {};\r\n\r\n for ($scope.i in originalArray) {\r\n $scope.lookupObject[originalArray[$scope.i][prop]] = originalArray[$scope.i];\r\n }\r\n\r\n for ($scope.i in $scope.lookupObject) {\r\n $scope.cleanArray.push($scope.lookupObject[$scope.i]);\r\n }\r\n return $scope.cleanArray;\r\n };\r\n\r\n $scope.columnCounter = function (counter, cols) {\r\n\r\n if (counter % 4 === 0) {\r\n cols = cols + 1;\r\n }\r\n\r\n return cols;\r\n };\r\n\r\n //Formatting\r\n $scope.formatDate = function (date) {\r\n var strdate = String(date);\r\n\r\n var year = strdate.substr(0, 4);\r\n var month = strdate.substr(4, 2);\r\n var day = strdate.substr(6, 2);\r\n\r\n var datef = month + '/' + day + '/' + year;\r\n\r\n if (strdate === \"0\") {\r\n datef = \"\"\r\n }\r\n\r\n return datef\r\n };\r\n\r\n $scope.removeComma = function (value) {\r\n var valuef;\r\n valuef = value.replace(/,/g, \"\");\r\n\r\n return valuef\r\n\r\n };\r\n\r\n //Date Picker Setup\r\n var maxDate = new Date();\r\n\r\n maxDate.setDate(maxDate.getDate() + 365);\r\n\r\n $scope.minDate = \"01-01-2015\";\r\n $scope.maxDate = maxDate;\r\n\r\n $scope.openBegin = function ($event) {\r\n\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n\r\n $scope.openedBegin = true;\r\n };\r\n\r\n $scope.openEnd = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n\r\n $scope.openedEnd = true;\r\n };\r\n\r\n $scope.beginDateOptions = {\r\n showWeeks: false\r\n };\r\n\r\n $scope.endDateOptions = {\r\n showWeeks: false\r\n };\r\n\r\n\r\n $scope.init = function () {\r\n\r\n $scope.getCustomerModes();\r\n\r\n };\r\n }\r\n\r\n app.controller('OrdersOverviewReportController', ordersOverviewReportController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n function ExcelReportExporterService() {\r\n\r\n function exportReportExcel(exportData, reportTitle) {\r\n\r\n var jsonObject = JSON.stringify(exportData);\r\n\r\n var csv = convertToCSV(jsonObject);\r\n\r\n var exportedFileName = reportTitle ? reportTitle + '.csv' : 'export.csv';\r\n\r\n var blob = new Blob([csv], { type: 'text/csv;charset=utf-16;' });\r\n\r\n if (navigator.msSaveBlob) { // IE 10+\r\n navigator.msSaveBlob(blob, exportedFileName);\r\n }\r\n else {\r\n var link = document.createElement(\"a\");\r\n if (link.download !== undefined) { // feature detection\r\n // Browsers that support HTML5 download attribute\r\n var url = URL.createObjectURL(blob);\r\n link.setAttribute(\"href\", url);\r\n link.setAttribute(\"download\", exportedFileName);\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n }\r\n return \"success\";\r\n }\r\n }\r\n\r\n function convertToCSV(jsonObject) {\r\n\r\n var array = typeof jsonObject !== 'object' ? JSON.parse(jsonObject) : jsonObject;\r\n var str = '';\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var line = '';\r\n for (var index in array[i]) {\r\n if (line !== '') line += ',';\r\n\r\n line += array[i][index];\r\n }\r\n\r\n str += line + '\\r\\n';\r\n }\r\n return str;\r\n }\r\n\r\n return {\r\n exportReportExcel: exportReportExcel,\r\n convertToCSV: convertToCSV\r\n };\r\n\r\n }\r\n app.factory('ExcelReportExporterService', ExcelReportExporterService);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"NavisphereOnline\").directive(\"quoteHistoryCard\",\r\n [\"$state\", \"DateTimeService\", \"GAQAccessorialService\", \"GAQService\", \"QuoteHistoryService\", \"QuoteHistoryTransformService\", \"QuoteService\",\r\n function($state, DateTimeService, GAQAccessorialService, GAQService, QuoteHistoryService, QuoteHistoryTransformService, QuoteService) {\r\n return {\r\n templateUrl: \"app/quoteHistory/views/quoteHistoryCard.tpl.html\",\r\n scope: {\r\n card: \"=card\",\r\n customers: \"=customers\",\r\n isMetric: \"=isMetric\",\r\n itemDdlRefData: \"=itemDdlRefData\",\r\n user: \"=user\",\r\n quoteId: \"=quoteId\"\r\n },\r\n link: function(scope) {\r\n scope.getDisplayDate = getDisplayDate;\r\n scope.reQuote = reQuote;\r\n scope.viewResults = viewResults;\r\n\r\n function getDisplayDate(date) {\r\n var stillUtc = moment.utc(date).toDate();\r\n var localdt = moment.utc(stillUtc).local().toISOString();\r\n return DateTimeService.getDisplayDate(localdt);\r\n }\r\n\r\n function prepForStateChange(quoteRequestId, isShippable, quoteId, callback) {\r\n QuoteService.getQuoteDetails({ quoteRequestId: quoteRequestId, quoteId: quoteId }).$promise.then(function(result) {\r\n return QuoteHistoryTransformService.transform(result, scope.customers, scope.itemDdlRefData);\r\n }).then(function(transformedQuote) {\r\n return QuoteHistoryService.buildParams(transformedQuote, quoteRequestId, scope.isMetric, isShippable);\r\n }).then(callback);\r\n }\r\n\r\n function viewResults(quoteRequestId, isShippable) {\r\n prepForStateChange(quoteRequestId, isShippable, scope.quoteId, viewResultsCallback);\r\n }\r\n\r\n function reQuote(quoteRequestId) {\r\n prepForStateChange(quoteRequestId, null, null, reQuoteCallback);\r\n }\r\n\r\n function viewResultsCallback(params) {\r\n $state.go(\"app.getAQuoteResults\", params);\r\n }\r\n\r\n function reQuoteCallback(params) {\r\n var order = GAQService.setInitialOrderState();\r\n\r\n _.merge(order, params.rawQuoteParams);\r\n\r\n //We cannot requote TL quote requests after 2 pm eastern\r\n if (getRequestType(params.quoteResults) !== \"LTL\" && isAfterTwoPMETLQuoteRequest(order.pickupDate)) {\r\n reRouteQuoteRequestScreen(order);\r\n return;\r\n }\r\n\r\n order.isTeam = isTeamRequest(params.quoteResults);\r\n\r\n GAQService.getQuote(order, scope.user, scope.isMetric, \"quoteHistory\", getRequestType(params.quoteResults));\r\n }\r\n\r\n function getRequestType(quotes) {\r\n var truckloadQuotes = 0;\r\n var flatbedQuotes = 0;\r\n var ltlQuotes = 0;\r\n var requestType = \"\";\r\n\r\n _.forEach(quotes, function(quote) {\r\n if(quote.transportModeType === 12) {\r\n flatbedQuotes++;\r\n } else if(quote.transportModeType === 2) {\r\n truckloadQuotes++;\r\n } else {\r\n ltlQuotes++;\r\n }\r\n });\r\n\r\n if (truckloadQuotes > 0 && flatbedQuotes === 0 && ltlQuotes === 0) {\r\n requestType = \"Truckload\";\r\n } else if (truckloadQuotes === 0 && flatbedQuotes > 0 && ltlQuotes === 0) {\r\n requestType = \"Flatbed\";\r\n } else {\r\n requestType = \"LTL\";\r\n }\r\n return requestType;\r\n }\r\n\r\n function isTeamRequest(quotes) {\r\n var isTeam = false;\r\n _.forEach(quotes, function(quote) {\r\n if (quote.specialServiceList) {\r\n _.forEach(quote.specialServiceList, function(service) {\r\n //EXD check for expedite/team rate\r\n if (service === \"EXD\") {\r\n isTeam = true;\r\n }\r\n });\r\n }\r\n });\r\n return isTeam;\r\n }\r\n\r\n function isAfterTwoPMETLQuoteRequest(pickupDate) {\r\n var todayDate = DateTimeService.getToday();\r\n return !!(pickupDate.getDate() === todayDate.getDate() && DateTimeService.isLocalTimePastTwoPMEastern(pickupDate));\r\n }\r\n\r\n function reRouteQuoteRequestScreen(order) {\r\n $state.go(\"app.getAQuote\", {\r\n noQuotesFound: true,\r\n rawQuoteParams: order\r\n });\r\n }\r\n }\r\n }\r\n }]);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n QuoteHistoryTransformService.$inject = [\"$q\", \"BolCommentService\", \"GAQAccessorialService\", \"LocationSelectionHelperService\", \"LocationService\"];\r\n\r\n function QuoteHistoryTransformService($q, BolCommentService, GAQAccessorialService, LocationSelectionHelperService, LocationService) {\r\n this.transform = transform;\r\n\r\n function constructFilterParams(location) {\r\n var filterParams = {};\r\n\r\n if (location.address.city) {\r\n filterParams.name = location.address.city;\r\n }\r\n\r\n if (location.address.stateProvince) {\r\n filterParams.adminDistrictCode = location.address.stateProvince;\r\n }\r\n\r\n if (location.address.country) {\r\n filterParams.countryCode = location.address.country;\r\n }\r\n\r\n return filterParams;\r\n }\r\n\r\n function determineLocationRefinementMethod(location) {\r\n if (location.locationCode) {\r\n return {\r\n method: LocationService.getLocation,\r\n params: {\r\n locationPartyNumberOrCode: location.locationCode\r\n }\r\n }\r\n } else {\r\n return {\r\n isZip: true,\r\n method: LocationService.getCities,\r\n params: {\r\n zipCode: location.address.postalCode\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getSpecificLocation(data, location) {\r\n if (data && data.length > 0) {\r\n for (var i = 0; i < data.length; i++) {\r\n data[i].name = data[i].name.toUpperCase();\r\n }\r\n }\r\n var filterParams = constructFilterParams(location);\r\n var resultSet = _.filter(data, filterParams)[0];\r\n resultSet.specialRequirementCodes = location.specialRequirementCodes;\r\n return resultSet;\r\n }\r\n\r\n function handleRateDescription(quotes) {\r\n _.forEach(quotes, function(quote) {\r\n _.forEach(quote.rateList, function(rate) {\r\n if (rate.rateCodeValue) {\r\n rate.rateDescription = rate.rateCodeValue;\r\n }\r\n });\r\n });\r\n\r\n return quotes;\r\n }\r\n\r\n function hydrateCustomer(cust, customers) {\r\n //if unable to hydrate, some downstream processes rely on partyCode \r\n cust.partyCode = cust.customerCode;\r\n\r\n _.forEach(customers, function(customer) {\r\n if (cust.customerCode && customer.partyCode && \r\n cust.customerCode.toUpperCase() === customer.partyCode.toUpperCase()) {\r\n cust = customer;\r\n BolCommentService.get(cust);\r\n }\r\n });\r\n\r\n return cust;\r\n }\r\n\r\n function hydrateItems(quote, itemDdlRefData) {\r\n _.forEach(quote.itemList, function(item) {\r\n item.commodityName = item.productName;\r\n item.weight = item.actualWeight;\r\n prefillComplexFields(item, itemDdlRefData);\r\n hydrateItemSearch(item, quote);\r\n });\r\n }\r\n\r\n function hydrateItemSearch(item, quote) {\r\n return BolCommentService.getSearchItem(item, quote.customer).then(function () {\r\n return item;\r\n });\r\n }\r\n\r\n function prefillComplexFields(item, itemDdlRefData) {\r\n prefillPackaging(item, itemDdlRefData);\r\n prefillTemperature(item, itemDdlRefData);\r\n prefillFreightClass(item, itemDdlRefData);\r\n }\r\n\r\n function prefillPackaging(item, itemDdlRefData) {\r\n if (item.packagingCode) {\r\n item.packaging = _.filter(itemDdlRefData.Packaging, { refDataCode: item.packagingCode })[0];\r\n }\r\n }\r\n\r\n function prefillTemperature(item, itemDdlRefData) {\r\n if (item.temperatureSensitiveCode) {\r\n item.tempCategory = _.filter(itemDdlRefData.TemperatureSensitive, { refDataCode: item.temperatureSensitiveCode})[0];\r\n }\r\n }\r\n\r\n function prefillFreightClass(item, itemDdlRefData) {\r\n if (item.freightClass) {\r\n item.freightClass = _.filter(itemDdlRefData.FreightClass, { refDataCode: item.freightClass.toString()})[0];\r\n }\r\n }\r\n\r\n function hydrateLocation(quote) {\r\n var capCities = determineAddressCityName(quote);\r\n var destCity = capCities[0];\r\n var originCity = capCities[1];\r\n var destinationRefinement = determineLocationRefinementMethod(quote.destination);\r\n var originRefinement = determineLocationRefinementMethod(quote.origin);\r\n\r\n return $q.all([\r\n destinationRefinement.method(destinationRefinement.params).$promise,\r\n originRefinement.method(originRefinement.params).$promise\r\n ]).then(function(result) {\r\n if (destinationRefinement.isZip) {\r\n quote.destination = getSpecificLocation(result[0], quote.destination);\r\n quote.destination = LocationSelectionHelperService.restructureLocation(quote.destination);\r\n }\r\n\r\n if (originRefinement.isZip) {\r\n quote.origin = getSpecificLocation(result[1], quote.origin);\r\n quote.origin = LocationSelectionHelperService.restructureLocation(quote.origin);\r\n }\r\n\r\n if (quote.destination.address){\r\n quote.destination.address.city = destCity;\r\n quote.destination.name = destCity;\r\n }\r\n\r\n if (quote.origin.address){\r\n quote.origin.address.city = originCity;\r\n quote.origin.name = originCity;\r\n }\r\n return quote;\r\n });\r\n }\r\n\r\n function determineAddressCityName(quote) {\r\n var destCity;\r\n var originCity;\r\n var capCities = new Array();\r\n if (quote != null && quote != undefined) {\r\n if (quote.destination != null && quote.destination != undefined) {\r\n if (quote.destination.address && quote.destination.address.city) {\r\n destCity = quote.destination.address.city;\r\n quote.destination.address.city = quote.destination.address.city.toUpperCase();\r\n }\r\n }\r\n if (quote.origin != null && quote.origin != undefined) {\r\n if (quote.origin.address && quote.origin.address.city) {\r\n originCity = quote.origin.address.city;\r\n quote.origin.address.city = quote.origin.address.city.toUpperCase();\r\n }\r\n }\r\n }\r\n capCities = [ destCity, originCity ];\r\n return capCities;\r\n }\r\n\r\n function hydrateQuoteCharges(quoteDetails) {\r\n var resultQuotes = [];\r\n\r\n _.forEach(quoteDetails, function(quoteDetail) {\r\n quoteDetail.totalCharge = quoteDetail.total;\r\n quoteDetail.totalAccessorialCharge = quoteDetail.totalAccessorial;\r\n\r\n resultQuotes.push(quoteDetail);\r\n });\r\n\r\n return resultQuotes;\r\n }\r\n\r\n /**\r\n * Preps data for use in Get A Quote, Get a Quote Results, and Quote to Order.\r\n *\r\n * @param quoteHistoryQuote A single quote history result.\r\n */\r\n function transform(quoteHistoryQuote, customers, itemDdlRefData) {\r\n return hydrateLocation(quoteHistoryQuote).then(function(quote) {\r\n quote.quoteDetailList = hydrateQuoteCharges(quote.quoteDetailList);\r\n quote.customer = hydrateCustomer(quote.customer, customers);\r\n hydrateItems(quote, itemDdlRefData);\r\n quote.quoteDetailList = handleRateDescription(quote.quoteDetailList);\r\n quote.originAccessorials = GAQAccessorialService.getOriginAccessorialsWithSelections(quote.origin.specialRequirementCodes);\r\n quote.destinationAccessorials = GAQAccessorialService.getDestinationAccessorialsWithSelections(quote.destination.specialRequirementCodes);\r\n quote.overallAccessorials = GAQAccessorialService.getOverallAccessorialsWithSelections(quote.accessorialList);\r\n quote.isTruckload = (quoteHistoryQuote.transportModeList.length === 1);\r\n return quote;\r\n });\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"QuoteHistoryTransformService\", QuoteHistoryTransformService);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n QuoteHistoryService.$inject = [\"QuoteService\"];\r\n\r\n function QuoteHistoryService(QuoteService) {\r\n this.buildParams = buildParams;\r\n this.constructQuoteHistoryRequest = constructQuoteHistoryRequest;\r\n\r\n function buildParams(quote, quoteRequestId, isMetric, isShippable) {\r\n return isTransactional(quote.customer.partyCode).then(function(isTransactional) {\r\n return {\r\n rawQuoteParams: {\r\n customer: quote.customer,\r\n deliver: quote.destination,\r\n destinationAccessorials: quote.destinationAccessorials,\r\n isTransactional: isTransactional,\r\n items: quote.itemList,\r\n originAccessorials: quote.originAccessorials,\r\n overallAccessorials: quote.overallAccessorials,\r\n pickup: quote.origin,\r\n isTruckload: quote.isTruckload\r\n },\r\n quoteRequestId: quoteRequestId,\r\n quoteResults: quote.quoteDetailList,\r\n getAQuoteParams: {\r\n customer: quote.customer,\r\n destination: quote.destination,\r\n origin: quote.origin,\r\n items: quote.itemList,\r\n shipDate: quote.shipDate,\r\n useMetric: isMetric,\r\n actualWeight: getTotalWeight(quote.itemList),\r\n\r\n // TODO This may cause issues with QTO if the naming conventions are different (they are);\r\n // TODO This may not actually be an issue. Leaving this note in until Quote History goes through QA.\r\n accessorials: quote.accessorialList\r\n },\r\n isShippable: isShippable\r\n }\r\n });\r\n }\r\n\r\n function constructQuoteHistoryRequest() {\r\n return {\r\n customerCodeList: [],\r\n destination: {\r\n address: {\r\n city: \"\",\r\n stateProvinceCode: \"\",\r\n postalCode: \"\",\r\n countryCode: \"\",\r\n countyRegion: \"\"\r\n }\r\n },\r\n origin: {\r\n address: {\r\n city: \"\",\r\n stateProvinceCode: \"\",\r\n postalCode: \"\",\r\n countryCode: \"\",\r\n countyRegion: \"\"\r\n }\r\n },\r\n userName: \"\",\r\n pageSize: 10,\r\n page: 1,\r\n quoteId: null,\r\n quotedStartDate: moment().subtract(90, \"days\").startOf(\"day\"),\r\n quotedEndDate: \"\",\r\n quoteStatusList: [],\r\n shipStartDate: \"\",\r\n shipEndDate: \"\",\r\n sourceSystemList: [\r\n \"Online\",\r\n \"ExternalRating\"\r\n ]\r\n };\r\n }\r\n\r\n function getTotalWeight(items) {\r\n var total = 0;\r\n\r\n _.forEach(items, function(item) {\r\n total += item.weight;\r\n });\r\n\r\n return total;\r\n }\r\n\r\n function isTransactional(customerCode) {\r\n return QuoteService.getTransactionalPricingFlag({ customerCode: customerCode }).$promise.then(function(result) {\r\n return !result.isTransactional;\r\n });\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"QuoteHistoryService\", QuoteHistoryService);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n QuoteHistoryController.$inject = [\"$scope\", \"customers\", \"quoteHistory\", \"QuoteHistoryService\", \"QuoteService\", \"refDataDDLs\", \"user\", \"userPreferences\"];\r\n\r\n function QuoteHistoryController($scope, customers, quoteHistory, QuoteHistoryService, QuoteService, refDataDDLs, user, userPreferences) {\r\n $scope.customerDisplayLimit = 5;\r\n $scope.customers = customers;\r\n $scope.currentPage = 1;\r\n $scope.dateFilters = [\r\n {\r\n isVisible: true,\r\n name: \"TODAY\"\r\n }, {\r\n isVisible: true,\r\n name: \"NEXT_SEVEN_DAYS\"\r\n }, {\r\n isVisible: true,\r\n name: \"NEXT_THIRTY_DAYS\"\r\n }, {\r\n isVisible: true,\r\n name: \"CUSTOM_DATE_RANGE\"\r\n }\r\n ];\r\n $scope.isMetric = userPreferences.unitOfMeasure === 'metric';\r\n $scope.itemDdlRefData = refDataDDLs;\r\n $scope.pageLimit = 10;\r\n $scope.quoteHistory = quoteHistory.quoteHistorySummaryList;\r\n $scope.search = {\r\n quoteId: null,\r\n canViewAnyone: false\r\n };\r\n $scope.shouldHideSeeMore = false;\r\n $scope.statusFilters = [\r\n {\r\n code: 1,\r\n status: \"Active\",\r\n checked: false,\r\n isShippable: true,\r\n tagColor: \"tag-orange\"\r\n }, {\r\n code: 2,\r\n status: \"Expired\",\r\n checked: false,\r\n isShippable: false,\r\n tagColor: \"tag-blue\"\r\n }, {\r\n code: 3,\r\n status: \"Ordered\",\r\n checked: false,\r\n isShippable: false,\r\n tagColor: \"tag-grey\"\r\n }\r\n ];\r\n $scope.totalQuotes = quoteHistory.total;\r\n $scope.user = user;\r\n $scope.expandFilter = expandFilter;\r\n $scope.refreshResults = refreshResults;\r\n $scope.toggleCustomer = toggleCustomer;\r\n $scope.toggleStatusFilter = toggleStatusFilter;\r\n\r\n translateStatus($scope.quoteHistory);\r\n\r\n\r\n function expandFilter(filterType) {\r\n $scope[filterType + \"DisplayLimit\"] += 5;\r\n }\r\n\r\n function handleCustomer(request) {\r\n $scope.shouldHideSeeMore = false;\r\n\r\n _.forEach($scope.customers, function(customer) {\r\n if (customer.checked) {\r\n $scope.shouldHideSeeMore = true;\r\n request.customerCodeList.push(customer.partyCode);\r\n }\r\n });\r\n }\r\n\r\n function handleQuoteIdSearch(request) {\r\n if ($scope.search.quoteId) {\r\n request.quoteId = Number($scope.search.quoteId);\r\n }\r\n }\r\n\r\n function handleCanViewAnyone(request) {\r\n if (!$scope.search.canViewAnyone) {\r\n request.userName = $scope.user.name;\r\n }\r\n }\r\n\r\n function handlePagination(request) {\r\n request.page = $scope.currentPage;\r\n request.pageSize = $scope.pageLimit;\r\n }\r\n\r\n function handleStatuses(request) {\r\n _.forEach($scope.statusFilters, function(statusFilter) {\r\n if (statusFilter.checked) {\r\n request.quoteStatusList.push(statusFilter.status);\r\n }\r\n })\r\n }\r\n\r\n function refreshResults() {\r\n var request = QuoteHistoryService.constructQuoteHistoryRequest();\r\n\r\n handleCustomer(request);\r\n handleQuoteIdSearch(request);\r\n handlePagination(request);\r\n handleStatuses(request);\r\n handleCanViewAnyone(request);\r\n\r\n QuoteService.getQuoteHistory(request).$promise.then(function(data) {\r\n $scope.quoteHistory = data.quoteHistorySummaryList;\r\n translateStatus($scope.quoteHistory);\r\n $scope.totalQuotes = data.total;\r\n });\r\n }\r\n\r\n function toggleCustomer(cust) {\r\n cust.checked = !cust.checked;\r\n\r\n _.forEach($scope.customers, function(customer) {\r\n if (_.isEqual(customer, cust)) {\r\n customer.isVisible = true;\r\n } else {\r\n customer.isVisible = !cust.checked;\r\n }\r\n });\r\n\r\n refreshResults();\r\n }\r\n\r\n function toggleStatusFilter(filter) {\r\n filter.checked = !filter.checked;\r\n\r\n refreshResults();\r\n }\r\n\r\n function translateStatus(quotes) {\r\n _.forEach(quotes, function(quote) {\r\n _.forEach($scope.statusFilters, function(status) {\r\n if (quote.quoteStatus === status.code) {\r\n quote.quoteStatus = status;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").controller(\"QuoteHistoryController\", QuoteHistoryController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n drawItemService.$inject = ['DateTimeService'];\r\n function drawItemService(DateTimeService) {\r\n var order = {};\r\n var aggs = {};\r\n this.init = function() {\r\n order = {\r\n customer: undefined,\r\n createdViaPurchaseOrder: true,\r\n pickup: null,\r\n delivery: null,\r\n destination: null,\r\n serviceOffering: {\r\n description: \"LTL Transportation\",\r\n displayKey: \"LTL\",\r\n id: 1484,\r\n modeDescription: \"Truck\",\r\n modeId: 14,\r\n serviceTypeDescription: \"Dry\",\r\n serviceTypeId: 9\r\n },\r\n customerNumber: null,\r\n billToNumber: null,\r\n shipWithNumber: null,\r\n items: [],\r\n newRefNums: [],\r\n stepOneValid:false,\r\n stepTwoValid:false\r\n };\r\n aggs = {};\r\n };\r\n\r\n function calculateDates(){\r\n if (order.pickup) {\r\n var po = _.minBy(order.items, function (item) { return item.requestedPickupStartDate; });\r\n if (po && moment().isSameOrBefore(moment(po.requestedPickupStartDate), 'day')) {\r\n order.pickup.earliestDate = DateTimeService.getRawDateTime(po.requestedPickupStartDate);\r\n order.pickup.latestDate = DateTimeService.getRawDateTime(po.requestedPickupStartDate);\r\n }\r\n }\r\n\r\n if (order.delivery) {\r\n var po = _.maxBy(order.items, function (item) { return item.requestedDeliveryStartDate; });\r\n if (po && moment().isSameOrBefore(moment(po.requestedPickupStartDate), 'day')) {\r\n order.delivery.earliestDate = DateTimeService.getRawDateTime(po.requestedDeliveryStartDate);\r\n order.delivery.latestDate = DateTimeService.getRawDateTime(po.requestedDeliveryStartDate);\r\n }\r\n }\r\n }\r\n\r\n function calculateTotals() {\r\n aggs.quantity = _.sumBy(order.items, function (item) { return item.quantity; });\r\n aggs.weight = _.sumBy(order.items, function (item) { return item.weight; });\r\n aggs.itemCount = order.items.length;\r\n }\r\n this.add = function (item) {\r\n if (item.quantity > 0) {\r\n var itemUpdate = _.find(order.items, ['purchaseOrderItemId', item.purchaseOrderItemId]);\r\n if (itemUpdate) {\r\n itemUpdate.quantity = item.quantity;\r\n } else {\r\n order.items.push(item);\r\n }\r\n calculateTotals();\r\n calculateDates();\r\n }\r\n };\r\n this.remove = function (item) {\r\n _.remove(order.items, { purchaseOrderItemId: item.purchaseOrderItemId });\r\n calculateTotals();\r\n calculateDates();\r\n };\r\n this.getItems = function () {\r\n return order.items;\r\n };\r\n this.getOrder = function () {\r\n return order;\r\n };\r\n this.calculateTotals = calculateTotals;\r\n this.calculateDates = calculateDates;\r\n this.getTotals = function () {\r\n return aggs;\r\n };\r\n this.setCustomer = function (customer) {\r\n order.customer = customer;\r\n };\r\n this.clear = function () {\r\n aggs = null;\r\n order = null;\r\n };\r\n\r\n }\r\n angular.module('NavisphereOnline').service('DrawItemService', drawItemService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n drawSearchController.$inject = ['$scope', '$locale', '$filter', '$state', 'DateTimeService', '$uibModal', 'User', 'AddressService',\r\n 'CustomerService', 'DrawItemService', 'LocationService', 'PurchaseOrderService','RefDataMappingService', 'API_BASE_URL'];\r\n function drawSearchController($scope, $locale, $filter, $state, DateTimeService, $uibModal, User, AddressService,\r\n CustomerService, DrawItemService, LocationService, PurchaseOrderService,RefDataMappingService, API_BASE_URL) {\r\n var PICK = 'pick';\r\n var DELIVERY = 'delivery';\r\n $scope.dropDownCustomer = {};\r\n User.getPoDrawCustomers().$promise.then(function (result) {\r\n for (var i = 0; i < result.customers.length; i++) {\r\n var cust = result.customers[i];\r\n cust.addressLine1 = AddressService.GetAddressLine1(cust.address);\r\n cust.addressLine2 = AddressService.GetAddressLine2(cust.address);\r\n cust.addressLine3 = AddressService.GetAddressLine3(cust.address);\r\n cust.addressLine4 = AddressService.GetAddressLine4(cust.address);\r\n cust.displayName = CustomerService.GetDisplayName(cust);\r\n }\r\n $scope.poCustomers = result.customers;\r\n if($scope.poCustomers.length === 1){\r\n $scope.dropDownCustomer.selected = $scope.poCustomers[0];\r\n $scope.onSelectedDropDownCustomerChange($scope.poCustomers[0]);\r\n }\r\n });\r\n\r\n RefDataMappingService.getRefDataCategoryDDLs().then(function(result){\r\n $scope.refDataDDLs = result;\r\n });\r\n $scope.dateOptions ={\r\n showWeeks: false\r\n };\r\n var defCountry = { code: 'US', name: $filter('translate')('UNITED_STATES') };\r\n $scope.countries = [defCountry, { code: 'CA', name: $filter('translate')('CANADA')}, { code: 'MX', name: $filter('translate')('MEXICO')}];\r\n $scope.countryStates = {};\r\n for (var i = 0; i < $scope.countries.length; i++) {\r\n LocationService.getStates({\r\n countryCode: $scope.countries[i].code\r\n }).$promise.then(function (result) {\r\n $scope.countryStates[result[0].countryCode] = result;\r\n });\r\n }\r\n\r\n $scope.searchParams = { destinationCountry: defCountry.code, searchByDate: DELIVERY };\r\n $scope.currentParams = {};\r\n $scope.searchResults = [];\r\n $scope.pagingInfo = {\r\n limit: '50',\r\n page: 1,\r\n sortBy: '0',\r\n sortDescending: '0',\r\n totalItems: 0\r\n };\r\n $scope.sortSelect = \"0-0\";\r\n $scope.onSelectedDropDownCustomerChange = function(selected){\r\n $scope.searchResults = [];\r\n $scope.customer = selected;\r\n DrawItemService.init();\r\n DrawItemService.setCustomer(selected);\r\n $scope.itemCount = undefined;\r\n $scope.searchParams.customerCode = selected.partyCode;\r\n };\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.getDisplayDate = function(dateTime){\r\n return DateTimeService.getDisplayDateOrTime(dateTime, $scope.$parent.userPreference);\r\n };\r\n $scope.toggleSearchByDate = function(){\r\n if($scope.searchParams.searchByDate === PICK){\r\n $scope.searchParams.requestedDeliveryStartDate = undefined;\r\n $scope.searchParams.requestedDeliveryEndDate = undefined;\r\n $scope.searchParams.requestedPickupStartDate = $scope.startDateSelection;\r\n $scope.searchParams.requestedPickupEndDate = $scope.endDateSelection;\r\n } else if ($scope.searchParams.searchByDate === DELIVERY){\r\n $scope.searchParams.requestedDeliveryStartDate = $scope.startDateSelection;\r\n $scope.searchParams.requestedDeliveryEndDate = $scope.endDateSelection;\r\n $scope.searchParams.requestedPickupStartDate = undefined;\r\n $scope.searchParams.requestedPickupEndDate = undefined;\r\n }\r\n };\r\n $scope.clear = function(){\r\n if($scope.poCustomers.length > 1){\r\n $scope.customer = undefined;\r\n $scope.searchParams.customerCode = undefined;\r\n $scope.dropDownCustomer.selected = undefined;\r\n DrawItemService.setCustomer(undefined);\r\n }\r\n $scope.searchParams.requestedDeliveryStartDate = undefined;\r\n $scope.searchParams.requestedDeliveryEndDate = undefined;\r\n $scope.searchParams.requestedPickupStartDate = undefined;\r\n $scope.searchParams.requestedPickupEndDate = undefined;\r\n $scope.startDateSelection = undefined;\r\n $scope.endDateSelection = undefined;\r\n $scope.searchParams.purchaseOrderNumber = undefined;\r\n $scope.searchParams.destinationCountry = undefined;\r\n $scope.searchParams.customerItemId = undefined;\r\n $scope.searchParams.destinationCity = undefined;\r\n $scope.searchParams.destinationStateProvince = undefined;\r\n };\r\n $scope.$watch('startDateSelection', function(value){\r\n if($scope.searchParams.searchByDate === PICK){\r\n $scope.searchParams.requestedPickupStartDate = value;\r\n } else if ($scope.searchParams.searchByDate === DELIVERY){\r\n $scope.searchParams.requestedDeliveryStartDate = value;\r\n }\r\n });\r\n $scope.$watch('endDateSelection', function(value){\r\n if($scope.searchParams.searchByDate === PICK){\r\n $scope.searchParams.requestedPickupEndDate = value;\r\n } else if ($scope.searchParams.searchByDate === DELIVERY){\r\n $scope.searchParams.requestedDeliveryEndDate = value;\r\n }\r\n });\r\n $scope.startDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.startDateOpened = true;\r\n $scope.endDateOpened = false;\r\n };\r\n $scope.endDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.endDateOpened = true;\r\n $scope.startDateOpened = false;\r\n };\r\n $scope.countryDropChanged = function () {\r\n $scope.searchParams.destinationStateProvince = undefined;\r\n };\r\n $scope.search = function(searchParams, pagingInfo) {\r\n searchParams.page = pagingInfo.page;\r\n searchParams.limit = pagingInfo.limit;\r\n searchParams.orderBy = pagingInfo.sortBy;\r\n searchParams.orderByDirection = pagingInfo.sortDescending;\r\n setDateDefaults(searchParams);\r\n PurchaseOrderService.availableItems(searchParams).$promise.then(function(result){\r\n $scope.currentParams = searchParams;\r\n $scope.currentParams.isDefined = true;\r\n $scope.pagingInfo.totalItems = result.total;\r\n $scope.searchResults = result.purchaseOrderItems;\r\n $scope.hasNoResults = (result.purchaseOrderItems.length < 1);\r\n });\r\n };\r\n function setDateDefaults(searchParams){\r\n if($scope.searchParams.searchByDate === PICK){\r\n if(angular.isDefined(searchParams.requestedPickupStartDate) && !angular.isDefined(searchParams.requestedPickupEndDate)){\r\n //default requestedPickupEndDate to +90 days\r\n searchParams.requestedPickupEndDate = DateTimeService.getDateAddDays(90, searchParams.requestedPickupStartDate);\r\n $scope.endDateSelection = searchParams.requestedPickupEndDate;\r\n }\r\n if(angular.isDefined(searchParams.requestedPickupEndDate) && !angular.isDefined(searchParams.requestedPickupStartDate)){\r\n //default requestedPickupStartDate to -90 days\r\n searchParams.requestedPickupStartDate = DateTimeService.getDateAddDays(-90, searchParams.requestedPickupEndDate);\r\n $scope.startDateSelection = searchParams.requestedPickupStartDate;\r\n }\r\n } else if ($scope.searchParams.searchByDate === DELIVERY){\r\n if(angular.isDefined(searchParams.requestedDeliveryStartDate) && !angular.isDefined(searchParams.requestedDeliveryEndDate)){\r\n //default requestedDeliveryEndDate to +90 days\r\n searchParams.requestedDeliveryEndDate = DateTimeService.getDateAddDays(90, searchParams.requestedDeliveryStartDate);\r\n $scope.endDateSelection = searchParams.requestedDeliveryEndDate;\r\n }\r\n if(angular.isDefined(searchParams.requestedDeliveryEndDate) && !angular.isDefined(searchParams.requestedDeliveryStartDate)){\r\n //default requestedDeliveryStartDate to -90 days\r\n searchParams.requestedDeliveryStartDate = DateTimeService.getDateAddDays(-90, searchParams.requestedDeliveryEndDate);\r\n $scope.startDateSelection = searchParams.requestedDeliveryStartDate;\r\n }\r\n }\r\n }\r\n $scope.pageChanged = function(){\r\n if($scope.currentParams.isDefined) {\r\n $scope.search($scope.currentParams, $scope.pagingInfo);\r\n }\r\n };\r\n $scope.sortSelected = function(sortSelect){\r\n if(angular.isDefined(sortSelect)) {\r\n var sortPieces = sortSelect.split('-');\r\n $scope.pagingInfo.sortBy = sortPieces[0];\r\n $scope.pagingInfo.sortDescending = sortPieces[1];\r\n $scope.pageChanged();\r\n }\r\n };\r\n $scope.getCityStateProvince = function(destination){\r\n var cityState = '';\r\n if(angular.isDefined(destination) && angular.isDefined(destination.physicalAddress)){\r\n if(angular.isDefined(destination.physicalAddress.city)){\r\n cityState += destination.physicalAddress.city;\r\n }\r\n if(angular.isDefined(destination.physicalAddress.city) && angular.isDefined(destination.physicalAddress.stateProvince)){\r\n cityState += ', ';\r\n }\r\n if(angular.isDefined(destination.physicalAddress.stateProvince)){\r\n cityState += destination.physicalAddress.stateProvince;\r\n }\r\n }\r\n return cityState;\r\n };\r\n $scope.findRdnByValue = function(category, value){\r\n if(!angular.isDefined(category) || !angular.isDefined(value)){\r\n return;\r\n }\r\n return _.find($scope.refDataDDLs[category], function(x){\r\n if(!angular.isDefined(x.refDataCode)){\r\n return false;\r\n }\r\n return x.refDataCode.toUpperCase() === value.toUpperCase()\r\n });\r\n };\r\n $scope.addAll = function(){\r\n for(var i = 0; i < $scope.searchResults.length; i++){\r\n $scope.addItem($scope.searchResults[i]);\r\n }\r\n };\r\n $scope.addItem = function (item) {\r\n var packaging = $scope.findRdnByValue('Packaging', item.outerPackType);\r\n DrawItemService.add({\r\n purchaseOrderItemId: item.purchaseOrderItemId,\r\n commodity: {sku: item.sku, upc: item.upc, plu: item.plu },\r\n destination: item.destination,\r\n weight: item.outerPackWeight,\r\n weightUom: item.outerPackIsMetric ? RefDataMappingService.getItemId('KG_UOM') : RefDataMappingService.getItemId('LB_UOM'),\r\n quantity: item.availableQuantity,\r\n availableQuantity: item.availableQuantity,\r\n commodityName: item.productName,\r\n requestedDeliveryStartDate: item.requestedDeliveryStartDate,\r\n requestedPickupStartDate:item.requestedPickupStartDate,\r\n purchaseOrderNumber: item.purchaseOrderNumber,\r\n lineItemNumber: item.lineItemNumber,\r\n totalInsuranceValue: item.innerPackTotalValue,\r\n flatbed: {},\r\n packaging: packaging,\r\n hasDefaultPackaging: (packaging) ? true : false,\r\n freightClass: $scope.findRdnByValue('FreightClass', item.freightClass)\r\n });\r\n\r\n $scope.itemCount = DrawItemService.getTotals().itemCount;\r\n };\r\n\r\n $scope.createOrder = function () {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: '/app/purchaseOrder/views/drawModal.tpl.html',\r\n size: 'lg',\r\n controller: 'DrawModalController',\r\n backdrop: 'static',\r\n resolve: {\r\n refDataDDLs: $scope.refDataDDLs,\r\n preferences: ['authService', function (authService) {\r\n return authService.getPreferences();\r\n }]\r\n }\r\n });\r\n modalInstance.result.then(function () {\r\n $state.go($state.$current, null, { reload: true });\r\n }, function (itemCount) {\r\n $scope.itemCount = itemCount;\r\n });\r\n };\r\n $scope.$on('$destroy', function () {\r\n DrawItemService.clear();\r\n });\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('DrawSearchController', drawSearchController);\r\n} ());\r\n\n(function () {\r\n 'use strict';\r\n drawModalController.$inject = ['$locale', '$scope', 'DateTimeService', '$state', '$uibModalInstance', '$uibModal', '$filter', 'DrawItemService', 'OrderConfirmationService', 'LocationService', 'AddressService', 'OrderService', 'OrderTransformService', 'refDataDDLs', 'preferences'];\r\n function drawModalController($locale, $scope, DateTimeService, $state, $uibModalInstance, $uibModal, $filter, DrawItemService, OrderConfirmationService, LocationService, AddressService, OrderService, OrderTransformService, refDataDDLs, preferences) {\r\n $scope.refData = refDataDDLs;\r\n $scope.getAddressLine1 = AddressService.GetAddressLine1;\r\n $scope.getAddressLine2 = AddressService.GetAddressLine2;\r\n $scope.getAddressLine3 = AddressService.GetAddressLine3;\r\n $scope.getAddressLine4 = AddressService.GetAddressLine4;\r\n $scope.displayDate = DateTimeService.getRawDateTime;\r\n $scope.confirmation = OrderConfirmationService.getConfirmation;\r\n $scope.order = DrawItemService.getOrder();\r\n $scope.step = 1;\r\n $scope.isMetric = preferences.unitOfMeasure === \"metric\";\r\n $scope.items = DrawItemService.getItems();\r\n $scope.remove = DrawItemService.remove;\r\n $scope.setStep = function (step) {\r\n $scope.step = step;\r\n };\r\n\r\n $scope.order.totalWeight = null;\r\n $scope.order.totalPallets = null;\r\n $scope.order.totalPalletSpaces = null;\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.ismeridian = preferences.timeFormat === '12';\r\n $scope.hourStep = 1;\r\n $scope.minuteStep = 15;\r\n\r\n autoFillLocation();\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss($scope.order.items.length);\r\n };\r\n $scope.refreshLocations = function (searchText, type) {\r\n if (searchText.length < 2) {\r\n $scope[type+'HasNoResults'] = false;\r\n return [];\r\n }\r\n $scope[type+'LocationResults'] = [];\r\n return LocationService.searchPartyLocation({\r\n partyNumberOrCode: $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, ''),\r\n term: searchText,\r\n limit: 20,\r\n locationSearchType: 2,\r\n useSupplierLocation: $scope.order.customer.useSupplierLocation\r\n }, function (data) {\r\n $scope[type+'LocationResults'] = data.items;\r\n $scope[type+'HasNoResults'] = data.items.length === 0;\r\n });\r\n };\r\n\r\n $scope.getWeightMeasurement = function() {\r\n return $scope.isMetric ? \"KGS\" : \"LBS\";\r\n };\r\n\r\n $scope.onPickupSelected = function (item) {\r\n $scope.order.pickup = item;\r\n $scope.order.pickupHasNoResults = false;\r\n LocationService.getLocation({\r\n locationPartyNumberOrCode: item.locationPartyCode,\r\n relatedLocationId: item.relatedLocationId,\r\n useSupplierLocation: $scope.order.customer.useSupplierLocation\r\n }, function (data) {\r\n if (data) {\r\n $scope.order.pickup.dryShippingHours = data.dryShippingHours;\r\n if (data.notes) {\r\n $scope.order.pickup.notes = data.notes.substring(0, 255);\r\n }\r\n $scope.order.pickup.address = data.physicalAddress;\r\n $scope.order.pickup.partyCode = data.partyCode;\r\n $scope.order.pickup.partyNumber = data.partyNumber;\r\n $scope.order.pickup.physicalAddress = data.physicalAddress;\r\n $scope.order.pickup.generalAddress = data.generalAddress;\r\n $scope.order.pickup.relatedLocationId = data.relatedLocationId;\r\n $scope.order.pickup.earliestTime = DateTimeService.getBeginningOfDay();\r\n }\r\n $scope.order.pickup.name = $scope.order.pickup.addressName;\r\n DrawItemService.calculateTotals();\r\n DrawItemService.calculateDates();\r\n });\r\n };\r\n\r\n $scope.onDeliverySelected = function (item) {\r\n $scope.order.delivery = item;\r\n LocationService.getLocation({\r\n locationPartyNumberOrCode: item.locationPartyCode,\r\n relatedLocationId: item.relatedLocationId,\r\n useSupplierLocation: $scope.order.customer.useSupplierLocation\r\n }, function (data) {\r\n if (data) {\r\n $scope.order.delivery.dryReceivingHours = data.dryReceivingHours;\r\n if (data.notes) {\r\n $scope.order.delivery.notes = data.notes.substring(0, 255);\r\n }\r\n $scope.order.delivery.address = data.physicalAddress;\r\n $scope.order.delivery.partyCode = data.partyCode;\r\n $scope.order.delivery.partyNumber = data.partyNumber;\r\n $scope.order.delivery.physicalAddress = data.physicalAddress;\r\n $scope.order.delivery.generalAddress = data.generalAddress;\r\n $scope.order.delivery.relatedLocationId = data.relatedLocationId;\r\n $scope.order.delivery.latestTime = DateTimeService.getBeginningOfDay();\r\n }\r\n $scope.order.delivery.name = $scope.order.delivery.addressName;\r\n DrawItemService.calculateTotals();\r\n DrawItemService.calculateDates();\r\n });\r\n };\r\n\r\n $scope.$watch('order.pickup.earliestDate', function (newValue) {\r\n if ($scope.order.pickup && newValue && $scope.order.pickup.dryShippingHours) {\r\n var shippingHours = $scope.order.pickup.dryShippingHours;\r\n var day = newValue.getDay();\r\n var dayName = DateTimeService.getWeekDayName(day);\r\n var dayClosedKey = dayName + 'Closed';\r\n var dayOpenTimeKey = dayName + 'OpenTime';\r\n if (shippingHours[dayClosedKey]) {\r\n return;\r\n }\r\n if (shippingHours[dayOpenTimeKey]) {\r\n var openTime = new Date(shippingHours[dayOpenTimeKey]);\r\n $scope.order.pickup.earliestTime = openTime;\r\n }\r\n }\r\n\r\n $scope.latestDateOptions.minDate = DateTimeService.getLatestDateMinDate(newValue);\r\n });\r\n\r\n $scope.updateTotal = function(propertyType) {\r\n var total = 0;\r\n var camelCasedPropertyType = propertyType[0].toUpperCase() + propertyType.slice(1);\r\n\r\n _.forEach($scope.order.items, function(item) {\r\n if (item[propertyType]) {\r\n total += Number(item[propertyType]);\r\n }\r\n });\r\n\r\n $scope.order[\"total\" + camelCasedPropertyType] = total;\r\n };\r\n\r\n $scope.calculateTotals = function() {\r\n distributeTotal('weight');\r\n distributeTotal('pallets');\r\n distributeTotal('palletSpaces');\r\n };\r\n\r\n function distributeTotal(propertyType) {\r\n var camelCased = propertyType[0].toUpperCase() + propertyType.slice(1);\r\n\r\n if ($scope.order[\"total\" + camelCased]) {\r\n var distributed = $scope.order[\"total\" + camelCased] / $scope.order.items.length;\r\n\r\n _.forEach($scope.order.items, function(item) {\r\n item[propertyType] = distributed;\r\n })\r\n }\r\n }\r\n\r\n function autoFillLocation() {\r\n $scope.order.delivery = {};\r\n\r\n if (isLocationHomogenous()) {\r\n var location = $scope.order.items[0].destination;\r\n\r\n LocationService.getLocation({\r\n locationPartyNumberOrCode: location.partyCode,\r\n relatedLocationId: location.relatedLocationId,\r\n useSupplierLocation: $scope.order.customer.useSupplierLocation\r\n }, function (data) {\r\n if (data) {\r\n if (data.notes) {\r\n $scope.order.delivery.notes = data.notes.substring(0, 255);\r\n }\r\n\r\n $scope.order.delivery.addressName = data.name;\r\n $scope.order.delivery.dryReceivingHours = data.dryReceivingHours;\r\n $scope.order.delivery.address = data.physicalAddress;\r\n $scope.order.delivery.partyCode = data.partyCode;\r\n $scope.order.delivery.partyNumber = data.partyNumber;\r\n $scope.order.delivery.physicalAddress = data.physicalAddress;\r\n $scope.order.delivery.generalAddress = data.generalAddress;\r\n $scope.order.delivery.relatedLocationId = data.relatedLocationId;\r\n }\r\n\r\n $scope.order.delivery.latestTime = DateTimeService.getBeginningOfDay();\r\n });\r\n\r\n DrawItemService.calculateTotals();\r\n }\r\n }\r\n\r\n function isLocationHomogenous() {\r\n var result = true;\r\n\r\n if ($scope.order.items) {\r\n _.forEach($scope.order.items, function(item) {\r\n if ($scope.order.items[0].destination.partyCode !== item.destination.partyCode) {\r\n result = false;\r\n }\r\n });\r\n } else {\r\n result = false;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n $scope.earliestDateOptions ={\r\n showWeeks: false,\r\n minDate: DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n\r\n $scope.latestDateOptions ={\r\n showWeeks: false,\r\n minDate: DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n\r\n $scope.earliestTimeChanged = function(value) {\r\n if (value === null) {\r\n $scope.order.pickup.earliestTime = DateTimeService.getBeginningOfDay();\r\n }\r\n };\r\n $scope.latestTimeChanged = function (value) {\r\n if (value === null) {\r\n $scope.order.pickup.latestTime = DateTimeService.getBeginningOfDay();\r\n }\r\n };\r\n\r\n $scope.$watch('drawForm.itemsForm.$valid', function (value) {\r\n $scope.order.stepOneValid = value;\r\n });\r\n $scope.$watch('drawForm.locationsForm.$valid', function (value) {\r\n if (angular.isDefined(value)) {\r\n $scope.order.stepTwoValid = value;\r\n }\r\n });\r\n $scope.close = function () {\r\n $uibModalInstance.close(true);\r\n };\r\n $scope.showValidationError = function() {\r\n $uibModal.open({\r\n templateUrl: 'app/validationModal/validationModal.tpl.html',\r\n size: 'lg',\r\n controller: 'validationModalController',\r\n resolve: {\r\n validations: function () { return $scope.validationMessages; },\r\n title: function () { return $filter('translate')('WE_WERE_NOT_ABLE_TO_PROCESS_YOUR_ORDER_PLEASE_RESO'); }\r\n }\r\n }).result.then(function () {\r\n $scope.validationMessages = [];\r\n }, function () {\r\n $scope.validationMessages = [];\r\n });\r\n };\r\n $scope.pickDeliverSequenceValid = function() {\r\n var latestPickupDate = moment($scope.order.pickup.earliestDate);\r\n var earliestDeliveryDate = moment($scope.order.delivery.latestDate);\r\n var latestPickLessThanEarliestDelivery;\r\n if (latestPickupDate < earliestDeliveryDate) {\r\n latestPickLessThanEarliestDelivery = true;\r\n } else if (latestPickupDate.diff(earliestDeliveryDate) === 0) {\r\n var latestPickupTime = moment($scope.order.pickup.earliestTime);\r\n var earliestDeliveryTime = moment($scope.order.delivery.latestTime);\r\n if (latestPickupTime < earliestDeliveryTime) {\r\n latestPickLessThanEarliestDelivery = true;\r\n } else {\r\n latestPickLessThanEarliestDelivery = false;\r\n }\r\n } else {\r\n latestPickLessThanEarliestDelivery = false;\r\n }\r\n if (!latestPickLessThanEarliestDelivery) {\r\n $scope.validationMessages.push($filter('translate')('PICKUP_EARLIEST_DATE_TIME_MUST_BE_BEFORE_DELIVERY_'));\r\n }\r\n return latestPickLessThanEarliestDelivery;\r\n };\r\n\r\n $scope.validationMessages = [];\r\n $scope.submitOrder = function () {\r\n $scope.validationMessages = [];\r\n if ($scope.drawForm.$valid && $scope.pickDeliverSequenceValid()) {\r\n $scope.loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () { return $filter('translate')('PLACING_ORDER'); }\r\n }\r\n });\r\n $scope.order.pickup.latestDate = $scope.order.pickup.earliestDate;\r\n $scope.order.pickup.latestTime = $scope.order.pickup.earliestTime;\r\n $scope.order.delivery.earliestDate = $scope.order.delivery.latestDate;\r\n $scope.order.delivery.earliestTime = $scope.order.delivery.latestTime;\r\n var customerOrderRequest = OrderTransformService.getCustomerOrderSaveRequest($scope.order);\r\n var orderService = new OrderService(customerOrderRequest);\r\n orderService.$save().then(function (result) {\r\n $scope.loadingModal.close(result);\r\n $scope.validationMessages = [];\r\n if (result.success) {\r\n $scope.hasError = false;\r\n OrderConfirmationService.setOrderConfirmation($scope.order, result, null, null);\r\n } else {\r\n angular.forEach(result.errors, function (error) {\r\n $scope.validationMessages.push($filter('translate')(error.errorMessage));\r\n });\r\n $scope.hasError = true;\r\n $scope.showValidationError();\r\n }\r\n $scope.setStep(3);\r\n }, function (result) {\r\n $scope.validationMessages.push($filter('translate')('WE_ARE_UNABLE_TO_PROCESS_YOUR_ORDER_AT_THIS_TIME_P'));\r\n $scope.showValidationError();\r\n $scope.hasError = true;\r\n $scope.setStep(3);\r\n });\r\n\r\n }else{\r\n $scope.showValidationError();\r\n $scope.setStep(2);\r\n }\r\n };\r\n\r\n $scope.setPackagingTypeAllItems = function(packagingType) {\r\n _.forEach($scope.order.items, function(item) {\r\n if(!item.hasDefaultPackaging) {\r\n item.packaging = packagingType;\r\n }\r\n });\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('DrawModalController', drawModalController);\r\n} ());\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n app.directive('viewBolLink', ['bolContext', function (bolContext) {\r\n return {\r\n templateUrl: 'app/orderDetails/directives/viewBolLink.tpl.html',\r\n restrict: 'E',\r\n bindToController: {\r\n order: \"=\"\r\n },\r\n controllerAs: 'ctrl',\r\n controller: ['$scope', 'StatusMappingService', 'UserPermissionService', 'DocumentHelper', '$timeout', 'API_BASE_URL',\r\n function ($scope, StatusMappingService, UserPermissionService, DocumentHelper, $timeout, API_BASE_URL) {\r\n var customer = $scope.order.customerInfo.customer;\r\n this.canViewBOL = (\r\n customer.bolContext === bolContext.Order &&\r\n UserPermissionService.hasCustomerRole(customer.partyCode, \"View BOL\") &&\r\n $scope.order.service.statusRDN > StatusMappingService.serviceStatus.incomplete\r\n );\r\n\r\n this.viewBOL = function () {\r\n $timeout(function () {\r\n DocumentHelper.showDocument(API_BASE_URL + 'api/documents/bol' + '?orderNumber=' + encodeURIComponent($scope.order.customerOrderNumber));\r\n });\r\n };\r\n }]\r\n };\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('ballProgressBar', [function () {\r\n return {\r\n templateUrl: 'app/orderDetails/directives/ballProgressBar.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n order: \"=\"\r\n },\r\n controller: ['$scope', '$filter', 'RefDataMappingService', 'CarrierLogService', 'StatusMappingService', 'DateTimeService',\r\n 'CarrierRuleService', 'UserPermissionService', 'InteropService', '$state', '$window',\r\n function ($scope, $filter, RefDataMappingService, CarrierLogService, StatusMappingService, DateTimeService,\r\n CarrierRuleService, UserPermissionService, InteropService, $state, $window) {\r\n\r\n $scope.loadNumber = getLoadNumber();\r\n $scope.carrier = getCarrier();\r\n $scope.carrierProNumber = getCarrierProNumber($scope.order);\r\n $scope.orderedDateLabel = getOrderedDateLabel();\r\n $scope.orderedDate = getOrderedDate();\r\n $scope.deliveredDateLabel = getDeliveredDateLabel();\r\n $scope.deliveredDate = getDeliveredDate();\r\n $scope.redirectToOnlineOne = redirectToOnlineOne;\r\n getProgressBarCarrierLogInformation();\r\n setLoadViewPermission();\r\n\r\n $scope.StatusMappingService = StatusMappingService;\r\n $scope.getDisplayDate = DateTimeService.getDisplayDate;\r\n $scope.getDisplayTime = DateTimeService.getDisplayTime;\r\n\r\n $scope.rerun = function () {\r\n $scope.loadNumber = getLoadNumber();\r\n $scope.carrier = getCarrier();\r\n $scope.carrierProNumber = getCarrierProNumber($scope.order);\r\n $scope.orderedDateLabel = getOrderedDateLabel();\r\n $scope.orderedDate = getOrderedDate();\r\n $scope.deliveredDateLabel = getDeliveredDateLabel();\r\n $scope.deliveredDate = getDeliveredDate();\r\n getProgressBarCarrierLogInformation();\r\n };\r\n\r\n function getLoadNumber() {\r\n if (!$scope.order || !$scope.order.service || !$scope.order.service.loads || $scope.order.isMultiLeg) {\r\n return null;\r\n }\r\n\r\n if (!$scope.order.service.loads[0]) {\r\n return null;\r\n }\r\n\r\n return $scope.order.service.loads[0].loadNumber;\r\n }\r\n\r\n function getCarrier() {\r\n if (!$scope.order || !$scope.order.service || !$scope.order.service.loads) {\r\n return null;\r\n }\r\n\r\n if (!CarrierRuleService.showCarrier($scope.order.service.serviceOffering.id,$scope.order.isMultiLeg) || !$scope.order.service.loads[0] || !$scope.order.service.loads[0].carriers || !$scope.order.service.loads[0].carriers[0]) {\r\n return null;\r\n }\r\n\r\n return $scope.order.service.loads[0].carriers[0].name;\r\n }\r\n\r\n function orderHasNoService(order) {\r\n return !order || !order.service;\r\n }\r\n\r\n function serviceHasNoLoad(order){\r\n if(orderHasNoService(order)){\r\n return true;\r\n }\r\n\r\n return !order.service.loads || !order.service.loads[0];\r\n }\r\n\r\n function loadHasNoCarriers(order){\r\n if(serviceHasNoLoad(order)){\r\n return true;\r\n }\r\n\r\n return !order.service.loads[0].carriers || !order.service.loads[0].carriers[0];\r\n }\r\n\r\n function carrierHasNoReferenceNumbers(order) {\r\n\r\n if(loadHasNoCarriers(order)){\r\n return true;\r\n }\r\n\r\n return !order.service.loads[0].carriers[0].referenceNumbers;\r\n }\r\n\r\n function getCarrierProNumber(order) {\r\n if(!order){\r\n return null;\r\n }\r\n if ( order.isMultiLeg || carrierHasNoReferenceNumbers(order)) {\r\n return null;\r\n }\r\n\r\n return getReferenceNumber($scope.order.service.loads[0].carriers[0].referenceNumbers, 'CARRIER_PRO_NUMBER');\r\n }\r\n\r\n function getReferenceNumber(referenceNumbers, refNumberType) {\r\n for (var i = 0; i < referenceNumbers.length; i++) {\r\n if (referenceNumbers[i].referenceNumberType.refDataNumber ===\r\n RefDataMappingService.getCategoryId(refNumberType)) {\r\n return $scope.order.service.loads[0].carriers[0].referenceNumbers[i].value;\r\n }\r\n }\r\n }\r\n\r\n function getOrderedDateLabel() {\r\n\r\n var orderedDateLabel = null;\r\n\r\n if (!$scope.order || !$scope.order.service || !$scope.order.service.pickupFrom) {\r\n return orderedDateLabel;\r\n }\r\n\r\n if ($scope.order.service.pickupFrom.actualArrivalDateTime) {\r\n orderedDateLabel = $filter('translate')('ACTUAL_PICK_UP');\r\n } else if ($scope.order.service.pickupFrom.scheduledOpenDateTime) {\r\n orderedDateLabel = $filter('translate')('SCHEDULED_PICKUP');\r\n } else if ($scope.order.service.pickupFrom.earliestDate) {\r\n orderedDateLabel = $filter('translate')('REQUESTED_PICK_UP');\r\n }\r\n\r\n return orderedDateLabel;\r\n }\r\n\r\n function getOrderedDate() {\r\n\r\n var returnString = null;\r\n\r\n if (!$scope.order || !$scope.order.service || !$scope.order.service.pickupFrom) {\r\n return returnString;\r\n }\r\n\r\n if ($scope.order.service.pickupFrom.actualArrivalDateTime) {\r\n returnString = DateTimeService.getDisplayDateOrTime($scope.order.service.pickupFrom.actualArrivalDateTime, $scope.$parent.userPreferences);\r\n } else if ($scope.order.service.pickupFrom.scheduledOpenDateTime) {\r\n returnString = DateTimeService.getDisplayDateOrTime($scope.order.service.pickupFrom.scheduledOpenDateTime, $scope.$parent.userPreferences);\r\n } else if ($scope.order.service.pickupFrom.earliestDate) {\r\n returnString = DateTimeService.getDisplayDateOrTime($scope.order.service.pickupFrom.earliestDate.utcDateTime, $scope.$parent.userPreferences, false);\r\n }\r\n\r\n return returnString;\r\n }\r\n\r\n function getDeliveredDateLabel() {\r\n\r\n var deliveredDateLabel = null;\r\n\r\n if (!$scope.order || !$scope.order.service || !$scope.order.service.deliverTo) {\r\n return deliveredDateLabel;\r\n }\r\n if ($scope.order.service.deliverTo.actualArrivalDateTime) {\r\n deliveredDateLabel = $filter('translate')('ACTUAL_DELIVERY');\r\n } else if ($scope.order.service.deliverTo.scheduledOpenDateTime) {\r\n deliveredDateLabel = $filter('translate')('SCHEDULED_DELIVERY');\r\n } else if ($scope.order.service.deliverTo.earliestDate) {\r\n deliveredDateLabel = $filter('translate')('REQUESTED_DELIVERY');\r\n }\r\n\r\n return deliveredDateLabel;\r\n }\r\n\r\n function getDeliveredDate() {\r\n\r\n var deliveredDate = null;\r\n\r\n if (!$scope.order || !$scope.order.service || !$scope.order.service.deliverTo) {\r\n return deliveredDate;\r\n }\r\n if ($scope.order.service.deliverTo.actualArrivalDateTime) {\r\n deliveredDate = DateTimeService.getDisplayDateOrTime($scope.order.service.deliverTo.actualArrivalDateTime, $scope.$parent.userPreferences);\r\n } else if ($scope.order.service.deliverTo.scheduledOpenDateTime) {\r\n deliveredDate = DateTimeService.getDisplayDateOrTime($scope.order.service.deliverTo.scheduledOpenDateTime, $scope.$parent.userPreferences);\r\n } else if ($scope.order.service.deliverTo.earliestDate) {\r\n deliveredDate = DateTimeService.getDisplayDateOrTime($scope.order.service.deliverTo.earliestDate.utcDateTime, $scope.$parent.userPreferences, false);\r\n }\r\n return deliveredDate;\r\n }\r\n\r\n function getProgressBarCarrierLogInformation() {\r\n if (!$scope.carrierLogs) {\r\n\r\n if (!$scope.order) {\r\n return;\r\n }\r\n\r\n CarrierLogService.get({\r\n orderNumber: $scope.order.customerOrderNumber\r\n }, function (carrierLogs) {\r\n\r\n if (!carrierLogs || !carrierLogs[0]) {\r\n return;\r\n }\r\n\r\n $scope.carrierLogs = $filter('orderBy')(carrierLogs, '-eventDateTime', false);\r\n\r\n $scope.mostRecentCarrierLogEvent = _.find($scope.carrierLogs, function(log) {\r\n return log.notes;\r\n });\r\n getCarrierLogLastLocation();\r\n getHasDLTrackingReasonCode(carrierLogs);\r\n\r\n }, function () {\r\n });\r\n\r\n return;\r\n }\r\n if (!$scope.carrierLogs || !$scope.carrierLogs[0]) {\r\n return;\r\n }\r\n\r\n $scope.mostRecentCarrierLogEvent = $scope.carrierLogs[0];\r\n getCarrierLogLastLocation();\r\n getHasDLTrackingReasonCode($scope.carrierLogs);\r\n }\r\n\r\n function getCarrierLogLastLocation() {\r\n if ($scope.mostRecentCarrierLogEvent.driverLocation.city && !$scope.mostRecentCarrierLogEvent.driverLocation.state) {\r\n $scope.carrierLogLastLocation = $scope.mostRecentCarrierLogEvent.driverLocation.city;\r\n } else if ($scope.mostRecentCarrierLogEvent.driverLocation.city && $scope.mostRecentCarrierLogEvent.driverLocation.state) {\r\n $scope.carrierLogLastLocation = $scope.mostRecentCarrierLogEvent.driverLocation.city + ', ' +\r\n $scope.mostRecentCarrierLogEvent.driverLocation.state;\r\n } else if (!$scope.mostRecentCarrierLogEvent.driverLocation.city && $scope.mostRecentCarrierLogEvent.driverLocation.state) {\r\n $scope.carrierLogLastLocation = $scope.mostRecentCarrierLogEvent.driverLocation.state;\r\n }\r\n }\r\n\r\n function getHasDLTrackingReasonCode(carrierLogs) {\r\n\r\n for (var i = 0; i < carrierLogs.length; i++) {\r\n if (carrierLogs[i].trackingReasonCode === 'DL') {\r\n $scope.hasDLTrackingReasonCode = true;\r\n i = carrierLogs.length;\r\n }\r\n }\r\n }\r\n\r\n function setLoadViewPermission() {\r\n $scope.hasLoadViewPermission = UserPermissionService.hasPermission('Load View Detail (Interop)');\r\n }\r\n\r\n function redirectToOnlineOne(loadNumber) {\r\n var baseUrl = appConfig.legacyOnlineBaseUrl;\r\n var redirectUrl = baseUrl + '/shipmentdetail/Shipmentdetail.aspx?val=' + loadNumber + '&type=1&mode=5&WCF=32';\r\n var currentUrl = $window.location.href;\r\n\r\n $state.go('outgoingBridge', {redirectUrl: redirectUrl, currentUrl: currentUrl})\r\n }\r\n }]\r\n };\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n warehouseDetailsController.$inject = ['$scope', '$filter','$uibModalInstance', 'warehouseDetails'];\r\n\r\n function warehouseDetailsController($scope, $filter, $uibModalInstance, locationInfo) {\r\n\r\n $scope.locationInfo = locationInfo;\r\n $scope.operationHours = [];\r\n $scope.ok = function () {\r\n $uibModalInstance.close();\r\n };\r\n $scope.formatPhoneNumber = function(phoneNumber) {\r\n return (phoneNumber) ? phoneNumber.replace(/(\\d{3})(\\d{3})(\\d{4})/, \"$1-$2-$3\") : null;\r\n };\r\n\r\n var locationToUse;\r\n if (locationInfo.useReceivingHours) {\r\n locationToUse = (locationInfo.displayDryHours) ? locationInfo.location.dryReceivingHours : locationInfo.location.tempControlledReceivingHours;\r\n } else {\r\n locationToUse = (locationInfo.displayDryHours) ? locationInfo.location.dryShippingHours : locationInfo.location.tempControlledShippingHours;\r\n }\r\n if (locationToUse) {\r\n\r\n var weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\r\n\r\n angular.forEach(weekDays, function(dayName) {\r\n\r\n var dayClosedKey = dayName + 'CloseTime';\r\n var dayOpenTimeKey = dayName + 'OpenTime';\r\n var dayOperationHour = { day: dayName };\r\n var dayClosed = locationToUse[dayName + 'Closed'];\r\n\r\n if (dayClosed !== true) {\r\n if (locationToUse[dayOpenTimeKey]) {\r\n dayOperationHour.openTime = $filter('time')(new Date(locationToUse[dayOpenTimeKey]));\r\n }\r\n if (locationToUse[dayClosedKey]) {\r\n dayOperationHour.closeTime = $filter('time')(new Date(locationToUse[dayClosedKey]));\r\n }\r\n\r\n if (locationToUse[dayClosedKey] || locationToUse[dayOpenTimeKey]) {\r\n $scope.operationHours.push(dayOperationHour);\r\n }\r\n }\r\n\r\n });\r\n }\r\n }\r\n angular.module('NavisphereOnline').controller('warehouseDetailsController', warehouseDetailsController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n tryToGetLockAgainModalController.$inject = ['$scope', '$interval', '$uibModalInstance', 'LockService', 'orderNumber'];\r\n\r\n function tryToGetLockAgainModalController($scope, $interval, $uibModalInstance, LockService, orderNumber) {\r\n\r\n $scope.isTryAgainButtonDisabled = false;\r\n\r\n $scope.lockOrder = function () {\r\n\r\n LockService.lockOrder(orderNumber.toString(), function (result) {\r\n\r\n if (!result.user) {\r\n $scope.isTryAgainButtonDisabled = true;\r\n $interval(enableButton, 1000, 1);\r\n return;\r\n }\r\n\r\n $uibModalInstance.close(result);\r\n });\r\n };\r\n\r\n $scope.ok = function () {\r\n $uibModalInstance.close(null);\r\n };\r\n\r\n function enableButton() {\r\n\r\n $scope.isTryAgainButtonDisabled = false;\r\n }\r\n }\r\n angular.module('NavisphereOnline').controller('tryToGetLockAgainModalController', tryToGetLockAgainModalController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n referenceNumberEditController.$inject = ['$scope', 'RefDataMappingService', '$filter'];\r\n function referenceNumberEditController($scope, RefDataMappingService, $filter) {\r\n $scope.RefDataMappingService = RefDataMappingService;\r\n\r\n $scope.primaryRefNumber = getPrimaryRefNumber($scope.$parent.order);\r\n $scope.secondaryRefNumber = getSecondaryRefNumber($scope.$parent.order);\r\n $scope.shipWithRefNumber = getShipWithRefNumber($scope.$parent.order);\r\n\r\n $scope.isConfNum = function (refNum) {\r\n return refNum.referenceNumberType.refDataNumber === RefDataMappingService.getItemId('CONFIRMATION_NUMBER');\r\n };\r\n\r\n $scope.isTrackingNumber = function (refNum) {\r\n return refNum.referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('TRACKING_NUMBER');\r\n };\r\n\r\n function getPrimaryRefNumber(order){\r\n\r\n if(isOrderBad(order)){\r\n return;\r\n }\r\n\r\n var billTo = order.billTos[0];\r\n for(var i = 0; i < billTo.referenceNumbers.length; i++){\r\n if(billTo.referenceNumbers[i].isPrimary){\r\n return billTo.referenceNumbers[i];\r\n }\r\n }\r\n\r\n return addPrimaryRefNumberToBillTo(billTo);\r\n }\r\n\r\n function addPrimaryRefNumberToBillTo(billTo){\r\n\r\n var primaryRefNum =\r\n {\r\n isPrimary:true,\r\n referenceNumberType: {\r\n refDataNumber: $scope.order.customerInfo.customer.primaryBillToReferenceNumTypeRDN,\r\n description: $filter('translate')('PRIMARY')\r\n },\r\n value:\"\"\r\n };\r\n\r\n billTo.referenceNumbers.push(primaryRefNum);\r\n\r\n return primaryRefNum;\r\n }\r\n\r\n function getSecondaryRefNumber(order){\r\n\r\n if(isOrderBad(order)){\r\n return;\r\n }\r\n\r\n var customer = order.customerInfo;\r\n for(var i = 0; i < customer.referenceNumbers.length; i++){\r\n if(customer.referenceNumbers[i].isPrimary){\r\n return customer.referenceNumbers[i];\r\n }\r\n }\r\n\r\n return addSecondaryRefNumberToCustomer(order.customerInfo);\r\n }\r\n\r\n function addSecondaryRefNumberToCustomer(customer){\r\n\r\n var secondaryRefNum =\r\n {\r\n isPrimary:true,\r\n referenceNumberType: {\r\n refDataNumber: customer.customer.primaryCustomerReferenceNumTypeRDN,\r\n description: $filter('translate')('SECONDARY')\r\n },\r\n value:\"\"\r\n };\r\n\r\n customer.referenceNumbers.push(secondaryRefNum);\r\n\r\n return secondaryRefNum;\r\n }\r\n\r\n function getShipWithRefNumber(order){\r\n\r\n if(isOrderBad(order)){\r\n return;\r\n }\r\n\r\n for(var i = 0; i < order.referenceNumbers.length; i++){\r\n if(!order.referenceNumbers[i].isPrimary &&\r\n order.referenceNumbers[i].referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('SHIPWITH_NUMBER')){\r\n return order.referenceNumbers[i];\r\n }\r\n }\r\n\r\n return addShipWithRefNumberToCustomer(order);\r\n }\r\n\r\n function addShipWithRefNumberToCustomer(order){\r\n\r\n var shipWithRefNum =\r\n {\r\n isPrimary:false,\r\n referenceNumberType: {\r\n refDataNumber: RefDataMappingService.getCategoryId('SHIPWITH_NUMBER'),\r\n description: $filter('translate')('SHIP_WITH_NUMBER')\r\n },\r\n value:\"\"\r\n };\r\n\r\n order.referenceNumbers.push(shipWithRefNum);\r\n\r\n return shipWithRefNum;\r\n }\r\n\r\n function isOrderBad(order){\r\n return angular.isUndefined(order) || angular.isUndefined(order.billTos) || order.billTos.length < 1;\r\n }\r\n\r\n $scope.orderRefNumsFilter = function(element){\r\n\r\n if(!element.isPrimary &&\r\n element.referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('SHIPWITH_NUMBER')){\r\n element.referenceNumberType.description = $filter('translate')('SHIP_WITH_NUMBER')\r\n }\r\n\r\n return element.referenceNumberType.refDataNumber !== RefDataMappingService.getCategoryId('SHIPWITH_NUMBER');\r\n };\r\n\r\n $scope.filterBillToRefNums = function (element) {\r\n return !element.isPrimary;\r\n };\r\n\r\n $scope.filterCustomerRefNums = function (element) {\r\n return !element.isPrimary;\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('referenceNumberEditController', referenceNumberEditController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n referenceNumberDetailsController.$inject = ['$scope', 'RefDataMappingService', '$filter'];\r\n\r\n function referenceNumberDetailsController($scope, RefDataMappingService, $filter) {\r\n\r\n $scope.proNumber = null;\r\n $scope.carrierName = null;\r\n\r\n $scope.setProNumberAndCarrierName = function() {\r\n var proNumberRDN = RefDataMappingService.getCategoryId('CARRIER_PRO_NUMBER');\r\n\r\n if ($scope.$parent.order.service.loads && $scope.$parent.order.service.loads.length > 0) {\r\n var firstLoad = $scope.$parent.order.service.loads[0];\r\n if (firstLoad.carriers && firstLoad.carriers.length > 0) {\r\n $scope.carrierName = firstLoad.carriers[0].name;\r\n if (firstLoad.carriers[0].referenceNumbers) {\r\n\r\n for (var k = 0; k < firstLoad.carriers[0].referenceNumbers.length; k++) {\r\n if (firstLoad.carriers[0].referenceNumbers[k].referenceNumberType.refDataNumber === proNumberRDN) {\r\n $scope.proNumber = firstLoad.carriers[0].referenceNumbers[k].value;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n $scope.setProNumberAndCarrierName();\r\n\r\n $scope.customerRefNumsFilter = function(element){\r\n\r\n if(element.isPrimary &&\r\n element.referenceNumberType.refDataNumber ===\r\n $scope.$parent.order.customerInfo.customer.primaryCustomerReferenceNumTypeRDN){\r\n element.referenceNumberType.description = $filter('translate')('SECONDARY')\r\n }\r\n\r\n return angular.isDefined(element.value) && element.value != '';\r\n };\r\n\r\n $scope.orderRefNumsFilter = function(element){\r\n\r\n if(!element.isPrimary &&\r\n element.referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('SHIPWITH_NUMBER')){\r\n element.referenceNumberType.description = $filter('translate')('SHIP_WITH_NUMBER')\r\n }\r\n\r\n return angular.isDefined(element.value) && element.value !== '';\r\n };\r\n\r\n $scope.hidePrimaryReferenceNumber = function(element){\r\n return !(element.isPrimary && element.referenceNumberType.refDataNumber ===\r\n $scope.$parent.order.customerInfo.customer.primaryBillToReferenceNumTypeRDN);\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('referenceNumberDetailsController', referenceNumberDetailsController);\r\n})();\r\n\n(function () {\r\n\r\n 'use strict';\r\n\r\n pickupEditController.$inject = ['$scope', '$filter', '$uibModal', 'DateTimeService', '$locale', 'LocationService',\r\n 'AddressService', 'RefDataMappingService', 'UserPermissionService'];\r\n\r\n function pickupEditController($scope, $filter, $uibModal, DateTimeService, $locale, LocationService,\r\n AddressService, RefDataMappingService, UserPermissionService) {\r\n\r\n $scope.originLocationResults = [];\r\n $scope.getAddressLine1 = AddressService.GetAddressLine1;\r\n $scope.getAddressLine2 = AddressService.GetAddressLine2;\r\n $scope.getAddressLine3 = AddressService.GetAddressLine3;\r\n $scope.getAddressLine4 = AddressService.GetAddressLine4;\r\n\r\n $scope.earliestDateOptions ={\r\n showWeeks: false,\r\n minDate: DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n\r\n $scope.latestDateOptions ={\r\n showWeeks: false,\r\n minDate: DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n $scope.bolRefNum = getBolRefNum();\r\n $scope.puRefNum = getPuRefNum();\r\n\r\n function getBolRefNum(){\r\n if($scope.$parent.order.service.pickupFrom.referenceNumbers){\r\n for(var i = 0; i < $scope.$parent.order.service.pickupFrom.referenceNumbers.length; i++){\r\n if($scope.$parent.order.service.pickupFrom.referenceNumbers[i].referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('BOL_NUMBER')){\r\n return $scope.$parent.order.service.pickupFrom.referenceNumbers[i];\r\n }\r\n }\r\n var bolRefNum = { referenceNumberType: {\r\n description: $filter('translate')('BOL_POUND'),\r\n refDataNumber: RefDataMappingService.getCategoryId('BOL_NUMBER') }};\r\n $scope.$parent.order.service.pickupFrom.referenceNumbers.push(bolRefNum);\r\n return bolRefNum;\r\n }\r\n }\r\n function getPuRefNum(){\r\n if($scope.$parent.order.service.pickupFrom.referenceNumbers){\r\n for(var i = 0; i < $scope.$parent.order.service.pickupFrom.referenceNumbers.length; i++){\r\n if($scope.$parent.order.service.pickupFrom.referenceNumbers[i].referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('PICKUP_NUMBER')){\r\n return $scope.$parent.order.service.pickupFrom.referenceNumbers[i];\r\n }\r\n }\r\n var puRefNum = { referenceNumberType: {\r\n description: $filter('translate')('PICKUP_POUND'),\r\n refDataNumber: RefDataMappingService.getCategoryId('PICKUP_NUMBER') }};\r\n $scope.$parent.order.service.pickupFrom.referenceNumbers.push(puRefNum);\r\n return puRefNum;\r\n }\r\n }\r\n $scope.refNumbFilter = function(element){\r\n var test1 = element != $scope.bolRefNum;\r\n var test2 = element != $scope.puRefNum;\r\n return test1 && test2;\r\n };\r\n if ($scope.editAllowed('UPDATE_READY_BY_DATE_TIME')) {\r\n $scope.earliestDateOptions.minDate = DateTimeService.getToday();\r\n $scope.earliestDateOptions.maxDate = DateTimeService.getDateTwoYearsFromNow();\r\n }\r\n\r\n if ($scope.editAllowed('UPDATE_PICK_UP_BY_DATE_TIME')) {\r\n $scope.latestDateOptions.minDate = DateTimeService.getToday();\r\n $scope.latestDateOptions.maxDate = DateTimeService.getDateTwoYearsFromNow();\r\n }\r\n\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.openEarliestDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.earliestDateOpened = true;\r\n };\r\n $scope.ismeridian = $scope.$parent.userPreferences.timeFormat === '12';\r\n\r\n $scope.hstep = 1;\r\n $scope.mstep = 15;\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole($scope.order.customerInfo.customer.partyCode, 'Add New Location')\r\n && $scope.editAllowed('UPDATE_ORIGIN_LOCATION');\r\n $scope.openLatestDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.latestDateOpened = true;\r\n };\r\n $scope.earliestTimeChanged = function (value) {\r\n if (value === null) {\r\n $scope.$parent.order.service.pickupFrom.uiEarliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n };\r\n $scope.latestTimeChanged = function (value) {\r\n if (value === null) {\r\n $scope.$parent.order.service.pickupFrom.uiLatestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n };\r\n\r\n $scope.addNewLocation = function () {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: '../app/addLocationModals/views/addLocation.tpl.html',\r\n size: 'lg',\r\n controller: 'addLocationController',\r\n backdrop: 'static',\r\n resolve: {\r\n customer: function () {\r\n return ($scope.order.customerInfo && $scope.order.customerInfo.customer)\r\n ? $scope.order.customerInfo.customer.partyCode : '';\r\n },\r\n locationType: function() {\r\n if($scope.$parent.pickupNeedsRefinement){\r\n return \"pickup\";\r\n }\r\n return \"\";\r\n },\r\n supplier: function () {\r\n return (angular.isDefined($scope.user) && angular.isDefined($scope.user.supplierPartyCode)\r\n && angular.isDefined($scope.order.customerInfo) && angular.isDefined($scope.order.customerInfo.customer)\r\n && $scope.order.customerInfo.customer.useSupplierLocation)\r\n ? $scope.user.supplierPartyCode\r\n : undefined;\r\n }\r\n }\r\n });\r\n modalInstance.result.then(function (newLocation) {\r\n $scope.$parent.order.pickupHasNoResults = false;\r\n $scope.$parent.order.service.pickupFrom.location = newLocation;\r\n $scope.$parent.order.service.pickupFrom.address = newLocation.physicalAddress;\r\n $scope.$parent.order.service.pickupFrom.uiEarliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n $scope.$parent.order.service.pickupFrom.uiLatestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n $scope.pickupForm.$setDirty();\r\n }, function () {\r\n });\r\n };\r\n $scope.$watch('$parent.order.service.pickupFrom.uiEarliestDate', function (newValue) {\r\n if ($scope.editAllowed('UPDATE_PICK_UP_BY_DATE_TIME') && newValue) {\r\n $scope.latestDateOptions.minDate = newValue > DateTimeService.getToday() ? newValue: $scope.latestDateOptions.minDate;\r\n if ($scope.$parent.order.service.pickupFrom.uiLatestDate) {\r\n if ($scope.$parent.order.service.pickupFrom.uiLatestDate < newValue) {\r\n $scope.$parent.order.service.pickupFrom.uiLatestDate = newValue;\r\n }\r\n }\r\n }\r\n if ($scope.$parent.order.service.pickupFrom\r\n && $scope.$parent.order.service.pickupFrom.location\r\n && newValue\r\n && $scope.$parent.order.service.pickupFrom.location.dryShippingHours) {\r\n\r\n var shippingHours = $scope.$parent.order.service.pickupFrom.location.dryShippingHours;\r\n var day = newValue.getDay();\r\n var dayName = DateTimeService.getWeekDayName(day);\r\n var dayClosedKey = dayName + 'Closed';\r\n var dayOpenTimeKey = dayName + 'OpenTime';\r\n var dayCloseTimeKey = dayName + 'CloseTime';\r\n if (shippingHours[dayClosedKey]) {\r\n return;\r\n }\r\n if (shippingHours[dayOpenTimeKey] && $scope.$parent.order.service.pickupFrom.uiEarliestTime.getTime() === (new Date((new Date()).setHours(0, 0, 0, 0))).getTime()) {\r\n var openTime = new Date(shippingHours[dayOpenTimeKey]);\r\n $scope.$parent.order.service.pickupFrom.uiEarliestTime = openTime;\r\n }\r\n if(shippingHours[dayCloseTimeKey]&& $scope.$parent.order.service.pickupFrom.uiLatestTime.getTime() === (new Date((new Date()).setHours(0, 0, 0, 0))).getTime()) {\r\n var closeTime = new Date(shippingHours[dayCloseTimeKey]);\r\n $scope.$parent.order.service.pickupFrom.uiLatestTime = closeTime;\r\n }\r\n }\r\n });\r\n\r\n $scope.refreshOriginLocations = function (searchText) {\r\n if (searchText.length < 2) {\r\n $scope.$parent.order.pickupHasNoResults = false;\r\n return [];\r\n }\r\n $scope.originLocationResults = [];\r\n return LocationService.searchPartyLocation({\r\n partyNumberOrCode: $scope.order.customerInfo.customer.partyCode.replace(/^\\s+|\\s+$/gm, ''),\r\n term: searchText,\r\n limit: 100,\r\n locationSearchType: 1,\r\n useSupplierLocation: $scope.order.customerInfo.customer.useSupplierLocation\r\n }, function (data) {\r\n $scope.originLocationResults = data.items;\r\n $scope.$parent.order.pickupHasNoResults = (data.items.length === 0) ? true : false;\r\n });\r\n };\r\n $scope.onPickupSelected = function (item) {\r\n\r\n $scope.$parent.order.pickupHasNoResults = false;\r\n $scope.$parent.order.service.pickupFrom.uiEarliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n $scope.$parent.order.service.pickupFrom.uiLatestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n\r\n LocationService.getLocation({\r\n locationPartyNumberOrCode: item.locationPartyCode,\r\n relatedLocationId: item.relatedLocationId,\r\n useSupplierLocation: $scope.order.customerInfo.customer.useSupplierLocation\r\n }, function (data) {\r\n\r\n $scope.$parent.order.service.pickupFrom.address = data.physicalAddress;\r\n $scope.$parent.order.service.pickupFrom.location = data;\r\n $scope.$parent.order.service.pickupFrom.dropLocationNumber = item.dropLocationNumber;\r\n $scope.$parent.order.service.pickupFrom.pickLocationNumber = item.pickLocationNumber;\r\n if (data.notes) {\r\n $scope.$parent.order.service.pickupFrom.specialInstructions = data.notes.substring(0, 255);\r\n } else {\r\n $scope.$parent.order.service.pickupFrom.specialInstructions = '';\r\n }\r\n\r\n if ($scope.$parent.order.service.pickupFrom\r\n && $scope.$parent.order.service.pickupFrom.location\r\n && $scope.$parent.order.service.pickupFrom.location.dryShippingHours\r\n && $scope.$parent.order.service.pickupFrom.uiEarliestDate) {\r\n\r\n var shippingHours = $scope.$parent.order.service.pickupFrom.location.dryShippingHours;\r\n var day = $scope.$parent.order.service.pickupFrom.uiEarliestDate.getDay();\r\n\r\n var dayName = DateTimeService.getWeekDayName(day);\r\n var dayClosedKey = dayName + 'Closed';\r\n var dayOpenTimeKey = dayName + 'OpenTime';\r\n var dayCloseTimeKey = dayName + 'CloseTime';\r\n\r\n if (shippingHours[dayClosedKey]) {\r\n return;\r\n }\r\n if (shippingHours[dayOpenTimeKey]) {\r\n var openTime = new Date(shippingHours[dayOpenTimeKey]);\r\n $scope.$parent.order.service.pickupFrom.uiEarliestTime = openTime;\r\n }\r\n if (shippingHours[dayCloseTimeKey]) {\r\n var closeTime = new Date(shippingHours[dayCloseTimeKey]);\r\n $scope.$parent.order.service.pickupFrom.uiLatestTime = closeTime;\r\n }\r\n }\r\n });\r\n var cCode = ($scope.order.customerInfo && $scope.order.customerInfo.customer)\r\n ? $scope.order.customerInfo.customer.partyCode : '';\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('pickupEditController', pickupEditController);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n pickupDetailsController.$inject = ['$scope', '$filter', 'AddressService', '$uibModal', 'DateTimeService',\r\n 'RefDataMappingService'];\r\n\r\n function pickupDetailsController($scope, $filter, AddressService, $uibModal, DateTimeService,\r\n RefDataMappingService) {\r\n\r\n $scope.getAddressLine3 = AddressService.GetAddressLine3;\r\n $scope.getAddressLine4 = AddressService.GetAddressLine4;\r\n $scope.userPreferences = $scope.$parent.userPreferences;\r\n\r\n if ($scope.$parent.order.service.pickupFrom) {\r\n if ($scope.$parent.order.service.pickupFrom.earliestDate) {\r\n var earliestDate = $scope.$parent.order.service.pickupFrom.earliestDate.utcDateTime;\r\n $scope.$parent.order.service.pickupFrom.uiEarliestDate = DateTimeService.getRawDateTime(earliestDate);\r\n }\r\n if ($scope.$parent.order.service.pickupFrom.earliestTime) {\r\n var earliestTime = $scope.$parent.order.service.pickupFrom.earliestTime.utcDateTime;\r\n $scope.$parent.order.service.pickupFrom.uiEarliestTime = DateTimeService.getRawDateTime(earliestTime);\r\n } else {\r\n $scope.$parent.order.service.pickupFrom.uiEarliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n if ($scope.$parent.order.service.pickupFrom.latestDate) {\r\n var latestDate = $scope.$parent.order.service.pickupFrom.latestDate.utcDateTime;\r\n $scope.$parent.order.service.pickupFrom.uiLatestDate = DateTimeService.getRawDateTime(latestDate);\r\n }\r\n if ($scope.$parent.order.service.pickupFrom.latestTime) {\r\n var latestTime = $scope.$parent.order.service.pickupFrom.latestTime.utcDateTime;\r\n $scope.$parent.order.service.pickupFrom.uiLatestTime = DateTimeService.getRawDateTime(latestTime);\r\n } else {\r\n $scope.$parent.order.service.pickupFrom.uiLatestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n }\r\n\r\n $scope.refNumberFilter = function(element){\r\n\r\n if(element.referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('PICKUP_NUMBER')){\r\n element.referenceNumberType.description = $filter('translate')('PICKUP_POUND');\r\n }\r\n\r\n if(element.referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('BOL_NUMBER')){\r\n element.referenceNumberType.description = $filter('translate')('BOL_POUND');\r\n }\r\n\r\n return true;\r\n };\r\n\r\n $scope.pickupWarehouseDetails = function (locationDetail, displayDryHours) {\r\n var locationInfo = {\r\n location: locationDetail,\r\n displayDryHours: displayDryHours,\r\n useReceivingHours: false\r\n };\r\n $uibModal.open({\r\n templateUrl: '../app/orderDetails/views/warehouseDetails.tpl.html',\r\n size: 'md',\r\n controller: 'warehouseDetailsController',\r\n resolve: {\r\n userPreference: function() {\r\n return $scope.$parent.userPreferences;\r\n }\r\n ,\r\n warehouseDetails: function () {\r\n return locationInfo;\r\n }\r\n }\r\n });\r\n };\r\n\r\n $scope.getDisplayDateTime = DateTimeService.getDisplayDateTime;\r\n\r\n }\r\n angular.module('NavisphereOnline').controller('pickupDetailsController', pickupDetailsController);\r\n})();\r\n\n/*global $ */\r\n/*eslint angular/no-private-call:0*/\r\n(function () {\r\n 'use strict';\r\n orderDetailsController.$inject = ['DocumentManagerService', '$scope', '$state', '$uibModal', '$interval', '$q', '$filter',\r\n '$uibModalStack', 'RefDataMappingService', 'CustomerService', 'ServiceOffering', 'user', 'orderDetails',\r\n 'userPreferences', '$window', 'UserPermissionService', 'refDataDDLs', 'OrderTransformService', 'OrderLockHelper',\r\n 'ModalService', 'NotificationService', 'StatusMappingService', 'OrderLockPromptService', 'ConversionService',\r\n 'OrderService', 'DateTimeService', 'OrderEditRulesService', 'CarrierLogService', 'localStorageService',\r\n 'UnitsOfMeasurementService'];\r\n\r\n function orderDetailsController( DocumentManagerService, $scope, $state, $uibModal, $interval, $q, $filter, $uibModalStack,\r\n RefDataMappingService, CustomerService, ServiceOffering, user, orderDetails,\r\n userPreferences, $window, UserPermissionService, refDataDDLs, OrderTransformService,\r\n OrderLockHelper, ModalService, NotificationService, StatusMappingService,\r\n OrderLockPromptService, ConversionService, OrderService, DateTimeService,\r\n OrderEditRulesService, CarrierLogService, localStorageService, UnitsOfMeasurementService) {\r\n\r\n $scope.cancelInverval = function(){\r\n if ($scope.interval) {\r\n $interval.cancel($scope.interval);\r\n }\r\n };\r\n\r\n $scope.getTrackingNumber = function (order) {\r\n if (!order || !order.referenceNumbers || order.referenceNumbers.length === 0) {\r\n return null;\r\n }\r\n\r\n for (var i = 0; i < order.referenceNumbers.length; i++) {\r\n if (order.referenceNumbers[i].referenceNumberType.refDataNumber ==\r\n RefDataMappingService.getCategoryId('TRACKING_NUMBER')) {\r\n return order.referenceNumbers[i].value;\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n $scope.sendTrackingModal = function(){\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendTracking.tpl.html',\r\n size: 'lg',\r\n controller: 'sendTrackingController',\r\n resolve: {\r\n trackingNumber: function () {\r\n return $scope.order.trackingNumber;\r\n },\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n });\r\n };\r\n\r\n $scope.getBillToRefNum = function(order) {\r\n if (!order || !order.billTos || !order.billTos[0] || !order.billTos[0].referenceNumbers\r\n || order.billTos[0].referenceNumbers.length === 0) {\r\n return null;\r\n }\r\n\r\n for (var i = 0; i < order.billTos[0].referenceNumbers.length; i++) {\r\n if (order.billTos[0].referenceNumbers[i].isPrimary) {\r\n return order.billTos[0].referenceNumbers[i].value;\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n\r\n $scope.releaseOrderLock = function () {\r\n $scope.cancelInverval();\r\n OrderLockHelper.releaseOrderLock();\r\n };\r\n\r\n $scope.releaseOrderLockSync = function () {\r\n\r\n OrderLockHelper.releaseOrderLockSync();\r\n $scope.cancelInverval();\r\n };\r\n\r\n /*\r\n summarized field names\r\n */\r\n var WEIGHT = 'weight';\r\n var TOTAL_INSURANCE_VALUE = 'totalInsuranceValue';\r\n var PALLETS = 'totalPallets';\r\n var QTY = 'unitQuantity';\r\n var onRouteChangeOff;\r\n\r\n //\r\n $scope.DateTimeService = DateTimeService;\r\n $scope.order = OrderTransformService.getOrderForEdit(orderDetails, userPreferences);\r\n $scope.user = user;\r\n $scope.userPreferences = userPreferences;\r\n $scope.oneAtATime = true;\r\n $scope.orderIsDraw = orderDetails.sourceRDN === RefDataMappingService.getItemId('PO_DRAW_SOURCE');\r\n $scope.editRules = orderDetails.editRules;\r\n $scope.editAllowed = function (actionKey) {\r\n for (var i = 0; i < $scope.editRules.length; i++) {\r\n if ($scope.editRules[i].actionKey === actionKey) {\r\n return $scope.editRules[i].allowed;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n $scope.reorder = function () {\r\n var createOrderUrl = $window.location.origin + '/orders/#/create/' + $scope.order.customerOrderNumber\r\n window.location.href = createOrderUrl;\r\n };\r\n\r\n $scope.redirectToBetaPage = function () {\r\n var createRedirectBetaPageUrl = $window.location.origin + '/orders/#/detail/' + $scope.order.customerOrderNumber\r\n window.location.href = createRedirectBetaPageUrl;\r\n };\r\n\r\n $scope.initialize = function () {\r\n var isMetric = $scope.userPreferences.unitOfMeasure === 'metric';\r\n $scope.orionStatus = $filter('translate')(StatusMappingService.getStatusResourceKey($scope.order.service.statusRDN));\r\n $scope.itemDdlRefData = refDataDDLs;\r\n $scope.orderIsCanceled = $scope.order.conditionRDN === RefDataMappingService.getItemId('CANCELED_CONDITION');\r\n $scope.hasEditPermission = !$scope.orderIsCanceled && UserPermissionService.hasCustomerRole($scope.order.customerInfo.customer.partyCode, \"Edit Order\");\r\n $scope.hasReorderPermission = UserPermissionService.hasCustomerRole($scope.order.customerInfo.customer.partyCode, \"Create Order\");\r\n\r\n $scope.canEditShippingMethod = $scope.hasEditPermission && ($scope.editAllowed('UPDATE_BILL_TO_REFERENCE_NUMBERS')\r\n || $scope.editAllowed('UPDATE_CUSTOMER_REFERENCE_NUMBERS'));\r\n\r\n\r\n $scope.canEditPickupFrom = $scope.hasEditPermission && ($scope.editAllowed('UPDATE_ORIGIN_LOCATION')\r\n || $scope.editAllowed('UPDATE_READY_BY_DATE_TIME')\r\n || $scope.editAllowed('UPDATE_PICK_UP_BY_DATE_TIME')\r\n || $scope.editAllowed('UPDATE_ORIGIN_REFERENCE_NUMBERS')\r\n || $scope.editAllowed('UPDATE_ORIGIN_SPECIAL_INSTRUCTIONS'));\r\n\r\n $scope.canEditDeliverTo = $scope.hasEditPermission && ($scope.editAllowed('UPDATE_DESTINATION_LOCATION')\r\n || $scope.editAllowed('UPDATE_AVAILABLE_DELIVERY_DATE_TIME')\r\n || $scope.editAllowed('UPDATE_DELIVERY_BY_DATE_TIME')\r\n || $scope.editAllowed('UPDATE_DESTINATION_REFERENCE_NUMBERS')\r\n || $scope.editAllowed('UPDATE_DESTINATION_SPECIAL_INSTRUCTIONS'));\r\n\r\n $scope.canEditShippingItems = $scope.hasEditPermission && ($scope.editAllowed('DELETE_COMMODITY')\r\n || $scope.editAllowed('ADD_NEW_COMMODITY')\r\n || $scope.editAllowed('UPDATE_COMMODITY')\r\n || $scope.editAllowed('UPDATE_COMMODITY_REFERENCE_NUMBERS'));\r\n\r\n angular.forEach($scope.order.service.items, function (item) {\r\n if (!item.totalWeight) {\r\n item.totalWeight = {\r\n unitRDN: $scope.userPreferences.unitOfMeasure === 'metric'\r\n ? RefDataMappingService.getItemId('KG_UOM')\r\n : RefDataMappingService.getItemId('LB_UOM')\r\n };\r\n }\r\n\r\n if (item.commodity.isStackable) {\r\n item.isStackable = true;\r\n } else {\r\n item.isStackable = false;\r\n }\r\n\r\n if(item.unitLength && item.unitWidth && item.unitHeight) {\r\n if(!item.unitLength.unitRDN && !item.unitWidth.unitRDN && !item.unitHeight.unitRDN) {\r\n setUnitsOfMeasurement(item, isMetric);\r\n }\r\n }\r\n else {\r\n item.unitLength = { value: null };\r\n item.unitWidth = { value: null };\r\n item.unitHeight = { value: null };\r\n setUnitsOfMeasurement(item, isMetric);\r\n }\r\n });\r\n\r\n $scope.order.billToRefNum = $scope.getBillToRefNum($scope.order);\r\n $scope.order.trackingNumber = $scope.getTrackingNumber($scope.order);\r\n };\r\n\r\n $scope.initialize();\r\n $scope.getDisplayName = CustomerService.GetDisplayName;\r\n $scope.serviceOfferingName = '';\r\n $scope.serviceOfferingGenericType = '';\r\n $scope.serviceOfferingIconUrl = '';\r\n $scope.displayDryHours = true;\r\n $scope.refDataDDLs = refDataDDLs;\r\n $scope.isHazmat = hasHazmatItem();\r\n $scope.editRules = orderDetails.editRules;\r\n\r\n $scope.$on('$destroy', function () {\r\n $window.onbeforeunload = undefined;\r\n });\r\n\r\n setServiceOfferingDisplay();\r\n\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'OK',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_EXIT_THIS_ORDER',\r\n bodyText: 'ALL_INFORMATION_ENTERED_FOR_THIS_ORDER_WILL_BE_LOS'\r\n };\r\n\r\n $scope.sections = [{\r\n id: 1,\r\n title: 'ACCOUNT',\r\n headerUrl: 'app/orderDetails/views/customerSummary.tpl.html',\r\n templateUrl: null,\r\n active: false,\r\n visited: false,\r\n complete: function () {\r\n return $scope.order.validator.customerValid;\r\n },\r\n disabled: function () {\r\n return false;\r\n },\r\n buttonText: null,\r\n isEditSection: false,\r\n hideHeading: true,\r\n isWide: true\r\n },\r\n {\r\n id: 2,\r\n title: 'CHARGES',\r\n headerUrl: 'app/orderDetails/views/chargesDetails.tpl.html',\r\n templateUrl: null,\r\n active: false,\r\n visited: false,\r\n isWide: true,\r\n isEditSection: false,\r\n buttonText: null,\r\n hidePanel: angular.isDefined($scope.order.charges) && $scope.order.charges.length < 1\r\n },\r\n {\r\n id: 3,\r\n title: 'REFERENCE_S',\r\n headerUrl: 'app/orderDetails/views/referenceNumberDetails.tpl.html',\r\n templateUrl: 'app/orderDetails/views/referenceNumberEdit.tpl.html',\r\n active: false,\r\n visited: false,\r\n complete: function () {\r\n return $scope.order.validator.serviceOfferingValid;\r\n },\r\n disabled: function () {\r\n return !$scope.canEditShippingMethod;\r\n },\r\n buttonText: $filter('translate')('EDIT'),\r\n onOpen: lockOrder,\r\n canOpen: canOpen,\r\n isEditSection: true\r\n },\r\n {\r\n id: 4,\r\n title: 'PICKUP_FROM',\r\n headerUrl: 'app/orderDetails/views/pickupDetails.tpl.html',\r\n templateUrl: 'app/orderDetails/views/pickupEdit.tpl.html',\r\n active: false,\r\n visited: false,\r\n complete: function () {\r\n return $scope.order.validator.pickupValid;\r\n },\r\n disabled: function () {\r\n return !$scope.canEditPickupFrom;\r\n },\r\n buttonText: $filter('translate')('EDIT'),\r\n onOpen: lockOrder,\r\n canOpen: canOpen,\r\n isEditSection: true\r\n },\r\n {\r\n id: 5,\r\n title: 'DELIVER_TO',\r\n headerUrl: 'app/orderDetails/views/deliveryDetails.tpl.html',\r\n templateUrl: 'app/orderDetails/views/deliveryEdit.tpl.html',\r\n active: false,\r\n visited: false,\r\n complete: function () {\r\n return $scope.order.validator.deliveryValid;\r\n },\r\n disabled: function () {\r\n return !$scope.canEditDeliverTo;\r\n },\r\n buttonText: $filter('translate')('EDIT'),\r\n onOpen: lockOrder,\r\n canOpen: canOpen,\r\n isEditSection: true\r\n },\r\n {\r\n id: 6,\r\n title: 'SHIPPING_ITEMS',\r\n headerUrl: 'app/orderDetails/views/itemDetails.tpl.html',\r\n templateUrl: 'app/orderDetails/views/itemEdit.tpl.html',\r\n active: false,\r\n visited: false,\r\n isWide: true,\r\n complete: function () {\r\n return $scope.order.validator.itemsValid && $scope.order.service.items.length > 0;\r\n },\r\n disabled: function () {\r\n return !$scope.canEditShippingItems;\r\n },\r\n buttonText: $filter('translate')('EDIT'),\r\n onOpen: lockOrder,\r\n canOpen: canOpen,\r\n isEditSection: true\r\n }\r\n ];\r\n\r\n $scope.itemSummary = {\r\n lineItems: 0,\r\n weight: 0,\r\n insuranceValue: 0,\r\n pallets: 0,\r\n quantity: 0\r\n };\r\n\r\n $scope.order.validator = {\r\n customerValid: null,\r\n serviceOfferingValid: null,\r\n itemsValid: null,\r\n deliveryValid: null,\r\n pickupValid: null,\r\n customerAndServiceOfferingValid: function () {\r\n return this.customerValid && this.serviceOfferingValid;\r\n }\r\n };\r\n $scope.$watch('orderDetailsForm.shipMethodForm.$valid', function (value) {\r\n $scope.order.validator.serviceOfferingValid = value;\r\n });\r\n $scope.$watch('orderDetailsForm.pickupForm.$valid', function (value) {\r\n $scope.order.validator.pickupValid = value;\r\n });\r\n $scope.$watch('orderDetailsForm.deliveryForm.$valid', function (value) {\r\n $scope.order.validator.deliveryValid = value;\r\n });\r\n $scope.$watch('orderDetailsForm.itemsForm.$valid && order.service.items.length > 0', function (value) {\r\n $scope.order.validator.itemsValid = value;\r\n });\r\n\r\n function setUnitsOfMeasurement(item, isMetric) {\r\n UnitsOfMeasurementService.setUnitsOfMeasurement(item, isMetric)\r\n }\r\n\r\n $scope.getUserPreferenceWeightUoM = function () {\r\n var uomTranslation = '';\r\n if ($scope.userPreferences.unitOfMeasure === 'standard') {\r\n uomTranslation = RefDataMappingService.getUomTranslationByRefNum(RefDataMappingService.getItemId('LB_UOM'));\r\n }\r\n else if ($scope.userPreferences.unitOfMeasure === 'metric') {\r\n uomTranslation = RefDataMappingService.getUomTranslationByRefNum(RefDataMappingService.getItemId('KG_UOM'));\r\n }\r\n\r\n return uomTranslation;\r\n };\r\n\r\n function setServiceOfferingDisplay() {\r\n if (!$scope.order || !$scope.order.service || !$scope.order.service.serviceOffering)\r\n return;\r\n var offering = ServiceOffering.get($scope.order.service.serviceOffering.id);\r\n $scope.displayDryHours = offering.displayDryHours;\r\n $scope.serviceOfferingName = offering.serviceOfferingName;\r\n $scope.serviceOfferingGenericType = offering.genericType;\r\n $scope.serviceOfferingIconUrl = offering.serviceOfferingIconUrl;\r\n }\r\n\r\n $scope.getLocationDisplayName = function (location) {\r\n if (location) return location.locationPartyName;\r\n return '';\r\n };\r\n\r\n\r\n function hasHazmatItem() {\r\n for (var i = 0; i < $scope.order.service.items.length; i++) {\r\n if ($scope.order.service.items[i].commodity && $scope.order.service.items[i].commodity.isHazardous) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n $scope.openDocumentViewer = function () {\r\n var controller = 'orderDocumentViewerController';\r\n var resolveObject = {\r\n order: function () {\r\n return $scope.order;\r\n },\r\n documents: ['DocumentService', function (DocumentService) {\r\n return DocumentService.getAll({orderNumber: $scope.order.customerOrderNumber, cCode: $scope.order.customerInfo.customer.partyCode}).$promise;\r\n }]\r\n };\r\n\r\n DocumentManagerService.openDocumentViewer(controller, null, resolveObject);\r\n };\r\n\r\n $scope.submittingOrder = false;\r\n\r\n $scope.showValidationError = function (validationMessages) {\r\n $scope.showValidationErrorModal = $uibModal.open({\r\n templateUrl: 'app/validationModal/validationModal.tpl.html',\r\n size: 'lg',\r\n controller: 'validationModalController',\r\n resolve: {\r\n validations: function () {\r\n return validationMessages;\r\n },\r\n title: function () {\r\n return $filter('translate')('WE_WERE_NOT_ABLE_TO_PROCESS_YOUR_ORDER_PLEASE_RESO');\r\n }\r\n }\r\n });\r\n\r\n $scope.showValidationErrorModal.result.then(function () {\r\n $scope.submittingOrder = false;\r\n }, function () {\r\n $scope.submittingOrder = false;\r\n });\r\n };\r\n\r\n $scope.submitOrder = function () {\r\n\r\n var validationMessages = [];\r\n\r\n if (!$scope.submittingOrder) {\r\n $scope.submittingOrder = true;\r\n\r\n if (!$scope.order.validator.serviceOfferingValid)\r\n validationMessages.push($filter('translate')('REFERENCE_S'));\r\n\r\n if (!$scope.order.validator.pickupValid)\r\n validationMessages.push($filter('translate')('PICKUP_FROM'));\r\n\r\n if (!$scope.order.validator.deliveryValid)\r\n validationMessages.push($filter('translate')('DELIVER_TO'));\r\n\r\n if (!$scope.order.validator.itemsValid)\r\n validationMessages.push($filter('translate')('SHIPPING_ITEMS'));\r\n\r\n if (validationMessages.length > 0) {\r\n\r\n for (var key in $scope.sections)\r\n $scope.sections[key].visited = true;\r\n\r\n $scope.showValidationError(validationMessages);\r\n\r\n } else if (DateTimeService.startDateTimeLessThanOrEqualEndDateTime($scope.order.service.pickupFrom.uiLatestDate,\r\n $scope.order.service.pickupFrom.uiLatestTime, $scope.order.service.deliverTo.uiEarliestDate,\r\n $scope.order.service.deliverTo.uiEarliestTime)) {\r\n\r\n $scope.loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () {\r\n return $filter('translate')('PLACING_ORDER');\r\n }\r\n }\r\n });\r\n\r\n OrderLockPromptService.lock.orderNumber = $scope.order.customerOrderNumber;\r\n var customerOrderRequest = {\r\n order: OrderTransformService.getCustomerOrderUpdateRequest($scope.order),\r\n lock: OrderLockPromptService.lock\r\n };\r\n var orderService = new OrderService(customerOrderRequest);\r\n orderService.$update().then(function (result) {\r\n $scope.loadingModal.close(result);\r\n if (result.success) {\r\n OrderLockPromptService.lock = null;\r\n\r\n $scope.cancelInverval();\r\n\r\n $scope.orderDetailsForm.$dirty = false;\r\n $state.go('app.orderEditConfirmation', {\r\n orderNumber: result.orderNumber\r\n });\r\n } else {\r\n angular.forEach(result.errors, function (error) {\r\n validationMessages.push($filter('translate')(error.errorMessage));\r\n });\r\n $scope.showValidationError(validationMessages);\r\n }\r\n }, function (result) {\r\n $scope.loadingModal.close(result);\r\n validationMessages.push($filter('translate')('WE_ARE_UNABLE_TO_PROCESS_YOUR_ORDER_AT_THIS_TIME_P'));\r\n $scope.showValidationError(validationMessages);\r\n });\r\n } else {\r\n validationMessages.push($filter('translate')('PICKUP_LATEST_DATE_TIME_RANGE_MUST_BE_BEFORE_DELIV'));\r\n $scope.showValidationError(validationMessages);\r\n }\r\n }\r\n };\r\n\r\n $scope.goBack = function () {\r\n $window.history.back();\r\n };\r\n\r\n $scope.cancelOrder = function () {\r\n\r\n var cancelModalOptions = {\r\n closeButtonText: 'NO',\r\n actionButtonText: 'YES',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_CANCEL_EDITING_THIS_ORDER',\r\n bodyText: 'ALL_INFORMATION_ENTERED_FOR_THIS_ORDER_WILL_BE_LOS'\r\n };\r\n\r\n if ($scope.hasEditPermission && $scope.orderDetailsForm && $scope.orderDetailsForm.$dirty) {\r\n ModalService.showModal({}, cancelModalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n if (OrderLockPromptService.lock) {\r\n $scope.releaseOrderLockSync();\r\n }\r\n\r\n $scope.reloadPage();\r\n }\r\n }, function () {\r\n });\r\n }\r\n };\r\n\r\n\r\n $scope.interval = null;\r\n\r\n $scope.updateOrderDetails = function() {\r\n OrderService.getOrder({orderNumber: $scope.order.customerOrderNumber})\r\n .$promise.then(function (orderDetails) {\r\n OrderEditRulesService.getOrderEditRules({serviceStatusRDN: orderDetails.services[0].statusRDN}).$promise\r\n .then(function (editRules) {\r\n orderDetails.editRules = editRules;\r\n $scope.order = OrderTransformService.getOrderForEdit(orderDetails, userPreferences);\r\n $scope.order.validator = {\r\n customerValid: null,\r\n serviceOfferingValid: null,\r\n itemsValid: null,\r\n deliveryValid: null,\r\n pickupValid: null,\r\n customerAndServiceOfferingValid: function () {\r\n return this.customerValid && this.serviceOfferingValid;\r\n }\r\n };\r\n $scope.initialize();\r\n });\r\n });\r\n };\r\n\r\n function lockOrder() {\r\n\r\n OrderLockHelper.lockOrder($scope.order.customerOrderNumber.toString()).$promise.then(function (result) {\r\n\r\n if (result) {\r\n\r\n OrderLockPromptService.lock = result;\r\n\r\n $scope.cancelInverval();\r\n $scope.interval = $interval(lockTimer, 60000, 60);\r\n\r\n $scope.updateOrderDetails();\r\n }\r\n });\r\n }\r\n\r\n function lockTimer(count) {\r\n if (count >= 59) {\r\n $scope.releaseOrderLock();\r\n $uibModal.open({\r\n templateUrl: '../app/orderDetails/views/lockExpiredModal.tpl.html',\r\n size: 'md',\r\n controller: 'lockExpiredModalController'\r\n }).result.then(function () {\r\n $scope.reloadPage();\r\n $window.onbeforeunload = undefined;\r\n }, function () {\r\n $scope.reloadPage();\r\n $window.onbeforeunload = undefined;\r\n });\r\n\r\n }\r\n else if (count === 55) {\r\n NotificationService.warn($filter('translate')('YOU_HAVE_5_MINUTES_TO_COMPLETE_CHANGES_BEFORE_THEY'));\r\n }\r\n }\r\n\r\n $scope.reloadPage = function() {\r\n $scope.orderDetailsForm.$setPristine();\r\n $state.reload();\r\n };\r\n\r\n function canOpen() {\r\n\r\n var d = $q.defer();\r\n\r\n if (OrderLockPromptService.lock)\r\n d.resolve(true);\r\n else {\r\n\r\n OrderLockHelper.lockOrder($scope.order.customerOrderNumber.toString()).$promise.then(function (data) {\r\n\r\n if (!data.user) {\r\n $uibModal.open({\r\n templateUrl: '../app/orderDetails/views/tryToGetLockAgainModal.tpl.html',\r\n size: 'md',\r\n controller: 'tryToGetLockAgainModalController',\r\n resolve: {\r\n orderNumber: function () {\r\n return $scope.order.customerOrderNumber;\r\n }\r\n }\r\n }).result.then(function (result) {\r\n\r\n if (result) {\r\n\r\n OrderLockPromptService.lock = result;\r\n\r\n $scope.cancelInverval();\r\n $scope.interval = $interval(lockTimer, 60000, 60);\r\n\r\n $scope.updateOrderDetails();\r\n }\r\n\r\n d.resolve(result != null);\r\n });\r\n } else {\r\n\r\n OrderLockPromptService.lock = data;\r\n\r\n $scope.cancelInverval();\r\n $scope.interval = $interval(lockTimer, 60000, 60);\r\n d.resolve(true);\r\n }\r\n\r\n }, function () {\r\n d.resolve(false);\r\n });\r\n }\r\n\r\n return d.promise;\r\n }\r\n\r\n $scope.windowOnBeforeUnload = function (event) {\r\n if (!$scope.hasEditPermission || !$scope.orderDetailsForm || !$scope.orderDetailsForm.$dirty) {\r\n if (OrderLockPromptService.lock) {\r\n $scope.releaseOrderLockSync();\r\n }\r\n return;\r\n }\r\n\r\n var message = $filter('translate')('ARE_YOU_SURE_YOU_WANT_TO_EXIT_THIS_ORDER') + ' ' + $filter('translate')('ALL_INFORMATION_ENTERED_FOR_THIS_ORDER_WILL_BE_LOS');\r\n if (typeof event == 'undefined') {\r\n event = $window.event;\r\n }\r\n if (event) {\r\n event.returnValue = message;\r\n }\r\n return message;\r\n };\r\n\r\n $window.onbeforeunload = $scope.windowOnBeforeUnload;\r\n\r\n $scope.windowOnnUnload = function () {\r\n if (OrderLockPromptService.lock) {\r\n $scope.releaseOrderLockSync();\r\n }\r\n };\r\n\r\n $window.onunload = $scope.windowOnnUnload;\r\n\r\n $scope.carrierLogs = undefined;\r\n $scope.carrierLogExpanded = false;\r\n $scope.carrierLogsLoading = false;\r\n $scope.expandCarrierLogs = function() {\r\n if(angular.isUndefined($scope.carrierLogs)){\r\n $scope.carrierLogsLoading = true;\r\n $scope.carrierLogs = CarrierLogService.get({\r\n orderNumber: $scope.order.customerOrderNumber\r\n }, function(){\r\n $scope.carrierLogsLoading = false;\r\n }, function(){\r\n $scope.carrierLogsLoading = false;\r\n });\r\n\r\n }\r\n $scope.carrierLogExpanded = !$scope.carrierLogExpanded;\r\n };\r\n $scope.getLocationDisplay = function (log){\r\n var loc = '';\r\n if(log.driverLocation){\r\n if(log.driverLocation.city) {\r\n loc = log.driverLocation.city;\r\n }\r\n if(log.driverLocation.city && log.driverLocation.state){\r\n loc += ', ' + log.driverLocation.state;\r\n }\r\n else if(log.driverLocation.state){\r\n loc = log.driverLocation.state;\r\n }\r\n }\r\n return loc;\r\n };\r\n\r\n $scope.summaryFieldUpdates = [];\r\n\r\n $scope.summaryUpdate = function (fieldName) {\r\n $scope.summaryFieldUpdates.push(fieldName);\r\n };\r\n\r\n $scope.inSummaryUpdate = false;\r\n $scope.$watchCollection('summaryFieldUpdates', function (newVal) {\r\n if (!$scope.inSummaryUpdate) {\r\n $scope.inSummaryUpdate = true;\r\n $scope.itemSummary.lineItems = $scope.order.service.items.length;\r\n angular.forEach(newVal, function (fieldChangedName, i) {\r\n var valueSum = 0;\r\n angular.forEach($scope.order.service.items, function (item) {\r\n if (fieldChangedName == WEIGHT) {\r\n\r\n // Set default weight unit RDN if it does not exist\r\n if (!item.totalWeight) {\r\n item.totalWeight = {\r\n value: undefined,\r\n unitRDN: getDefaultWeightRDN(item)\r\n }\r\n }\r\n\r\n if (item.totalWeight) {\r\n if (RefDataMappingService.getItemByRefNum(item.totalWeight.unitRDN) === 'LB_UOM' && $scope.userPreferences.unitOfMeasure === 'metric') {\r\n valueSum += isFinite(Number(item.totalWeight.value))\r\n ? ConversionService.convertLBtoKG(Number(item.totalWeight.value), 2) : 0;\r\n }\r\n else if (RefDataMappingService.getItemByRefNum(item.totalWeight.unitRDN) === 'KG_UOM' && $scope.userPreferences.unitOfMeasure === 'standard') {\r\n valueSum += isFinite(Number(item.totalWeight.value))\r\n ? ConversionService.convertKGtoLB(Number(item.totalWeight.value), 2) : 0;\r\n } else {\r\n valueSum += isFinite(Number(item.totalWeight.value)) ? Number(item.totalWeight.value) : 0;\r\n }\r\n }\r\n } else {\r\n valueSum += isFinite(Number(item[fieldChangedName])) ? Number(item[fieldChangedName]) : 0;\r\n }\r\n });\r\n switch (fieldChangedName) {\r\n case WEIGHT:\r\n $scope.itemSummary.weight = valueSum;\r\n break;\r\n case TOTAL_INSURANCE_VALUE:\r\n $scope.itemSummary.insuranceValue = valueSum;\r\n break;\r\n case PALLETS:\r\n $scope.itemSummary.pallets = valueSum;\r\n break;\r\n case QTY:\r\n $scope.itemSummary.quantity = valueSum;\r\n break;\r\n default:\r\n break;\r\n }\r\n newVal.splice(i, 1);\r\n });\r\n $scope.inSummaryUpdate = false;\r\n }\r\n });\r\n\r\n $scope.updateSummary = function () {\r\n $scope.summaryFieldUpdates.push(WEIGHT, TOTAL_INSURANCE_VALUE, PALLETS, QTY);\r\n };\r\n\r\n $scope.updateSummary();\r\n $scope.routeChange = function (event, toState, toParams, fromState) {\r\n if (!localStorageService.get('credentials')) {\r\n return;\r\n }\r\n if (!$scope.hasEditPermission || !$scope.orderDetailsForm || !$scope.orderDetailsForm.$dirty) {\r\n\r\n if (OrderLockPromptService.lock && toState.name !== 'app.orderEditConfirmation') {\r\n\r\n event.preventDefault();\r\n $scope.releaseOrderLock().then(function () {\r\n onRouteChangeOff();\r\n $state.go(toState);\r\n }, function () {\r\n onRouteChangeOff();\r\n $state.go(toState);\r\n });\r\n } else {\r\n OrderLockPromptService.lock = null;\r\n $scope.cancelInverval();\r\n }\r\n return;\r\n }\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n if (OrderLockPromptService.lock) {\r\n $scope.releaseOrderLockSync();\r\n }\r\n onRouteChangeOff();\r\n $uibModalStack.dismissAll(result);\r\n $state.go(toState);\r\n }\r\n });\r\n event.preventDefault();\r\n };\r\n\r\n function getDefaultWeightRDN(item) {\r\n var weightUnitRDN = RefDataMappingService.getWeightUnitRDNFromItem(item);\r\n\r\n if (weightUnitRDN == null) {\r\n var isMetric = isMetric = $scope.userPreferences.unitOfMeasure === 'metric';\r\n weightUnitRDN = isMetric\r\n ? RefDataMappingService.getItemId('KG_UOM')\r\n : RefDataMappingService.getItemId('LB_UOM');\r\n }\r\n\r\n return weightUnitRDN;\r\n }\r\n\r\n $scope.initRouteChange = function () {\r\n onRouteChangeOff = $scope.$on('$stateChangeStart', $scope.routeChange);\r\n };\r\n $scope.initRouteChange();\r\n }\r\n angular.module('NavisphereOnline').controller('orderDetailsController', orderDetailsController);\r\n})();\r\n\n/*global $ */\r\n/*eslint angular/no-private-call:0*/\r\n(function () {\r\n 'use strict';\r\n newOrderDetailsController.$inject = ['$window', '$stateParams'];\r\n\r\n function newOrderDetailsController($window, $stateParams) {\r\n var reactOrderDetailsUrl = $window.location.origin + '/orders/#/detail/' + $stateParams.orderNumber\r\n window.location.href = reactOrderDetailsUrl;\r\n\t}\r\n \r\n angular.module('NavisphereOnline').controller('newOrderDetailsController', newOrderDetailsController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n lockExpiredModalController.$inject = ['$scope', '$uibModalInstance'];\r\n\r\n function lockExpiredModalController($scope, $uibModalInstance) {\r\n\r\n $scope.ok = function () {\r\n $uibModalInstance.close(null);\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('lockExpiredModalController', lockExpiredModalController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n itemEditController.$inject = ['$scope', '$timeout', '$filter', '$uibModal', 'ItemService', 'ItemServiceHelper', 'UserPermissionService',\r\n 'ModalService', 'RefDataMappingService', \"FormService\", 'ServiceOffering', '$document', '$window', 'UnitsOfMeasurementService'];\r\n function itemEditController($scope, $timeout, $filter, $uibModal, ItemService, ItemServiceHelper, UserPermissionService,\r\n ModalService, RefDataMappingService, FormService, ServiceOffering, $document,$window, UnitsOfMeasurementService) {\r\n //summarized field names\r\n var WEIGHT = 'weight';\r\n $scope.hasAddNewCommodityPerTrans = UserPermissionService.hasCustomerRole($scope.order.customerInfo.customer.partyCode, 'Add New Commodity Per Transaction');\r\n $scope.hasCreateNewCommodityInPartyCatalog = UserPermissionService.hasCustomerRole($scope.order.customerInfo.customer.partyCode, 'Create New Commodity in Party Catalog');\r\n $scope.isFlatbed = ServiceOffering.get($scope.order.service.serviceOffering.id).genericType === 'FLATBED';\r\n $scope.searchItemResults = [];\r\n $scope.itemFilter = '';\r\n $scope.newItemRefTypes = [\r\n { description: $filter('translate')('PO_POUND'), refDataNumber: RefDataMappingService.getItemId('PURCHASE_ORDER_NUMBER') }\r\n ];\r\n var isMetric = $scope.userPreferences.unitOfMeasure === 'metric';\r\n\r\n $scope.setItemAsVisited = function (item) {\r\n item.visited = true;\r\n };\r\n $scope.isStackableClick = function(item) {\r\n $scope.orderDetailsForm.$setDirty();\r\n item.isStackable = !item.isStackable;\r\n item.commodity.isStackable = item.isStackable;\r\n };\r\n giveItemsDefaultPoRefNums();\r\n function giveItemsDefaultPoRefNums(){\r\n for(var i = 0; i < $scope.order.service.items.length; i++){\r\n var itemHasPoRef = false;\r\n for(var j = 0; j < $scope.order.service.items[i].referenceNumbers.length; j++){\r\n if($scope.order.service.items[i].referenceNumbers[j].referenceNumberType.refDataNumber === RefDataMappingService.getItemId('PURCHASE_ORDER_NUMBER')){\r\n $scope.order.service.items[i].referenceNumbers[j].sortOrder = 0;\r\n itemHasPoRef = true;\r\n } else {\r\n $scope.order.service.items[i].referenceNumbers[j].sortOrder = 1;\r\n }\r\n }\r\n if(!itemHasPoRef){\r\n var poRefNum = {\r\n referenceNumberType: {\r\n description: $filter('translate')('PO_POUND'),\r\n refDataNumber: RefDataMappingService.getItemId('PURCHASE_ORDER_NUMBER') },\r\n sortOrder: 0\r\n };\r\n\r\n $scope.order.service.items[i].referenceNumbers.push(poRefNum);\r\n }\r\n }\r\n }\r\n function setDDLValByRdn(category, tempCatRdn) {\r\n var tc = undefined;\r\n for (var i = 0 ; i < $scope.itemDdlRefData[category].length; i++) {\r\n if ($scope.itemDdlRefData[category][i].refDataNumber === tempCatRdn) {\r\n tc = $scope.itemDdlRefData[category][i];\r\n break;\r\n }\r\n }\r\n return tc;\r\n }\r\n\r\n function hydrateItem(item) {\r\n return ItemService.get({ itemId: item.itemId }, function (itemDetails) {\r\n if ($scope.isFlatbed) {\r\n itemDetails.temperatureCategoryRDN = RefDataMappingService.getItemId('DRY_TEMP_CATEGORY');\r\n } else {\r\n itemDetails.temperatureCategoryRDN = (!itemDetails.temperatureCategoryRDN)\r\n ? RefDataMappingService.getItemId('DRY_TEMP_CATEGORY')\r\n : itemDetails.temperatureCategoryRDN;\r\n }\r\n item.itemDetails = setDDLValByRdn('Packaging', itemDetails.packagingTypeRDN);\r\n itemDetails.commodity.sku = item.sku;\r\n return itemDetails;\r\n }).$promise;\r\n }\r\n $scope.onItemSelected = function (cmdty) {\r\n $scope.itemFilter = '';\r\n hydrateItem(cmdty).then(function (item) {\r\n item.isNew = true;\r\n setPreviousItemsTouched();\r\n setUnitsOfMeasurment(item);\r\n addDefaultItemPoRefNum(item);\r\n addDefaultStackable(item);\r\n $scope.order.service.items.push(item);\r\n setFocusToAddedItem();\r\n registerItem();\r\n ieSelectFix();\r\n });\r\n };\r\n $scope.addShipmentItem = function () {\r\n\r\n setPreviousItemsTouched();\r\n var item = {\r\n commodity: {}, referenceNumbers: [], equipmentLength: {},\r\n equipmentWidth: {}, equipmentHeight: {}, totalWeight: {},\r\n isNew: true,description: ''\r\n };\r\n item.temperatureCategoryRDN = RefDataMappingService.getItemId('DRY_TEMP_CATEGORY');\r\n setUnitsOfMeasurment(item);\r\n addDefaultItemPoRefNum(item);\r\n addDefaultStackable(item);\r\n $scope.order.service.items.push(item);\r\n setFocusToAddedItem();\r\n registerItem();\r\n angular.element('#itemSearchInput').val('');\r\n ieSelectFix();\r\n };\r\n function addSuggestedShipmentItem(suggestedItem) {\r\n $scope.itemFilter = '';\r\n suggestedItem.flatbed = {};\r\n hydrateItem(suggestedItem).then(function (itemDetail) {\r\n itemDetail.isNew = true;\r\n setPreviousItemsTouched();\r\n setUnitsOfMeasurment(itemDetail);\r\n addDefaultItemPoRefNum(itemDetail);\r\n addDefaultStackable(itemDetail);\r\n $scope.order.service.items.push(itemDetail);\r\n setFocusToAddedItem();\r\n registerItem();\r\n ieSelectFix();\r\n });\r\n }\r\n\r\n function addNewlyAddedItem(item) {\r\n item.commodityName = item.description;\r\n item.commodity = {};\r\n item.commodity.commodityName = item.description;\r\n item.commodity.isHot = item.isHot;\r\n item.quantity = item.qty;\r\n item.isNew = true;\r\n if (item.flatbed) {\r\n if (item.flatbed.tarp) {\r\n item.tarpTypeRDN = item.flatbed.tarp.refDataNumber;\r\n }\r\n if (item.flatbed.loading) {\r\n item.loadingTypeRDN = item.flatbed.loading.refDataNumber;\r\n }\r\n if (item.flatbed.equipment) {\r\n item.itemEquipmentRDN = item.flatbed.equipment.refDataNumber;\r\n }\r\n item.maxTrailerAge = item.flatbed.trailerage;\r\n item.requiredStrapsCount = item.flatbed.straps;\r\n item.requiredChainsCount = item.flatbed.chains;\r\n item.coilRacks = item.flatbed.coilRacks;\r\n item.lockBars = item.flatbed.locksbars;\r\n item.equipmentHeight = {\r\n value: item.flatbed.height,\r\n unitRDN: inUomRefNum\r\n };\r\n item.equipmentWidth = {\r\n value: item.flatbed.width,\r\n unitRDN: inUomRefNum\r\n };\r\n item.equipmentLength = {\r\n value: item.flatbed.length,\r\n unitRDN: ftUomRefNum\r\n };\r\n }\r\n if (item.freightClass) {\r\n item.freightClassRDN = item.freightClass.refDataNumber;\r\n }\r\n if (item.tempCategory) {\r\n item.temperatureCategoryRDN = item.tempCategory.refDataNumber;\r\n }\r\n if (item.packaging) {\r\n item.packagingTypeRDN = item.packaging.refDataNumber;\r\n }\r\n item.totalWeight = {\r\n value: item.weight,\r\n unitRDN: item.weightUom\r\n };\r\n if (item.poNum) {\r\n if (!item.referenceNumbers) {\r\n item.referenceNumbers = [];\r\n }\r\n item.referenceNumbers.push({\r\n value: item.poNum,\r\n referenceNumberType: {\r\n description: $filter('translate')('PO_POUND'),\r\n refDataNumber: RefDataMappingService.getItemId('PURCHASE_ORDER_NUMBER')\r\n }\r\n });\r\n } else {\r\n addDefaultItemPoRefNum(item);\r\n }\r\n item.totalPallets = item.pallets;\r\n item.totalPalletSpaces = item.palletSpaces;\r\n item.unitQuantity = item.qty;\r\n item.totalTrailerFeet = item.trailerFeet;\r\n $scope.itemFilter = '';\r\n setPreviousItemsTouched();\r\n item.freightClass = item.freightClass;\r\n setUnitsOfMeasurment(item);\r\n $scope.order.service.items.push(item);\r\n addDefaultStackable(item);\r\n setFocusToAddedItem();\r\n registerItem();\r\n ieSelectFix();\r\n $scope.orderDetailsForm.$setDirty();\r\n }\r\n function addDefaultStackable(item) {\r\n item.commodity.isStackable = null;\r\n item.isStackable = null;\r\n }\r\n function addDefaultItemPoRefNum(item) {\r\n if (!item.referenceNumbers) {\r\n item.referenceNumbers = [];\r\n }\r\n item.referenceNumbers.push({\r\n referenceNumberType: {\r\n description: $filter('translate')('PO_POUND'),\r\n refDataNumber: RefDataMappingService.getItemId('PURCHASE_ORDER_NUMBER')\r\n }\r\n });\r\n }\r\n $scope.findRdnByValue = function(category, value){\r\n if(!angular.isDefined(category) || !angular.isDefined(value)){\r\n return;\r\n }\r\n return _.find($scope.refDataDDLs[category], function(x){\r\n if(!angular.isDefined(x.refDataCode)){\r\n return false;\r\n }\r\n return x.refDataCode.toUpperCase() === value.toUpperCase()\r\n });\r\n };\r\n $scope.addDrawItem = function(){\r\n var modalInstance = $uibModal.open({\r\n templateUrl: '../app/addItemModals/views/addDraw.tpl.html',\r\n size: 'lg',\r\n controller: 'AddDrawController',\r\n backdrop: 'static',\r\n resolve: {\r\n user: function () {\r\n return $scope.user;\r\n },\r\n preferences: function () {\r\n return $scope.userPreferences;\r\n },\r\n customer: function () {\r\n return $scope.order.customerInfo.customer;\r\n },\r\n refDataDDLs: function() { return $scope.refDataDDLs; }\r\n }\r\n });\r\n modalInstance.result.then(function (item) {\r\n var packaging = $scope.findRdnByValue('Packaging', item.outerPackType);\r\n var freightClass = $scope.findRdnByValue('FreightClass', item.freightClass);\r\n var convertedItem = {\r\n purchaseOrderItemId: item.purchaseOrderItemId,\r\n commodity: { sku: item.sku, upc: item.upc, plu: item.plu },\r\n description: item.productName,\r\n totalWeight: {value: item.outerPackWeight,unitRdn: item.outerPackIsMetric ? RefDataMappingService.getItemId('KG_UOM') : RefDataMappingService.getItemId('LB_UOM')},\r\n unitQuantity: item.availableQuantity,\r\n purchaseOrderNumber: item.purchaseOrderNumber,\r\n lineItemNumber: item.lineItemNumber,\r\n lineItemId: item.lineItemId,\r\n totalInsuranceValue: item.innerPackTotalValue,\r\n flatbed: {},\r\n packagingTypeRDN: (packaging) ? packaging.refDataNumber : undefined,\r\n freightClassRDN: (freightClass) ? freightClass.refDataNumber : undefined\r\n };\r\n $scope.order.service.items.push(convertedItem);\r\n setFocusToAddedItem();\r\n registerItem();\r\n ieSelectFix();\r\n $scope.orderDetailsForm.$setDirty();\r\n }, function () {\r\n });\r\n };\r\n $scope.addCatalogShipmentItem = function () {\r\n if ($scope.isAddCatalogShipmentItem) return;\r\n\r\n $scope.isAddCatalogShipmentItem = true;\r\n\r\n var modalInstance = $uibModal.open({\r\n templateUrl: '../app/addItemModals/views/addItem.tpl.html',\r\n size: 'lg',\r\n controller: 'addItemController',\r\n backdrop: 'static',\r\n resolve: {\r\n itemDdlRefData: [\r\n 'RefDataMappingService', function (RefDataMappingService) {\r\n return RefDataMappingService.getRefDataCategoryDDLs();\r\n }\r\n ],\r\n showFlatbedAttributes: function () {\r\n return $scope.order.service.serviceOffering.id == 1482;\r\n },\r\n customer: function () {\r\n return $scope.order.customerInfo.customer;\r\n },\r\n user: function () {\r\n return $scope.user;\r\n },\r\n preferences: function () {\r\n return $scope.userPreferences;\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(function (suggestedItem) {\r\n\r\n $scope.isAddCatalogShipmentItem = false;\r\n\r\n if (!suggestedItem)\r\n return;\r\n\r\n if (suggestedItem.qty)\r\n addNewlyAddedItem(suggestedItem);\r\n else\r\n addSuggestedShipmentItem(suggestedItem);\r\n }, function () {\r\n\r\n $scope.isAddCatalogShipmentItem = false;\r\n });\r\n };\r\n\r\n $scope.getWeightUomTranslationByRefNum = function (weightUnitRDN, item) {\r\n if (typeof weightUnitRDN === 'undefined' || weightUnitRDN === null) {\r\n var weightUnitRDNFromItem = null;\r\n\r\n if (typeof item !== 'undefined' && item !== null) {\r\n weightUnitRDNFromItem = RefDataMappingService.getWeightUnitRDNFromItem(item);\r\n }\r\n\r\n if (weightUnitRDNFromItem !== null) {\r\n weightUnitRDN = weightUnitRDNFromItem;\r\n } else if (isMetric) {\r\n weightUnitRDN = RefDataMappingService.getItemId('KG_UOM');\r\n } else {\r\n weightUnitRDN = RefDataMappingService.getItemId('LB_UOM');\r\n }\r\n }\r\n\r\n var translation = RefDataMappingService.getUomTranslationByRefNum(weightUnitRDN);\r\n return translation;\r\n }\r\n\r\n $scope.getUomTranslationByRefNum = RefDataMappingService.getUomTranslationByRefNum;\r\n $scope.getItemId = RefDataMappingService.getItemId;\r\n\r\n function setPreviousItemsTouched() {\r\n angular.forEach($scope.order.service.items, $scope.setItemAsVisited);\r\n }\r\n function setFocusToAddedItem() {\r\n $timeout(function () {\r\n angular.element('.description-input').last().focus();\r\n }, 300);\r\n }\r\n function ieSelectFix() {\r\n // ie9 and older script\r\n if ($document.all && !$window.atob) {\r\n $timeout(function () {\r\n angular.element(\"select\").width(angular.element(\"select\").width());\r\n }, 300, false);\r\n }\r\n }\r\n\r\n $scope.removeItem = function (item) {\r\n var removed = false;\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'REMOVE',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_REMOVE_THIS_ITEM',\r\n bodyText: 'ALL_INFORMATION_ENTERED_FOR_THIS_ITEM_WILL_BE_REMO'\r\n };\r\n\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n angular.forEach($scope.order.service.items, function (itm, i) {\r\n if (!removed) {\r\n if (itm.$$hashKey === item.$$hashKey) {\r\n $scope.order.service.items.splice(i, 1);\r\n deregisterItem();\r\n removed = true;\r\n $scope.orderDetailsForm.$setDirty();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n };\r\n $scope.maxItemSearchResults = false;\r\n $scope.itemsNoResults = false;\r\n $scope.maxSearchResultLimit = 250;\r\n\r\n $scope.refreshSearchItems = function(search) {\r\n return ItemServiceHelper.searchHelper(search, $scope.order.customerInfo.customer, $scope);\r\n };\r\n\r\n $scope.showMaxItemSearchResults = function () {\r\n return $scope.maxItemSearchResults && angular.element('#itemSearchInput').val().length >= 2;\r\n };\r\n $scope.showNoResultsFound = function () {\r\n return $scope.itemsNoResults && !$scope.searchingItems && angular.element('#itemSearchInput').val().length >= 2;\r\n };\r\n\r\n $scope.setDropdownSize = FormService.setDropdownSize;\r\n\r\n var ftUomRefNum = RefDataMappingService.getItemId('FEET_UOM');\r\n var inUomRefNum = RefDataMappingService.getItemId('INCHES_UOM');\r\n\r\n var lbUomRefNum = RefDataMappingService.getItemId('LB_UOM');\r\n var kgUomRefNum = RefDataMappingService.getItemId('KG_UOM');\r\n\r\n function setUnitsOfMeasurment(item) {\r\n UnitsOfMeasurementService.setUnitsOfMeasurement(item, isMetric);\r\n }\r\n $scope.changeWeightUom = function (item, uom) {\r\n item.totalWeight.unitRDN = RefDataMappingService.getItemId(uom);\r\n $scope.summaryFieldUpdates.push(WEIGHT);\r\n $scope.orderDetailsForm.$setDirty();\r\n };\r\n\r\n $scope.refNumFilter = function(element){\r\n if(angular.isDefined(element.referenceNumberType) &&\r\n element.referenceNumberType.refDataNumber === RefDataMappingService.getItemId('PURCHASE_ORDER_NUMBER')){\r\n element.referenceNumberType.description = $filter('translate')('PO_POUND');\r\n }\r\n return true;\r\n };\r\n\r\n function registerItem() {\r\n $scope.itemSummary.lineItems += 1;\r\n $scope.$parent.updateSummary();\r\n }\r\n function deregisterItem() {\r\n $scope.itemSummary.lineItems -= 1;\r\n $scope.$parent.updateSummary();\r\n }\r\n }\r\n angular.module('NavisphereOnline').controller('itemEditController', itemEditController);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n itemDetailsController.$inject = ['$scope', '$filter', 'RefDataMappingService'];\r\n\r\n function itemDetailsController($scope, $filter, RefDataMappingService) {\r\n $scope.toggleItemDetails = function (item) {\r\n item.expanded = !item.expanded;\r\n };\r\n\r\n $scope.getPackagingByRefNum = function (refNum) {\r\n return RefDataMappingService.getDdlValueByCategoryAndRefNum('Packaging', refNum);\r\n };\r\n $scope.getDimensionsUOMByRefNum = function (refNum) {\r\n return RefDataMappingService.getUomTranslationByRefNum(refNum);\r\n }\r\n $scope.getTarpTypeByRefNum = function (refNum) {\r\n return RefDataMappingService.getDdlValueByCategoryAndRefNum('FBedTarpType', refNum);\r\n };\r\n $scope.getLoadingTypeByRefNum = function (refNum) {\r\n return RefDataMappingService.getDdlValueByCategoryAndRefNum('FBedLoadingType', refNum);\r\n };\r\n $scope.getEquipTypeByRefNum = function (refNum) {\r\n return RefDataMappingService.getDdlValueByCategoryAndRefNum('ItemEquipment', refNum);\r\n };\r\n $scope.getClassByRefNum = function (refNum) {\r\n return RefDataMappingService.getDdlValueByCategoryAndRefNum('FreightClass', refNum);\r\n };\r\n $scope.getTempCatByRefNum = function (refNum) {\r\n return RefDataMappingService.getDdlValueByCategoryAndRefNum('TemperatureSensitive', refNum);\r\n };\r\n $scope.getTempCategoryDisplay = function (item) {\r\n if (!item.temperatureCategoryRDN) {\r\n return '';\r\n }\r\n if (item.temperatureCategoryRDN === RefDataMappingService.getItemId('CUSTOM_TEMP_CATEGORY')) {\r\n return $filter('translate')('CUSTOM');\r\n }\r\n var tempCategoryDisplay = $scope.getTempCatByRefNum(item.temperatureCategoryRDN);\r\n if (item.commodity.requiredTemperatureLow !== null && item.commodity.requiredTemperatureHigh !== null\r\n && item.commodity.requiredTemperatureLow !== item.commodity.requiredTemperatureHigh && item.temperatureUomRDN) {\r\n tempCategoryDisplay += ' ' + item.commodity.requiredTemperatureLow + ' - '\r\n + item.commodity.requiredTemperatureHigh + ' '\r\n + $filter('translate')(RefDataMappingService.getUomTranslationByRefNum(item.temperatureUomRDN));\r\n }\r\n return tempCategoryDisplay;\r\n };\r\n $scope.displayFlatSpec = function (item) {\r\n return (item.tarpTypeRDN) || (item.loadingTypeRDN) || (item.itemEquipmentRDN)\r\n || (item.maxTrailerAge) || (item.requiredStrapsCount) || (item.requiredChainsCount)\r\n || (item.coilRacks) || (item.locksBars) || (item.owod) || (item.equipmentHeight && item.equipmentHeight.value)\r\n || (item.equipmentLength && item.equipmentLength.value) || (item.equipmentWidth && item.equipmentWidth.value);\r\n };\r\n $scope.getStackableDisplay = function(item) {\r\n if (item.commodity.isStackable) {\r\n return $filter('translate')('YES');\r\n } else {\r\n return $filter('translate')('NO');\r\n }\r\n }\r\n\r\n $scope.getUomTranslation = RefDataMappingService.getUomTranslationByRefNum;\r\n $scope.itemIsTempControlled = function (item) {\r\n if(!item.temperatureCategoryRDN){\r\n return false;\r\n }\r\n for (var i = 0; i < $scope.refDataDDLs['TemperatureSensitive'].length; i++) {\r\n if ($scope.refDataDDLs['TemperatureSensitive'][i].refDataNumber === item.temperatureCategoryRDN) {\r\n return item.temperatureCategoryRDN !== RefDataMappingService.getItemId('DRY_TEMP_CATEGORY');\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n $scope.refNumFilter = function(element){\r\n\r\n if(element.referenceNumberType.refDataNumber === RefDataMappingService.getItemId('PURCHASE_ORDER_NUMBER')){\r\n element.referenceNumberType.description = $filter('translate')('PO_POUND');\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('itemDetailsController', itemDetailsController);\r\n})();\r\n\n/*global moment */\r\n(function () {\r\n 'use strict';\r\n\r\n deliveryEditController.$inject = ['$scope', '$filter', '$uibModal', 'DateTimeService', '$locale', 'LocationService',\r\n 'AddressService', 'RefDataMappingService', 'UserPermissionService'];\r\n\r\n function deliveryEditController($scope, $filter, $uibModal, DateTimeService, $locale, LocationService,\r\n AddressService, RefDataMappingService, UserPermissionService) {\r\n\r\n $scope.deliveryLocationResults = [];\r\n $scope.getAddressLine1 = AddressService.GetAddressLine1;\r\n $scope.getAddressLine2 = AddressService.GetAddressLine2;\r\n $scope.getAddressLine3 = AddressService.GetAddressLine3;\r\n $scope.getAddressLine4 = AddressService.GetAddressLine4;\r\n\r\n $scope.earliestDateOptions ={\r\n showWeeks: false\r\n };\r\n\r\n $scope.latestDateOptions ={\r\n showWeeks: false\r\n };\r\n $scope.deliveryRefNum = getDeliveryRefNum();\r\n\r\n function getDeliveryRefNum(){\r\n if($scope.$parent.order.service.deliverTo.referenceNumbers){\r\n for(var i = 0; i < $scope.$parent.order.service.deliverTo.referenceNumbers.length; i++){\r\n if($scope.$parent.order.service.deliverTo.referenceNumbers[i].referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('DELIVERY_NUMBER')){\r\n return $scope.$parent.order.service.deliverTo.referenceNumbers[i];\r\n }\r\n }\r\n var deliveryRefNum = { referenceNumberType: {\r\n description: $filter('translate')('DELIVERY_POUND'),\r\n refDataNumber: RefDataMappingService.getCategoryId('DELIVERY_NUMBER') }};\r\n $scope.$parent.order.service.deliverTo.referenceNumbers.push(deliveryRefNum);\r\n return deliveryRefNum;\r\n }\r\n }\r\n $scope.refNumbFilter = function(element){\r\n return element != $scope.deliveryRefNum;\r\n };\r\n\r\n if ($scope.editAllowed('UPDATE_AVAILABLE_DELIVERY_DATE_TIME')) {\r\n $scope.earliestDateOptions.minDate = DateTimeService.getToday();\r\n $scope.earliestDateOptions.maxDate = DateTimeService.getDateTwoYearsFromNow();\r\n }\r\n\r\n if ($scope.editAllowed('UPDATE_DELIVERY_BY_DATE_TIME')) {\r\n $scope.latestDateOptions.minDate = DateTimeService.getToday();\r\n $scope.latestDateOptions.maxDate = DateTimeService.getDateTwoYearsFromNow();\r\n }\r\n\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.ismeridian = $scope.$parent.userPreferences.timeFormat === '12';\r\n\r\n $scope.earliestDateDisabled = function (date, mode) {\r\n var now = Date.now();\r\n return mode === 'day' && (($scope.$parent.order.service.deliverTo && $scope.$parent.order.service.deliverTo.uiLatestDate\r\n && $scope.$parent.order.service.deliverTo.uiLatestDate <= date) || date < now\r\n || moment(date).diff(moment(now), 'years') >= 2);\r\n };\r\n\r\n $scope.latestDateDisabled = function (date, mode) {\r\n var now = Date.now();\r\n return mode === 'day' && (($scope.$parent.order.service.deliverTo && $scope.$parent.order.service.deliverTo.uiEarliestDate\r\n && $scope.$parent.order.service.deliverTo.uiEarliestDate >= date) || date < now\r\n || moment(date).diff(moment(now), 'years') >= 2);\r\n };\r\n\r\n $scope.earliestTimeChanged = function (value) {\r\n if (value === null) {\r\n $scope.$parent.order.service.deliverTo.uiEarliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n };\r\n\r\n $scope.latestTimeChanged = function (value) {\r\n if (value === null) {\r\n $scope.$parent.order.service.deliverTo.uiLatestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n };\r\n\r\n $scope.hstep = 1;\r\n $scope.mstep = 15;\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole($scope.order.customerInfo.customer.partyCode, 'Add New Location');\r\n $scope.openEarliestDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.earliestDateOpened = true;\r\n };\r\n\r\n\r\n $scope.openLatestDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.latestDateOpened = true;\r\n };\r\n $scope.addNewLocation = function () {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: '../app/addLocationModals/views/addLocation.tpl.html',\r\n size: 'lg',\r\n controller: 'addLocationController',\r\n backdrop: 'static',\r\n resolve: {\r\n customer: function () {\r\n return ($scope.order.customerInfo && $scope.order.customerInfo.customer)\r\n ? $scope.order.customerInfo.customer.partyCode : '';\r\n },\r\n locationType: function() {\r\n if($scope.$parent.deliveryNeedsRefinement){\r\n return \"delivery\";\r\n }\r\n return \"\";\r\n },\r\n supplier: function () {\r\n return (angular.isDefined($scope.user) && angular.isDefined($scope.user.supplierPartyCode)\r\n && angular.isDefined($scope.order.customerInfo) && angular.isDefined($scope.order.customerInfo.customer)\r\n && $scope.order.customerInfo.customer.useSupplierLocation)\r\n ? $scope.user.supplierPartyCode\r\n : undefined;\r\n }\r\n }\r\n });\r\n modalInstance.result.then(function (newLocation) {\r\n $scope.$parent.order.deliveryHasNoResults = false;\r\n $scope.$parent.order.service.deliverTo.location = newLocation;\r\n $scope.$parent.order.service.deliverTo.address = newLocation.physicalAddress;\r\n $scope.$parent.order.service.deliverTo.uiEarliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n $scope.$parent.order.service.deliverTo.uiLatestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n $scope.deliveryForm.$setDirty();\r\n }, function () {\r\n });\r\n };\r\n $scope.$watch('$parent.order.service.deliverTo.uiEarliestDate', function (newValue) {\r\n if ($scope.editAllowed('UPDATE_DELIVERY_BY_DATE_TIME') && newValue) {\r\n $scope.latestDateOptions.minDate = newValue > DateTimeService.getToday() ? newValue: $scope.latestDateOptions.minDate;\r\n if ($scope.$parent.order.service.deliverTo.uiLatestDate) {\r\n if ($scope.$parent.order.service.deliverTo.uiLatestDate < newValue) {\r\n $scope.$parent.order.service.deliverTo.uiLatestDate = newValue;\r\n }\r\n }\r\n }\r\n if ($scope.order.service.deliverTo && $scope.order.service.deliverTo.location && newValue\r\n && $scope.$parent.order.service.deliverTo.location.dryReceivingHours) {\r\n var shippingHours = $scope.$parent.order.service.deliverTo.location.dryReceivingHours;\r\n var day = newValue.getDay();\r\n var dayName = DateTimeService.getWeekDayName(day);\r\n var dayClosedKey = dayName + 'Closed';\r\n var dayOpenTimeKey = dayName + 'OpenTime';\r\n var dayCloseTimeKey = dayName + 'CloseTime';\r\n if (shippingHours[dayClosedKey]) {\r\n return;\r\n }\r\n if (shippingHours[dayOpenTimeKey]&& $scope.$parent.order.service.deliverTo.uiEarliestTime && $scope.$parent.order.service.deliverTo.uiEarliestTime.getTime() === (new Date((new Date()).setHours(0, 0, 0, 0))).getTime()) {\r\n var openTime = new Date(shippingHours[dayOpenTimeKey]);\r\n $scope.$parent.order.service.deliverTo.uiEarliestTime = openTime;\r\n }\r\n if (shippingHours[dayCloseTimeKey]&& $scope.$parent.order.service.deliverTo.uiLatestTime && $scope.$parent.order.service.deliverTo.uiLatestTime.getTime() === (new Date((new Date()).setHours(0, 0, 0, 0))).getTime()) {\r\n var closeTime = new Date(shippingHours[dayCloseTimeKey]);\r\n $scope.$parent.order.service.deliverTo.uiLatestTime = closeTime;\r\n }\r\n }\r\n });\r\n\r\n $scope.refreshDeliveryLocations = function (searchText) {\r\n if (searchText.length < 2) {\r\n $scope.$parent.order.deliveryHasNoResults = false;\r\n return [];\r\n }\r\n $scope.deliveryLocationResults = [];\r\n return LocationService.searchPartyLocation({\r\n partyNumberOrCode: $scope.order.customerInfo.customer.partyCode.replace(/^\\s+|\\s+$/gm, ''),\r\n term: searchText,\r\n locationSearchType: 2,\r\n limit: 100,\r\n useSupplierLocation: $scope.order.customerInfo.customer.useSupplierLocation\r\n }, function (data) {\r\n $scope.deliveryLocationResults = data.items;\r\n $scope.$parent.order.deliveryHasNoResults = (data.items.length === 0) ? true : false;\r\n });\r\n };\r\n\r\n $scope.onDeliverySelected = function (item) {\r\n\r\n $scope.$parent.order.deliveryHasNoResults = false;\r\n $scope.$parent.order.service.deliverTo.uiEarliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n $scope.$parent.order.service.deliverTo.uiLatestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n\r\n LocationService.getLocation({\r\n locationPartyNumberOrCode: item.locationPartyCode,\r\n relatedLocationId: item.relatedLocationId,\r\n useSupplierLocation: $scope.order.customerInfo.customer.useSupplierLocation\r\n }, function (data) {\r\n $scope.$parent.order.service.deliverTo.address = data.physicalAddress;\r\n $scope.$parent.order.service.deliverTo.location = data;\r\n $scope.$parent.order.service.deliverTo.dropLocationNumber = item.dropLocationNumber;\r\n $scope.$parent.order.service.deliverTo.pickLocationNumber = item.pickLocationNumber;\r\n if (data.notes) {\r\n $scope.$parent.order.service.deliverTo.specialInstructions = data.notes.substring(0, 255);\r\n } else {\r\n $scope.$parent.order.service.deliverTo.specialInstructions = '';\r\n }\r\n\r\n if ($scope.$parent.order.service.deliverTo\r\n && $scope.$parent.order.service.deliverTo.location\r\n && $scope.$parent.order.service.deliverTo.location.dryReceivingHours\r\n && $scope.$parent.order.service.deliverTo.uiEarliestDate) {\r\n\r\n var dryReceivingHours = $scope.$parent.order.service.deliverTo.location.dryReceivingHours;\r\n var day = $scope.$parent.order.service.deliverTo.uiEarliestDate.getDay();\r\n var dayName = DateTimeService.getWeekDayName(day);\r\n var dayClosedKey = dayName + 'Closed';\r\n var dayOpenTimeKey = dayName + 'OpenTime';\r\n var dayCloseTimeKey = dayName + 'CloseTime';\r\n if (dryReceivingHours[dayClosedKey]) {\r\n return;\r\n }\r\n if (dryReceivingHours[dayOpenTimeKey]) {\r\n var openTime = new Date(dryReceivingHours[dayOpenTimeKey]);\r\n $scope.$parent.order.service.deliverTo.uiEarliestTime = openTime;\r\n }\r\n if (dryReceivingHours[dayCloseTimeKey]) {\r\n var closeTime = new Date(dryReceivingHours[dayCloseTimeKey]);\r\n $scope.$parent.order.service.deliverTo.uiLatestTime = closeTime;\r\n }\r\n }\r\n });\r\n var cCode = ($scope.order.customerInfo && $scope.order.customerInfo.customer)\r\n ? $scope.order.customerInfo.customer.partyCode : '';\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('deliveryEditController', deliveryEditController);\r\n})();\r\n\n(function () {\r\n\r\n 'use strict';\r\n\r\n deliveryDetailsController.$inject = ['$scope', '$filter', '$uibModal', 'AddressService', 'DateTimeService',\r\n 'RefDataMappingService'];\r\n\r\n function deliveryDetailsController($scope, $filter, $uibModal, AddressService, DateTimeService,\r\n RefDataMappingService) {\r\n\r\n $scope.getAddressLine3 = AddressService.GetAddressLine3;\r\n $scope.getAddressLine4 = AddressService.GetAddressLine4\r\n $scope.userPreferences = $scope.$parent.userPreferences;\r\n\r\n if ($scope.$parent.order.service.deliverTo) {\r\n if ($scope.$parent.order.service.deliverTo.earliestDate) {\r\n var earliestDate = $scope.$parent.order.service.deliverTo.earliestDate.utcDateTime;\r\n $scope.$parent.order.service.deliverTo.uiEarliestDate = DateTimeService.getRawDateTime(earliestDate);\r\n }\r\n if ($scope.$parent.order.service.deliverTo.earliestTime) {\r\n var earliestTime = $scope.$parent.order.service.deliverTo.earliestTime.utcDateTime;\r\n $scope.$parent.order.service.deliverTo.uiEarliestTime = DateTimeService.getRawDateTime(earliestTime);\r\n } else {\r\n $scope.$parent.order.service.deliverTo.uiEarliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n if ($scope.$parent.order.service.deliverTo.latestDate) {\r\n var latestDate = $scope.$parent.order.service.deliverTo.latestDate.utcDateTime;\r\n $scope.$parent.order.service.deliverTo.uiLatestDate = DateTimeService.getRawDateTime(latestDate);\r\n }\r\n if ($scope.$parent.order.service.deliverTo.latestTime) {\r\n var latestTime = $scope.$parent.order.service.deliverTo.latestTime.utcDateTime;\r\n $scope.$parent.order.service.deliverTo.uiLatestTime = DateTimeService.getRawDateTime(latestTime);\r\n } else {\r\n $scope.$parent.order.service.deliverTo.uiLatestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n }\r\n\r\n $scope.refNumberFilter = function(element){\r\n\r\n if(element.referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('DELIVERY_NUMBER')){\r\n element.referenceNumberType.description = $filter('translate')('DELIVERY_POUND');\r\n }\r\n\r\n return true;\r\n };\r\n\r\n $scope.deliveryWarehouseDetails = function (locationDetail, displayDryHours) {\r\n var locationInfo = {\r\n location: locationDetail,\r\n displayDryHours: displayDryHours,\r\n useReceivingHours: true\r\n };\r\n\r\n $uibModal.open({\r\n templateUrl: '../app/orderDetails/views/warehouseDetails.tpl.html',\r\n size: 'md',\r\n controller: 'warehouseDetailsController',\r\n resolve: {\r\n userPreference: function () {\r\n return $scope.$parent.userPreferences;\r\n },\r\n warehouseDetails: function () { return locationInfo; }\r\n }\r\n });\r\n };\r\n\r\n $scope.getDisplayDateTime = DateTimeService.getDisplayDateTime;\r\n }\r\n angular.module('NavisphereOnline').controller('deliveryDetailsController', deliveryDetailsController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n chargesDetailsController.$inject = ['$scope', 'RefDataMappingService', '$filter'];\r\n\r\n function chargesDetailsController($scope, RefDataMapping, $filter) {\r\n //can't just use total > 0 to determine if charges exist for a financial type\r\n //since 0 is apparently a valid charge... have mercy on our souls...\r\n $scope.freightTotal = 0;\r\n $scope.freightChargesExist = false;\r\n $scope.baselineTotal = 0;\r\n $scope.baselineChargesExist = false;\r\n $scope.customerTotal = 0;\r\n $scope.customerChargesExist = false;\r\n $scope.chargesDisplay = [];\r\n function createChargesDisplayList(){\r\n var lineHaulPlaced = false;\r\n if(angular.isDefined($scope.order.charges)) {\r\n for (var i = 0; i < $scope.order.charges.length; i++) {\r\n var chargePlaced = false;\r\n for (var j = 0; j < $scope.chargesDisplay.length; j++) {\r\n if ($scope.order.charges[i].rateDescription === $scope.chargesDisplay[j].rateDescription) {\r\n if (fillChargesDisplayFinancialTypeVacancy($scope.chargesDisplay[j], $scope.order.charges[i])) {\r\n chargePlaced = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!chargePlaced) {\r\n var newChargesDisplay = createChargesDisplay($scope.order.charges[i]);\r\n if (angular.isDefined(newChargesDisplay)) {\r\n if (!lineHaulPlaced && newChargesDisplay.rateCodeRDN === RefDataMapping.getItemId('LINE_HAUL')) {\r\n $scope.chargesDisplay.unshift(newChargesDisplay);\r\n } else {\r\n $scope.chargesDisplay.push(newChargesDisplay);\r\n }\r\n }\r\n }\r\n setHeaderLabel($scope.order.charges[i]);\r\n }\r\n }\r\n }\r\n createChargesDisplayList();\r\n function setHeaderLabel(charge){\r\n switch(charge.financialTypeRDN) {\r\n case RefDataMapping.getItemId('FREIGHT_CHARGES'):\r\n if(angular.isUndefined($scope.freightHeader)){\r\n $scope.freightHeader = $filter('translate')('FREIGHT_CHARGES') + ' (' + RefDataMapping.getItemByRefNum(charge.currencyCodeRDN) + ')';\r\n }\r\n break;\r\n case RefDataMapping.getItemId('CUSTOMER_CHARGES'):\r\n if(angular.isUndefined($scope.customerHeader)){\r\n $scope.customerHeader = $filter('translate')('END_CUSTOMER_CHARGES') + ' (' + RefDataMapping.getItemByRefNum(charge.currencyCodeRDN) + ')';\r\n }\r\n break;\r\n case RefDataMapping.getItemId('BASELINE_CHARGES'):\r\n if(angular.isUndefined($scope.baselineHeader)){\r\n $scope.baselineHeader = $filter('translate')('BASELINE_CHARGES') + ' (' + RefDataMapping.getItemByRefNum(charge.currencyCodeRDN) + ')';\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n function createChargesDisplay(charge){\r\n switch(charge.financialTypeRDN) {\r\n case RefDataMapping.getItemId('FREIGHT_CHARGES'):\r\n $scope.freightTotal += charge.amount;\r\n $scope.freightChargesExist = true;\r\n return { rateDescription: charge.rateDescription, freightCharge: charge.amount, rateCodeRDN: charge.rateCodeRDN};\r\n case RefDataMapping.getItemId('CUSTOMER_CHARGES'):\r\n $scope.customerTotal += charge.amount;\r\n $scope.customerChargesExist = true;\r\n return { rateDescription: charge.rateDescription, customerCharge: charge.amount, rateCodeRDN: charge.rateCodeRDN};\r\n case RefDataMapping.getItemId('BASELINE_CHARGES'):\r\n $scope.baselineTotal += charge.amount;\r\n $scope.baselineChargesExist = true;\r\n return { rateDescription: charge.rateDescription, baselineCharge: charge.amount, rateCodeRDN: charge.rateCodeRDN};\r\n default:\r\n break;\r\n }\r\n }\r\n function fillChargesDisplayFinancialTypeVacancy(chargesDisplay, charge){\r\n switch(charge.financialTypeRDN) {\r\n case RefDataMapping.getItemId('FREIGHT_CHARGES'):\r\n if(angular.isUndefined(chargesDisplay.freightCharge)) {\r\n chargesDisplay.freightCharge = charge.amount;\r\n $scope.freightTotal += charge.amount;\r\n $scope.freightChargesExist = true;\r\n return true;\r\n }\r\n return false;\r\n case RefDataMapping.getItemId('CUSTOMER_CHARGES'):\r\n if(angular.isUndefined(chargesDisplay.customerCharge)) {\r\n chargesDisplay.customerCharge = charge.amount;\r\n $scope.customerTotal += charge.amount;\r\n $scope.customerChargesExist = true;\r\n return true;\r\n }\r\n return false;\r\n case RefDataMapping.getItemId('BASELINE_CHARGES'):\r\n if(angular.isUndefined(chargesDisplay.baselineCharge)) {\r\n chargesDisplay.baselineCharge = charge.amount;\r\n $scope.baselineTotal += charge.amount;\r\n $scope.baselineChargesExist = true;\r\n return true;\r\n }\r\n return false;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n angular.module('NavisphereOnline').controller('chargesDetailsController', chargesDetailsController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n orderEditConfirmationController.$inject = ['$scope', '$state', 'orderNumber', '$window'];\r\n\r\n function orderEditConfirmationController($scope, $state, orderNumber, $window) {\r\n\r\n $scope.isGettingOrderNumber = false;\r\n $scope.orderNumber = orderNumber;\r\n\r\n $scope.createNewOrder = function () {\r\n $window.location.href = '/orders/#/create';\r\n };\r\n\r\n $scope.returnToDash = function () {\r\n $state.go('app.dashboard');\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('orderEditConfirmationController', orderEditConfirmationController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n orderConfirmationController.$inject = ['$scope', '$state', '$uibModal', '$filter', '$window', 'bolContext', 'API_BASE_URL',\r\n 'UserPermissionService', 'OrderService', 'OrderConfirmationService', 'DocumentHelper', 'ModeTranslatorService', 'WindowLocationHref'];\r\n function orderConfirmationController($scope, $state, $uibModal, $filter, $window, bolContext, API_BASE_URL,\r\n UserPermissionService, OrderService, OrderConfirmationService, DocumentHelper, ModeTranslatorService, WindowLocationHref) {\r\n var validationMessages = [];\r\n $scope.isGettingOrderNumber = false;\r\n var confirmation = OrderConfirmationService.getConfirmation();\r\n var order = OrderConfirmationService.getOrder();\r\n var summary = OrderConfirmationService.getSummary();\r\n var preferences = OrderConfirmationService.getPreferences();\r\n if (!confirmation || !order || !summary) {\r\n $state.go('app.dashboard');\r\n } else {\r\n bindOrderConfirmationDetails();\r\n }\r\n function bindOrderConfirmationDetails(){\r\n var hasViewBOLRole = UserPermissionService.hasCustomerRole(order.customer.partyCode.replace(/^\\s+|\\s+$/gm, ''), \"View BOL\");\r\n var hasOrderBOLContext = order.customer.bolContext === bolContext.Order;\r\n $scope.confirmationNumber = confirmation.confirmationNumber;\r\n $scope.trackingNumber = confirmation.trackingNumber;\r\n $scope.showBOLLink = hasViewBOLRole && hasOrderBOLContext;\r\n \r\n $scope.accountName = order.customer.name;\r\n\r\n //This is for the case that we are coming from Quote To Order.\r\n if(!order.serviceOffering.displayKey){\r\n order.serviceOffering.displayKey = ModeTranslatorService.orderTransportModeIdMap[order.serviceOffering.id];\r\n }\r\n\r\n $scope.showLTLMessage = (order.serviceOffering.displayKey === \"LTL\");\r\n $scope.shippingMethod = $filter('translate')(order.serviceOffering.displayKey);\r\n $scope.shippingMethodIcon = setShippingMethodIcon();\r\n $scope.pickName = order.pickup.addressName ? order.pickup.addressName : order.pickup.locationPartyName;\r\n $scope.pickEarliestDisplay = getDateTimeDisplay(order.pickup.earliestDate, order.pickup.earliestTime, true);\r\n $scope.pickLatestDisplay = getDateTimeDisplay(order.pickup.latestDate, order.pickup.latestTime, false);\r\n $scope.deliveryName = order.delivery.addressName ? order.delivery.addressName : order.delivery.locationPartyName;\r\n $scope.deliveryEarliestDisplay = getDateTimeDisplay(order.delivery.earliestDate, order.delivery.earliestTime, true);\r\n $scope.deliveryLatestDisplay = getDateTimeDisplay(order.delivery.latestDate, order.delivery.latestTime, false);\r\n $scope.totalItems = $filter('translate')('TOTAL_ITEMS') + ': ' + summary.lineItems;\r\n $scope.quantity = $filter('translate')('QUANTITY') + ': ' + summary.quantity;\r\n $scope.weight = $filter('translate')('WEIGHT') + ': ' + summary.weight + ' ';\r\n $scope.weight += preferences.unitOfMeasure === 'metric' ? $filter('translate')('KG_UOM') : $filter('translate')('LB_UOM');\r\n $scope.value = $filter('translate')('VALUE') + ': ' + summary.insuranceValue;\r\n $scope.pallets = $filter('translate')('PALLETS') + ': ' + summary.pallets;\r\n }\r\n function getDateTimeDisplay(date, time, isEarliest){\r\n if(date) {\r\n var display = $filter('date')(date, 'shortDate');\r\n if(time){\r\n display += ' ';\r\n display += (isEarliest) ? $filter('translate')('AFTER') : $filter('translate')('BEFORE');\r\n display += ' ';\r\n display += $filter('time')({ userPreferences: preferences, date: time });\r\n return display;\r\n }\r\n }\r\n return null;\r\n }\r\n function setShippingMethodIcon(){\r\n switch(order.serviceOffering.displayKey){\r\n case 'TRUCKLOAD':\r\n return '#icon-truckload';\r\n case 'FLATBED':\r\n return '#icon-flatbed';\r\n case 'LTL':\r\n return '#icon-ltl';\r\n case 'BULK':\r\n return '#icon-bulk';\r\n case 'INTERMODAL':\r\n return '#icon-intermodal';\r\n case 'CONSOLIDATED':\r\n return '#icon-consolidated';\r\n case 'AIR':\r\n return '#icon-airplane';\r\n default:\r\n return '#icon-truckload';\r\n }\r\n }\r\n\r\n $scope.viewBol = function () {\r\n DocumentHelper.showDocument(API_BASE_URL + 'api/documents/bol' + '?confirmationNumber=' + encodeURIComponent($scope.confirmationNumber.replace(/[^0-9]+/g, '')));\r\n };\r\n\r\n $scope.viewOrderDetails = function () {\r\n\r\n if ($scope.isGettingOrderNumber) {\r\n return;\r\n }\r\n\r\n $scope.isGettingOrderNumber = true;\r\n\r\n $scope.loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () {\r\n return $filter('translate')('GETTING_ORDER_DETAILS');\r\n }\r\n }\r\n });\r\n\r\n OrderService.getOrderNumber({\r\n confirmationNumber: $scope.confirmationNumber ? $scope.confirmationNumber : null\r\n }, function (result) {\r\n\r\n $scope.loadingModal.close(result);\r\n $scope.isGettingOrderNumber = false;\r\n\r\n\r\n if (result.success\r\n && result.orderNumber\r\n && result.orderNumber !== 0) {\r\n\t\t\t\t\t\tvar redirectUrl = appConfig.ordersUIBaseUrl + '/#/detail/' + result.orderNumber;\r\n\t\t\t\t\t\tWindowLocationHref.setWindowLocationHref(redirectUrl);\r\n } else {\r\n angular.forEach(result.errors, function (error) {\r\n validationMessages.push($filter('translate')(error.errorMessage));\r\n });\r\n showValidationError();\r\n }\r\n\r\n }, function (result) {\r\n\r\n $scope.loadingModal.close(result);\r\n $scope.isGettingOrderNumber = false;\r\n\r\n validationMessages.push($filter('translate')('Could not find your order'));\r\n showValidationError();\r\n });\r\n };\r\n $scope.sendTrackingModal = function(){\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendTracking.tpl.html',\r\n size: 'lg',\r\n controller: 'sendTrackingController',\r\n resolve: {\r\n trackingNumber: function () {\r\n return $scope.trackingNumber;\r\n },\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n });\r\n };\r\n $scope.createNewOrder = function () {\r\n $window.location.href = '/orders/#/create';\r\n };\r\n $scope.returnToDash = function () {\r\n $state.go('app.dashboard');\r\n };\r\n\r\n function showValidationError() {\r\n $uibModal.open({\r\n templateUrl: 'app/validationModal/validationModal.tpl.html',\r\n size: 'lg',\r\n controller: 'validationModalController',\r\n resolve: {\r\n validations: function () {\r\n return validationMessages;\r\n },\r\n title: function () {\r\n return $filter('translate')('Error with finding your order details');\r\n }\r\n }\r\n\r\n }).result.then(function () {\r\n validationMessages = [];\r\n $scope.isGettingOrderNumber = false;\r\n }, function () {\r\n validationMessages = [];\r\n $scope.isGettingOrderNumber = false;\r\n });\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('orderConfirmationController', orderConfirmationController);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n ValidationErrorService.$inject = [\"$filter\", \"$uibModal\"]\r\n\r\n function ValidationErrorService($filter, $uibModal) {\r\n this.showValidationError = function($scope) {\r\n $uibModal.open({\r\n templateUrl: 'app/validationModal/validationModal.tpl.html',\r\n size: 'lg',\r\n controller: 'validationModalController',\r\n resolve: {\r\n validations: function () { return $scope.validationMessages; },\r\n title: function () { return $filter('translate')('WE_WERE_NOT_ABLE_TO_PROCESS_YOUR_ORDER_PLEASE_RESO'); }\r\n }\r\n }).result.then(function () {\r\n $scope.validationMessages = [];\r\n $scope.submittingOrder = false;\r\n }, function () {\r\n $scope.validationMessages = [];\r\n $scope.submittingOrder = false;\r\n });\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"ValidationErrorService\", ValidationErrorService);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n UnitsOfMeasurementService.$inject = [\"$filter\", \"RefDataMappingService\"];\r\n\r\n function UnitsOfMeasurementService($filter, RefDataMappingService) {\r\n var ftUomRefNum = RefDataMappingService.getItemId('FEET_UOM');\r\n var ftUom = $filter('translate')('FEET_UOM');\r\n var inUomRefNum = RefDataMappingService.getItemId('INCHES_UOM');\r\n var inUom = $filter('translate')('INCHES_UOM');\r\n var mUomRefNum = RefDataMappingService.getItemId('METERS_UOM');\r\n var mUom = $filter('translate')('METERS_UOM');\r\n var cmUomRefNum = RefDataMappingService.getItemId('CENTIMETERS_UOM');\r\n var cmUom = $filter('translate')('CENTIMETERS_UOM');\r\n var lbUomRefNum = RefDataMappingService.getItemId('LB_UOM');\r\n var lbUom = $filter('translate')('LB_UOM');\r\n var kgUomRefNum = RefDataMappingService.getItemId('KG_UOM');\r\n var kgUom = $filter('translate')('KG_UOM');\r\n\r\n /**\r\n * @param input {array|object} An item or an array of items\r\n */\r\n this.setUnitsOfMeasurement = function(input, isMetric) {\r\n if (_.isArray(input)) {\r\n _.forEach(input, function(item) {\r\n set(item, isMetric);\r\n })\r\n } else {\r\n set(input, isMetric);\r\n }\r\n };\r\n\r\n function set(item, isMetric) {\r\n if (!item.flatbed) {\r\n item.flatbed = {}\r\n }\r\n\r\n if (!item.flatbed.lengthUom) {\r\n if (!isMetric) {\r\n item.flatbed.lengthUom = ftUomRefNum;\r\n item.flatbed.lengthUomLabel = ftUom;\r\n item.flatbed.lengthInUom = inUomRefNum;\r\n item.flatbed.lengthInUomLabel = inUom;\r\n item.flatbed.widthUom = inUomRefNum;\r\n item.flatbed.widthUomLabel = inUom;\r\n item.flatbed.heightUom = inUomRefNum;\r\n item.flatbed.heightUomLabel = inUom;\r\n } else {\r\n item.flatbed.lengthUom = mUomRefNum;\r\n item.flatbed.lengthUomLabel = mUom;\r\n item.flatbed.lengthInUom = cmUomRefNum;\r\n item.flatbed.lengthInUomLabel = cmUom;\r\n item.flatbed.widthUom = cmUomRefNum;\r\n item.flatbed.widthUomLabel = cmUom;\r\n item.flatbed.heightUom = cmUomRefNum;\r\n item.flatbed.heightUomLabel = cmUom;\r\n }\r\n }\r\n if(item.unitLength) {\r\n if(item.unitLength.value === null && isMetric) {\r\n item.unitLength.unitRDN = cmUomRefNum;\r\n item.unitWidth.unitRDN = cmUomRefNum;\r\n item.unitHeight.unitRDN = cmUomRefNum;\r\n }\r\n else if(item.unitLength.value === null && !isMetric) {\r\n item.unitLength.unitRDN = inUomRefNum;\r\n item.unitWidth.unitRDN = inUomRefNum;\r\n item.unitHeight.unitRDN = inUomRefNum;\r\n }\r\n if (RefDataMappingService.getItemByRefNum(item.unitLength.unitRDN) === 'CENTIMETERS_UOM') {\r\n setAndNullifyUnused(item, true);\r\n }\r\n else if (RefDataMappingService.getItemByRefNum(item.unitLength.unitRDN) === 'INCHES_UOM') {\r\n setAndNullifyUnused(item, false);\r\n }\r\n }\r\n else {\r\n item.unitLength = {};\r\n item.unitWidth = {};\r\n item.unitHeight = {};\r\n if(isMetric) {\r\n item.unitLength.unitRDN = cmUomRefNum;\r\n item.unitWidth.unitRDN = cmUomRefNum;\r\n item.unitHeight.unitRDN = cmUomRefNum;\r\n setAndNullifyUnused(item, true);\r\n }\r\n else {\r\n item.unitLength.unitRDN = inUomRefNum;\r\n item.unitWidth.unitRDN = inUomRefNum;\r\n item.unitHeight.unitRDN = inUomRefNum;\r\n setAndNullifyUnused(item, false);\r\n }\r\n item.unitHeight.value=item.height;\r\n item.unitLength.value=item.length;\r\n item.unitWidth.value=item.width;\r\n }\r\n if (!item.weightUom || !item.weightUomLabel) {\r\n if (isMetric) {\r\n item.weightUom = kgUomRefNum;\r\n item.weightUomLabel = kgUom;\r\n } else {\r\n item.weightUom = lbUomRefNum;\r\n item.weightUomLabel = lbUom;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Attempting to avoid the case where metric and standard units of measure\r\n * are both set, resulting in both UoM being displayed.\r\n *\r\n * @param item\r\n * @param nullifyMetric\r\n */\r\n function nullifyUnusedUom(item, nullifyMetric) {\r\n if(nullifyMetric) {\r\n item.lengthCmUom = null;\r\n item.lengthCmUomLabel = null;\r\n item.widthCmUom = null;\r\n item.widthCmUomLabel = null;\r\n item.heightCmUom = null;\r\n item.heightCmUomLabel = null;\r\n }\r\n else if(!nullifyMetric) {\r\n item.lengthInUom = null;\r\n item.lengthInUomLabel = null;\r\n item.widthInUom = null;\r\n item.widthInUomLabel = null;\r\n item.heightInUom = null;\r\n item.heightInUomLabel = null;\r\n }\r\n }\r\n\r\n /**\r\n * Created for readability's sake, avoiding excessive repetition in set()\r\n * @param item\r\n * @param setMetric True to set metric UOM, false to set standard UOM.\r\n */\r\n function setAndNullifyUnused(item, setMetric) {\r\n if(!setMetric) {\r\n item.lengthInUom = inUomRefNum;\r\n item.lengthInUomLabel = inUom;\r\n item.widthInUom = inUomRefNum;\r\n item.widthInUomLabel = inUom;\r\n item.heightInUom = inUomRefNum;\r\n item.heightInUomLabel = inUom;\r\n nullifyUnusedUom(item, true);\r\n }\r\n else if(setMetric) {\r\n item.lengthCmUom = cmUomRefNum;\r\n item.lengthCmUomLabel = cmUom;\r\n item.widthCmUom = cmUomRefNum;\r\n item.widthCmUomLabel = cmUom;\r\n item.heightCmUom = cmUomRefNum;\r\n item.heightCmUomLabel = cmUom;\r\n nullifyUnusedUom(item, false);\r\n }\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"UnitsOfMeasurementService\", UnitsOfMeasurementService);\r\n})();\r\n\n(function () {\r\n\r\n 'use strict';\r\n\r\n orderTransformService.$inject = ['RefDataMappingService', 'ServiceOffering', 'UserPermissionService'];\r\n\r\n function orderTransformService(RefDataMappingService, ServiceOffering, UserPermissionService) {\r\n\r\n var mapReferenceNumbers = function(customerOrder, order){\r\n for (var t = 0; t < order.newRefNums.length; t++) {\r\n var refNum = order.newRefNums[t];\r\n if (refNum.value !== '') {\r\n if (refNum.referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('SHIPWITH_NUMBER')) {\r\n customerOrder.referenceNumbers.push(refNum);\r\n } else if (refNum.referenceNumberType.refDataNumber === order.customerInfo.customer.primaryCustomerReferenceNumTypeRDN) {\r\n customerOrder.customerInfo.referenceNumbers.push(refNum);\r\n } else if (refNum.referenceNumberType.refDataNumber === order.customerInfo.customer.primaryBillToReferenceNumTypeRDN) {\r\n if (customerOrder.billTos && customerOrder.billTos.length > 0) {\r\n customerOrder.billTos[0].referenceNumbers.push(refNum);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.getCustomerOrderSaveRequest = function (order) {\r\n var request = {};\r\n request.order = this.getCustomerOrder(order);\r\n return request;\r\n };\r\n\r\n this.getCustomerOrderUpdateRequest = function (order) {\r\n\r\n removeEmptyRefNums(order);\r\n\r\n var customerOrder = {\r\n customerOrderNumber: order.customerOrderNumber,\r\n customerOrderId: order.customerOrderId,\r\n confirmationNumber: order.confirmationNumber,\r\n conditionRDN: order.conditionRDN,\r\n referenceNumbers: order.referenceNumbers,\r\n customerInfo: order.customerInfo,\r\n billTos: order.billTos,\r\n status: order.status,\r\n services: [],\r\n createdViaPurchaseOrder: order.createdViaPurchaseOrder\r\n };\r\n var service = angular.copy(order.service);\r\n service.pickupFrom.earliestDate = { utcDateTime: order.service.pickupFrom.uiEarliestDate, offSet: order.service.pickupFrom.uiEarliestDate.getTimezoneOffset() }\r\n service.pickupFrom.latestDate = { utcDateTime: order.service.pickupFrom.uiLatestDate, offSet: order.service.pickupFrom.uiLatestDate.getTimezoneOffset() }\r\n service.deliverTo.earliestDate = { utcDateTime: order.service.deliverTo.uiEarliestDate, offSet: order.service.deliverTo.uiEarliestDate.getTimezoneOffset() }\r\n service.deliverTo.latestDate = { utcDateTime: order.service.deliverTo.uiLatestDate, offSet: order.service.deliverTo.uiLatestDate.getTimezoneOffset() }\r\n\r\n if (order.service.pickupFrom.uiEarliestTime) {\r\n service.pickupFrom.earliestTime = { utcDateTime: order.service.pickupFrom.uiEarliestTime, offSet: order.service.pickupFrom.uiEarliestTime.getTimezoneOffset() };\r\n }\r\n\r\n if (order.service.pickupFrom.uiLatestTime) {\r\n service.pickupFrom.latestTime = { utcDateTime: order.service.pickupFrom.uiLatestTime, offSet: order.service.pickupFrom.uiLatestTime.getTimezoneOffset() };\r\n }\r\n\r\n if (order.service.deliverTo.uiEarliestTime) {\r\n service.deliverTo.earliestTime = { utcDateTime: order.service.deliverTo.uiEarliestTime, offSet: order.service.deliverTo.uiEarliestTime.getTimezoneOffset() };\r\n }\r\n\r\n if (order.service.deliverTo.uiLatestTime) {\r\n service.deliverTo.latestTime = { utcDateTime: order.service.deliverTo.uiLatestTime, offSet: order.service.deliverTo.uiLatestTime.getTimezoneOffset() };\r\n }\r\n\r\n if (order.newRefNums) {\r\n mapReferenceNumbers(customerOrder, order)\r\n }\r\n customerOrder.services.push(service);\r\n return customerOrder;\r\n };\r\n\r\n this.getOrderForEdit = function (order, userPreferences) {\r\n\r\n var orderForEdit = {\r\n service: order.services[0],\r\n customerOrderNumber: order.customerOrderNumber,\r\n customerOrderId: order.customerOrderId,\r\n confirmationNumber: order.confirmationNumber,\r\n conditionRDN: order.conditionRDN,\r\n referenceNumbers: order.referenceNumbers,\r\n customerInfo: order.customerInfo,\r\n billTos: order.billTos,\r\n status: order.status,\r\n isMultiLeg: order.isMultiLeg,\r\n charges: order.charges || [],\r\n createdViaPurchaseOrder: order.createdViaPurchaseOrder\r\n };\r\n\r\n if (ServiceOffering.get(orderForEdit.service.serviceOffering.id).genericType === 'FLATBED') {\r\n for (var i = 0; i < orderForEdit.service.items.length; i++) {\r\n if (!orderForEdit.service.items[i].equipmentLength) {\r\n orderForEdit.service.items[i].equipmentLength = {\r\n unitRDN: (userPreferences.unitOfMeasure === 'standard')\r\n ? RefDataMappingService.getItemId('FEET_UOM')\r\n : RefDataMappingService.getItemId('CENTIMETERS_UOM')\r\n }\r\n }\r\n if (!orderForEdit.service.items[i].equipmentHeight) {\r\n orderForEdit.service.items[i].equipmentHeight = {\r\n unitRDN: (userPreferences.unitOfMeasure === 'standard')\r\n ? RefDataMappingService.getItemId('INCHES_UOM')\r\n : RefDataMappingService.getItemId('CENTIMETERS_UOM')\r\n }\r\n }\r\n if (!orderForEdit.service.items[i].equipmentWidth) {\r\n orderForEdit.service.items[i].equipmentWidth = {\r\n unitRDN: (userPreferences.unitOfMeasure === 'standard')\r\n ? RefDataMappingService.getItemId('INCHES_UOM')\r\n : RefDataMappingService.getItemId('CENTIMETERS_UOM')\r\n }\r\n }\r\n }\r\n }\r\n return orderForEdit;\r\n };\r\n\r\n function removeEmptyRefNums(order) {\r\n\r\n removeItemsEmptyRefNums(order.customerInfo);\r\n removeItemsEmptyRefNums(order);\r\n removeBillToEmptyRefNums(order.billTos);\r\n removeServiceEmptyRefNums(order.service);\r\n }\r\n\r\n function removeServiceEmptyRefNums(service) {\r\n\r\n if (angular.isUndefined(service)) {\r\n return;\r\n }\r\n\r\n if (angular.isDefined(service.items)) {\r\n\r\n for (var i = 0; i < service.items.length; i++) {\r\n\r\n var item = service.items[i];\r\n\r\n removeItemsEmptyRefNums(item);\r\n }\r\n }\r\n\r\n if (angular.isDefined(service.pickupFrom)) {\r\n removeItemsEmptyRefNums(service.pickupFrom);\r\n }\r\n\r\n if (angular.isDefined(service.deliverTo)) {\r\n removeItemsEmptyRefNums(service.deliverTo);\r\n }\r\n }\r\n\r\n function removeBillToEmptyRefNums(billTos) {\r\n\r\n if (angular.isUndefined(billTos)) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < billTos.length; i++) {\r\n\r\n var billTo = billTos[i];\r\n\r\n removeItemsEmptyRefNums(billTo);\r\n }\r\n }\r\n\r\n function removeItemsEmptyRefNums(item) {\r\n\r\n if (angular.isUndefined(item) || angular.isUndefined(item.referenceNumbers)) {\r\n return;\r\n }\r\n\r\n for (var i = item.referenceNumbers.length - 1; i >= 0; i--) {\r\n if (angular.isUndefined(item.referenceNumbers[i].value) || item.referenceNumbers[i].value === '') {\r\n item.referenceNumbers.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n function getRefNumber(refNumbers, refDataNumber) {\r\n for (var i = 0; i < refNumbers.length; i++) {\r\n if (refNumbers[i].referenceNumberType.refDataNumber === refDataNumber) {\r\n return refNumbers[i].value;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n this.getCustomerOrder = function (order) {\r\n var items = getCustomerOrderItems(order.items, order.createdViaPurchaseOrder);\r\n var pickupNotes = order.pickup.notes;\r\n if (order.pickup.volumeQuoteId) {\r\n if (pickupNotes) {\r\n pickupNotes = order.pickup.volumeQuoteId + ' \\n' + pickupNotes;\r\n }\r\n else {\r\n pickupNotes = order.pickup.volumeQuoteId + ' \\n';\r\n }\r\n }\r\n var customerOrder = {\r\n services: [{\r\n serviceOffering: order.serviceOffering,\r\n pickupFrom: {\r\n address: order.pickup.address,\r\n location: order.pickup,\r\n pickLocationNumber: order.pickup.pickLocationNumber,\r\n dropLocationNumber: order.pickup.dropLocationNumber,\r\n referenceNumbers: [],\r\n specialInstructions: pickupNotes,\r\n earliestDate: {\r\n utcDateTime: order.pickup.earliestDate,\r\n offSet: order.pickup.earliestDate.getTimezoneOffset()\r\n },\r\n latestDate: {\r\n utcDateTime: order.pickup.latestDate,\r\n offSet: order.pickup.latestDate.getTimezoneOffset()\r\n },\r\n loadingTypeRDN: order.pickup.loadingType && order.pickup.loadingType.refDataNumber ? order.pickup.loadingType.refDataNumber : null\r\n },\r\n deliverTo: {\r\n address: order.delivery.address,\r\n location: order.delivery,\r\n pickLocationNumber: order.pickup.pickLocationNumber,\r\n dropLocationNumber: order.pickup.dropLocationNumber,\r\n referenceNumbers: [],\r\n specialInstructions: order.delivery.notes,\r\n earliestDate: {\r\n utcDateTime: order.delivery.earliestDate,\r\n offSet: order.delivery.earliestDate.getTimezoneOffset()\r\n },\r\n latestDate: {\r\n utcDateTime: order.delivery.latestDate,\r\n offSet: order.delivery.latestDate.getTimezoneOffset()\r\n },\r\n loadingTypeRDN: order.delivery.loadingType && order.delivery.loadingType.refDataNumber ? order.delivery.loadingType.refDataNumber : null\r\n },\r\n items: items,\r\n carrierCode: order.preferredCarrier ? order.preferredCarrier.carrierCode : null,\r\n carrierPartyNumber: order.preferredCarrier ? order.preferredCarrier.partyNumber : null,\r\n referenceNumbers: [],\r\n isTeam: order.isTeam\r\n }],\r\n charges: [],\r\n referenceNumbers: [],\r\n customerInfo: {\r\n customer: order.customer,\r\n referenceNumbers: []\r\n },\r\n billTos: [{\r\n customer: order.customer,\r\n referenceNumbers: [],\r\n ediFreightTermsRDN: order.createdViaPurchaseOrder ? RefDataMappingService.getCategoryId('FREIGHT_TERM_COLLECT') : null\r\n }],\r\n billToReferenceNumber: order.billToReferenceNumber,\r\n customerReferenceNumber: order.customerReferenceNumber,\r\n createdViaPurchaseOrder: order.createdViaPurchaseOrder,\r\n quoteRequestId: order.quoteRequestId\r\n };\r\n _.forEach(order.charges, function(charge) {\r\n var mappedCharge = {};\r\n\r\n if (order.currencyCode) {\r\n mappedCharge.currencyCode = order.currencyCode;\r\n } else {\r\n mappedCharge.currencyCode = \"USD\";\r\n }\r\n\r\n mappedCharge.rateQuantity = charge.quantity ? charge.quantity : 1;;\r\n mappedCharge.amount = charge.totalRate;\r\n\r\n var convertedRateTypeRDN = convertRateTypeCodeToRDN(charge.rateTypeCode);\r\n mappedCharge.rateTypeRDN = convertedRateTypeRDN != 0 ? convertedRateTypeRDN : charge.rateEntryType;\r\n mappedCharge.rate = charge.unitRate;\r\n mappedCharge.rateCodeCode = charge.rateCode;\r\n mappedCharge.rateDescription = charge.rateDescription;\r\n mappedCharge.quoteTypeId = charge.quoteTypeId;\r\n mappedCharge.quoteId = charge.salesQuoteId && charge.rateSourceRDN === rateSourceMap.SQ ? charge.salesQuoteId : charge.quoteId;\r\n mappedCharge.rateSourceRDN = rateSourceMap[charge.rateSource] != undefined ? rateSourceMap[charge.rateSource] : charge.rateSourceRDN;\r\n mappedCharge.sourceSystemRDN = charge.sourceSystemRDN;\r\n mappedCharge.quoteSeqNum = charge.quoteSeqNum;\r\n\r\n customerOrder.charges.push(mappedCharge);\r\n });\r\n\r\n var service = customerOrder.services[0];\r\n if (order.pickup.earliestTime) {\r\n service.pickupFrom.earliestTime = { utcDateTime: order.pickup.earliestTime, offSet: order.pickup.earliestTime.getTimezoneOffset() };\r\n }\r\n\r\n if (order.pickup.latestTime) {\r\n service.pickupFrom.latestTime = { utcDateTime: order.pickup.latestTime, offSet: order.pickup.latestTime.getTimezoneOffset() };\r\n }\r\n\r\n if (order.delivery.earliestTime) {\r\n service.deliverTo.earliestTime = { utcDateTime: order.delivery.earliestTime, offSet: order.delivery.earliestTime.getTimezoneOffset() };\r\n }\r\n\r\n if (order.delivery.latestTime) {\r\n service.deliverTo.latestTime = { utcDateTime: order.delivery.latestTime, offSet: order.delivery.latestTime.getTimezoneOffset() };\r\n }\r\n\r\n //pickup reference numbers\r\n if (order.pickup.pickupNumber) {\r\n service.pickupFrom.referenceNumbers.push({ value: order.pickup.pickupNumber, referenceNumberType: { RefDataNumber: RefDataMappingService.getCategoryId('PICKUP_NUMBER') } });\r\n }\r\n\r\n if (order.pickup.bol) {\r\n service.pickupFrom.referenceNumbers.push({ value: order.pickup.bol, referenceNumberType: { RefDataNumber: RefDataMappingService.getCategoryId('BOL_NUMBER') } });\r\n }\r\n //delivery reference numbers\r\n if (order.delivery.deliveryNumber) {\r\n service.deliverTo.referenceNumbers.push({ value: order.delivery.deliveryNumber, referenceNumberType: { RefDataNumber: RefDataMappingService.getCategoryId('DELIVERY_NUMBER') } });\r\n }\r\n\r\n //carrier pre pro number\r\n if (order.carrierPreProNumber){\r\n service.referenceNumbers.push({\r\n value: order.carrierPreProNumber,\r\n referenceNumberType: {\r\n RefDataNumber: RefDataMappingService.getCategoryId('CARRIER_PRO_NUMBER')\r\n }\r\n });\r\n }\r\n\r\n if (order.newRefNums) {\r\n mapReferenceNumbers(customerOrder, order)\r\n }\r\n\r\n if (order.referenceNumbers) {\r\n _.forEach(order.referenceNumbers, function(refNum) {\r\n if(refNum.referenceNumberType.refDataNumber === RefDataMappingService.getCategoryId('QUOTE_ID')){\r\n customerOrder.referenceNumbers.push(refNum);\r\n }\r\n })\r\n }\r\n\r\n if (order.carrierCode) {\r\n service.carrierCode = order.carrierCode;\r\n }\r\n\r\n return customerOrder;\r\n };\r\n\r\n function getCustomerOrderItems(items, createdViaPurchaseOrder) {\r\n var customerOrderItems = [];\r\n for (var i = 0; i < items.length; i++) {\r\n var item = items[i];\r\n var itemInfo = {\r\n commodity: item.commodity,\r\n unitQuantity: item.quantity,\r\n totalPallets: item.pallets,\r\n description: item.commodityName,\r\n notes: item.notes,\r\n totalInsuranceValue: item.totalInsuranceValue,\r\n totalPalletSpaces: item.palletSpaces,\r\n coilRacks: (item.flatbed) ? item.flatbed.coilRacks : null,\r\n maxTrailerAge: (item.flatbed) ? item.flatbed.trailerage : null,\r\n requiredChainsCount: (item.flatbed) ? item.flatbed.chains : null,\r\n requiredStrapsCount: (item.flatbed) ? item.flatbed.straps : null,\r\n lockBars: (item.flatbed) ? item.flatbed.locksbars : null,\r\n owod: (item.flatbed) ? item.flatbed.owod : null,\r\n nmfc: item.nmfc,\r\n totalWeight: { unitRDN: item.weightUom, value: item.weight },\r\n purchaseOrderItemId: item.purchaseOrderItemId,\r\n purchaseOrderNumber: item.purchaseOrderNumber,\r\n lineItemId: item.lineItemId,\r\n innerPackQuantity : (createdViaPurchaseOrder) ? item.quantity : null,\r\n referenceNumbers: [],\r\n unitLength: item.unitLength,\r\n unitWidth: item.unitWidth,\r\n unitHeight: item.unitHeight\r\n };\r\n\r\n\r\n\r\n if(!itemInfo.commodity) {\r\n itemInfo.commodity = {};\r\n }\r\n // Bug 198310: PRB52750 - Online 2.0 Draw PO not pulling in the SKU\r\n if(item.commodity) {\r\n itemInfo.commodity.sku = item.commodity.sku;\r\n }\r\n itemInfo.commodity.commodityName = item.commodityName;\r\n itemInfo.commodity.IsStackable = item.isStackable;\r\n\r\n if (item.lengthInUom && item.widthInUom && item.heightInUom) {\r\n itemInfo.lengthInUom = item.lengthInUom;\r\n itemInfo.widthInUom = item.widthInUom;\r\n itemInfo.heightInUom = item.heightInUom;\r\n\r\n itemInfo.lengthInUomLabel = item.lengthInUomLabel;\r\n itemInfo.widthInUomLabel = item.widthInUomLabel;\r\n itemInfo.heightInUomLabel = item.heightInUomLabel;\r\n }\r\n\r\n if (item.lengthCmUom && item.widthCmUom && item.heightCmUom) {\r\n itemInfo.lengthCmUom = item.lengthCmUom;\r\n itemInfo.widthCmUom = item.widthCmUom;\r\n itemInfo.heightCmUom = item.heightCmUom;\r\n\r\n itemInfo.lengthCmUomLabel = item.lengthCmUomLabel;\r\n itemInfo.widthCmUomLabel = item.widthCmUomLabel;\r\n itemInfo.heightCmUomLabel = item.heightCmUomLabel;\r\n }\r\n\r\n if (item.freightClass) {\r\n itemInfo.freightClassRDN = item.freightClass.refDataNumber;\r\n }\r\n if (item.trailerFeet) {\r\n itemInfo.totalTrailerFeet = item.trailerFeet;\r\n }\r\n if (item.packaging) {\r\n itemInfo.packagingTypeRDN = item.packaging.refDataNumber;\r\n }\r\n if (item.tempCategory) {\r\n itemInfo.TemperatureCategoryRDN = item.tempCategory.refDataNumber;\r\n }\r\n if (item.flatbed && item.flatbed.loading) {\r\n itemInfo.loadingTypeRDN = item.flatbed.loading.refDataNumber;\r\n }\r\n if (item.flatbed && item.flatbed.equipment) {\r\n itemInfo.itemEquipmentRDN = item.flatbed.equipment.refDataNumber;\r\n }\r\n if (item.flatbed && item.flatbed.tarp) {\r\n itemInfo.tarpTypeRDN = item.flatbed.tarp.refDataNumber;\r\n }\r\n if (item.flatbed && item.flatbed.length) {\r\n itemInfo.equipmentLength = { unitRDN: item.flatbed.lengthUom, value: item.flatbed.length };\r\n }\r\n if (item.flatbed && item.flatbed.lengthIn) {\r\n itemInfo.equipmentLengthIn = { unitRDN: item.flatbed.lengthInUom, value: item.flatbed.lengthIn };\r\n }\r\n if (item.flatbed && item.flatbed.width) {\r\n itemInfo.equipmentWidth = { unitRDN: item.flatbed.widthUom, value: item.flatbed.width };\r\n }\r\n if (item.flatbed && item.flatbed.height) {\r\n itemInfo.equipmentHeight = { unitRDN: item.flatbed.heightUom, value: item.flatbed.height };\r\n }\r\n if (item.purchaseOrderItemId) {\r\n itemInfo.referenceNumbers.push({ value: Math.abs(item.purchaseOrderItemId) * -1, referenceNumberType: { RefDataNumber: RefDataMappingService.getItemId('FULFILMENT_ORDER_ITEM_IDENTIFIER') } });\r\n }\r\n if (item.purchaseOrderNumber) {\r\n itemInfo.referenceNumbers.push({ value: item.purchaseOrderNumber, referenceNumberType: { RefDataNumber: RefDataMappingService.getCategoryId('CUSTOMER_PO_NUMBER') } });\r\n }\r\n if (item.poNum) {\r\n itemInfo.referenceNumbers.push({ value: item.poNum, referenceNumberType: { RefDataNumber: RefDataMappingService.getItemId('PURCHASE_ORDER_NUMBER') } });\r\n }\r\n if (item.lineItemNumber) {\r\n itemInfo.referenceNumbers.push({ value: item.lineItemNumber, referenceNumberType: { RefDataNumber: RefDataMappingService.getItemId('VENDOR_PO_LINE_NUMBER') } });\r\n }\r\n customerOrderItems.push(itemInfo);\r\n }\r\n return customerOrderItems;\r\n }\r\n\r\n function convertRateTypeCodeToRDN(code) {\r\n var rateTypeRDN = 0;\r\n _.forEach(rateTypes, function (type) {\r\n if (type.code == code) {\r\n rateTypeRDN = type.rdn;\r\n }\r\n });\r\n return rateTypeRDN;\r\n }\r\n }\r\n angular.module('NavisphereOnline').service('OrderTransformService', orderTransformService);\r\n})();\r\n\r\nvar rateSourceMap = {\r\n \"CM\": 788,\r\n \"CHR-FQ\": 5373,\r\n \"CHR-FQ Custom\": 5389,\r\n \"Transactional\": 6282,\r\n \"Contractual\": 6283,\r\n \"SGA\": 5859,\r\n \"SQ\": 5374,\r\n \"ManualQuote\": 5806\r\n};\r\n\r\nvar rateTypes = [\r\n {\r\n code: \"M\",\r\n rdn: 765,\r\n description: \"Per Mile\"\r\n },\r\n {\r\n code: \"F\",\r\n rdn: 775,\r\n description: \"Flat Rate\"\r\n },\r\n {\r\n code: \"A\",\r\n rdn: 776,\r\n description: \"Fixed Charge\"\r\n },\r\n {\r\n code: \"J\",\r\n rdn: 778,\r\n description: \"Percent Of Net\"\r\n }\r\n];\r\n\n(function () {\r\n \"use strict\";\r\n\r\n OrderCreateService.$inject = [\"$filter\", \"$state\", \"$uibModal\", \"OrderConfirmationService\", \"OrderService\", \"OrderTransformService\"];\r\n\r\n function OrderCreateService($filter, $state, $uibModal, OrderConfirmationService, OrderService, OrderTransformService) {\r\n this.createOrder = function($scope) {\r\n if (!$scope.submittingOrder) {\r\n $scope.submittingOrder = true;\r\n if (pickDeliverSequenceValid($scope)) {\r\n $scope.loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () {\r\n return $filter('translate')('PLACING_ORDER');\r\n }\r\n }\r\n });\r\n $scope.loadingModal.result.then(function () {\r\n }, function () {\r\n });\r\n\r\n var customerOrderRequest = OrderTransformService.getCustomerOrderSaveRequest($scope.order);\r\n var orderService = new OrderService(customerOrderRequest);\r\n orderService.$save().then(function (result) {\r\n $scope.loadingModal.close(result);\r\n if (result.success) {\r\n $scope.orderForm.$dirty = false;\r\n OrderConfirmationService.setOrderConfirmation($scope.order, result, $scope.itemSummary, $scope.userPreferences);\r\n $state.go('app.orderConfirmation');\r\n } else {\r\n angular.forEach(result.errors, function (error) {\r\n $scope.validationMessages.push($filter('translate')(error.errorMessage));\r\n });\r\n $scope.showValidationError();\r\n }\r\n }, function (result) {\r\n $scope.loadingModal.close(result);\r\n $scope.validationMessages.push($filter('translate')('WE_ARE_UNABLE_TO_PROCESS_YOUR_ORDER_AT_THIS_TIME_P'));\r\n $scope.showValidationError();\r\n });\r\n\r\n } else {\r\n $scope.showValidationError();\r\n }\r\n }\r\n };\r\n\r\n function pickDeliverSequenceValid($scope) {\r\n //Same day Truckload Orders are allowed to pick any date available for delivery\r\n if (isSameDayTruckloadOrder($scope)) {\r\n return true;\r\n }\r\n var latestPickupDate = moment($scope.order.pickup.latestDate);\r\n var earliestDeliveryDate = moment($scope.order.delivery.earliestDate);\r\n var latestPickLessThanEarliestDelivery;\r\n if (latestPickupDate < earliestDeliveryDate) {\r\n latestPickLessThanEarliestDelivery = true;\r\n } else if (latestPickupDate.diff(earliestDeliveryDate) === 0) {\r\n var latestPickupTime = moment($scope.order.pickup.latestTime);\r\n var earliestDeliveryTime = moment($scope.order.delivery.earliestTime);\r\n if (latestPickupTime < earliestDeliveryTime) {\r\n latestPickLessThanEarliestDelivery = true;\r\n } else {\r\n latestPickLessThanEarliestDelivery = false;\r\n }\r\n } else {\r\n latestPickLessThanEarliestDelivery = false;\r\n }\r\n if (!latestPickLessThanEarliestDelivery) {\r\n $scope.validationMessages.push($filter('translate')('PICKUP_LATEST_DATE_TIME_RANGE_MUST_BE_BEFORE_DELIV'));\r\n }\r\n return latestPickLessThanEarliestDelivery;\r\n }\r\n }\r\n\r\n function isSameDayTruckloadOrder($scope) {\r\n var flatbedId = 1482;\r\n var truckloadId = 1481;\r\n var isTruckloadOrder = $scope.order.serviceOffering.id === flatbedId || $scope.order.serviceOffering.id === truckloadId;\r\n var isSameDayQuote = $scope.quote.transit && $scope.quote.transit.minimumTransitDays === 0 && $scope.quote.transit.maximumTransitDays === 1;\r\n return isTruckloadOrder && isSameDayQuote;\r\n }\r\n\r\n angular.module('NavisphereOnline').service('OrderCreateService', OrderCreateService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n orderConfirmationService.$inject = [];\r\n function orderConfirmationService() {\r\n var _order, _confirmation, _summary, _preferences;\r\n this.setOrderConfirmation = function(order, confirmation, summary, preferences){\r\n _order = order;\r\n _confirmation = confirmation;\r\n _summary = summary;\r\n _preferences = preferences;\r\n };\r\n this.getOrder = function(){\r\n return _order;\r\n };\r\n this.getConfirmation = function(){\r\n return _confirmation;\r\n };\r\n this.getSummary = function(){\r\n return _summary;\r\n };\r\n this.getPreferences = function(){\r\n return _preferences;\r\n };\r\n }\r\n app.service('OrderConfirmationService', orderConfirmationService);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n CreateOrderRefNumberService.$inject = [\"$filter\", \"RefDataMappingService\"];\r\n\r\n function CreateOrderRefNumberService($filter, RefDataMappingService) {\r\n this.getNewRefNumList = function() {\r\n return [\r\n {\r\n value: \"\",\r\n referenceNumberType: {\r\n description: $filter(\"translate\")(\"SHIP_WITH_POUND\"),\r\n refDataNumber: RefDataMappingService.getCategoryId(\"SHIPWITH_NUMBER\")\r\n }\r\n }\r\n ];\r\n };\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"CreateOrderRefNumberService\", CreateOrderRefNumberService);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n BolCommentService.$inject = [\"CustomerPartyService\", \"ItemService\"];\r\n\r\n function BolCommentService(CustomerPartyService, ItemService) {\r\n this.get = function(cust) {\r\n CustomerPartyService.getBOLComment({\r\n partyNumberOrCode: cust.partyNumber\r\n }, function(response) {\r\n cust.bolComment = response.bolComment;\r\n });\r\n }\r\n this.getSearchItem = function (item, customer) {\r\n var productName = angular.isUndefined(item.productName) ? \"null\": item.productName;\r\n return ItemService.searchitems({ customerCode: customer.partyCode, term: productName }).$promise.then(function (itemDetails) {\r\n if (itemDetails.commodity) {\r\n item.commodity = {\r\n commodityCode: itemDetails.commodity.commodityCode,\r\n hazardousDOTName: itemDetails.commodity.hazardousDOTName,\r\n hazmatClassCode: itemDetails.commodity.hazmatClassCode,\r\n hazmatPackagingGroup: itemDetails.commodity.hazmatPackagingGroup,\r\n hazmatTechnicalName: itemDetails.commodity.hazmatTechnicalName,\r\n hazmatUNNumber: itemDetails.commodity.hazmatUNNumber,\r\n hazmatEmergencyPhone: itemDetails.commodity.hazmatEmergencyPhone,\r\n isHazardous: itemDetails.commodity.isHazardous\r\n };\r\n }\r\n return item;\r\n });\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"BolCommentService\", BolCommentService);\r\n})();\r\n\n(function () {\r\n angular.module('NavisphereOnline').filter('refNumberFilter', function () {\r\n return function (refNums, orderRefNums, itself) {\r\n var out = [];\r\n\r\n refNums.forEach(function (refNum) {\r\n var itemMatches = false;\r\n\r\n orderRefNums.forEach(function(orderRefNum) {\r\n if (orderRefNum.referenceNumberType && refNum.refDataNumber === orderRefNum.referenceNumberType.refDataNumber)\r\n itemMatches = true;\r\n });\r\n\r\n if (!itemMatches) {\r\n out.push(refNum);\r\n }\r\n\r\n if (itself && refNum.refDataNumber === itself.refDataNumber) {\r\n out.push(refNum);\r\n }\r\n });\r\n\r\n return out;\r\n }\r\n });\r\n}());\n(function() {\r\n angular.module('NavisphereOnline').filter('propsFilter', function() {\r\n return function(items, props) {\r\n var out = [];\r\n\r\n if (angular.isArray(items)) {\r\n items.forEach(function(item) {\r\n var itemMatches = false;\r\n var keys = Object.keys(props);\r\n for (var i = 0; i < keys.length; i++) {\r\n var prop = keys[i];\r\n var text = props[prop].toLowerCase();\r\n\r\n if (item[prop] && item[prop].toString().toLowerCase().indexOf(text) !== -1) {\r\n itemMatches = true;\r\n break;\r\n }\r\n }\r\n\r\n if (itemMatches) {\r\n out.push(item);\r\n }\r\n });\r\n } else {\r\n // Let the output be the input untouched\r\n out = items;\r\n }\r\n\r\n return out;\r\n }\r\n });\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('recentCustomers', [function () {\r\n return {\r\n templateUrl: '/app/order/directives/recentCustomers.tpl.html',\r\n restrict: 'E',\r\n link: function (scope) {\r\n scope.getDisplayName = scope.$parent.getDisplayName;\r\n },\r\n scope: {\r\n recentCustomers: \"=\",\r\n selectedRecentCustomer: \"=\",\r\n selectedRecentCustomerChange: \"&\"\r\n },\r\n controller: ['$scope', function ($scope) {\r\n $scope.changeSelectedRecentCustomer = function (cust) {\r\n $scope.selectedRecentCustomerChange()(cust);\r\n };\r\n }]\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('orderLocation', [function () {\r\n return {\r\n templateUrl: 'app/order/directives/order-location.tpl.html',\r\n restrict: 'E',\r\n scope: {\r\n location: \"=\"\r\n },\r\n controller: ['$scope', 'AddressService', function ($scope, AddressService) {\r\n\r\n $scope.getLocationDisplayName = function (location) {\r\n if (location) return location.addressName ? location.addressName : location.locationPartyName;\r\n return '';\r\n };\r\n $scope.getAddressLine1 = function (address) {\r\n return AddressService.GetAddressLine1(address);\r\n };\r\n $scope.getAddressLine2 = function (address) {\r\n return AddressService.GetAddressLine2(address);\r\n };\r\n $scope.getAddressLine3 = function (address) {\r\n return AddressService.GetAddressLine3(address);\r\n };\r\n $scope.getAddressLine4 = function (address) {\r\n return AddressService.GetAddressLine4(address);\r\n };\r\n }]\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('latestDateValidator', ['$parse', 'DateTimeService', function ($parse, DateTimeService) {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elm, attrs, ctrl) {\r\n\r\n var validateDateRange = function (inputValue) {\r\n\r\n var earliestDate = moment(attrs.latestDateValidator).toDate();\r\n var latestDate = inputValue;\r\n\r\n var isValidDateRange = DateTimeService.isValidDateRange(earliestDate, latestDate);\r\n\r\n if (!isValidDateRange)\r\n $parse(attrs.ngModel).assign(scope, earliestDate);\r\n\r\n return inputValue;\r\n };\r\n\r\n ctrl.$parsers.unshift(validateDateRange);\r\n\r\n attrs.$observe('latestDateValidator', function () {\r\n\r\n if (attrs.latestDateValidator !== '') {\r\n var earliestDate = moment(attrs.latestDateValidator).toDate();\r\n\r\n if (!ctrl.$modelValue && DateTimeService.isValidDate(earliestDate))\r\n $parse(attrs.ngModel).assign(scope, earliestDate);\r\n }\r\n\r\n validateDateRange(ctrl.$modelValue);\r\n });\r\n }\r\n\r\n };\r\n\r\n }]);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('earliestDateValidator', ['$parse', 'DateTimeService', function ($parse, DateTimeService) {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elm, attrs, ctrl) {\r\n var validateDateRange = function (inputValue) {\r\n return inputValue;\r\n };\r\n\r\n ctrl.$parsers.unshift(validateDateRange);\r\n\r\n attrs.$observe('earliestDateValidator', function () {\r\n\r\n if (attrs.earliestDateValidator !== '') {\r\n var latestDate = moment(attrs.earliestDateValidator).toDate();\r\n\r\n if (!ctrl.$modelValue && DateTimeService.isValidDate(latestDate)) {\r\n $parse(attrs.ngModel).assign(scope, latestDate);\r\n }\r\n }\r\n\r\n validateDateRange(ctrl.$modelValue);\r\n });\r\n }\r\n\r\n };\r\n\r\n }]);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n pickupController.$inject = ['$scope', '$uibModal', 'analyticsService', 'LocationService', '$locale', 'DateTimeService', 'LocationSelectionHelper', 'UserPermissionService', 'LocationDateHelper'];\r\n\r\n function pickupController($scope, $uibModal, analyticsService, LocationService, $locale, DateTimeService, LocationSelectionHelper, UserPermissionService, LocationDateHelper) {\r\n\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.originLocationResults = [];\r\n $scope.recentOrigins = [];\r\n if(angular.isDefined($scope.$parent.order.customer)) {\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole($scope.$parent.order.customer.partyCode, 'Add New Location');\r\n }\r\n\r\n $scope.openEarliestDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.earliestDateOpened = true;\r\n };\r\n\r\n $scope.ismeridian = $scope.$parent.userPreferences.timeFormat === '12';\r\n\r\n $scope.earliestDateOptions ={\r\n showWeeks: false,\r\n minDate: DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n\r\n $scope.latestDateOptions ={\r\n showWeeks: false,\r\n minDate: DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n\r\n $scope.hstep = 1;\r\n $scope.mstep = 15;\r\n $scope.openLatestDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.latestDateOpened = true;\r\n };\r\n\r\n $scope.refreshOriginLocations = function (searchText) {\r\n if (searchText.length < 2) {\r\n $scope.$parent.order.pickupHasNoResults = false;\r\n return [];\r\n }\r\n\r\n if(angular.isUndefined($scope.hasAddLocation)){\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole($scope.order.customer.partyCode, 'Add New Location');\r\n }\r\n\r\n $scope.originLocationResults = [];\r\n return LocationService.searchPartyLocation({\r\n partyNumberOrCode: $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, ''),\r\n term: searchText,\r\n limit: 20,\r\n locationSearchType: 1,\r\n useSupplierLocation: $scope.order.customer.useSupplierLocation\r\n }, function (data) {\r\n $scope.originLocationResults = data.items;\r\n $scope.$parent.order.pickupHasNoResults = data.items.length === 0;\r\n });\r\n\r\n };\r\n $scope.addNewLocation = function () {\r\n analyticsService.track(\"addNewLocation\");\r\n var modalInstance = $uibModal.open({\r\n templateUrl: '../app/addLocationModals/views/addLocation.tpl.html',\r\n size: 'lg',\r\n controller: 'addLocationController',\r\n backdrop: 'static',\r\n scope: $scope.$parent,\r\n resolve: {\r\n customer: function () {\r\n return ($scope.order.customer) ? $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, '') : '';\r\n },\r\n locationType: function() {\r\n if($scope.$parent.pickupNeedsRefinement){\r\n return \"pickup\";\r\n }\r\n return \"\";\r\n },\r\n supplier: function () {\r\n return (angular.isDefined($scope.user) && angular.isDefined($scope.user.supplierPartyCode)\r\n && angular.isDefined($scope.order.customer) && $scope.order.customer.useSupplierLocation)\r\n ? $scope.user.supplierPartyCode\r\n : undefined;\r\n }\r\n }\r\n });\r\n modalInstance.result.then(function (newLocation) {\r\n if ($scope.$parent.isQuoteToOrder) {\r\n var locationDateTime = $scope.$parent.getLocationDateTime('pickup') ;\r\n hydrateLocation(newLocation);\r\n $scope.$parent.pickupTemp = $scope.$parent.order.pickup;\r\n $scope.$parent.hydrateLocationDateTime('pickup', locationDateTime);\r\n } else {\r\n hydrateLocation(newLocation);\r\n }\r\n }, function () {\r\n });\r\n };\r\n\r\n function hydrateLocation(newLocation) {\r\n $scope.$parent.order.pickupHasNoResults = false;\r\n if ($scope.$parent.order.pickup.volumeQuoteId){\r\n newLocation.volumeQuoteId = $scope.$parent.order.pickup.volumeQuoteId;\r\n }\r\n $scope.$parent.order.pickup = newLocation;\r\n $scope.$parent.order.pickup.addressName = $scope.$parent.order.pickup.name;\r\n $scope.$parent.order.pickup.address = $scope.$parent.order.pickup.physicalAddress;\r\n $scope.$parent.order.pickup.earliestTime = DateTimeService.getBeginningOfDay();\r\n $scope.$parent.order.pickup.latestTime = DateTimeService.getBeginningOfDay();\r\n }\r\n\r\n $scope.$watch('$parent.order.pickup.earliestDate', function (newValue) {\r\n var times = LocationDateHelper.getEarliestAndLatestTimeFromScopeOrder({\r\n newValue: newValue,\r\n orderType: 'pickup',\r\n scopeOrder: $scope.order,\r\n scopeParentOrder: $scope.$parent.order\r\n });\r\n var orderPickup = $scope.$parent.order.pickup;\r\n if(times.earliestTime) {\r\n orderPickup.earliestTime = times.earliestTime;\r\n }\r\n\r\n $scope.latestDateOptions.minDate = DateTimeService.getLatestDateMinDate(newValue);\r\n });\r\n\r\n $scope.$watch('$parent.order.pickup.latestDate', function (newValue) {\r\n var times = LocationDateHelper.getEarliestAndLatestTimeFromScopeOrder({\r\n newValue: newValue,\r\n orderType: 'pickup',\r\n scopeOrder: $scope.order,\r\n scopeParentOrder: $scope.$parent.order\r\n });\r\n\r\n if(times.latestTime) {\r\n $scope.$parent.order.pickup.latestTime = times.latestTime;\r\n }\r\n });\r\n\r\n $scope.onPickupSelected = function (item, isRecent) {\r\n LocationSelectionHelper.onLocationSelected(item, $scope.$parent.order, 'pickup', isRecent, 2 /* `Unspecified` datetime serialization */);\r\n if(isRecent){\r\n analyticsService.trackWithVar('selectedRecentLocation', 'selectedRecentLocationValue', \"selected recent location for pickup\");\r\n }\r\n };\r\n\r\n $scope.$on('customerChanged', function (event, customer) {\r\n $scope.originLocationResults = [];\r\n $scope.$parent.order.pickup = null;\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole(customer.partyCode, 'Add New Location');\r\n LocationService.getRecentOrigins({\r\n customerCode: customer.partyCode.replace(/^\\s+|\\s+$/gm, '')\r\n }).$promise.then(function (result) {\r\n $scope.recentOrigins = result;\r\n });\r\n });\r\n\r\n $scope.earliestTimeChanged = function(value) {\r\n if (value === null) {\r\n $scope.$parent.order.pickup.earliestTime = DateTimeService.getBeginningOfDay();\r\n }\r\n };\r\n $scope.latestTimeChanged = function (value) {\r\n if (value === null) {\r\n $scope.$parent.order.pickup.latestTime = DateTimeService.getBeginningOfDay();\r\n }\r\n };\r\n\r\n function setRecentOrigins() {\r\n if ($scope.order && $scope.order.customer) {\r\n LocationService.getRecentOrigins({\r\n customerCode: $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, '')\r\n }).$promise.then(function (result) {\r\n $scope.recentOrigins = result;\r\n });\r\n }\r\n }\r\n\r\n setRecentOrigins();\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('PickupController', pickupController);\r\n})();\r\n\r\n\r\n\r\n\n(function () {\r\n 'use strict';\r\n orderItemsController.$inject = ['$rootScope', '$scope', \"$stateParams\", '$timeout', '$filter', '$uibModal', 'analyticsService', 'ItemService', 'ItemServiceHelper', \"UnitsOfMeasurementService\",\r\n 'UserPermissionService', 'ReferenceData', 'ModalService', 'RefDataMappingService', \"FormService\",\r\n 'ConversionService', '$document', '$window'];\r\n function orderItemsController($rootScope, $scope, $stateParams, $timeout, $filter, $uibModal, analyticsService, ItemService, ItemServiceHelper, UnitsOfMeasurementService, UserPermissionService,\r\n ReferenceData, ModalService, RefDataMappingService, FormService, ConversionService,\r\n $document, $window) {\r\n\r\n //TODO Abstract to service\r\n var ftUomRefNum = RefDataMappingService.getItemId('FEET_UOM');\r\n var ftUom = $filter('translate')('FEET_UOM');\r\n var inUomRefNum = RefDataMappingService.getItemId('INCHES_UOM');\r\n var inUom = $filter('translate')('INCHES_UOM');\r\n var lbUomRefNum = RefDataMappingService.getItemId('LB_UOM');\r\n var lbUom = $filter('translate')('LB_UOM');\r\n var kgUomRefNum = RefDataMappingService.getItemId('KG_UOM');\r\n var kgUom = $filter('translate')('KG_UOM');\r\n var cmUomRefNum = RefDataMappingService.getItemId('CENTIMETERS_UOM');\r\n var cmUom = $filter('translate')('CENTIMETERS_UOM');\r\n\r\n //summarized field names\r\n var WEIGHT = 'weight';\r\n var TOTAL_INSURANCE_VALUE = 'totalInsuranceValue';\r\n var PALLETS = 'pallets';\r\n var QTY = 'quantity';\r\n var FLATBED_ONLY_RDN = 1890;\r\n\r\n var clientIdCounter = 0;\r\n var isMetric = $scope.userPreferences.unitOfMeasure === 'metric';\r\n $scope.hasAddNewCommodityPerTrans;\r\n\r\n $scope.isStackableClick = function (item) {\r\n item.isStackable = !item.isStackable;\r\n };\r\n\r\n $scope.searchItemResults = [];\r\n $scope.itemFilter = '';\r\n function hydrateItem(item) {\r\n return ItemService.get({ itemId: item.itemId }, function (itemDetails) {\r\n item.nmfc = itemDetails.nmfc;\r\n item.unitLength = itemDetails.unitLength;\r\n item.unitWidth = itemDetails.unitWidth;\r\n item.unitHeight = itemDetails.unitHeight;\r\n if (item.unitLength && item.unitWidth && item.unitHeight) {\r\n if (item.unitLength.value === 0) {\r\n item.unitLength.value = null;\r\n if (item.unitLength.unitRDN === 0 || !item.unitLength.unitRDN) {\r\n item.unitLength.unitRDN = null;\r\n }\r\n }\r\n if (item.unitWidth.value === 0) {\r\n item.unitWidth.value = null;\r\n if (item.unitWidth.unitRDN === 0 || !item.unitWidth.unitRDN) {\r\n item.unitWidth.unitRDN = null;\r\n }\r\n }\r\n if (item.unitHeight.value === 0) {\r\n item.unitHeight.value = null;\r\n if(item.unitHeight.unitRDN === 0 || !item.unitHeight.unitRDN) {\r\n item.unitHeight.unitRDN = null;\r\n }\r\n }\r\n }\r\n else {\r\n item.unitWidth = null;\r\n item.unitHeight = null;\r\n item.unitLength = null;\r\n }\r\n item.unitVolume = itemDetails.unitVolume;\r\n item.unitDensity = itemDetails.unitDensity;\r\n item.unitsPerPallet = itemDetails.unitsPerPallet;\r\n item.packaging = setDDLValByRdn('Packaging', itemDetails.packagingTypeRDN);\r\n setUnitsOfMeasurement(item, isMetric);\r\n addDefaultStackable(item);\r\n\r\n if (itemDetails.commodity) {\r\n item.isHot = itemDetails.commodity.isHot;\r\n item.requiredTemperatureHigh = itemDetails.commodity.requiredTemperatureHigh;\r\n item.requiredTemperatureLow = itemDetails.commodity.requiredTemperatureLow;\r\n item.isHazardous = itemDetails.commodity.isHazardous;\r\n item.commodity = {\r\n isHazardous: itemDetails.commodity.isHazardous,\r\n hazardousDOTName: itemDetails.commodity.hazardousDOTName,\r\n hazmatClassCode: itemDetails.commodity.hazmatClassCode,\r\n hazmatPackagingGroup: itemDetails.commodity.hazmatPackagingGroup,\r\n hazmatTechnicalName: itemDetails.commodity.hazmatTechnicalName,\r\n hazmatUNNumber: itemDetails.commodity.hazmatUNNumber,\r\n hazmatEmergencyPhone: itemDetails.commodity.hazmatEmergencyPhone,\r\n commodityCode: itemDetails.commodity.commodityCode\r\n };\r\n }\r\n if ($scope.order.isFlatbed) {\r\n item.tempCategory = $scope.dryTempCategory;\r\n item.flatbed.tarp = setDDLValByRdn('FBedTarpType', itemDetails.tarpTypeRDN);\r\n item.flatbed.loading = setDDLValByRdn('FBedLoadingType', itemDetails.loadingTypeRDN);\r\n item.flatbed.equipment = setDDLValByRdn('ItemEquipment', itemDetails.itemEquipmentRDN);\r\n item.flatbed.trailerage = itemDetails.maxTrailerAge;\r\n item.flatbed.straps = itemDetails.requiredStrapsCount;\r\n item.flatbed.chains = itemDetails.requiredChainsCount;\r\n if (itemDetails.equipmentLength) {\r\n item.flatbed.length = itemDetails.equipmentLength.value;\r\n }\r\n if (itemDetails.equipmentWidth) {\r\n item.flatbed.width = itemDetails.equipmentWidth.value;\r\n }\r\n if (itemDetails.equipmentHeight) {\r\n item.flatbed.height = itemDetails.equipmentHeight.value;\r\n }\r\n item.flatbed.coilRacks = itemDetails.coilRacks;\r\n item.flatbed.locksbars = itemDetails.lockBars;\r\n }\r\n else {\r\n item.tempCategory = (!itemDetails.temperatureCategoryRDN)\r\n ? $scope.dryTempCategory\r\n : setDDLValByRdn('TemperatureSensitive', itemDetails.temperatureCategoryRDN);\r\n }\r\n\r\n return item;\r\n }).$promise;\r\n }\r\n $scope.onItemSelected = function (item, shouldAddNewCard, index) {\r\n $scope.asyncItemSelected = undefined;\r\n $scope.itemFilter = '';\r\n item.flatbed = {};\r\n item.readOnlyProperties = {};\r\n item.readOnlyProperties.commodityName = true;\r\n item.readOnlyProperties.isHazardous = true;\r\n hydrateItem(item).then(function () {\r\n if ($scope.order.isTransactional) {\r\n if (item.tempCategory.refDataCode !== \"Dry\") {\r\n handleTransactional(index);\r\n\r\n return;\r\n }\r\n }\r\n setPreviousItemsTouched();\r\n item.clientId = clientIdCounter++;\r\n item.freightClass = item.freightClass == 0 ? undefined : setFreightClassByCode(item.freightClass);\r\n setUnitsOfMeasurement(item, isMetric);\r\n if (shouldAddNewCard) {\r\n $scope.order.items.push(item);\r\n } else {\r\n var firstFreightClass = angular.copy($scope.order.items[index].freightClass);\r\n if ($scope.$parent.isQuoteToOrder) {\r\n // we do not need to override value if it entered in Quote screen\r\n if ($scope.order.items[index].commodity !== JSON.undefined) {\r\n angular.merge($scope.order.items[index].commodity, item.commodity);\r\n }\r\n $scope.order.items[index].readOnlyProperties.unitLength = $scope.order.items[index].readOnlyProperties.length;\r\n $scope.order.items[index].readOnlyProperties.unitWidth = $scope.order.items[index].readOnlyProperties.width;\r\n $scope.order.items[index].readOnlyProperties.unitHeight = $scope.order.items[index].readOnlyProperties.height;\r\n for (var key in $scope.order.items[index]) {\r\n if ($scope.order.items[index].readOnlyProperties[key])\r\n item[key] = $scope.order.items[index][key];\r\n }\r\n }\r\n _.merge($scope.order.items[index], item);\r\n if (angular.isDefined(firstFreightClass)) {\r\n var freightClassList = $scope.itemDdlRefData['FreightClass'];\r\n var isFreightClassExist = _.find(freightClassList, function (fc) {\r\n return fc.refDataCode == firstFreightClass.refDataCode;\r\n });\r\n if (angular.isUndefined(isFreightClassExist)) {\r\n $scope.itemDdlRefData['FreightClass'].push(firstFreightClass);\r\n }\r\n }\r\n prefillComplexFields();\r\n }\r\n addDefaultStackable(item);\r\n $scope.order.isItemAltered = true;\r\n setFocusToAddedItem();\r\n registerItem();\r\n ieSelectFix();\r\n });\r\n };\r\n $scope.addShipmentItem = function () {\r\n setPreviousItemsTouched();\r\n var item = { clientId: clientIdCounter++, flatbed: {}, commodity: {}, commodityName: '' };\r\n setUnitsOfMeasurement(item, isMetric);\r\n addDefaultStackable(item);\r\n item.tempCategory = $scope.dryTempCategory;\r\n $scope.order.items.push(item);\r\n setFocusToAddedItem();\r\n registerItem();\r\n angular.element('#itemSearchInput').val('');\r\n ieSelectFix();\r\n };\r\n\r\n function addSuggestedShipmentItem(suggestedItem) {\r\n $scope.itemFilter = '';\r\n suggestedItem.flatbed = {};\r\n hydrateItem(suggestedItem).then(function () {\r\n setPreviousItemsTouched();\r\n suggestedItem.clientId = clientIdCounter++;\r\n suggestedItem.freightClass = suggestedItem.freightClass == 0 ? undefined : setFreightClassByCode(suggestedItem.freightClass);\r\n setUnitsOfMeasurement(suggestedItem, isMetric);\r\n addDefaultStackable(suggestedItem);\r\n $scope.order.items.push(suggestedItem);\r\n setFocusToAddedItem();\r\n registerItem();\r\n ieSelectFix();\r\n });\r\n }\r\n\r\n function addNewlyAddedItem(item) {\r\n item.commodityName = item.description;\r\n item.commodity = {};\r\n item.commodity.commodityName = item.description;\r\n item.commodity.isHot = item.isHot;\r\n item.quantity = item.qty;\r\n item.unitLength = {};\r\n if (item.perUnitLength != 0) {\r\n item.unitLength.value = item.perUnitLength;\r\n item.unitLength.unitRDN = item.perUnitLengthUom;\r\n }\r\n item.unitWidth = {};\r\n if (item.perUnitWidth != 0) {\r\n item.unitWidth.value = item.perUnitWidth;\r\n item.unitWidth.unitRDN = item.perUnitLengthUom;\r\n }\r\n item.unitHeight = {};\r\n if (item.perUnitHeight != 0) {\r\n item.unitHeight.value = item.perUnitHeight;\r\n item.unitHeight.unitRDN = item.perUnitLengthUom;\r\n }\r\n\r\n $scope.itemFilter = '';\r\n setPreviousItemsTouched();\r\n item.clientId = clientIdCounter++;\r\n setUnitsOfMeasurement(item, isMetric);\r\n addDefaultStackable(item);\r\n $scope.order.items.push(item);\r\n setFocusToAddedItem();\r\n registerItem();\r\n ieSelectFix();\r\n }\r\n\r\n $scope.addCatalogShipmentItem = function () {\r\n analyticsService.track('addNewItem');\r\n if ($scope.isAddCatalogShipmentItem) return;\r\n\r\n $scope.isAddCatalogShipmentItem = true;\r\n\r\n var modalInstance = $uibModal.open({\r\n templateUrl: '../app/addItemModals/views/addItem.tpl.html',\r\n size: 'lg',\r\n controller: 'addItemController',\r\n backdrop: 'static',\r\n resolve: {\r\n itemDdlRefData: function () {\r\n return $scope.itemDdlRefData;\r\n },\r\n showFlatbedAttributes: function () {\r\n return $scope.order.isFlatbed;\r\n },\r\n customer: function () {\r\n return $scope.order.customer;\r\n },\r\n user: function () {\r\n return $scope.user;\r\n },\r\n preferences: function () {\r\n return $scope.userPreferences;\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(function (suggestedItem) {\r\n\r\n $scope.isAddCatalogShipmentItem = false;\r\n\r\n if (!suggestedItem)\r\n return;\r\n\r\n suggestedItem.readOnlyProperties = {};\r\n suggestedItem.readOnlyProperties.commodityName = true;\r\n\r\n if (suggestedItem.qty)\r\n addNewlyAddedItem(suggestedItem);\r\n else\r\n addSuggestedShipmentItem(suggestedItem);\r\n }, function () {\r\n\r\n });\r\n };\r\n\r\n $scope.dryTempCategory = getDryTempCategory();\r\n function getDryTempCategory() {\r\n for (var i = 0; i < $scope.itemDdlRefData['TemperatureSensitive'].length; i++) {\r\n if ($scope.itemDdlRefData['TemperatureSensitive'][i].refDataCode === 'Dry') {\r\n return $scope.itemDdlRefData['TemperatureSensitive'][i];\r\n }\r\n }\r\n }\r\n\r\n function setFreightClassByCode(freightClassCode) {\r\n var fc = undefined;\r\n for (var i = 0; i < $scope.itemDdlRefData['FreightClass'].length; i++) {\r\n if ($scope.itemDdlRefData['FreightClass'][i].refDataCode === freightClassCode) {\r\n fc = $scope.itemDdlRefData['FreightClass'][i];\r\n break;\r\n }\r\n }\r\n return fc;\r\n }\r\n function setDDLValByRdn(category, tempCatRdn) {\r\n var tc = undefined;\r\n for (var i = 0; i < $scope.itemDdlRefData[category].length; i++) {\r\n if ($scope.itemDdlRefData[category][i].refDataNumber === tempCatRdn) {\r\n tc = $scope.itemDdlRefData[category][i];\r\n break;\r\n }\r\n }\r\n return tc;\r\n }\r\n function setPreviousItemsTouched() {\r\n angular.forEach($scope.order.items, function (item) {\r\n item.visited = true;\r\n });\r\n }\r\n function setFocusToAddedItem() {\r\n $timeout(function () {\r\n var elements = angular.element('.orderItem').last().find('input');\r\n _.forEach(elements, function (elementObj) {\r\n var element = angular.element(elementObj);\r\n if (!element.is('[readonly]')) {\r\n element.focus();\r\n return false;\r\n }\r\n });\r\n }, 300);\r\n }\r\n function ieSelectFix() {\r\n // ie9 and older script\r\n if ($document[0].all && !$window.atob) {\r\n $timeout(function () {\r\n angular.element(\"select\").width(angular.element(\"select\").width());\r\n }, 300, false);\r\n }\r\n }\r\n\r\n $scope.removeItem = function (item) {\r\n var removed = false;\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'REMOVE',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_REMOVE_THIS_ITEM',\r\n bodyText: 'ALL_INFORMATION_ENTERED_FOR_THIS_ITEM_WILL_BE_REMO'\r\n };\r\n\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n angular.forEach($scope.order.items, function (itm, i) {\r\n if (!removed) {\r\n if (itm.clientId === item.clientId) {\r\n $scope.order.items.splice(i, 1);\r\n deregisterItem();\r\n removed = true;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n $scope.maxItemSearchResults = false;\r\n $scope.itemsNoResults = false;\r\n $scope.maxSearchResultLimit = 250;\r\n\r\n $scope.refreshSearchItems = function (search) {\r\n return ItemServiceHelper.searchHelper(search, $scope.order.customer, $scope, true);\r\n };\r\n\r\n $scope.showMaxItemSearchResults = function () {\r\n return $scope.maxItemSearchResults && (angular.isDefined(angular.element('#itemSearchInput')) ? angular.element('#itemSearchInput').val().length >= 2 : false);\r\n };\r\n $scope.showNoResultsFound = function () {\r\n return $scope.itemsNoResults && !$scope.searchingItems && angular.element('#itemSearchInput').val().length >= 2;\r\n };\r\n\r\n $scope.setDropdownSize = FormService.setDropdownSize;\r\n\r\n $scope.summaryFieldUpdates = [];\r\n\r\n $scope.summaryUpdate = function (fieldName) {\r\n $scope.summaryFieldUpdates.push(fieldName);\r\n };\r\n\r\n function setUnitsOfMeasurement(item, isMetric) {\r\n UnitsOfMeasurementService.setUnitsOfMeasurement(item, isMetric)\r\n }\r\n\r\n $scope.setLengthUomFt = function (item) {\r\n item.flatbed.lengthUom = ftUomRefNum;\r\n item.flatbed.lengthUomLabel = ftUom;\r\n };\r\n $scope.setLengthUomIn = function (item) {\r\n item.flatbed.lengthInUom = inUomRefNum;\r\n item.flatbed.lengthInUomLabel = inUom;\r\n };\r\n $scope.setWidthUomIn = function (item) {\r\n item.flatbed.widthUom = inUomRefNum;\r\n item.flatbed.widthUomLabel = inUom;\r\n };\r\n $scope.setHeightUomIn = function (item) {\r\n item.flatbed.heightUom = inUomRefNum;\r\n item.flatbed.heightUomLabel = inUom;\r\n };\r\n $scope.setWeightUomLb = function (item) {\r\n item.weightUom = lbUomRefNum;\r\n item.weightUomLabel = lbUom;\r\n $scope.summaryFieldUpdates.push(WEIGHT);\r\n };\r\n $scope.setWeightUomKg = function (item) {\r\n item.weightUom = kgUomRefNum;\r\n item.weightUomLabel = kgUom;\r\n $scope.summaryFieldUpdates.push(WEIGHT);\r\n };\r\n\r\n if ($scope.$parent.isQuoteToOrder) {\r\n _.forEach($scope.order.items, function (item) {\r\n registerItem();\r\n\r\n if (isMetric) {\r\n $scope.setWeightUomKg(item);\r\n } else {\r\n $scope.setWeightUomLb(item);\r\n }\r\n });\r\n }\r\n\r\n var inSummaryUpdate = false;\r\n $scope.$watchCollection('summaryFieldUpdates', function (newVal) {\r\n if (!inSummaryUpdate) {\r\n angular.forEach(newVal, function (fieldChangedName, i) {\r\n var valueSum = 0;\r\n angular.forEach($scope.order.items, function (item) {\r\n if (fieldChangedName == WEIGHT) {\r\n if (item.weight) {\r\n if (RefDataMappingService.getItemByRefNum(item.weightUom) === 'LB_UOM' &&\r\n $scope.userPreferences.unitOfMeasure === 'metric') {\r\n valueSum += isFinite(Number(item.weight))\r\n ? ConversionService.convertLBtoKG(Number(item.weight), 2) : 0;\r\n }\r\n else if (RefDataMappingService.getItemByRefNum(item.weightUom) === 'KG_UOM' &&\r\n $scope.userPreferences.unitOfMeasure === 'standard') {\r\n valueSum += isFinite(Number(item.weight))\r\n ? ConversionService.convertKGtoLB(Number(item.weight), 2) : 0;\r\n } else {\r\n valueSum += isFinite(Number(item.weight)) ? Number(item.weight) : 0;\r\n }\r\n }\r\n } else {\r\n valueSum += isFinite(Number(item[fieldChangedName])) ? Number(item[fieldChangedName]) : 0;\r\n }\r\n });\r\n switch (fieldChangedName) {\r\n case WEIGHT:\r\n $scope.itemSummary.weight = valueSum; break;\r\n case TOTAL_INSURANCE_VALUE:\r\n $scope.itemSummary.insuranceValue = valueSum; break;\r\n case PALLETS:\r\n $scope.itemSummary.pallets = valueSum; break;\r\n case QTY:\r\n $scope.itemSummary.quantity = valueSum; break;\r\n default:\r\n break;\r\n }\r\n newVal.splice(i, 1);\r\n });\r\n inSummaryUpdate = false;\r\n }\r\n });\r\n $scope.$on('customerChanged', function () {\r\n $scope.searchItemResults = [];\r\n $scope.order.items = [];\r\n $scope.resetItemSummary();\r\n $scope.hasAddNewCommodityPerTrans = UserPermissionService.hasCustomerRole(\r\n $scope.order.customer.partyCode, 'Add New Commodity Per Transaction');\r\n $scope.hasCreateNewCommodityInPartyCatalog = UserPermissionService.hasCustomerRole(\r\n $scope.order.customer.partyCode, 'Create New Commodity in Party Catalog');\r\n });\r\n $scope.$on('modeSetToFlatbed', function () {\r\n for (var i = 0; i < $scope.order.items.length; i++) {\r\n $scope.order.items[i].tempCategory = $scope.dryTempCategory;\r\n }\r\n });\r\n\r\n function registerItem() {\r\n $scope.itemSummary.lineItems += 1;\r\n updateSummary();\r\n }\r\n function deregisterItem() {\r\n $scope.itemSummary.lineItems -= 1;\r\n updateSummary();\r\n }\r\n function updateSummary() {\r\n $scope.summaryFieldUpdates.push(WEIGHT, TOTAL_INSURANCE_VALUE, PALLETS, QTY);\r\n }\r\n function setHasAddNewCommodityPerTrans() {\r\n if ($scope.order && $scope.order.customer) {\r\n $scope.hasAddNewCommodityPerTrans = UserPermissionService.hasCustomerRole(\r\n $scope.order.customer.partyCode, 'Add New Commodity Per Transaction');\r\n }\r\n }\r\n function setHasCreateNewCommodityInPartyCatalog() {\r\n if ($scope.order && $scope.order.customer) {\r\n $scope.hasCreateNewCommodityInPartyCatalog = UserPermissionService.hasCustomerRole(\r\n $scope.order.customer.partyCode, 'Create New Commodity in Party Catalog');\r\n }\r\n }\r\n function addDefaultStackable(item) {\r\n item.commodity.isStackable = null;\r\n item.isStackable = null;\r\n $rootScope.$emit('getDensityBasedSuggestion', item);\r\n }\r\n\r\n function prefillComplexFields() {\r\n prefillPackaging();\r\n prefillTemperature();\r\n prefillFreightClass();\r\n }\r\n\r\n function prefillPackaging() {\r\n _.forEach($scope.order.items, function (item) {\r\n if (item.packaging) {\r\n item.packaging = _.filter($scope.itemDdlRefData.Packaging, { refDataNumber: item.packaging.refDataNumber })[0];\r\n }\r\n });\r\n }\r\n\r\n function prefillTemperature() {\r\n _.forEach($scope.order.items, function (item) {\r\n if (item.tempCategory) {\r\n item.tempCategory = _.filter($scope.itemDdlRefData.TemperatureSensitive, { refDataNumber: item.tempCategory.refDataNumber })[0];\r\n }\r\n });\r\n }\r\n\r\n function prefillFreightClass() {\r\n _.forEach($scope.order.items, function (item) {\r\n if (item.freightClass) {\r\n item.freightClass = _.filter($scope.itemDdlRefData.FreightClass, { refDataNumber: item.freightClass.refDataNumber })[0];\r\n }\r\n });\r\n }\r\n\r\n function handleTransactional(index) {\r\n var modalOptions = {\r\n closeButtonText: null,\r\n actionButtonText: \"OK\",\r\n headerText: 'ONLY_DRY_GOODS_ARE_SUPPORTED_AT_THIS_TIME',\r\n bodyText: 'PLEASE_SELECT_OR_ENTER_A_DIFFERENT_ITEM'\r\n };\r\n\r\n ModalService.showModal({}, modalOptions).then(function () {\r\n $scope.order.items[index].commodityName = null;\r\n });\r\n }\r\n\r\n function isNonLTLFlatbedTransactional() {\r\n var hasTransactionRate = false;\r\n var isFlatbedRequestType = false;\r\n if ($scope.quote && $scope.quote.rateList) {\r\n _.forEach($scope.quote.rateList, function(rate) {\r\n if(rate.rateSource === \"Transactional\" || rate.rateSource === \"ManualQuote\") {\r\n hasTransactionRate = true;\r\n }\r\n });\r\n }\r\n if ($scope.quote && $scope.quote.transportModeType) {\r\n isFlatbedRequestType = $scope.quote.transportModeType === 12;\r\n }\r\n\r\n return (isFlatbedRequestType && hasTransactionRate);\r\n }\r\n\r\n function setTransactionalFlatbedItemValues() {\r\n if (!isNonLTLFlatbedTransactional()) {\r\n return;\r\n }\r\n var flatbedOnlyEquipment = {};\r\n _.forEach($scope.itemDdlRefData.ItemEquipment, function (equipment) {\r\n if (equipment.refDataNumber === FLATBED_ONLY_RDN) {\r\n flatbedOnlyEquipment = equipment;\r\n }\r\n })\r\n if (flatbedOnlyEquipment !== {}) {\r\n _.forEach($scope.order.items, function (item) {\r\n item.flatbed.equipment = flatbedOnlyEquipment;\r\n });\r\n }\r\n }\r\n\r\n $scope.getFlatbedLength = function() {\r\n if(isNonLTLFlatbedTransactional()) {\r\n return 48;\r\n } else {\r\n return 100\r\n }\r\n }\r\n\r\n $scope.getFlatbedWidthAndHeight = function() {\r\n if(isNonLTLFlatbedTransactional()) {\r\n return 102;\r\n } else {\r\n return 240\r\n }\r\n }\r\n\r\n setHasAddNewCommodityPerTrans();\r\n setHasCreateNewCommodityInPartyCatalog();\r\n prefillComplexFields();\r\n setTransactionalFlatbedItemValues();\r\n }\r\n angular.module('NavisphereOnline').controller('orderItemsController', orderItemsController);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n modeController.$inject = ['$scope', '$q', '$rootScope', '$filter', 'CreateOrderRefNumberService', 'ModalService', 'ServiceOfferingMapping',\r\n 'ServiceOffering', 'RefDataMappingService'];\r\n\r\n function modeController($scope, $q, $rootScope, $filter, CreateOrderRefNumberService, ModalService, ServiceOfferingMapping, ServiceOffering,\r\n RefDataMappingService) {\r\n\r\n var tl = ServiceOfferingMapping.getServiceOfferingId('TL_SERVICE_OFFERING');\r\n var ltl = ServiceOfferingMapping.getServiceOfferingId('LTL_SERVICE_OFFERING');\r\n var flatbed = ServiceOfferingMapping.getServiceOfferingId('FLATBED_SERVICE_OFFERING');\r\n var bulk = ServiceOfferingMapping.getServiceOfferingId('BULK_TRANSPORTATION');\r\n var intermodal = ServiceOfferingMapping.getServiceOfferingId('INTERMODAL_FULL_CONTAINER_TRANSPORTATION');\r\n\r\n $scope.order.newRefNums = CreateOrderRefNumberService.getNewRefNumList();\r\n\r\n $scope.form = {};\r\n\r\n angular.forEach($scope.serviceOfferings, function (offering) {\r\n switch (offering.id) {\r\n case tl:\r\n $scope.serviceOfferingTL = offering;\r\n $scope.serviceOfferingTL.displayKey = 'TRUCKLOAD';\r\n break;\r\n case flatbed:\r\n $scope.serviceOfferingFB = offering;\r\n $scope.serviceOfferingFB.displayKey = 'FLATBED';\r\n break;\r\n case ltl:\r\n $scope.serviceOfferingLTL = offering;\r\n $scope.serviceOfferingLTL.displayKey = 'LTL';\r\n break;\r\n case bulk:\r\n $scope.serviceOfferingBULK = offering;\r\n $scope.serviceOfferingBULK.displayKey = 'BULK';\r\n break;\r\n case intermodal:\r\n $scope.serviceOfferingInterModal = offering;\r\n $scope.serviceOfferingInterModal.displayKey = 'INTERMODAL';\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n $scope.$on('customerChanged', function() {\r\n $scope.form.serviceOffering = null;\r\n $scope.order.newRefNums = CreateOrderRefNumberService.getNewRefNumList();\r\n });\r\n\r\n var modalOptions = {\r\n closeButtonText: 'NO',\r\n actionButtonText: 'YES',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_CHANGE_YOUR_MODE',\r\n bodyText: 'CHANGING_MODE_WILL_CAUSE_COMMODITY_INFORMATION_TO_'\r\n };\r\n\r\n $scope.$watch('form.serviceOffering', function (newValue, oldValue) {\r\n\r\n if (!newValue)\r\n return;\r\n\r\n if (!oldValue || userDoesntHaveAnyCommodities()) {\r\n setModelServiceOffering(newValue);\r\n return;\r\n }\r\n\r\n if (oldValueEqualsNewValue(oldValue, newValue))\r\n return;\r\n\r\n if (modeChangedFromFlatbed(oldValue))\r\n confirmModeChange(oldValue, newValue);\r\n else if (modeChangedToFlatbed(newValue)) {\r\n $rootScope.$broadcast('modeSetToFlatbed');\r\n setModelServiceOffering(newValue);\r\n }\r\n else\r\n setModelServiceOffering(newValue);\r\n });\r\n\r\n function confirmModeChange(oldValue, newValue) {\r\n modeChangedConfirmation().then(\r\n function (changed) {\r\n if (changed)\r\n setModelServiceOffering(newValue);\r\n else\r\n setViewServiceOffering(oldValue);\r\n });\r\n }\r\n\r\n function setModelServiceOffering(serviceOffering) {\r\n $scope.order.serviceOffering = serviceOffering;\r\n $scope.order.isFlatbed = ServiceOffering.get($scope.order.serviceOffering.id).genericType === 'FLATBED';\r\n }\r\n\r\n function setViewServiceOffering(serviceOffering) {\r\n $scope.form.serviceOffering = serviceOffering;\r\n }\r\n\r\n function oldValueEqualsNewValue(oldValue, newValue) {\r\n\r\n return $scope.order.serviceOffering === newValue || oldValue === newValue;\r\n }\r\n\r\n function userDoesntHaveAnyCommodities() {\r\n return $scope.order.items && $scope.order.items.length === 0;\r\n }\r\n function modeChangedToFlatbed(newValue) {\r\n return newValue.id === flatbed;\r\n }\r\n function modeChangedFromFlatbed(oldValue) {\r\n return oldValue.id === flatbed;\r\n }\r\n\r\n function modeChangedConfirmation() {\r\n var deferred = $q.defer();\r\n\r\n if ($scope.order.serviceOffering) {\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n deferred.resolve(true);\r\n }\r\n }, function (result) {\r\n if (result === 'cancel') {\r\n deferred.resolve(false);\r\n }\r\n });\r\n } else {\r\n deferred.resolve(true);\r\n }\r\n return deferred.promise;\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('ModeController', modeController);\r\n}());\r\n\n/*global moment */\r\n(function () {\r\n 'use strict';\r\n deliveryController.$inject = ['$scope', '$uibModal', 'analyticsService', 'LocationService', '$locale', 'DateTimeService', 'LocationSelectionHelper', 'UserPermissionService', 'LocationDateHelper'];\r\n\r\n function deliveryController($scope, $uibModal, analyticsService, LocationService, $locale, DateTimeService, LocationSelectionHelper, UserPermissionService, LocationDateHelper) {\r\n\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.deliveryLocationResults = [];\r\n $scope.recentDestinations = [];\r\n if(angular.isDefined($scope.$parent.order.customer)) {\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole($scope.$parent.order.customer.partyCode, 'Add New Location');\r\n }\r\n\r\n $scope.refreshDeliveryLocations = function (searchText) {\r\n if (searchText.length < 2) {\r\n $scope.$parent.order.deliveryHasNoResults = false;\r\n return [];\r\n }\r\n\r\n if(!$scope.hasAddLocation){\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole($scope.order.customer.partyCode, 'Add New Location');\r\n }\r\n\r\n $scope.$parent.deliveryLocationResults = [];\r\n return LocationService.searchPartyLocation({\r\n partyNumberOrCode: $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, ''),\r\n term: searchText,\r\n limit: 20,\r\n locationSearchType: 2,\r\n useSupplierLocation: $scope.order.customer.useSupplierLocation\r\n }, function (data) {\r\n $scope.deliveryLocationResults = data.items;\r\n $scope.$parent.order.deliveryHasNoResults = (data.items.length === 0) ? true : false;\r\n\r\n });\r\n\r\n };\r\n $scope.addNewLocation = function () {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: '../app/addLocationModals/views/addLocation.tpl.html',\r\n size: 'lg',\r\n controller: 'addLocationController',\r\n backdrop: 'static',\r\n scope: $scope.$parent,\r\n resolve: {\r\n customer: function () {\r\n return ($scope.order.customer) ? $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, '') : '';\r\n },\r\n locationType: function() {\r\n if($scope.$parent.deliveryNeedsRefinement){\r\n return \"delivery\";\r\n }\r\n return \"\";\r\n },\r\n supplier: function () {\r\n return (angular.isDefined($scope.user) && angular.isDefined($scope.user.supplierPartyCode)\r\n && angular.isDefined($scope.order.customer) && $scope.order.customer.useSupplierLocation)\r\n ? $scope.user.supplierPartyCode\r\n : undefined;\r\n }\r\n }\r\n });\r\n modalInstance.result.then(function (newLocation) {\r\n if ($scope.$parent.isQuoteToOrder) {\r\n var locationDateTime = $scope.$parent.getLocationDateTime('delivery') ;\r\n hydrateLocation(newLocation);\r\n $scope.$parent.deliveryTemp = $scope.$parent.order.delivery;\r\n $scope.$parent.hydrateLocationDateTime('delivery', locationDateTime)\r\n } else {\r\n hydrateLocation(newLocation)\r\n }\r\n }, function () {\r\n });\r\n };\r\n\r\n function hydrateLocation(newLocation) {\r\n $scope.$parent.order.deliveryHasNoResults = false;\r\n $scope.$parent.order.delivery = newLocation;\r\n $scope.$parent.order.delivery.addressName = $scope.$parent.order.delivery.name;\r\n $scope.$parent.order.delivery.address = $scope.$parent.order.delivery.physicalAddress;\r\n $scope.$parent.order.delivery.earliestTime = DateTimeService.getBeginningOfDay();\r\n $scope.$parent.order.delivery.latestTime = DateTimeService.getBeginningOfDay();\r\n }\r\n\r\n $scope.$watch('$parent.order.delivery.earliestDate', function (newValue) {\r\n var times = LocationDateHelper.getEarliestAndLatestTimeFromScopeOrder({\r\n newValue: newValue,\r\n orderType: 'delivery',\r\n scopeOrder: $scope.order,\r\n scopeParentOrder: $scope.$parent.order\r\n });\r\n var orderDelivery = $scope.$parent.order.delivery\r\n if(times.earliestTime) {\r\n orderDelivery.earliestTime = times.earliestTime;\r\n }\r\n\r\n $scope.latestDateOptions.minDate = DateTimeService.getLatestDateMinDate(newValue);\r\n });\r\n\r\n $scope.$watch('$parent.order.delivery.latestDate', function (newValue) {\r\n var times = LocationDateHelper.getEarliestAndLatestTimeFromScopeOrder({\r\n newValue: newValue,\r\n orderType: 'delivery',\r\n scopeOrder: $scope.order,\r\n scopeParentOrder: $scope.$parent.order\r\n });\r\n\r\n if(times.latestTime) {\r\n $scope.$parent.order.delivery.latestTime = times.latestTime;\r\n }\r\n });\r\n\r\n $scope.openLatestDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.latestDateOpened = true;\r\n };\r\n\r\n $scope.ismeridian = $scope.$parent.userPreferences.timeFormat === '12';\r\n\r\n $scope.earliestDateOptions ={\r\n showWeeks: false,\r\n minDate: $scope.$parent.isQuoteToOrder ? $scope.$parent.setQuoteToOrderMinDate() : DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n\r\n $scope.latestDateOptions ={\r\n showWeeks: false,\r\n minDate: $scope.$parent.isQuoteToOrder ? $scope.$parent.setQuoteToOrderMinDate() : DateTimeService.getToday(),\r\n maxDate: DateTimeService.getDateTwoYearsFromNow()\r\n };\r\n\r\n $scope.hstep = 1;\r\n $scope.mstep = 15;\r\n\r\n $scope.openEarliestDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.earliestDateOpened = true;\r\n };\r\n\r\n $scope.onDeliverySelected = function (item, isRecent) {\r\n if(isRecent){\r\n analyticsService.trackWithVar('selectedRecentLocation', 'selectedRecentLocationValue', \"selected recent location for deliver\");\r\n }\r\n LocationSelectionHelper.onLocationSelected(item, $scope.$parent.order, 'delivery', isRecent, 2 /* `Unspecified` datetime serialization */);\r\n };\r\n\r\n $scope.$on('customerChanged', function (event, customer) {\r\n $scope.deliveryLocationResults = [];\r\n $scope.$parent.order.delivery = null;\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole(customer.partyCode, 'Add New Location');\r\n LocationService.getRecentDestinations({\r\n customerCode: customer.partyCode.replace(/^\\s+|\\s+$/gm, '')\r\n }).$promise.then(function (result) {\r\n $scope.recentDestinations = result;\r\n });\r\n });\r\n\r\n $scope.earliestTimeChanged = function(value) {\r\n if (value === null) {\r\n $scope.$parent.order.delivery.earliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n };\r\n $scope.latestTimeChanged = function (value) {\r\n if (value === null) {\r\n $scope.$parent.order.delivery.latestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n }\r\n };\r\n\r\n function setRecentDestinations() {\r\n if ($scope.order && $scope.order.customer) {\r\n LocationService.getRecentDestinations({\r\n customerCode: $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, '')\r\n }).$promise.then(function (result) {\r\n $scope.recentDestinations = result;\r\n });\r\n }\r\n }\r\n\r\n $scope.$parent.isFlatbed = function() {\r\n return $scope.$parent.requstType === 'Flatbed';\r\n }\r\n\r\n setRecentDestinations();\r\n }\r\n angular.module('NavisphereOnline').controller('DeliveryController', deliveryController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n customerController.$inject = ['$q', '$rootScope', '$scope', 'AddressService', 'analyticsService', 'BolCommentService', 'ModalService',\r\n 'CustomerPartyService'];\r\n function customerController($q, $rootScope, $scope, AddressService, analyticsService, BolCommentService, ModalService) {\r\n\r\n $scope.dropDownCustomer = {\r\n selected: undefined\r\n };\r\n $scope.selectedRecentCustomer = undefined;\r\n var modalOptions = {\r\n closeButtonText: 'NO_KEEP_ACCOUNT',\r\n actionButtonText: 'YES_I_AM_SURE',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_CHANGE_YOUR_ACCOUNT',\r\n bodyText: 'ALL_INFORMATION_ENTERED_FOR_THIS_ACCOUNT_WILL_BE_R'\r\n };\r\n var askingToKeepCustomer = false;\r\n\r\n function customerChanged() {\r\n var deferred = $q.defer();\r\n\r\n if ($scope.order.customer && ($scope.order.serviceOffering !== null || dirtyRefNums()) &&\r\n !askingToKeepCustomer) {\r\n askingToKeepCustomer = true;\r\n ModalService.showModal({}, modalOptions).then(function(result) {\r\n if (result === 'ok') {\r\n deferred.resolve(true);\r\n askingToKeepCustomer = false;\r\n }\r\n if (result === 'cancel') {\r\n deferred.resolve(false);\r\n askingToKeepCustomer = false;\r\n }\r\n }, function(result) {\r\n if (result === 'cancel') {\r\n deferred.resolve(false);\r\n askingToKeepCustomer = false;\r\n }\r\n });\r\n } else {\r\n deferred.resolve(true);\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n $scope.onSelectedDropDownCustomerChange = function (cust) {\r\n if (cust !== $scope.order.customer) {\r\n customerChanged().then(function (changed) {\r\n if (changed) {\r\n angular.element('input[name=customerRecentList]').attr('checked', false);\r\n $scope.order.customer = cust;\r\n BolCommentService.get($scope.order.customer);\r\n\r\n $rootScope.$broadcast('customerChanged', cust);\r\n } else {\r\n $scope.dropDownCustomer.selected = $scope.order.customer;\r\n }\r\n });\r\n }\r\n };\r\n\r\n function selectNewCustomer(cust) {\r\n $scope.dropDownCustomer.selected = cust;\r\n $scope.order.customer = cust;\r\n BolCommentService.get($scope.order.customer);\r\n $rootScope.$broadcast('customerChanged', cust);\r\n }\r\n\r\n $scope.onSelectedRecentListCustomerChange = function (cust) {\r\n\r\n if (askingToKeepCustomer) return;\r\n\r\n if ($scope.order.customer && ($scope.order.serviceOffering !== null || dirtyRefNums())) {\r\n askingToKeepCustomer = true;\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n selectNewCustomer(cust);\r\n askingToKeepCustomer = false;\r\n }\r\n if (result === 'cancel') {\r\n $scope.selectedRecentCustomer = $scope.order.customer;\r\n askingToKeepCustomer = false;\r\n }\r\n }, function (result) {\r\n if (result === 'cancel') {\r\n $scope.selectedRecentCustomer = $scope.order.customer;\r\n askingToKeepCustomer = false;\r\n }\r\n });\r\n } else {\r\n selectNewCustomer(cust);\r\n }\r\n analyticsService.track('selectedRecentAccount');\r\n };\r\n function dirtyRefNums(){\r\n for(var i = 0; i < $scope.order.newRefNums.length; i++){\r\n if ($scope.order.newRefNums[i].value){\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n function getCustomers() {\r\n $scope.customers = $scope.$parent.createOrderCustomers.customers;\r\n\r\n angular.forEach($scope.customers, function (cust) {\r\n cust['addressLine1'] = AddressService.GetAddressLine1(cust.address);\r\n cust['addressLine2'] = AddressService.GetAddressLine2(cust.address);\r\n cust['addressLine3'] = AddressService.GetAddressLine3(cust.address);\r\n cust['addressLine4'] = AddressService.GetAddressLine4(cust.address);\r\n cust['displayName'] = $scope.$parent.getDisplayName(cust);\r\n });\r\n }\r\n\r\n function getRecentCustomers() {\r\n $scope.recentCustomers = $scope.$parent.createOrderCustomers.recentCustomers;\r\n\r\n angular.forEach($scope.recentCustomers, function (cust) {\r\n cust['displayName'] = $scope.$parent.getDisplayName(cust);\r\n });\r\n }\r\n\r\n function isSingleCCode() {\r\n\r\n return $scope.createOrderCustomers.customers.length === 1;\r\n }\r\n\r\n function assignSingleCCode() {\r\n if (isSingleCCode()) {\r\n selectNewCustomer($scope.createOrderCustomers.customers[0]);\r\n }\r\n }\r\n\r\n assignSingleCCode();\r\n getCustomers();\r\n getRecentCustomers();\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('CustomerController', customerController);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n carriersController.$inject = ['$scope'];\r\n function carriersController($scope) {\r\n\r\n $scope.preferredCarriers = [];\r\n\r\n $scope.$on('getPreferredCarriersCalled', function(event, data){\r\n $scope.preferredCarriers = data.preferredCarriers;\r\n });\r\n\r\n $scope.onSelectedDropDownCarrierChange = function(){\r\n $scope.order.carrierPreProNumber = null;\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('CarriersController', carriersController);\r\n}());\r\n\n(function() {\r\n 'use strict';\r\n\r\n notificationPreferencesController.$inject = ['$scope', '$rootScope', '$window', 'SubscriptionService', 'SubscriptionsEventsService', '$state', 'analyticsService', '$uibModalStack', 'ModalService', 'localStorageService', '$q', 'activeSubscriptions'];\r\n function notificationPreferencesController($scope, $rootScope, $window, SubscriptionService, SubscriptionsEventsService, $state, analyticsService, $uibModalStack, ModalService, localStorageService, $q, activeSubscriptions) {\r\n\r\n // temp redirect until we are sure local storge cache is purged - TENTADA 9/21/2020\r\n if ($rootScope.featureFlags.notifcationSettingsFeatureFlag) {\r\n $window.location.href = appConfig.notificationSettingsLink;\r\n }\r\n\r\n // Grabbed this code from the notification data model\r\n $scope.events = [\r\n { name: 'ORDER_CREATED', number: 101, inApp: false, email: false, category: 'Tracking', description: 'A new order was created. Track its progress as it makes its way to your destination.' },\r\n { name: 'SHIPMENT_BOOKED', number: 16, inApp: false, email: false, category: 'Tracking', description: 'A new shipment has been booked with C.H. Robinson. Your BOL is available and attached.' },\r\n { name: 'CARRIER_ARRIVED', number: 46, inApp: false, email: false, category: 'Tracking', description: 'The carrier has arrived at the pick up location.' },\r\n { name: 'CARRIER_DEPARTED', number: 48, inApp: false, email: false, category: 'Tracking', description: 'The carrier has left the pick up location with your order.Your order is on its way!' },\r\n { name: 'ORDER_DELIVERED', number: 111, inApp: false, email: false, category: 'Tracking', description: 'Hooray! Your order has been delivered.' },\r\n { name: 'ORDER_CANCELLED', number: 110, inApp: false, email: false, category: 'Tracking', description: 'Your order was cancelled.' },\r\n { name: 'CARRIER_BOUNCED', number: 26, inApp: false, email: false, category: 'Exception Management', description: 'The carrier is no longer able to complete the order. Don’t worry - we have got you covered.' },\r\n { name: 'POTENTIALLY_LATE', number: 69, inApp: false, email: false, category: 'Exception Management', description: 'Your order will be arriving late. Track its progress as it makes its way to your destination.' },\r\n { name: 'LATE_ARRIVAL', number: 47, inApp: false, email: false, category: 'Exception Management', description: 'Your order will be arriving late. Track its progress as it makes its way to your destination.' },\r\n { name: 'COMMODITY_CHANGED', number: 102, inApp: false, email: false, category: 'Order Changed' },\r\n { name: 'LOCATION_CHANGED', number: 109, inApp: false, email: false, category: 'Order Changed' },\r\n { name: 'READY_BY_DATE_OR_TIME_CHANGED', number: 105, inApp: false, email: false, category: 'Order Changed' },\r\n { name: 'PICK_UP_BY_DATE_OR_TIME_CHANGED', number: 106, inApp: false, email: false, category: 'Order Changed' },\r\n { name: 'DELIVERY_DATE_OR_TIME_CHANGED', number: 107, inApp: false, email: false, category: 'Order Changed' },\r\n { name: 'DELIVER_BY_DATE_OR_TIME_CHANGED', number: 108, inApp: false, email: false, category: 'Order Changed' }\r\n ];\r\n\r\n $scope.initialEvents = [];\r\n\r\n var preferences = localStorageService.get('preferences');\r\n setActiveEventTypes(activeSubscriptions, preferences.eventNotificationPreferences);\r\n\r\n if (_.isEmpty(preferences.eventNotificationPreferences)) {\r\n preferences.eventNotificationPreferences = getEventNotificationsForSave();\r\n localStorageService.set('preferences', preferences);\r\n }\r\n\r\n function setActiveEventTypes(eventTypeNumbers, eventNotificationPreferences) {\r\n if(!_.isEmpty(eventNotificationPreferences)) {\r\n _.forEach($scope.events, function(event, i) {\r\n _.forEach(eventNotificationPreferences, function(notificationPreference) {\r\n if (notificationPreference.eventTypeNumber === event.number && (notificationPreference.inApp || notificationPreference.email)) {\r\n $scope.initialEvents.push(event.number);\r\n $scope.events[i].inApp = notificationPreference.inApp;\r\n $scope.events[i].email = notificationPreference.email;\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n _.forEach($scope.events, function(event, i) {\r\n _.forEach(eventTypeNumbers, function(eventTypeNumber) {\r\n if (eventTypeNumber.eventTypeNumber === event.number) {\r\n $scope.initialEvents.push(event.number);\r\n $scope.events[i].inApp = true;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n function getEventNotificationsForSave() {\r\n var eventNotificationPreferences = [];\r\n _.forEach($scope.events, function(event) {\r\n eventNotificationPreferences.push(\r\n {\r\n eventTypeNumber: event.number,\r\n inApp: event.inApp,\r\n email: event.email\r\n }\r\n );\r\n });\r\n return eventNotificationPreferences;\r\n }\r\n\r\n $scope.save = function(e) {\r\n var preferences = localStorageService.get('preferences');\r\n preferences.eventNotificationPreferences = _.map(preferences.eventNotificationPreferences, function(event) {\r\n if (event.eventTypeNumber === e.number) {\r\n event.email = e.email;\r\n event.inApp = e.inApp;\r\n }\r\n return event;\r\n });\r\n\r\n localStorageService.set('preferences', preferences);\r\n\r\n SubscriptionService.saveNotificationPreferences(preferences.eventNotificationPreferences);\r\n SubscriptionsEventsService.save({ eventTypeNumber: e.number, inApp: e.inApp, shouldEmail: e.email });\r\n };\r\n\r\n $scope.goToUserPreferences = function() {\r\n analyticsService.track('userSettings');\r\n $state.go('app.userPreferences');\r\n };\r\n\r\n $scope.goToMergeAccounts = function() {\r\n analyticsService.track('mergeAccounts');\r\n $window.location.href = appConfig.mergeAccountsUrl;\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('notificationPreferencesController', notificationPreferencesController);\r\n\r\n})();\r\n\n/*global $ */\r\n(function () {\r\n 'use strict';\r\n myOrdersController.$inject = ['$scope', '$state', 'OrderService', '$filter', 'orderResults',\r\n 'userPreference', 'ServiceOffering', 'status', 'CarrierRuleService', 'RefDataMappingService', 'StatusMappingService', '$stateParams', '$window'];\r\n\r\n function myOrdersController($scope, $state, OrderService, $filter, orderResults, userPreference, ServiceOffering,\r\n status, CarrierRuleService, RefDataMappingService, StatusMappingService, $stateParams, $window) {\r\n\r\n $scope.orderResults = orderResults;\r\n $scope.facet = orderResults.orderFacet;\r\n $scope.currentPage = 1;\r\n $scope.offset = 0;\r\n $scope.statuses = [];\r\n $scope.methods = [];\r\n $scope.ranges = [];\r\n $scope.sortBy = 'earliestPickUpDateDescending';\r\n\r\n //Making Status/Shipping Method/TimeFrame Headers appear/disappear\r\n $scope.showTimeFrame = true;\r\n $scope.showShipping = true;\r\n $scope.showStatus = true;\r\n\r\n $scope.showTimeFrameHead = function () {\r\n $scope.showTimeFrame = false;\r\n if ($scope.facet) {\r\n angular.forEach($scope.facet.timeFrames, function (timeFrame) {\r\n $scope.showTimeFrame = timeFrame.count > 0 || $scope.showTimeFrame;\r\n });\r\n }\r\n };\r\n $scope.showShippingHead = function () {\r\n $scope.showShipping = false;\r\n if ($scope.facet) {\r\n angular.forEach($scope.facet.shippingMethods, function (shippingMethod) {\r\n $scope.showShipping = shippingMethod.count > 0 || $scope.showShipping;\r\n });\r\n }\r\n };\r\n $scope.showStatusHead = function () {\r\n $scope.showStatus = false;\r\n if ($scope.facet) {\r\n angular.forEach($scope.facet.statuses, function (status) {\r\n $scope.showStatus = status.count > 0 || $scope.showStatus;\r\n });\r\n }\r\n };\r\n\r\n if ($stateParams.sortBy)\r\n $scope.sortBy = $stateParams.sortBy;\r\n\r\n if ($stateParams.offset && $stateParams.limit) {\r\n $scope.currentPage = Math.ceil($stateParams.offset / $stateParams.limit) + 1;\r\n }\r\n\r\n $scope.limit = $stateParams.limit || '10';\r\n if ($stateParams.statuses) {\r\n $scope.statuses = $stateParams.statuses.split(\",\");\r\n }\r\n if ($stateParams.methods) {\r\n $scope.methods = $stateParams.methods.split(\",\");\r\n }\r\n if ($stateParams.ranges) {\r\n $scope.ranges = $stateParams.ranges.split(\",\");\r\n }\r\n if ($stateParams.search) {\r\n $scope.search = $stateParams.search;\r\n }\r\n\r\n $scope.isRefNumberSearched = angular.isDefined($scope.search) && $scope.search !== '';\r\n\r\n $scope.removeStatus = function (key) {\r\n var index = $scope.statuses.indexOf(key);\r\n $scope.statuses.splice(index, 1);\r\n filtersChanged();\r\n $scope.pageChanged();\r\n };\r\n $scope.removeShippingMethod = function (key) {\r\n var index = $scope.methods.indexOf(key);\r\n $scope.methods.splice(index, 1);\r\n filtersChanged();\r\n $scope.pageChanged();\r\n };\r\n $scope.removeRange = function (key) {\r\n var index = $scope.ranges.indexOf(key);\r\n $scope.ranges.splice(index, 1);\r\n filtersChanged();\r\n $scope.pageChanged();\r\n };\r\n $scope.isStatusActive = function (item) {\r\n return $.inArray(item, $scope.statuses) !== -1;\r\n };\r\n $scope.isShippingMethodActive = function (item) {\r\n return $.inArray(item, $scope.methods) !== -1;\r\n };\r\n $scope.isTimeFrameActive = function (item) {\r\n return $.inArray(item, $scope.ranges) !== -1;\r\n };\r\n $scope.shippingItemClicked = function (item) {\r\n\r\n if ($.inArray(item, $scope.methods) === -1) {\r\n $scope.methods.push(item);\r\n } else {\r\n var index = $scope.methods.indexOf(item);\r\n $scope.methods.splice(index, 1);\r\n }\r\n filtersChanged();\r\n $scope.pageChanged();\r\n };\r\n $scope.timeframeItemClicked = function (item) {\r\n\r\n if ($.inArray(item, $scope.ranges) === -1) {\r\n $scope.ranges.push(item);\r\n } else {\r\n var index = $scope.ranges.indexOf(item);\r\n $scope.ranges.splice(index, 1);\r\n }\r\n filtersChanged();\r\n $scope.pageChanged();\r\n };\r\n $scope.statusItemClicked = function (item) {\r\n\r\n if ($.inArray(item, $scope.statuses) === -1) {\r\n $scope.statuses.push(item);\r\n } else {\r\n var index = $scope.statuses.indexOf(item);\r\n $scope.statuses.splice(index, 1);\r\n }\r\n filtersChanged();\r\n $scope.pageChanged();\r\n };\r\n function filtersChanged() {\r\n\r\n $scope.showTimeFrameHead();\r\n $scope.showShippingHead();\r\n $scope.showStatusHead();\r\n\r\n var filters = $scope.statuses.concat($scope.methods, $scope.ranges);\r\n }\r\n\r\n $scope.limitChanged = function () {\r\n $scope.currentPage = Math.floor($scope.offset / $scope.limit) + 1;\r\n $scope.pageChanged();\r\n };\r\n\r\n $scope.sortyByChanged = function () {\r\n\r\n $scope.pageChanged();\r\n };\r\n\r\n $scope.pageChanged = function () {\r\n $scope.offset = ($scope.currentPage - 1) * $scope.limit;\r\n var status = $scope.statuses.join(\",\");\r\n var range = $scope.ranges.join(\",\");\r\n var method = $scope.methods.join(\",\");\r\n $scope.updatePage();\r\n $scope.isRefNumberSearched = angular.isDefined($scope.search) && $scope.search !== '';\r\n $state.go('.', {\r\n offset: $scope.offset,\r\n limit: $scope.limit,\r\n statuses: status,\r\n ranges: range,\r\n methods: method,\r\n search: $scope.search,\r\n sortBy: $scope.sortBy\r\n }, { notify: false });\r\n };\r\n\r\n $scope.removeRefNumberSearch = function () {\r\n $scope.search = '';\r\n $scope.pageChanged();\r\n };\r\n\r\n $scope.onSearchKeyPress = function (event) {\r\n if (event.keyCode === 13) {\r\n $scope.pageChanged();\r\n event.preventDefault();\r\n return false;\r\n }\r\n };\r\n $scope.updatePage = function () {\r\n $scope.offset = ($scope.currentPage - 1) * $scope.limit;\r\n var status = $scope.statuses.join(\",\");\r\n var range = $scope.ranges.join(\",\");\r\n var method = $scope.methods.join(\",\");\r\n OrderService.search({\r\n offset: $scope.offset,\r\n limit: $scope.limit,\r\n statuses: status,\r\n ranges: range,\r\n methods: method,\r\n search: $scope.search,\r\n sortBy: $scope.sortBy\r\n }, function (data) {\r\n $scope.orderResults = data;\r\n $scope.facet = data.orderFacet;\r\n //Show/Hide headers of filters\r\n $scope.showTimeFrameHead();\r\n $scope.showShippingHead();\r\n $scope.showStatusHead();\r\n });\r\n };\r\n\r\n $scope.displayStatus = function (order) {\r\n var resourceKey = StatusMappingService.getStatusResourceKey(order.statusRDN);\r\n return $filter('translate')(resourceKey);\r\n };\r\n\r\n $scope.displayCarrier = function (order) {\r\n var service = order.services[0];\r\n if (CarrierRuleService.showCarrier(service.serviceOfferingNumber, order.isMultiLeg) && order.loads && order.loads.length > 0) {\r\n var firstLoad = order.loads[0];\r\n if (firstLoad.carriers && firstLoad.carriers.length > 0) {\r\n return firstLoad.carriers[0].name;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n $scope.displayProNumber = function (order) {\r\n\r\n var proNumberRDN = RefDataMappingService.getCategoryId('CARRIER_PRO_NUMBER');\r\n\r\n if (order.services && order.services[0] && order.loads && order.loads[0] && order.isMultiLeg === false) {\r\n for (var k = 0; k < order.loads[0].referenceNumbers.length; k++) {\r\n if (order.loads[0].referenceNumbers[k].referenceDataNumber === proNumberRDN && order.loads[0].referenceNumbers[k].entityId === 7) {\r\n return 'Pro #: ' + order.loads[0].referenceNumbers[k].value;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n $scope.getServiceOfferingImageUrl = function (serviceOfferingNumber) {\r\n return ServiceOffering.get(serviceOfferingNumber);\r\n };\r\n\r\n $scope.getDisplayPlannedDateTime = function (locationInfo) {\r\n\r\n if (!locationInfo) {\r\n return null;\r\n }\r\n var serverDateTime = null;\r\n var dateParts = null;\r\n var timeParts = null;\r\n\r\n if (locationInfo.plannedEarliestDate) {\r\n var plannedEarliestDateInfo = locationInfo.plannedEarliestDate.split(\"T\");\r\n dateParts = plannedEarliestDateInfo[0].split(\"-\");\r\n\r\n if (locationInfo.plannedEarliestTime) {\r\n var plannedEarliestTimeInfo = locationInfo.plannedEarliestTime.split(\"T\");\r\n timeParts = plannedEarliestTimeInfo[1].substring(0, 8).split(\":\");\r\n }\r\n }\r\n\r\n if ((timeParts && timeParts.length > 0) && (dateParts && dateParts.length > 0)) {\r\n serverDateTime = new Date(dateParts[0], parseInt(dateParts[1]) - 1, dateParts[2], timeParts[0], timeParts[1], timeParts[2]);\r\n } else if (dateParts && dateParts.length > 0) {\r\n serverDateTime = new Date(dateParts[0], parseInt(dateParts[1]) - 1, dateParts[2]);\r\n }\r\n if (serverDateTime) {\r\n var time = serverDateTime.getHours();\r\n return (time > 0)\r\n ? $filter('date')(serverDateTime, 'shortDate') + ' at ' + $filter('time')({\r\n userPreferences: userPreference,\r\n date: serverDateTime\r\n })\r\n : $filter('date')(serverDateTime, 'shortDate');\r\n }\r\n return null;\r\n };\r\n\r\n $scope.getDisplayActualDateTime = function (locationInfo) {\r\n\r\n if (!locationInfo) {\r\n return null;\r\n }\r\n var serverDateTime = null;\r\n var dateParts = null;\r\n var timeParts = null;\r\n\r\n if (locationInfo.actualArrivalDate) {\r\n var actualArrivalDateInfo = locationInfo.actualArrivalDate.split(\"T\");\r\n dateParts = actualArrivalDateInfo[0].split(\"-\");\r\n\r\n if (locationInfo.actualArrivalTime) {\r\n var actualArrivalTimeInfo = locationInfo.actualArrivalTime.split(\"T\");\r\n timeParts = actualArrivalTimeInfo[1].substring(0, 8).split(\":\");\r\n }\r\n }\r\n\r\n if ((timeParts && timeParts.length > 0) && (dateParts && dateParts.length > 0)) {\r\n serverDateTime = new Date(dateParts[0], parseInt(dateParts[1]) - 1, dateParts[2], timeParts[0], timeParts[1], timeParts[2]);\r\n } else if (dateParts && dateParts.length > 0) {\r\n serverDateTime = new Date(dateParts[0], parseInt(dateParts[1]) - 1, dateParts[2]);\r\n }\r\n if (serverDateTime) {\r\n var time = serverDateTime.getHours();\r\n return (time > 0) ? $filter('date')(serverDateTime, 'shortDate') + ' at ' + $filter('time')({\r\n userPreferences: userPreference,\r\n date: serverDateTime\r\n }) : $filter('date')(serverDateTime, 'shortDate');\r\n\r\n }\r\n return null;\r\n };\r\n $scope.formatCityState = function (location) {\r\n if (angular.isUndefined(location) || location === null) {\r\n return null;\r\n }\r\n var text = [location.city, location.state].filter(function (val) {\r\n return val;\r\n }).join(', ');\r\n return text;\r\n };\r\n $scope.orderDetails = function (orderNum, event) {\r\n if (event.altKey && event.ctrlKey || event.altKey && event.shiftKey) {\r\n redirectToNewMicrosite(orderNum)\r\n } else {\r\n $state.go('app.orderDetails', { orderNumber: orderNum });\r\n }\r\n };\r\n\r\n function redirectToNewMicrosite(orderNum) {\r\n var orderDetailUrl = $window.location.origin + '/orders/#/detail/' + orderNum;\r\n $window.location.replace(orderDetailUrl);\r\n };\r\n\r\n //Need to call this on page load in order to make sure our filters are shown/hidden appropriately.\r\n filtersChanged();\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('myOrdersController', myOrdersController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function loginController($scope, $rootScope, authService) {\r\n\r\n var loggedIn = authService.isLoggedIn();\r\n\r\n $scope.render = loggedIn;\r\n\r\n if (loggedIn) {\r\n authService.getUserDataAndRedirect();\r\n } else {\r\n authService.login();\r\n }\r\n\r\n }\r\n\r\n loginController.$inject = ['$scope', '$rootScope', 'authService'];\r\n angular.module('NavisphereOnline').controller('LoginController', loginController);\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('headerScroll', ['$window', '$document', function ($window, $document) {\r\n return {\r\n link: function (scope, element) {\r\n angular.element($window).bind(\"scroll\", function() {\r\n var deltaY = this.pageYOffset || $document[0].documentElement.scrollTop;\r\n element.toggleClass('header-shrink', deltaY > 50);\r\n });\r\n }\r\n };\r\n }]);\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.directive('headerNav', ['$state', '$window', 'analyticsService', function ($state, $window, analyticsService) {\r\n return {\r\n templateUrl: 'app/header/views/header_nav_template.html',\r\n scope: {\r\n selectedState: '=',\r\n navOptions: '='\r\n },\r\n link: function(scope){\r\n scope.navSelected = function (subNav) {\r\n analyticsService.trackWithVar('navItemSelected','navItemSelectedValue', subNav.state);\r\n if(subNav.redirectToMicrosite) {\r\n $window.location.href = subNav.redirectUrl;\r\n } else if(subNav.redirectUrl) {\r\n $state.go(subNav.state, {redirectUrl: subNav.redirectUrl})\r\n } else {\r\n $state.go(subNav.state);\r\n }\r\n };\r\n scope.topNavContainsActiveSubNav = function(topNav){\r\n if(angular.isDefined(topNav) && angular.isDefined(topNav.navOptions)) {\r\n for (var i = 0; i < topNav.navOptions.length; i++) {\r\n if (scope.selectedState === topNav.navOptions[i].state){\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n }\r\n };\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n InternalHeaderController.$inject = ['$scope', '$rootScope', '$state', 'analyticsService', 'authService', 'UserPermissionService', 'ModalService',\r\n 'OrderEntryPromptService', 'OrderLockPromptService', 'OrderLockHelper', 'OrderService', 'APPLICATIONS',\r\n 'WalkthroughHelper', 'searchBaseUrl', 'reportsUIBaseUrl', 'WalkthroughService', 'InternalHeaderService', 'localStorageService', '$timeout', 'ReportHubConfigService', 'user', '$location',\r\n 'externalRoutesService', 'WindowLocationHref', '$transitions', '$window', 'AcknowledgementHelper', 'MERGE_ACCOUNTS'];\r\n function InternalHeaderController($scope, $rootScope, $state, analyticsService, authService, UserPermissionService, ModalService,\r\n OrderEntryPromptService, OrderLockPromptService, OrderLockHelper, OrderService, APPLICATIONS,\r\n WalkthroughHelper, searchBaseUrl, reportsUIBaseUrl, WalkthroughService, InternalHeaderService, localStorageService, $timeout, ReportHubConfigService, user, $location,\r\n externalRoutesService, WindowLocationHref, $transitions, $window, AcknowledgementHelper, MERGE_ACCOUNTS) {\r\n var ieBannerKey = 'showIEBannerWarning';\r\n\r\n $scope.walkthroughTimeOffset = 2.5;\r\n $scope.introExitTimeStamp = 0;\r\n $scope.introStartTimeStamp = 0;\r\n $scope.introStepsViewed = 0;\r\n $scope.introRunning = false;\r\n $scope.userApplications = localStorageService.get(\"users.applications\");\r\n $scope.closedBannerIds = localStorageService.get('closedBannerIds') ? localStorageService.get('closedBannerIds') : [];\r\n $scope.userAppLinks = [];\r\n getUserAppLinks();\r\n $scope.bannerList = [];\r\n getBanners();\r\n $scope.user = user;\r\n $scope.IntroOptions = {\r\n steps: [],\r\n showStepNumbers: false,\r\n exitOnOverlayClick: false,\r\n exitOnEsc: true,\r\n nextLabel: 'Next',\r\n prevLabel: 'Previous',\r\n skipLabel: 'Close',\r\n scrollToElement: true,\r\n doneLabel: 'Finish',\r\n disableInteraction: true\r\n };\r\n $scope.notifcationSettingsFeatureFlag = $rootScope.featureFlags.notifcationSettingsFeatureFlag;\r\n $scope.hideMaintenanceBanner = function (bannerMessageId, selectedIndex) {\r\n $scope.closedBannerIds.push(bannerMessageId);\r\n localStorageService.set('closedBannerIds', $scope.closedBannerIds);\r\n $scope.bannerList.splice(selectedIndex, 1);\r\n };\r\n\r\n if(!sessionStorage.getItem(ieBannerKey)) {\r\n sessionStorage.setItem(ieBannerKey, 'true');\r\n }\r\n\r\n function getBanners() {\r\n var application = $scope.userApplications && _.find($scope.userApplications, function(application) {\r\n return application.applicationId === APPLICATIONS.Online2;\r\n });\r\n\r\n InternalHeaderService.getBannerMessageByAppId({ applicationId: application[\"applicationId\"] }).$promise.then(function (data) {\r\n _.forEach(data.banners, function (banner) {\r\n if ($scope.closedBannerIds && !($scope.closedBannerIds.indexOf(banner.id) != -1)) {\r\n var now = new Date();\r\n var bannerStartDisplayTime = new Date(Date.parse(banner.fromDate + ' ' + banner.fromTime));\r\n var bannerEndDisplayTime = new Date(Date.parse(banner.toDate + ' ' + banner.toTime));\r\n if (now >= bannerStartDisplayTime && now <= bannerEndDisplayTime) {\r\n $scope.bannerList.push(banner);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n function getUserAppLinks() {\r\n $scope.userApplications && _.forEach($scope.userApplications, function (application) {\r\n if (application.isEnabled && application.name && application.url) {\r\n var url = application.applicationId == APPLICATIONS.Online1 ? application.url + '/login.aspx' : application.url;\r\n var appLink = {\r\n url: url.replace(/\\/$/, ''),\r\n name: application.name,\r\n isCurrentApp: application.applicationId === APPLICATIONS.Online2\r\n };\r\n $scope.userAppLinks.push(appLink);\r\n }\r\n });\r\n }\r\n\r\n $scope.getInitials = function () {\r\n return user.firstName[0] + user.lastName[0];\r\n }\r\n\r\n $scope.stepViewed = function () {\r\n $scope.introStepsViewed++;\r\n };\r\n\r\n $scope.introExited = function () {\r\n if ($scope.introRunning) {\r\n $scope.introExitTimeStamp = Date.now();\r\n WalkthroughHelper.recacheWalkthroughs();\r\n $scope.introRunning = false;\r\n\r\n var walkthrough = WalkthroughHelper.getCachedWalkthrough();\r\n WalkthroughService.insertUserWalkthrough({\r\n walkthroughID: walkthrough.WalkthroughID\r\n });\r\n }\r\n };\r\n\r\n $scope.setIntroRunningFlag = function () {\r\n $scope.introRunning = true;\r\n };\r\n\r\n $scope.navOptions = [\r\n {\r\n textKey: \"DASHBOARD\",\r\n state: 'app.dashboard'\r\n }\r\n ];\r\n\r\n if (UserPermissionService.hasPermission('Get a Quote')) {\r\n var quotingNavOptions = [];\r\n\r\n quotingNavOptions.push({\r\n textKey: \"GET_A_QUOTE\",\r\n state: 'app.getAQuote'\r\n });\r\n quotingNavOptions.push({\r\n textKey: \"QUOTE_HISTORY\",\r\n state: 'app.quoteHistory'\r\n });\r\n $scope.navOptions.push({\r\n textKey: \"QUOTING\",\r\n isSubMenu: true,\r\n navOptions: quotingNavOptions\r\n });\r\n }\r\n\r\n var orderNavOptions = [];\r\n if (UserPermissionService.hasPermission('Create Order')) {\r\n orderNavOptions.push({\r\n textKey: \"CREATE_ORDER\",\r\n state: 'create',\r\n redirectUrl: '/orders/#/create',\r\n redirectToMicrosite: true\r\n });\r\n }\r\n\r\n if (UserPermissionService.hasPermission('Draw PO')) {\r\n orderNavOptions.push({\r\n textKey: \"DRAW_PO\",\r\n state: 'app.drawPO'\r\n });\r\n }\r\n\r\n if (UserPermissionService.hasPermission('Create Order') ||\r\n UserPermissionService.hasPermission('Account Templates')) {\r\n orderNavOptions.push({\r\n textKey: \"MANAGE_TEMPLATES\",\r\n state: 'templates',\r\n redirectUrl: '/templates/#/',\r\n redirectToMicrosite: true\r\n });\r\n }\r\n\r\n if (UserPermissionService.hasPermission('Load Create (Interop)')) {\r\n orderNavOptions.push({\r\n textKey: \"CREATE_LOAD\",\r\n state: 'outgoingBridge',\r\n redirectUrl: appConfig.legacyOnlineBaseUrl + '/DSE/SelectShipmentEntry.aspx'\r\n });\r\n }\r\n\r\n if (UserPermissionService.hasPermission('Purchase Order Draw')) {\r\n orderNavOptions.push({\r\n textKey: \"PURCHASE_ORDER_DRAW\",\r\n state: 'purchaseorder',\r\n redirectUrl: '/purchaseorder/#/',\r\n redirectToMicrosite: true\r\n });\r\n }\r\n\r\n orderNavOptions.push({\r\n textKey: \"STANDARD_OPERATING_PROCEDURES\",\r\n state: 'sop',\r\n redirectUrl: '/documents/#/sop',\r\n redirectToMicrosite: true\r\n });\r\n\r\n if (orderNavOptions.length > 0) {\r\n $scope.navOptions.push({\r\n textKey: 'ORDERS',\r\n isSubMenu: true,\r\n navOptions: orderNavOptions\r\n });\r\n }\r\n\r\n var trackingNavOptions = [];\r\n trackingNavOptions.push({\r\n textKey: \"SEARCH\",\r\n state: 'search',\r\n redirectUrl: searchBaseUrl,\r\n redirectToMicrosite: true\r\n });\r\n\r\n trackingNavOptions.push({\r\n textKey: \"MAPS\",\r\n state: 'app.shipmentMap'\r\n });\r\n\r\n $scope.navOptions.push({\r\n textKey: \"TRCK\",\r\n isSubMenu: true,\r\n navOptions: trackingNavOptions\r\n });\r\n\r\n var hasApPermission = UserPermissionService.hasPermission('Accounts Payable');\r\n var hasSecurePayPermission = UserPermissionService.hasPermission('Secure Pay')\r\n\r\n if (hasApPermission || hasSecurePayPermission) {\r\n var apNavOptions = [];\r\n if (hasApPermission) {\r\n apNavOptions.push({\r\n textKey: \"ACCOUNT_SUMMARY\",\r\n state: 'app.accountSummary'\r\n });\r\n apNavOptions.push({\r\n textKey: \"SEARCH_INVOICES\",\r\n state: 'app.searchInvoices'\r\n });\r\n }\r\n\r\n if (hasSecurePayPermission) {\r\n apNavOptions.push({\r\n textKey: \"SECURE_PAY\",\r\n state: 'payments',\r\n redirectUrl: '/payments/?cid=95ab3/#',\r\n redirectToMicrosite: true\r\n });\r\n }\r\n\r\n $scope.navOptions.push({\r\n textKey: 'ACCOUNTS_PAYABLE',\r\n isSubMenu: true,\r\n navOptions: apNavOptions\r\n });\r\n }\r\n\r\n if (UserPermissionService.hasPermission('Reverse Logistics')) {\r\n $scope.navOptions.push({\r\n textKey: \"REVERSE_LOGISTICS\",\r\n state: 'app.reverseLogisticsSearch'\r\n });\r\n }\r\n\r\n var rptSet = ReportHubConfigService.getReportList();\r\n\r\n if (UserPermissionService.inPermissionSet(rptSet)) {\r\n\r\n $scope.navOptions.push({\r\n textKey: 'REPORTS',\r\n isSubMenu: false,\r\n redirectUrl: reportsUIBaseUrl,\r\n redirectToMicrosite: true\r\n })\r\n }\r\n\r\n $scope.expanded = true;\r\n $scope.selectedState = '';\r\n\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'OK',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_EXIT_THIS_ORDER',\r\n bodyText: 'ALL_INFORMATION_ENTERED_FOR_THIS_ORDER_WILL_BE_LOS'\r\n };\r\n\r\n $scope.showWalkthrough = function () {\r\n var preferences = authService.getPreferences();\r\n var walkthrough = WalkthroughHelper.getCachedWalkthrough();\r\n if (walkthrough && !walkthrough.Dismissed && !preferences.dismissAllWalkthroughs) {\r\n WalkthroughService.getWalkthrough({\r\n walkthroughID: walkthrough.WalkthroughID\r\n }).$promise.then(function (response) {\r\n var parsedSteps = JSON.parse(response.Steps);\r\n $scope.IntroOptions.steps = parsedSteps.steps;\r\n $scope.introStartTimeStamp = Date.now();\r\n $scope.introTimeOut = $timeout(function () {\r\n $scope.callWalkthrough();\r\n }, 2500);\r\n });\r\n }\r\n };\r\n\r\n $scope.logOut = function () {\r\n analyticsService.track('loggedOut');\r\n var entryInProgress = OrderEntryPromptService.getEntryInProgress();\r\n if (entryInProgress) {\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n authService.logout();\r\n }\r\n });\r\n } else if (OrderLockPromptService.lock) {\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n OrderLockHelper.releaseOrderLock();\r\n authService.logout();\r\n }\r\n });\r\n } else {\r\n authService.logout();\r\n }\r\n\r\n };\r\n\r\n $scope.onTrackKeyPress = function (event) {\r\n if (event.keyCode === 13) {\r\n $scope.headerTrack();\r\n event.preventDefault();\r\n return false;\r\n }\r\n };\r\n\r\n $scope.headerTrack = function () {\r\n var searchParam = {\r\n search: $scope.headerSearch\r\n };\r\n\r\n analyticsService.trackWithVar('headerSearch', 'headerSearchValue', $scope.headerSearch);\r\n $scope.headerSearch = '';\r\n\r\n externalRoutesService.search(searchParam);\r\n };\r\n\r\n $scope.goToUserPreferences = function () {\r\n analyticsService.track('userSettings');\r\n $state.go('app.userPreferences');\r\n };\r\n\r\n $scope.goToNotificationPreferences = function () {\r\n analyticsService.track('notificationSettings');\r\n if ($scope.notifcationSettingsFeatureFlag) {\r\n $window.location.href = appConfig.notificationSettingsLink;\r\n } else {\r\n $state.go('app.notificationPreferences');\r\n }\r\n };\r\n\r\n $scope.goToMergeAccounts = function () {\r\n analyticsService.track('mergeAccounts');\r\n $window.location.href = appConfig.mergeAccountsUrl;\r\n };\r\n\r\n $scope.isBrowserIE = function() {\r\n return(!!window.MSInputMethodContext && 'documentMode' in document && sessionStorage.getItem(ieBannerKey) == 'true');\r\n }\r\n\r\n $scope.hideIEBannerWarning = function() {\r\n sessionStorage.setItem(ieBannerKey,'false');\r\n }\r\n\r\n var setSelectedState = function (state) {\r\n $scope.selectedState = state;\r\n };\r\n setSelectedState($state.current.name);\r\n\r\n $scope.$on('$locationChangeStart', function () {\r\n $timeout.cancel($scope.introTimeOut);\r\n });\r\n\r\n $transitions.onSuccess({}, function(transition) {\r\n setSelectedState(transition.to().name);\r\n });\r\n\r\n $transitions.onSuccess('app.dashboard', function() {\r\n $scope.showWalkthrough();\r\n })\r\n\r\n $scope.$on('$viewContentLoaded', function () {\r\n $scope.showWalkthrough();\r\n });\r\n }\r\n app.controller('InternalHeaderController', InternalHeaderController);\r\n})();\r\n\n(function() {\r\n function ModeTranslatorService() {\r\n var transportModeMap = {\r\n \"TL\": \"TRUCKLOAD\",\r\n \"DAIR\": \"DOMESTIC_AIR\",\r\n \"IAIR\": \"INTERNATIONAL_AIR\",\r\n \"IMDL\": \"INTERMODAL\",\r\n \"Consol\": \"CONSOLIDATED\"\r\n };\r\n\r\n var orderTransportModeIdMap = {\r\n 1481: \"TRUCKLOAD\",\r\n 1480: \"BULK\",\r\n 1336: \"INTERMODAL\",\r\n 1293: \"AIR\",\r\n 1084: \"AIR\",\r\n 1482: \"FLATBED\",\r\n 1483: \"TRUCKLOAD\",\r\n 1484: \"LTL\",\r\n 1486: \"LTL\",\r\n 1477: \"CONSOLIDATED\"\r\n };\r\n\r\n this.transportModeMap = transportModeMap;\r\n this.orderTransportModeIdMap = orderTransportModeIdMap;\r\n\r\n this.getAbbreviatedTransportMode = function(displayName) {\r\n var returnVal = displayName;\r\n\r\n _.forEach(transportModeMap, function(value, key){\r\n if(displayName === value){\r\n returnVal = key;\r\n }\r\n });\r\n\r\n return returnVal;\r\n };\r\n };\r\n\r\n angular.module(\"NavisphereOnline\").service(\"ModeTranslatorService\", ModeTranslatorService);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n function LocationSelectionHelperService() {\r\n this.restructureLocation = function(item) {\r\n return {\r\n address: {\r\n city: item.name,\r\n country: item.countryCode,\r\n stateProvince: item.adminDistrictCode,\r\n postalCode: item.postalCode,\r\n adminDistrict: item.adminDistrict,\r\n countryName: item.countryName,\r\n id: item.id,\r\n latitude: item.lat,\r\n longitude: item.lon,\r\n alternateNames: item.alternateNames,\r\n subDistricts: item.subDistricts\r\n },\r\n adminDistrictCode: item.adminDistrictCode,\r\n countryCode: item.countryCode,\r\n name: item.name,\r\n postalCode: item.postalCode,\r\n specialRequirementCodes: item.specialRequirementCodes\r\n }\r\n };\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"LocationSelectionHelperService\", LocationSelectionHelperService);\r\n})();\r\n\n(function () {\r\n\t\"use strict\";\r\n\r\n\tGAQService.$inject = [\"$filter\", \"$rootScope\", \"$state\", \"analyticsService\", \"$uibModal\", \"CustomerPartyService\", \"GAQAccessorialService\", \"QuoteService\", \"BolCommentService\"];\r\n\r\n\tfunction GAQService($filter, $rootScope, $state, analyticsService, $uibModal, CustomerPartyService, GAQAccessorialService, QuoteService, BolCommentService) {\r\n\t\tvar noRatesFoundMap = {\r\n\t\t\tgetAQuote: GAQNoRatesCallback,\r\n\t\t\tquoteHistory: quoteHistoryNoRatesCallback\r\n\t\t};\r\n\t\tvar loadingModal;\r\n\r\n\t\tthis.getQuote = getQuote;\r\n\t\tthis.setInitialOrderState = setInitialOrderState;\r\n\r\n /**\r\n * Quote to Order is at its core a create order process. Getting quotes should be understood as simply a layer on\r\n * top of the create order process. Given this, it is imperative that in constructing the Get A Quote params, nothing\r\n * in $scope.order should actually be changed, as those changes will likely have downstream consequences when the user\r\n * goes to submit an order. Put another way, $scope.order constructed to suit the needs of the Create Order service, and\r\n * constructGetAQuoteParams is simply a way of making a copy of $scope.order conform to the Get A Quote service.\r\n *\r\n * @param {Object} order\r\n * @param {Boolean} isMetric\r\n * @param {string} requestType\r\n * @returns {Object} Get A Quote params\r\n */\r\n\t\tfunction constructGetAQuoteParams(order, isMetric, requestType) {\r\n\t\t\tvar selectedAccessorials = getSelectedAccessorials(order);\r\n\t\t\ttrackAccessorialSelections(selectedAccessorials);\r\n\t\t\tvar dateValue = order.pickupDate;\r\n var orderPickupDate = moment.parseZone(dateValue).format(\"L LT\");\r\n\r\n\t\t\tvar quoteParams = {\r\n\t\t\t\tcustomer: order.customer,\r\n\t\t\t\tshipDate: orderPickupDate,\r\n\t\t\t\torigin: getOriginLocation(order),\r\n\t\t\t\tdestination: getDestinationLocation(order),\r\n\t\t\t\tuseMetric: isMetric,\r\n\t\t\t\tactualWeight: getTotalWeight(order.items),\r\n\t\t\t\tfreightClass: 0,\r\n\t\t\t\titems: constructItems(order),\r\n\t\t\t\taccessorials: constructAccessorialCodes(selectedAccessorials),\r\n requestType: requestType,\r\n isTransactional: order.isTransactional,\r\n specialServiceList: setSpecialServiceList(order.isTeam)\r\n\t\t\t};\r\n\t\t\treturn quoteParams;\r\n\t\t}\r\n\r\n\t\tfunction constructItems(order) {\r\n\t\t\tvar items = order.items\r\n\t\t\tvar getAQuoteItems = _.cloneDeep(items);\r\n\r\n\t\t\t_.forEach(getAQuoteItems, function (item) {\r\n\t\t\t\titem.pieces = item.quantity;\r\n\t\t\t\tif (item.packaging && item.packaging.refDataCode) {\r\n\t\t\t\t\titem.packagingType = item.packaging.refDataCode;\r\n\t\t\t\t}\r\n\t\t\t\tif (item.commodity == null || item.commodity === undefined) {\r\n\t\t\t\t\thydrateItemSearch(item, order);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdeleteTemporyItemFreightClassProperties(item);\r\n\t\t\t\thandleFreightClass(item);\r\n\t\t\t\thandleTempCategory(item);\r\n\t\t\t\thandleDeepFrozen(item);\r\n\t\t\t});\r\n\r\n\t\t\treturn getAQuoteItems;\r\n\t\t}\r\n\r\n\t\tfunction deleteTemporyItemFreightClassProperties(item) {\r\n\t\t\tif (item) {\r\n\t\t\t\tfor (var temporaryProperty in item) {\r\n\t\t\t\t\tif (/_temporary.*/.test(temporaryProperty)) {\r\n\t\t\t\t\t\tdelete item[temporaryProperty];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction hydrateItemSearch(item, order) {\r\n\t\t\treturn BolCommentService.getSearchItem(item, order.customer).then(function () {\r\n\t\t\t\treturn item;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction getAllAccessorials(order) {\r\n\t\t\tvar accessorials = [];\r\n\r\n\t\t\tArray.prototype.push.apply(accessorials, order.originAccessorials);\r\n\t\t\tArray.prototype.push.apply(accessorials, order.destinationAccessorials);\r\n\t\t\tArray.prototype.push.apply(accessorials, order.overallAccessorials);\r\n\r\n\t\t\treturn accessorials;\r\n\t\t}\r\n\r\n\t\tfunction getSelectedAccessorials(order) {\r\n\t\t\tvar allAccessorials = getAllAccessorials(order);\r\n\t\t\tvar checkedAccessorials = allAccessorials.filter(function (a) { return a.checked; });\r\n\t\t\treturn checkedAccessorials;\r\n\t\t}\r\n\r\n\t\tfunction trackAccessorialSelections(accessorials) {\r\n\t\t\t_.forEach(accessorials, function (accessorial) {\r\n\t\t\t\tanalyticsService.trackWithVar('getAQuote_Accessorial', 'getAQuote_accessorialValue', accessorial.name);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction constructAccessorialCodes(accessorials) {\r\n\t\t\tvar codes = accessorials.map(function (a) {\r\n\t\t\t\tvar code = { RefDataCode: a.code };\r\n\t\t\t\treturn code;\r\n\t\t\t});\r\n\t\t\treturn codes;\r\n\t\t}\r\n\r\n\t\tfunction constructLocation(location, accessorials) {\r\n\t\t\tif (accessorials) {\r\n\t\t\t\tvar selectedAccessorials = accessorials.filter(function (a) { return a.checked; });\r\n\t\t\t\tlocation.specialRequirementCodes = constructSpecialRequirementCodes(selectedAccessorials);\r\n\t\t\t}\r\n\t\t\treturn location;\r\n\t\t}\r\n\r\n\t\tfunction getOriginLocation(order) {\r\n\t\t\tif (order.originAccessorials) {\r\n\t\t\t\tvar originAccessorials = order.originAccessorials.filter(function (a) { return a.checked; });\r\n\t\t\t\torder.pickup.specialRequirementCodes = constructSpecialRequirementCodes(originAccessorials);\r\n\t\t\t}\r\n\t\t\treturn order.pickup;\r\n\t\t}\r\n\r\n\t\tfunction getDestinationLocation(order) {\r\n\t\t\tif (order.destinationAccessorials) {\r\n\t\t\t\tvar destinationAccessorials = order.destinationAccessorials.filter(function (a) { return a.checked; });\r\n\t\t\t\torder.deliver.specialRequirementCodes = constructSpecialRequirementCodes(destinationAccessorials);\r\n\t\t\t}\r\n\t\t\treturn order.deliver;\r\n\t\t}\r\n\r\n\t\tfunction constructSpecialRequirementCodes(accessorials) {\r\n\t\t\tvar codes = accessorials.map(function (a) { return a.specialRequirementCode; });\r\n\t\t\treturn codes;\r\n\t\t}\r\n\r\n\t\tfunction getQuote(order, user, isMetric, noRatesCallbackType, requestType) {\r\n\t\t\tvar getAQuoteParams;\r\n\r\n\t\t\topenLoadingModal();\r\n\r\n\t\t\tCustomerPartyService.getOnlineContact({\r\n\t\t\t\tpartyCode: order.customer.partyCode,\r\n\t\t\t\tuserName: user.name\r\n\t\t\t}, function (response) {\r\n\t\t\t\tif (response.partyID) {\r\n\t\t\t\t\torder.customer.contactInfo = {};\r\n\t\t\t\t\torder.customer.contactInfo.emailAddress = response.emailAddress;\r\n\t\t\t\t\torder.customer.contactInfo.phoneNumber = response.phoneNumber;\r\n\t\t\t\t\torder.customer.contactInfo.name = response.name;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgetAQuoteParams = constructGetAQuoteParams(order, isMetric, requestType);\r\n\r\n\t\t\t\tQuoteService.save(getAQuoteParams).$promise.then(function (result) {\r\n\t\t\t\t\tif (_.isEmpty(result.quoteSummaryList)) {\r\n\t\t\t\t\t\tnoRatesFoundMap[noRatesCallbackType](order);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tloadingModal.close(result);\r\n\r\n\t\t\t\t\t$state.go(\"app.getAQuoteResults\", {\r\n\t\t\t\t\t\tgetAQuoteParams: getAQuoteParams,\r\n\t\t\t\t\t\tquoteRequestId: result.quoteRequestId,\r\n\t\t\t\t\t\tquoteResults: result.quoteSummaryList,\r\n\t\t\t\t\t\trawQuoteParams: order\r\n\t\t\t\t\t});\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\tnoRatesFoundMap[noRatesCallbackType](order);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction GAQNoRatesCallback() {\r\n\t\t\tloadingModal.close();\r\n\t\t\t$rootScope.$broadcast(\"noQuotesFound\");\r\n\t\t}\r\n\r\n\t\tfunction getTotalWeight(items) {\r\n\t\t\tvar total = 0;\r\n\r\n\t\t\t_.forEach(items, function (commodity) {\r\n\t\t\t\ttotal += commodity.weight;\r\n\t\t\t});\r\n\r\n\t\t\treturn total;\r\n\t\t}\r\n\r\n\t\tfunction handleFreightClass(item) {\r\n\t\t\tif (item.freightClass && item.freightClass.label) {\r\n\t\t\t\titem.freightClass = item.freightClass.label;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction handleTempCategory(item) {\r\n\t\t\tif (item.tempCategory && item.tempCategory.refDataCode) {\r\n\t\t\t\titem.tempCategory = item.tempCategory.refDataCode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction handleDeepFrozen(item) {\r\n\t\t\tif (item.tempCategory === \"DeepFrozen\") {\r\n\t\t\t\titem.tempCategory = \"Deep Frozen\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction openLoadingModal() {\r\n\t\t\tloadingModal = $uibModal.open({\r\n\t\t\t\ttemplateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n\t\t\t\tsize: 'sm',\r\n\t\t\t\tcontroller: 'loadingSpinnerController',\r\n\t\t\t\tbackdrop: 'static',\r\n\t\t\t\tresolve: {\r\n\t\t\t\t\ttitle: function () {\r\n\t\t\t\t\t\treturn $filter('translate')('PROCESSING');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction quoteHistoryNoRatesCallback(order) {\r\n\t\t\tloadingModal.close();\r\n\t\t\t$state.go(\"app.getAQuote\", {\r\n\t\t\t\tnoQuotesFound: true,\r\n\t\t\t\trawQuoteParams: order\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction setInitialOrderState() {\r\n\t\t\treturn {\r\n\t\t\t\titems: [],\r\n\t\t\t\tcustomer: null,\r\n\t\t\t\tdeliver: null,\r\n\t\t\t\tdestinationAccessorials: GAQAccessorialService.getDestinationAccessorials(),\r\n\t\t\t\toriginAccessorials: GAQAccessorialService.getOriginAccessorials(),\r\n\t\t\t\toverallAccessorials: GAQAccessorialService.getOverallAccessorials(),\r\n\t\t\t\tpickup: null,\r\n\t\t\t\tpickupDate: new Date(),\r\n isTeam: false\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setSpecialServiceList(isTeamRequest) {\r\n\t if (isTeamRequest) {\r\n\t return ['EXD']\r\n }\r\n }\r\n\r\n\tangular.module(\"NavisphereOnline\").service(\"GAQService\", GAQService);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n\r\n GAQAccessorialService.$inject = [];\r\n\r\n function GAQAccessorialService() {\r\n this.getDestinationAccessorials = getDestinationAccessorials;\r\n this.getOriginAccessorials = getOriginAccessorials;\r\n this.getOverallAccessorials = getOverallAccessorials;\r\n this.getDestinationAccessorialsWithSelections = getDestinationAccessorialsWithSelections;\r\n this.getOriginAccessorialsWithSelections = getOriginAccessorialsWithSelections;\r\n this.getOverallAccessorialsWithSelections = getOverallAccessorialsWithSelections;\r\n\r\n function getDestinationAccessorials() {\r\n return [\r\n {\r\n name: \"LIFT_GATE\",\r\n checked: false,\r\n code: \"LFT\",\r\n specialRequirementCode: \"LFT\",\r\n number: 5381\r\n }, {\r\n name: \"INSIDE_DELIVERY\",\r\n checked: false,\r\n code: \"IDL\",\r\n specialRequirementCode: \"IDL\",\r\n number: 646\r\n }, {\r\n name: \"RESIDENTIAL_DELIVERY_FEE\",\r\n checked: false,\r\n code: \"RES\",\r\n specialRequirementCode: \"RES\",\r\n number: 700\r\n }, {\r\n name: \"LIMITED_ACCESS\",\r\n checked: false,\r\n code: \"DLA\",\r\n specialRequirementCode: \"DLA\",\r\n number: 3453\r\n }, {\r\n name: \"TRADE_SHOW_OR_CONVENTION\",\r\n checked: false,\r\n code: \"EBD\",\r\n specialRequirementCode: \"EBD\",\r\n number: 620\r\n }, {\r\n name: \"CONSTRUCTION_SITE\",\r\n checked: false,\r\n code: \"CSD\",\r\n specialRequirementCode: \"CSD\",\r\n number: 3487\r\n }, {\r\n name: \"PICK_UP_AT_CARRIER_TERMINAL\",\r\n checked: false,\r\n code: \"PKU\",\r\n specialRequirementCode: \"PUT\",\r\n number: 5379\r\n }\r\n ]\r\n }\r\n\r\n function getOverallAccessorials() {\r\n return [\r\n {\r\n name: \"BLIND_SHIPMENT\",\r\n checked: false,\r\n code: \"BLD\",\r\n number: 5153\r\n }, {\r\n name: \"SORT_AND_SEGREGATE\",\r\n checked: false,\r\n code: \"SEG\",\r\n number: 707\r\n }, {\r\n name: \"COLLECT_ON_DELIVERY\",\r\n checked: false,\r\n code: \"COL\",\r\n number: 585\r\n }\r\n ]\r\n }\r\n\r\n function getOriginAccessorials() {\r\n return [\r\n {\r\n name: \"LIFT_GATE\",\r\n checked: false,\r\n code: \"LFT\",\r\n specialRequirementCode: \"LFT\",\r\n number: 652\r\n }, {\r\n name: \"INSIDE_PICKUP\",\r\n checked: false,\r\n code: \"IPU\",\r\n specialRequirementCode: \"IPU\",\r\n number: 659\r\n }, {\r\n name: \"RESIDENTIAL_PICKUP_FEE\",\r\n checked: false,\r\n code: \"REP\",\r\n specialRequirementCode: \"REP\",\r\n number: 699\r\n }, {\r\n name: \"LIMITED_ACCESS\",\r\n checked: false,\r\n code: \"PLA\",\r\n specialRequirementCode: \"PLA\",\r\n number: 3454\r\n }, {\r\n name: \"TRADE_SHOW_OR_CONVENTION\",\r\n checked: false,\r\n code: \"EBP\",\r\n specialRequirementCode: \"EBD\",\r\n number: 5380\r\n }, {\r\n name: \"CONSTRUCTION_SITE\",\r\n checked: false,\r\n code: \"CSP\",\r\n specialRequirementCode: \"CSP\",\r\n number: 3500\r\n }, {\r\n name: \"DROP_OFF_AT_CARRIER_TERMINAL\",\r\n checked: false,\r\n code: \"DRP\",\r\n specialRequirementCode: \"DAT\",\r\n number: 5379\r\n }\r\n ]\r\n }\r\n\r\n function getDestinationAccessorialsWithSelections(specialRequirementCodes) {\r\n var accessorials = getDestinationAccessorials();\r\n var withSelections = getLocationAccessorialsWithSelections(specialRequirementCodes, accessorials);\r\n return withSelections;\r\n }\r\n\r\n function getOriginAccessorialsWithSelections(specialRequirementCodes) {\r\n var accessorials = getOriginAccessorials();\r\n var withSelections = getLocationAccessorialsWithSelections(specialRequirementCodes, accessorials);\r\n return withSelections;\r\n }\r\n\r\n function getOverallAccessorialsWithSelections(selectedAccessorials) {\r\n var overallAccessorials = getOverallAccessorials();\r\n var withSelections = overallAccessorials.map(function(a) { return createSelectedOverallAccessorial(selectedAccessorials, a) });\r\n return withSelections;\r\n }\r\n\r\n function getLocationAccessorialsWithSelections(specialRequirementCodes, accessorials) {\r\n var withSelections = accessorials.map(function(a) { return createSelectedLocationAccessorial(specialRequirementCodes, a) });\r\n return withSelections;\r\n }\r\n\r\n function createSelectedLocationAccessorial(specialRequirementCodes, accessorial) {\r\n accessorial.checked = containsSpecialRequirementCode(specialRequirementCodes, accessorial.specialRequirementCode);\r\n return accessorial;\r\n }\r\n\r\n function createSelectedOverallAccessorial(selectedAccessorials, accessorial) {\r\n if (!selectedAccessorials) {\r\n return accessorial;\r\n }\r\n accessorial.checked = selectedAccessorials.some(function(a) { return a.rateCode === accessorial.code });\r\n return accessorial;\r\n }\r\n\r\n function containsSpecialRequirementCode(specialRequirementCodes, specialRequirementCode) {\r\n if (!specialRequirementCodes) {\r\n return false;\r\n }\r\n var containsSpecialRequirement = specialRequirementCodes.some(function(s) { return s === specialRequirementCode });\r\n return containsSpecialRequirement;\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"GAQAccessorialService\", GAQAccessorialService);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n var app = angular.module(\"NavisphereOnline\");\r\n\r\n selectAddressController.$inject = [\"$uibModalInstance\", \"$scope\", \"AddressService\", \"analyticsService\", \"customerCode\", \"LocationService\", \"locationType\", \"user\", \"UserPermissionService\"];\r\n\r\n function selectAddressController($uibModalInstance, $scope, AddressService, analyticsService, customerCode, LocationService, locationType, user, UserPermissionService) {\r\n $scope.locationType = locationType;\r\n $scope.user = user;\r\n $scope.getAddressLine1 = AddressService.GetAddressLine1;\r\n $scope.getAddressLine2 = AddressService.GetAddressLine2;\r\n $scope.getAddressLine3 = AddressService.GetAddressLine3;\r\n $scope.getAddressLine4 = AddressService.GetAddressLine4;\r\n\r\n $scope.close = function() {\r\n $uibModalInstance.dismiss(\"closed\");\r\n };\r\n\r\n $scope.add = function() {\r\n $uibModalInstance.close($scope.location);\r\n };\r\n\r\n $scope.getLocationDisplayName = function (location) {\r\n if (location) return location.addressName ? location.addressName : location.locationPartyName;\r\n return '';\r\n };\r\n\r\n function setRecentLocations() {\r\n if (customerCode) {\r\n if ($scope.locationType == \"pickup\") {\r\n LocationService.getRecentOrigins({\r\n customerCode: customerCode\r\n }).$promise.then(function (result) {\r\n $scope.recentLocations = result;\r\n });\r\n } else {\r\n LocationService.getRecentDestinations({\r\n customerCode: customerCode\r\n }).$promise.then(function (result) {\r\n $scope.recentLocations = result;\r\n });\r\n }\r\n }\r\n }\r\n\r\n $scope.refreshLocations = function (searchText) {\r\n $scope.locationResults = [];\r\n\r\n if (searchText.length < 2) {\r\n $scope.locationSearchHasNoResults = false;\r\n return $scope.locationResults;\r\n }\r\n\r\n if(angular.isUndefined($scope.hasAddLocation)){\r\n $scope.hasAddLocation = UserPermissionService.hasCustomerRole($scope.order.customer.partyCode, 'Add New Location');\r\n }\r\n\r\n return LocationService.searchPartyLocation({\r\n partyNumberOrCode: $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, ''),\r\n term: searchText,\r\n limit: 20,\r\n locationSearchType: 1,\r\n useSupplierLocation: $scope.order.customer.useSupplierLocation\r\n }, function (data) {\r\n $scope.locationResults = data.items;\r\n $scope.locationSearchHasNoResults = data.items.length === 0;\r\n });\r\n };\r\n\r\n $scope.onLocationSelected = function (item) {\r\n analyticsService.trackWithVar('selectedRecentLocation', 'selectedRecentLocationValue', \"selected recent location\" + ( ($scope.locationType)? \" for \" + $scope.locationType: \"\"));\r\n $scope.location = item;\r\n $scope.location.earliestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n $scope.location.latestTime = new Date((new Date()).setHours(0, 0, 0, 0));\r\n $scope.locationSearchHasNoResults = false;\r\n LocationService.getLocation({\r\n locationPartyNumberOrCode: item.locationPartyCode,\r\n relatedLocationId: item.relatedLocationId,\r\n useSupplierLocation: $scope.$parent.order.customer.useSupplierLocation,\r\n // Unspecified DateTimeZoneHandling :convert to a local time if a time zone is specified\r\n dateTimeZoneHandling: 2\r\n }, function (data) {\r\n if (data) {\r\n\t\t\t\t\t$scope.location.dryReceivingHours = data.dryReceivingHours;\r\n\t\t\t\t\t$scope.location.dryShippingHours = data.dryShippingHours;\r\n\r\n if (data.notes) {\r\n $scope.location.notes = data.notes.substring(0, 255);\r\n }\r\n\r\n $scope.location.name = data.name;\r\n $scope.location.adminDistrictCode = data.physicalAddress.stateProvince;\r\n $scope.location.countryCode = data.physicalAddress.country;\r\n $scope.location.postalCode = data.physicalAddress.postalCode;\r\n $scope.location.partyCode = data.partyCode;\r\n $scope.location.partyNumber = data.partyNumber;\r\n $scope.location.physicalAddress = data.physicalAddress;\r\n $scope.location.generalAddress = data.generalAddress;\r\n $scope.location.relatedLocationId = data.relatedLocationId;\r\n $scope.location.loadingTypeRDN = data.loadingTypeRDN;\r\n }\r\n });\r\n };\r\n\r\n $scope.shouldHighlightLocation = function(recent) {\r\n if ($scope.order[locationType] && $scope.order[locationType].locationPartyCode) {\r\n return _.isEqual(recent, $scope.location) || recent.locationPartyCode === $scope.order[locationType].locationPartyCode;\r\n }\r\n\r\n return _.isEqual(recent, $scope.location);\r\n };\r\n\r\n setRecentLocations();\r\n }\r\n\r\n app.controller(\"selectAddressController\", selectAddressController);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n\r\n quoteToOrderController.$inject = [\"$locale\", \"$scope\", \"$state\", \"$stateParams\", \"$uibModalStack\", \"AddressService\", \"CreateOrderRefNumberService\", \"ItemServiceHelper\", \"LocationSelectionHelper\", \"LocationService\", \"ModalService\", \"ModeTranslatorService\", \"OrderCreateService\", \"refDataDDLs\", \"ReferenceData\", \"UnitsOfMeasurementService\", \"UserPermissionService\", \"userPreferences\", \"ValidationErrorService\", \"LocationDateHelper\",\"user\", \"DateTimeService\"];\r\n\r\n function quoteToOrderController($locale, $scope, $state, $stateParams, $uibModalStack, AddressService, CreateOrderRefNumberService, ItemServiceHelper, LocationSelectionHelper, LocationService, ModalService, ModeTranslatorService, OrderCreateService, refDataDDLs, ReferenceData, UnitsOfMeasurementService, UserPermissionService, userPreferences, ValidationErrorService, LocationDateHelper,user, DateTimeService) {\r\n var modalOptions = {\r\n closeButtonText: \"CANCEL\",\r\n actionButtonText: \"OK\",\r\n headerText: \"ARE_YOU_SURE_YOU_WANT_TO_EXIT_THIS_ORDER\",\r\n bodyText: \"INFORMATION_ENTERED_FOR_THIS_ORDER_MAY_BE_LOST\"\r\n };\r\n var onRouteChangeOff;\r\n var rateSourceMap = {\r\n \"CM\": 788,\r\n \"CHR-FQ\": 5373,\r\n \"CHR-FQ Custom\": 5389,\r\n \"Transactional\": 6282,\r\n \"Contractual\": 6283,\r\n \"SGA\": 5859,\r\n \"SQ\": 5374\r\n };\r\n var stateChangeMap = {\r\n \"app.getAQuote\": {\r\n rawQuoteParams: $stateParams.rawQuoteParams\r\n },\r\n \"app.getAQuoteResults\": {\r\n getAQuoteParams: $stateParams.getAQuoteParams,\r\n quoteResults: $stateParams.quoteResults,\r\n rawQuoteParams: $stateParams.rawQuoteParams\r\n }\r\n };\r\n\r\n $scope.activeStep = 1;\r\n $scope.customer = $stateParams.rawQuoteParams.customer;\r\n $scope.customerDisplayName = $stateParams.rawQuoteParams.customer.displayName;\r\n $scope.deliveryFirstCheck = true;\r\n $scope.destination = $stateParams.destination;\r\n $scope.disabled = {\r\n isPickupDatePickerDisabled: true\r\n };\r\n $scope.format = $locale.DATETIME_FORMATS[\"shortDate\"];\r\n $scope.hasAddNewCommodityPerTrans = UserPermissionService.hasCustomerRole($scope.customer.partyCode, \"Add New Commodity Per Transaction\");\r\n $scope.hasCreateNewCommodityInPartyCatalog = UserPermissionService.hasCustomerRole($scope.customer.partyCode, \"Create New Commodity in Party Catalog\");\r\n $scope.isMetric = userPreferences.unitOfMeasure === \"metric\";\r\n $scope.isQuoteToOrder = true;\r\n $scope.itemDdlRefData = refDataDDLs;\r\n $scope.itemSummary = {\r\n lineItems: 0,\r\n weight: 0,\r\n insuranceValue: 0,\r\n pallets: 0,\r\n quantity: 0\r\n };\r\n $scope.needsRefinement = {};\r\n $scope.origin = $stateParams.origin;\r\n $scope.quote = $stateParams.quote;\r\n $scope.pickupFirstCheck = true;\r\n _.forEach($stateParams.rawQuoteParams.items, function(ritem) {\r\n _.forEach($stateParams.getAQuoteParams.items, function(gitem) {\r\n if ((ritem.isHazardous && ritem.itemID === gitem.itemID) && (ritem.commodity == null || ritem.commodity === undefined)) {\r\n ritem.commodity = gitem.commodity;\r\n }\r\n });\r\n });\r\n $scope.order = {\r\n carrierCode: $stateParams.quote.carrier.carrierCode,\r\n currencyCode: $stateParams.quote.currencyCode,\r\n customer: $stateParams.getAQuoteParams.customer,\r\n delivery: $stateParams.getAQuoteParams.destination,\r\n items: $stateParams.rawQuoteParams.items,\r\n newRefNums: CreateOrderRefNumberService.getNewRefNumList(),\r\n pickup: $stateParams.getAQuoteParams.origin,\r\n charges: hydrateCharges($stateParams.quote.rateList),\r\n referenceNumbers: [],\r\n quoteRequestId: $stateParams.quoteRequestId,\r\n readOnlyProperties: {}\r\n };\r\n\r\n setLoadingTypeOnPreselectedLocations();\r\n\r\n $scope.requstType = $stateParams.getAQuoteParams.requestType;\r\n $scope.isTruckload = isTruckloadQuote($scope.quote);\r\n\r\n $scope.orderItemsConfig = {\r\n shouldShowFilterByDescription: false,\r\n shouldShowCatalogSearch: false,\r\n isAllowedToRemoveItems: false\r\n };\r\n $scope.shouldShowInfoBox = false;\r\n $scope.stepNames = [\"Reference Numbers\", \"Pickup Details\", \"Delivery Details\", \"Shipment Items\"];\r\n $scope.totalCharge = $stateParams.totalCharge;\r\n $scope.totalWeight = $stateParams.totalWeight;\r\n $scope.user = user;\r\n $scope.userPreferences = userPreferences;\r\n $scope.validationMessages = [];\r\n\r\n addQuoteIdToRefNums();\r\n setVolumeQuoteId();\r\n doesInitialLocationNeedRefinement(\"pickup\");\r\n doesInitialLocationNeedRefinement(\"delivery\");\r\n getLocationOptions(\"pickup\");\r\n getLocationOptions(\"delivery\");\r\n initRouteChange();\r\n isFlatbedOrder();\r\n isInitialDeliveryDatePickerDisabled();\r\n isInitialLocationValid(\"pickup\");\r\n isInitialLocationValid(\"delivery\");\r\n prefillDeliveryDateTime();\r\n prefillPickupDateTime();\r\n removePlaceHolderWeightForTLCustomer();\r\n setReadOnlyItemProperties();\r\n setServiceOffering();\r\n setUnitsOfMeasurement($scope.order.items, $scope.isMetric);\r\n setOrderTeamFlag();\r\n\r\n $scope.displaySelection = displaySelection;\r\n $scope.editQuote = editQuote;\r\n $scope.getLocationDateTime = getLocationDateTime;\r\n $scope.getLocationDisplay = getLocationDisplay;\r\n $scope.getLocationDisplayName = getLocationDisplayName;\r\n $scope.getShippingMethod = getShippingMethod;\r\n $scope.getTemplate = getTemplate;\r\n $scope.getWeightMeasurement = getWeightMeasurement;\r\n $scope.hydrateLocationDateTime = hydrateLocationDateTime;\r\n $scope.refreshSearchItems = refreshSearchItems;\r\n $scope.returnToQuotes = returnToQuotes;\r\n $scope.setLocation = setLocation;\r\n $scope.showValidationError = showValidationError;\r\n $scope.submitOrder = submitOrder;\r\n $scope.isTeamQuote = isTeamQuote;\r\n\r\n var destroyDryShippingHoursWatcher = $scope.$watch('order.pickup.dryShippingHours', function(newValue){\r\n if(!newValue){\r\n return;\r\n }\r\n\r\n var earliestTime = LocationDateHelper.getOpenTimeFromHours(newValue, $scope.order.pickup.earliestDate);\r\n var latestTime = LocationDateHelper.getCloseTimeFromHours(newValue, $scope.order.pickup.latestDate);\r\n var locationDateTime = {\r\n earliestTime: earliestTime,\r\n latestTime: latestTime\r\n }\r\n $scope.hydrateLocationDateTime('pickup', locationDateTime)\r\n });\r\n $scope.$on('$destroy', destroyDryShippingHoursWatcher);\r\n\r\n var destroyDryReceivingHoursWatcher = $scope.$watch('order.delivery.dryReceivingHours', function(newValue){\r\n if(!newValue){\r\n return;\r\n }\r\n\r\n var earliestTime = LocationDateHelper.getOpenTimeFromHours(newValue, $scope.order.delivery.earliestDate);\r\n var latestTime = LocationDateHelper.getCloseTimeFromHours(newValue, $scope.order.delivery.latestDate);\r\n var locationDateTime = {\r\n earliestTime: earliestTime,\r\n latestTime: latestTime\r\n }\r\n $scope.hydrateLocationDateTime('delivery', locationDateTime);\r\n })\r\n $scope.$on('$destroy', destroyDryReceivingHoursWatcher);\r\n\r\n function addQuoteIdToRefNums() {\r\n\r\n $scope.order.referenceNumbers.push({\r\n referenceNumberType: {\r\n description: \"Quote Id\",\r\n refDataNumber: 5204\r\n },\r\n value: $stateParams.quote.quoteId\r\n })\r\n }\r\n\r\n function setVolumeQuoteId() {\r\n if ($stateParams.quote.referenceNumberList) {\r\n for (var i = 0; i < $stateParams.quote.referenceNumberList.length; ++i) {\r\n if ($stateParams.quote.referenceNumberList[i].referenceNumberTypeCode === \"CVQID\") {\r\n $scope.order.pickup.volumeQuoteId =\r\n 'VOLUME QUOTE ID ' + $stateParams.quote.referenceNumberList[i].value;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n function displaySelection(locationType) {\r\n if ($scope.order[locationType].partyCode || $scope.order[locationType].locationPartyCode) {\r\n return $scope.getLocationDisplay(locationType);\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n function doesInitialLocationNeedRefinement(locationType) {\r\n if (!$scope.order[locationType].partyCode && !$scope.order[locationType].locationCode) {\r\n $scope[locationType + \"NeedsRefinement\"] = true;\r\n $scope.needsRefinement[locationType] = $scope.order[locationType];\r\n }\r\n }\r\n\r\n /**\r\n * Return to the Get A Quote V2 search screen. Passes in the rawQuoteParams so the form can be prefilled.\r\n *\r\n * @param event\r\n */\r\n function editQuote() {\r\n $state.go(\"app.getAQuote\", stateChangeMap[\"app.getAQuote\"]);\r\n }\r\n\r\n function fillTime(locationType, timeType, time) {\r\n if (time) {\r\n $scope.order[locationType][timeType] = new Date(time);\r\n } else {\r\n var time = new Date();\r\n time.setHours(0, 0, 0, 0);\r\n $scope.order[locationType][timeType] = time;\r\n }\r\n }\r\n\r\n function formatLocationData(locationData) {\r\n _.forEach(locationData, function (location) {\r\n location[\"addressLine1\"] = AddressService.GetAddressLine1(location.address);\r\n location[\"addressLine2\"] = AddressService.GetAddressLine2(location.address);\r\n location[\"addressLine3\"] = AddressService.GetAddressLine3(location.address);\r\n location[\"addressLine4\"] = AddressService.GetAddressLine4(location.address);\r\n });\r\n }\r\n\r\n function getLocationDateTime(locationType) {\r\n return {\r\n earliestDate: $scope.order[locationType].earliestDate,\r\n latestDate: $scope.order[locationType].latestDate,\r\n earliestTime: $scope.order[locationType].earliestTime,\r\n latestTime: $scope.order[locationType].latestTime\r\n }\r\n }\r\n\r\n function getLocationDisplay(locationType) {\r\n var location = $scope.order[locationType].address;\r\n\r\n if (location.addressLine1) {\r\n return location.addressLine1 + \",\\n \" + location.city + \" \" + location.stateProvince + \" \" + location.postalCode;\r\n }\r\n\r\n return location.postalCode + \", \" + location.city + \" \" + location.stateProvince;\r\n }\r\n\r\n function getLocationDisplayName(location) {\r\n if (location) return location.addressName ? location.addressName : location.locationPartyName;\r\n return '';\r\n }\r\n\r\n function getLocationOptions(locationType) {\r\n if (!$scope.order[locationType].partyCode) {\r\n LocationService.searchPartyLocation({\r\n partyNumberOrCode: $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, \"\"),\r\n term: $scope.order[locationType].postalCode ? $scope.order[locationType].postalCode : $scope.order[locationType].address.postalCode,\r\n locationSearchType: 1,\r\n useSupplierLocation: $scope.order.customer.useSupplierLocation\r\n }, function (data) {\r\n formatLocationData(data.items);\r\n $scope[locationType + \"Options\"] = data.items;\r\n if (!$scope[locationType + \"NeedsRefinement\"]) {\r\n setDetailsForPreselectedLocation(data.items, locationType);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function setDetailsForPreselectedLocation(locationOptions, locationType) {\r\n var selectedLocation = _.find(locationOptions, function (location) {\r\n return location.locationPartyCode === $scope.order[locationType].locationCode;\r\n });\r\n\r\n var locationDateTimes = {\r\n earliestDate: $scope.order[locationType].earliestDate,\r\n earliestTime: $scope.order[locationType].earliestTime,\r\n latestDate: $scope.order[locationType].latestDate,\r\n latestTime: $scope.order[locationType].latestTime\r\n };\r\n\r\n LocationSelectionHelper.onLocationSelected(selectedLocation, $scope.order, locationType, false);\r\n\r\n $scope.order[locationType].earliestDate = locationDateTimes.earliestDate;\r\n $scope.order[locationType].earliestTime = locationDateTimes.earliestTime;\r\n $scope.order[locationType].latestDate = locationDateTimes.latestDate;\r\n $scope.order[locationType].latestTime = locationDateTimes.latestTime;\r\n }\r\n\r\n function getShippingMethod(key) {\r\n return ModeTranslatorService.transportModeMap[key] ? ModeTranslatorService.transportModeMap[key] : key;\r\n }\r\n\r\n function getTemplate(step) {\r\n return \"app/getAQuote/views/quoteToOrderStep\" + step + \".tpl.html\";\r\n } $scope.toggleInfoBox = toggleInfoBox;\r\n\r\n function getWeightMeasurement() {\r\n return $scope.isMetric ? \"kgs\" : \"lbs\";\r\n }\r\n\r\n function hydrateCharges(charges) {\r\n _.forEach(charges, function (charge) {\r\n charge.quoteId = $stateParams.quote.quoteId;\r\n charge.rateSourceRDN = rateSourceMap[charge.rateSource];\r\n charge.sourceSystemRDN = 5435;\r\n\r\n if (hasSalesQuote($stateParams.quote)) {\r\n applySalesQuoteInfo(charge, $stateParams.quote);\r\n } else {\r\n charge.quoteTypeId = 2;\r\n charge.quoteSeqNum = -1;\r\n }\r\n });\r\n\r\n return charges;\r\n }\r\n\r\n function hydrateLocationDateTime(locationType, locationDateTime) {\r\n _.forEach(locationDateTime, function (value, key) {\r\n $scope.order[locationType][key] = value;\r\n })\r\n }\r\n\r\n function initRouteChange() {\r\n onRouteChangeOff = $scope.$on(\"$stateChangeStart\", routeChange);\r\n }\r\n\r\n function isFlatbedOrder() {\r\n if ($scope.quote.transportModeType === 12) {\r\n $scope.order.isFlatbed = true;\r\n }\r\n }\r\n\r\n function isInitialDeliveryDatePickerDisabled() {\r\n $scope.disabled.isDeliveryDatePickerDisabled = (!!$stateParams.quote.transit && !isTruckloadQuote($stateParams.quote));\r\n }\r\n\r\n function isInitialLocationValid(locationType) {\r\n if ($scope.order[locationType].partyCode) {\r\n $scope[locationType + \"Temp\"] = \"valid\";\r\n } else {\r\n $scope[locationType + \"Temp\"] = null;\r\n }\r\n }\r\n\r\n function isTransactionalRate(rate) {\r\n return rate.rateSource === 'Transactional';\r\n }\r\n\r\n function isTransactionalQuote(quote) {\r\n return !!quote.rateList && _.some(quote.rateList, isTransactionalRate);\r\n }\r\n\r\n function getOrderShipDate() {\r\n return isTruckloadQuote($stateParams.quote) &&\r\n isTransactionalQuote($stateParams.quote) &&\r\n $stateParams.quote.transit &&\r\n $stateParams.quote.transit.minimumPickupDate\r\n ? $stateParams.quote.transit.minimumPickupDate\r\n : $stateParams.getAQuoteParams.shipDate;\r\n }\r\n\r\n function prefillPickupDateTime() {\r\n // Parsing Date to \"MM/DD/YYYY HH:MM\" format, to fix moving ahead one day\r\n // Bug 258056: INC9707130 - Quote to Order Date moves ahead one day\r\n var orderShipDate = getOrderShipDate();\r\n var isoUtcDate = moment.utc(orderShipDate).local().toISOString();\r\n var dateNoOffset = moment.parseZone(isoUtcDate).format(\"L LT\");\r\n $scope.order.pickup.earliestDate = new Date(dateNoOffset);\r\n $scope.order.pickup.latestDate = new Date(dateNoOffset);\r\n fillTime(\"pickup\", \"earliestTime\", $stateParams.getAQuoteParams.origin.earliestTime);\r\n fillTime(\"pickup\", \"latestTime\", $stateParams.getAQuoteParams.origin.earliestTime);\r\n }\r\n\r\n function prefillDeliveryDateTime() {\r\n if ($stateParams.quote.transit && $stateParams.quote.transit.minimumDeliveryDate) {\r\n if (typeof ($stateParams.quote.transit.minimumDeliveryDate) === 'object') {\r\n $stateParams.quote.transit.minimumDeliveryDate = $stateParams.quote.transit.minimumDeliveryDate.toISOString()\r\n }\r\n // We strip Z (offset) from utc date bc rating gives all quotes at midnight.\r\n // This keeps date from moving to previous day after converting to date object\r\n var dateNoOffset = $stateParams.quote.transit.minimumDeliveryDate ? $stateParams.quote.transit.minimumDeliveryDate.replace(/Z$/gi, '') : undefined;\r\n var deliveryDate = new Date(dateNoOffset);\r\n if ($stateParams.quote.transit.minimumTransitDays === 0 && isTruckloadQuote($stateParams.quote)) {\r\n var latestDeliveryDate = DateTimeService.getDateAddDays(1, deliveryDate)\r\n $scope.order.delivery.earliestDate = deliveryDate;\r\n $scope.order.delivery.latestDate = latestDeliveryDate;\r\n } else {\r\n $scope.order.delivery.earliestDate = deliveryDate;\r\n $scope.order.delivery.latestDate = deliveryDate;\r\n }\r\n }\r\n\r\n fillTime(\"delivery\", \"earliestTime\", $stateParams.getAQuoteParams.destination.earliestTime);\r\n fillTime(\"delivery\", \"latestTime\", $stateParams.getAQuoteParams.destination.earliestTime);\r\n }\r\n\r\n $scope.setQuoteToOrderMinDate = function () {\r\n if ($stateParams.quote.transit && isTruckloadQuote($stateParams.quote)) {\r\n var dateNoOffset = $stateParams.quote.transit.minimumDeliveryDate.replace(/Z$/gi, '');\r\n return new Date(dateNoOffset);\r\n } else {\r\n return DateTimeService.getToday()\r\n }\r\n }\r\n\r\n /**\r\n * This function removes weights from all items in\r\n * order object for Transactional Truck Load\r\n * Customers.\r\n *\r\n * Weight is required for TL TPE data request but required\r\n * on get a quote TL form. It should be populated\r\n * on order creation by user.\r\n */\r\n function removePlaceHolderWeightForTLCustomer() {\r\n if (($scope.quote.transportModeType && $scope.quote.transportModeType === 2) || $scope.quote.transportModeType === 12) {\r\n _.forEach($scope.order.items, function (item) {\r\n item.actualWeight = null;\r\n item.weight = null;\r\n });\r\n }\r\n }\r\n\r\n function refreshSearchItems(search) {\r\n return ItemServiceHelper.searchHelper(search, $scope.order.customer, $scope, true);\r\n }\r\n\r\n function returnToQuotes() {\r\n $state.go(\"app.getAQuoteResults\", stateChangeMap[\"app.getAQuoteResults\"]);\r\n }\r\n\r\n function routeChange(event, toState) {\r\n if (!$scope.orderForm || !$scope.orderForm.$dirty || toState.name === \"login\") {\r\n return;\r\n }\r\n\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === \"ok\") {\r\n onRouteChangeOff();\r\n $uibModalStack.dismissAll(result);\r\n\r\n $state.go(toState.name, stateChangeMap[toState.name]);\r\n }\r\n });\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * getLocationDateTime will grab date and time values before they are overwritten. hydrateLocationDateTime will add them to the new location.\r\n * Using getLocationDateTime and hydrateLocationDateTime allow us to reuse deliveryDatePicker and pickupDatePicker as well as their\r\n * supporting controllers.\r\n *\r\n * Having separate location pairs (pickup/pickupTemp and delivery/deliveryTemp, respectively) decouples form validation\r\n * from what is actually sent to the API.\r\n *\r\n * @param location A new location object. In this case, a specific address that has a w-code.\r\n * @param locationType \"pickup\" or \"delivery\"\r\n */\r\n function setLoadingType(locationType) {\r\n if ($scope.order[locationType].loadingTypeRDN && $scope.order[locationType].loadingTypeRDN !== null) {\r\n $scope.order[locationType].loadingType = getLoadingTypeData($scope.order[locationType].loadingTypeRDN);\r\n }\r\n }\r\n\r\n function setLoadingTypeOnPreselectedLocations() {\r\n setLoadingType('pickup');\r\n setLoadingType('delivery');\r\n }\r\n\r\n function setLocation(location, locationType) {\r\n var locationDateTime = $scope.getLocationDateTime(locationType);\r\n $scope[locationType + \"Temp\"] = location;\r\n LocationSelectionHelper.onLocationSelected(location, $scope.order, locationType, false, 2).$promise.then(function () {\r\n setLoadingType(locationType);\r\n });\r\n $scope.hydrateLocationDateTime(locationType, locationDateTime)\r\n }\r\n\r\n function getLoadingTypeData(rdn) {\r\n var loadingTypes = refDataDDLs['FBedLoadingType'];\r\n var typeData = {};\r\n\r\n _.forEach(loadingTypes, function (loadingType) {\r\n if (loadingType.refDataNumber === rdn) {\r\n typeData = loadingType;\r\n }\r\n });\r\n return typeData;\r\n }\r\n\r\n function setReadOnlyItemProperties() {\r\n _.forEach($scope.order.items, function (item) {\r\n item.readOnlyProperties = {};\r\n _.forIn(item, function (value, key) {\r\n if (key == \"isStackable\") {\r\n item.readOnlyProperties[key] = true;\r\n }\r\n else if (value && key != \"lengthCmUomLabel\") {\r\n item.readOnlyProperties[key] = true;\r\n }\r\n });\r\n if (isNonLTLFlatbedTransactional()) {\r\n item.readOnlyProperties['equipment'] = true;\r\n }\r\n });\r\n }\r\n\r\n function setServiceOffering() {\r\n // Set a default in case ReferenceData doesn't come back with a match.\r\n $scope.order.serviceOffering = {\r\n id: $stateParams.quote.serviceOfferingId\r\n };\r\n\r\n ReferenceData.getServiceOfferings().$promise.then(function (serviceOfferings) {\r\n _.forEach(serviceOfferings, function (serviceOffering) {\r\n if ($stateParams.quote.serviceOfferingId === serviceOffering.id) {\r\n $scope.order.serviceOffering = serviceOffering;\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n function setUnitsOfMeasurement(items, isMetric) {\r\n UnitsOfMeasurementService.setUnitsOfMeasurement(items, isMetric)\r\n }\r\n\r\n function showValidationError() {\r\n ValidationErrorService.showValidationError($scope);\r\n }\r\n\r\n function submitOrder() {\r\n OrderCreateService.createOrder($scope);\r\n }\r\n\r\n function toggleInfoBox() {\r\n $scope.shouldShowInfoBox = !$scope.shouldShowInfoBox;\r\n }\r\n\r\n $scope.carrierNameDisplay = function (carrierName) {\r\n if(!$scope.isTruckload) {\r\n return carrierName;\r\n }\r\n return 'CH Robinson Truckload Services';\r\n };\r\n\r\n function isTruckloadQuote(quote) {\r\n return ((quote.transportModeType && quote.transportModeType === 2) || $scope.quote.transportModeType === 12)\r\n }\r\n\r\n function isTeamQuote() {\r\n var isTeam = false;\r\n if ($stateParams.getAQuoteParams.specialServiceList) {\r\n _.forEach($stateParams.getAQuoteParams.specialServiceList, function(service) {\r\n //EXD check for expedite/team rate\r\n if (service === \"EXD\") {\r\n isTeam = true;\r\n }\r\n });\r\n }\r\n\r\n if ($scope.quote.specialServiceList) {\r\n _.forEach($scope.quote.specialServiceList, function(service) {\r\n //EXD check for expedite/team rate\r\n if (service === \"EXD\") {\r\n isTeam = true;\r\n }\r\n });\r\n }\r\n return isTeam;\r\n }\r\n\r\n $scope.shouldDisplayMode = function () {\r\n return $scope.quote.transportModeType !== 2;\r\n }\r\n\r\n function applySalesQuoteInfo(charge, quote) {\r\n _.forEach(quote.referenceNumberList, function(refNum) {\r\n if (refNum.referenceNumberTypeCode === \"SQID\") {\r\n charge.salesQuoteId = refNum.value;\r\n }\r\n if (refNum.referenceNumberTypeCode === \"QSeqNum\") {\r\n charge.quoteSeqNum = refNum.value;\r\n }\r\n });\r\n charge.quoteTypeId = 1;\r\n }\r\n\r\n function hasSalesQuote (quote) {\r\n var hasSQ = false;\r\n if (!quote.referenceNumberList || quote.referenceNumberList.length === 0) {\r\n return hasSQ;\r\n }\r\n _.forEach(quote.referenceNumberList, function (refNum) {\r\n if(refNum.referenceNumberTypeCode === \"SQID\") {\r\n hasSQ = true;\r\n }\r\n });\r\n return hasSQ;\r\n }\r\n\r\n function isNonLTLFlatbedTransactional() {\r\n var hasTransactionRate = false;\r\n _.forEach($scope.quote.rateList, function(rate) {\r\n if(rate.rateSource === \"Transactional\" || rate.rateSource === \"ManualQuote\") {\r\n hasTransactionRate = true;\r\n }\r\n });\r\n return ($scope.quote.transportModeType === 12 && hasTransactionRate);\r\n }\r\n\r\n function setOrderTeamFlag() {\r\n $scope.order.isTeam = isTeamQuote();\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").controller(\"quoteToOrderController\", quoteToOrderController)\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('NavisphereOnline');\r\n\r\n getAQuoteResultsController.$inject = [\"$scope\", \"$rootScope\", \"$state\", \"$stateParams\", \"DateTimeService\", \"analyticsService\", \"FilterService\", \"ModeTranslatorService\", \"QuoteService\", \"ServiceOffering\", \"UserPermissionService\", \"userPreferences\", \"DocumentHelper\", \"API_BASE_URL\", \"$uibModal\", \"$window\"];\r\n\r\n function getAQuoteResultsController($scope, $rootScope, $state, $stateParams, DateTimeService, analyticsService, FilterService, ModeTranslatorService, QuoteService, ServiceOffering, UserPermissionService, userPreferences, DocumentHelper, API_BASE_URL, $uibModal, $window) {\r\n $scope.accessorialDisplayLimit = 10;\r\n $scope.carrierDisplayLimit = 10;\r\n $scope.currentPage = 1;\r\n $scope.filterParams = [];\r\n $scope.limit = \"10\";\r\n $scope.offset = 0;\r\n $scope.getAQuoteParams = $stateParams.getAQuoteParams;\r\n $scope.isShippable = $stateParams.isShippable;\r\n $scope.quoteRequestId = $stateParams.quoteRequestId;\r\n $scope.quoteResults = $stateParams.quoteResults;\r\n $scope.rawQuoteParams = $stateParams.rawQuoteParams;\r\n $scope.isTruckloadOnlyResult = isTruckloadResults($stateParams.quoteResults);\r\n setDefaultCarrierInfo($scope.quoteResults);\r\n $scope.filteredResults = FilterService.filterThorough($scope.quoteResults, $scope.filterParams);\r\n setCurrencyCode();\r\n $scope.selectedCarriers = [];\r\n $scope.showAdditionalCharges = false;\r\n $scope.sort = \"lowestPrice\";\r\n $scope.isTLHazmat = isTLHazmatResult();\r\n $scope.hasTeamResult = hasTeamResult();\r\n $scope.dateRecommenderQuotes = getDateRecommenderQuotes($scope.quoteResults);\r\n /**\r\n * Since we want to build an array in the url, we have to have a list of params that have the same name with different values.\r\n * This function converts our array to such a string. The return line takes care of the extra & at the end of the string.\r\n */\r\n function arrayToParamString(array, name) {\r\n var result = \"\";\r\n _.forEach(array, function (value) {\r\n result += name + \"=\" + value + \"&\";\r\n });\r\n return result.slice(0, -1);\r\n }\r\n\r\n $scope.showVolumeQuoteInfoModal = function () {\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/showVolumeQuoteInfo.tpl.html',\r\n size: 'md',\r\n controller: 'showInfoController'\r\n });\r\n };\r\n\r\n $scope.showCargoLiabilitySection = function (quote) {\r\n if ($rootScope.featureFlags.volumeQuoteFeatureFlag) {\r\n return ((quote.transportModeDescription === 'LTL') && (quote.cargoLiability));\r\n }\r\n return !!quote.cargoLiability;\r\n };\r\n\r\n $scope.isTruckload = function (quote) {\r\n return quote.transportModeDescription === 'TL';\r\n };\r\n\r\n $scope.isFlatbed = function (quote) {\r\n return quote.transportModeDescription === 'Flatbed';\r\n };\r\n\r\n $scope.hasVolumeQuoteFeatureFlag = function () {\r\n return $rootScope.featureFlags.volumeQuoteFeatureFlag;\r\n };\r\n\r\n $scope.getMaxLiability = function (quote) {\r\n var maxLiability = 0;\r\n if (quote.cargoLiability) {\r\n var totalCost = quote.cargoLiability.perPound * $scope.getTotalWeight(quote.cargoLiability);\r\n if (quote.cargoLiability.max > 0) {\r\n var minCargoLiability = Math.min(quote.cargoLiability.max, totalCost);\r\n if (minCargoLiability === 0) {\r\n maxLiability = quote.cargoLiability.max;\r\n }\r\n else{\r\n maxLiability = minCargoLiability;\r\n }\r\n }\r\n else{\r\n maxLiability = totalCost;\r\n }\r\n }\r\n return maxLiability;\r\n };\r\n\r\n $scope.getLTLQuoteLabel = function (quote) {\r\n var label = '';\r\n if ($rootScope.featureFlags.volumeQuoteFeatureFlag && quote.transportModeDescription === 'LTL') {\r\n if ((quote.rateSourceCode && quote.rateSourceCode === 'VQ') ||\r\n (quote.rateList && $scope.isVolumeQuoteRateSource(quote.rateList))) {\r\n label = 'VOLUME_QUOTE';\r\n }\r\n else {\r\n label = 'LTL_STANDARD_RATE';\r\n }\r\n }\r\n return label;\r\n };\r\n\r\n $scope.isVolumeQuoteRateSource = function (rateList) {\r\n for (var i = 0; i < rateList.length; ++i) {\r\n if (rateList[i].rateSource === 'VQ' || rateList[i].rateTypeCode === 'U') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n $scope.getSelectedQuoteIds = function () {\r\n var quotes = [];\r\n _.forEach($scope.quoteResults, function (quote) {\r\n if (quote.checked) {\r\n quotes.push(quote.quoteId);\r\n }\r\n });\r\n return quotes;\r\n };\r\n\r\n $scope.valueToArray = function (input) {\r\n var array = [];\r\n array.push(input);\r\n return array;\r\n };\r\n\r\n $scope.shareEmail = function (quoteIds) {\r\n analyticsService.track('shareEmail');\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendDocument.tpl.html',\r\n size: 'lg',\r\n controller: 'emailQuoteController',\r\n resolve: {\r\n quoteIds: function () {\r\n return quoteIds\r\n },\r\n quoteRequestId: function () {\r\n return $scope.quoteRequestId\r\n },\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n });\r\n };\r\n\r\n $scope.sharePrint = function (quoteIds) {\r\n analyticsService.track('sharePrint');\r\n var quoteIdString = arrayToParamString(quoteIds, \"quoteId\");\r\n DocumentHelper.showDocument(API_BASE_URL + \"api/quotes/print?quoteRequestId=\" + $scope.quoteRequestId + \"&\" + quoteIdString);\r\n };\r\n\r\n $scope.hasQuoteToOrderPermission = UserPermissionService.hasPermission(\"Create Order\");\r\n\r\n $scope.getServiceOfferingImageUrl = function (serviceOfferingNumber) {\r\n return ServiceOffering.get(serviceOfferingNumber);\r\n };\r\n\r\n $scope.expandFilter = function ($event, filterType) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope[filterType + \"DisplayLimit\"] += 10;\r\n };\r\n\r\n $scope.getAbbreviatedTransportMode = function (displayName) {\r\n return ModeTranslatorService.getAbbreviatedTransportMode(displayName);\r\n };\r\n\r\n /**\r\n * Returns the shipping method or the inputted code if the shipping method is not known.\r\n *\r\n * @param key\r\n * @returns {string}\r\n */\r\n $scope.getShippingMethod = function (key) {\r\n return ModeTranslatorService.transportModeMap[key] ? ModeTranslatorService.transportModeMap[key] : key;\r\n };\r\n\r\n /**\r\n * Returns an array of unique modes.\r\n * This array is used to define the list of mode filters to go on the side of the page.\r\n *\r\n * @param quotes\r\n * @returns {Array}\r\n */\r\n $scope.getDistinctModes = function (quotes) {\r\n var uniqueKeys = {};\r\n var distinct = [];\r\n\r\n for (var index in quotes) {\r\n var shippingMethod = $scope.getShippingMethod(quotes[index].transportModeDescription);\r\n\r\n if (typeof (uniqueKeys[shippingMethod]) === \"undefined\") {\r\n distinct.push({ name: shippingMethod, checked: false });\r\n uniqueKeys[shippingMethod] = shippingMethod;\r\n }\r\n }\r\n\r\n return distinct;\r\n };\r\n\r\n /**\r\n * Returns an array of unique carriers.\r\n * This array is used to define the list of carrier filters to go on the side of the page.\r\n *\r\n * @param quotes\r\n * @returns {Array}\r\n */\r\n $scope.getDistinctCarriers = function (quotes) {\r\n var uniqueKeys = {};\r\n var distinct = [];\r\n\r\n for (var index in quotes) {\r\n if (typeof (uniqueKeys[quotes[index].carrier.carrierName]) === \"undefined\") {\r\n distinct.push({ name: quotes[index].carrier.carrierName, checked: false });\r\n uniqueKeys[quotes[index].carrier.carrierName] = quotes[index].carrier.carrierName;\r\n }\r\n }\r\n\r\n return distinct;\r\n };\r\n\r\n /**\r\n * Returns an array of unique and optional accessorials.\r\n * This array is used to define the list of accessorial filters to go on the side of the page.\r\n *\r\n * @param quotes\r\n * @returns {Array}\r\n */\r\n $scope.getDistinctAccessorials = function (quotes) {\r\n var uniqueKeys = {};\r\n var distinct = [];\r\n\r\n _.forEach(quotes, function (quote) {\r\n for (var index in quote.rateList) {\r\n if (quote.rateList[index].isOptional) {\r\n if (typeof (uniqueKeys[quote.rateList[index].rateDescription]) === \"undefined\") {\r\n distinct.push({ name: quote.rateList[index].rateDescription, checked: false, rateCode: quote.rateList[index].rateCode });\r\n uniqueKeys[quote.rateList[index].rateDescription] = quote.rateList[index].rateDescription;\r\n }\r\n }\r\n }\r\n });\r\n\r\n return distinct;\r\n };\r\n\r\n $scope.filters = {};\r\n $scope.filters.modes = $scope.getDistinctModes($scope.quoteResults);\r\n $scope.filters.carriers = $scope.getDistinctCarriers($scope.quoteResults);\r\n $scope.filters.accessorials = $scope.getDistinctAccessorials($scope.quoteResults);\r\n $scope.userPreferences = userPreferences;\r\n $scope.isMetric = $scope.userPreferences.unitOfMeasure === \"metric\";\r\n\r\n /**\r\n * Return to the Get A Quote V2 search screen. Passes in the rawQuoteParams so the form can be prefilled.\r\n *\r\n * @param event\r\n */\r\n $scope.editQuoteParams = function (event) {\r\n event.preventDefault();\r\n $state.go(\"app.getAQuote\", {\r\n rawQuoteParams: $scope.rawQuoteParams,\r\n shipDate: $scope.getAQuoteParams.shipDate\r\n });\r\n analyticsService.track('quoteResults_edit');\r\n };\r\n\r\n $scope.getAddress = function (locationType) {\r\n var location = $scope.getAQuoteParams[locationType].address;\r\n\r\n if (location.addressLine1) {\r\n return location.addressLine1 + \",\\n \" + location.city + \" \" + location.stateProvince + \" \" + location.postalCode;\r\n }\r\n\r\n return location.postalCode + \", \" + location.city + \" \" + location.stateProvince;\r\n };\r\n\r\n $scope.getDimensionMeasurement = function () {\r\n return $scope.isMetric ? \"cm\" : \"in\";\r\n };\r\n\r\n $scope.getEstimatedDeliveryDate = function (quote) {\r\n if (quote.transit && quote.transit.minimumDeliveryDate && quote.transit.maximumDeliveryDate) {\r\n return DateTimeService.getDisplayDate(quote.transit.minimumDeliveryDate) + \" - \"\r\n + DateTimeService.getDisplayDate(quote.transit.maximumDeliveryDate);\r\n } else if (quote.transit && quote.transit.minimumDeliveryDate) {\r\n return DateTimeService.getDisplayDate(quote.transit.minimumDeliveryDate);\r\n } else {\r\n return \"N/A\";\r\n }\r\n };\r\n\r\n $scope.getTransitTimeRange = function (quote) {\r\n if (quote.transit && !isNaN(quote.transit.minimumTransitDays) && !isNaN(quote.transit.maximumTransitDays)) {\r\n return quote.transit.minimumTransitDays + ' - ' + quote.transit.maximumTransitDays;\r\n } else if (quote.transit && !isNaN(quote.transit.minimumTransitDays)) {\r\n return quote.transit.minimumTransitDays;\r\n } else {\r\n return \"N/A\";\r\n }\r\n };\r\n\r\n $scope.getFormattedPickupDate = function () {\r\n return DateTimeService.getDisplayDate($scope.getAQuoteParams.shipDate);\r\n };\r\n\r\n $scope.changeQuoteSort = function (value) {\r\n $scope.sort = value;\r\n analyticsService.trackWithVar('quoteResults_Filter', 'quoteResults_FilterValue', \"Switched to \" + $scope.sort);\r\n };\r\n\r\n $scope.sortQuotesList = function (quote) {\r\n if ($scope.sort === \"lowestPrice\") {\r\n return quote.totalCharge;\r\n } else if ($scope.sort === \"quickestDelivery\") {\r\n // INC9219124 - Change Quoting Results Sort Logic #1231\r\n // Sorting based on delivery date and lowest price\r\n if (quote.transit && quote.transit.minimumDeliveryDate) {\r\n return DateTimeService.getDisplayDate(quote.transit.minimumDeliveryDate);\r\n } else {\r\n // This will move quotes that do not have estimated transit times to the bottom of the list of quotes.\r\n return Number.MAX_VALUE;\r\n }\r\n }\r\n };\r\n $scope.getTotalWeight = function (cargoLiability) {\r\n var totalWeight;\r\n totalWeight = 0;\r\n _.forEach($scope.getAQuoteParams.items, function (item) {\r\n if (item.weight) {\r\n if (item.weightUnitCode && item.weightUnitCode.toLowerCase() === 'kilograms' && cargoLiability) {\r\n totalWeight += Number((item.weight) * 2.2046);\r\n }\r\n else {\r\n totalWeight += Number(item.weight);\r\n }\r\n }\r\n });\r\n\r\n return totalWeight;\r\n };\r\n\r\n $scope.getweightUnitCode = function () {\r\n var weightUnitCode;\r\n if ($scope.getAQuoteParams.items[0].weightUnitCode && $scope.getAQuoteParams.items[0].weightUnitCode.toLowerCase() === 'kilograms') {\r\n weightUnitCode = \"kgs\";\r\n }\r\n else {\r\n weightUnitCode = \"lbs\";\r\n }\r\n return weightUnitCode;\r\n };\r\n\r\n $scope.getWeightMeasurement = function () {\r\n return $scope.isMetric ? \"kgs\" : \"lbs\";\r\n };\r\n\r\n $scope.limitChanged = function () {\r\n $scope.currentPage = Math.floor($scope.offset / $scope.limit) + 1;\r\n $scope.pageChanged();\r\n };\r\n\r\n $scope.pageChanged = function () {\r\n $scope.offset = ($scope.currentPage - 1) * $scope.limit;\r\n };\r\n\r\n $scope.toggleCheck = function (shareQuote) {\r\n shareQuote.checked = !shareQuote.checked;\r\n };\r\n\r\n $scope.refreshResults = function (filter) {\r\n $scope.filteredResults = [];\r\n $scope.selectedCarriers = [];\r\n $scope.filterParams = [];\r\n\r\n $scope.toggleCheck(filter);\r\n refreshFilterParams();\r\n $scope.filteredResults = FilterService.filterThorough($scope.quoteResults, $scope.filterParams);\r\n analyticsService.trackWithVar('quoteResults_Filter', 'quoteResults_FilterValue', filter.name + \" filter \" + ((filter.checked) ? \"checked\" : \"unchecked\"));\r\n\r\n };\r\n\r\n function refreshFilterParams() {\r\n $scope.getModeFilters();\r\n $scope.getCarrierFilters();\r\n $scope.getAccessorialFilters();\r\n }\r\n\r\n $scope.getModeFilters = function () {\r\n var modeFilters = [];\r\n\r\n _.forEach($scope.filters.modes, function (filter) {\r\n if (filter.checked) {\r\n modeFilters.push({\r\n transportModeDescription: $scope.getAbbreviatedTransportMode(filter.name)\r\n });\r\n }\r\n });\r\n\r\n if (modeFilters.length) {\r\n $scope.filterParams.push(modeFilters);\r\n }\r\n };\r\n\r\n $scope.getAccessorialFilters = function () {\r\n var accessorialFilters = {\r\n rateList: []\r\n };\r\n\r\n // Used to determine whether the charge breakdown should altered.\r\n $scope.rateListFiltersChecked = [];\r\n\r\n _.forEach($scope.filters.accessorials, function (filter) {\r\n if (filter.checked) {\r\n $scope.rateListFiltersChecked.push(filter.name);\r\n accessorialFilters.rateList.push({\r\n rateDescription: filter.name\r\n });\r\n }\r\n });\r\n\r\n if (accessorialFilters.rateList.length) {\r\n $scope.filterParams.push([accessorialFilters]);\r\n }\r\n };\r\n\r\n $scope.getCarrierFilters = function () {\r\n var carrierFilters = [];\r\n\r\n _.forEach($scope.filters.carriers, function (filter) {\r\n if (filter.checked) {\r\n carrierFilters.push({\r\n carrier: {\r\n carrierName: filter.name\r\n }\r\n })\r\n }\r\n });\r\n\r\n if (carrierFilters.length) {\r\n $scope.filterParams.push(carrierFilters);\r\n }\r\n };\r\n\r\n $scope.toggleCharges = function (quote) {\r\n quote.chargesOpen = !quote.chargesOpen;\r\n analyticsService.track('quoteResults_openedCharges');\r\n };\r\n\r\n $scope.accessorialSelected = function (accessorial) {\r\n $scope.refreshResults(accessorial);\r\n QuoteService.setAccessorialChecked({\r\n RateCode: accessorial.rateCode,\r\n QuoteRequestId: $scope.quoteRequestId,\r\n Checked: accessorial.checked\r\n });\r\n };\r\n\r\n $scope.getAccessorialChargeTotal = function (quote) {\r\n $scope.showAdditionalCharges = false;\r\n var additionalCharges = 0;\r\n\r\n _.forEach(quote.rateList, function (accessorial) {\r\n _.forEach($scope.rateListFiltersChecked, function (charge) {\r\n if (accessorial.rateDescription === charge && accessorial.isOptional) {\r\n additionalCharges += accessorial.totalRate;\r\n }\r\n });\r\n });\r\n\r\n if (additionalCharges) {\r\n $scope.showAdditionalCharges = true;\r\n }\r\n\r\n return quote.totalCharge + additionalCharges;\r\n };\r\n\r\n $scope.shouldShowChargeInBreakdown = function (rate) {\r\n var result = false;\r\n\r\n if (!rate.isOptional) {\r\n result = true;\r\n } else if (_.isEmpty($scope.rateListFiltersChecked)) {\r\n result = false;\r\n } else {\r\n result = _.includes($scope.rateListFiltersChecked, rate.rateDescription);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n $scope.initiateQuoteToOrder = function (quote) {\r\n if (useNewQuoteToOrder()) {\r\n $window.location.href = appConfig.ordersUIBaseUrl + \"/#/quoteToOrder/\" + quote.quoteId;\r\n return;\r\n }\r\n\r\n quote.currencyCode = $scope.currencyCode;\r\n\r\n // Only relevant for contractual customers.\r\n // Transactional customers will not have any optional accessorials to filter.\r\n quote = filterOptionalAccessorials(quote);\r\n\r\n $state.go(\"app.quoteToOrder\", {\r\n quote: quote,\r\n getAQuoteParams: $scope.getAQuoteParams,\r\n rawQuoteParams: $scope.rawQuoteParams,\r\n quoteResults: $scope.quoteResults,\r\n destination: $scope.getAddress(\"destination\"),\r\n origin: $scope.getAddress(\"origin\"),\r\n totalCharge: $scope.getAccessorialChargeTotal(quote),\r\n totalWeight: $scope.getTotalWeight(),\r\n quoteRequestId: $scope.quoteRequestId\r\n });\r\n };\r\n\r\n $scope.carrierNameDisplay = function (carrierName, quote) {\r\n if (!carrierName) {\r\n if ($scope.isTruckload(quote) || $scope.isFlatbed(quote)) {\r\n return \"CH Robinson Truckload Services\";\r\n } else {\r\n return \"C.H. Robinson\";\r\n }\r\n }\r\n\r\n return carrierName;\r\n };\r\n\r\n $scope.tlQuoteType = function (quote) {\r\n if (hasContractualRate(quote.rateList)) {\r\n return \"Your Rate on File\"\r\n } else {\r\n return \"Market Rate\"\r\n }\r\n }\r\n\r\n function useNewQuoteToOrder() {\r\n if ($scope.rawQuoteParams && $scope.rawQuoteParams.customer && $scope.rawQuoteParams.customer.useNewQuoteToOrder) {\r\n return $scope.rawQuoteParams.customer.useNewQuoteToOrder;\r\n }\r\n return false\r\n }\r\n\r\n function hasContractualRate (rateList) {\r\n var contractRate = false;\r\n _.forEach(rateList, function(rate) {\r\n if (rate.rateSource === \"SQ\" || rate.rateSource === \"CM\") {\r\n contractRate = true;\r\n }\r\n })\r\n return contractRate;\r\n }\r\n\r\n function isTruckloadResults(quoteResults) {\r\n var hasTruckload = false;\r\n var hasLTL = false;\r\n _.forEach(quoteResults, function (quote) {\r\n if ((quote.transportModeType && quote.transportModeType === 2) || quote.transportModeType === 12) {\r\n hasTruckload = true;\r\n } else {\r\n hasLTL = true;\r\n }\r\n });\r\n return (hasTruckload && !hasLTL);\r\n }\r\n\r\n function isTLHazmatResult() {\r\n return !!(($scope.rawQuoteParams.items && $scope.rawQuoteParams.items.length === 1 && $scope.rawQuoteParams.items[0].isHazardous === true) && $scope.isTruckloadOnlyResult);\r\n\r\n }\r\n\r\n function hasTeamResult() {\r\n var isTeam = false;\r\n if ($scope.getAQuoteParams.specialServiceList) {\r\n _.forEach($scope.getAQuoteParams.specialServiceList, function(service) {\r\n //EXD check for expedite/team rate\r\n if (service === \"EXD\") {\r\n isTeam = true;\r\n }\r\n });\r\n }\r\n\r\n _.forEach($scope.filteredResults, function(result) {\r\n if (result.specialServiceList) {\r\n _.forEach(result.specialServiceList, function(service) {\r\n //EXD check for expedite/team rate\r\n if (service === \"EXD\") {\r\n isTeam = true;\r\n }\r\n });\r\n }\r\n });\r\n return isTeam;\r\n }\r\n\r\n $scope.setTLHazmatShipButton = function() {\r\n if(($scope.rawQuoteParams.items && $scope.rawQuoteParams.items.length === 1 && $scope.rawQuoteParams.items[0].isHazardous === true) && $scope.isTruckloadOnlyResult) {\r\n return \"disabled\";\r\n }\r\n return \"\";\r\n }\r\n\r\n function filterOptionalAccessorials(quote) {\r\n var filteredAccessorials = [];\r\n\r\n _.forEach(quote.rateList, function (accessorial) {\r\n if (!accessorial.isOptional || _.includes($scope.rateListFiltersChecked, accessorial.rateDescription)) {\r\n filteredAccessorials.push(accessorial);\r\n }\r\n });\r\n\r\n quote.rateList = filteredAccessorials;\r\n\r\n return quote;\r\n }\r\n\r\n /**\r\n * It is not always the case that the currencyCode we're choosing will be the same as the rest of the currencyCodes in all the other quotes.\r\n * That said, it is rare they will differ, and at the time of writing this code we had no better way of finding out.\r\n */\r\n function setCurrencyCode() {\r\n if ($scope.quoteResults.length) {\r\n if ($scope.quoteResults[0].rateList[0] && $scope.quoteResults[0].rateList[0].currencyCode) {\r\n $scope.currencyCode = $scope.quoteResults[0].rateList[0].currencyCode;\r\n } else {\r\n $scope.currencyCode = \"USD\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Defaults carrier name to \"C.H. Robinson\" if there is no carrier.\r\n *\r\n * @param quoteResults\r\n */\r\n function setDefaultCarrierInfo(quoteResults) {\r\n _.forEach(quoteResults, function (quote) {\r\n if (!quote.carrier) {\r\n quote.carrier = {};\r\n }\r\n\r\n if (!quote.carrier.carrierCode) {\r\n quote.carrier.carrierCode = null;\r\n }\r\n });\r\n }\r\n\r\n $scope.showDateRecommenderQuoteLabel = function (quote) {\r\n return !!$scope.dateRecommenderQuotes &&\r\n ($scope.dateRecommenderQuotes.requestedDateQuote === quote ||\r\n $scope.dateRecommenderQuotes.asapPickupQuote === quote ||\r\n $scope.dateRecommenderQuotes.bestAlternativeQuote === quote);\r\n };\r\n\r\n $scope.getDateRecommenderQuoteLabel = function (quote) {\r\n var quoteLabel = '';\r\n\r\n if (!$scope.dateRecommenderQuotes || !quote.transit || !quote.transit.minimumPickupDate) {\r\n return quoteLabel;\r\n }\r\n\r\n var displayShortDate = DateTimeService.getDisplayShortDate(quote.transit.minimumPickupDate);\r\n\r\n if (quote === $scope.dateRecommenderQuotes.requestedDateQuote) {\r\n quoteLabel = \"Requested Pickup - \" + displayShortDate;\r\n } else if (quote === $scope.dateRecommenderQuotes.asapPickupQuote) {\r\n quoteLabel = \"ASAP Pickup - \" + displayShortDate;\r\n } else if (quote === $scope.dateRecommenderQuotes.bestAlternativeQuote) {\r\n quoteLabel = \"Best Alternative Pickup - \" + displayShortDate;\r\n }\r\n\r\n return quoteLabel;\r\n }\r\n\r\n function getDateRecommenderRequestedDateQuote(quotes) {\r\n return _.find(quotes, function (quote) {\r\n return !!quote.transit &&\r\n !!quote.transit.minimumPickupDate &&\r\n DateTimeService.areDatesEqual($scope.getAQuoteParams.shipDate, quote.transit.minimumPickupDate);\r\n });\r\n }\r\n\r\n function getDateRecommenderAsapPickupQuote(quotes, requestedDateQuote) {\r\n if (!requestedDateQuote || !requestedDateQuote.transit || !requestedDateQuote.transit.minimumPickupDate) {\r\n return null;\r\n }\r\n\r\n var earliestPickupQuote = getEarliestPickupQuote(quotes, requestedDateQuote);\r\n\r\n return !!earliestPickupQuote &&\r\n !!earliestPickupQuote.transit &&\r\n !!earliestPickupQuote.transit.minimumPickupDate &&\r\n DateTimeService.isDateBefore(earliestPickupQuote.transit.minimumPickupDate, requestedDateQuote.transit.minimumPickupDate)\r\n ? earliestPickupQuote\r\n : null;\r\n }\r\n\r\n function getEarliestPickupQuote(allQuotes, requestedDateQuote) {\r\n var quotes = _.filter(allQuotes, function (quote) {\r\n return !!quote.transit && !!quote.transit.minimumPickupDate && quote !== requestedDateQuote;\r\n });\r\n\r\n if (!quotes || quotes.length === 0) {\r\n return null;\r\n }\r\n\r\n var sortedQuotes = _.sortBy(quotes, function (quote) {\r\n return DateTimeService.getDisplayDate(quote.transit.minimumPickupDate);\r\n });\r\n\r\n return sortedQuotes[0];\r\n }\r\n\r\n function getDateRecommenderBestAlternativeQuote(quotes, requestedDateQuote, asapPickupQuote) {\r\n if (!requestedDateQuote) {\r\n return null;\r\n }\r\n\r\n return _.find(quotes, function (quote) {\r\n return quote !== requestedDateQuote && quote !== asapPickupQuote;\r\n });\r\n }\r\n\r\n function isTransactionalRate(rate) {\r\n return rate.rateSource === 'Transactional';\r\n }\r\n\r\n function isTransactionalQuote(quote) {\r\n return !!quote.rateList && _.some(quote.rateList, isTransactionalRate);\r\n }\r\n\r\n function getDateRecommenderQuotes(quoteResults) {\r\n var dateRecommenderQuotesBreakDown = {};\r\n\r\n if (!isTruckloadResults(quoteResults)) {\r\n return dateRecommenderQuotesBreakDown;\r\n }\r\n\r\n var transactionalQuotes = _.filter(quoteResults, isTransactionalQuote);\r\n\r\n if (!transactionalQuotes || transactionalQuotes.length === 0) {\r\n return dateRecommenderQuotesBreakDown;\r\n }\r\n\r\n var requestedDateQuote = getDateRecommenderRequestedDateQuote(transactionalQuotes);\r\n dateRecommenderQuotesBreakDown.requestedDateQuote = requestedDateQuote;\r\n\r\n var asapPickupQuote = getDateRecommenderAsapPickupQuote(transactionalQuotes, requestedDateQuote);\r\n dateRecommenderQuotesBreakDown.asapPickupQuote = asapPickupQuote;\r\n\r\n var bestAlternativeQuote = getDateRecommenderBestAlternativeQuote(transactionalQuotes, requestedDateQuote, asapPickupQuote);\r\n dateRecommenderQuotesBreakDown.bestAlternativeQuote = bestAlternativeQuote;\r\n\r\n return dateRecommenderQuotesBreakDown;\r\n }\r\n }\r\n\r\n app.controller(\"getAQuoteResultsController\", getAQuoteResultsController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n getAQuoteCustomerController.$inject = ['$q', '$scope', 'AddressService', 'BolCommentService', 'CustomerPartyService', 'ModalService', 'QuoteService', 'AdobeAnalyticsService'];\r\n function getAQuoteCustomerController($q, $scope, AddressService, BolCommentService, CustomerPartyService, ModalService, QuoteService, AdobeAnalyticsService) {\r\n var modalOptions = {\r\n closeButtonText: 'NO_KEEP_ACCOUNT',\r\n actionButtonText: 'YES_I_AM_SURE',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_CHANGE_YOUR_ACCOUNT',\r\n bodyText: 'ALL_INFORMATION_ENTERED_FOR_THIS_ACCOUNT_WILL_BE_R'\r\n };\r\n\r\n /**\r\n * Prompts the user before changing the customer. Clears form properties specific to the old customer on \"ok\"\r\n *\r\n * @returns {Promise.}\r\n */\r\n function customerChanged() {\r\n var deferred = $q.defer();\r\n\r\n if ($scope.order.customer && $scope.isFormAltered()) {\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n $scope.order.pickup = null;\r\n $scope.order.deliver = null;\r\n $scope.setModeType('ltl', false);\r\n deferred.resolve(true);\r\n }\r\n\r\n if (result === 'cancel') {\r\n deferred.resolve(false);\r\n }\r\n }, function (result) {\r\n if (result === 'cancel') {\r\n deferred.resolve(false);\r\n }\r\n });\r\n } else {\r\n $scope.setModeType('ltl', false);\r\n deferred.resolve(true);\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n $scope.onSelectedDropDownCustomerChange = function (cust) {\r\n if (!_.isEqual(cust, $scope.order.customer)) {\r\n customerChanged().then(function (changed) {\r\n if (changed) {\r\n angular.element('input[name=customerRecentList]').attr('checked', false);\r\n $scope.order.customer = cust;\r\n BolCommentService.get($scope.order.customer);\r\n\r\n $scope.isCustomerTransactional(cust.partyCode, function() {\r\n /*\r\n Because truckload is turned on for all customers\r\n items need to be cleared between every customer change\r\n */\r\n $scope.order.items = [];\r\n $scope.addNewItem();\r\n $scope.order.isItemAltered = false;\r\n\r\n if ($scope.isNewlyTransactional) {\r\n $scope.isNewlyTransactional = false;\r\n setItemsToDry();\r\n }\r\n });\r\n AdobeAnalyticsService.gaqFormSelected($scope.user, 'LTL');\r\n } else {\r\n $scope.dropDownCustomer.selected = $scope.order.customer;\r\n }\r\n });\r\n }\r\n };\r\n\r\n $scope.isCustomerTransactional = function(customerCode, callback) {\r\n QuoteService.getTransactionalPricingFlag({ customerCode: customerCode }).$promise.then(function(result) {\r\n if (!$scope.order.isTransactional && !result.isTransactional) {\r\n $scope.isNewlyTransactional = true;\r\n }\r\n\r\n $scope.order.isTransactional = !result.isTransactional;\r\n $scope.$parent.setDatePickerOptions($scope.order.isTransactional);\r\n\r\n callback();\r\n });\r\n };\r\n\r\n function setItemsToDry() {\r\n _.forEach($scope.itemDdlRefData.TemperatureSensitive, function(tempType) {\r\n _.forEach($scope.order.items, function(item) {\r\n if (tempType.refDataNumber === 425) {\r\n item.tempCategory = tempType;\r\n }\r\n });\r\n });\r\n }\r\n\r\n function selectNewCustomer(cust) {\r\n $scope.dropDownCustomer.selected = cust;\r\n $scope.order.customer = cust;\r\n CustomerPartyService.getBOLComment({\r\n partyNumberOrCode: cust.partyNumber\r\n }, function (response) {\r\n $scope.order.customer.bolComment = response.bolComment;\r\n });\r\n }\r\n\r\n /**\r\n * Preps each customer for proper display in the view.\r\n */\r\n function getCustomers() {\r\n $scope.customers = $scope.$parent.createQuoteCustomers.customers;\r\n\r\n _.forEach($scope.customers, function (cust) {\r\n cust['addressLine1'] = AddressService.GetAddressLine1(cust.address);\r\n cust['addressLine2'] = AddressService.GetAddressLine2(cust.address);\r\n cust['addressLine3'] = AddressService.GetAddressLine3(cust.address);\r\n cust['addressLine4'] = AddressService.GetAddressLine4(cust.address);\r\n cust['displayName'] = $scope.$parent.getDisplayName(cust);\r\n });\r\n }\r\n\r\n function isSingleCCode() {\r\n return $scope.$parent.createQuoteCustomers.customers.length === 1;\r\n }\r\n\r\n function assignSingleCCode() {\r\n if (isSingleCCode()) {\r\n selectNewCustomer($scope.$parent.createQuoteCustomers.customers[0]);\r\n }\r\n }\r\n\r\n assignSingleCCode();\r\n getCustomers();\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('getAQuoteCustomerController', getAQuoteCustomerController);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module(\"NavisphereOnline\");\r\n\r\n getAQuoteController.$inject = ['$rootScope', '$locale', 'API_BASE_URL', '$http', '$scope', '$stateParams', '$timeout', '$uibModal', '$log', 'analyticsService',\r\n 'createQuoteCustomers', 'CustomerService', 'DateTimeService', 'GAQService', 'LocationService',\r\n 'LocationSelectionHelperService', 'QuoteService', 'refDataDDLs', 'UnitsOfMeasurementService', 'user', 'User', 'userPreferences', \"ServiceOffering\",\r\n 'RefDataMappingService', 'AdobeAnalyticsService', 'QuoteHistoryTransformService', 'QuoteHistoryService'];\r\n function getAQuoteController($rootScope, $locale, API_BASE_URL, $http, $scope, $stateParams, $timeout, $uibModal, $log, analyticsService,\r\n createQuoteCustomers, CustomerService, DateTimeService, GAQService, LocationService,\r\n LocationSelectionHelperService, QuoteService, refDataDDLs, UnitsOfMeasurementService, user, User,\r\n userPreferences, ServiceOffering, RefDataMappingService, AdobeAnalyticsService, QuoteHistoryTransformService, QuoteHistoryService) {\r\n $scope.dropDownCustomer = {\r\n selected: undefined\r\n };\r\n var requestTypeLtl = \"LTL\";\r\n var requestTypeTruckload = \"Truckload\";\r\n var requestTypeFlatbed = \"Flatbed\";\r\n\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.itemDdlRefData = refDataDDLs;\r\n $scope.itemSummary = {};\r\n $scope.refDataDDLs = refDataDDLs;\r\n $scope.noQuotesFound = $stateParams.noQuotesFound;\r\n $scope.pastRateTime = false;\r\n $scope.showNoHighValueMessage = false;\r\n $scope.showNoZeroDollarTLMessage = false;\r\n $scope.createQuoteCustomers = createQuoteCustomers;\r\n $scope.retrievingQuote = false;\r\n $scope.user = user;\r\n $scope.userPreferences = userPreferences;\r\n $scope.isMetric = $scope.userPreferences.unitOfMeasure === 'metric';\r\n $scope.temperatureOptions = $scope.itemDdlRefData[\"TemperatureSensitive\"];\r\n $scope.freightClassOptions = $scope.itemDdlRefData[\"FreightClass\"];\r\n $scope.order = GAQService.setInitialOrderState();\r\n $scope.getDisplayName = CustomerService.GetDisplayName;\r\n $scope.addNewItem = addNewItem;\r\n $scope.setDimensionValues = setDimensionValues;\r\n $scope.deleteItem = deleteItem;\r\n $scope.refreshLocations = refreshLocations;\r\n $scope.setDatePickerOptions = setDatePickerOptions;\r\n $scope.isFreightClassRequired = true;\r\n $scope.isHazardousClick = function (item) {\r\n item.isHazardous = !item.isHazardous;\r\n };\r\n $scope.isTeamClick = function () {\r\n $scope.order.isTeam = !$scope.order.isTeam;\r\n }\r\n $scope.requestType = requestTypeLtl;\r\n $scope.isLTL = true;\r\n $scope.ratingRequest = null;\r\n\r\n var cmUomRefNum = RefDataMappingService.getItemId('CENTIMETERS_UOM');\r\n var inUomRefNum = RefDataMappingService.getItemId('INCHES_UOM');\r\n\r\n var parsedRequestId = parseInt($stateParams.requestId);\r\n\r\n\r\n //Check if reQuote path and get request info from Rating\r\n if (!isNaN(parsedRequestId)) {\r\n QuoteService.getQuoteDetails({ quoteRequestId: parsedRequestId }).$promise.then(setOrderFromExistingRequest);\r\n } else {\r\n runFinalRequestSetupFunctions();\r\n }\r\n\r\n function setOrderFromExistingRequest(ratingRequest) {\r\n $scope.requestType = getRequestTypeFromQuoteDetails(ratingRequest.quoteDetailList)\r\n $scope.isLTL = ($scope.requestType === requestTypeLtl);\r\n // Get user customers\r\n User.getQuoteCustomers().$promise.then(function (customerResult) {\r\n // Transform Rating request data and user customers\r\n return QuoteHistoryTransformService.transform(ratingRequest, customerResult.customers, $scope.itemDdlRefData)\r\n }).then(function(transformedQuote) {\r\n // Create request from transformed quote data\r\n return QuoteHistoryService.buildParams(transformedQuote, $stateParams.requestId, $scope.isMetric, true);\r\n }).then(function (params) {\r\n // Merge built request with the blank order\r\n _.merge($scope.order, params.rawQuoteParams);\r\n runFinalRequestSetupFunctions();\r\n });\r\n }\r\n\r\n function runFinalRequestSetupFunctions() {\r\n getCustomersWithGAQ();\r\n setUnitCodes();\r\n removeUnsupportedTempTypes();\r\n prefillGAQForm();\r\n setPickupDateWithShipDateFromResultEdit();\r\n setDatePickerOptions();\r\n setDimensionValues();\r\n resetTeam();\r\n }\r\n\r\n function addNewItem() {\r\n $scope.order.items.push(generateItem());\r\n }\r\n\r\n function deleteItem(index) {\r\n if ($scope.order.items.length > 0) {\r\n $scope.order.items.splice(index, 1);\r\n }\r\n\r\n if ($scope.order.items.length < 1) {\r\n $timeout(function () {\r\n $scope.quoteForm.$invalid = true;\r\n });\r\n }\r\n }\r\n\r\n function refreshLocations(locationResults, locationType) {\r\n $scope[locationType + \"LocationResults\"] = [];\r\n\r\n if (locationResults.search.length < 3) {\r\n return [];\r\n }\r\n\r\n return LocationService.getCities({\r\n zipCode: locationResults.search\r\n }, function (data) {\r\n $scope[locationType + \"LocationResults\"] = data;\r\n\r\n if (data.length === 1) {\r\n locationResults.select(data[0], true);\r\n }\r\n });\r\n }\r\n\r\n\r\n $scope.onLocationSelected = function (item, locationType) {\r\n $scope.order[locationType] = LocationSelectionHelperService.restructureLocation(item);\r\n };\r\n $scope.getLocationDisplay = function (location) {\r\n if (location) {\r\n $scope.setFreightClassRequirement($scope.order);\r\n if (!location.name && !location.adminDistrictCode && !location.countryCode && !location.postalCode) {\r\n return location.address.addressLine1 + ', ' + location.address.stateProvince + ', ' + location.address.country + ', ' + location.address.postalCode\r\n }\r\n else {\r\n return location.name + ', ' + location.adminDistrictCode + ' ' + location.countryCode + ' ' + location.postalCode;\r\n }\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n $scope.setFreightClassRequirement = function (order) {\r\n if (order.pickup && order.deliver) {\r\n var pickupCountryCode = order.pickup.countryCode;\r\n var deliverCountryCode = order.deliver.countryCode;\r\n var canadaCountryCode = 'CA';\r\n if (pickupCountryCode === canadaCountryCode && deliverCountryCode === canadaCountryCode) {\r\n $scope.isFreightClassRequired = false;\r\n } else {\r\n $scope.isFreightClassRequired = true;\r\n }\r\n }\r\n }\r\n\r\n $scope.openPickupDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.pickupDateOpened = true;\r\n };\r\n\r\n $scope.openAddressBook = function ($event, locationType) {\r\n analyticsService.trackWithVar('addressBook', 'addressBookValue', \"addressBook clicked for\" + \" \" + locationType);\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $uibModal.open({\r\n templateUrl: 'app/getAQuote/views/selectAddress.tpl.html',\r\n size: 'lg',\r\n controller: 'selectAddressController',\r\n scope: $scope,\r\n resolve: {\r\n customerCode: function () {\r\n if ($scope.order.customer) {\r\n return $scope.order.customer.partyCode.replace(/^\\s+|\\s+$/gm, '');\r\n }\r\n\r\n return \"\";\r\n },\r\n user: function () {\r\n return $scope.user;\r\n },\r\n locationType: function () {\r\n return locationType;\r\n }\r\n }\r\n }).result.then(function (location) {\r\n $scope.order[locationType] = location;\r\n });\r\n };\r\n\r\n /**\r\n * The search employed by address book requires a customer's partyCode.\r\n *\r\n * @returns {boolean}\r\n */\r\n $scope.isAddressBookDisabled = function () {\r\n return !$scope.order.customer;\r\n };\r\n\r\n $scope.showTruckloadLTLButtons = function () {\r\n return !!($scope.order && $scope.order.customer);\r\n };\r\n\r\n function clearFieldsOnFormChange() {\r\n if ($scope.order) {\r\n var initialOrder = GAQService.setInitialOrderState();\r\n $scope.order.overallAccessorials = initialOrder.overallAccessorials;\r\n $scope.order.originAccessorials = initialOrder.originAccessorials;\r\n $scope.order.destinationAccessorials = initialOrder.destinationAccessorials;\r\n $scope.order.items = initialOrder.items;\r\n $scope.addNewItem();\r\n }\r\n }\r\n\r\n $scope.isRequiredForTLAndFB = function (existingValue) {\r\n if (!$scope.isLTL) {\r\n return false;\r\n } else {\r\n return existingValue;\r\n }\r\n };\r\n\r\n $scope.itemsNoResults = false;\r\n $scope.maxSearchResultLimit = 250;\r\n\r\n $scope.getQuote = function () {\r\n $scope.showNoHighValueMessage = false;\r\n $scope.showNoZeroDollarTLMessage = false;\r\n\r\n if ($scope.order && !$scope.isLTL && ($scope.order.items[0].totalInsuranceValue < 1 || $scope.order.items[0].totalInsuranceValue > 100000)) {\r\n if ($scope.order.items[0].totalInsuranceValue > 100000) {\r\n $scope.showNoHighValueMessage = true;\r\n } else if ($scope.order.items[0].totalInsuranceValue < 1) {\r\n $scope.showNoZeroDollarTLMessage = true;\r\n }\r\n return;\r\n }\r\n\r\n _.forEach($scope.order.items, function (item) {\r\n item.length = item.unitLength.value;\r\n item.width = item.unitWidth.value;\r\n item.height = item.unitHeight.value;\r\n });\r\n\r\n $scope.retrievingQuote = true;\r\n GAQService.getQuote($scope.order, $scope.user, $scope.isMetric, \"getAQuote\", $scope.requestType);\r\n\r\n AdobeAnalyticsService.gaqFormSubmitted($scope.user, submittedRequestType());\r\n\r\n analyticsService.trackWithMultipleVars('getAQuote',\r\n {\r\n 'getAQuote_Account': $scope.order.customer.displayName,\r\n 'getAQuote_PickupDate': $scope.order.pickupDate,\r\n 'getAQuote_Origin': $scope.order.pickup.postalCode,\r\n 'getAQuote_Destination': $scope.order.deliver.postalCode,\r\n 'getAQuote_CommoditiesQuantity': $scope.order.items.length\r\n });\r\n };\r\n\r\n $scope.$on(\"noQuotesFound\", function () {\r\n $scope.noQuotesFound = true;\r\n $scope.retrievingQuote = false;\r\n });\r\n\r\n /**\r\n *\r\n * Checks if the parts of the getAQuote form that are specific to the selected customer have been altered.\r\n *\r\n * @returns {boolean|undefined}\r\n */\r\n $scope.isFormAltered = function () {\r\n var conditions, flag;\r\n\r\n conditions = [\r\n $scope.order.pickup,\r\n $scope.order.deliver,\r\n $scope.order.items.length > 1,\r\n $scope.order.isItemAltered\r\n ];\r\n\r\n _.forEach(conditions, function (condition) {\r\n if (condition && !flag) {\r\n flag = true;\r\n }\r\n });\r\n\r\n return flag;\r\n };\r\n\r\n $scope.getWeightMeasurement = function () {\r\n return $scope.isMetric ? \"kgs\" : \"lbs\";\r\n };\r\n\r\n $scope.getWeightUnitCode = function (item) {\r\n var weightUnitCode;\r\n if (item && item.weightUnitCode && item.weightUnitCode.toLowerCase() === 'kilograms') {\r\n weightUnitCode = \"kgs\";\r\n }\r\n else {\r\n weightUnitCode = \"lbs\";\r\n }\r\n return weightUnitCode;\r\n };\r\n\r\n //TODO: move this case into UnitsOfMeasurementService\r\n //case: no catalog commodity but need to set UOM\r\n $scope.getDimensionMeasurement = function (item) {\r\n if (!item) {\r\n item = {};\r\n }\r\n if (!item.unitLength || !item.unitWidth || !item.unitHeight) {\r\n item.unitLength = {};\r\n item.unitWidth = {};\r\n item.unitHeight = {};\r\n }\r\n if ($scope.isMetric) {\r\n item.unitLength.unitRDN = cmUomRefNum;\r\n item.unitWidth.unitRDN = cmUomRefNum;\r\n item.unitHeight.unitRDN = cmUomRefNum;\r\n item.lengthCmUomLabel = \"cm\";\r\n return \"cm\";\r\n }\r\n else {\r\n item.unitLength.unitRDN = inUomRefNum;\r\n item.unitWidth.unitRDN = inUomRefNum;\r\n item.unitHeight.unitRDN = inUomRefNum;\r\n item.lengthCmUomLabel = \"in\";\r\n return \"in\";\r\n }\r\n };\r\n\r\n $scope.toggleCheck = function (accessorial) {\r\n accessorial.checked = !accessorial.checked;\r\n };\r\n\r\n $scope.isGreyedOut = function (property) {\r\n return property ? \"\" : \"disabled\";\r\n };\r\n\r\n $scope.setDropdownSize = function () {\r\n var itemSearchInput = angular.element('#itemSearchInput');\r\n var dropdownMenu = angular.element('#itemSearchInput + .dropdown-menu');\r\n var newWidth = (itemSearchInput.width() + parseInt(itemSearchInput.css('padding-left')) + parseInt(itemSearchInput.css('padding-right'))) + 'px';\r\n dropdownMenu.css('width', newWidth);\r\n };\r\n\r\n function getCustomersWithGAQ() {\r\n User.getQuoteCustomers().$promise.then(function (result) {\r\n var customers = result.customers;\r\n\r\n for (var i = 0; i < customers.length; i++) {\r\n customers[i].displayName = CustomerService.GetDisplayName(customers[i]);\r\n }\r\n $scope.customersWithGaQ = customers;\r\n\r\n if ($scope.customersWithGaQ.length === 1) {\r\n QuoteService.getTransactionalPricingFlag({ customerCode: $scope.customersWithGaQ[0].partyCode }).$promise.then(function (result) {\r\n $scope.order.isTransactional = !result.isTransactional;\r\n setDatePickerOptions($scope.order.isTransactional);\r\n\r\n $scope.account = $scope.customersWithGaQ[0];\r\n if ($scope.order.items.length === 0) {\r\n $scope.addNewItem();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function removeUnsupportedTempTypes() {\r\n $scope.temperatureOptions = _.remove($scope.temperatureOptions, function (temp) {\r\n return temp.refDataCode === \"Mixed\" || temp.refDataCode === \"Produce\";\r\n });\r\n }\r\n\r\n function prefillGAQForm() {\r\n if ($stateParams.rawQuoteParams) {\r\n if ($stateParams.rawQuoteParams.items) {\r\n for (var i = 0; i < $stateParams.rawQuoteParams.items.length; i++) {\r\n if ($stateParams.rawQuoteParams.items[i].isHazardous) {\r\n $stateParams.rawQuoteParams.items[i].readOnlyProperties = {};\r\n $stateParams.rawQuoteParams.items[i].readOnlyProperties.isHazardous = true;\r\n }\r\n }\r\n }\r\n angular.merge($scope.order, $stateParams.rawQuoteParams);\r\n $scope.dropDownCustomer.selected = $scope.order.customer;\r\n }\r\n }\r\n\r\n function generateItem() {\r\n var item = {\r\n commodity: {\r\n isHazardous: false\r\n },\r\n isStackable: null, // This will set no default selection for the radio button\r\n linearUnitCode: $scope.linearUnitCode,\r\n weightUnitCode: $scope.weightUnitCode\r\n };\r\n\r\n if ($scope.order.isTransactional || !$scope.isLTL) {\r\n _.forEach($scope.itemDdlRefData.TemperatureSensitive, function (tempType) {\r\n if (tempType.refDataNumber === 425) {\r\n item.tempCategory = tempType;\r\n }\r\n });\r\n }\r\n\r\n return item;\r\n }\r\n function setDimensionValues() {\r\n _.forEach($scope.order.items, function (item) {\r\n // check item.unitlength, itemunitWidt, item.unitLength before asssign emppty to avoid override other propery\r\n if (!item.unitLength) {\r\n item.unitLength = {};\r\n }\r\n if (!item.unitWidth) {\r\n item.unitWidth = {};\r\n }\r\n if (!item.unitHeight) {\r\n item.unitHeight = {};\r\n }\r\n item.unitLength.value = item.length;\r\n item.unitWidth.value = item.width;\r\n item.unitHeight.value = item.height;\r\n });\r\n }\r\n\r\n function setDatePickerOptions(isTransactional) {\r\n var maxDays = 14;\r\n if (isTransactional === false && $scope.isLTL) {\r\n maxDays = 183\r\n }\r\n\r\n var todayDate = DateTimeService.getToday();\r\n var minDate = DateTimeService.getToday();\r\n var maxDate = DateTimeService.getDateAddDays(maxDays, DateTimeService.getToday());\r\n\r\n $scope.pastRateTime = false;\r\n if ($scope.isLTL) {\r\n $scope.pickupDateOptions = {\r\n showWeeks: false,\r\n minDate: minDate,\r\n maxDate: maxDate\r\n };\r\n }\r\n\r\n if ($scope.order && $scope.order.customer && !$scope.isLTL\r\n && $scope.order.pickupDate.getDate() === todayDate.getDate() &&\r\n DateTimeService.isLocalTimePastTwoPMEastern($scope.order.pickupDate)) {\r\n\r\n // if today is Friday after 2PM EDT, move to next week monday, else move to tmrw\r\n var moveDateBy = todayDate.getDay() === 5 ? 3 : 1;\r\n\r\n $scope.order.pickupDate = DateTimeService.getDateAddDays(moveDateBy, todayDate);\r\n $scope.pastRateTime = true;\r\n $scope.pickupDateOptions = {\r\n showWeeks: false,\r\n minDate: DateTimeService.getDateAddDays(moveDateBy, minDate),\r\n maxDate: DateTimeService.getDateAddDays(moveDateBy, maxDate)\r\n };\r\n }\r\n }\r\n\r\n function setUnitCodes() {\r\n if ($scope.isMetric) {\r\n $scope.weightUnitCode = \"kilograms\";\r\n $scope.linearUnitCode = \"centimeters\";\r\n } else {\r\n $scope.weightUnitCode = \"pounds\";\r\n $scope.linearUnitCode = \"inches\";\r\n }\r\n }\r\n\r\n $scope.showFreightInfoModal = function () {\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/showFreightInfo.tpl.html',\r\n size: 'md',\r\n controller: 'showInfoController'\r\n });\r\n };\r\n\r\n $scope.displayIncompleteFieldsMessage = function (item) {\r\n $scope.freightClassFieldsIncompleteMessage = \"\";\r\n var message = buildFreightClassMessage(item);\r\n $scope.freightClassFieldsIncompleteMessage = getIncompleteFieldMessage(message);\r\n };\r\n\r\n function buildFreightClassMessage(item) {\r\n return {\r\n weight: item.weight ? '' : 'Enter Total Weight',\r\n quantity: item.quantity ? '' : 'Enter Packaging Quantity',\r\n pickupLocation: $scope.order.pickup ? '' : 'Enter Origin Location',\r\n deliverLocation: $scope.order.deliver ? '' : 'Enter Destination Location',\r\n isStackable: item.isStackable !== null ? '' : 'Enter Packaging can be stacked',\r\n dimensions: item.unitHeight.value && item.unitLength.value && item.unitWidth.value ? '' : 'Enter Packaging Dimensions'\r\n }\r\n }\r\n\r\n function getIncompleteFieldMessage(message) {\r\n var messages = [];\r\n Object.keys(message).forEach(function (key) {\r\n if (message[key]) {\r\n messages.push(message[key]);\r\n }\r\n })\r\n\r\n return messages.join('\\n');\r\n }\r\n\r\n\t\t/* The pickup and deliver address fields on the order may\r\n\t\t * be entered after the required fields to calculate the density based\r\n\t\t *\tsuggestion are entered. Therefore they are been watch for changes.\r\n\t\t */\r\n $scope.$watchCollection(\"[order.pickup, order.deliver]\", function () {\r\n var order = $scope.order;\r\n if (order.items.length && order.pickup && order.deliver) {\r\n order.items.forEach(function (item) {\r\n $scope.getDensityBasedSuggestion(item);\r\n })\r\n }\r\n });\r\n\r\n $scope.getItemFromOrderItemsController = $rootScope.$on('getDensityBasedSuggestion', function ($event, item) {\r\n $scope.getDensityBasedSuggestion(item);\r\n $event.stopPropagation();\r\n });\r\n\r\n $scope.getDensityBasedSuggestion = function (item) {\r\n setItemTemporaryProperties(item);\r\n var requestPayload = getFreightClassRequestPayload(item);\r\n item._temporaryFreightClassFieldsComplete = validateRequestPayload(requestPayload);\r\n if (item._temporaryFreightClassFieldsComplete) {\r\n item._temporaryIsLoading = true;\r\n $scope.getCalculatedFreightClass(requestPayload, item, function (result) {\r\n item._temporaryIsLoading = false;\r\n if (result.data && result.data.freightClass) {\r\n item._temporarySuggestedFreightClass = result.data.freightClass;\r\n } else {\r\n displayWarningMessage(item);\r\n }\r\n })\r\n }\r\n }\r\n\r\n\t\t/* These are temporary properties been added to an item\r\n\t\t * in order to facilitate tracking them individually\r\n\t\t *\tand will be deleted prior to submitting the quote to the API\r\n\t\t */\r\n function setItemTemporaryProperties(item) {\r\n if (item) {\r\n item._temporaryIsLoading = false,\r\n item._temporarySuggestedFreightClass = null,\r\n item._temporaryFreightClassErrorMessage = \"\",\r\n item._temporaryFreightClassFieldsComplete = false\r\n }\r\n }\r\n\r\n function getFreightClassRequestPayload(item) {\r\n return {\r\n Height: getItemHeight(item),\r\n TotalWeight: item.weight ? item.weight : null,\r\n Quantity: item.quantity ? item.quantity : null,\r\n LinearUnit: item.linearUnitCode ? item.linearUnitCode : null,\r\n WeightUnit: item.weightUnitCode ? item.weightUnitCode : null,\r\n ShipmentDate: $scope.order.pickupDate ? $scope.order.pickupDate : null,\r\n Width: item.unitWidth && item.unitWidth.value ? item.unitWidth.value : null,\r\n Length: item.unitLength && item.unitLength.value ? item.unitLength.value : null,\r\n OriginCountryCode: $scope.order.pickup ? $scope.order.pickup.countryCode : null,\r\n CustomerCode: $scope.order.customer.partyCode ? $scope.order.customer.partyCode : null,\r\n DestinationCountryCode: $scope.order.deliver ? $scope.order.deliver.countryCode : null\r\n }\r\n }\r\n\r\n function getItemHeight(item) {\r\n if (item.unitHeight && item.unitHeight.value && item.isStackable !== null) {\r\n return (!item.isStackable && $scope.order.isTransactional ? getAdjustedHeight(item) : item.unitHeight.value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function getAdjustedHeight(item) {\r\n var height = item.unitHeight.value;\r\n var unitCode = item.linearUnitCode;\r\n var adjustedHeight;\r\n\r\n switch (unitCode) {\r\n case 'inches':\r\n adjustedHeight = 96;\r\n break;\r\n case 'centimeters':\r\n adjustedHeight = 243.84;\r\n break;\r\n case 'meters':\r\n adjustedHeight = 2.4384;\r\n break;\r\n case 'feet':\r\n adjustedHeight = 8;\r\n break;\r\n default:\r\n adjustedHeight = height;\r\n }\r\n\r\n return adjustedHeight;\r\n }\r\n\r\n function validateRequestPayload(requestPayload) {\r\n return Object.keys(requestPayload).every(function (key) {\r\n return requestPayload[key] !== null;\r\n });\r\n }\r\n\r\n function setPickupDateWithShipDateFromResultEdit() {\r\n if ($stateParams.shipDate && DateTimeService.isValidDate($stateParams.shipDate)) {\r\n var shipDate = new Date($stateParams.shipDate);\r\n if ($stateParams.shipDate.includes(\"T\")) {\r\n shipDate = DateTimeService.getRawDateTime($stateParams.shipDate);\r\n }\r\n\r\n $scope.order.pickupDate = shipDate;\r\n }\r\n }\r\n\r\n $scope.getCalculatedFreightClass = function (requestPayload, item, callback) {\r\n var url = API_BASE_URL + 'api/Rating/v1/Calculate/FreightClass';\r\n $http.post(url, requestPayload).then(function (result) {\r\n return callback(result);\r\n },\r\n function (error) {\r\n displayWarningMessage(item);\r\n item._temporaryIsLoading = false;\r\n $log(error);\r\n })\r\n }\r\n\r\n function displayWarningMessage(item) {\r\n item._temporaryFreightClassErrorMessage =\r\n 'Density based suggestion could not be calculated.';\r\n }\r\n\r\n $scope.useSuggestedFreightClass = function (item) {\r\n $scope.freightClassOptions.forEach(function (option) {\r\n if (Number(option.value) === item._temporarySuggestedFreightClass) {\r\n item.freightClass = option;\r\n }\r\n })\r\n }\r\n\r\n $scope.setModeType = function (mode, sendAdobeEvent) {\r\n if (mode === 'ltl') {\r\n $scope.requestType = requestTypeLtl;\r\n $scope.isLTL = true;\r\n resetTeam();\r\n if($scope.order && $scope.order.customer && sendAdobeEvent) {\r\n AdobeAnalyticsService.gaqFormSelected($scope.user, 'LTL')\r\n }\r\n } else if (mode === 'tl') {\r\n $scope.requestType = requestTypeTruckload;\r\n $scope.isLTL = false;\r\n if($scope.order && $scope.order.customer && sendAdobeEvent) {\r\n AdobeAnalyticsService.gaqFormSelected($scope.user, 'TL')\r\n }\r\n } else {\r\n $scope.requestType = requestTypeFlatbed;\r\n $scope.isLTL = false;\r\n if($scope.order && $scope.order.customer && sendAdobeEvent) {\r\n AdobeAnalyticsService.gaqFormSelected($scope.user, 'FB')\r\n }\r\n checkNonLTLDateTime();\r\n }\r\n clearFieldsOnFormChange();\r\n setDatePickerOptions($scope.order.isTransactional);\r\n };\r\n\r\n $scope.setSelectedBox = function (mode) {\r\n if (mode === 'ltl' && $scope.requestType === requestTypeLtl) {\r\n return true;\r\n } else if (mode === 'tl' && $scope.requestType === requestTypeTruckload) {\r\n return true;\r\n } else if (mode === 'fb' && $scope.requestType === requestTypeFlatbed) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n $scope.getServiceOfferingImageUrl = function (serviceOfferingNumber) {\r\n return ServiceOffering.get(serviceOfferingNumber);\r\n };\r\n\r\n function resetTeam() {\r\n $scope.order.isTeam = false;\r\n }\r\n\r\n function submittedRequestType() {\r\n switch ($scope.requestType) {\r\n case requestTypeLtl: return 'LTL';\r\n case requestTypeTruckload: return 'TL';\r\n case requestTypeFlatbed: return 'FB';\r\n default: return ''\r\n }\r\n }\r\n\r\n function checkNonLTLDateTime() {\r\n if ($scope.order.pickupDate > DateTimeService.getDateAddDays(14, DateTimeService.getToday())) {\r\n $scope.order.pickupDate = DateTimeService.getToday();\r\n }\r\n }\r\n\r\n function getRequestTypeFromQuoteDetails(quoteDetailList) {\r\n var truckloadQuotes = 0;\r\n var flatbedQuotes = 0;\r\n var ltlQuotes = 0;\r\n var requestType = \"\";\r\n\r\n _.forEach(quoteDetailList, function(quoteDetail) {\r\n if(quoteDetail.transportModeType === 12) {\r\n flatbedQuotes++;\r\n } else if(quoteDetail.transportModeType === 2) {\r\n truckloadQuotes++;\r\n } else {\r\n ltlQuotes++;\r\n }\r\n });\r\n\r\n if (truckloadQuotes > 0 && flatbedQuotes === 0 && ltlQuotes === 0) {\r\n requestType = requestTypeTruckload;\r\n } else if (truckloadQuotes === 0 && flatbedQuotes > 0 && ltlQuotes === 0) {\r\n requestType = requestTypeFlatbed;\r\n } else {\r\n requestType = requestTypeLtl;\r\n }\r\n return requestType;\r\n }\r\n\r\n }\r\n app.controller('getAQuoteController', getAQuoteController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n emailQuoteController.$inject = ['$scope', '$uibModalInstance', 'quoteRequestId', 'quoteIds','QuoteService', '$uibModal', 'user'];\r\n function emailQuoteController($scope, $uibModalInstance, quoteRequestId, quoteIds, QuoteService, $uibModal, user) {\r\n $scope.replyTos = [user.email];\r\n $scope.docs = [{description: \"Quote\"}];\r\n\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('close');\r\n };\r\n function showConfirmation() {\r\n $uibModalInstance.dismiss('sent');\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/emailConfirmation.tpl.html',\r\n size: 'lg',\r\n controller: 'emailConfirmationController'\r\n });\r\n $scope.processing = false;\r\n }\r\n\r\n $scope.processing = false;\r\n $scope.send = function () {\r\n $scope.processing = true;\r\n\r\n var toAddys = $scope.to.split(';');\r\n\r\n QuoteService.sendEmail({\r\n quoteRequestId: quoteRequestId,\r\n quoteIds: quoteIds,\r\n replyTos: $scope.replyTos,\r\n to: toAddys,\r\n message: $scope.message\r\n }).$promise.then(function () {\r\n showConfirmation();\r\n });\r\n };\r\n\r\n }\r\n angular.module('NavisphereOnline').controller('emailQuoteController', emailQuoteController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function footerController($scope, applicationVersion) {\r\n $scope.applicationVersion = applicationVersion;\r\n $scope.date = new Date();\r\n $scope.showFooter = function(){\r\n \tvar url = window.location.href;\r\n \tif(url.indexOf('map') > -1){\r\n \t\treturn false;\r\n \t}\r\n \treturn true;\r\n }\r\n }\r\n footerController.$inject = ['$scope','applicationVersion'];\r\n app.controller('FooterController', footerController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n documentManagerService.$inject = ['API_BASE_URL', 'DocumentHelper', '$timeout', '$uibModal'];\r\n\r\n function documentManagerService(API_BASE_URL, DocumentHelper, $timeout, $uibModal) {\r\n var isDocumentViewerOpen = false;\r\n var unsetIsDocumentViewerOpen = function() {\r\n isDocumentViewerOpen = false;\r\n };\r\n\r\n this.checkAll = function(vm) {\r\n vm.noneChecked = vm.allChecked;\r\n vm.allChecked = !vm.allChecked;\r\n for(var i = 0; i < vm.documents.length; i++){\r\n vm.documents[i].checked = vm.allChecked;\r\n }\r\n if(vm.order) {\r\n vm.includePalletLabel = vm.allChecked;\r\n vm.incBol = vm.allChecked;\r\n }\r\n };\r\n\r\n this.close = function(uibModalInstance) {\r\n uibModalInstance.dismiss('close');\r\n };\r\n\r\n this.determineAllChecked = function(documents){\r\n var allChk = true;\r\n var noneChk = true;\r\n for(var i = 0; i < documents.length; i++){\r\n if(!documents[i].checked){\r\n allChk = false;\r\n } else {\r\n noneChk = false;\r\n }\r\n }\r\n\r\n return {\r\n allChecked: allChk,\r\n noneChecked: noneChk\r\n }\r\n };\r\n\r\n this.openDocumentViewer = function(controller, ticketId, resolveObject) {\r\n if (isDocumentViewerOpen) return;\r\n\r\n isDocumentViewerOpen = true;\r\n resolveObject.ticketid = ticketId;\r\n var documentViewerModal = $uibModal.open({\r\n templateUrl: 'app/documentManager/views/documentViewer.tpl.html',\r\n size: 'lg',\r\n controller: controller,\r\n controllerAs : 'vm',\r\n resolve: resolveObject\r\n });\r\n\r\n documentViewerModal.result.then(unsetIsDocumentViewerOpen(),\r\n unsetIsDocumentViewerOpen()\r\n );\r\n };\r\n\r\n this.printAll = function(documents, order, incBol, includePalletLabel, shipmentNum) {\r\n var docIds = '';\r\n var filepaths = '';\r\n var x = 0;\r\n var y = 0;\r\n var loadNumberParam = null;\r\n var url='';\r\n\r\n\r\n for(var i = 0; i < documents.length; i++){\r\n if(angular.isDefined(documents[i].id) && documents[i].id > 0 && documents[i].checked) {\r\n docIds += '&docIds[' + x++ + ']=' + documents[i].id;\r\n }\r\n if(angular.isDefined(documents[i].path) && documents[i].checked) {\r\n filepaths += '&filepaths[' + y++ + ']=' + documents[i].path;\r\n }\r\n }\r\n\r\n if (shipmentNum) \r\n {\r\n url = API_BASE_URL + \"api/documents/combine?shipmentNumber=\" + encodeURIComponent(shipmentNum)\r\n + docIds;\r\n }\r\n else \r\n {\r\n var orderNumber = order ? order.customerOrderNumber : 0;\r\n\r\n var loadNumbers = documents\r\n .filter(function (doc) { return doc.loadNumber && doc.checked })\r\n .map(function (doc) { return doc.loadNumber });\r\n\r\n if (Array.isArray(loadNumbers) && loadNumbers.length > 0) {\r\n loadNumberParam = loadNumbers.reduce(function (accumulator, loadNumber, index) {\r\n return accumulator + '&loadNumbers[' + index + ']=' + loadNumber;\r\n }, '');\r\n\r\n incBol = true;\r\n }\r\n\r\n url = API_BASE_URL + \"api/documents/combine\" +\r\n '?orderNumber=' + encodeURIComponent(orderNumber) +\r\n '&includeBOL=' + encodeURIComponent(incBol) +\r\n '&includePalletLabel=' + encodeURIComponent(includePalletLabel == true) +\r\n docIds +\r\n filepaths;\r\n }\r\n\r\n $timeout(function () {\r\n\r\n if (!!loadNumberParam) {\r\n url = url + loadNumberParam;\r\n }\r\n\r\n DocumentHelper.showDocument(url);\r\n });\r\n };\r\n\r\n this.sendDocument = function(order, document, ticketid) {\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendDocument.tpl.html',\r\n size: 'lg',\r\n controller: 'sendDocumentController',\r\n resolve: {\r\n order: function () { return order; },\r\n document: function () { return document; },\r\n bol: function () { return null; },\r\n palletLabel: function () { return null; },\r\n documents: function () { return null; },\r\n ticketid: function () { return ticketid; },\r\n includeBOL: function () { return false; },\r\n loadNumbers: function() {\r\n return !!document.loadNumber ? [document.loadNumber] : null;\r\n },\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n })\r\n };\r\n\r\n this.sendDocuments = function(order, documents, ticketid) {\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendDocument.tpl.html',\r\n size: 'lg',\r\n controller: 'sendDocumentController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n order: function () { return order; },\r\n document: function () { return null; },\r\n bol: function () { return null; },\r\n palletLabel: function () { return null; },\r\n documents: function () { return documents; },\r\n ticketid: function () { return ticketid; },\r\n loadNumbers: function() {\r\n return documents\r\n .filter(function(doc) { return !!doc.loadNumber && !!doc.checked })\r\n .map(function(doc) { return doc.loadNumber });\r\n },\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n })\r\n };\r\n\r\n this.sendShipmentDocument = function(shipmentNum, document) {\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendDocument.tpl.html',\r\n size: 'lg',\r\n controller: 'sendShipmentDocumentController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n documents: function () {\r\n return [document];\r\n },\r\n shipmentNum: shipmentNum,\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n });\r\n };\r\n\r\n this.sendShipmentDocuments = function(shipmentNum, documents) {\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendDocument.tpl.html',\r\n size: 'lg',\r\n controller: 'sendShipmentDocumentController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n documents: function () {\r\n return documents\r\n .filter(function(doc) { return !!doc.checked });\r\n },\r\n shipmentNum: shipmentNum,\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n });\r\n };\r\n }\r\n angular.module('NavisphereOnline').service('DocumentManagerService', documentManagerService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n shipmentDocumentViewerController.$inject = ['API_BASE_URL', 'DocumentHelper', 'DocumentManagerService', 'documents', 'shipmentNum',\r\n '$scope', '$timeout', '$uibModalInstance'];\r\n function shipmentDocumentViewerController(API_BASE_URL, DocumentHelper, DocumentManagerService, documents, shipmentNum,\r\n $scope, $timeout, $uibModalInstance) {\r\n\r\n var vm = this;\r\n\r\n vm.shipmentNum = shipmentNum;\r\n vm.documents = !!documents ? transformDocs(documents) : [];\r\n vm.docSource = 'SHIPMENTS';\r\n vm.incBol = false;\r\n vm.includePalletLabel = false;\r\n vm.allChecked = false;\r\n vm.noneChecked = true;\r\n\r\n vm.printAll = printAll;\r\n vm.cancel = cancel;\r\n vm.close = close;\r\n vm.checkAll = checkAll;\r\n vm.sendShipmentDocuments = DocumentManagerService.sendShipmentDocuments;\r\n\r\n function close() {\r\n DocumentManagerService.close($uibModalInstance);\r\n }\r\n\r\n function transformDocs(docs) {\r\n console.log(docs);\r\n var transformedDocs = [];\r\n\r\n for (var i = 0; i < docs.length; i++) {\r\n (function (index) {\r\n var doc = docs[index];\r\n var uiDoc = {};\r\n uiDoc.id = doc.id;\r\n uiDoc.name = doc.name;\r\n uiDoc.description = doc.description;\r\n uiDoc.emailAllowed = true;\r\n uiDoc.printAllowed = true;\r\n uiDoc.docType = doc.docType;\r\n\r\n if (!!doc.loadNumber) {\r\n uiDoc.loadNumber = doc.loadNumber\r\n }\r\n\r\n if (!!doc.createdDate) {\r\n uiDoc.createdDate = new Date(doc.createdDate);\r\n }\r\n\r\n\r\n uiDoc.getStatus = function() {\r\n if(doc.status === 400) {\r\n return 'PENDING'\r\n } else if (doc.status === -100) {\r\n return 'ERROR'\r\n } else if (doc.status === null || doc.status === undefined || doc.status === 0) {\r\n return null;\r\n } else {\r\n return 'COMPLETE'\r\n }\r\n };\r\n \r\n uiDoc.selectAction = function() {\r\n uiDoc.checked = !uiDoc.checked;\r\n determineAllChecked();\r\n };\r\n\r\n uiDoc.linkAction = getDocumentLinkAction(doc);\r\n uiDoc.emailAction = getDocumentEmailAction(uiDoc);\r\n\r\n transformedDocs.push(uiDoc);\r\n })(i);\r\n\r\n }\r\n return transformedDocs;\r\n }\r\n\r\n function getDocumentLinkAction(doc) {\r\n return function() {\r\n $timeout(function() {\r\n DocumentHelper.showDocument(API_BASE_URL + \"api/documents/\" + doc.id);\r\n });\r\n }\r\n }\r\n \r\n function getDocumentEmailAction(doc) {\r\n return function() {\r\n DocumentManagerService.sendShipmentDocument(shipmentNum, doc);\r\n }\r\n }\r\n\r\n function checkAll() {\r\n vm.noneChecked = vm.allChecked;\r\n vm.allChecked = !vm.allChecked;\r\n for(var i = 0; i < vm.documents.length; i++){\r\n vm.documents[i].checked = vm.allChecked;\r\n }\r\n }\r\n\r\n function determineAllChecked(){\r\n var checkedResults = DocumentManagerService.determineAllChecked(vm.documents);\r\n vm.allChecked = checkedResults.allChecked;\r\n vm.noneChecked = checkedResults.noneChecked;\r\n }\r\n\r\n function printAll() {\r\n DocumentManagerService.printAll(vm.documents, null, false, false, shipmentNum);\r\n }\r\n\r\n vm.setValueToNull = function (inputElem) {\r\n angular.element(inputElem).val(null);\r\n };\r\n\r\n function cancel() {\r\n $scope.uploader.cancelAll();\r\n angular.forEach(\r\n angular.element(\"input[type='file']\"),vm.setValueToNull);\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('shipmentDocumentViewerController', shipmentDocumentViewerController);\r\n})();\n(function () {\r\n 'use strict';\r\n sendShipmentDocumentController.$inject = ['$scope', '$uibModal', '$uibModalInstance', 'DocumentService', 'shipmentNum', 'documents', 'user'];\r\n function sendShipmentDocumentController($scope, $uibModal, $uibModalInstance, DocumentService, shipmentNum, documents, user) {\r\n $scope.docs = documents;\r\n\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('close');\r\n }\r\n\r\n $scope.send = function () {\r\n $scope.processing = true;\r\n\r\n var toAddys = $scope.to.split(';');\r\n\r\n DocumentService.sendShipmentDocuments({ \r\n docIds: $scope.docs.map(function(doc) { return doc.id; }),\r\n loadNumbers: [shipmentNum],\r\n replyTos: [user.email],\r\n to: toAddys,\r\n message: $scope.message\r\n }).$promise.then(function () {\r\n showConfirmation();\r\n })\r\n }\r\n\r\n function showConfirmation () {\r\n $uibModalInstance.dismiss('sent');\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/emailConfirmation.tpl.html',\r\n size: 'lg',\r\n controller: 'emailConfirmationController'\r\n });\r\n $scope.processing = false;\r\n }\r\n }\r\n angular.module('NavisphereOnline').controller('sendShipmentDocumentController', sendShipmentDocumentController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n sendDocumentController.$inject = ['$scope', '$uibModalInstance', 'order', 'bol', 'palletLabel', 'document', 'documents',\r\n 'DocumentService', '$uibModal', 'user', 'loadNumbers', 'ticketid'];\r\n function sendDocumentController($scope, $uibModalInstance, order, bol, palletLabel, document, documents,\r\n DocumentService, $uibModal, user, loadNumbers, ticketid) {\r\n $scope.replyTos = [user.email];\r\n $scope.bol = bol;\r\n $scope.palletLabel = palletLabel;\r\n $scope.document = document;\r\n $scope.docs = [];\r\n var ticketid = ticketid;\r\n var docIds = [];\r\n var docPaths = [];\r\n var includeBOL, includePalletLabel = false;\r\n\r\n $scope.setDefaults = function setDefaults(){\r\n if (!$scope.palletLabel && Array.isArray(documents)) {\r\n var palletLabelDocs = documents\r\n .filter(function (doc) {\r\n return doc.checked && doc.id === -2;\r\n })\r\n\r\n if (documents.length === 1 && palletLabelDocs.length === 1) {\r\n $scope.palletLabel = palletLabelDocs[0];\r\n }\r\n }\r\n\r\n if (documents) {\r\n for(var i = 0; i < documents.length; i++){\r\n if(documents[i].id) {\r\n if(documents[i].id === -1){\r\n if(documents[i].checked){\r\n includeBOL = true;\r\n $scope.docs.push(documents[i]);\r\n }\r\n } else if (documents[i].id === -2){\r\n if(documents[i].checked) {\r\n includePalletLabel = true;\r\n $scope.docs.push(documents[i]);\r\n }\r\n } else{\r\n if(documents[i].checked) {\r\n docIds.push(documents[i].id);\r\n if(documents[i].path){\r\n docPaths.push(documents[i].path);\r\n }\r\n $scope.docs.push(documents[i]);\r\n }\r\n }\r\n }\r\n }\r\n } else if ($scope.bol) {\r\n $scope.docs = [];\r\n $scope.docs.push($scope.bol);\r\n } else if ($scope.palletLabel) {\r\n $scope.docs = [];\r\n $scope.docs.push($scope.palletLabel);\r\n } else {\r\n $scope.docs = [];\r\n $scope.docs.push($scope.document);\r\n }\r\n };\r\n\r\n $scope.setDefaults();\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('close');\r\n };\r\n function showConfirmation() {\r\n $uibModalInstance.dismiss('sent');\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/emailConfirmation.tpl.html',\r\n size: 'lg',\r\n controller: 'emailConfirmationController'\r\n });\r\n $scope.processing = false;\r\n }\r\n\r\n $scope.processing = false;\r\n $scope.send = function () {\r\n $scope.processing = true;\r\n\r\n var toAddys = $scope.to.split(';');\r\n\r\n if ($scope.bol) {\r\n DocumentService.sendBol({\r\n orderNumber: order.customerOrderNumber,\r\n replyTos: $scope.replyTos,\r\n to: toAddys,\r\n message: $scope.message,\r\n loadNumbers: loadNumbers\r\n }).$promise.then(function () {\r\n showConfirmation();\r\n });\r\n } else if ($scope.palletLabel) {\r\n DocumentService.sendPalletlabel({\r\n orderNumber: order.customerOrderNumber,\r\n replyTos: $scope.replyTos,\r\n to: toAddys,\r\n message: $scope.message,\r\n includePalletLabel: true\r\n }).$promise.then(function () {\r\n showConfirmation();\r\n });\r\n } else if ($scope.document) {\r\n DocumentService.sendDocument({\r\n documentId: $scope.document.id,\r\n filePath: $scope.document.path ? $scope.document.path : null,\r\n orderNumber: order ? order.customerOrderNumber : null,\r\n replyTos: $scope.replyTos,\r\n to: toAddys,\r\n message: $scope.message,\r\n ticketid : ticketid,\r\n loadNumbers: loadNumbers\r\n }).$promise.then(function () {\r\n showConfirmation();\r\n });\r\n } else {\r\n DocumentService.sendDocuments({\r\n orderNumber: order ? order.customerOrderNumber : null,\r\n filePaths: docPaths,\r\n replyTos: $scope.replyTos,\r\n to: toAddys,\r\n message: $scope.message,\r\n includeBol: includeBOL,\r\n includePalletLabel: includePalletLabel,\r\n docIds: docIds,\r\n ticketid : ticketid,\r\n loadNumbers: loadNumbers\r\n }).$promise.then(function () {\r\n showConfirmation();\r\n });\r\n }\r\n }\r\n }\r\n angular.module('NavisphereOnline').controller('sendDocumentController', sendDocumentController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n reverseLogisticsDocumentViewerController.$inject = ['API_BASE_URL', 'DocumentHelper', 'DocumentManagerService', 'documents', '$uibModalInstance', '$timeout', 'ticketid' ];\r\n function reverseLogisticsDocumentViewerController(API_BASE_URL, DocumentHelper, DocumentManagerService, documents, $uibModalInstance, $timeout, ticketid) {\r\n\r\n var vm = this;\r\n vm.incBol = false;\r\n vm.includePalletLabel = false;\r\n vm.allChecked = false;\r\n vm.noneChecked = true;\r\n vm.ticketid = ticketid;\r\n vm.docSource = 'REVERSELOGISTICS';\r\n vm.documents = transformDocs(documents);\r\n\r\n\r\n vm.printAll = printAll;\r\n vm.close = close;\r\n vm.checkAll = checkAll;\r\n vm.determineAllChecked = determineAllChecked;\r\n vm.sendDocument = DocumentManagerService.sendDocument;\r\n vm.sendDocuments = DocumentManagerService.sendDocuments;\r\n\r\n\r\n function checkAll() {\r\n DocumentManagerService.checkAll(vm);\r\n }\r\n\r\n function close() {\r\n DocumentManagerService.close($uibModalInstance);\r\n }\r\n\r\n function determineAllChecked() {\r\n var checkedResults = DocumentManagerService.determineAllChecked(vm.documents);\r\n vm.allChecked = checkedResults.allChecked;\r\n vm.noneChecked = checkedResults.noneChecked;\r\n }\r\n\r\n function printAll() {\r\n DocumentManagerService.printAll(vm.documents, vm.order, vm.incBol, vm.includePalletLabel, null);\r\n }\r\n\r\n function transformDocs(docs) {\r\n var transformedDocs = [];\r\n\r\n for (var i = 0; i < docs.length; i++) {\r\n (function (index) {\r\n var doc = docs[index];\r\n var uiDoc = {};\r\n uiDoc.id = doc.id;\r\n uiDoc.name = doc.name;\r\n uiDoc.emailAllowed = true;\r\n uiDoc.printAllowed = true;\r\n uiDoc.deleteAllowed = false;\r\n uiDoc.createdDate = new Date(doc.createdDate);\r\n uiDoc.path = doc.uncPath;\r\n uiDoc.getStatus = function(){return doc.status};\r\n uiDoc.isPending = function() {\r\n return doc.status !== \"COMPLETE\";\r\n };\r\n uiDoc.selectAction = function() {\r\n uiDoc.checked = !uiDoc.checked;\r\n determineAllChecked();\r\n };\r\n uiDoc.emailAction = function () {\r\n vm.sendDocument(null, uiDoc, vm.ticketid);\r\n };\r\n uiDoc.linkAction = function () {\r\n $timeout(function () {\r\n DocumentHelper.showDocument(API_BASE_URL + \"api/reverselogisticsdocuments?path=\" + uiDoc.path);\r\n });\r\n };\r\n transformedDocs.push(uiDoc);\r\n })(i);\r\n\r\n }\r\n return transformedDocs;\r\n }\r\n\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('reverseLogisticsDocumentViewerController', reverseLogisticsDocumentViewerController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n orderDocumentViewerController.$inject = ['API_BASE_URL', 'authService', 'DocumentHelper', 'DocumentManagerService', 'documents', 'DocumentService', 'FileUploader', 'ModalService', 'order',\r\n '$scope', 'StatusMappingService', '$timeout', '$uibModal', '$uibModalInstance', 'UserPermissionService' ];\r\n function orderDocumentViewerController(API_BASE_URL, authService, DocumentHelper, DocumentManagerService, documents, DocumentService, FileUploader, ModalService, order,\r\n $scope, StatusMappingService, $timeout, $uibModal, $uibModalInstance, UserPermissionService, ticketid) {\r\n\r\n function init() {\r\n refresh();\r\n }\r\n\r\n var modalOptions = {\r\n closeButtonText: 'NO',\r\n actionButtonText: 'YES',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_REMOVE_THIS_DOCUMENT',\r\n bodyText: ''\r\n };\r\n var vm = this;\r\n\r\n vm.ticketid = ticketid;\r\n vm.order = order;\r\n vm.invalidFileType = false;\r\n vm.invalidFileSize = false;\r\n vm.document = { customerCode: vm.order.customerInfo.customer.partyCode };\r\n vm.documents = !!documents ? transformDocs(documents) : [];\r\n vm.docSource = 'ORDERS';\r\n vm.incBol = false;\r\n vm.includePalletLabel = false;\r\n vm.allChecked = false;\r\n vm.noneChecked = true;\r\n\r\n vm.setDefaultLoad = setDefaultLoad;\r\n vm.setOrderNumber = setOrderNumber;\r\n vm.refresh = refresh;\r\n vm.printAll = printAll;\r\n vm.cancel = cancel;\r\n vm.close = close;\r\n vm.upload = upload;\r\n vm.sendBol = sendBol;\r\n vm.sendPalletLabel = sendPalletLabel;\r\n vm.sendDocuments = DocumentManagerService.sendDocuments;\r\n vm.checkAll = checkAll;\r\n\r\n\r\n vm.setDefaultLoad();\r\n vm.setOrderNumber();\r\n\r\n function close() {\r\n DocumentManagerService.close($uibModalInstance);\r\n }\r\n\r\n function setDefaultLoad() {\r\n if (vm.order.service.loads.length == 1) {\r\n vm.document.loadNumber = vm.order.service.loads[0].loadNumber;\r\n }\r\n }\r\n\r\n function setOrderNumber() {\r\n vm.document.orderNumber = vm.order.customerOrderNumber;\r\n }\r\n\r\n function sendBol(bol) {\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendDocument.tpl.html',\r\n size: 'lg',\r\n controller: 'sendDocumentController',\r\n resolve: {\r\n order: function () { return vm.order; },\r\n ticketid: function () { return vm.ticketid; },\r\n document: function () { return null; },\r\n bol: function () { return bol; },\r\n palletLabel: function () { return null; },\r\n documents: function () { return null; },\r\n includeBOL: function () { return false; },\r\n loadNumbers: function() { return !!bol.loadNumber ? [bol.loadNumber] : null; },\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n }).result.then(function () {\r\n }, function () {\r\n });\r\n }\r\n\r\n function sendPalletLabel(palletLabel) {\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/sendDocument.tpl.html',\r\n size: 'lg',\r\n controller: 'sendDocumentController',\r\n resolve: {\r\n order: function () { return vm.order; },\r\n ticketid: function () { return vm.ticketid; },\r\n document: function () { return null; },\r\n bol: function () { return null; },\r\n palletLabel: function () { return palletLabel; },\r\n documents: function () { return null; },\r\n includeBOL: function () { return false; },\r\n loadNumbers: function() { return null },\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n }).result.then(function () {\r\n }, function () {\r\n });\r\n }\r\n\r\n function transformDocs(docs) {\r\n var transformedDocs = [];\r\n\r\n for (var i = 0; i < docs.length; i++) {\r\n (function (index) {\r\n var doc = docs[index];\r\n var uiDoc = {};\r\n uiDoc.id = doc.id;\r\n uiDoc.name = doc.name;\r\n uiDoc.description = doc.description;\r\n uiDoc.emailAllowed = true;\r\n uiDoc.printAllowed = true;\r\n uiDoc.deleteAllowed = false;\r\n uiDoc.docType = doc.docType;\r\n\r\n if (!!doc.loadNumber) {\r\n uiDoc.loadNumber = doc.loadNumber\r\n }\r\n\r\n if (!!doc.createdDate) {\r\n uiDoc.createdDate = new Date(doc.createdDate);\r\n }\r\n\r\n uiDoc.getStatus = function() {\r\n if(doc.status === 400) {\r\n return 'PENDING'\r\n } else if (doc.status === -100) {\r\n return 'ERROR'\r\n } else if (doc.status === null || doc.status === undefined || doc.status === 0) {\r\n return null;\r\n } else {\r\n return 'COMPLETE'\r\n }\r\n };\r\n uiDoc.isPending = function(){\r\n return doc.status === 400;\r\n };\r\n uiDoc.selectAction = function() {\r\n uiDoc.checked = !uiDoc.checked;\r\n determineAllChecked();\r\n };\r\n\r\n if (uiDoc.docType === 'PALLET LABEL') {\r\n uiDoc.linkAction = doc.id > 0\r\n ? getDocumentLinkAction(doc)\r\n : getPalletLabelLinkAction(doc);\r\n uiDoc.emailAction = sendPalletLabel.bind(null, doc);\r\n } else if (uiDoc.docType === 'BOL') {\r\n uiDoc.linkAction = doc.id > 0\r\n ? getDocumentLinkAction(doc)\r\n : getBolLinkAction(doc);\r\n uiDoc.emailAction = sendBol.bind(null, doc);\r\n } else {\r\n uiDoc.linkAction = getDocumentLinkAction(doc);\r\n uiDoc.emailAction = function () {\r\n DocumentManagerService.sendDocument(vm.order, uiDoc, vm.ticketid);\r\n };\r\n }\r\n\r\n uiDoc.deleteAction = function () {\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n DocumentService.delete({\r\n documentId: uiDoc.id\r\n }).$promise.then(function () {\r\n vm.refresh();\r\n });\r\n }\r\n });\r\n };\r\n transformedDocs.push(uiDoc);\r\n })(i);\r\n\r\n }\r\n return transformedDocs;\r\n }\r\n\r\n function getDocumentLinkAction(doc) {\r\n return function(){\r\n $timeout(function () {\r\n DocumentHelper.showDocument(API_BASE_URL + \"api/documents/\" + doc.id);\r\n });\r\n }\r\n }\r\n\r\n function getPalletLabelLinkAction(doc) {\r\n return function(){\r\n $timeout(function () {\r\n DocumentHelper.showDocument(API_BASE_URL + 'api/documents/palletLabel' + '?orderNumber=' + encodeURIComponent(vm.order.customerOrderNumber));\r\n });\r\n }\r\n }\r\n\r\n function getBolLinkAction(doc) {\r\n return function() {\r\n $timeout(function () {\r\n var getBolUrl = API_BASE_URL +'api/documents/bol';\r\n var urlParams = '?orderNumber=' + encodeURIComponent(vm.order.customerOrderNumber);\r\n\r\n if (!!doc.loadNumber) {\r\n urlParams = urlParams + '&loadNumber=' + encodeURIComponent(doc.loadNumber);\r\n }\r\n\r\n DocumentHelper.showDocument(getBolUrl + urlParams);\r\n });\r\n }\r\n }\r\n\r\n function checkAll() {\r\n vm.noneChecked = vm.allChecked;\r\n vm.allChecked = !vm.allChecked;\r\n for(var i = 0; i < vm.documents.length; i++){\r\n vm.documents[i].checked = vm.allChecked;\r\n }\r\n vm.includePalletLabel = vm.allChecked;\r\n vm.incBol = vm.allChecked;\r\n }\r\n function determineAllChecked(){\r\n var checkedResults = DocumentManagerService.determineAllChecked(vm.documents);\r\n vm.allChecked = checkedResults.allChecked;\r\n vm.noneChecked = checkedResults.noneChecked;\r\n }\r\n\r\n function refresh() {\r\n if (!vm.isRefreshing) {\r\n vm.isRefreshing = true;\r\n DocumentService.getAll({\r\n orderNumber: vm.order.customerOrderNumber\r\n }).$promise.then(function (orderDocuments) {\r\n getDefaultorderDocumentsAsync()\r\n .then(function (defaultOrderDocuments) {\r\n vm.isRefreshing = false;\r\n var defaultOrderDocs = defaultOrderDocuments || [];\r\n vm.documents = transformDocs(defaultOrderDocs.concat(orderDocuments));\r\n determineAllChecked();\r\n });\r\n });\r\n }\r\n }\r\n\r\n function getDefaultorderDocumentsAsync() {\r\n var partyCode = vm.order.customerInfo.customer.partyCode;\r\n var orderNumber = vm.order.customerOrderNumber;\r\n return DocumentService.getDefaultOrderDocuments({partyCode: partyCode, orderNumber: orderNumber}).$promise;\r\n }\r\n\r\n function printAll() {\r\n var includeBol = vm.incBol || vm.documents\r\n .some(function (doc) {\r\n return doc.docType === 'BOL' && doc.checked;\r\n });\r\n\r\n var includePalletLabel = vm.includePalletLabel || vm.documents\r\n .some(function (doc) {\r\n return doc.docType === 'PALLET LABEL' && doc.checked;\r\n });\r\n DocumentManagerService.printAll(vm.documents, vm.order, includeBol, includePalletLabel, null);\r\n }\r\n\r\n var uploader = $scope.uploader = new FileUploader({\r\n url: API_BASE_URL + 'api/documents',\r\n headers: {\r\n Authorization: \"Bearer \" + authService.getAccessToken()\r\n }\r\n });\r\n\r\n uploader.removeAfterUpload = true;\r\n\r\n function upload() {\r\n vm.processing = true;\r\n $scope.uploader.uploadAll();\r\n }\r\n\r\n uploader.onBeforeUploadItem = function (fileItem) {\r\n fileItem.formData.push(vm.document);\r\n };\r\n\r\n uploader.onCompleteItem = function () {\r\n vm.refresh();\r\n vm.document = { customerCode: vm.order.customerInfo.customer.partyCode };\r\n $scope.uploader.progress = 0;\r\n $scope.uploadform.$setPristine();\r\n $scope.uploadform.$setUntouched();\r\n angular.forEach(angular.element(\"input[type='file']\"),vm.setValueToNull);\r\n vm.setDefaultLoad();\r\n };\r\n\r\n uploader.filters.push({\r\n name: 'extensionFilter',\r\n fn: function (item) {\r\n var filename = item.name;\r\n var extension = filename.substring(filename.lastIndexOf('.') + 1).toLowerCase();\r\n vm.invalidFileType = !(extension === \"pdf\" || extension === \"tif\" || extension === \"tiff\" ||\r\n extension === \"jpg\" || extension === \"jpeg\");\r\n return true;\r\n }\r\n });\r\n\r\n uploader.filters.push({\r\n name: 'sizeFilter',\r\n fn: function (item) {\r\n var fileSize = item.size;\r\n fileSize = parseInt(fileSize) / (1024 * 1024);\r\n vm.invalidFileSize = fileSize > 5;\r\n return true;\r\n }\r\n });\r\n\r\n vm.setValueToNull = function (inputElem) {\r\n angular.element(inputElem).val(null);\r\n };\r\n\r\n function cancel() {\r\n $scope.uploader.cancelAll();\r\n angular.forEach(\r\n angular.element(\"input[type='file']\"),vm.setValueToNull);\r\n }\r\n\r\n init();\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('orderDocumentViewerController', orderDocumentViewerController);\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n \r\n developmentFeatureTogglesController.$inject = ['$scope', 'UserPermissionService'];\r\n function developmentFeatureTogglesController($scope, UserPermissionService) {\r\n $scope.devFeatureToggles = [];\r\n $scope.hasPermissionToPage = false;\r\n\r\n $scope.save = updateFeatureToggle;\r\n\r\n function activate() {\r\n $scope.hasPermissionToPage = UserPermissionService.hasPermission(\"[Warning] Features In Development\");\r\n loadDevFeatureToggles();\r\n }\r\n activate(); \r\n \r\n\r\n function loadDevFeatureToggles() {\r\n $scope.devFeatureToggles = [];\r\n\r\n var toggles = UserPermissionService.getDevelopmentFeatureToggles();\r\n if (angular.isUndefined(toggles) || toggles === null) {\r\n return;\r\n }\r\n\r\n var featureKeys = Object.keys(toggles);\r\n if (angular.isUndefined(featureKeys) || featureKeys === null || featureKeys.length <= 0) {\r\n return;\r\n }\r\n\r\n var toggleKeyValues = [];\r\n for(var index = 0; index < featureKeys.length; index++) {\r\n var key = featureKeys[index];\r\n if (key === 'ForUnitTestsCoverageOnly') {\r\n continue;\r\n }\r\n\r\n var toggle = {\r\n index: toggleKeyValues.length,\r\n name: key, \r\n isActive: toggles[key]\r\n };\r\n\r\n toggleKeyValues.push(toggle);\r\n }\r\n\r\n $scope.devFeatureToggles = toggleKeyValues;\r\n }\r\n\r\n function updateFeatureToggle(featureToggle) {\r\n if(angular.isUndefined(featureToggle) || featureToggle === null) {\r\n return;\r\n }\r\n\r\n $scope.devFeatureToggles[featureToggle.index].isActive = featureToggle.isActive;\r\n UserPermissionService.saveDevelopmentFeatureToggle(featureToggle.name, featureToggle.isActive);\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('developmentFeatureTogglesController', developmentFeatureTogglesController);\r\n\r\n})();\r\n \n(function() {\r\n angular\r\n .module('NavisphereOnline')\r\n .directive('smallBarChart',smallBarChart);\r\n\r\n smallBarChart.$inject = ['d3Service', 'moment', '$log'];\r\n\r\n function smallBarChart(d3Service, moment, $log){\r\n var directive = {\r\n restrict: 'E',\r\n templateUrl: 'app/components/smBarChart/smBarChart.html',\r\n scope: {\r\n chartValue: '='\r\n },\r\n bindToController: false,\r\n link: SmallBarChartLink\r\n };\r\n return directive;\r\n\r\n function SmallBarChartLink(scope, element) {\r\n\r\n var d3 = d3Service;\r\n\r\n var data = scope.chartValue;\r\n\r\n var margin = {top: 45, right: 20, bottom: 20, left: 20},\r\n width = 510 - margin.left - margin.right,\r\n height = 90 - margin.top - margin.bottom;\r\n\r\n var color = d3.scale.linear()\r\n .domain([0.0, 0.70, 1.00])\r\n .range([\"#59A5CD\", \"#004F75\", \"#002b40\"]);\r\n\r\n var x = d3.scale.ordinal()\r\n .rangeRoundBands([0, width],.1,.4);\r\n\r\n// Scales. Note the inverted domain fo y-scale: bigger is up!\r\n var y = d3.scale.linear()\r\n .range([height, 0]);\r\n\r\n var xAxis = d3.svg.axis()\r\n .scale(x)\r\n .orient(\"bottom\")\r\n .orient(\"bottom\")\r\n .outerTickSize(0)\r\n .tickValues([mindate(data),maxdate(data)])\r\n .tickFormat(function(d){return formatDate(d)});\r\n\r\n var tip = d3.tip()\r\n .attr('class', 'd3-tip')\r\n .offset([-10, 0])\r\n .html(function (d) {\r\n return \"
\" + \"\\t\" + formatDate(d.year) + \"
\" + (d.percent * 100).toFixed(2) + \"%\";\r\n });\r\n\r\n // Data is nested by datagrounp\r\n var datagroup = d3.nest()\r\n .key(function (d) {\r\n return d.country;\r\n })\r\n .entries(data);\r\n\r\n // Compute the minimum and maximum year and percent across symbols.\r\n x.domain(data.map(function (d) {\r\n return d.year;\r\n }));\r\n\r\n //x.domain(data.map(function(d) { return 'yup'; }));\r\n y.domain([0, d3.max(datagroup, function (s) {\r\n return s.values[0].percent;\r\n })]);\r\n\r\n\r\n var svg = d3.select(element[0].querySelector(\"div\")).selectAll(\"svg\")\r\n .data(datagroup)\r\n .enter()\r\n .append(\"svg\")\r\n //Responsive Attributes Replace Height & Width Style\r\n .attr(\"viewbox\", \"0 0 500 100\")\r\n .attr(\"preserveAspectRatio\", \"xMinYMin meet\")\r\n //add class to make it responsive\r\n .classed(\"svg-content-responsive\", true)\r\n .append(\"g\");\r\n\r\n height = 35;\r\n\r\n svg.append(\"g\")\r\n .attr(\"class\", \"x axis\")\r\n .attr(\"transform\", \"translate(0,\" + height + \")\")\r\n .call(xAxis);\r\n\r\n // Accessing nested data: https://groups.google.com/forum/#!topic/d3-js/kummm9mS4EA\r\n // data(function(d) {return d.values;})\r\n // this will dereference the values for nested data for each group\r\n\r\n svg.selectAll(\".d3bar\")\r\n .data(function (d) {\r\n return d.values;\r\n })\r\n .enter()\r\n .append(\"rect\")\r\n .attr(\"class\", \"d3bar\")\r\n .attr(\"x\", function (d) {\r\n return x(d.year);\r\n })\r\n .attr(\"width\", x.rangeBand())\r\n .attr(\"y\", function (d) {\r\n return height * (1 - d.percent);\r\n })\r\n .attr(\"height\", function (d) {\r\n return height * (d.percent);\r\n })\r\n .attr(\"fill\", function (d) {\r\n return color(d.percent)\r\n })\r\n //.attr(\"fill\", function(d) {return \"rgb(0, \" + (d*10) + \",|0)\"})\r\n .on('mouseover', tip.show)\r\n .on('mouseout', tip.hide);\r\n\r\n svg.call(tip);\r\n\r\n\r\n function formatDate(d){\r\n\r\n return moment(d, \"YYYYMM\").format(\"MMM-YYYY\");\r\n\r\n }\r\n\r\n function mindate(data){\r\n\r\n var arrayLength = data.length;\r\n\r\n for (var i = 0; i < arrayLength; i++) {\r\n if(data[i].percent !== 0){\r\n $log.info(data[i].percent);\r\n return data[i].year;\r\n }\r\n\r\n }\r\n }\r\n\r\n function maxdate(data){\r\n\r\n var arrayLength = data.length-1;\r\n\r\n for (var i = arrayLength; i > 0; i--) {\r\n if (data[i].percent !== 0) {\r\n $log.info(data[i].percent);\r\n return data[i].year;\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n dashboardController.$inject = ['$filter', 'NotificationDismissalService', 'UserPermissionService', 'user', 'widgetDefinitions',\r\n 'databaseStorage', 'WidgetService'];\r\n function dashboardController($filter, NotificationDismissalService, UserPermissionService, user, widgetDefinitions,\r\n databaseStorage, WidgetService) {\r\n var vm = this;\r\n vm.user = user;\r\n vm.loadDashboard = loadDashboard;\r\n vm.resetDashboard = resetDashboard;\r\n\r\n vm.dismissAllNotifications = function() {\r\n NotificationDismissalService.setDismissingFlag();\r\n };\r\n vm.showCreateOrderButton = function() {\r\n return UserPermissionService.hasPermission('Create Order');\r\n };\r\n vm.addWidget = function($event, widget){\r\n $event.preventDefault();\r\n vm.dashboardOptions.addWidget(widget.name);\r\n };\r\n function resetDashboard() {\r\n vm.dashboardOptions.loadWidgets(vm.dashboardOptions.defaultWidgets);\r\n vm.dashboardOptions.saveDashboard(true);\r\n }\r\n function loadDashboard(){\r\n WidgetService.getWidgets().$promise.then(function (results) {\r\n var defaultWidgets = [];\r\n\r\n angular.forEach(results, function (item) {\r\n // this is only needed before we deploy Widget table change\r\n if (item.title == 'TRACK_MY_ORDER')\r\n {\r\n defaultWidgets.push({ name: 'searchByReference', title: 'SEARCH_BY_REFERENCE_HASHSIGN' });\r\n }\r\n else if (widgetDefinitions.some(function (definition) { return definition.title == item.title}))\r\n {\r\n // Only add widgets that are also listed in the widgetDefinitions list\r\n defaultWidgets.push({ name: item.name, title: item.title });\r\n }\r\n }\r\n );\r\n\r\n vm.dashboardOptions = {\r\n widgetButtons: false,\r\n widgetDefinitions: widgetDefinitions,\r\n sortableOptions: { placeholder: 'has-warning' },\r\n defaultWidgets: defaultWidgets,\r\n storage: databaseStorage,\r\n storageId: 'dashBoard',\r\n hideWidgetName: true,\r\n hideToolbar: false\r\n };\r\n });\r\n }\r\n vm.loadDashboard();\r\n }\r\n angular.module('NavisphereOnline').controller('DashboardController', dashboardController);\r\n})();\r\n\n(function() {\r\n angular\r\n .module('NavisphereOnline')\r\n .directive('serviceAnalytics',serviceAnalytics);\r\n\r\n function serviceAnalytics() {\r\n var directive = {\r\n restrict: 'E',\r\n templateUrl: 'app/components/serviceAnalytics/serviceAnalytics.html',\r\n scope: {\r\n onTimePicks: '=',\r\n onTimeDrops: '=',\r\n sbcp: '=',\r\n sbcd: '=',\r\n beginDateDisp: '=',\r\n endDateDisp: '=',\r\n complete: '=',\r\n isEmpty: '=',\r\n freightMvmt: '=',\r\n freightMovementTitle:'=',\r\n dropsTitle:'=',\r\n picksTitle:'=',\r\n historicalPicksTitle:'=',\r\n historicalDropsTitle:'=',\r\n freightMovementCurrentMonthTitle:'=',\r\n onTimeTitle:'=',\r\n toTitle:'='\r\n },\r\n link: ServiceAnalyticsController\r\n };\r\n\r\n return directive;\r\n\r\n function ServiceAnalyticsController($scope, element, attr) {\r\n }\r\n }\r\n\r\n})();\r\n\n/**\r\n * Created by lennjoh on 5/17/2016.\r\n */\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n\r\n angular.module('NavisphereOnline')\r\n .directive('ngJsonExportExcel', function () {\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n data : '=',\r\n filename: '=?',\r\n reportFields: '='\r\n },\r\n link: function (scope, element) {\r\n\r\n scope.filename = !!scope.filename ? scope.filename : 'export-excel';\r\n\r\n scope.fields = [];\r\n scope.header = [];\r\n\r\n angular.forEach(scope.reportFields, function(field, key) {\r\n\r\n if(!field || !key) {\r\n throw new Error('error json report fields');\r\n }\r\n\r\n scope.fields.push(key);\r\n scope.header.push(field);\r\n });\r\n\r\n element.bind('click', function(){\r\n scope.clickExport()\r\n });\r\n\r\n scope.clickExport = function() {\r\n scope.bodyData = scope._bodyData();\r\n scope.strData = scope._convertToExcel(scope.bodyData);\r\n\r\n scope.blob = new Blob([scope.strData], {type: \"text/plain;charset=utf-8\"});\r\n\r\n return saveAs(scope.blob, [scope.filename + '.csv']);\r\n };\r\n\r\n scope._bodyData = function(){\r\n\r\n var data = scope.data;\r\n var body = \"\";\r\n angular.forEach(data, function(dataItem) {\r\n var rowItems = [];\r\n\r\n angular.forEach(scope.fields, function(field) {\r\n if(field.indexOf('.')) {\r\n field = field.split(\".\");\r\n var curItem = dataItem;\r\n\r\n // deep access to obect property\r\n angular.forEach(field, function(prop){\r\n if (curItem !== null && curItem !== angular.isUndefined) {\r\n curItem = curItem[prop];\r\n }\r\n });\r\n\r\n data = curItem;\r\n }\r\n else {\r\n data = dataItem[field];\r\n }\r\n\r\n var fieldValue = data !== null ? data : ' ';\r\n\r\n if (fieldValue !== angular.isUndefined && angular.isObject(fieldValue)) {\r\n fieldValue = scope._objectToString(fieldValue);\r\n }\r\n\r\n rowItems.push(fieldValue);\r\n });\r\n\r\n body += rowItems.toString() + '\\n';\r\n });\r\n\r\n return body;\r\n };\r\n\r\n scope._convertToExcel = function(body) {\r\n return scope.header + '\\n' + body;\r\n };\r\n\r\n scope._objectToString = function(object) {\r\n scope.output = '';\r\n angular.forEach(object, function(value, key) {\r\n scope.output += key + ':' + value + ' ';\r\n });\r\n\r\n return '\"' + scope.output + '\"';\r\n }\r\n }\r\n };\r\n });\r\n})();\r\n\n/**\r\n * Created by lennjoh on 5/25/2016.\r\n */\r\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .factory('grabInTransitData', grabInTransitData);\r\n\r\n /** @ngInject */\r\n function grabInTransitData($resource) {\r\n\r\n //return {InTransit: $resource(\r\n // 'http://devspcl4/EDW/EDW.OrderIndex.API/v1//InTransitOrders'\r\n // ,{ inTransit:'@_inTransitSearch' }\r\n //)};\r\n\r\n return $resource('http://devspcl4/EDW/EDW.OrderIndex.API/v1', null, {\r\n 'InTransit': {method: 'POST', url: 'http://devspcl4/EDW/EDW.OrderIndex.API/v1//InTransitOrders'}\r\n });\r\n }\r\n})();\r\n\r\n\r\n\n/*\r\n * Created by lennjoh on 5/5/2016.\r\n */\r\n(function() {\r\n 'use strict';\r\n angular\r\n .module('NavisphereOnline')\r\n .filter('timeconversion', function() {\r\n // Create the return function\r\n // set the required parameter name to **number**\r\n return function(time) {\r\n // Ensure that the passed in data is a number\r\n if(isNaN(time)) {\r\n // If the data is not a number or is less than one (thus not having a cardinal value) return it unmodified.\r\n return time;\r\n } else {\r\n // If the time less than 24 hours return it with hours. If it is 24 hours or more convert it to days and return it with days.\r\n if(time < 24 && time >= 0 && time !== '') {\r\n return time.toFixed(2) + ' hrs';\r\n } else if (time >= 24) {\r\n return (time / 24).toFixed(2) + ' days';\r\n }\r\n else {\r\n return '0.00 hrs';\r\n }\r\n }\r\n };\r\n });\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .directive('freightMovement', freightMovement);\r\n\r\n\r\n /** @ngInject */\r\n function freightMovement() {\r\n var directive = {\r\n restrict: 'E',\r\n templateUrl: 'app/components/freightMovement/freightMovement.tpl.html',\r\n scope: {\r\n freightData: '='\r\n },\r\n controller: FreightMovementController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n return directive;\r\n\r\n /** @ngInject */\r\n function FreightMovementController() {\r\n\r\n }\r\n }\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .factory('dataGrabber', dataGrabber);\r\n\r\n /** @ngInject */\r\n function dataGrabber($resource) {\r\n\r\n return $resource('http://devspcl4/edw/EDW.OrderMetrics.API/v1/', null, {\r\n 'onTime': {method: 'POST', url: 'http://devspcl4/edw/EDW.OrderMetrics.API/v2/OnTime/Search/:onTimeSearch'},\r\n 'freight': {method: 'POST', url: 'http://devspcl4/edw/EDW.OrderMetrics.API/v2/Freight/Search:freightSearch'},\r\n 'onTimePeriod': {method: 'POST', url: 'http://devspcl4/edw/EDW.OrderMetrics.API/v2/OnTime/SearchByPeriod:onTimeSearch'},\r\n 'historicOrders': {method: 'POST', url: 'http://devspcl4/edw/EDW.OrderMetrics.API/v2/HistoricOrders/Search:historicOrdersSearch'},\r\n 'historicOrdersModes': {method: 'POST', url: 'http://devspcl4/edw/EDW.OrderMetrics.API/v2/HistoricOrdersModes/Search:historicOrdersModesSearch'}\r\n });\r\n }\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .factory('d3Service', d3Service);\r\n\r\n d3Service.$inject = ['$window']\r\n\r\n /** @ngInject */\r\n function d3Service($window) {\r\n var _d3 = $window.d3;\r\n\r\n return _d3;\r\n }\r\n})();\r\n\n(function() {\r\n angular\r\n .module('NavisphereOnline')\r\n .directive('percentGauge',percentGauge);\r\n\r\n percentGauge.$inject = ['d3Service'];\r\n\r\n function percentGauge(d3Service) {\r\n var directive = {\r\n restrict: 'E',\r\n template: ' ',\r\n scope: {\r\n gaugeValue: '=',\r\n isEmpty: '='\r\n },\r\n link: percentGaugeLink\r\n };\r\n\r\n return directive;\r\n\r\n function percentGaugeLink(scope, element) {\r\n\r\n scope.otpValue = scope.gaugeValue;\r\n\r\n var d3 = d3Service;\r\n scope.moveit = '';\r\n scope.needle;\r\n\r\n var barWidth, chart, chartInset, repaintGauge,\r\n height, margin, padRad, percent, radius, svg, totalPercent, width;\r\n\r\n percent = .50;\r\n padRad = 0.025;\r\n chartInset = 0;\r\n\r\n // Orientation of gauge:\r\n totalPercent = .75;\r\n\r\n var el = d3.select(element[0])\r\n .append(\"div\")\r\n .classed(\"svg-container\", true);\r\n\r\n margin = {\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0\r\n };\r\n\r\n width = 600;\r\n height = width;\r\n radius = Math.min(width, height) / 2;\r\n barWidth = width / 8;\r\n\r\n /*\r\n Utility methods\r\n */\r\n scope.percToDeg = function (perc) {\r\n return perc * 360;\r\n };\r\n\r\n scope.percToRad = function (perc) {\r\n return scope.degToRad(scope.percToDeg(perc));\r\n };\r\n\r\n scope.degToRad = function (deg) {\r\n return deg * Math.PI / 180;\r\n };\r\n\r\n\r\n svg = el.append('svg')\r\n .attr(\"preserveAspectRatio\", \"xMinYMin meet\")\r\n .attr(\"viewBox\", \"0 0 600 300\")\r\n .classed(\"svg-content-responsive\", true);\r\n\r\n // Add layer for the panel\r\n chart = svg.append('g')\r\n .attr('transform', \"translate(\" + ((width + margin.left) / 2) + \", \" + ((height + margin.top) / 2) + \")\");\r\n\r\n chart.append('path').attr('class', \"arc chart-filled\");\r\n chart.append('path').attr('class', \"arc chart-empty\");\r\n\r\n var arc2 = d3.svg.arc().outerRadius(radius - chartInset).innerRadius(radius - chartInset - barWidth);\r\n var arc1 = d3.svg.arc().outerRadius(radius - chartInset).innerRadius(radius - chartInset - barWidth);\r\n\r\n repaintGauge = function (perc) {\r\n\r\n var arcStartRad, arcEndRad;\r\n var next_start = totalPercent;\r\n arcStartRad = scope.percToRad(next_start);\r\n arcEndRad = arcStartRad + scope.percToRad(perc / 2);\r\n next_start += perc / 2;\r\n\r\n arc1.startAngle(arcStartRad).endAngle(arcEndRad);\r\n\r\n arcStartRad = scope.percToRad(next_start);\r\n arcEndRad = arcStartRad + scope.percToRad((1 - perc) / 2);\r\n var color = d3.scale.linear().domain([0.0, 0.70, 1.00]).range([\"#59A5CD\", \"#004F75\", \"#002b40\"]);\r\n\r\n arc2.startAngle(arcStartRad + padRad).endAngle(arcEndRad);\r\n\r\n chart.select(\".chart-filled\").attr('d', arc1);\r\n chart.select(\".chart-empty\").attr('d', arc2);\r\n\r\n //dynamic coloring based on the value\r\n chart.path = svg.selectAll('path.chart-filled').style('fill',color(perc));\r\n };\r\n\r\n var Needle = (function () {\r\n\r\n function Needle(el) {\r\n this.el = el;\r\n this.len = width / 3;\r\n this.radius = this.len / 6;\r\n }\r\n\r\n Needle.prototype.render = function () {\r\n return this.el.append('path').attr('class', 'needle');\r\n };\r\n\r\n Needle.prototype.moveTo = function (perc) {\r\n var oldValue = this.perc || 0;\r\n this.perc = perc;\r\n // Reset pointer position\r\n this.el.transition().delay(100).ease('quad').duration(200).select('.needle').tween('reset-progress', function () {\r\n return function (percentOfPercent) {\r\n var progress = (1 - percentOfPercent) * oldValue;\r\n\r\n repaintGauge(progress);\r\n };\r\n });\r\n\r\n this.el.transition().delay(300).ease('bounce').duration(1500).select('.needle').tween('progress', function () {\r\n return function (percentOfPercent) {\r\n var progress = percentOfPercent * perc;\r\n\r\n repaintGauge(progress);\r\n };\r\n });\r\n };\r\n return Needle;\r\n })();\r\n\r\n scope.needle = new Needle(chart);\r\n scope.needle.render();\r\n scope.needle.moveTo(percent);\r\n\r\n loadLiquidFillGauge(svg, scope.gaugeValue, scope.isEmpty);\r\n scope.moveit = scope.gaugeValue;\r\n\r\n //needle\r\n if (scope.moveit > 1) {\r\n scope.needlemoveit = scope.moveit / 100;\r\n scope.needle.moveTo(scope.needlemoveit);\r\n }\r\n else {\r\n scope.needle.moveTo(scope.moveit);\r\n }\r\n\r\n function liquidFillGaugeDefaultSettings() {\r\n\r\n return {\r\n minValue: 0,\r\n maxValue: 100,\r\n circleThickness: 0.05,\r\n circleFillGap: 0.05,\r\n circleColor: \"#178BCA\",\r\n textRiseTime: 1000,\r\n textVertPosition: 0,\r\n textSize:1,\r\n valueCountUp: true,\r\n displayPercent: true,\r\n textColor: \"#000000\"\r\n };\r\n }\r\n\r\n function loadLiquidFillGauge(elementId, value, isEmpty, config) {\r\n\r\n config = liquidFillGaugeDefaultSettings();\r\n\r\n var gauge = elementId;\r\n var radius = Math.min(parseInt(gauge.style(\"width\")), parseInt(gauge.style(\"height\"))) / 2;\r\n var locationX = width / 2 - radius;\r\n var locationY = parseInt(gauge.style(\"height\")) / 2 - radius;\r\n\r\n var textPixels = (config.textSize * radius / 2);\r\n var textFinalValue = parseFloat(value).toFixed(2);\r\n var textStartValue = config.minValue;\r\n var percentText = \"%\";\r\n var circleThickness = config.circleThickness * radius;\r\n var circleFillGap = config.circleFillGap * radius;\r\n var fillCircleMargin = circleThickness + circleFillGap;\r\n var fillCircleRadius = radius - fillCircleMargin;\r\n\r\n // Rounding functions so that the correct number of decimal places is always displayed as the value counts up.\r\n scope.textRounder = function (value) {\r\n return Math.round(value);\r\n };\r\n if (parseFloat(textFinalValue) !== parseFloat(scope.textRounder(textFinalValue))) {\r\n scope.textRounder = function (value) {\r\n return parseFloat(value).toFixed(1);\r\n };\r\n }\r\n if (parseFloat(textFinalValue) !== parseFloat(scope.textRounder(textFinalValue))) {\r\n scope.textRounder = function (value) {\r\n return parseFloat(value).toFixed(2);\r\n };\r\n }\r\n\r\n // Scale for controlling the position of the text within the gauge.\r\n var textRiseScaleY = d3.scale.linear()\r\n .range([fillCircleMargin + fillCircleRadius * 2, (fillCircleMargin + textPixels * 0.7)])\r\n .domain([0, 1]);\r\n\r\n // Center the gauge within the parent SVG.\r\n var gaugeGroup = gauge.append(\"g\")\r\n .attr('transform', 'translate(' + locationX + ',' + locationY + ')');\r\n\r\n scope.dispText = scope.textRounder(textStartValue) + percentText;\r\n\r\n // Text where the wave does not overlap.\r\n var text1 = gaugeGroup.append(\"text\")\r\n .text(scope.dispText)\r\n .attr(\"class\", \"liquidFillGaugeText\")\r\n .attr(\"text-anchor\", \"middle\")\r\n .attr(\"font-size\", textPixels + \"px\")\r\n .style(\"fill\", config.textColor)\r\n .attr('transform', 'translate(' + radius + ',' + textRiseScaleY(config.textVertPosition) + ')');\r\n\r\n\r\n // Make the value count up.\r\n var textTween = function () {\r\n var i = d3.interpolate(this.textContent, textFinalValue);\r\n return function (t) {\r\n this.textContent = scope.textRounder(i(t)) + percentText;\r\n };\r\n };\r\n text1.transition()\r\n .duration(config.textRiseTime)\r\n .tween(\"text\", textTween);\r\n\r\n scope.GaugeTextUpdater = function(){\r\n\r\n scope.value = value;\r\n\r\n scope.update = function () {\r\n scope.value = value;\r\n\r\n scope.newFinalValue = parseFloat(scope.value).toFixed(2);\r\n\r\n scope.textRounderUpdater = function () {\r\n return Math.round(scope.value);\r\n };\r\n\r\n scope.textRounderUpdater = function () {\r\n return parseFloat(scope.value).toFixed(2);\r\n };\r\n\r\n scope.textTween = function () {\r\n if(isEmpty) {\r\n var i = d3.interpolate(this.textContent, 'N/A');\r\n return function () {\r\n this.textContent = 'N/A';\r\n };\r\n } else {\r\n i = d3.interpolate(this.textContent, parseFloat(scope.value).toFixed(2));\r\n return function (t) {\r\n this.textContent = scope.textRounderUpdater(i(t)) + percentText;\r\n };\r\n }\r\n\r\n };\r\n\r\n text1.transition()\r\n .duration(config.textRiseTime)\r\n .tween(\"text\", scope.textTween);\r\n };\r\n };\r\n return new scope.GaugeTextUpdater();\r\n }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function windowLocationHref($window) {\r\n var setWindowLocationHref = function (href) {\r\n $window.location.href = href;\r\n };\r\n var getIndexOfHref = function (href) {\r\n return $window.location.href.indexOf(href);\r\n };\r\n var redirectToProductsPageNotFound = function () {\r\n $window.location.assign(appConfig.productsUIUrl + '/#/pageNotFound');\r\n }\r\n return {\r\n setWindowLocationHref: setWindowLocationHref,\r\n getIndexOfHref: getIndexOfHref,\r\n redirectToProductsPageNotFound: redirectToProductsPageNotFound\r\n };\r\n }\r\n\r\n windowLocationHref.$inject = ['$window'];\r\n app.factory('WindowLocationHref', windowLocationHref);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n function userPermissionService(localStorageService, DEV_FEATURES) {\r\n var profilePermissions = [];\r\n\r\n var loadPermissions = function () {\r\n var permissions = localStorageService.get('permissions');\r\n profilePermissions = permissions ? permissions : [];\r\n };\r\n\r\n var hasPermission = function (permissionName) {\r\n loadPermissions();\r\n for (var i = 0; i < profilePermissions.length; i++) {\r\n for (var j = 0; j < profilePermissions[i].permissions.length; j++) {\r\n if (profilePermissions[i].permissions[j].name.toUpperCase().trim() === permissionName.toUpperCase().trim()) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n var isSupplier = function() {\r\n var user = localStorageService.get('User');\r\n return user.isSupplier;\r\n };\r\n\r\n var inPermissionSet = function(permissionSet){\r\n loadPermissions();\r\n for (var i = 0; i < profilePermissions.length; i++){\r\n for (var j = 0; j < profilePermissions[i].permissions.length; j++) {\r\n if(_.includes(permissionSet, profilePermissions[i].permissions[j].name)){\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n var hasCustomerRole = function (customerCode, roleName) {\r\n loadPermissions();\r\n for (var i = 0; i < profilePermissions.length; i++) {\r\n if (profilePermissions[i].customerProfile.customer.partyCode.replace(/^\\s+|\\s+$/gm, '') === customerCode.replace(/^\\s+|\\s+$/gm, '')) {\r\n for (var j = 0; j < profilePermissions[i].permissions.length; j++) {\r\n if (profilePermissions[i].permissions[j].name === roleName) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n var getCustomersForRole = function(roleName) {\r\n var customersWithRole = [];\r\n loadPermissions();\r\n for (var i = 0; i < profilePermissions.length; i++) {\r\n for (var j = 0; j < profilePermissions[i].permissions.length; j++) {\r\n if (profilePermissions[i].permissions[j].name === roleName) {\r\n customersWithRole.push(profilePermissions[i].customerProfile.customer);\r\n }\r\n }\r\n }\r\n return customersWithRole;\r\n };\r\n\r\n //========== REGION: In Dev Feature Toggle ==============\r\n\r\n var devFeatureToggles = {};\r\n var localStorageKey_DevelopmentFeatureToggles = 'devFeatureToggles';\r\n\r\n var hasDevelopmentFeatureAccess = function(featureName) {\r\n\r\n //require feature to exist\r\n if(angular.isUndefined(DEV_FEATURES[featureName])) {\r\n return false;\r\n }\r\n\r\n var hasDevPermission = hasPermission(\"[Warning] Features In Development\");\r\n if (!hasDevPermission) {\r\n return false;\r\n }\r\n\r\n loadDevelopmentFeatureToggles();\r\n return devFeatureToggles[featureName];\r\n }\r\n\r\n var saveDevelopmentFeatureToggle = function(featureName, isActive) {\r\n //require feature to exist\r\n if(angular.isUndefined(DEV_FEATURES[featureName])) {\r\n throw new Error(featureName + ' does not exist.');\r\n }\r\n\r\n loadDevelopmentFeatureToggles();\r\n\r\n devFeatureToggles[featureName] = isActive;\r\n localStorageService.set(localStorageKey_DevelopmentFeatureToggles, devFeatureToggles);\r\n }\r\n\r\n var getDevelopmentFeatureToggles = function() {\r\n loadDevelopmentFeatureToggles();\r\n return devFeatureToggles;\r\n }\r\n\r\n\r\n function loadDevelopmentFeatureToggles() {\r\n var toggles = localStorageService.get(localStorageKey_DevelopmentFeatureToggles);\r\n\r\n if (!toggles) {\r\n toggles = angular.copy(DEV_FEATURES);\r\n localStorageService.set(localStorageKey_DevelopmentFeatureToggles, toggles);\r\n }\r\n\r\n devFeatureToggles = toggles;\r\n }\r\n\r\n //========== END REGION: In Dev Feature Toggle ==============\r\n\r\n\r\n return {\r\n isSupplier: isSupplier,\r\n hasPermission: hasPermission,\r\n inPermissionSet : inPermissionSet,\r\n hasCustomerRole: hasCustomerRole,\r\n getCustomersForRole: getCustomersForRole,\r\n hasDevelopmentFeatureAccess: hasDevelopmentFeatureAccess,\r\n getDevelopmentFeatureToggles: getDevelopmentFeatureToggles,\r\n saveDevelopmentFeatureToggle: saveDevelopmentFeatureToggle\r\n };\r\n }\r\n userPermissionService.$inject = ['localStorageService', 'DEV_FEATURES'];\r\n app.factory('UserPermissionService', userPermissionService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n /* @ngInject */\r\n function tokenService($timeout, $rootScope, $state, localStorageService, User,\r\n $translate, $q, WalkthroughService, WindowLocationHref, authClient, UserApplicationService, jwtHelper, LaunchDarklyService) {\r\n\r\n var logoutFunctions = [];\r\n const accessTokenKey = \"accessToken\";\r\n const idTokenKey = \"idToken\";\r\n\r\n function addTokensToManager(oktaAuth, accessToken, idToken){\r\n oktaAuth.tokenManager.add(accessTokenKey, accessToken);\r\n oktaAuth.tokenManager.add(idTokenKey, idToken);\r\n }\r\n\r\n function decodeToken(oktaAuth){\r\n var authData = localStorageService.get('auth.data');\r\n var decodedAccessToken = oktaAuth.token.decode(authData.accessToken);\r\n var decodedIdToken = oktaAuth.token.decode(authData.identityToken);\r\n return {\r\n accessToken: authData.accessToken,\r\n accessTokenExpirationDate: decodedAccessToken.payload.exp,\r\n identityToken: authData.identityToken,\r\n idTokenExpirationDate: decodedIdToken.payload.exp\r\n };\r\n }\r\n\r\n return {\r\n addTokensToManager: addTokensToManager,\r\n decodeToken: decodeToken\r\n };\r\n }\r\n tokenService.$inject = ['$timeout', '$rootScope', '$state', 'localStorageService', 'User',\r\n '$translate', '$q', 'WalkthroughService', 'WindowLocationHref', 'authClient', 'UserApplicationService', 'jwtHelper', 'LaunchDarklyService'];\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .service('tokenService', tokenService);\r\n})();\r\n\n//angular module based on https://github.com/cowboy/jquery-throttle-debounce/blob/master/jquery.ba-throttle-debounce.js\r\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.factory('ThrottleDebounce', ['$timeout', function ($timeout) {\r\n\r\n var throttle = function (delay, no_trailing, callback, debounce_mode) {\r\n var timeout_id,\r\n last_exec = 0;\r\n\r\n if (typeof no_trailing !== 'boolean') {\r\n debounce_mode = callback;\r\n callback = no_trailing;\r\n no_trailing = undefined;\r\n }\r\n\r\n var wrapper = function () {\r\n var that = this,\r\n elapsed = +new Date() - last_exec,\r\n args = arguments,\r\n exec = function () {\r\n last_exec = +new Date();\r\n callback.apply(that, args);\r\n },\r\n\r\n clear = function () {\r\n timeout_id = undefined;\r\n };\r\n\r\n if (debounce_mode && !timeout_id) {\r\n exec();\r\n }\r\n\r\n if (timeout_id) {\r\n $timeout.cancel(timeout_id);\r\n }\r\n\r\n if (angular.isUndefined(debounce_mode) && elapsed > delay) {\r\n exec();\r\n }\r\n else if (no_trailing !== true) {\r\n timeout_id = $timeout(debounce_mode ? clear : exec, angular.isUndefined(debounce_mode) ? delay - elapsed : delay);\r\n }\r\n };\r\n return wrapper;\r\n };\r\n\r\n var debounce = function (delay, at_begin, callback) {\r\n return angular.isUndefined(callback)? throttle(delay, at_begin, false) : throttle(delay, callback, at_begin !== false);\r\n };\r\n\r\n return {\r\n throttle: throttle,\r\n debounce: debounce\r\n }\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n function statusMappingService() {\r\n\r\n this.serviceStatus = {\r\n incomplete : 371,\r\n readyToPlan: 372,\r\n partiallyPlanned: 373,\r\n planned: 374,\r\n partiallyBooked: 375,\r\n booked: 376,\r\n intransit: 377,\r\n delivered: 378\r\n };\r\n\r\n this.getStatusResourceKey = function (serviceStatusRDN) {\r\n var resourceKey = '';\r\n switch (serviceStatusRDN) {\r\n case this.serviceStatus.incomplete:\r\n resourceKey = 'INCOMPLETE';\r\n break;\r\n case this.serviceStatus.readyToPlan:\r\n case this.serviceStatus.partiallyPlanned:\r\n case this.serviceStatus.planned:\r\n resourceKey = 'ORDERED';\r\n break;\r\n case this.serviceStatus.booked:\r\n case this.serviceStatus.partiallyBooked:\r\n resourceKey = 'BOOKED';\r\n break;\r\n case this.serviceStatus.intransit:\r\n resourceKey = 'INTRANSIT';\r\n break;\r\n case this.serviceStatus.delivered:\r\n resourceKey = 'DELIVERED';\r\n break;\r\n default:\r\n resourceKey = 'ORDERED';\r\n break;\r\n }\r\n return resourceKey;\r\n };\r\n }\r\n app.service('StatusMappingService', statusMappingService);\r\n})();\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function ServiceOfferingMapping() {\r\n\r\n var servOffMap = {\r\n\r\n //service offerings\r\n FLATBED_SERVICE_OFFERING: 1482,\r\n LTL_SERVICE_OFFERING: 1484,\r\n TL_SERVICE_OFFERING: 1481,\r\n LTL_TRANSPORTATION: 1,\r\n LTL_FLATBED_TRANSPORTATION: 2,\r\n LTL_TEMP_CONTROLLED_TRANSPORTATION: 3,\r\n TRUCKLOAD_TRANSPORTATION: 5,\r\n TRUCKLOAD_TEMP_CONTROLLED_TRANSPORTATION: 6,\r\n TRUCKLOAD_FLATBED_TRANSPORTATION: 7,\r\n RAIL_INTERMODAL_TRANSPORTATION: 11,\r\n DOMESTIC_AIR_TRANSPORTATION: 13,\r\n LTL_EXPEDITED_TRANSPORTATION: 23,\r\n LTL_TEMP_CONTROLLED_EXPEDITED_TRANSPORTATION: 25,\r\n TRUCKLOAD_EXPEDITED_TRANSPORTATION: 27,\r\n TRUCKLOAD_TEMP_CONTROLLED_EXPEDITED_TRANSPORTATION: 28,\r\n INTERNATIONAL_AIR_HOUSE: 1084,\r\n INTERNATIONAL_AIR_DIRECT: 1085,\r\n INTERNATIONAL_OCEAN_NVOCC: 1086,\r\n DOMESTIC_AIR_SERVICE_OFFERING: 1293,\r\n INTERMODAL_FULL_CONTAINER_TRANSPORTATION: 1336,\r\n INTERMODAL_FULL_TEMP_CONTROLLED_TRANSPORTATION: 1338,\r\n PRODUCE_TRUCKLOAD_TEMP_CONTROLLED_TRANSPORTATION: 1386,\r\n PRODUCE_LTL_TEMP_CONTROLLED_TRANSPORTATION: 1389,\r\n BROKER_SOURCING_DIRECT_SHIP_OTHER: 1475,\r\n CONSOLIDATED_TRANSPORTATION: 1477,\r\n CONSOLIDATED_TEMP_CONTROLLED_TRANSPORTATION: 1479,\r\n BULK_TRANSPORTATION: 1480,\r\n TRUCKLOAD_TEMP_CONTROLLED_SERVICE_OFFERING: 1483,\r\n LTL_FLATBED_SERVICE_OFFERING: 1485,\r\n LTL_TEMP_CONTROLLED_SERVICE_OFFERING: 1486,\r\n SMALL_PARCEL: 1709,\r\n INTERMODAL_FULL_TEMP_CONTROLLED_SERVICE_OFFERING: 1764,\r\n BULK_SERVICE_OFFERING: 1765,\r\n CONSOLIDATED_SERVICE_OFFERING: 1766,\r\n CONSOLIDATED_TEMP_CONTROLLED_SERVICE_OFFERING: 1767,\r\n SMALL_PARCEL_TRANSPORTATION: 1815,\r\n OCEAN: 1840,\r\n TRUCKLOAD_TAUTLINER: 1841,\r\n TRUCKLOAD_TAUTLINER_EUROPE: 1846,\r\n };\r\n\r\n this.getServiceOfferingId = function (itemName) {\r\n return servOffMap[itemName];\r\n };\r\n }\r\n app.service('ServiceOfferingMapping', ServiceOfferingMapping);\r\n})();\r\n\n(function () {\r\n\r\n 'use strict';\r\n\r\n var app = angular.module('NavisphereOnline');\r\n serviceOffering.$inject = ['ServiceOfferingMapping', '$filter'];\r\n\r\n function serviceOffering(ServiceOfferingMapping, $filter) {\r\n function get(serviceOfferingNumber) {\r\n var offering = {};\r\n switch (serviceOfferingNumber) {\r\n case ServiceOfferingMapping.getServiceOfferingId('TL_SERVICE_OFFERING'):\r\n case ServiceOfferingMapping.getServiceOfferingId('TRUCKLOAD'):\r\n case ServiceOfferingMapping.getServiceOfferingId('TRUCKLOAD_EXPEDITED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('TRUCKLOAD_TAUTLINER'):\r\n case ServiceOfferingMapping.getServiceOfferingId('TRUCKLOAD_TAUTLINER_EUROPE'):\r\n //TL-dry\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('TRUCKLOAD');\r\n offering.serviceOfferingIconUrl = 'truckload';\r\n offering.genericType = 'TL';\r\n break;\r\n case 'TL':\r\n case 'Truck':\r\n case ServiceOfferingMapping.getServiceOfferingId('TL'):\r\n case ServiceOfferingMapping.getServiceOfferingId('TRUCKLOAD_TEMP_CONTROLLED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('TRUCKLOAD_TEMP_CONTROLLED_EXPEDITED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('PRODUCE_TRUCKLOAD_TEMP_CONTROLLED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('TRUCKLOAD_TEMP_CONTROLLED_SERVICE_OFFERING'):\r\n //TL-temp\r\n offering.displayDryHours = false;\r\n offering.serviceOfferingName = $filter('translate')('TRUCKLOAD');\r\n offering.serviceOfferingIconUrl = 'truckload';\r\n offering.genericType = 'TL';\r\n break;\r\n case 'LTL':\r\n case ServiceOfferingMapping.getServiceOfferingId('LTL_SERVICE_OFFERING'):\r\n case ServiceOfferingMapping.getServiceOfferingId('LTL_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('LTL_EXPEDITED_TRANSPORTATION'):\r\n //LTL-dry\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('LTL');\r\n offering.serviceOfferingIconUrl = 'ltl';\r\n offering.genericType = 'LTL';\r\n break;\r\n case ServiceOfferingMapping.getServiceOfferingId('LTL_TEMP_CONTROLLED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('LTL_TEMP_CONTROLLED_EXPEDITED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('PRODUCE_LTL_TEMP_CONTROLLED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('LTL_TEMP_CONTROLLED_SERVICE_OFFERING'):\r\n //LTL-temp\r\n offering.displayDryHours = false;\r\n offering.serviceOfferingName = $filter('translate')('LTL');\r\n offering.serviceOfferingIconUrl = 'ltl';\r\n offering.genericType = 'LTL';\r\n break;\r\n case 'Flatbed':\r\n case ServiceOfferingMapping.getServiceOfferingId('FLATBED_SERVICE_OFFERING'):\r\n case ServiceOfferingMapping.getServiceOfferingId('LTL_FLATBED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('TRUCKLOAD_FLATBED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('LTL_FLATBED_SERVICE_OFFERING'):\r\n //flatbed\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('FLATBED');\r\n offering.serviceOfferingIconUrl = 'flatbed';\r\n offering.genericType = 'FLATBED';\r\n break;\r\n case 'AIR':\r\n case 'DAIR':\r\n case ServiceOfferingMapping.getServiceOfferingId('DOMESTIC_AIR_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('DOMESTIC_AIR_SERVICE_OFFERING'):\r\n //domestic-air\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('AIR');\r\n offering.serviceOfferingIconUrl = 'airplane';\r\n offering.genericType = 'AIR';\r\n break;\r\n case 'IAIR':\r\n case ServiceOfferingMapping.getServiceOfferingId('INTERNATIONAL_AIR_HOUSE'):\r\n case ServiceOfferingMapping.getServiceOfferingId('INTERNATIONAL_AIR_DIRECT'):\r\n //international-air\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('AIR');\r\n offering.serviceOfferingIconUrl = 'airplane';\r\n offering.genericType = 'AIR';\r\n break;\r\n case 'Consol':\r\n case ServiceOfferingMapping.getServiceOfferingId('CONSOLIDATED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('CONSOLIDATED_SERVICE_OFFERING'):\r\n //consol-dry\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('CONSOLIDATED');\r\n offering.serviceOfferingIconUrl = 'consolidated';\r\n offering.genericType = 'CONSOLIDATED';\r\n break;\r\n case ServiceOfferingMapping.getServiceOfferingId('CONSOLIDATED_TEMP_CONTROLLED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('CONSOLIDATED_TEMP_CONTROLLED_SERVICE_OFFERING'):\r\n //consol-temp\r\n offering.displayDryHours = false;\r\n offering.serviceOfferingName = $filter('translate')('CONSOLIDATED');\r\n offering.serviceOfferingIconUrl = 'consolidated';\r\n offering.genericType = 'CONSOLIDATED';\r\n break;\r\n case ServiceOfferingMapping.getServiceOfferingId('SMALL_PARCEL'):\r\n case ServiceOfferingMapping.getServiceOfferingId('SMALL_PARCEL_TRANSPORTATION'):\r\n //smallparcel\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('SMALL_PARCEL');\r\n offering.serviceOfferingIconUrl = 'parcel';\r\n offering.genericType = 'PARCEL';\r\n break;\r\n case 'IMDL':\r\n case ServiceOfferingMapping.getServiceOfferingId('INTERMODAL_FULL_CONTAINER_TRANSPORTATION'):\r\n //intermodal-dry\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('INTERMODAL');\r\n offering.serviceOfferingIconUrl = 'intermodal';\r\n offering.genericType = 'INTERMODAL';\r\n break;\r\n case ServiceOfferingMapping.getServiceOfferingId('INTERMODAL_FULL_TEMP_CONTROLLED_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('INTERMODAL_FULL_TEMP_CONTROLLED_SERVICE_OFFERING'):\r\n //intermodal-temp\r\n offering.displayDryHours = false;\r\n offering.serviceOfferingName = $filter('translate')('INTERMODAL');\r\n offering.serviceOfferingIconUrl = 'intermodal';\r\n offering.genericType = 'INTERMODAL';\r\n break;\r\n case 'Bulk':\r\n case ServiceOfferingMapping.getServiceOfferingId('BULK_TRANSPORTATION'):\r\n case ServiceOfferingMapping.getServiceOfferingId('BULK_SERVICE_OFFERING'):\r\n //bulk\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('BULK');\r\n offering.serviceOfferingIconUrl = 'bulk';\r\n offering.genericType = 'BULK';\r\n break;\r\n case 'Ocean':\r\n case ServiceOfferingMapping.getServiceOfferingId('INTERNATIONAL_OCEAN_NVOCC'):\r\n case ServiceOfferingMapping.getServiceOfferingId('OCEAN'):\r\n //ocean\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('OCEAN');\r\n offering.serviceOfferingIconUrl = 'cargo-ship';\r\n offering.genericType = 'OCEAN';\r\n break;\r\n case 'Rail':\r\n case ServiceOfferingMapping.getServiceOfferingId('RAIL_INTERMODAL_TRANSPORTATION'):\r\n //rail\r\n offering.displayDryHours = true;\r\n offering.serviceOfferingName = $filter('translate')('RAIL');\r\n offering.serviceOfferingIconUrl = 'train';\r\n offering.genericType = 'RAIL';\r\n break;\r\n default:\r\n offering.serviceOfferingIconUrl = 'alert';\r\n break;\r\n }\r\n return offering;\r\n }\r\n\r\n return {\r\n get: get\r\n };\r\n }\r\n\r\n app.factory('ServiceOffering', serviceOffering);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n refDataMappingService.$inject = ['$filter', '$q', 'ReferenceData'];\r\n function refDataMappingService($filter, $q, ReferenceData) {\r\n\r\n var cacheItems = {};\r\n\r\n //refnumcategories by RefDataCategoryNumber\r\n var categoryMap = {};\r\n categoryMap.PACKAGING = 43;\r\n categoryMap.FREIGHT_CLASS = 44;\r\n categoryMap.TARP_TYPE = 219;\r\n categoryMap.LOADING_TYPE = 220;\r\n categoryMap.EQUIPMENT_TYPE = 98;\r\n categoryMap.TEMP_CATEGORY = 45;\r\n categoryMap.TEMP_UNIT_CATEGORY = 86;\r\n categoryMap.SHIPWITH_NUMBER = 3958;\r\n categoryMap.PICKUP_NUMBER = 356;\r\n categoryMap.DELIVERY_NUMBER = 351;\r\n categoryMap.BOL_NUMBER = 347;\r\n categoryMap.ORION_STATUS = 41;\r\n categoryMap.CARRIER_PRO_NUMBER = 2113;\r\n categoryMap.TRACKING_NUMBER = 5167;\r\n categoryMap.CUSTOMER_PO_NUMBER = 350;\r\n categoryMap.FREIGHT_TERM_COLLECT = 2505;\r\n categoryMap.QUOTE_ID = 5204;\r\n\r\n\r\n var itemMap = {};\r\n //refnums by RefDataNumber\r\n itemMap.DRY_TEMP_CATEGORY = 425;\r\n itemMap.CUSTOM_TEMP_CATEGORY = 432;\r\n itemMap.CONFIRMATION_NUMBER = 348;\r\n itemMap.PURCHASE_ORDER_NUMBER = 183;\r\n itemMap.CANCELED_CONDITION = 384;\r\n itemMap.FREIGHT_CHARGES = 486;\r\n itemMap.CUSTOMER_CHARGES = 488;\r\n itemMap.BASELINE_CHARGES = 489;\r\n itemMap.LINE_HAUL = 514;\r\n itemMap.USD = 83;\r\n itemMap.CAD = 84;\r\n itemMap.MXN = 143;\r\n itemMap.VENDOR_PO_LINE_NUMBER = 4793;\r\n itemMap.FULFILMENT_ORDER_ITEM_IDENTIFIER = 4833;\r\n itemMap.PO_DRAW_SOURCE = 4791;\r\n //UOM\r\n itemMap.INCHES_UOM = 1278;\r\n itemMap.CENTIMETERS_UOM = 1280;\r\n itemMap.FEET_UOM = 1279;\r\n itemMap.METERS_UOM = 1281;\r\n itemMap.LB_UOM = 1283;\r\n itemMap.KG_UOM = 1284;\r\n itemMap.FAHRENHEIT_UOM = 1286;\r\n itemMap.CELSIUS_UOM = 1287;\r\n itemMap.CUBICFEET_UOM = 1289;\r\n itemMap.CUBICMETERS_UOM = 1290;\r\n\r\n this.getCategoryId = getCategoryId;\r\n function getCategoryId(categoryName) {\r\n return categoryMap[categoryName];\r\n }\r\n\r\n this.getItemId = function (itemName) {\r\n return itemMap[itemName];\r\n };\r\n\r\n this.getItemByRefNum = function (refNum) {\r\n for (var name in itemMap) {\r\n if (itemMap[name] === refNum) {\r\n return name;\r\n }\r\n }\r\n return '';\r\n };\r\n //limiting this to UOM because I know all the\r\n //names for UOM also exist as globalization keys\r\n this.getUomTranslationByRefNum = function (refNum) {\r\n for (var name in itemMap) {\r\n if (itemMap[name] === refNum) {\r\n return $filter('translate')(name);\r\n }\r\n }\r\n return '';\r\n };\r\n this.getReferenceDataByCategory = function(category){\r\n var categories = getRefDataCategoryDDLs();\r\n return categories[category];\r\n };\r\n this.getRefDataCategoryDDLs = function () {\r\n if (cacheItems && cacheItems.Packaging && cacheItems.Packaging.length > 0) {\r\n var deferred = $q.defer();\r\n var newItems = {};\r\n angular.copy(cacheItems, newItems);\r\n deferred.resolve(newItems);\r\n return deferred.promise;\r\n }\r\n var refDataCategoryDDLs = {};\r\n\r\n var promises = [];\r\n\r\n var refKeys = ['Packaging', 'FreightClass', 'FBedTarpType', 'FBedLoadingType', 'ItemEquipment','Freight_Term'];\r\n angular.forEach(refKeys, function (key) {\r\n promises.push(ReferenceData.get({\r\n categoryCode: key\r\n }, function (data) {\r\n var filteredArray = [];\r\n angular.forEach(data, function (datum) {\r\n if (datum.value) {\r\n if (datum.value.toLowerCase() !== 'empty') {\r\n datum.label = datum.value;\r\n filteredArray.push(datum);\r\n }\r\n }\r\n });\r\n refDataCategoryDDLs[key] = filteredArray;\r\n }).$promise);\r\n });\r\n\r\n promises.push(ReferenceData.get({\r\n categoryCode: 'TemperatureSensitive'\r\n }, function (data) {\r\n var filteredArray = [];\r\n angular.forEach(data, function (datum) {\r\n if (datum.value) {\r\n if (datum.value.toLowerCase() !== 'empty' && datum.value.toLowerCase() !== 'custom') {\r\n filteredArray.push(datum);\r\n }\r\n }\r\n });\r\n refDataCategoryDDLs['TemperatureSensitive'] = filteredArray;\r\n }).$promise);\r\n\r\n return $q.all(promises).then(function () {\r\n cacheItems = refDataCategoryDDLs;\r\n return refDataCategoryDDLs;\r\n });\r\n };\r\n this.getDdlValueByCategoryAndRefNum = function (category, refNum) {\r\n var value = '';\r\n if (cacheItems[category]) {\r\n for (var i = 0; i < cacheItems[category].length; i++) {\r\n if (cacheItems[category][i].refDataNumber === refNum) {\r\n value = cacheItems[category][i].value;\r\n break;\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n this.getWeightUnitRDNFromItem = function (item) {\r\n var weightUnitRDN = null;\r\n\r\n if (_.has(item, 'totalWeight.unitRDN')) {\r\n weightUnitRDN = item.totalWeight.unitRDN;\r\n } else if (_.has(item, 'unitLength.unitRDN')) {\r\n weightUnitRDN = getWeightRDNFromLinearUnitRDN(item.unitLength.unitRDN);\r\n } else if (_.has(item, 'unitWidth.unitRDN')) {\r\n weightUnitRDN = getWeightRDNFromLinearUnitRDN(item.unitWidth.unitRDN);\r\n } else if (_.has(item, 'unitHeight.unitRDN')) {\r\n weightUnitRDN = getWeightRDNFromLinearUnitRDN(item.unitHeight.unitRDN);\r\n }\r\n\r\n return weightUnitRDN;\r\n }\r\n\r\n this.getDefaultWeightUnitRDN = function (isMetric) {\r\n var weightUnitRDN = isMetric\r\n ? itemMap['KG_UOM']\r\n : itemMap['LB_UOM'];\r\n \r\n return weightUnitRDN;\r\n }\r\n\r\n function getWeightRDNFromLinearUnitRDN(rdn) {\r\n var isMetric;\r\n\r\n switch (rdn) {\r\n case 1278:\r\n case 1279:\r\n isMetric = false;\r\n break;\r\n case 1280:\r\n case 1281:\r\n isMetric = true;\r\n break;\r\n default:\r\n return null;\r\n }\r\n\r\n var weightRDN = isMetric\r\n ? itemMap['KG_UOM']\r\n : itemMap['LB_UOM'];\r\n\r\n return weightRDN;\r\n }\r\n }\r\n app.service('RefDataMappingService', refDataMappingService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n orderLockPromptService.$inject = [];\r\n function orderLockPromptService() {\r\n\r\n this.lock = null;\r\n }\r\n angular.module('NavisphereOnline').service('OrderLockPromptService', orderLockPromptService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n orderEntryPromptService.$inject = [];\r\n function orderEntryPromptService() {\r\n this.isEntryInProgress = false;\r\n this.setEntryInProgress = function (isEntryInProgress) {\r\n this.isEntryInProgress = isEntryInProgress;\r\n };\r\n\r\n this.getEntryInProgress = function () {\r\n return this.isEntryInProgress;\r\n };\r\n }\r\n angular.module('NavisphereOnline').service('OrderEntryPromptService', orderEntryPromptService);\r\n})();\r\n\n(function () {\r\n var app = angular.module('NavisphereOnline');\r\n notificationService.$inject = ['toastr'];\r\n function notificationService(toastr) {\r\n return {\r\n warn: function (header, message) {\r\n toastr.warn(message, header, {\r\n closeButton: true,\r\n timeOut: 0,\r\n extendedTimeOut: 0\r\n });\r\n },\r\n error: function (header, message) {\r\n toastr.error(message, header, {\r\n closeButton: true,\r\n timeOut: 0,\r\n extendedTimeOut: 0\r\n });\r\n },\r\n info: function (header, message) {\r\n toastr.info(message, header, {\r\n closeButton: false,\r\n timeOut: 5000,\r\n extendedTimeOut: 100\r\n });\r\n },\r\n success: function (header, message) {\r\n toastr.success(message, header, {\r\n closeButton: false,\r\n timeOut: 5000,\r\n extendedTimeOut: 1000\r\n });\r\n },\r\n orderProcessed: function (header, message, clickCallback) {\r\n toastr.success(message, header, {\r\n closeButton: true,\r\n timeOut: 20000,\r\n onTap: clickCallback,\r\n allowHtml: true\r\n });\r\n }\r\n };\r\n }\r\n\r\n app.service('NotificationService', notificationService);\r\n})();\r\n\n(function () {\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function monetaryValueFormatService() {\r\n this.DisplayToHundredthsPlace = function(monetaryValue) {\r\n if (isNaN(monetaryValue) || monetaryValue == null) {\r\n return monetaryValue;\r\n }\r\n else {\r\n return monetaryValue.toFixed(2);\r\n }\r\n }\r\n }\r\n app.service('MonetaryValueFormatService', monetaryValueFormatService);\r\n})();\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function modalService($uibModal) {\r\n\r\n var modalDefaults = {\r\n backdrop: true,\r\n keyboard: true,\r\n modalFade: true,\r\n templateUrl: '/app/common/customModal.tpl.html'\r\n };\r\n\r\n var modalOptions = {\r\n closeButtonText: 'Close',\r\n actionButtonText: 'OK',\r\n headerText: 'Proceed?',\r\n bodyText: 'Perform this action?',\r\n isError: false\r\n };\r\n\r\n this.showModal = function (customModalDefaults, customModalOptions) {\r\n if (!customModalDefaults) customModalDefaults = {};\r\n customModalDefaults.backdrop = 'static';\r\n return this.show(customModalDefaults, customModalOptions);\r\n };\r\n\r\n this.show = function (customModalDefaults, customModalOptions) {\r\n //Create temp objects to work with since we're in a singleton service\r\n var tempModalDefaults = {};\r\n var tempModalOptions = {};\r\n\r\n //Map angular-ui modal custom defaults to modal defaults defined in this service\r\n angular.extend(tempModalDefaults, modalDefaults, customModalDefaults);\r\n\r\n //Map modal.html $scope custom properties to defaults defined in this service\r\n angular.extend(tempModalOptions, modalOptions, customModalOptions);\r\n\r\n if (!tempModalDefaults.controller) {\r\n tempModalDefaults.controller = function ($scope, $uibModalInstance) {\r\n $scope.modalOptions = tempModalOptions;\r\n $scope.modalOptions.ok = function () {\r\n $uibModalInstance.close('ok');\r\n };\r\n $scope.modalOptions.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n };\r\n\r\n tempModalDefaults.controller.$inject = ['$scope', '$uibModalInstance'];\r\n }\r\n\r\n return $uibModal.open(tempModalDefaults).result;\r\n };\r\n }\r\n\r\n modalService.$inject = ['$uibModal'];\r\n app.service('ModalService', modalService);\r\n})();\r\n\n(function() {\r\n \"use strict\";\r\n\r\n LocationSelectionHelper.$inject = [\"DateTimeService\", \"LocationService\"];\r\n\r\n function LocationSelectionHelper(DateTimeService, LocationService) {\r\n this.onLocationSelected = function (item, order, locationType, isRecent) {\r\n if (order[locationType] && order[locationType].notes) {\r\n item.notes = order[locationType].notes;\r\n }\r\n if (order[locationType] && order[locationType].volumeQuoteId) {\r\n item.volumeQuoteId = order[locationType].volumeQuoteId;\r\n }\r\n order[locationType] = item;\r\n order[locationType].earliestTime = DateTimeService.getBeginningOfDay();\r\n order[locationType].latestTime = DateTimeService.getBeginningOfDay();\r\n\r\n order[locationType + \"HasNoResults\"] = false;\r\n return LocationService.getLocation({\r\n locationPartyNumberOrCode: item.locationPartyCode,\r\n relatedLocationId: item.relatedLocationId,\r\n useSupplierLocation: order.customer.useSupplierLocation,\r\n dateTimeZoneHandling: 2\r\n }, function (data) {\r\n if (data) {\r\n order[locationType].dryShippingHours = data.dryShippingHours;\r\n order[locationType].dryReceivingHours = data.dryReceivingHours;\r\n if (data.notes) {\r\n order[locationType].notes = data.notes.substring(0, 255);\r\n }\r\n order[locationType].address = data.physicalAddress;\r\n order[locationType].partyCode = data.partyCode;\r\n order[locationType].partyNumber = data.partyNumber;\r\n order[locationType].physicalAddress = data.physicalAddress;\r\n order[locationType].generalAddress = data.generalAddress;\r\n order[locationType].relatedLocationId = data.relatedLocationId;\r\n order[locationType].loadingTypeRDN = data.loadingTypeRDN;\r\n }\r\n order[locationType].name = order[locationType].addressName;\r\n });\r\n };\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"LocationSelectionHelper\", LocationSelectionHelper)\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n function LaunchDarklyService( $rootScope, $q) {\r\n function initLD (sevenLetter) {\r\n // Polyfill from MSDN to cover `LDClient.initialize` for IE11\r\n if (!String.prototype.startsWith) {\r\n Object.defineProperty(String.prototype, 'startsWith', {\r\n value: function(search, rawPos) {\r\n var pos = rawPos > 0 ? rawPos|0 : 0;\r\n return this.substring(pos, pos + search.length) === search;\r\n }\r\n });\r\n }\r\n\r\n var deferred = $q.defer();\r\n var ldclient = LDClient.initialize(\r\n appConfig.launchDarklyClientId,\r\n {key:sevenLetter, anonymous:true})\r\n ldclient.on('ready', function () {\r\n deferred.resolve(ldclient)\r\n })\r\n return deferred.promise\r\n }\r\n return {\r\n initLD: initLD\r\n };\r\n }\r\n\r\n LaunchDarklyService.$inject = ['$rootScope','$q'];\r\n angular.module(\"NavisphereOnline\").factory(\"LaunchDarklyService\", LaunchDarklyService);\r\n})();\r\n\n(function() {\r\n function FormService() {\r\n this.setDropdownSize = function (itemSearchInputId) {\r\n if (angular.isUndefined(itemSearchInputId) || itemSearchInputId === null) {\r\n itemSearchInputId='itemSearchInput';\r\n }\r\n var itemSearchInput = angular.element('#' + itemSearchInputId);\r\n var dropdownMenu = angular.element('#' + itemSearchInputId + ' + .dropdown-menu');\r\n var newWidth = (itemSearchInput.width() + parseInt(itemSearchInput.css('padding-left')) + parseInt(itemSearchInput.css('padding-right'))) + 'px';\r\n dropdownMenu.css('width', newWidth);\r\n }\r\n }\r\n\r\n angular.module(\"NavisphereOnline\").service(\"FormService\", FormService);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n FilterService.$inject = [];\r\n\r\n function FilterService() {\r\n return {\r\n filterThorough: filterThorough\r\n };\r\n\r\n /**\r\n * Allows for multiple searches by category and across categories of filters.\r\n * Also allows for searching within a sub-array of the original array.\r\n *\r\n * @example 1\r\n * You want to filter cookies. You have three different filters, representing properties of cookie objects - size, kind, baker\r\n * The possible values in each category are as follows:\r\n * size: small, medium, large\r\n * kind: chocolate chip, oatmeal raisin, m&m\r\n * baker: Jack, Jill, Jenny, John\r\n *\r\n * If you wanted to search for small cookies baked by Jack or Jill of any kind, your filters object would look like this:\r\n * [\r\n * [\r\n * { size: \"small\" }\r\n * ], [\r\n * { baker: \"Jack\" },\r\n * { baker: \"Jill\" }\r\n * ]\r\n * ]\r\n *\r\n * @example 2 -- searching a sub-array\r\n * An order has the following 3 properties: status, type, and location\r\n * The possible values in each category are as follows:\r\n * status: booked, in-transit, delivered\r\n * type: type1, type2, type3\r\n * locations: an array of location objects, each with a name, city and state\r\n * order: {\r\n * status: \"booked\",\r\n * type: \"type1\",\r\n * locations: [\r\n * {name: \"location1\", city: \"Minneapolis\", state: \"MN\"},\r\n * {name: \"location2\", city: \"St. Paul\", state: \"MN\"}\r\n * ]\r\n * }\r\n * You want to return only \"booked\" or \"delivered\" orders that have \"Minneapolis\" as the city on one of their locations.\r\n * Your filters parameter would look like this:\r\n * [\r\n * [\r\n * {status: \"booked\"},\r\n * {status: \"delivered\"}\r\n * ], [\r\n * {\r\n * searchValue: \"Minneapolis\",\r\n * searchSubArray: true,\r\n * arrayName: \"locations\",\r\n * propertyToCheck: \"city\"\r\n * }\r\n * ]\r\n * ]\r\n *\r\n * @param originalArray - The full array. This will be trimmed down through each layer of recursion.\r\n * @param filters - An array of filter category arrays. Each filter category array should contain conditions to be tested.\r\n * @returns {Array} - List of filtered results. Can be the original array, an empty array, or something in between.\r\n */\r\n function filterThorough(originalArray, filters) {\r\n if (filters && filters.length) {\r\n var subsetContainer = [];\r\n\r\n _.forEach(filters[0], function (condition) {\r\n if(condition.searchSubArray){\r\n var filteredSubset = searchSubArray(originalArray, condition);\r\n } else {\r\n var filteredSubset = _.filter(originalArray, condition);\r\n }\r\n\r\n // Merges the filteredSubset into the subsetContainer.\r\n Array.prototype.push.apply(subsetContainer, filteredSubset);\r\n });\r\n\r\n filters = _.drop(filters);\r\n return filterThorough(subsetContainer, filters);\r\n }\r\n\r\n return originalArray;\r\n }\r\n\r\n /**\r\n * Searches for a given property value within an array of objects nested in the original array\r\n *\r\n * @param originalArray The full array to be filtered\r\n * @param condition An object with the following properties:\r\n * searchValue: string,\r\n * searchSubArray: boolean,\r\n * arrayName: string,\r\n * propertyToCheck: string\r\n * @returns {Array} List of filtered results\r\n */\r\n function searchSubArray(originalArray, condition) {\r\n var filteredResults = _.filter(originalArray, function(item) {\r\n var subArray = item[condition.arrayName];\r\n var valueFound = false;\r\n _.forEach(subArray, function(subArrayItem) {\r\n if(subArrayItem[condition.propertyToCheck] === condition.searchValue) {\r\n valueFound = true;\r\n }\r\n });\r\n return valueFound;\r\n });\r\n\r\n return filteredResults;\r\n }\r\n}\r\n\r\n angular.module(\"NavisphereOnline\").service(\"FilterService\", FilterService);\r\n})();\r\n\n/*global moment */\r\n(function () {\r\n var app = angular.module('NavisphereOnline');\r\n\r\n dateTimeService.$inject = ['$filter', 'moment'];\r\n\r\n function dateTimeService($filter, moment) {\r\n Date.prototype.addDays = function(days, date){\r\n if(!angular.isDefined){\r\n date = getToday();\r\n }\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n };\r\n //get new date and add days based on a date, won't modify passed in date.\r\n var getDateAddDays = function(days, date) {\r\n var newDate;\r\n if(angular.isDefined(date)){\r\n newDate = new Date(date);\r\n }\r\n return Date.prototype.addDays(days, newDate);\r\n };\r\n var getToday = function () {\r\n var now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n\r\n return now;\r\n };\r\n\r\n var getDisplayTime = function(date, userPreferences) {\r\n if(!date){\r\n return '';\r\n }\r\n\r\n return $filter('time')({\r\n userPreferences: userPreferences,\r\n date: date\r\n });\r\n };\r\n\r\n var getDisplayDate = function(date) {\r\n if(!date){\r\n return '';\r\n }\r\n\r\n date = moment.utc(date);\r\n\r\n return $filter('date')(date.format(\"MM/DD/YYYY\"));\r\n };\r\n\r\n var getDisplayShortDate = function (date) {\r\n if (!date){\r\n return '';\r\n }\r\n\r\n date = moment.utc(date);\r\n\r\n return $filter('date')(date.format(\"MM/DD\"));\r\n };\r\n\r\n var getDisplayDateAndTime = function(date) {\r\n if(!date){\r\n return '';\r\n }\r\n\r\n return $filter('date')(new Date(date), 'short');\r\n };\r\n\r\n var isValidDateRange = function (fromDate, toDate) {\r\n if (fromDate == \"\" || toDate == \"\")\r\n return true;\r\n\r\n if (!isValidDate(fromDate))\r\n return false;\r\n\r\n var fromMoment = moment(new Date(fromDate));\r\n var toMoment = moment(new Date(toDate));\r\n\r\n if (!toMoment.isValid())\r\n return true;\r\n\r\n var diff = fromMoment.diff(toMoment, 'days');\r\n\r\n return diff <= 0;\r\n };\r\n\r\n var getDateTwoYearsFromNow = function () {\r\n var now = getToday();\r\n\r\n return now.setFullYear(now.getFullYear() + 2);\r\n };\r\n\r\n var getDateFirstOfMonth = function () {\r\n\r\n var date = new Date();\r\n var firstofmonth = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n return firstofmonth;\r\n };\r\n\r\n var isValidDate = function (dateStr) {\r\n if (dateStr == undefined)\r\n return false;\r\n var dateTime = Date.parse(dateStr);\r\n\r\n return !isNaN(dateTime);\r\n };\r\n\r\n var getWeekDayName = function(day) {\r\n var weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];\r\n return weekDays[day];\r\n };\r\n\r\n var getLatestDateMinDate = function (newDate) {\r\n\r\n if (!newDate)\r\n return getToday();\r\n\r\n return newDate;\r\n };\r\n\r\n var getRawDateTime = function (dateTime) {\r\n if (dateTime) {\r\n var rawDateTimeInfo = dateTime.split(\"T\");\r\n var rawDate = rawDateTimeInfo[0].split(\"-\");\r\n var rawTime = rawDateTimeInfo[1].substring(0, 8).split(\":\");\r\n var rawDateTime = new Date(rawDate[0], parseInt(rawDate[1]) - 1, rawDate[2], rawTime[0], rawTime[1], rawTime[2]);\r\n return rawDateTime;\r\n }\r\n return null;\r\n };\r\n\r\n var startDateTimeLessThanOrEqualEndDateTime = function(startDate,startTime,endDate,endTime) {\r\n var startDateTime = new Date(startDate.getYear(), startDate.getMonth(), startDate.getDate(), startTime.getHours(), startTime.getMinutes(), 0, 0);\r\n var endDateTime = new Date(endDate.getYear(), endDate.getMonth(), endDate.getDate(), endTime.getHours(), endTime.getMinutes(), 0, 0);\r\n\r\n\r\n return startDateTime <= endDateTime;\r\n };\r\n\r\n var getDisplayDateTime = function (dateTime, userPreferences) {\r\n\r\n if (!dateTime) {\r\n return null;\r\n }\r\n var serverDateTime = null;\r\n\r\n var actualArrivalDateTimeInfo = dateTime.split(\"T\");\r\n var dateParts = actualArrivalDateTimeInfo[0].split(\"-\");\r\n var timeParts = actualArrivalDateTimeInfo[1].substring(0, 8).split(\":\");\r\n\r\n serverDateTime = getServerDateTime(timeParts, dateParts);\r\n if (serverDateTime) {\r\n var time = serverDateTime.getHours();\r\n return (time > 0)\r\n ? $filter('date')(serverDateTime, 'shortDate') + ' at ' + $filter('time')({\r\n userPreferences: userPreferences,\r\n date: serverDateTime\r\n })\r\n : $filter('date')(serverDateTime, 'shortDate');\r\n\r\n }\r\n return null;\r\n };\r\n\r\n var getDisplayDateOrTime = function (dateTime, userPreferences, getTime) {\r\n var dateParts = null;\r\n var timeParts = null;\r\n\r\n if (dateTime) {\r\n var dateInfo = dateTime.split(\"T\");\r\n dateParts = dateInfo[0].split(\"-\");\r\n timeParts = dateInfo[1].substring(0, 8).split(\":\");\r\n }\r\n\r\n var serverDateTime = getServerDateTime(timeParts, dateParts);\r\n if (serverDateTime) {\r\n return getTime ?\r\n $filter('time')({\r\n userPreferences: userPreferences,\r\n date: serverDateTime\r\n }) :\r\n $filter('date')(serverDateTime, 'shortDate');\r\n }\r\n return null;\r\n };\r\n\r\n function getServerDateTime(timeParts, dateParts) {\r\n var serverDateTime = null;\r\n if ((timeParts && timeParts.length > 2) && (dateParts && dateParts.length > 2)) {\r\n serverDateTime = new Date(dateParts[0], parseInt(dateParts[1]) - 1, dateParts[2], timeParts[0], timeParts[1], timeParts[2]);\r\n } else if (dateParts && dateParts.length > 2) {\r\n serverDateTime = new Date(dateParts[0], parseInt(dateParts[1]) - 1, dateParts[2]);\r\n }\r\n return serverDateTime;\r\n }\r\n\r\n function isLocalTimePastTwoPMEastern (currentDate) {\r\n var date = new Date();\r\n var estTime = moment().tz('America/New_York').format('HH');\r\n\r\n if (parseInt(estTime) >= 14) {\r\n var currentDate = currentDate.getDate();\r\n if(currentDate == date.getDate()) {\r\n return true\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function getBeginningOfDay(){\r\n return moment().startOf('day').toDate();\r\n }\r\n\r\n function areDatesEqual(firstDate, secondDate) {\r\n return moment.utc(firstDate).startOf('day').isSame(moment.utc(secondDate).startOf('day'));\r\n }\r\n\r\n function isDateBefore(firstDate, secondDate) {\r\n return moment.utc(firstDate).startOf('day').isBefore(moment.utc(secondDate).startOf('day'));\r\n }\r\n\r\n return {\r\n getDateAddDays: getDateAddDays,\r\n isValidDateRange: isValidDateRange,\r\n isValidDate: isValidDate,\r\n getToday: getToday,\r\n getDateTwoYearsFromNow: getDateTwoYearsFromNow,\r\n getLatestDateMinDate: getLatestDateMinDate,\r\n getWeekDayName: getWeekDayName,\r\n getRawDateTime: getRawDateTime,\r\n startDateTimeLessThanOrEqualEndDateTime: startDateTimeLessThanOrEqualEndDateTime,\r\n getDisplayDateAndTime: getDisplayDateAndTime,\r\n getDisplayDateTime: getDisplayDateTime,\r\n getDisplayDateOrTime: getDisplayDateOrTime,\r\n getDisplayDate: getDisplayDate,\r\n getDisplayShortDate: getDisplayShortDate,\r\n getDisplayTime: getDisplayTime,\r\n getDateFirstOfMonth: getDateFirstOfMonth,\r\n getBeginningOfDay: getBeginningOfDay,\r\n isLocalTimePastTwoPMEastern: isLocalTimePastTwoPMEastern,\r\n areDatesEqual: areDatesEqual,\r\n isDateBefore: isDateBefore\r\n };\r\n }\r\n app.service('DateTimeService', dateTimeService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function customerService() {\r\n this.GetDisplayName = function (customer) {\r\n var displayName = '';\r\n\r\n if (angular.isUndefined(customer) || customer === null) {\r\n return displayName;\r\n }\r\n\r\n if (customer.name) {\r\n displayName = customer.name;\r\n }\r\n\r\n if (customer.partyCode) {\r\n if (displayName) {\r\n displayName += ' - ' + customer.partyCode;\r\n } else {\r\n displayName = customer.partyCode;\r\n }\r\n }\r\n return displayName;\r\n }\r\n }\r\n app.service('CustomerService', customerService);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n conversionService.$inject = [];\r\n function conversionService() {\r\n this.convertKGtoLB = function(kgValue, decimalPlaces) {\r\n if (!kgValue) {\r\n return 0;\r\n }\r\n var lbValue = kgValue * 2.2046;\r\n if (decimalPlaces && isFinite(Number(decimalPlaces))) {\r\n lbValue = parseFloat(lbValue.toFixed(decimalPlaces));\r\n }\r\n return lbValue;\r\n };\r\n this.convertLBtoKG = function(lbValue, decimalPlaces) {\r\n if (!lbValue) {\r\n return 0;\r\n }\r\n var kgValue = lbValue * 0.4536;\r\n if (decimalPlaces && isFinite(Number(decimalPlaces))) {\r\n kgValue = parseFloat(kgValue.toFixed(decimalPlaces));\r\n }\r\n return kgValue;\r\n };\r\n }\r\n app.service('ConversionService', conversionService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n carrierRuleService.$inject = ['ServiceOfferingMapping'];\r\n function carrierRuleService(ServiceOfferingMapping) {\r\n this.showCarrier = function (serviceOfferingId,isMultiLeg) {\r\n var LTLServiceOfferings = [\r\n ServiceOfferingMapping.getServiceOfferingId('LTL_SERVICE_OFFERING'),\r\n ServiceOfferingMapping.getServiceOfferingId('LTL_TRANSPORTATION'),\r\n ServiceOfferingMapping.getServiceOfferingId('LTL_EXPEDITED_TRANSPORTATION'),\r\n ServiceOfferingMapping.getServiceOfferingId('LTL_TEMP_CONTROLLED_TRANSPORTATION'),\r\n ServiceOfferingMapping.getServiceOfferingId('LTL_TEMP_CONTROLLED_SERVICE_OFFERING'),\r\n ServiceOfferingMapping.getServiceOfferingId('LTL_TEMP_CONTROLLED_EXPEDITED_TRANSPORTATION'),\r\n ServiceOfferingMapping.getServiceOfferingId('PRODUCE_LTL_TEMP_CONTROLLED_TRANSPORTATION')\r\n ];\r\n return LTLServiceOfferings.indexOf(serviceOfferingId) > -1 && isMultiLeg=== false;\r\n };\r\n }\r\n app.service('CarrierRuleService', carrierRuleService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.factory('CaretPositionService', ['$document', function ($document) {\r\n\r\n var getCaretPosition = function (inputField) {\r\n var position = 0;\r\n // IE Support\r\n if ($document[0].selection) {\r\n inputField.focus();\r\n // To get cursor position, get empty selection range\r\n var emptySelection = $document[0].selection.createRange();\r\n // Move selection start to 0 position\r\n emptySelection.moveStart('character', -inputField.value.length);\r\n // The caret position is selection length\r\n position = emptySelection.text.length;\r\n }\r\n else if (inputField.type !== 'number' && (inputField.selectionStart || inputField.selectionStart == 0)) {\r\n position = inputField.selectionStart;\r\n }\r\n return position;\r\n };\r\n\r\n var setCaretPosition = function (inputElement, position) {\r\n if (inputElement.createTextRange) {\r\n var range = inputElement.createTextRange();\r\n range.move('character', position);\r\n range.select();\r\n }\r\n else {\r\n if (inputElement.type !== 'number' && inputElement.selectionStart) {\r\n inputElement.focus();\r\n inputElement.setSelectionRange(position, position);\r\n }\r\n else {\r\n inputElement.focus();\r\n }\r\n }\r\n };\r\n\r\n return {\r\n getCaretPosition: getCaretPosition,\r\n setCaretPosition: setCaretPosition\r\n };\r\n }]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n /* @ngInject */\r\n function authService($timeout, $rootScope, $state, localStorageService, User, tokenService,\r\n $translate, $q, WalkthroughService, WindowLocationHref, authClient, UserApplicationService, jwtHelper, LaunchDarklyService, AcknowledgementHelper) {\r\n\r\n var logoutFunctions = [];\r\n const accessTokenKey = \"accessToken\";\r\n const idTokenKey = \"idToken\";\r\n\r\n /**\r\n * Adds a function to the list of functions that we need to execute when we want to logout the user.\r\n * For example, if we need to clear an order lock\r\n * @constructor\r\n * @param {function} logoutFunction - The function we need to run on logout.\r\n */\r\n function addLogoutFunction(logoutFunction) {\r\n logoutFunctions.push(logoutFunction);\r\n }\r\n\r\n function login() {\r\n var oktaAuth = authClient.getClient();\r\n\r\n oktaAuth.token.getWithRedirect({\r\n responseType: [\r\n 'token',\r\n 'id_token'\r\n ],\r\n scopes: [\r\n 'openid',\r\n\t\t\t\t\t\t'profile',\r\n\t\t\t\t\t\t'email',\r\n\t\t\t\t\t\t'groups'\r\n ],\r\n redirectUri: getRedirectUri()\r\n });\r\n }\r\n\r\n function loginInterop(userId, token, redirectUrl) {\r\n clearData();\r\n localStorageService.set('redirectUrl', redirectUrl);\r\n\r\n var oktaAuth = authClient.getClient();\r\n\r\n oktaAuth.token.getWithRedirect({\r\n responseType: [\r\n 'token',\r\n 'id_token'\r\n ],\r\n scopes: [\r\n 'openid',\r\n\t\t\t\t\t'profile',\r\n\t\t\t\t\t'email',\r\n\t\t\t\t\t'groups'\r\n ],\r\n redirectUri: getRedirectUri()\r\n });\r\n\r\n }\r\n\r\n function clearData() {\r\n localStorageService.clearAll();\r\n $translate.refresh();\r\n }\r\n\r\n /**\r\n * Function to run to logout a user. We also need to run all of the functions that have been set as\r\n * required to execute before a user can be logged out. For example, if we need to clear an order lock\r\n */\r\n function logout() {\r\n var promises = [],\r\n oktaAuth = authClient.getClient(),\r\n baseUrl = appConfig.baseUrl ? appConfig.baseUrl : location.origin;\r\n\r\n _.forEach(logoutFunctions, function (logoutFunction) {\r\n promises.push(logoutFunction());\r\n });\r\n var redirectUrl = localStorageService.get('redirectUrl');\r\n $q.all(promises)\r\n .then(function () {\r\n localStorageService.set('redirectUrl', redirectUrl);\r\n clearData();\r\n oktaAuth.session.exists()\r\n .then(function(exists) {\r\n if (exists) {\r\n oktaAuth.signOut({ revokeAccessToken: false });\r\n } else {\r\n window.location.assign(baseUrl);\r\n }\r\n });\r\n })\r\n .catch(function () {\r\n localStorageService.set('redirectUrl', redirectUrl);\r\n clearData();\r\n\r\n oktaAuth.session.exists()\r\n .then(function(exists) {\r\n if (exists) {\r\n oktaAuth.signOut({revokeAccessToken: false});\r\n } else {\r\n window.location.assign(baseUrl);\r\n }\r\n });\r\n });\r\n }\r\n\r\n function checkApplicationAccess() {\r\n var applications = localStorageService.get(\"users.applications\");\r\n var application = applications && _.find(applications, function(application) {\r\n return application.applicationId === 1;\r\n });\r\n if(!application || !application.isEnabled) {\r\n WindowLocationHref.redirectToProductsPageNotFound();\r\n }\r\n }\r\n\r\n function authorizeUser() {\r\n var deferred = $q.defer();\r\n if(localStorageService.get(\"users.applications\") === null) {\r\n // getUserApplication should return an empty list if the user is not found e.g. Vision users\r\n UserApplicationService.getUserApplications().$promise.then(function (data) {\r\n localStorageService.set(\"users.applications\", data && data.applications);\r\n checkApplicationAccess();\r\n deferred.resolve();\r\n });\r\n } else {\r\n checkApplicationAccess();\r\n deferred.resolve();\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n function getUserDataAndRedirect() {\r\n\r\n User.get().$promise.then(function (userInfo) {\r\n localStorageService.set(\"User\", userInfo);\r\n $q.all([\r\n User.getCustomerProfilePermissions().$promise,\r\n User.getPreferences().$promise,\r\n WalkthroughService.getAllWalkthroughs({\r\n userId: userInfo.userId\r\n }).$promise,\r\n UserApplicationService.getUserApplications().$promise\r\n\r\n ]).then(function (result) {\r\n localStorageService.set(\"permissions\", result[0]);\r\n localStorageService.set(\"preferences\", result[1]);\r\n localStorageService.set(\"walkthroughs\", result[2]);\r\n localStorageService.set(\"users.applications\", result[3] && result[3].applications);\r\n\r\n }).catch(function (err) {\r\n console.log(err);\r\n\r\n }).finally(function(){\r\n authorizeUser().then(function() {\r\n var redirectUrl = localStorageService.get('redirectUrl');\r\n if (redirectUrl) {\r\n localStorageService.remove(\"redirectUrl\");\r\n var shouldReload = (window.location.href === redirectUrl);\r\n shouldReload ? window.location.reload() : window.location.replace(decodeURIComponent(redirectUrl));\r\n } else {\r\n var preferences = localStorageService.get(\"preferences\");\r\n var notConfirmed = (preferences && !preferences.preferencesConfirmed);\r\n notConfirmed ? $state.go('app.userPreferences') : $state.go('app.dashboard');\r\n }\r\n });\r\n });\r\n }).catch(function(err){\r\n authorizeUser().then(function(){\r\n //if no redirect, then logout\r\n logout();\r\n })\r\n });\r\n }\r\n\r\n function getUserData() {\r\n User.get().$promise\r\n .then(function (userInfo) {\r\n localStorageService.set(\"User\", userInfo);\r\n $q.all([\r\n User.getCustomerProfilePermissions().$promise,\r\n User.getPreferences().$promise,\r\n WalkthroughService.getAllWalkthroughs({\r\n userId: userInfo.userId\r\n }).$promise,\r\n UserApplicationService.getUserApplications().$promise\r\n ])\r\n .then(function (result) {\r\n localStorageService.set(\"permissions\", result[0]);\r\n localStorageService.set(\"preferences\", result[1]);\r\n localStorageService.set(\"walkthroughs\", result[2]);\r\n localStorageService.set(\"users.applications\", result[3] && result[3].applications);\r\n })\r\n .catch(function (err) {\r\n console.log(err);\r\n });\r\n });\r\n }\r\n\r\n function getAccessToken() {\r\n var authToken = localStorageService.get('auth.data');\r\n if (authToken && authToken.accessToken) {\r\n try {\r\n if (!jwtHelper.isTokenExpired(authToken.accessToken)) {\r\n return authToken.accessToken;\r\n };\r\n } catch (err) {\r\n clearData();\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function getIdToken() {\r\n var authToken = localStorageService.get('auth.data');\r\n if (authToken && authToken.idToken) {\r\n try {\r\n if (!jwtHelper.isTokenExpired(authToken.idToken)) {\r\n return authToken.idToken;\r\n };\r\n } catch (err) {\r\n clearData();\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function getPreferences() {\r\n var preferences;\r\n if (localStorageService.get('preferences')) {\r\n preferences = localStorageService.get('preferences');\r\n }\r\n return preferences;\r\n }\r\n\r\n function getPermissions() {\r\n var permissions;\r\n if (localStorageService.get('permissions')) {\r\n permissions = localStorageService.get('permissions');\r\n }\r\n return permissions;\r\n }\r\n\r\n function isLoggedIn() {\r\n return !!getAccessToken();\r\n }\r\n\r\n function authenticate(oktaAuth) {\r\n if(location.hash.indexOf('access_token') !== -1) {\r\n // remove trailing / angular because Okta parse fails to retrieve params from hash\r\n var hashless = location.toString().replace('#/', '#');\r\n history.replaceState({}, '', hashless);\r\n }\r\n oktaAuth.token.parseFromUrl()\r\n .then(function(res) {\r\n var authData = {\r\n accessToken: res.tokens.accessToken.accessToken,\r\n identityToken: res.tokens.idToken.idToken\r\n };\r\n localStorageService.set('auth.data', authData );\r\n tokenService.addTokensToManager(oktaAuth, res.tokens.accessToken, res.tokens.idToken);\r\n })\r\n .catch(function() {});\r\n }\r\n\r\n function errorCatch(error)\r\n {\r\n login();\r\n throw new AuthError(error.errorCode, error.message);\r\n }\r\n\r\n function checkAuthSession(){\r\n var oktaAuth = authClient.getClient();\r\n try{\r\n oktaAuth.session.get()\r\n .then(function(session){\r\n if(session.status === \"ACTIVE\"){\r\n oktaAuth.token.getWithoutPrompt({\r\n scopes:[\r\n 'openid',\r\n 'profile',\r\n 'email',\r\n 'groups'\r\n ],\r\n responseType: ['token', 'id_token'],\r\n sessionToken: session.id,\r\n })\r\n .then(function(res){\r\n var authData = {\r\n accessToken: res.tokens.accessToken.accessToken,\r\n identityToken: res.tokens.idToken.idToken\r\n };\r\n\r\n if(!!authData.accessToken && !!authData.identityToken){\r\n localStorageService.set('auth.data', authData );\r\n getUserDataAndRedirect();\r\n\r\n } else {\r\n logout();\r\n }\r\n });\r\n } else {\r\n logout();\r\n }\r\n });\r\n\r\n } catch(err){\r\n logout();\r\n }\r\n }\r\n\r\n function setupTokenManager(oktaAuth)\r\n {\r\n const accessTokenKey = \"accessToken\";\r\n const idTokenKey = \"idToken\";\r\n const scopes = ['openid', 'profile', 'email', 'groups'];\r\n\r\n var tokenValues = tokenService.decodeToken(oktaAuth);\r\n\r\n var accessToken =\r\n {\r\n scopes: scopes,\r\n expiresAt: tokenValues.accessTokenExpirationDate,\r\n accessToken: tokenValues.accessToken\r\n }\r\n var idToken =\r\n {\r\n scopes: scopes,\r\n expiresAt: tokenValues.idTokenExpirationDate,\r\n idToken: tokenValues.identityToken\r\n }\r\n\r\n tokenService.addTokensToManager(oktaAuth, accessToken, idToken);\r\n\r\n oktaAuth.tokenManager.on('expired', function(key){\r\n oktaAuth.tokenManager.renew(key)\r\n .then(function(){\r\n oktaAuth.tokenManager.get(accessTokenKey)\r\n .then(function(newAccessToken) {\r\n oktaAuth.tokenManager.get(idTokenKey)\r\n .then(function(newIdToken){\r\n localStorageService.set('auth.data', {accessToken: newAccessToken.value, identityToken: newIdToken.value});\r\n })\r\n .catch(errorCatch);\r\n })\r\n .catch(errorCatch);\r\n })\r\n .catch(errorCatch);\r\n });\r\n }\r\n\r\n function getRedirectUri() {\r\n var baseUri = document.baseURI;\r\n if (!baseUri) {\r\n var baseNode = document.querySelector('base');\r\n if (baseNode) {\r\n baseUri = baseNode.getAttribute('href');\r\n }\r\n }\r\n\r\n var result = baseUri || window.location.protocol + '//' + window.location.host + window.location.pathname;\r\n\r\n var hashIndex = result.indexOf('#');\r\n if (hashIndex !== -1) {\r\n result = result.substring(0, hashIndex);\r\n }\r\n\r\n return result.toLowerCase();\r\n }\r\n\r\n function readAcknowledgements() {\r\n AcknowledgementHelper.getAcknowledgements();\r\n }\r\n\r\n return {\r\n login: login,\r\n logout: logout,\r\n getAccessToken: getAccessToken,\r\n getIdToken: getIdToken,\r\n isLoggedIn: isLoggedIn,\r\n getPreferences: getPreferences,\r\n getPermissions: getPermissions,\r\n getUserDataAndRedirect: getUserDataAndRedirect,\r\n addLogoutFunction: addLogoutFunction,\r\n loginInterop: loginInterop,\r\n authenticate: authenticate,\r\n authorizeUser: authorizeUser,\r\n getUserData: getUserData,\r\n setupTokenManager: setupTokenManager,\r\n readAcknowledgements: readAcknowledgements,\r\n checkAuthSession: checkAuthSession\r\n };\r\n }\r\n\r\n authService.$inject = ['$timeout', '$rootScope', '$state', 'localStorageService', 'User', 'tokenService',\r\n '$translate', '$q', 'WalkthroughService', 'WindowLocationHref', 'authClient', 'UserApplicationService', 'jwtHelper', 'LaunchDarklyService', 'AcknowledgementHelper'];\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .service('authService', authService);\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .factory('analyticsService', analyticsService);\r\n\r\n /** @ngInject */\r\n analyticsService.$inject = ['$log', 'satellite'];\r\n function analyticsService($log, satellite) {\r\n var track = function(ruleName) {\r\n try {\r\n satellite.track(ruleName);\r\n } catch (e) {\r\n logError(e);\r\n }\r\n };\r\n\r\n var trackWithVar = function(ruleName, variableName, variableValue) {\r\n try {\r\n setVar(variableName, variableValue);\r\n track(ruleName);\r\n } catch (e) {\r\n logError(e);\r\n }\r\n };\r\n\r\n var trackWithMultipleVars = function(ruleName, variableSet) {\r\n try {\r\n if (variableSet) {\r\n _.forIn(variableSet, function(value, name) {\r\n setVar(name, value);\r\n });\r\n }\r\n track(ruleName);\r\n } catch (e) {\r\n logError(e);\r\n }\r\n };\r\n\r\n var setVar = function(name, value) {\r\n try {\r\n satellite.notify('Set Variable \"' + String(name) + '\" with value \"' + String(value) + '\"');\r\n satellite.setVar(name, value);\r\n } catch (e) {\r\n logError(e);\r\n }\r\n };\r\n\r\n var logError = function(exception) {\r\n try {\r\n var error = \"Unknown Error\";\r\n if (exception) {\r\n error = exception.toJson();\r\n }\r\n $log(\"Unexpected exception occurred triggering a direct call rule in Adobe DTM: \" + error);\r\n } catch (e) {\r\n //Do nothing.\r\n }\r\n };\r\n\r\n return {\r\n track: track,\r\n trackWithVar: trackWithVar,\r\n trackWithMultipleVars: trackWithMultipleVars\r\n };\r\n }\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n /** @ngInject */\r\n AdobeAnalyticsService.$inject = ['$window'];\r\n function AdobeAnalyticsService($window) {\r\n var tracking = function( user ){\r\n const siteName = '2.0';\r\n const pageName = getPageName($window.location.hash.substring(2));\r\n if(validPageName(pageName)){\r\n const userType = getUserType(user.email);\r\n var pagePath = $window.location.hash;\r\n\r\n if($window.appEventData !== undefined){\r\n $window.appEventData.push({\r\n \"event\": \"pageInitialized\"\r\n });\r\n\r\n $window.appEventData.push({\r\n \"event\":\"userDetected\",\r\n \"user\": {\r\n \"id\": user.userId,\r\n \"type\": userType\r\n }\r\n });\r\n\r\n $window.appEventData.push({\r\n \"event\": \"pageInfo\",\r\n \"page\": {\r\n \"path\": pagePath,\r\n \"name\": '2.0 - '+pageName\r\n },\r\n \"site\": {\r\n \"name\": siteName\r\n }\r\n });\r\n\r\n $window.appEventData.push({\r\n \"event\": \"pageLoadCompleted\"\r\n });\r\n }\r\n }\r\n };\r\n\r\n var gaqFormSelected = function(user, form) {\r\n const siteName = '2.0';\r\n const pageName = getPageName($window.location.hash.substring(2));\r\n if($window.appEventData !== undefined) {\r\n $window.appEventData.push({\r\n \"event\": \"gaqFormSelected\",\r\n \"user\": {\r\n \"id\": user.userId\r\n },\r\n \"page\": {\r\n \"name\": '2.0 - '+pageName\r\n },\r\n \"site\": {\r\n \"name\": siteName\r\n },\r\n \"gaqForm\": form\r\n })\r\n }\r\n };\r\n\r\n var gaqFormSubmitted = function(user, form) {\r\n const siteName = '2.0';\r\n const pageName = getPageName($window.location.hash.substring(2));\r\n if($window.appEventData !== undefined) {\r\n $window.appEventData.push({\r\n \"event\": \"gaqFormSubmitted\",\r\n \"user\": {\r\n \"id\": user.userId\r\n },\r\n \"page\": {\r\n \"name\": '2.0 - '+pageName\r\n },\r\n \"site\": {\r\n \"name\": siteName\r\n },\r\n \"gaqForm\": form\r\n })\r\n }\r\n };\r\n\r\n var getPageName = function getPageName(hash) {\r\n if(!hash) { return ''; }\r\n var pageName = hash.split('?')[0];\r\n var pathParams = pageName.split('/');\r\n var parsed = parseLogin(pathParams.join(' '));\r\n return parsed;\r\n }\r\n\r\n function parseLogin(pagePath) {\r\n var pageName = pagePath.split('#')[0];;\r\n return pageName;\r\n }\r\n\r\n function validPageName(pageName) {\r\n if(pageName && (_.includes(pageName.toLowerCase(), 'redirecturl') || _.includes(pageName.toLowerCase(), 'id_token'))) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n function isInternal(email){\r\n const internal = ['chrobinson.com', 'mytmc.com', 'freightquote.com', 'robinsonfresh.com'];\r\n return internal.some(function(domain){\r\n return email.indexOf(domain) > -1;\r\n });\r\n }\r\n\r\n var getUserType = function getUserType(email) {\r\n if(!email){ return ''; }\r\n\r\n if (isInternal(email)) {\r\n return 'Internal';\r\n }\r\n return 'External';\r\n }\r\n\r\n return {\r\n tracking: tracking,\r\n getPageName: getPageName,\r\n getUserType: getUserType,\r\n gaqFormSelected: gaqFormSelected,\r\n gaqFormSubmitted: gaqFormSubmitted\r\n };\r\n }\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .factory('AdobeAnalyticsService',AdobeAnalyticsService);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n function addressService() {\r\n this.GetAddressLine1 = function (address) {\r\n var addressLine1 = null;\r\n\r\n if (angular.isUndefined(address) || address === null) {\r\n return addressLine1;\r\n }\r\n\r\n if (address.addressLine1) {\r\n addressLine1 = address.addressLine1;\r\n }\r\n\r\n return addressLine1;\r\n };\r\n\r\n this.GetAddressLine2 = function (address) {\r\n var addressLine2 = null;\r\n\r\n if (angular.isUndefined(address) || address === null) {\r\n return addressLine2;\r\n }\r\n\r\n if (address.addressLine2) {\r\n addressLine2 = address.addressLine2;\r\n }\r\n\r\n return addressLine2;\r\n };\r\n\r\n this.GetAddressLine3 = function (address) {\r\n var addressLine3 = null;\r\n\r\n if (angular.isUndefined(address) || address === null) {\r\n return addressLine3;\r\n }\r\n\r\n if (address.city) {\r\n addressLine3 = address.city;\r\n }\r\n\r\n if (address.state || address.stateProvince) {\r\n var state = undefined;\r\n\r\n if (address.state) {\r\n state = address.state;\r\n } else {\r\n state = address.stateProvince;\r\n }\r\n\r\n if (addressLine3) {\r\n addressLine3 += ', ' + state;\r\n } else {\r\n addressLine3 = state;\r\n }\r\n }\r\n\r\n if (address.postalCode) {\r\n if (addressLine3) {\r\n addressLine3 += ' ' + address.postalCode;\r\n } else {\r\n addressLine3 = address.postalCode;\r\n }\r\n }\r\n\r\n return addressLine3;\r\n };\r\n\r\n this.GetAddressLine4 = function (address) {\r\n var addressLine4 = null;\r\n\r\n if (angular.isUndefined(address) || address === null) {\r\n return addressLine4;\r\n }\r\n\r\n if (address.country) {\r\n addressLine4 = address.country;\r\n }\r\n\r\n return addressLine4;\r\n }\r\n }\r\n app.service('AddressService', addressService);\r\n}());\r\n\nangular.module('resourceLoader', ['ng', 'pascalprecht.translate']).provider('resourceLoader', ['$translatePartialLoaderProvider', function ($translatePartialLoaderProvider) {\r\n this.loadTranslations = function (translationParts) {\r\n return ['$q', '$translate', 'tmhDynamicLocale', 'localStorageService', function ($q, $translate, tmhDynamicLocale, localStorageService) {\r\n\r\n var deferred = $q.defer();\r\n var preferences = angular.fromJson(localStorageService.get('preferences'));\r\n\r\n if (preferences) {\r\n tmhDynamicLocale.set(preferences.culture.toLowerCase());\r\n }\r\n\r\n angular.forEach(translationParts, function (translationPart) {\r\n $translatePartialLoaderProvider.addPart(translationPart);\r\n });\r\n\r\n $translate.refresh().then(function () {\r\n if (preferences) {\r\n $translate.use(preferences.culture.toLowerCase());\r\n deferred.resolve();\r\n } else {\r\n deferred.resolve();\r\n }\r\n }, function () {\r\n deferred.reject();\r\n });\r\n return deferred.promise;\r\n }];\r\n };\r\n this.$get = function () {\r\n var service = function () { };\r\n return service;\r\n };\r\n}]);\r\n\n(function() {\r\n 'use strict';\r\n WalkthroughService.$inject = ['$resource', 'API_BASE_URL'];\r\n function WalkthroughService($resource, API_BASE_URL) {\r\n return $resource(API_BASE_URL + 'api/walkthrough', null, {\r\n 'getAllWalkthroughs': {method: 'GET', url: API_BASE_URL + 'api/user/:userId/walkthrough', isArray: true},\r\n 'getWalkthrough': { method: 'GET', url: API_BASE_URL + 'api/walkthrough/:walkthroughID'},\r\n 'insertUserWalkthrough': { method: 'POST', url: API_BASE_URL + 'api/user/walkthrough/'}\r\n });\r\n }\r\n angular.module('NavisphereOnline').factory('WalkthroughService', WalkthroughService);\r\n}\r\n\r\n)();\r\n\n(function() {\r\n 'use strict';\r\n User.$inject = ['$resource', '$http', 'API_BASE_URL'];\r\n function User($resource, $http, API_BASE_URL) {\r\n return $resource(API_BASE_URL + 'api/users', null, {\r\n 'getPreferences': { method: 'GET', url: API_BASE_URL + 'api/users/preferences' },\r\n 'savePreferences': { method: 'POST', url: API_BASE_URL + 'api/users/preferences' },\r\n 'getInvitation': { method: 'GET', url: API_BASE_URL + 'api/users/invitationuser' },\r\n 'exists': { method: 'GET', url: API_BASE_URL + 'api/users/exists' },\r\n 'getCustomerProfilePermissions': { method: 'GET', url: API_BASE_URL + 'api/users/permissions' , isArray : true },\r\n 'getRoles': { method: 'GET', url: API_BASE_URL + 'api/users/roles' },\r\n 'getDepartments': { method: 'GET', url: API_BASE_URL + 'api/users/departments' },\r\n 'getCreateOrderCustomers': {\r\n method: 'GET',\r\n url: API_BASE_URL + 'api/users/createordercustomers',\r\n transformResponse: appendTransform($http.defaults.transformResponse, function(userCustomersResponse) {\r\n var recentCustomerCodes = userCustomersResponse.recentCustomerCodes;\r\n var customers = userCustomersResponse.customers;\r\n userCustomersResponse.recentCustomers = [];\r\n\r\n angular.forEach(recentCustomerCodes, function(recentCustCode) {\r\n angular.forEach(customers, function(cust) {\r\n if (cust.partyCode.trim() == recentCustCode.trim())\r\n userCustomersResponse.recentCustomers.push(cust);\r\n });\r\n });\r\n\r\n return userCustomersResponse;\r\n })\r\n },\r\n 'getQuoteCustomers': { method: 'GET', url: API_BASE_URL + 'api/users/quotecustomers' },\r\n 'getPoDrawCustomers': { method: 'GET', url: API_BASE_URL + 'api/users/getpodrawcustomers'},\r\n 'getReverseLogisticsCustomers': { method: 'GET', url: API_BASE_URL + 'api/users/getreverselogisticscustomers'},\r\n 'getWidgets': { method: 'GET', url: API_BASE_URL + 'api/users/widgets' },\r\n 'saveWidgets': { method: 'POST', url: API_BASE_URL + 'api/users/widgets' },\r\n 'getInteropToken': {method: 'GET', url: API_BASE_URL + 'api/users/interoptoken'}\r\n });\r\n }\r\n\r\n function appendTransform(defaults, transform) {\r\n\r\n // We can't guarantee that the default transformation is an array\r\n defaults = angular.isArray(defaults) ? defaults : [defaults];\r\n\r\n // Append the new transformation to the defaults\r\n return defaults.concat(transform);\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('User', User);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function userApplicationService($resource, API_COMMON_URL) {\r\n\r\n return $resource(API_COMMON_URL + 'Users/Applications', null, {\r\n 'getUserApplications': { method: 'GET', url: API_COMMON_URL + 'Users/Applications' }\r\n });\r\n }\r\n userApplicationService.$inject = ['$resource', 'API_COMMON_URL'];\r\n\r\n angular.module('NavisphereOnline').factory('UserApplicationService', userApplicationService);\r\n})();\r\n\r\n\n(function () {\r\n 'use strict';\r\n function subscriptionsEventsService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/subscriptions/events/:eventTypeNumber?inApp=:inApp&shouldEmail=:shouldEmail', { eventTypeNumber: '@eventTypeNumber', inApp: '@inApp', shouldEmail: '@shouldEmail'});\r\n }\r\n\r\n subscriptionsEventsService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('SubscriptionsEventsService', subscriptionsEventsService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function subscriptionService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/subscription', null, {\r\n 'get': {method: 'GET', url: API_BASE_URL + 'api/subscription', isArray : true },\r\n 'saveNotificationPreferences': {method: 'POST', url: API_BASE_URL + 'api/users/notificationpreferences', isArray : true }\r\n });\r\n }\r\n subscriptionService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('SubscriptionService', subscriptionService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function shipmentService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL, null, {\r\n 'getShipmentsAtAGlance': { method: 'GET', url: API_BASE_URL + 'api/shipments/search/dashboard' },\r\n });\r\n }\r\n shipmentService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('ShipmentService', shipmentService);\r\n})();\r\n\n/**\r\n * Created by okoaset on 3/30/2016.\r\n */\r\n(function () {\r\n 'use strict';\r\n function roleService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/widgets', null, {\r\n 'getWidgets': { method: 'GET', url: API_BASE_URL + 'api/roles/:id/widgets', isArray: true }\r\n });\r\n }\r\n roleService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('RoleService', roleService);\r\n})();\r\n\r\n\n(function () {\r\n 'use strict';\r\n reverseLogisticsResource.$inject = ['$resource', 'API_BASE_URL'];\r\n function reverseLogisticsResource($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/reverseLogistics', null, {\r\n 'search': { method: 'POST', url: API_BASE_URL + 'api/reverseLogistics/search' },\r\n\t 'getTicket': { method: 'GET', url: API_BASE_URL + 'api/tickets/:ticketId' },\r\n\t 'createNote': {method: 'POST', url: API_BASE_URL + 'api/tickets/event' },\r\n 'getNotes': { method: 'GET', url: API_BASE_URL + 'api/reverseLogistics/getNotes/:ticketId', isArray: true },\r\n 'getProcessingFee': { method: 'GET', url: API_BASE_URL + 'api/reverseLogistics/processingFee/:cCode', isArray: false },\r\n 'getRefNumTypes': { method: 'GET', url: API_BASE_URL + 'api/reverseLogistics/refnumtypes', isArray: true }\r\n });\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('ReverseLogisticsResource', reverseLogisticsResource);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function reportingService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/orders', null, {\r\n 'onTime': { method: 'GET', url: API_BASE_URL + 'api/reports/onTime' },\r\n 'onTimePeriod': { method: 'GET', url: API_BASE_URL + 'api/reports/onTimeByPeriod', isArray: true },\r\n 'servicePerformance': { method: 'GET', url: API_BASE_URL + 'api/reports/servicePerformance' },\r\n 'inTransitV2': { method: 'GET', url: API_BASE_URL + 'api/reports/inTransitOrdersV2' },\r\n 'overdueOrders': { method: 'GET', url: API_BASE_URL + 'api/reports/overdueOrders' },\r\n 'historicOrders': { method: 'GET', url: API_BASE_URL + 'api/reports/historicOrders', timeout: 120000, isArray: true },\r\n 'historicOrdersModes': { method: 'GET', url: API_BASE_URL + 'api/reports/historicOrdersModes', isArray:true},\r\n 'reportingModeSet': {method: 'GET', url: API_BASE_URL + 'api/reports/reportingModeSet', isArray: true},\r\n 'ordersSummaryReport': {method: 'GET', url: API_BASE_URL + 'api/reports/ordersSummary'},\r\n 'ordersSummaryReportExport': {method: 'POST', url: API_BASE_URL + 'api/reports/ordersSummary/export'\r\n ,responseType: 'blob'\r\n ,transformResponse: function(response) {\r\n response.data = response;\r\n return response\r\n }\r\n },\r\n 'locationReport': {method: 'GET', url: API_BASE_URL + 'api/reports/location'},\r\n 'locationReportExport': {method: 'POST', url: API_BASE_URL + 'api/reports/location/export'\r\n ,responseType: 'blob'\r\n ,transformResponse: function(response) {\r\n response.data = response;\r\n return response\r\n }\r\n },\r\n 'selectSavedReportConfig': { method: 'GET', url: API_BASE_URL + 'api/reports/:reportName/configuration'},\r\n 'insertSavedReportConfig': { method: 'POST', url: API_BASE_URL + 'api/reports/configuration'},\r\n 'updateSavedReportConfig': { method: 'PUT', url: API_BASE_URL + 'api/reports/configuration/:savedReportConfigId'},\r\n 'deleteSavedReportConfig': { method: 'DELETE', url: API_BASE_URL + 'api/reports/configuration/:savedReportConfigId'},\r\n 'ordersSummaryCustomers' : { method:'GET', url: API_BASE_URL + 'api/reports/ordersummary/customers'},\r\n 'locationCustomers' : { method:'GET', url: API_BASE_URL + 'api/reports/location/customers'},\r\n 'reportConfigSubscription': {method: 'GET', url: API_BASE_URL + 'api/reports/:reportName/schedules'},\r\n 'subscriptionSummary' : {method: 'GET', url: API_BASE_URL + 'api/reports/subscriptions'},\r\n 'subscriptionDetail' : { method: 'GET', url: API_BASE_URL + 'api/reports/subscription/:savedReportConfigId'},\r\n 'insertSubscription' : {method: 'POST', url: API_BASE_URL + 'api/reports/subscription'},\r\n 'deleteSubscription' : { method: 'DELETE', url: API_BASE_URL + 'api/reports/subscription/:savedReportConfigId'},\r\n 'downloadFile' : {method: 'GET', url: API_BASE_URL + 'api/reports/downloadFile'\r\n ,responseType: 'blob'\r\n ,transformResponse: function(response) {\r\n response.data = response;\r\n return response\r\n }\r\n }\r\n });\r\n }\r\n reportingService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('ReportingService', reportingService);\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n function ReferenceData($resource, API_BASE_URL) {\r\n return $resource(API_BASE_URL + 'api/referencedata', null, {\r\n 'get': { method: 'GET', isArray: true },\r\n 'getTimeformats': { method: 'GET', isArray: true, url: API_BASE_URL + 'api/referencedata/timeformats' },\r\n 'getCultures': { method: 'GET', isArray: true, url: API_BASE_URL + 'api/referencedata/timeformats' },\r\n 'getUnitofmeasures': { method: 'GET', isArray: true, url: API_BASE_URL + 'api/referencedata/unitofmeasures' },\r\n 'getServiceOfferings': {method:'GET', isArray: true, url: API_BASE_URL + 'api/referencedata/serviceofferings'}\r\n });\r\n }\r\n\r\n ReferenceData.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('ReferenceData', ReferenceData);\r\n})();\r\n\r\n\n(function () {\r\n 'use strict';\r\n function quoteService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/quotes', null, {\r\n 'getQuoteDetails': {method: \"GET\", url: API_BASE_URL + 'api/quotes/getquotedetail/:quoteRequestId/:quoteId'},\r\n 'getQuoteHistory': {method: \"POST\", url: API_BASE_URL + 'api/quotes/quotehistory'},\r\n 'getTransactionalPricingFlag': { method: 'GET', url: API_BASE_URL + \"api/quotes/:customerCode/gettransactionalpricingflag\"},\r\n 'sendEmail': { method: 'POST', url: API_BASE_URL + 'api/quotes/email' },\r\n 'setAccessorialChecked': {method: \"POST\", url: API_BASE_URL + 'api/quotes/accessorialChecked'}\r\n });\r\n }\r\n quoteService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('QuoteService', quoteService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function purchaseOrderService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/purchaseorders', null, {\r\n 'availableItems': { method: 'POST', url: API_BASE_URL + 'api/purchaseorders/availableitems' }\r\n });\r\n }\r\n purchaseOrderService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('PurchaseOrderService', purchaseOrderService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n PreferredCarrierResource.$inject = ['$resource', 'API_BASE_URL'];\r\n function PreferredCarrierResource($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/PreferredCarriers', null, {\r\n 'get': { method: 'GET', url: API_BASE_URL + 'api/PreferredCarriers' }\r\n });\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('PreferredCarrierResource', PreferredCarrierResource);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function orderService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/orders', null, {\r\n 'getOrderNumber': { method: 'GET', url: API_BASE_URL + 'api/orderNumber/:confirmationNumber' },\r\n 'search': { method: 'POST', url: API_BASE_URL + 'api/orders/search' },\r\n 'getOrdersAtAGlance': { method: 'POST', url: API_BASE_URL + 'api/orders/search/dashboard' },\r\n 'getOrder': { method: 'GET', url: API_BASE_URL + 'api/Orders/:orderNumber' },\r\n 'getRecentOrders': { method: 'GET', url: API_BASE_URL + 'api/orders/recent', isArray: true },\r\n 'getRecentOrdersAtAGlance': { method: 'GET', url: API_BASE_URL + 'api/orders/recent/dashboard', isArray: true },\r\n 'update': { method: 'PUT', url: API_BASE_URL + 'api/orders' },\r\n 'sendTracking': { method: 'POST', url: API_BASE_URL + 'api/orders/sendtracking' }\r\n });\r\n }\r\n orderService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('OrderService', orderService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n OrderLoadResource.$inject = [\"$resource\"];\r\n angular\r\n .module('NavisphereOnline')\r\n .factory('OrderLoadResource', OrderLoadResource);\r\n\r\n /** @ngInject */\r\n function OrderLoadResource($resource) {\r\n var baseUrl = appConfig.searchGatewayApiBaseUrl;\r\n\r\n return $resource(baseUrl, null, {\r\n getShipments: { method: 'POST', url: baseUrl + '/map/search' },\r\n getClusterDetails: { method: 'POST', url: baseUrl + '/map/details', isArray: true },\r\n getClusterDetailsContinent: { method: 'POST', url: baseUrl + '/map/continent', isArray: true },\r\n getClusterDetailsCountry: { method: 'POST', url: baseUrl + '/map/country', isArray: true },\r\n getClusterDetailsState: { method: 'POST', url: baseUrl + '/map/state', isArray: true }\r\n });\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n OrderEditRulesService.$inject = ['$resource', 'API_BASE_URL'];\r\n\r\n function OrderEditRulesService($resource, API_BASE_URL) {\r\n return $resource(API_BASE_URL + 'api/OrderEditRules', null, {\r\n 'getOrderEditRules': { method: 'GET', url: API_BASE_URL + 'api/OrderEditRules', isArray: true }\r\n });\r\n }\r\n\r\n app.service('OrderEditRulesService', OrderEditRulesService);\r\n})();\n(function () {\r\n 'use strict';\r\n LockService.$inject = ['$resource', 'API_BASE_URL'];\r\n function LockService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/locks', null, {\r\n 'lockOrder': { method: 'POST', url: API_BASE_URL + 'api/locks' },\r\n 'releaseOrder': { method: 'DELETE', url: API_BASE_URL + 'api/locks' }\r\n });\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('LockService', LockService);\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n LocationService.$inject = ['$resource', 'API_BASE_URL'];\r\n function LocationService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/Locations', null, {\r\n 'search': { method: 'GET', url: API_BASE_URL + 'api/Locations/search' },\r\n 'searchPartyLocation': { method: 'GET', url: API_BASE_URL + 'api/Locations/:partyNumberOrCode/search' },\r\n 'getLocation': { method: 'GET', url: API_BASE_URL + 'api/Locations/:locationPartyNumberOrCode' },\r\n 'getRecentOrigins': { method: 'GET', isArray: true, url: API_BASE_URL + 'api/Locations/:customerCode/recentorigin' },\r\n 'getRecentDestinations': { method: 'GET', isArray: true, url: API_BASE_URL + 'api/Locations/:customerCode/recentdestination' },\r\n 'getStates': {method: 'GET', isArray: true, url: API_BASE_URL + 'api/locations/getstates/:countryCode'},\r\n 'recommendedAddress': { method: 'POST', url: API_BASE_URL + 'api/locations/recommendedaddress' },\r\n 'addSupplierLocation': { method: 'POST', url: API_BASE_URL + 'api/locations/addsupplierlocation' },\r\n 'addCustomerLocation': { method: 'POST', url: API_BASE_URL + 'api/locations/customer' },\r\n 'getCities': {method: 'GET', isArray: true, url: API_BASE_URL + 'api/locations/cities/:zipCode'}\r\n });\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('LocationService', LocationService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n ItemService.$inject = ['$resource', 'API_BASE_URL'];\r\n\r\n function ItemService ($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/commodities', null, {\r\n 'get': {method: 'GET', url: API_BASE_URL + 'api/commodities/:itemId'},\r\n 'search': { method: 'GET', url: API_BASE_URL + 'api/commodities/:customerCode/search' },\r\n 'searchitems': { method: 'GET', url: API_BASE_URL + 'api/commodities/:customerCode/:term/searchitemsbyterm' },\r\n 'create': { method: 'POST', url: API_BASE_URL + 'api/commodities' },\r\n 'innerPacks': { method: 'GET', url: API_BASE_URL + 'api/commodities/innerpacks', isArray: true },\r\n 'masterPacks': { method: 'GET', url: API_BASE_URL + 'api/commodities/masterpacks', isArray: true }\r\n });\r\n }\r\n angular.module('NavisphereOnline').factory('ItemService', ItemService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n InvitationService.$inject = ['$resource', 'API_BASE_URL'];\r\n function InvitationService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/invitation', null, {\r\n 'GetInvitationExpired': { method: 'Get', url: API_BASE_URL + 'api/invitation/:invitationId/expired' }\r\n });\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('InvitationService', InvitationService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function InternalHeaderService($resource, API_COMMON_URL) {\r\n\r\n return $resource(API_COMMON_URL + 'Applications', null, {\r\n 'getBannerMessageByAppId': { method: 'GET', url: API_COMMON_URL + 'Applications/:applicationId/Banners' }\r\n });\r\n }\r\n InternalHeaderService.$inject = ['$resource', 'API_COMMON_URL'];\r\n angular.module('NavisphereOnline').factory('InternalHeaderService', InternalHeaderService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n DocumentService.$inject = ['$resource', 'API_BASE_URL'];\r\n function DocumentService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/documents', null, {\r\n 'getBOL': { method: 'GET', url: API_BASE_URL + 'api/documents/bol', responseType: 'arraybuffer' },\r\n 'getPalletLabel': { method: 'GET', url: API_BASE_URL + 'api/documents/palletLabel', responseType: 'arraybuffer' },\r\n 'getInvoice': {method: 'GET', url:API_BASE_URL + 'api/documents/invoice', responseType: 'arraybuffer' },\r\n 'sendDocument': { method: 'POST', url: API_BASE_URL + 'api/documents/sendDocument' },\r\n 'sendDocuments': { method: 'POST', url: API_BASE_URL + 'api/documents/sendDocuments' },\r\n 'sendShipmentDocuments': { method: 'POST', url: API_BASE_URL + 'api/documents/sendShipmentDocuments' },\r\n 'sendBol': { method: 'POST', url: API_BASE_URL + 'api/documents/sendBol' },\r\n 'sendPalletlabel': { method: 'POST', url: API_BASE_URL + 'api/documents/sendPalletlabel' },\r\n 'getAll': { method: 'GET', url: API_BASE_URL + 'api/documents/all', isArray: true},\r\n 'combine': { method: 'GET', url: API_BASE_URL + 'api/documents/combine', responseType: 'arraybuffer' },\r\n 'getReverseLogisticsDocuments': { method: 'GET', url: API_BASE_URL + 'api/reverselogisticsdocuments/:ticketId', isArray: true },\r\n 'getBolSettings': { method: 'GET', url: API_BASE_URL + 'api/:partyCode/documents/settings/bolSettings' },\r\n 'getDefaultOrderDocuments': { method: 'GET', url: API_BASE_URL + 'api/:partyCode/documents/defaultOrderDocuments/:orderNumber', isArray: true }\r\n });\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('DocumentService', DocumentService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n CustomerPartyService.$inject = ['$resource', 'API_BASE_URL'];\r\n function CustomerPartyService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/customer', null, {\r\n 'getBOLComment': {method: 'GET', url: API_BASE_URL + 'api/customer/:partyNumberOrCode/bolComment'},\r\n 'getOnlineContact': {method: 'GET', url: API_BASE_URL + 'api/customer/:partyCode/onlineContact'}\r\n });\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('CustomerPartyService', CustomerPartyService);\r\n})();\r\n\n\r\n(function () {\r\n 'use strict';\r\n function CultureRecommendation($resource, API_BASE_URL) {\r\n return $resource(API_BASE_URL + 'api/culturerecommendations', null, {\r\n 'getCultureRecommendation': { method: 'GET', isArray: true, url: API_BASE_URL + 'api/culturerecommendation' },\r\n 'getCultureRecommendations': { method: 'GET', isArray: true, url: API_BASE_URL + 'api/culturerecommendations' }\r\n\r\n });\r\n }\r\n\r\n CultureRecommendation.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('CultureRecommendation', CultureRecommendation);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function carrierLogService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/carrierlogs', null, {\r\n 'get': {method: 'GET', url: API_BASE_URL + 'api/carrierlogs/:orderNumber', isArray: true}\r\n });\r\n }\r\n carrierLogService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('CarrierLogService', carrierLogService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function alertService($resource, API_BASE_URL) {\r\n return $resource(API_BASE_URL + 'api/alerts', null, {\r\n 'getAlerts': { method: 'GET', isArray : true },\r\n 'dismiss': { method: 'PUT', url: API_BASE_URL + 'api/alerts/:id', params : {\r\n id : \"@id\"\r\n } , isArray : true }\r\n });\r\n }\r\n alertService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('AlertService', alertService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function AcknowledgementService($resource, API_COMMON_URL) {\r\n\r\n return $resource(API_COMMON_URL + 'Applications', null, {\r\n 'readAcknowledgements': { method: 'GET', url: API_COMMON_URL + 'Acknowledgements',\r\n headers: {'Cache-Control': 'no-store, private, no-cache, must-revalidate', 'Pragma': 'no-cache'}\r\n },\r\n 'acknowledgeAcknowledgement': { method: 'PUT', url: API_COMMON_URL + 'Acknowledgements/:name/Acknowledge',\r\n params : {\r\n name : \"@name\"\r\n }\r\n }\r\n });\r\n }\r\n AcknowledgementService.$inject = ['$resource', 'API_COMMON_URL'];\r\n angular.module('NavisphereOnline').factory('AcknowledgementService', AcknowledgementService);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n\r\n WalkthroughHelper.$inject = ['localStorageService', '$state', 'WalkthroughService'];\r\n function WalkthroughHelper(localStorageService, $state, WalkthroughService) {\r\n return {\r\n selectWalkthrough: selectWalkthrough,\r\n getCachedWalkthrough: getCachedWalkthrough,\r\n recacheWalkthroughs: recacheWalkthroughs\r\n };\r\n\r\n /**\r\n * Determines what walkthrough actions to perform based on user profile.\r\n * If showing a walkthrough, caches walkthrough so that it won't be shown again in current session.\r\n *\r\n * @param state {object}\r\n * @param walkthroughs {array}\r\n * @returns {object|null}\r\n */\r\n function selectWalkthrough(state, walkthroughs) {\r\n var currentWalkthrough;\r\n\r\n _.forEach(walkthroughs, function (walkthrough) {\r\n if (walkthrough.AngularState === state.name) {\r\n currentWalkthrough = walkthrough;\r\n }\r\n });\r\n\r\n return currentWalkthrough;\r\n }\r\n\r\n /**\r\n * Recaching the walkthroughs needs to be done separately from getCachedWalkthrough and selectWalkthrough\r\n * to update localStorage's list of walkthroughs with the current user's ID. Otherwise, walkthroughs would\r\n * potentially be recached at inapporpriate times. Recaching and updating the User ID indicates that\r\n * a user viewed a given walkthrough during their session.\r\n */\r\n function recacheWalkthroughs() {\r\n var walkthroughs = localStorageService.get(\"walkthroughs\");\r\n var state = $state.current;\r\n\r\n _.forEach(walkthroughs, function (walkthrough) {\r\n if(walkthrough.AngularState === state.name) {\r\n walkthrough.Dismissed = true;\r\n localStorageService.set(\"walkthroughs\", walkthroughs);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Signals to the internalHeaderController whether to show walkthrough, so as not to show\r\n * a walkthrough to a user multiple times.\r\n *\r\n * @returns {object|null}\r\n */\r\n function getCachedWalkthrough() {\r\n var walkthroughs = localStorageService.get(\"walkthroughs\");\r\n var state = $state.current;\r\n\r\n if (walkthroughs) {\r\n return selectWalkthrough(state, walkthroughs);\r\n }\r\n }\r\n }\r\n angular.module('NavisphereOnline').service('WalkthroughHelper', WalkthroughHelper);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n UserServiceHelper.$inject = [\"localStorageService\", \"User\"];\r\n\r\n function UserServiceHelper(localStorageService, User) {\r\n return {\r\n get: get\r\n };\r\n\r\n /**\r\n * @returns {Promise.}\r\n */\r\n function get() {\r\n var storedUser = localStorageService.get(\"User\");\r\n\r\n if (storedUser) {\r\n return storedUser;\r\n } else {\r\n return User.get().$promise.then(function (user) {\r\n localStorageService.set(\"User\", user);\r\n\r\n return user;\r\n });\r\n }\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').service('UserServiceHelper', UserServiceHelper);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n OrderLockHelper.$inject = [\"LockService\", \"OrderLockPromptService\", \"authService\", \"API_BASE_URL\"];\r\n\r\n function OrderLockHelper(LockService, OrderLockPromptService, authService, API_BASE_URL) {\r\n\r\n var orderNumber = null;\r\n\r\n function releaseOrderLock(){\r\n var lock = OrderLockPromptService.lock;\r\n OrderLockPromptService.lock = null;\r\n if(lock){\r\n var lockOrderNumber = orderNumber;\r\n var userName = lock.user;\r\n var application = lock.application;\r\n var machine = lock.machine;\r\n\r\n orderNumber = null;\r\n return LockService.releaseOrder({\r\n orderNumber: lockOrderNumber,\r\n user: userName,\r\n application: application,\r\n machine: machine\r\n }).$promise;\r\n }\r\n };\r\n\r\n function releaseOrderLockSync(){\r\n var lock = OrderLockPromptService.lock;\r\n if(lock){\r\n $.ajax({\r\n method: 'DELETE',\r\n beforeSend: function (request) {\r\n request.setRequestHeader(\"Authorization\", \"Bearer \" + authService.getAccessToken());\r\n return true;\r\n },\r\n url: API_BASE_URL + 'api/locks'\r\n + '?user=' + encodeURIComponent(lock.user)\r\n + '&application=' + encodeURIComponent(lock.application)\r\n + '&machine=' + encodeURIComponent(lock.machine)\r\n + '&orderNumber=' + encodeURIComponent(orderNumber)\r\n ,\r\n async: false\r\n });\r\n }\r\n orderNumber = null;\r\n OrderLockPromptService.lock = null;\r\n };\r\n\r\n function lockOrder(newOrderNumber){\r\n orderNumber = newOrderNumber;\r\n return LockService.lockOrder(newOrderNumber);\r\n };\r\n\r\n function logoutFunction(){\r\n var lock = OrderLockPromptService.lock;\r\n if(lock){\r\n return releaseOrderLock();\r\n }\r\n return;\r\n };\r\n\r\n authService.addLogoutFunction(logoutFunction);\r\n\r\n return {\r\n releaseOrderLock: releaseOrderLock,\r\n releaseOrderLockSync: releaseOrderLockSync,\r\n lockOrder: lockOrder\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').factory('OrderLockHelper', OrderLockHelper);\r\n})();\r\n\n/*global moment */\r\n(function () {\r\n\t\"use strict\";\r\n\t\r\n function LocationDateHelper(DateTimeService) {\r\n\t\t/**\r\n\t\t * @param {Date} options.newValue\r\n\t\t * @param {delivery|pickup} options.orderType \r\n\t\t * @param {$scope.order} options.scopeOrder \r\n\t\t * @param {$scope.$parent.order} options.scopeParentOrder \r\n\t\t * @desc returns the earliest and latest time for a delivery or pickup\r\n\t\t * based on the dryShippingHours or dryReceivingHours respectively\r\n\t\t */\r\n function getEarliestAndLatestTimeFromScopeOrder(options) {\r\n\t\t\tvar newValue = options.newValue;\r\n\t\t\tvar orderType = options.orderType; // delivery or pickup\r\n\t\t\tvar scopeOrder = options.scopeOrder;\r\n\t\t\tvar scopeParentOrder = options.scopeParentOrder;\r\n\t\t\tvar hoursProperty = orderType === 'delivery' ? 'dryReceivingHours' : 'dryShippingHours' ;\r\n\t\t\tvar times = {}\r\n\t\t\t\r\n\t\t\tif (newValue\r\n\t\t\t\t// $scope.order check was in pickupController.js prior to extraction. Not sure if it's still required,\r\n\t\t\t\t// but keeping it in to avoid possible bugs.\r\n\t\t\t\t&& scopeOrder[orderType]\r\n\t\t\t\t&& scopeParentOrder[orderType][hoursProperty]\r\n\t\t\t) {\r\n\t\t\t\t// hours = $scope.$parent.order.(delivery|pickup).(dryReceivingHours|dryShippingHours)\r\n\t\t\t\tvar hours = scopeParentOrder[orderType][hoursProperty]\r\n\t\t\t\tvar day = newValue.getDay();\r\n\t\t\t\tvar dayName = DateTimeService.getWeekDayName(day);\r\n\t\t\t\tvar dayClosedKey = dayName + 'Closed';\r\n\t\t\t\tvar dayOpenTimeKey = dayName + 'OpenTime';\r\n\t\t\t\tvar dayCloseTimeKey = dayName + 'CloseTime';\r\n\t\t\t\t\r\n\t\t\t\t// if closed\r\n\t\t\t\tif (hours[dayClosedKey]) {\r\n\t\t\t\t\treturn times;\r\n\t\t\t\t}\r\n\t\t\t\t// if open time exists\t\t\t\t\r\n\t\t\t\tif (hours[dayOpenTimeKey]) {\r\n\t\t\t\t\ttimes.earliestTime = new Date(hours[dayOpenTimeKey]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if close time exists\r\n\t\t\t\tif (hours[dayCloseTimeKey]) {\r\n\t\t\t\t\ttimes.latestTime = new Date(hours[dayCloseTimeKey]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn times;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * @description returns the closeTime of the supplied date day of the week if present\r\n\t\t * @param {dryShippingHours|dryReceivingHours} hours\r\n\t\t * @param {Date} date date that determines which day of the week is used\r\n\t\t * @returns Date | null\r\n\t\t */\r\n\t\tfunction getCloseTimeFromHours(hours, date){\r\n\t\t\tvar dayName = getDayNameFromDate(date);\r\n\t\t\tvar dayClosedKey = dayName + 'Closed';\r\n\t\t\tvar dayCloseTimeKey = dayName + 'CloseTime';\r\n\t\t\t\r\n\t\t\t// if closed or no time exists\r\n\t\t\tif (hours[dayClosedKey] || !hours[dayCloseTimeKey]) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// close time exists\r\n\t\t\treturn new Date(hours[dayCloseTimeKey]);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * @description returns the openTime of the supplied date day of the week if present\r\n\t\t * @param {dryShippingHours|dryReceivingHours} hours\r\n\t\t * @param {Date} date date that determines which day of the week is used\r\n\t\t * @returns Date | null\r\n\t\t */\r\n\t\tfunction getOpenTimeFromHours(hours, date){\r\n\t\t\tvar dayName = getDayNameFromDate(date);\r\n\t\t\tvar dayClosedKey = dayName + 'Closed';\r\n\t\t\tvar dayOpenTimeKey = dayName + 'OpenTime';\r\n\t\t\t\r\n\t\t\t// if closed or no time exists\r\n\t\t\tif (hours[dayClosedKey] || !hours[dayOpenTimeKey]) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// close time exists\r\n\t\t\treturn new Date(hours[dayOpenTimeKey]);\r\n\t\t}\r\n\r\n\t\tfunction getDayNameFromDate(date) {\r\n\t\t\tvar day = date.getDay();\r\n\t\t\treturn DateTimeService.getWeekDayName(day);\r\n\t\t}\r\n\r\n return {\r\n\t\t\tgetEarliestAndLatestTimeFromScopeOrder: getEarliestAndLatestTimeFromScopeOrder,\r\n\t\t\tgetCloseTimeFromHours: getCloseTimeFromHours,\r\n\t\t\tgetOpenTimeFromHours: getOpenTimeFromHours\r\n };\r\n\t}\r\n\r\n\tLocationDateHelper.$inject = ['DateTimeService'];\r\n\t\r\n angular.module('NavisphereOnline').service('LocationDateHelper', LocationDateHelper);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n ListStringHelper.$inject = [];\r\n\r\n function ListStringHelper() {\r\n /**\r\n * @param {Array} arr - Array of strings\r\n * @param {string} and - Translated string for 'and'\r\n * @returns {string}\r\n */\r\n this.buildListString = function (arr, and) {\r\n switch (arr.length) {\r\n case 0:\r\n return '';\r\n case 1:\r\n return arr[0];\r\n case 2:\r\n return arr.join(' ' + and + ' ');\r\n default: {\r\n var str = arr.shift();\r\n _.forEach(arr, function (element, idx) {\r\n if (idx < arr.length - 1) {\r\n str += ', ' + element;\r\n } else {\r\n str += ', ' + and + ' ' + element;\r\n }\r\n });\r\n return str;\r\n }\r\n }\r\n };\r\n\r\n return this;\r\n }\r\n\r\n angular.module('NavisphereOnline').service('ListStringHelper', ListStringHelper);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n ItemServiceHelper.$inject = [\"ItemService\"];\r\n\r\n function ItemServiceHelper(ItemService) {\r\n return {\r\n searchHelper: searchHelper\r\n };\r\n\r\n /**\r\n * Convenience function for the ItemService.search method.\r\n *\r\n * Searches for commodities specific to the customer that the user has selected.\r\n *\r\n * @param search {String}\r\n * @param customer {Object}\r\n * @param scope {Object}\r\n * @param shouldAddProperties {Bool}\r\n * @returns {Promise.} List of commodities\r\n */\r\n function searchHelper(search, customer, scope, shouldAddProperties) {\r\n return ItemService.search({\r\n customerCode: (customer.useSupplierCatalog && scope.user && scope.user.isSupplier)\r\n ? scope.user.supplierPartyCode\r\n : customer.partyCode.replace(/^\\s+|\\s+$/gm, \"\"),\r\n term: search,\r\n limit: scope.maxSearchResultLimit\r\n }, function(data) {\r\n if (shouldAddProperties) {\r\n _.forEach(data.items, function(item) {\r\n item.commodity = angular.copy(item);\r\n item.freightClass = (item.freightClass) ? item.freightClass.toString() : \"\";\r\n })\r\n }\r\n\r\n return data.items;\r\n }).$promise.then(function(resource) {\r\n if (resource.items.length < 1) {\r\n scope.itemsNoResults = true;\r\n scope.maxItemSearchResults = false;\r\n } else {\r\n scope.itemsNoResults = false;\r\n scope.maxItemSearchResults = resource.items.length >= scope.maxSearchResultLimit;\r\n }\r\n\r\n return _.sortBy(resource.items, [function(i) { return i.commodityName }]);\r\n })\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').service('ItemServiceHelper', ItemServiceHelper);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n DocumentHelper.$inject = [\"authService\", \"$document\"];\r\n\r\n function DocumentHelper(authService, $document) {\r\n return {\r\n showDocument: showDocument\r\n };\r\n\r\n function showDocument(url) {\r\n var form = $document[0].createElement('form');\r\n form.setAttribute(\"method\", \"post\");\r\n form.setAttribute(\"action\", url);\r\n var hiddenField = $document[0].createElement(\"input\");\r\n hiddenField.setAttribute(\"type\", \"hidden\");\r\n hiddenField.setAttribute(\"name\", \"access_token\");\r\n hiddenField.setAttribute(\"value\", authService.getAccessToken());\r\n form.setAttribute(\"target\", \"_blank\");\r\n form.appendChild(hiddenField);\r\n $document[0].body.appendChild(form);\r\n form.submit();\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').service('DocumentHelper', DocumentHelper);\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n AcknowledgementHelper.$inject = [\"AcknowledgementService\", '$q'];\r\n\r\n function AcknowledgementHelper(AcknowledgementService, $q) {\r\n var myAcknowledgements;\r\n\r\n function init() {\r\n var acknowledgements = [];\r\n\r\n function readAcknowledgements() {\r\n AcknowledgementService.readAcknowledgements().$promise.then(function (data) {\r\n acknowledgements = data.acknowledgements;\r\n });\r\n }\r\n\r\n function updateAcknowledgement(name) {\r\n var deferred = $q.defer();\r\n var params = {\r\n 'name': name\r\n }\r\n AcknowledgementService.acknowledgeAcknowledgement(params).$promise.then(function (data) {\r\n var acknowledgement = acknowledgements && _.find(acknowledgements, ['name', data.acknowledgement.name]);\r\n if(acknowledgement) {\r\n acknowledgement.isAcknowledged = true;\r\n deferred.resolve(acknowledgement);\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n function hasAnyNotAcknowledgedAcknowledgements() {\r\n var indexOfUnAknowledgedAcknowledgement = acknowledgements && _.findIndex(acknowledgements, ['isAcknowledged', false]);\r\n return indexOfUnAknowledgedAcknowledgement >= 0;\r\n }\r\n\r\n function showAcknowledgementByName(name) {\r\n var acknowledgement = acknowledgements && _.find(acknowledgements, ['name', name]);\r\n return acknowledgement ? !acknowledgement.isAcknowledged : false;\r\n }\r\n\r\n readAcknowledgements();\r\n\r\n return {\r\n updateAcknowledgement: updateAcknowledgement,\r\n hasAnyNotAcknowledgedAcknowledgements: hasAnyNotAcknowledgedAcknowledgements,\r\n showAcknowledgementByName: showAcknowledgementByName\r\n };\r\n }\r\n\r\n return {\r\n getAcknowledgements: function() {\r\n if(!myAcknowledgements) {\r\n myAcknowledgements = init();\r\n }\r\n return myAcknowledgements;\r\n }\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').service('AcknowledgementHelper', AcknowledgementHelper);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n time.$inject = ['$filter'];\r\n function time($filter) {\r\n return function (input) {\r\n\r\n if (input instanceof Date && !isNaN(input.valueOf())) {\r\n return $filter('date')(input, 'h:mm a');\r\n }\r\n\r\n if (!input) {\r\n return '';\r\n }\r\n\r\n if (!input.date) {\r\n return '';\r\n }\r\n\r\n if (!input.userPreferences) {\r\n return '';\r\n }\r\n\r\n var isMeridian = input.userPreferences.timeFormat === '12';\r\n\r\n if (isMeridian) {\r\n return $filter('date')(input.date, 'h:mm a');\r\n } else {\r\n return $filter('date')(input.date, 'HH:mm');\r\n }\r\n }\r\n }\r\n\r\n angular.module('NavisphereOnline').filter('time', time);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n app.filter('capitalize', function () {\r\n return function (input) {\r\n if (!input) {\r\n return input;\r\n }\r\n return input.charAt(0).toUpperCase() + input.slice(1).toLowerCase();\r\n }\r\n });\r\n})();\n(function () {\r\n 'use strict';\r\n showInfoController.$inject = ['$scope', '$uibModalInstance'];\r\n function showInfoController($scope, $uibModalInstance) {\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('close');\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('showInfoController', showInfoController);\r\n})();\n/**\r\n * Created by okoaset on 5/23/2016.\r\n */\r\n\r\n(function () {\r\n 'use strict';\r\n sendTrackingController.$inject = ['$scope', '$uibModalInstance','$uibModal','OrderService','trackingNumber','user'];\r\n function sendTrackingController($scope, $uibModalInstance,$uibModal,OrderService,trackingNumber,user) {\r\n $scope.replyTos = [user.email];\r\n $scope.processing = false;\r\n $scope.trackingNumber = trackingNumber;\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('close');\r\n };\r\n function showConfirmation() {\r\n $uibModalInstance.dismiss('sent');\r\n $uibModal.open({\r\n templateUrl: 'app/common/views/emailConfirmation.tpl.html',\r\n size: 'lg',\r\n controller: 'emailConfirmationController'\r\n });\r\n $scope.processing = false;\r\n }\r\n\r\n $scope.send = function () {\r\n $scope.processing = true;\r\n var toAddress = $scope.to.split(';');\r\n OrderService.sendTracking({\r\n TrackingNumber: trackingNumber,\r\n subject: $scope.subject,\r\n replyTos: $scope.replyTos,\r\n to: toAddress,\r\n message: $scope.message\r\n }).$promise.then(function () {\r\n showConfirmation();\r\n });\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('sendTrackingController', sendTrackingController);\r\n})();\r\n\r\n\n(function () {\r\n 'use strict';\r\n emailConfirmationController.$inject = ['$scope', '$uibModalInstance'];\r\n function emailConfirmationController($scope, $uibModalInstance) {\r\n $scope.ok = function () {\r\n $uibModalInstance.dismiss('ok');\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('emailConfirmationController', emailConfirmationController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n recommendedAddressController.$inject = ['$scope', '$uibModalInstance', 'AddressService', 'recommendation', 'entered'];\r\n\r\n function recommendedAddressController($scope, $uibModalInstance, AddressService, recommendation, entered) {\r\n $scope.recommendation = recommendation;\r\n $scope.entered = entered;\r\n $scope.useRecommended = \"true\";\r\n $scope.addressCityLine = function (address) {\r\n return AddressService.GetAddressLine3(address);\r\n };\r\n $scope.ok = function () {\r\n var useRecommendationResult = {\r\n useRecommendation: $scope.useRecommended === 'true',\r\n overrideReason: $scope.useRecommended === 'false' ? $scope.overrideReason : undefined\r\n };\r\n $uibModalInstance.close(useRecommendationResult);\r\n };\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel button');\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('recommendedAddressController', recommendedAddressController);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n addLocationController.$inject = ['$scope', '$uibModalInstance', '$uibModal', '$filter', 'LocationService', 'locationType', 'ModalService', 'customer', 'supplier'];\r\n function addLocationController($scope, $uibModalInstance, $uibModal, $filter, LocationService, locationType, ModalService, customer, supplier) {\r\n var defCountry = { code: 'US', name: 'United States', phoneDialingCode: 1 };\r\n $scope.selectedDialingCode = defCountry;\r\n $scope.countries = [defCountry, { code: 'CA', name: 'Canada', phoneDialingCode: 1 }, { code: 'MX', name: 'Mexico', phoneDialingCode: 52 }];\r\n $scope.newLocation = {\r\n physicalAddress: {\r\n country: defCountry.code\r\n },\r\n contact: {\r\n phoneDialingCode: $scope.selectedDialingCode.phoneDialingCode,\r\n phoneCountryCode: $scope.selectedDialingCode.code\r\n },\r\n isOrigin: true,\r\n isDestination: true\r\n };\r\n if ($scope.needsRefinement && $scope.needsRefinement[locationType]) {\r\n $scope.newLocation.physicalAddress.stateProvince = $scope.needsRefinement[locationType].adminDistrictCode;\r\n $scope.newLocation.physicalAddress.city = $scope.needsRefinement[locationType].name;\r\n $scope.newLocation.physicalAddress.postalCode = $scope.needsRefinement[locationType].postalCode;\r\n $scope.newLocation.physicalAddress.country = $scope.needsRefinement[locationType].countryCode;\r\n\r\n $scope.isReadOnly = {\r\n city: true,\r\n country: true,\r\n postalCode: true,\r\n stateProvince: true\r\n };\r\n }\r\n $scope.countryStates = {};\r\n $scope.submittingNewLocation = false;\r\n for (var i = 0; i < $scope.countries.length; i++) {\r\n LocationService.getStates({\r\n countryCode: $scope.countries[i].code\r\n }).$promise.then(function (result) {\r\n $scope.countryStates[result[0].countryCode] = result;\r\n });\r\n }\r\n function addErrorMessages(errors) {\r\n for (var e = 0; e < errors.length; e++) {\r\n $scope.addLocationErrors.push($filter('translate')(errors[e]));\r\n }\r\n }\r\n $scope.ok = function () {\r\n $scope.addLocationErrors = [];\r\n if (!$scope.submittingNewLocation) {\r\n $scope.submittingNewLocation = true;\r\n if ($scope.newLocation.physicalAddress.county) {\r\n $scope.newLocation.physicalAddress.county = undefined;\r\n }\r\n LocationService.recommendedAddress($scope.newLocation.physicalAddress).$promise.then(function (result) {\r\n $scope.loadingModal.close();\r\n if (result.errors.length > 0) {\r\n addErrorMessages(result.errors);\r\n $scope.submittingNewLocation = false;\r\n } else {\r\n if (result.recommendationFound) {\r\n $scope.recommendedModalInstance = $uibModal.open({\r\n templateUrl: '../app/addLocationModals/views/recommendedAddress.tpl.html',\r\n size: 'lg',\r\n controller: 'recommendedAddressController',\r\n backdrop: 'static',\r\n resolve: {\r\n recommendation: function () { return result; },\r\n entered: function () { return $scope.newLocation.physicalAddress; }\r\n }\r\n });\r\n $scope.recommendedModalInstance.result.then(function (useRecommendationResult) {\r\n if (useRecommendationResult.useRecommendation) {\r\n $scope.newLocation.physicalAddress = result;\r\n $scope.overrideReason = undefined;\r\n } else {\r\n $scope.overrideReason = useRecommendationResult.overrideReason;\r\n }\r\n if ($scope.newLocation.physicalAddress.addressLine1 && $scope.newLocation.physicalAddress.stateProvince\r\n && $scope.newLocation.physicalAddress.postalCode && $scope.newLocation.physicalAddress.country) {\r\n showLoadingModal($filter('translate')('CREATING_NEW_LOCATION') + '...');\r\n\r\n if(angular.isDefined(supplier)){\r\n\r\n var request = {\r\n location: $scope.newLocation,\r\n overrideCode: $scope.overrideReason\r\n };\r\n\r\n addSupplierLocation(request, true, !useRecommendationResult.useRecommendation);\r\n } else {\r\n\r\n var request = {\r\n location: $scope.newLocation,\r\n overrideCode: $scope.overrideReason,\r\n customerPartyCode: customer\r\n };\r\n\r\n addCustomerLocation(request, true, !useRecommendationResult.useRecommendation);\r\n }\r\n } else {\r\n $scope.submittingNewLocation = false;\r\n $scope.loadingModal.close();\r\n }\r\n }, function () {\r\n $scope.submittingNewLocation = false;\r\n });\r\n }\r\n else {\r\n showLoadingModal($filter('translate')('CREATING_NEW_LOCATION') + '...');\r\n\r\n if(angular.isDefined(supplier)){\r\n var request = {\r\n location: $scope.newLocation\r\n };\r\n addSupplierLocation(request, false, false);\r\n } else {\r\n\r\n var request = {\r\n location: $scope.newLocation,\r\n customerPartyCode: customer\r\n };\r\n\r\n addCustomerLocation(request, false, false);\r\n }\r\n }\r\n }\r\n }, function () {\r\n $scope.addLocationErrors.push(\r\n $filter('translate')(\"AN_ERROR_OCCURRED_FINDING_RECOMMENDED_ADDRESS\"));\r\n $scope.submittingNewLocation = false;\r\n $scope.loadingModal.close();\r\n });\r\n showLoadingModal($filter('translate')('VALIDATING_ADDRESS') + '...');\r\n }\r\n };\r\n\r\n function showLoadingModal(message){\r\n\r\n $scope.loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: function () { return message; }\r\n }\r\n });\r\n\r\n $scope.loadingModal.result.then(function () {\r\n }, function () {\r\n });\r\n }\r\n\r\n function addSupplierLocation(request, receivedRecommendation, overrodeRecommendation){\r\n\r\n LocationService.addSupplierLocation(request)\r\n .$promise.then(function (result) {\r\n $scope.submittingNewLocation = false;\r\n $scope.loadingModal.close();\r\n if (result.errors && result.errors.length > 0) {\r\n addErrorMessages(result.errors);\r\n } else {\r\n $scope.newLocation = result.location;\r\n $uibModalInstance.close($scope.newLocation);\r\n }\r\n }, function () {\r\n $scope.addLocationErrors.push($filter('translate')(\"AN_ERROR_OCCURRED_ADDING_YOUR_LOCATION\"));\r\n $scope.submittingNewLocation = false;\r\n $scope.loadingModal.close();\r\n });\r\n }\r\n\r\n function addCustomerLocation(request, receivedRecommendation, overrodeRecommendation){\r\n\r\n LocationService.addCustomerLocation(request).$promise.then(function (result) {\r\n $scope.submittingNewLocation = false;\r\n $scope.loadingModal.close();\r\n if (result.errors && result.errors.length > 0) {\r\n addErrorMessages(result.errors);\r\n } else {\r\n $scope.newLocation = result.location;\r\n $uibModalInstance.close($scope.newLocation);\r\n }\r\n }, function () {\r\n $scope.addLocationErrors.push($filter('translate')(\"AN_ERROR_OCCURRED_ADDING_YOUR_LOCATION\"));\r\n $scope.submittingNewLocation = false;\r\n $scope.loadingModal.close();\r\n });\r\n }\r\n\r\n $scope.cancel = function () {\r\n if (!$scope.newLocationForm.$dirty) {\r\n $uibModalInstance.dismiss('cancel button');\r\n } else {\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'OK',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_CANCEL_ADDING_THIS_LOCATI',\r\n bodyText: 'CANCELLING_WILL_RESULT_IN_THE_LOSS_OF_LOCATION'\r\n };\r\n ModalService.showModal({}, modalOptions).then(function (result) {\r\n if (result === 'ok') {\r\n $uibModalInstance.dismiss('cancel button');\r\n }\r\n });\r\n }\r\n };\r\n $scope.dialCodeChanged = function () {\r\n $scope.newLocation.contact.phoneDialingCode = $scope.selectedDialingCode.phoneDialingCode;\r\n $scope.newLocation.contact.phoneCountryCode = $scope.selectedDialingCode.code;\r\n };\r\n $scope.countryDropChanged = function () {\r\n $scope.newLocation.physicalAddress.stateProvince = undefined;\r\n };\r\n $scope.locationIsOrigin = function () {\r\n $scope.newLocation.isOrigin = true;\r\n $scope.newLocation.isDestination = false;\r\n };\r\n $scope.locationIsDestination = function () {\r\n $scope.newLocation.isOrigin = false;\r\n $scope.newLocation.isDestination = true;\r\n };\r\n $scope.locationIsBoth = function () {\r\n $scope.newLocation.isOrigin = true;\r\n $scope.newLocation.isDestination = true;\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('addLocationController', addLocationController);\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n addItemController.$inject = ['$scope', '$uibModalInstance', '$filter', '$uibModal', 'itemDdlRefData',\r\n 'RefDataMappingService', 'showFlatbedAttributes', 'ModalService', 'ItemService', 'customer',\r\n 'user', 'preferences'];\r\n\r\n function addItemController($scope, $uibModalInstance, $filter, $uibModal, itemDdlRefData,\r\n RefDataMappingService, showFlatbedAttributes, ModalService, ItemService, customer,\r\n user, preferences\r\n ) {\r\n\r\n var lbUomRefNum = RefDataMappingService.getItemId('LB_UOM');\r\n var lbUom = $filter('translate')('LB_UOM');\r\n var kgUomRefNum = RefDataMappingService.getItemId('KG_UOM');\r\n var kgUom = $filter('translate')('KG_UOM');\r\n var inUomRefNum = RefDataMappingService.getItemId('INCHES_UOM');\r\n var inUom = $filter('translate')('INCHES_UOM');\r\n var ftUomRefNum = RefDataMappingService.getItemId('FEET_UOM');\r\n var ftUom = $filter('translate')('FEET_UOM');\r\n var cmUomRefNum = RefDataMappingService.getItemId('CENTIMETERS_UOM');\r\n var cmUom = $filter('translate')('CENTIMETERS_UOM');\r\n var mUom = $filter('translate')('METERS_UOM');\r\n var mCubedUomRefNum = RefDataMappingService.getItemId('CUBICMETERS_UOM');\r\n var ftCubedUomRefNum = RefDataMappingService.getItemId('CUBICFEET_UOM');\r\n\r\n $scope.equipmentTypes = new Array();\r\n\r\n for (var i = 0; i < itemDdlRefData['ItemEquipment'].length; i++) {\r\n if (itemDdlRefData['ItemEquipment'][i].refDataNumber !== 1882) {\r\n $scope.equipmentTypes.push(itemDdlRefData['ItemEquipment'][i]);\r\n }\r\n }\r\n\r\n $scope.itemDdlRefData = itemDdlRefData;\r\n $scope.showFlatbedAttributes = showFlatbedAttributes;\r\n $scope.suggestedItems = [];\r\n\r\n function setItemDefaults() {\r\n $scope.newItem = {\r\n flatbed: {}\r\n };\r\n\r\n if (preferences.unitOfMeasure === 'metric') {\r\n $scope.newItem.weightUom = kgUomRefNum;\r\n $scope.newItem.weightUomLabel = kgUom;\r\n $scope.newItem.perUnitWeightUom = kgUomRefNum;\r\n $scope.newItem.perUnitWeightUomLabel = kgUom;\r\n $scope.newItem.perUnitLengthUom = cmUomRefNum;\r\n $scope.newItem.perUnitLengthUomLabel = cmUom;\r\n $scope.newItem.perUnitWidthUom = cmUomRefNum;\r\n $scope.newItem.perUnitWidthUomLabel = cmUom;\r\n $scope.newItem.perUnitHeightUom = cmUomRefNum;\r\n $scope.newItem.perUnitHeightUomLabel = cmUom;\r\n $scope.newItem.perUnitVolumeUom = mCubedUomRefNum;\r\n $scope.newItem.perUnitVolumeUomLabel = mUom;\r\n $scope.newItem.perUnitDensityUom = mCubedUomRefNum;\r\n $scope.newItem.perUnitDensityUomLabel = mUom;\r\n } else {\r\n $scope.newItem.weightUom = lbUomRefNum;\r\n $scope.newItem.weightUomLabel = lbUom;\r\n $scope.newItem.perUnitWeightUom = lbUomRefNum;\r\n $scope.newItem.perUnitWeightUomLabel = lbUom;\r\n $scope.newItem.perUnitLengthUom = inUomRefNum;\r\n $scope.newItem.perUnitLengthUomLabel = inUom;\r\n $scope.newItem.perUnitWidthUom = inUomRefNum;\r\n $scope.newItem.perUnitWidthUomLabel = inUom;\r\n $scope.newItem.perUnitHeightUom = inUomRefNum;\r\n $scope.newItem.perUnitHeightUomLabel = inUom;\r\n $scope.newItem.perUnitVolumeUom = ftCubedUomRefNum;\r\n $scope.newItem.perUnitVolumeUomLabel = ftUom;\r\n $scope.newItem.perUnitDensityUom = ftCubedUomRefNum;\r\n $scope.newItem.perUnitDensityUomLabel = ftUom;\r\n }\r\n $scope.newItem.isHot = false;\r\n $scope.newItem.flatbed.lengthUomLabel = ftUom;\r\n $scope.newItem.flatbed.lengthInUomLabel = inUom;\r\n $scope.newItem.flatbed.widthUomLabel = inUom;\r\n $scope.newItem.flatbed.heightUomLabel = inUom;\r\n\r\n\r\n if (showFlatbedAttributes) {\r\n $scope.newItem.tempCategory = itemDdlRefData['TemperatureSensitive'][0];\r\n }\r\n }\r\n\r\n setItemDefaults();\r\n\r\n $scope.getCreatingItemTitle = function() { return $filter('translate')('CREATING_ITEM'); };\r\n\r\n $scope.save = function() {\r\n\r\n $scope.loadingModal = $uibModal.open({\r\n templateUrl: 'app/loadingSpinner/loading-spinner.tpl.html',\r\n size: 'sm',\r\n controller: 'loadingSpinnerController',\r\n backdrop: 'static',\r\n resolve: {\r\n title: $scope.getCreatingItemTitle\r\n }\r\n });\r\n\r\n var transformObject = {\r\n \"commodity\": {\r\n \"commodityName\": $scope.newItem.description,\r\n \"nmfc\": $scope.newItem.nmfc,\r\n \"sku\": $scope.newItem.sku,\r\n \"plu\": $scope.newItem.plu,\r\n \"upc\": $scope.newItem.upc,\r\n \"isHot\": $scope.newItem.isHot,\r\n \"totalInsuranceValue\": $scope.newItem.totalInsuranceValue,\r\n \"freightClass\": $scope.newItem.freightClass ? $scope.newItem.freightClass.refDataNumber : null,\r\n \"commodityCode\": $scope.newItem.commodityCode\r\n },\r\n \"freightClassRDN\": $scope.newItem.freightClass ? $scope.newItem.freightClass.refDataNumber : null,\r\n \"packagingTypeRDN\": $scope.newItem.packaging ? $scope.newItem.packaging.refDataNumber : null,\r\n \"unitQuantity\": $scope.newItem.qty,\r\n \"totalPallets\": $scope.newItem.pallets,\r\n \"description\": $scope.newItem.description,\r\n \"totalPalletSpaces\": $scope.newItem.palletSpaces,\r\n \"coilRacks\": $scope.newItem.flatbed.coilRacks,\r\n \"loadingTypeRDN\": $scope.newItem.flatbed.loading ? $scope.newItem.flatbed.loading.refDataNumber : null,\r\n \"itemEquipmentRDN\": $scope.newItem.flatbed.equipment ? $scope.newItem.flatbed.equipment.refDataNumber : null,\r\n \"maxTrailerAge\": $scope.newItem.flatbed.trailerage,\r\n \"requiredChainsCount\": $scope.newItem.flatbed.chains,\r\n \"requiredStrapsCount\": $scope.newItem.flatbed.straps,\r\n \"poNumber\": $scope.newItem.ponum,\r\n \"totalTrailerFeet\": $scope.newItem.trailerFeet,\r\n \"lockBars\": $scope.newItem.flatbed.locksbars,\r\n \"tarpTypeRDN\": $scope.newItem.flatbed.tarp ? $scope.newItem.flatbed.tarp.refDataNumber : null,\r\n \"temperatureCategoryRDN\": $scope.newItem.tempCategory ? $scope.newItem.tempCategory.refDataNumber : null,\r\n \"totalInsuranceValue\": $scope.newItem.totalInsuranceValue,\r\n \"unitsPerPallet\": $scope.newItem.unitsPerPallet,\r\n \"unitInsuranceValue\": $scope.newItem.perUnitInsuranceValue,\r\n \"nmfc\": $scope.newItem.nmfc,\r\n \"totalWeight\": {\r\n \"unitRDN\": $scope.newItem.weightUom,\r\n \"value\": $scope.newItem.weight\r\n },\r\n \"unitVolume\": {\r\n \"unitRDN\": $scope.newItem.perUnitVolumeUom,\r\n \"value\": $scope.newItem.perUnitVolume\r\n },\r\n \"unitDensity\": {\r\n \"unitRDN\": $scope.newItem.perUnitDensityUom,\r\n \"value\": $scope.newItem.perUnitDensity\r\n },\r\n \"unitLength\": {\r\n \"unitRDN\": $scope.newItem.perUnitLengthUom,\r\n \"value\": $scope.newItem.perUnitLength\r\n },\r\n \"unitWidth\": {\r\n \"unitRDN\": $scope.newItem.perUnitWidthUom,\r\n \"value\": $scope.newItem.perUnitWidth\r\n },\r\n \"unitHeight\": {\r\n \"unitRDN\": $scope.newItem.perUnitHeightUom,\r\n \"value\": $scope.newItem.perUnitHeight\r\n },\r\n \"unitWeight\": {\r\n \"unitRDN\": $scope.newItem.perUnitWeightUom,\r\n \"value\": $scope.newItem.perUnitWeight\r\n },\r\n \"isHot\": $scope.newItem.isHot\r\n };\r\n\r\n if ($scope.newItem.flatbed.length) {\r\n transformObject.equipmentLength = {\r\n \"unitRDN\": ftUomRefNum,\r\n \"value\": $scope.newItem.flatbed.length\r\n };\r\n }\r\n\r\n if ($scope.newItem.flatbed.width) {\r\n transformObject.equipmentWidth = {\r\n \"unitRDN\": inUomRefNum,\r\n \"value\": $scope.newItem.flatbed.width\r\n };\r\n }\r\n\r\n if ($scope.newItem.flatbed.height) {\r\n transformObject.equipmentHeight = {\r\n \"unitRDN\": inUomRefNum,\r\n \"value\": $scope.newItem.flatbed.height\r\n };\r\n }\r\n\r\n ItemService.create({\r\n customerCode: (customer.useSupplierCatalog && user.isSupplier)\r\n ? user.supplierPartyCode\r\n : customer.partyCode.replace(/^\\s+|\\s+$/gm, ''),\r\n item: transformObject\r\n }, function(data) {\r\n $scope.loadingModal.close(data);\r\n $uibModalInstance.close($scope.newItem);\r\n },\r\n function(data) {\r\n $scope.loadingModal.close(data);\r\n var modalOptions = {\r\n headerText: 'ERROR',\r\n bodyText: 'A_PROBLEM_OCCURRED_CREATING_THE_NEW_ITEM_PLEASE_TR',\r\n closeButtonText: null,\r\n isError: true\r\n };\r\n\r\n if (data.data.isDuplicate) {\r\n modalOptions.bodyText = 'THIS_ITEM_ALREADY_EXISTS_IN_YOUR_CATALOG_PLEASE_UP';\r\n }\r\n\r\n ModalService.showModal({}, modalOptions).then(function () {\r\n });\r\n });\r\n };\r\n\r\n $scope.cancel = function() {\r\n if (!$scope.newItemForm || !$scope.newItemForm.$dirty) {\r\n $uibModalInstance.close();\r\n return;\r\n }\r\n\r\n var modalOptions = {\r\n closeButtonText: 'CANCEL',\r\n actionButtonText: 'OK',\r\n headerText: 'ARE_YOU_SURE_YOU_WANT_TO_CANCEL_ADDING_THIS_ITEM',\r\n bodyText: 'CANCELLING_WILL_RESULT_IN_THE_LOSS_OF_DATA_FOR_THE'\r\n };\r\n\r\n ModalService.showModal({}, modalOptions).then(function(result) {\r\n if (result === 'ok') {\r\n $uibModalInstance.close();\r\n }\r\n });\r\n };\r\n\r\n $scope.isHotClick = function(item) {\r\n item.isHot = !item.isHot;\r\n };\r\n\r\n function refreshSearchItems(search) {\r\n if (customer && customer.partyCode) {\r\n return ItemService.search({\r\n customerCode: (customer.useSupplierCatalog && user.isSupplier)\r\n ? user.supplierPartyCode\r\n : customer.partyCode.replace(/^\\s+|\\s+$/gm, ''),\r\n term: search,\r\n limit: 3\r\n }, function(data) {\r\n angular.forEach(data.items, function(item) {\r\n item.commodity = angular.copy(item);\r\n item.freightClass = (item.freightClass) ? item.freightClass.toString() : '';\r\n });\r\n return data.items;\r\n });\r\n }\r\n }\r\n\r\n $scope.suggestedItemSearchCriteriaChanged = function(criteria) {\r\n if (!criteria || criteria.length < 2) {\r\n $scope.suggestedItems = null;\r\n return;\r\n }\r\n\r\n $scope.suggestedItems = refreshSearchItems(criteria);\r\n };\r\n\r\n $scope.useThisItem = function(item) {\r\n $uibModalInstance.close(item);\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('addItemController', addItemController);\r\n})();\r\n\r\n\n(function() {\r\n 'use strict';\r\n addDrawController.$inject = ['$scope', '$uibModalInstance', 'customer', 'PurchaseOrderService', '$locale', 'DrawItemService',\r\n 'DateTimeService'];\r\n\r\n function addDrawController($scope, $uibModalInstance, customer, PurchaseOrderService, $locale, DrawItemService,\r\n DateTimeService)\r\n {\r\n\r\n $scope.customer = customer;\r\n $scope.searchParams = { customerCode: customer.partyCode};\r\n $scope.currentParams = {};\r\n $scope.searchResults = [];\r\n $scope.pagingInfo = {\r\n limit: '50',\r\n page: 1,\r\n sortBy: '0',\r\n sortDescending: '0',\r\n totalItems: 0\r\n };\r\n $scope.sortSelect = \"0-0\";\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n DrawItemService.init();\r\n DrawItemService.setCustomer($scope.customer);\r\n $scope.getDisplayDate = function(dateTime){\r\n return DateTimeService.getDisplayDateOrTime(dateTime, $scope.$parent.userPreference);\r\n };\r\n $scope.getCityStateProvince = function(destination){\r\n var cityState = '';\r\n if(angular.isDefined(destination) && angular.isDefined(destination.physicalAddress)){\r\n if(angular.isDefined(destination.physicalAddress.city)){\r\n cityState += destination.physicalAddress.city;\r\n }\r\n if(angular.isDefined(destination.physicalAddress.city) && angular.isDefined(destination.physicalAddress.stateProvince)){\r\n cityState += ', ';\r\n }\r\n if(angular.isDefined(destination.physicalAddress.stateProvince)){\r\n cityState += destination.physicalAddress.stateProvince;\r\n }\r\n }\r\n return cityState;\r\n };\r\n $scope.search = function(searchParams, pagingInfo) {\r\n searchParams.page = pagingInfo.page;\r\n searchParams.limit = pagingInfo.limit;\r\n searchParams.orderBy = pagingInfo.sortBy;\r\n searchParams.orderByDirection = pagingInfo.sortDescending;\r\n PurchaseOrderService.availableItems(searchParams).$promise.then(function(result){\r\n $scope.currentParams = searchParams;\r\n $scope.currentParams.isDefined = true;\r\n $scope.pagingInfo.totalItems = result.total;\r\n $scope.searchResults = result.purchaseOrderItems;\r\n $scope.hasNoResults = (result.purchaseOrderItems.length < 1);\r\n });\r\n };\r\n $scope.clear = function(){\r\n $scope.searchParams.purchaseOrderNumber = undefined;\r\n $scope.searchParams.customerItemId = undefined;\r\n };\r\n $scope.pageChanged = function(){\r\n if($scope.currentParams.isDefined) {\r\n $scope.search($scope.currentParams, $scope.pagingInfo);\r\n }\r\n };\r\n $scope.sortSelected = function(sortSelect){\r\n if(angular.isDefined(sortSelect)) {\r\n var sortPieces = sortSelect.split('-');\r\n $scope.pagingInfo.sortBy = sortPieces[0];\r\n $scope.pagingInfo.sortDescending = sortPieces[1];\r\n $scope.pageChanged();\r\n }\r\n };\r\n $scope.addItem = function(item) {\r\n $uibModalInstance.close(item);\r\n };\r\n $scope.cancel = function() {\r\n $uibModalInstance.dismiss();\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('AddDrawController', addDrawController);\r\n})();\r\n\r\n\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n \r\n app.directive('apShipmentDocsLink', ['$q', '$compile', '$filter', function ($q, $compile, $filter) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n invoice: '='\r\n },\r\n controller: ['$scope', '$uibModal', function($scope, $uibModal){\r\n $scope.openShipmentDocumentViewer = function (shipmentNum) {\r\n if ($scope.isDocumentViewerOpen) {\r\n return;\r\n }\r\n $scope.isDocumentViewerOpen = true;\r\n $scope.documentViewerModal = $uibModal.open({\r\n templateUrl: 'app/documentManager/views/documentViewer.tpl.html',\r\n size: 'lg',\r\n controller: 'shipmentDocumentViewerController',\r\n controllerAs : 'vm',\r\n resolve: {\r\n shipmentNum: shipmentNum,\r\n documents: ['DocumentService', function (DocumentService) {\r\n return DocumentService.getAll({shipmentNumber: shipmentNum}).$promise;\r\n }]\r\n }\r\n });\r\n \r\n $scope.documentViewerModal.result.then(function () {\r\n $scope.isDocumentViewerOpen = false;\r\n }, function () {\r\n $scope.isDocumentViewerOpen = false;\r\n });\r\n };\r\n }],\r\n link: function (scope, element) {\r\n if(scope.invoice.loadNumbers.length === 1){\r\n var compiled = $compile('')(scope);\r\n element.append(compiled);\r\n } \r\n else if (scope.invoice.loadNumbers.length > 1){\r\n var markup = '';\r\n markup += '
    ';\r\n markup += '
  • ' + $filter('translate')('SELECT_SHIPMENT') + '
  • ';\r\n for (var i = 0; i < scope.invoice.loadNumbers.length; i++){\r\n markup += '
  • ' + scope.invoice.loadNumbers[i] + '
  • ';\r\n }\r\n markup += '
';\r\n var comp = $compile(markup)(scope);\r\n element.append(comp);\r\n }\r\n }\r\n };\r\n }]);\r\n })();\n(function () {\r\n 'use strict';\r\n var app = angular.module('NavisphereOnline');\r\n\r\n app.directive('apDocsLink', ['$q', '$compile', '$filter', function ($q, $compile, $filter) {\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n invoice: '='\r\n },\r\n controller: ['$scope', '$uibModal', function($scope, $uibModal){\r\n\r\n $scope.openDocumentViewer = function (orderNum) {\r\n if ($scope.isDocumentViewerOpen) {\r\n return;\r\n }\r\n $scope.isDocumentViewerOpen = true;\r\n $scope.documentViewerModal = $uibModal.open({\r\n templateUrl: 'app/documentManager/views/documentViewer.tpl.html',\r\n size: 'lg',\r\n controller: 'orderDocumentViewerController',\r\n controllerAs : 'vm',\r\n resolve: {\r\n order: ['OrderService', function (OrderService) {\r\n var deferred = $q.defer();\r\n OrderService.getOrder({orderNumber: orderNum}).$promise.then(function(order){\r\n order.service = order.services[0];\r\n deferred.resolve(order);\r\n }, function (data) {\r\n deferred.reject(data);\r\n });\r\n return deferred.promise;\r\n }],\r\n documents: ['DocumentService', function (DocumentService) {\r\n return DocumentService.getAll({orderNumber: orderNum}).$promise;\r\n }]\r\n }\r\n });\r\n\r\n $scope.documentViewerModal.result.then(function () {\r\n $scope.isDocumentViewerOpen = false;\r\n }, function () {\r\n $scope.isDocumentViewerOpen = false;\r\n });\r\n };\r\n }],\r\n link: function (scope, element) {\r\n if(scope.invoice.orderNumbers.length === 1){\r\n var compiled = $compile('')(scope);\r\n element.append(compiled);\r\n } else if (scope.invoice.orderNumbers.length > 1){\r\n var markup = '';\r\n markup += '
    ';\r\n markup += '
  • ' + $filter('translate')('SELECT_ORDER') + '
  • ';\r\n for (var i = 0; i < scope.invoice.orderNumbers.length; i++){\r\n markup += '
  • ' + scope.invoice.orderNumbers[i] + '
  • ';\r\n }\r\n markup += '
';\r\n var comp = $compile(markup)(scope);\r\n element.append(comp);\r\n }\r\n }\r\n };\r\n }]);\r\n})();\r\n\r\n\n(function () {\r\n 'use strict';\r\n function invoiceService($resource, API_BASE_URL) {\r\n\r\n return $resource(API_BASE_URL + 'api/invoices', null, {\r\n 'search': { method: 'POST', url: API_BASE_URL + 'api/invoices/search' }\r\n });\r\n }\r\n invoiceService.$inject = ['$resource', 'API_BASE_URL'];\r\n angular.module('NavisphereOnline').factory('InvoiceService', invoiceService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n searchInvoicesController.$inject = ['$scope', 'InvoiceService', '$locale', '$timeout', '$document', '$http', 'DateTimeService', 'API_BASE_URL', 'authService', 'DocumentHelper', 'MonetaryValueFormatService'];\r\n function searchInvoicesController($scope, InvoiceService, $locale, $timeout, $document, $http, DateTimeService, API_BASE_URL, authService, DocumentHelper, MonetaryValueFormatService) {\r\n $scope.results = [];\r\n $scope.format = $locale.DATETIME_FORMATS['shortDate'];\r\n $scope.displayDate = DateTimeService.getRawDateTime;\r\n $scope.displayToHundredthsPlace = MonetaryValueFormatService.DisplayToHundredthsPlace;\r\n $scope.pagingInfo = {\r\n limit: '10',\r\n page: 1,\r\n sortBy: 'dueDate',\r\n sortDescending: false,\r\n totalItems: 0\r\n };\r\n $scope.searchParams = {\r\n invoiceStatus: '0',\r\n dateType: '0'\r\n };\r\n $scope.clear = function () {\r\n $scope.searchParams = {\r\n invoiceStatus: '0',\r\n dateType: '0'\r\n };\r\n };\r\n $scope.search = function () {\r\n var printStartDate = null;\r\n var printEndDate = null;\r\n var actualPickupStartDate = null;\r\n var actualPickupEndDate = null;\r\n\r\n if ($scope.searchParams.dateType === '0') {\r\n actualPickupStartDate = $scope.searchParams.startDate;\r\n actualPickupEndDate = $scope.searchParams.endDate;\r\n } else if ($scope.searchParams.dateType === '1') {\r\n printStartDate = $scope.searchParams.startDate;\r\n printEndDate = $scope.searchParams.endDate;\r\n }\r\n InvoiceService.search({\r\n page: $scope.pagingInfo.page,\r\n limit: $scope.pagingInfo.limit,\r\n invoiceNumber: $scope.searchParams.invoiceNumber,\r\n orderNumber: $scope.searchParams.orderNumber,\r\n listBilllNumber: $scope.searchParams.listBilllNumber,\r\n checkNumber: $scope.searchParams.checkNumber,\r\n referenceNumber: $scope.searchParams.referenceNumber,\r\n shipmentNumber: $scope.searchParams.shipmentNumber,\r\n actualPickupStartDate: actualPickupStartDate,\r\n actualPickupEndDate: actualPickupEndDate,\r\n printStartDate: printStartDate,\r\n printEndDate: printEndDate,\r\n invoiceStatus: $scope.searchParams.invoiceStatus,\r\n sortDescending: $scope.pagingInfo.sortDescending,\r\n sortBy: $scope.pagingInfo.sortBy\r\n }, function (data) {\r\n $scope.results = data.items;\r\n $scope.pagingInfo.totalItems = data.total;\r\n $scope.hasNoResults = data.items.length === 0;\r\n });\r\n };\r\n\r\n $scope.export = function () {\r\n var url = API_BASE_URL + 'api/invoices/export';\r\n var printStartDate = null;\r\n var printEndDate = null;\r\n var actualPickupStartDate = null;\r\n var actualPickupEndDate = null;\r\n\r\n if ($scope.searchParams.dateType === '0') {\r\n actualPickupStartDate = $scope.searchParams.startDate;\r\n actualPickupEndDate = $scope.searchParams.endDate;\r\n } else if ($scope.searchParams.dateType === '1') {\r\n printStartDate = $scope.searchParams.startDate;\r\n printEndDate = $scope.searchParams.endDate;\r\n }\r\n\r\n var data = {\r\n page: 1,\r\n limit: 1000,\r\n invoiceNumber: $scope.searchParams.invoiceNumber,\r\n orderNumber: $scope.searchParams.orderNumber,\r\n listBilllNumber: $scope.searchParams.listBilllNumber,\r\n checkNumber: $scope.searchParams.checkNumber,\r\n referenceNumber: $scope.searchParams.referenceNumber,\r\n shipmentNumber: $scope.searchParams.shipmentNumber,\r\n printStartDate: printStartDate,\r\n printEndDate: printEndDate,\r\n actualPickupStartDate: actualPickupStartDate,\r\n actualPickupEndDate: actualPickupEndDate,\r\n invoiceStatus: $scope.searchParams.invoiceStatus,\r\n sortDescending: $scope.pagingInfo.sortDescending,\r\n sortBy: $scope.pagingInfo.sortBy\r\n };\r\n $http.post(url, data, { responseType: 'blob' }).then(function (d) {\r\n return saveAs(d.data, ['InvoiceExport.xls']);\r\n });\r\n };\r\n $scope.openFromDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.fromDateOpened = true;\r\n };\r\n $scope.fromDateOptions = {\r\n showWeeks: false\r\n };\r\n $scope.openToDate = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.toDateOpened = true;\r\n };\r\n $scope.toDateOptions = {\r\n showWeeks: false\r\n };\r\n $scope.sort = function (sortBy) {\r\n if (sortBy === $scope.pagingInfo.sortBy) {\r\n $scope.pagingInfo.sortDescending = !$scope.pagingInfo.sortDescending;\r\n } else {\r\n $scope.pagingInfo.sortBy = sortBy;\r\n $scope.pagingInfo.sortDescending = false;\r\n }\r\n $scope.pagingInfo.page = 1;\r\n $scope.search();\r\n };\r\n $scope.pageChanged = function () {\r\n $scope.search();\r\n };\r\n $scope.displayTax = function (tax, isTaxCalculated) {\r\n // Determine what value to display for tax-dependent properties (tax, subtotal)\r\n if (isTaxCalculated) {\r\n return $scope.displayToHundredthsPlace(tax || 0);\r\n }\r\n return 'See Invoice';\r\n };\r\n $scope.viewInvoice = function (invoiceNum) {\r\n DocumentHelper.showDocument(API_BASE_URL + 'api/documents/invoice?invoiceNumber=' + encodeURIComponent(invoiceNum));\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('SearchInvoicesController', searchInvoicesController);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n accountSummaryController.$inject = ['$scope', '$http', 'InvoiceService', '$timeout', '$document', 'invoiceResults', 'DateTimeService', 'API_BASE_URL', 'DocumentHelper', 'numberFilter'];\r\n function accountSummaryController($scope, $http, InvoiceService, $timeout, $document, invoiceResults, DateTimeService, API_BASE_URL, DocumentHelper, numberFilter) {\r\n $scope.results = invoiceResults.items;\r\n $scope.aggs = invoiceResults.aggs;\r\n $scope.total = invoiceResults.total;\r\n $scope.displayDate = DateTimeService.getRawDateTime;\r\n $scope.pagingInfo = {\r\n limit: '10',\r\n page: invoiceResults.page,\r\n sortBy: 'dueDate',\r\n sortDescending: false,\r\n totalItems: invoiceResults.total\r\n };\r\n\r\n function search() {\r\n InvoiceService.search({\r\n page: $scope.pagingInfo.page,\r\n limit: $scope.pagingInfo.limit,\r\n invoiceStatus: 1,\r\n agingBucket: $scope.agingBucket,\r\n sortDescending: $scope.pagingInfo.sortDescending,\r\n sortBy: $scope.pagingInfo.sortBy\r\n }, function (data) {\r\n $scope.results = data.items;\r\n $scope.pagingInfo.totalItems = data.total;\r\n });\r\n }\r\n $scope.setActive = function (agingBucket) {\r\n $scope.activeCard = agingBucket;\r\n $scope.agingBucket = agingBucket;\r\n search();\r\n };\r\n $scope.sort = function (sortBy) {\r\n if (sortBy === $scope.pagingInfo.sortBy) {\r\n $scope.pagingInfo.sortDescending = !$scope.pagingInfo.sortDescending;\r\n } else {\r\n $scope.pagingInfo.sortBy = sortBy;\r\n $scope.pagingInfo.sortDescending = false;\r\n }\r\n $scope.pagingInfo.page = 1;\r\n search();\r\n };\r\n $scope.pageChanged = function () {\r\n search();\r\n };\r\n $scope.displayTax = function (tax, isTaxCalculated) {\r\n // Determine what value to display for tax-dependent properties (tax, subtotal)\r\n if (isTaxCalculated) {\r\n return numberFilter(tax || 0);\r\n }\r\n return 'See Invoice';\r\n };\r\n $scope.viewInvoice = function (invoiceNum) {\r\n $timeout(function () {\r\n DocumentHelper.showDocument(API_BASE_URL + 'api/documents/invoice?invoiceNumber=' + encodeURIComponent(invoiceNum));\r\n });\r\n };\r\n $scope.export = function(){\r\n var url = API_BASE_URL + 'api/invoices/export';\r\n var data = {\r\n page: 1,\r\n limit: 1000,\r\n invoiceStatus: 1,\r\n agingBucket: $scope.agingBucket,\r\n sortDescending: $scope.pagingInfo.sortDescending,\r\n sortBy: $scope.pagingInfo.sortBy\r\n };\r\n $http.post(url, data, {responseType: 'blob'}).then(function(d){\r\n return saveAs(d.data, ['InvoiceExport.xls']);\r\n });\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('AccountSummaryController', accountSummaryController);\r\n}());\r\n\n(function () {\r\n\r\n 'use strict';\r\n validationModalController.$inject = ['$scope', '$uibModalInstance', 'validations', 'title'];\r\n function validationModalController($scope, $uibModalInstance, validations, title) {\r\n\r\n $scope.validations = validations;\r\n $scope.title = title;\r\n $scope.ok = function () {\r\n $uibModalInstance.close();\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('validationModalController', validationModalController);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n\r\n shipmentMapController.$inject = ['$scope', '$q', 'geohash', 'mapsInitializer', '$http', '$interval', '$rootScope', 'OrderLoadResource', 'analyticsService', 'graphicsService', 'localStorageService', '$filter', '$log'];\r\n\r\n function shipmentMapController($scope, $q, geohash, mapsInitializer, $http, $interval, $rootScope, OrderLoadResource, analyticsService, graphicsService, localStorageService, $filter, $log) {\r\n var vm = this;\r\n vm.mapObj = {};\r\n\r\n vm.pushpins = [];\r\n vm.displayMode = 'map';\r\n\r\n vm.weatherRefreshPromise = null;\r\n vm.emptyLayer = null;\r\n vm.showControlPanel = false;\r\n\r\n vm.showRoadView = true;\r\n vm.showAerialView = false;\r\n vm.showGrayscaleView = false;\r\n vm.showTraffic = false;\r\n vm.showWeather = false;\r\n vm.showLabels = false;\r\n\r\n vm.trafficManager = null;\r\n vm.weatherLayerVisible = (localStorageService.get('weatherLayerVisible') || \"true\") === \"true\";\r\n vm.infobox;\r\n vm.zoomLevel;\r\n vm.box;\r\n vm.searchText;\r\n vm.infoboxTransit = [];\r\n vm.infoboxDelivered = [];\r\n vm.infoboxTransitVisible = false;\r\n vm.infoboxDeliveredVisible = false;\r\n vm.showErrorMessage = true;\r\n vm.loading = true;\r\n\r\n\r\n /*\r\n Sets the error message when it finds no orders depending on current area and global\r\n */\r\n vm.setErrorMessage = function () {\r\n var box = {\r\n topLeft: {\r\n lat: 84.969265,\r\n lon: 0\r\n },\r\n bottomRight: {\r\n lat: -84.969265,\r\n lon: -1\r\n }\r\n };\r\n\r\n OrderLoadResource.getClusterDetailsCountry({ box: box }).$promise.then(function (data) {\r\n if (data.length > 0) {\r\n vm.errorMessage = $filter('translate')(\"PLEASE_PAN_OR_ZOOM_TO_SEE_ORDERS\");\r\n } else {\r\n vm.errorMessage = $filter('translate')(\"THERE_ARE_NO_IN_TRANSIT_OR_DELIVERED_ORDERS_AT_THI\");\r\n }\r\n })\r\n };\r\n\r\n // To open or close the map controls\r\n vm.toggleControlPanel = function () {\r\n vm.showControlPanel = vm.showControlPanel === true ? false : true;\r\n vm.hideTransitInfobox();\r\n vm.hideDeliveredInfobox();\r\n };\r\n\r\n vm.toggleMapView = function (mapType) {\r\n analyticsService.trackWithVar('toggleMapView', \"mapType\", mapType);\r\n\r\n vm.showRoadView = false;\r\n vm.showAerialView = false;\r\n vm.showGrayscaleView = false;\r\n\r\n if (mapType === 'road') {\r\n vm.showRoadView = true;\r\n }\r\n\r\n if (mapType === 'aerial') {\r\n vm.showAerialView = true;\r\n }\r\n\r\n if (mapType === 'grayscale') {\r\n vm.showGrayscaleView = true;\r\n }\r\n };\r\n\r\n // For the aerial map it toggles for displaying labels on the map\r\n vm.toggleLabels = function () {\r\n vm.showLabels = !vm.showLabels;\r\n if (vm.showAerialView) {\r\n if (vm.showLabels) {\r\n vm.mapObj.setView({ labelOverlay: Microsoft.Maps.LabelOverlay.visible });\r\n } else {\r\n vm.mapObj.setView({ labelOverlay: Microsoft.Maps.LabelOverlay.hidden });\r\n }\r\n }\r\n };\r\n\r\n // Toggles the traffic view\r\n vm.toggleTraffic = function () {\r\n analyticsService.trackWithVar('toggleTrafficControl', \"trafficToggleValue\", vm.showTraffic);\r\n vm.showTraffic = !vm.showTraffic;\r\n\r\n if (vm.showTraffic) {\r\n vm.trafficManager.show();\r\n } else {\r\n vm.trafficManager.hide();\r\n }\r\n };\r\n\r\n // Toggle for the weather\r\n vm.toggleWeather = function () {\r\n analyticsService.trackWithVar('toggleWeatherControl', \"weatherToggleValue\", vm.showWeather);\r\n vm.showWeather = !vm.showWeather;\r\n\r\n if (vm.showWeather) {\r\n vm.weatherLayerVisible = true;\r\n localStorageService.set('weatherLayerVisible', true);\r\n vm.weatherOverlay(vm.mapObj);\r\n } else {\r\n vm.weatherLayerVisible = false;\r\n localStorageService.set('weatherLayerVisible', false);\r\n vm.mapObj.layers.remove(vm.weatherLayer);\r\n }\r\n };\r\n\r\n // This function adds all the pins to the map\r\n vm.addPins = function (data) {\r\n vm.mapObj.entities.clear();\r\n\r\n if (data.buckets.length > 0) {\r\n vm.showErrorMessage = false;\r\n } else {\r\n vm.setErrorMessage();\r\n vm.showErrorMessage = true;\r\n }\r\n\r\n\r\n\r\n for (var i = 0; i < (data.buckets.length); i++) {\r\n var lat = data.buckets[i].center_lat.value;\r\n var lon = data.buckets[i].center_lon.value;\r\n var location = new Microsoft.Maps.Location(lat, lon);\r\n vm.infobox = new Microsoft.Maps.Infobox(location, { visible: false });\r\n\r\n var pin = graphicsService.generatePinsSvg(data.buckets[i].doc_count, data.buckets[i].status.buckets);\r\n\r\n var pushpins = new Microsoft.Maps.Pushpin(location, { icon: pin.svg, anchor: new Microsoft.Maps.Point(pin.lat, pin.lon) });\r\n\r\n pushpins.metadata = {\r\n hash_key: data.buckets[i].key,\r\n totals: data.buckets[i].status.buckets\r\n }\r\n\r\n Microsoft.Maps.Events.addHandler(pushpins, 'click', displayInfobox);\r\n\r\n vm.pushpins.push(pushpins);\r\n };\r\n if (data.buckets.length > 0) {\r\n vm.infobox.setMap(vm.mapObj);\r\n vm.mapObj.entities.push(vm.pushpins);\r\n }\r\n };\r\n\r\n function displayInfobox(e) {\r\n var hashData = geohash.decode_bbox(e.target.metadata.hash_key);\r\n var datapoints = { topLeft: { lat: hashData[2], lon: hashData[1] }, bottomRight: { lat: hashData[0], lon: hashData[3] } };\r\n vm.infoboxTransit.length = 0;\r\n vm.infoboxDelivered.length = 0;\r\n analyticsService.trackWithVar('displayInfobox', \"searchValue\", vm.searchText);\r\n\r\n // get totals for infobox\r\n vm.getPinTotals(e.target.metadata.totals);\r\n var totalAtPin = vm.transitTotal + vm.deliveredTotal;\r\n\r\n if (vm.zoomLevel === 5 && !vm.searchText && totalAtPin > 10) {\r\n // hide any infobox \r\n vm.infoboxTransitVisible = false;\r\n vm.infoboxDeliveredVisible = false;\r\n\r\n vm.zoom(e.target.geometry.bounds, 3);\r\n } else if (vm.zoomLevel >= 5 && !vm.searchText) {\r\n OrderLoadResource.getClusterDetails({ box: datapoints }).$promise.then(function (data) {\r\n vm.seperationOfDetailedOrders(data);\r\n });\r\n } else if (vm.zoomLevel === 4 && !vm.searchText && totalAtPin === 1) {\r\n // show state cluster details if we have less than 100 at this point, otherwise zoom in\r\n OrderLoadResource.getClusterDetailsState({ box: datapoints }).$promise.then(function (data) {\r\n vm.seperationOfDetailedOrders(data);\r\n });\r\n } else if (vm.zoomLevel < 5 && !vm.searchText) {\r\n // hide any infobox \r\n vm.infoboxTransitVisible = false;\r\n vm.infoboxDeliveredVisible = false;\r\n\r\n vm.zoom(e.target.geometry.bounds, 1);\r\n } else if (vm.searchText) {\r\n OrderLoadResource.getShipments({ zoom: vm.zoomLevel, box: vm.box, searchText: vm.searchText }).$promise.then(function (data) {\r\n if (data.buckets[0].top_item.hits.hits[0]._source.order_status === \"Delivered\") {\r\n vm.infoboxSizing(true, false);\r\n vm.infoboxDelivered.push(data.buckets[0].top_item.hits.hits[0]._source);\r\n } else if (data.buckets[0].top_item.hits.hits[0]._source.order_status === \"In Transit\") {\r\n vm.infoboxSizing(false, true);\r\n vm.infoboxTransit.push(data.buckets[0].top_item.hits.hits[0]._source);\r\n }\r\n });\r\n }\r\n };\r\n\r\n vm.zoom = function (bounds, zoomLevel) {\r\n // get latitude and longitude\r\n var topLeft = {\r\n latitude: bounds[0],\r\n longitude: bounds[1]\r\n };\r\n var bottomRight = {\r\n latitude: bounds[2],\r\n longitude: bounds[3]\r\n }\r\n\r\n // create the box for zooming\r\n var hashRect = Microsoft.Maps.LocationRect.fromCorners(\r\n new Microsoft.Maps.Location(topLeft.latitude, topLeft.longitude),\r\n new Microsoft.Maps.Location(bottomRight.latitude, bottomRight.longitude));\r\n\r\n // set the zoom level to the next\r\n var newZoomLevel = vm.mapObj.getZoom() + zoomLevel;\r\n\r\n // do the zoom (cannot animate as of 01/2018)\r\n vm.mapObj.setView({\r\n center: hashRect.center,\r\n zoom: newZoomLevel\r\n });\r\n }\r\n\r\n vm.getPinTotals = function (totals) {\r\n vm.transitTotal = 0;\r\n vm.deliveredTotal = 0;\r\n\r\n for (var i = 0; i < totals.length; i++) {\r\n if (totals[i].key === 'In Transit') {\r\n vm.transitTotal = totals[i].doc_count;\r\n } else {\r\n vm.deliveredTotal = totals[i].doc_count;\r\n }\r\n }\r\n }\r\n\r\n vm.seperationOfDetailedOrders = function (data) {\r\n var tdata = false;\r\n var ddata = false;\r\n for (var i = 0; i < (data.length); i++) {\r\n if (data[i]._source.order_status === \"Delivered\") {\r\n ddata = true;\r\n vm.infoboxSizing(ddata, tdata);\r\n vm.infoboxDelivered.push(data[i]._source);\r\n } else if (data[i]._source.order_status === \"In Transit\") {\r\n tdata = true;\r\n vm.infoboxSizing(ddata, tdata);\r\n vm.infoboxTransit.push(data[i]._source);\r\n }\r\n };\r\n };\r\n\r\n vm.infoboxSizing = function (deliveredData, transitData) {\r\n vm.infoboxTransitVisible = false;\r\n vm.infoboxDeliveredVisible = false;\r\n if (transitData) {\r\n vm.infoboxTransitVisible = true;\r\n }\r\n\r\n if (deliveredData) {\r\n vm.infoboxDeliveredVisible = true;\r\n }\r\n\r\n if (vm.infoboxTransitVisible || vm.infoboxDeliveredVisible) {\r\n vm.showControlPanel = false;\r\n }\r\n };\r\n\r\n vm.hideDeliveredInfobox = function () {\r\n vm.infoboxDeliveredVisible = false;\r\n };\r\n\r\n vm.hideTransitInfobox = function () {\r\n vm.infoboxTransitVisible = false;\r\n };\r\n\r\n // Tried to unit test this but it breaks Jenkin builds\r\n vm.detailedOrders = function (orderNumber) {\r\n analyticsService.trackWithVar('detailedOrders', \"orderNumber\", orderNumber);\r\n window.location.href = appConfig.ordersUIBaseUrl + '/#/detail/' + orderNumber;\r\n };\r\n\r\n // This builds out the map and styles it\r\n vm.loadMap = function () {\r\n analyticsService.track('pageLoad');\r\n\r\n mapsInitializer.mapInitialized.then(function () {\r\n vm.mapObj = new Microsoft.Maps.Map(document.getElementById('map'), {\r\n credentials: appConfig.bingMapKey,\r\n mapTypeId: Microsoft.Maps.MapTypeId.road,\r\n showLocateMeButton: false,\r\n showMapTypeSelector: false,\r\n showZoomButtons: true,\r\n zoom: 3,\r\n minZoom: 3,\r\n maxZoom: 14\r\n });\r\n\r\n vm.getCustomersOrders();\r\n $rootScope.$broadcast('mapObj', { mapObj: vm.mapObj });\r\n Microsoft.Maps.loadModule('Microsoft.Maps.Traffic', { callback: vm.trafficOverlay });\r\n Microsoft.Maps.Events.addHandler(vm.mapObj, 'viewchangeend', viewChanged);\r\n }, function (error) {\r\n toastr.error('Error Code: ' + error.data.responseStatus.errorCode + '
Message: ' + error.data.responseStatus.message);\r\n });\r\n };\r\n\r\n // This handles adding traffic information to the map\r\n vm.trafficOverlay = function () {\r\n vm.trafficManager = new Microsoft.Maps.Traffic.TrafficManager(vm.mapObj);\r\n vm.trafficManager.hide();\r\n };\r\n\r\n // An empty overlay that will be used with weather\r\n vm.emptyOverlay = function () {\r\n EmptyOverlay.prototype = new Microsoft.Maps.CustomOverlay();\r\n\r\n function EmptyOverlay() { }\r\n\r\n EmptyOverlay.prototype.onAdd = function () {\r\n var container = document.createElement('div');\r\n this.setHtmlElement(container);\r\n };\r\n\r\n vm.emptyLayer = new EmptyOverlay();\r\n vm.mapObj.layers.insert(vm.emptyLayer);\r\n };\r\n\r\n // This is where we will be placing the weather information for the map\r\n vm.customWeatherOverlayOptions = function () {\r\n if (!vm.weatherLayerVisible)\r\n return;\r\n\r\n $http({\r\n method: 'GET',\r\n url: 'https://api.weather.com/v3/TileServer/series/productSet/PPAcore?apiKey=' + appConfig.weatherApiKey\r\n }).then(function (response) {\r\n var series = response.data.seriesInfo.radarFcst.series;\r\n var s = series[0];\r\n var m = series[0].ts;\r\n for (var i = 0, l = series.length; i < l; i++) {\r\n if (series[i].ts > m) {\r\n s = series[i];\r\n m = series[i].ts;\r\n }\r\n }\r\n s.fts.sort();\r\n var tileSources = [];\r\n for (var i = 0; i < s.fts.length; i++) {\r\n if (tileSources.length > 5)\r\n break;\r\n var path = 'https://api.weather.com/v3/TileServer/tile/radarFcst?ts={ts}&fts={fts}&xyz={x}:{y}:{zoom}&apiKey={apiKey}';\r\n path = path.replace('{apiKey}', appConfig.weatherApiKey);\r\n path = path.replace('{fts}', s.fts[i]);\r\n path = path.replace('{ts}', s.ts);\r\n var tileSource = new Microsoft.Maps.TileSource({\r\n uriConstructor: path\r\n });\r\n\r\n tileSources.push(tileSource);\r\n }\r\n\r\n vm.emptyOverlay();\r\n\r\n var weatherLayer = new Microsoft.Maps.AnimatedTileLayer({\r\n mercator: tileSources,\r\n frameRate: 500,\r\n visible: true,\r\n loadingScreen: vm.emptyLayer\r\n });\r\n\r\n if (vm.weatherLayer) {\r\n vm.mapObj.layers.remove(vm.weatherLayer);\r\n }\r\n vm.weatherLayer = weatherLayer;\r\n vm.mapObj.layers.insert(weatherLayer);\r\n }, function (response) {\r\n $log(response);\r\n });\r\n };\r\n\r\n // This get the weather and refresh its self\r\n vm.weatherOverlay = function () {\r\n vm.customWeatherOverlayOptions();\r\n vm.weatherRefreshPromise = $interval(vm.customWeatherOverlayOptions, 1000 * 60 * 1);\r\n };\r\n\r\n vm.removeSearch = function () {\r\n vm.searchText = undefined;\r\n vm.pushpins.length = 0;\r\n vm.getCustomersOrders();\r\n };\r\n\r\n vm.textSearch = function () {\r\n vm.pushpins.length = 0;\r\n analyticsService.track('searchButton');\r\n vm.getCustomersOrders();\r\n };\r\n\r\n function viewChanged(e) {\r\n vm.pushpins.length = 0;\r\n vm.zoomLevel = vm.mapObj.getZoom();\r\n analyticsService.trackWithVar('zoom', \"zoomLevel\", vm.zoomLevel);\r\n var bounds = e.target.getBounds();\r\n var nw = bounds.getNorthwest();\r\n var se = bounds.getSoutheast();\r\n vm.box = { topLeft: { lat: nw.latitude, lon: nw.longitude }, bottomRight: { lat: se.latitude, lon: se.longitude } };\r\n\r\n vm.getCustomersOrders();\r\n }\r\n\r\n vm.getCustomersOrders = function () {\r\n var initialBox = {\r\n topLeft: { lat: 76, lon: 97 },\r\n bottomRight: { lat: -22, lon: 75 }\r\n };\r\n var defaultZoomLevel = 3;\r\n var newLocal = {\r\n box: vm.box || initialBox,\r\n zoom: vm.zoomLevel || defaultZoomLevel,\r\n searchText: vm.searchText\r\n };\r\n\r\n OrderLoadResource.getShipments(newLocal).$promise.then(function (data) {\r\n vm.addPins(data);\r\n vm.loading = false;\r\n });\r\n };\r\n\r\n // On Load\r\n vm.loadMap();\r\n }\r\n angular.module('NavisphereOnline').controller('shipmentMapController', shipmentMapController);\r\n}());\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular.module('NavisphereOnline')\r\n .directive('mapSelector', mapSelector);\r\n\r\n mapSelector.$inject = ['$rootScope'];\r\n /** @ngInject */\r\n function mapSelector($rootScope) {\r\n return {\r\n restrict: 'C',\r\n link: function(scope, element) {\r\n var mapObj;\r\n var scope = scope.vm;\r\n $rootScope.$on('mapObj', function(evt, data) {\r\n return mapObj = data.mapObj;\r\n });\r\n // Polyfill from MSDN because Microsoft\r\n if (!String.prototype.includes) {\r\n String.prototype.includes = function(search, start) {\r\n 'use strict';\r\n if (typeof start !== 'number') {\r\n start = 0;\r\n }\r\n\r\n if (start + search.length > this.length) {\r\n return false;\r\n } else {\r\n return this.indexOf(search, start) !== -1;\r\n }\r\n };\r\n }\r\n element.on('click', function(evt) {\r\n var className = evt.target.className;\r\n var elementId = element.attr('id'),\r\n roadContainer = $('#road-container'),\r\n aerialContainer = $('#aerial-container'),\r\n grayscaleContainer = $('#grayscale-container');\r\n if ( !className.includes('toggle-value')) {\r\n var overlayImage = $('.btn-overlay-image');\r\n\r\n if (!element.hasClass('active-selector')) {\r\n element.addClass('active-selector')\r\n }\r\n\r\n if (elementId === 'road-container') {\r\n aerialContainer.removeClass('active-selector');\r\n grayscaleContainer.removeClass('active-selector');\r\n overlayImage.attr('src', '../app/assets/img/btn-control-map-road.png');\r\n mapObj.setMapType(Microsoft.Maps.MapTypeId.road);\r\n mapObj.setView({ labelOverlay: Microsoft.Maps.LabelOverlay.visible});\r\n\r\n }\r\n\r\n if (elementId === 'aerial-container') {\r\n roadContainer.removeClass('active-selector');\r\n grayscaleContainer.removeClass('active-selector');\r\n overlayImage.attr('src', '../app/assets/img/btn-control-map-aerial.png');\r\n if (localStorage.getItem('labelsEnabled') === 'false') {\r\n mapObj.setMapType(Microsoft.Maps.MapTypeId.aerial);\r\n mapObj.setView({ labelOverlay: Microsoft.Maps.LabelOverlay.hidden});\r\n scope.aerialPanelToggleText = 'Turn On Labels';\r\n } else {\r\n mapObj.setMapType(Microsoft.Maps.MapTypeId.aerial);\r\n mapObj.setView({ labelOverlay: Microsoft.Maps.LabelOverlay.visible});\r\n scope.aerialPanelToggleText = 'Turn Off Labels';\r\n }\r\n }\r\n\r\n if (elementId === 'grayscale-container') {\r\n aerialContainer.removeClass('active-selector');\r\n roadContainer.removeClass('active-selector');\r\n overlayImage.attr('src', '../app/assets/img/btn-control-map-grayscale.png');\r\n mapObj.setMapType(Microsoft.Maps.MapTypeId.grayscale);\r\n mapObj.setView({ labelOverlay: Microsoft.Maps.LabelOverlay.visible});\r\n }\r\n\r\n\r\n if (!roadContainer.hasClass('active-selector') && !aerialContainer.hasClass('active-selector') && !grayscaleContainer.hasClass('active-selector')) {\r\n overlayImage.attr('src', '');\r\n }\r\n } else if (roadContainer.hasClass('active-selector') || grayscaleContainer.hasClass('active-selector')) {\r\n return false;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n mapsInitializer.$inject = [\"$window\", \"$q\"]\r\n angular\r\n .module('NavisphereOnline')\r\n .factory('mapsInitializer', mapsInitializer);\r\n\r\n /** @ngInject */\r\n function mapsInitializer($window, $q) {\r\n var url = '//www.bing.com/api/maps/mapcontrol?branch=release&callback=';\r\n //\r\n var deferred = $q.defer();\r\n\r\n\r\n $window.bingMapsInitilized = deferred.resolve;\r\n\r\n var asyncLoad = function(url, callbackName) {\r\n var script = document.createElement('script');\r\n script.src = url + callbackName;\r\n document.body.appendChild(script);\r\n };\r\n asyncLoad(url, 'bingMapsInitilized');\r\n\r\n return {\r\n mapInitialized : deferred.promise\r\n };\r\n }\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n graphicsService.$inject = [\"$filter\", \"$window\"]\r\n angular\r\n .module('NavisphereOnline')\r\n .factory('graphicsService', graphicsService);\r\n\r\n function graphicsService($filter, $window) {\r\n var statusColors = {\r\n 'In Transit': 'rgba(0,120,174,1)',\r\n 'Delivered': 'rgba(244,123,32,1)',\r\n 'Late': 'rgba(186,68,68,1)',\r\n 'Early': 'rgba(46,153,224, 1)'\r\n };\r\n\r\n // var statusGradiant = {\r\n // 'In Transit': {\r\n // colorOne: '#0078ae',\r\n // colorTwo: '#0A5AC5'\r\n // },\r\n // 'Delivered': {\r\n // colorOne: '#F47B20',\r\n // colorTwo: '#F49039'\r\n // },\r\n\r\n // 'Late': {\r\n // colorOne: '#DA0303',\r\n // colorTwo: '#6C0000'\r\n // },\r\n // 'Early': {\r\n // colorOne: '#0099FF',\r\n // colorTwo: '#00416C'\r\n // }\r\n // };\r\n\r\n function generatePinsSvg(count, status){\r\n var pin = {svg: \"\", offset:\"\"};\r\n var svg;\r\n var offset;\r\n if(status.length > 1){\r\n pin.svg = createClusterPinSvg(count, status)\r\n pin.lat = 33;\r\n pin.lon = 20\r\n }\r\n else if(status[0].key === \"In Transit\")\r\n {\r\n if(count > 1 && count < 10){\r\n pin.svg = getInTransitClusteredSingleDigitsSvg(count);\r\n pin.lat = 15.625;\r\n pin.lon = 58.5\r\n }\r\n else if(count > 9 && count < 100){\r\n pin.svg = getInTransitClusteredDoubleDigitsSvg(count);\r\n pin.lat = 15.625;\r\n pin.lon = 58.5\r\n }\r\n else if(count > 99){\r\n pin.svg = getInTransitClusteredMoreDigitsSvg();\r\n pin.lat = 15.625;\r\n pin.lon = 58.5\r\n }\r\n else{\r\n pin.svg = getInTransitSvg();\r\n pin.lat = 39.625;\r\n pin.lon = 37.5\r\n }\r\n }\r\n else if (status[0].key === \"Delivered\") {\r\n if(count > 1 && count < 10){\r\n pin.svg = getDeliveredClusteredSingleDigitsSvg(count);\r\n pin.lat = 15.625;\r\n pin.lon = 58.5\r\n }\r\n else if(count > 9 && count < 100){\r\n pin.svg = getDeliveredClusteredDoubleDigitsSvg(count);\r\n pin.lat = 15.625;\r\n pin.lon = 58.5\r\n }\r\n else if(count > 99){\r\n pin.svg = getDeliveredClusteredMoreDigitsSvg();\r\n pin.lat = 15.625;\r\n pin.lon = 58.5\r\n }\r\n else{\r\n pin.svg = getDeliveredSvg();\r\n pin.lat = 30.625;\r\n pin.lon = 43.5\r\n }\r\n }\r\n //pin.push(svg);\r\n return pin;\r\n }\r\n\r\n\r\n function getDeliveredSvg(){\r\n var svg = ['Delivered_Single'];\r\n //var svg = ['Delivered_Single']\r\n return svg.join('');\r\n }\r\n\r\n function getDeliveredClusteredSingleDigitsSvg(count){\r\n var svg = ['Delivered_SingleDigit' + count + ''];\r\n //var svg = ['Delivered_SingleDigit' + count + '']\r\n return svg.join('');\r\n }\r\n\r\n function getDeliveredClusteredDoubleDigitsSvg(count){\r\n var svg = ['Delivered_DoubleDigit' + count + ''];\r\n //var svg = ['Delivered_DoubleDigit' + count + '']\r\n return svg.join('');\r\n }\r\n\r\n function getDeliveredClusteredMoreDigitsSvg(count){\r\n var svg = ['Delivered_99+99+'];\r\n //var svg = ['Delivered_99+99+']\r\n return svg.join('');\r\n }\r\n\r\n function getInTransitSvg(){\r\n var svg = ['InTransit_Single'];\r\n //var svg = ['','','','','InTransit_Single','','','','','','','','','','']\r\n return svg.join('');\r\n }\r\n\r\n function getInTransitClusteredSingleDigitsSvg(count){\r\n var svg = ['InTransit_SingleDigit' + count + '');\r\n //var svg = ['InTransit_SingleDigit' + count + '']\r\n return svg.join('');\r\n }\r\n\r\n function getInTransitClusteredDoubleDigitsSvg(count){\r\n var svg = ['InTransit_DoubleDigit' + count + ''];\r\n //var svg = ['InTransit_DoubleDigit' + count + '']\r\n return svg.join('');\r\n }\r\n\r\n function getInTransitClusteredMoreDigitsSvg(){\r\n var svg = ['InTransit_99+99+'];\r\n //var svg = ['InTransit_99+99+']\r\n return svg.join('');\r\n }\r\n\r\n function getRadius(count) {\r\n var minRadius = 18;\r\n return Math.log(count) / Math.log(10) * 5 + minRadius;\r\n }\r\n\r\n function createClusterPinSvg(count, buckets) {\r\n var outlineWidth = 12;\r\n var radius = getRadius(count);\r\n var size = radius * 2;\r\n var sectors = [];\r\n var l = size / 2;\r\n var a = 0\r\n var aRad = 0\r\n var z = 0\r\n var x = 0\r\n var y = 0\r\n var X = 0\r\n var Y = 0\r\n var R = 0\r\n var drawFullCircle = false;\r\n var fullCircleKey = key;\r\n for (var key in buckets) {\r\n var percent = buckets[key].doc_count / count;\r\n if (percent === 1) {\r\n drawFullCircle = true;\r\n fullCircleKey = buckets[key].key;\r\n break;\r\n }\r\n a = 360 * percent;\r\n var aCalc = (a > 180) ? 360 - a : a;\r\n var arc = 0;\r\n aRad = aCalc * Math.PI / 180;\r\n z = Math.sqrt(2 * l * l - (2 * l * l * Math.cos(aRad)));\r\n if (aCalc <= 90) {\r\n x = l * Math.sin(aRad);\r\n } else {\r\n x = l * Math.sin((180 - aCalc) * Math.PI / 180);\r\n }\r\n y = Math.sqrt(z * z - x * x);\r\n Y = y;\r\n\r\n if (a <= 180) {\r\n X = l + x;\r\n arc = 0;\r\n } else {\r\n X = l - x;\r\n arc = 1;\r\n }\r\n sectors.push({\r\n color: statusColors[buckets[key].key],\r\n arc: arc,\r\n L: l,\r\n X: X,\r\n Y: Y,\r\n R: R\r\n });\r\n R = R + a;\r\n }\r\n var svg = [''];\r\n svg.push('');\r\n svg.push('');\r\n svg.push('');\r\n if (drawFullCircle) {\r\n var circle = '';\r\n svg.push(circle);\r\n } else {\r\n sectors.map(function(sector) {\r\n var path = '';\r\n svg.push(path);\r\n });\r\n }\r\n var donut = '';\r\n svg.push(donut);\r\n var verticalOffset = $window.SVGGraphicsElement ? '' : 'dy=\"5px\"';\r\n var text = '{text}'\r\n svg.push(text);\r\n svg.push('');\r\n return svg.join('').replace('{text}', $filter('number')(count));\r\n };\r\n\r\n return {\r\n createClusterPinSvg: createClusterPinSvg,\r\n generatePinsSvg:generatePinsSvg\r\n };\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n function pageNotFoundController(WindowLocationHref) {\r\n WindowLocationHref.redirectToProductsPageNotFound();\r\n }\r\n\r\n pageNotFoundController.$inject = ['WindowLocationHref'];\r\n angular.module('NavisphereOnline').controller('PageNotFoundController', pageNotFoundController);\r\n})();\r\n\n(function () {\r\n\r\n 'use strict';\r\n loadingSpinnerController.$inject = ['$scope', '$uibModalInstance', 'title'];\r\n function loadingSpinnerController($scope, $uibModalInstance, title) {\r\n\r\n $scope.title = title;\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('close');\r\n };\r\n }\r\n\r\n angular.module('NavisphereOnline').controller('loadingSpinnerController', loadingSpinnerController);\r\n}());\r\n\r\n\n(function () {\r\n \"use strict\";\r\n\r\n angular.module('NavisphereOnline').factory('InteropService', ['$location', '$rootScope', 'authService', 'localStorageService', '$uibModal', 'User', '$window', '$state',\r\n function ($location, $rootScope, authService, localStorageService, $uibModal, User, $window, $state) {\r\n\r\n /**\r\n * Strips URL and forwards user on to appropriate page.\r\n * If user is logged out they are reauthenticated with Okta.\r\n */\r\n function loginUser() {\r\n\r\n var token = $location.search().token;\r\n var userId = $location.search().sourceUserId;\r\n var urlArr = $window.location.href.split(\"&redirectUrl=\");\r\n var redirectUrl = urlArr[1];\r\n\r\n authService.loginInterop(userId, token, redirectUrl);\r\n }\r\n\r\n function redirectToOnlineOne(userId, redirectUri, customerCode, currentUrl) {\r\n var token = '';\r\n var permissions = localStorageService.get('permissions');\r\n\r\n if (!customerCode && permissions.length === 1) {\r\n customerCode = permissions[0].customerProfile.customer.partyCode;\r\n }\r\n\r\n // Javascript doesn't allow opening a window from a .then() handler.\r\n // Need to open an empty window first, then add the url after the promise resolves\r\n var onlineOneWindow = $window.open('', '_blank');\r\n\r\n User.getInteropToken().$promise.then(function (result) {\r\n token = result.value;\r\n\r\n var encodedUri = encodeURIComponent(redirectUri);\r\n var legacyOnlineBaseUrl = appConfig.legacyOnlineBaseUrl;\r\n onlineOneWindow.location.href = legacyOnlineBaseUrl + '/Interop/Bridgeincoming.ashx?sourceUserId='\r\n + userId + '&token=' + token + '&redirectUri=' + encodedUri + '&' + 'customerCode=' + customerCode;\r\n\r\n if (currentUrl) {\r\n $window.location.href = currentUrl;\r\n } else {\r\n $state.go('app.dashboard');\r\n }\r\n\r\n });\r\n }\r\n\r\n return {\r\n loginUser: loginUser,\r\n redirectToOnlineOne: redirectToOnlineOne\r\n }\r\n }]);\r\n\r\n})();\r\n\n(function() {\r\n\r\n 'use strict';\r\n\r\n interopErrorModalController.$inject = ['$scope', '$uibModalInstance'];\r\n function interopErrorModalController($scope, $uibModalInstance) {\r\n\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('close');\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('interopErrorModalController', interopErrorModalController);\r\n}());\r\n\r\n\n/* global malarkey:false, moment:false */\r\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .constant('moment', moment);\r\n\r\n})();\r\n\n(function() {\r\n\r\n 'use strict';\r\n cargoClaimPolicyController.$inject = ['$scope', '$uibModalInstance'];\r\n function cargoClaimPolicyController($scope, $uibModalInstance) {\r\n\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('close');\r\n };\r\n }\r\n angular.module('NavisphereOnline').controller('cargoClaimPolicyController', cargoClaimPolicyController);\r\n}());\r\n\r\n\n(function () {\r\n var app = angular.module('NavisphereOnline');\r\n app.config(['$httpProvider', '$translateProvider', '$translatePartialLoaderProvider', 'tmhDynamicLocaleProvider', 'API_BASE_URL', function ($http, $translateProvider, $translatePartialLoaderProvider, tmhDynamicLocaleProvider, API_BASE_URL) {\r\n\r\n function appendTransform(defaults, transform) {\r\n // We can't guarantee that the default transformation is an array\r\n defaults = angular.isArray(defaults) ? defaults : [defaults];\r\n // Append the new transformation to the defaults\r\n return defaults.concat(transform);\r\n }\r\n\r\n $translateProvider.useLoaderCache(true);\r\n\r\n //use the partial loader for angular-translate\r\n $translateProvider.useLoader('$translatePartialLoader', {\r\n urlTemplate: API_BASE_URL + 'api/translations?language={lang}&resourceSet={part}',\r\n $http: {\r\n //data comes back from service as array of objects [{key1: TRANSLATION_KEY, value1: TRANSLATION_VALUE}, {key2: TRANSLATION_KEY, value2: TRANSLATION_VALUE}]\r\n //'angular-translate needs it as one big map of {key1: value1, key2: value2}'\r\n //This provides a transformation on the $http response to massage the data\r\n transformResponse: appendTransform($http.defaults.transformResponse, function (data) {\r\n var translationsMap = {};\r\n if(data){\r\n for (var i = 0, len = data.length; i < len; i++) {\r\n var datum = data[i];\r\n translationsMap[datum.key] = datum.value;\r\n }\r\n }\r\n return translationsMap;\r\n })\r\n }\r\n });\r\n\r\n $translateProvider.preferredLanguage('en-US');\r\n $translateProvider.fallbackLanguage('en-US');\r\n\r\n tmhDynamicLocaleProvider.localeLocationPattern('i18n/angular-locale_{{locale}}.js');\r\n }]);\r\n}());\r\n\n'use strict';\r\n\r\n(function () {\r\n var app = angular.module('NavisphereOnline');\r\n\tapp.config(['$urlMatcherFactoryProvider', '$stateProvider', '$urlRouterProvider', '$httpProvider', 'resourceLoaderProvider', '$injector', '$locationProvider',\r\n\t\tfunction ($urlMatcherFactoryProvider, $stateProvider, $urlRouterProvider, $httpProvider, resourceLoaderProvider, $injector, $locationProvider) {\r\n $locationProvider.hashPrefix(\"\");\r\n\r\n\t\t$urlMatcherFactoryProvider.caseInsensitive(true);\r\n\r\n\t\t$urlRouterProvider.otherwise(function($injector, $locationProvider, $stateProvider, $httpProvider) {\r\n if($locationProvider.path().indexOf('access_token') !== -1) {\r\n return;\r\n } else if ($locationProvider.path().indexOf('redirectUrl') !== -1 || $locationProvider.path() === '' || $locationProvider.path() === '/') {\r\n $locationProvider.path('/login');\r\n } else {\r\n $locationProvider.path('/pageNotFound');\r\n }\r\n\t\t});\r\n\r\n $stateProvider.state('app', {\r\n 'abstract': true,\r\n views: {\r\n 'header': {\r\n templateUrl: 'app/header/views/header_internal_light2.html',\r\n controller: 'InternalHeaderController'\r\n },\r\n 'footer': {\r\n templateUrl: 'app/footer/views/footer.tpl.html',\r\n controller: 'FooterController'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Navigation', 'Shipment Entry']),\r\n user: ['UserServiceHelper', function (UserServiceHelper) {\r\n return UserServiceHelper.get();\r\n }]\r\n }\r\n }).state('login', {\r\n url: '/login',\r\n data: {\r\n pageTitle: 'Login'\r\n },\r\n views: {\r\n 'header': {\r\n templateUrl: 'app/header/views/header_external.html'\r\n },\r\n 'content': {\r\n templateUrl: 'app/login/views/login.tpl.html',\r\n controller: 'LoginController'\r\n },\r\n 'footer': {\r\n templateUrl: 'app/footer/views/footer.tpl.html',\r\n controller: 'FooterController'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global'])\r\n }\r\n }).state('app.userPreferences', {\r\n url: '/userPreferences',\r\n data: {\r\n pageTitle: 'USER_SETUP'\r\n },\r\n views: {\r\n 'content@': {\r\n templateUrl: 'app/userPreferences/views/userPreferences.tpl.html',\r\n controller: \"userPreferencesController\",\r\n controllerAs: 'vm'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['User Preferences', 'Common', 'Navigation', 'Global']),\r\n preferenceData: ['$q', 'User', 'CultureRecommendation', function ($q, User, CultureRecommendation) {\r\n var deferred = $q.defer();\r\n var dbCalls = [];\r\n\r\n dbCalls.push(User.getPreferences().$promise);\r\n dbCalls.push(CultureRecommendation.query().$promise);\r\n $q.all(dbCalls).then(function (data) {\r\n var results = {\r\n userPreference: data[0],\r\n countryList: data[1]\r\n };\r\n deferred.resolve(results);\r\n });\r\n return deferred.promise;\r\n }]\r\n }\r\n }).state('app.notificationPreferences', {\r\n url: '/notificationPreferences',\r\n data: {\r\n pageTitle: 'NOTIFICATION_SETTINGS'\r\n },\r\n views: {\r\n 'content@': {\r\n templateUrl: 'app/notificationPreferences/views/notificationPreferences.tpl.html',\r\n controller: \"notificationPreferencesController\",\r\n controllerAs: 'vm'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Navigation', 'Global']),\r\n activeSubscriptions: ['SubscriptionService', function (SubscriptionService) {\r\n return SubscriptionService.get().$promise;\r\n }]\r\n }\r\n }).state('app.developmentFeatureToggles', {\r\n url: '/FeaturesInDevelopment',\r\n data: {\r\n pageTitle: 'Features in Development'\r\n },\r\n views: {\r\n 'content@': {\r\n templateUrl: 'app/developmentFeatureToggles/views/developmentFeatureToggles.tpl.html',\r\n controller: 'developmentFeatureTogglesController',\r\n controllerAs: 'vm'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Navigation', 'Global'])\r\n }\r\n }).state('app.dashboard', {\r\n url: '/dashboard',\r\n data: {\r\n pageTitle: 'PAGE_TITLE_DASHBOARD'\r\n },\r\n views: {\r\n 'content@': {\r\n templateUrl: 'app/dashboard/views/dashboard.tpl.html',\r\n controller: 'DashboardController',\r\n controllerAs: 'vm'\r\n }\r\n },\r\n params: {\r\n runIntro: null\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Navigation', 'Dashboard', 'Alerts', 'Global'])\r\n }\r\n }).state('app.reverseLogisticsSearch', {\r\n url: '/reverseLogistics',\r\n data: {\r\n pageTitle: 'REVERSE_LOGISTICS'\r\n },\r\n permission: 'Reverse Logistics',\r\n views: {\r\n 'content@': {\r\n templateUrl: 'app/reverseLogistics/views/reverseLogisticsSearch.tpl.html',\r\n controller: 'reverseLogisticsSearchController'\r\n }\r\n },\r\n params: {\r\n rLSearchResults: null\r\n },\r\n resolve: {\r\n customersWithRL: ['User', function (User) {\r\n return User.getReverseLogisticsCustomers().$promise;\r\n }],\r\n userPreferences: ['authService', function (authService) {\r\n return authService.getPreferences();\r\n }],\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Navigation', 'Global'])\r\n },\r\n onExit: ['ReverseLogisticsService', function (ReverseLogisticsService) {\r\n ReverseLogisticsService.clearResults();\r\n }]\r\n }).state('app.reverseLogisticsDetail', {\r\n url: '/reverseLogisticsDetail',\r\n data: {\r\n pageTitle: 'REVERSE_LOGISTICS_TICKET_DETAIL'\r\n },\r\n views: {\r\n 'content@': {\r\n templateUrl: 'app/reverseLogistics/views/ticketDetail.tpl.html',\r\n controller: 'reverseLogisticsDetailController'\r\n }\r\n },\r\n permission: 'Reverse Logistics',\r\n params: {\r\n ticketDetail: null,\r\n ticketStatus: null,\r\n ticketType: null,\r\n rLSearchResults: null\r\n },\r\n resolve: {\r\n ticketDetail: ['$stateParams', function ($stateParams) {\r\n return $stateParams.ticketDetail;\r\n }],\r\n notes: ['ReverseLogisticsResource', '$stateParams', function (ReverseLogisticsResource, $stateParams) {\r\n return ReverseLogisticsResource.getNotes({ ticketId: $stateParams.ticketDetail.TicketId }).$promise;\r\n }],\r\n customerSettings: ['ReverseLogisticsResource', '$stateParams', function (ReverseLogisticsResource, $stateParams) {\r\n return ReverseLogisticsResource.getProcessingFee({ cCode: $stateParams.ticketDetail.CustomerPartyCode }).$promise;\r\n }],\r\n refNumTypes: ['ReverseLogisticsResource', function (ReverseLogisticsResource) {\r\n return ReverseLogisticsResource.getRefNumTypes().$promise;\r\n }],\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Navigation', 'Global'])\r\n }\r\n }).state('app.quoteHistory', {\r\n url: '/quoteHistory',\r\n data: {\r\n pageTitle: 'QUOTE_HISTORY'\r\n },\r\n permission: 'Get A Quote',\r\n views: {\r\n 'content@': {\r\n templateUrl: 'app/quoteHistory/views/quoteHistory.tpl.html',\r\n controller: \"QuoteHistoryController\"\r\n }\r\n },\r\n resolve: {\r\n customers: [\"CustomerService\", \"User\", function (CustomerService, User) {\r\n return User.getQuoteCustomers().$promise.then(function (data) {\r\n _.forEach(data.customers, function (customer) {\r\n customer.displayName = CustomerService.GetDisplayName(customer);\r\n customer.isVisible = true;\r\n });\r\n\r\n return data.customers;\r\n });\r\n }],\r\n quoteHistory: [\"QuoteHistoryService\", \"QuoteService\", \"UserServiceHelper\", function (QuoteHistoryService, QuoteService, UserServiceHelper) {\r\n var user = UserServiceHelper.get();\r\n var quoteHistoryRequest = QuoteHistoryService.constructQuoteHistoryRequest();\r\n quoteHistoryRequest.userName = user.name;\r\n\r\n return QuoteService.getQuoteHistory(quoteHistoryRequest).$promise;\r\n }],\r\n refDataDDLs: ['RefDataMappingService', function (RefDataMappingService) {\r\n return RefDataMappingService.getRefDataCategoryDDLs();\r\n }],\r\n userPreferences: [\"User\", function (User) {\r\n return User.getPreferences().$promise;\r\n }],\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Navigation', 'Global'])\r\n }\r\n }).state('app.orderConfirmation', {\r\n url: '/orderConfirmation?confirmationNumber&partyCode&userId&partyNumber',\r\n data: {\r\n pageTitle: 'ORDER_CONFIRMATION'\r\n },\r\n permission: 'Create Order',\r\n views: {\r\n \"content@\": {\r\n controller: 'orderConfirmationController',\r\n templateUrl: '/app/orderConfirmation/views/orderConfirmation.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Shipment Entry'])\r\n }\r\n }).state('app.orderEditConfirmation', {\r\n url: '/orderEditConfirmation?orderNumber',\r\n data: {\r\n pageTitle: 'ORDER_CONFIRMATION'\r\n },\r\n views: {\r\n \"content@\": {\r\n controller: 'orderEditConfirmationController',\r\n templateUrl: '/app/orderConfirmation/views/orderEditConfirmation.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common']),\r\n orderNumber: ['$stateParams', function ($stateParams) {\r\n return $stateParams.orderNumber;\r\n }]\r\n\t\t\t}\r\n }).state('app.orderDetails', {\r\n url: '/orderDetails?orderNumber',\r\n data: {\r\n pageTitle: 'ORDER_DETAILS'\r\n },\r\n views: {\r\n \"content@\": {\r\n controller: 'orderDetailsController',\r\n templateUrl: 'app/orderDetails/views/orderDetails.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Shipment Entry']),\r\n orderDetails: ['OrderService', '$stateParams', '$q', 'OrderEditRulesService', function (OrderService, $stateParams, $q, OrderEditRulesService) {\r\n var deferred = $q.defer();\r\n OrderService.getOrder({ orderNumber: $stateParams.orderNumber })\r\n .$promise.then(function (orderDetails) {\r\n OrderEditRulesService.getOrderEditRules({ serviceStatusRDN: orderDetails.services[0].statusRDN }).$promise\r\n .then(function (editRules) {\r\n orderDetails.editRules = editRules;\r\n deferred.resolve(orderDetails);\r\n }, function (data) {\r\n deferred.reject(data);\r\n });\r\n }, function (data) {\r\n deferred.reject(data);\r\n });\r\n return deferred.promise;\r\n }],\r\n userPreferences: ['authService', function (authService) {\r\n return authService.getPreferences();\r\n }],\r\n refDataDDLs: ['RefDataMappingService', function (RefDataMappingService) {\r\n return RefDataMappingService.getRefDataCategoryDDLs();\r\n }]\r\n }\r\n }).state('app.myOrders', {\r\n url: '/myorders?offset&limit&statuses&methods&ranges&search&sortBy',\r\n data: {\r\n pageTitle: 'MY_ORDERS'\r\n },\r\n views: {\r\n \"content@\": {\r\n controller: 'myOrdersController',\r\n templateUrl: '/app/myOrders/views/myOrders.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Shipment Entry', 'Dashboard']),\r\n orderResults: ['OrderService', '$stateParams', function (OrderService, $stateParams) {\r\n\r\n var search = {\r\n offset: $stateParams.offset || 0,\r\n limit: $stateParams.limit || 10,\r\n statuses: $stateParams.statuses,\r\n methods: $stateParams.methods,\r\n ranges: $stateParams.ranges,\r\n search: $stateParams.search,\r\n sortBy: $stateParams.sortBy\r\n };\r\n return OrderService.search(search).$promise;\r\n }],\r\n userPreference: ['authService', function (authService) {\r\n return authService.getPreferences();\r\n }],\r\n status: ['ReferenceData', function (ReferenceData) {\r\n return ReferenceData.get({ categoryCode: 'ORIONStatus' }).$promise;\r\n }]\r\n\r\n }\r\n }).state('app.getAQuote', {\r\n url: '/getAQuote',\r\n permission: 'Get A Quote',\r\n data: {\r\n pageTitle: 'GET_A_QUOTE'\r\n },\r\n params: {\r\n noQuotesFound: false,\r\n rawQuoteParams: {},\r\n shipDate: null\r\n },\r\n views: {\r\n \"content@\": {\r\n controller: 'getAQuoteController',\r\n templateUrl: 'app/getAQuote/views/getAQuote.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Shipment Entry']),\r\n createQuoteCustomers: ['User', function (User) {\r\n return User.getQuoteCustomers().$promise;\r\n }],\r\n userPreferences: ['authService', function (authService) {\r\n return authService.getPreferences();\r\n }],\r\n refDataDDLs: ['RefDataMappingService', function (RefDataMappingService) {\r\n return RefDataMappingService.getRefDataCategoryDDLs();\r\n }]\r\n }\r\n }).state('app.reQuote', {\r\n url: '/reQuote?requestId',\r\n permission: 'Get A Quote',\r\n data: {\r\n pageTitle: 'GET_A_QUOTE'\r\n },\r\n params: {\r\n noQuotesFound: false,\r\n rawQuoteParams: {},\r\n shipDate: null\r\n },\r\n views: {\r\n \"content@\": {\r\n controller: 'getAQuoteController',\r\n templateUrl: 'app/getAQuote/views/getAQuote.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Shipment Entry']),\r\n createQuoteCustomers: ['User', function (User) {\r\n return User.getQuoteCustomers().$promise;\r\n }],\r\n userPreferences: ['authService', function (authService) {\r\n return authService.getPreferences();\r\n }],\r\n refDataDDLs: ['RefDataMappingService', function (RefDataMappingService) {\r\n return RefDataMappingService.getRefDataCategoryDDLs();\r\n }]\r\n }\r\n }).state('app.getAQuoteResults', {\r\n url: '/getAQuoteResults',\r\n data: {\r\n pageTitle: 'QUOTE_SUMMARY'\r\n },\r\n permission: 'Get A Quote',\r\n params: {\r\n isShippable: null,\r\n getAQuoteParams: null,\r\n quoteRequestId: null,\r\n quoteResults: null,\r\n rawQuoteParams: null\r\n },\r\n onEnter: [\"$transition$\", function ($transition$) {\r\n var stateParams = $transition$.params();\r\n if (!stateParams.getAQuoteParams && !stateParams.rawQuoteParams) {\r\n return $transition$.router.stateService.target(\"app.quoteHistory\");\r\n }\r\n\r\n if (_.isNull(stateParams.isShippable)) {\r\n /*\r\n Quotes are shippable by default.\r\n\r\n It is only in cases where the user clicks view results on an expired or already ordered quote in\r\n Quote History that we want to prevent the quote from being shippable.\r\n */\r\n var params = _.clone(stateParams);\r\n params.isShippable = true;\r\n return $transition$.router.stateService.target($transition$.to(), params);\r\n }\r\n }],\r\n views: {\r\n \"content@\": {\r\n controller: 'getAQuoteResultsController',\r\n templateUrl: 'app/getAQuote/views/getAQuoteResults.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Shipment Entry']),\r\n userPreferences: ['authService', function (authService) {\r\n return authService.getPreferences();\r\n }]\r\n }\r\n }).state('app.quoteToOrder', {\r\n url: '/quoteToOrder',\r\n data: {\r\n pageTitle: \"QUOTE_TO_ORDER\"\r\n },\r\n permission: 'Create Order',\r\n params: {\r\n getAQuoteParams: null,\r\n rawQuoteParams: null,\r\n quoteResults: null,\r\n quote: null,\r\n destination: null,\r\n origin: null,\r\n totalCharge: null,\r\n totalWeight: null,\r\n quoteRequestId: null\r\n },\r\n onEnter: [\"$transition$\", function ($transition$) {\r\n function areAnyNull(params) {\r\n var flag = false;\r\n\r\n _.forEach(params, function (value, key) {\r\n if (_.isNull(value) && key !== '#') {\r\n flag = true;\r\n }\r\n });\r\n\r\n return flag;\r\n }\r\n\r\n var params = $transition$.params();\r\n\r\n if (areAnyNull(params)) {\r\n return $transition$.router.stateService.target(\"app.getAQuote\");\r\n }\r\n }],\r\n views: {\r\n \"content@\": {\r\n controller: \"quoteToOrderController\",\r\n templateUrl: \"app/getAQuote/views/quoteToOrder.tpl.html\"\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global']),\r\n refDataDDLs: [\"RefDataMappingService\", function (RefDataMappingService) {\r\n return RefDataMappingService.getRefDataCategoryDDLs();\r\n }],\r\n userPreferences: [\"User\", function (User) {\r\n return User.getPreferences().$promise;\r\n }]\r\n }\r\n }).state('app.drawPO', {\r\n url: '/drawpo',\r\n data: {\r\n pageTitle: 'DRAW_PO'\r\n },\r\n permission: 'Draw PO',\r\n views: {\r\n \"content@\": {\r\n controller: 'DrawSearchController',\r\n templateUrl: 'app/purchaseOrder/views/draw-search.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global']),\r\n userPreferences: ['authService', function (authService) {\r\n return authService.getPreferences();\r\n }]\r\n }\r\n }).state('app.reports', {\r\n onExit: ['ReportPersistanceService', function (ReportPersistanceService) {\r\n ReportPersistanceService.clearReportConfig();\r\n }]\r\n }).state('app.reports.reportHub', {\r\n url: '/reportHub',\r\n onEnter: function() {\r\n document.location.href = appConfig.reportsUIBaseUrl;\r\n },\r\n }).state('app.reports.servicePerformanceReport', {\r\n url: '/reportHub/serviceperformance',\r\n data: {\r\n pageTitle: 'SERVICE_PERFORMANCE'\r\n },\r\n permission: 'Service Performance Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'ServicePerformanceReportController',\r\n templateUrl: 'app/reports/views/servicePerformanceReport.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting'])\r\n }\r\n }).state('app.reports.inTransitReport', {\r\n url: '/reportHub/intransit',\r\n data: {\r\n pageTitle: 'IN_TRANSIT'\r\n },\r\n permission: 'In Transit Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'InTransitOrdersController',\r\n templateUrl: 'app/reporting/inTransitOrders/views/report.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting'])\r\n }\r\n }).state('app.reports.overdueOrdersReport', {\r\n url: '/reportHub/overdueorders',\r\n data: {\r\n pageTitle: 'OVERDUE_ORDERS'\r\n },\r\n permission: 'Overdue Orders Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'OverdueOrdersController',\r\n templateUrl: 'app/reporting/overdueOrders/views/report.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting'])\r\n }\r\n }).state('app.reports.ordersOverviewReport', {\r\n url: '/reportHub/ordersoverview',\r\n data: {\r\n pageTitle: 'ORDER_OVERVIEW'\r\n },\r\n permission: 'Orders Overview Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'OrdersOverviewReportController',\r\n templateUrl: 'app/reports/views/ordersOverviewReport.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting']),\r\n customerModes: ['ReportingService', function (ReportingService) {\r\n return ReportingService.historicOrdersModes().$promise\r\n }]\r\n }\r\n }).state('app.reports.savedOrdersSummary', {\r\n url: '/reportHub/orderssummary/saved',\r\n data: {\r\n pageTitle: 'ORDERS_SUMMARY'\r\n },\r\n permission: 'Orders Summary Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'SavedOrdersSummaryController',\r\n templateUrl: 'app/reporting/ordersSummary/views/savedReports.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting', 'ReportingService']),\r\n savedReportConfigs: ['ReportingService', function (ReportingService) {\r\n var configPull = { reportName: \"Orders Summary Report\" };\r\n return ReportingService.selectSavedReportConfig(configPull).$promise;\r\n }],\r\n reportConfigsSchedules: ['ReportingService', function (ReportingService) {\r\n var configPull = {reportName: \"Orders Summary Report\"};\r\n return ReportingService.reportConfigSubscription(configPull).$promise;\r\n }],\r\n preferences: ['User', function (User) {\r\n return User.getPreferences().$promise;\r\n }]\r\n }\r\n }).state('app.reports.createOrdersSummary', {\r\n url: '/reportHub/orderssummary/create',\r\n data: {\r\n pageTitle: 'CREATE_ORDERS_SUMMARY_REPORT'\r\n },\r\n params: { reportConfigPass: \"\" },\r\n permission: 'Orders Summary Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'CreateOrdersSummaryController',\r\n templateUrl: 'app/reporting/ordersSummary/views/createReport.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting']),\r\n orderCustomers: ['ReportingService', function (ReportingService) {\r\n return ReportingService.ordersSummaryCustomers().$promise;\r\n }],\r\n customerModes: ['ReportingService', function (ReportingService) {\r\n return ReportingService.reportingModeSet().$promise;\r\n }]\r\n }\r\n }).state('app.reports.ordersSummary', {\r\n url: '/reportHub/orderssummary',\r\n data: {\r\n pageTitle: 'ORDERS_SUMMARY'\r\n },\r\n permission: 'Orders Summary Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'OrdersSummaryController',\r\n templateUrl: 'app/reporting/ordersSummary/views/report.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting'])\r\n }\r\n }).state('app.reports.savedLocation', {\r\n url: '/reportHub/location/saved',\r\n data: {\r\n pageTitle: 'LOCATION'\r\n },\r\n permission: 'Location Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'SavedLocationController',\r\n templateUrl: 'app/reporting/location/views/savedReports.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting']),\r\n savedReportConfigs: ['ReportingService', function (ReportingService) {\r\n var configPull = { reportName: \"Location Report\" };\r\n return ReportingService.selectSavedReportConfig(configPull).$promise;\r\n }],\r\n reportConfigsSchedules: ['ReportingService', function (ReportingService) {\r\n var configPull = {reportName: \"Location Report\"};\r\n return ReportingService.reportConfigSubscription(configPull).$promise;\r\n }],\r\n preferences: ['User', function (User) {\r\n return User.getPreferences().$promise;\r\n }]\r\n }\r\n }).state('app.reports.createLocation', {\r\n url: '/reportHub/location/create',\r\n data: {\r\n pageTitle: 'CREATE_LOCATION_REPORT'\r\n },\r\n params: { reportConfigPass: \"\" },\r\n permission: 'Location Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'CreateLocationController',\r\n templateUrl: 'app/reporting/location/views/createReport.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting']),\r\n locationCustomers: ['ReportingService', function (ReportingService) {\r\n return ReportingService.locationCustomers().$promise\r\n }],\r\n customerModes: ['ReportingService', function (ReportingService) {\r\n return ReportingService.reportingModeSet().$promise;\r\n }]\r\n }\r\n }).state('app.reports.locationReport', {\r\n url: '/reportHub/location',\r\n data: {\r\n pageTitle: 'LOCATION'\r\n },\r\n permission: 'Location Report',\r\n views: {\r\n \"content@\": {\r\n controller: 'LocationReportController',\r\n templateUrl: 'app/reporting/location/views/report.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting'])\r\n }\r\n }).state('app.reports.subscription', {\r\n url: '/reportHub/subscription?token',\r\n data: {\r\n pageTitle: 'SUBSCRIPTION'\r\n },\r\n permission: 'Report Subscription',\r\n views: {\r\n \"content@\": {\r\n controller: 'SubscriptionController',\r\n templateUrl: 'app/reporting/subscription/views/subscription.tpl.html'\r\n }\r\n },\r\n params: {\r\n reportConfigId: null,\r\n reportName: null,\r\n previousRoute : null,\r\n test: null,\r\n subscriptionType : null,\r\n token: null\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting']),\r\n preferences: ['User', function (User) {\r\n return User.getPreferences().$promise;\r\n }]\r\n },\r\n onEnter: ['$state', '$stateParams', function ($state, $stateParams) {\r\n if (_.isNull($stateParams.reportConfigId) && _.isNull($stateParams.token)) {\r\n $state.go('app.reports.reportHub');\r\n }\r\n }]\r\n }).state('app.reports.unsubscribe', {\r\n url: '/reportHub/unsubscribe?reportConfigId?reportName',\r\n data: {\r\n pageTitle: 'UNSUBSCRIBE'\r\n },\r\n params:{\r\n reportConfigId : null,\r\n reportName: null,\r\n previousRoute : null\r\n },\r\n permission: 'Report Subscription',\r\n views: {\r\n \"content@\": {\r\n controller: 'UnsubscribeController',\r\n templateUrl: 'app/reporting/subscription/views/unsubscribe.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting']),\r\n subscriptionDetail: ['ReportingService', '$stateParams', function (ReportingService, $stateParams) {\r\n var reportConfigId = {savedReportConfigId: $stateParams.reportConfigId};\r\n return ReportingService.subscriptionDetail(reportConfigId).$promise\r\n }],\r\n preferences: ['User', function (User) {\r\n return User.getPreferences().$promise;\r\n }]\r\n }\r\n }).state('app.reports.subscriptionDownload', {\r\n url: '/reportHub/subscriptionDownload?token',\r\n data: {\r\n pageTitle: 'SUBSCRIPTION_DOWNLOAD'\r\n },\r\n permission: 'Report Subscription',\r\n views: {\r\n \"content@\": {\r\n controller: 'SubscriptionDownloadController',\r\n templateUrl: 'app/reporting/subscription/views/download.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global', 'Reporting']),\r\n token: ['$stateParams', function ($stateParams) {\r\n return $stateParams.token\r\n }]\r\n },\r\n onEnter: [\"$state\", \"$stateParams\", function ($state, $stateParams) {\r\n if (!$stateParams.token) {\r\n $state.go(\"app.reports.reportHub\");\r\n }\r\n }]\r\n }).state('app.reports.noSubscriptionAccess', {\r\n url: '/reportHub/noSubscriptionAccess',\r\n data: {\r\n pageTitle: 'NO_SUBSCRIPTION_ACCESS'\r\n },\r\n views: {\r\n \"content@\": {\r\n templateUrl: 'app/reporting/subscription/views/noSubscriptionAccess.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Reporting'])\r\n }\r\n }).state('app.accountSummary', {\r\n url: '/accountsummary',\r\n data: {\r\n pageTitle: 'ACCOUNT_SUMMARY'\r\n },\r\n permission: 'Accounts Payable',\r\n views: {\r\n \"content@\": {\r\n controller: 'AccountSummaryController',\r\n templateUrl: 'app/accountsPayable/views/accountsummary.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global']),\r\n invoiceResults: ['InvoiceService', function (InvoiceService) {\r\n var search = {\r\n page: 1,\r\n limit: 10,\r\n invoiceStatus: 1,\r\n sortBy: 'dueDate',\r\n sortDescending: false\r\n };\r\n return InvoiceService.search(search).$promise;\r\n }]\r\n }\r\n }).state('app.searchInvoices', {\r\n url: '/searchinvoices',\r\n data: {\r\n pageTitle: 'SEARCH_INVOICES'\r\n },\r\n permission: 'Accounts Payable',\r\n views: {\r\n \"content@\": {\r\n controller: 'SearchInvoicesController',\r\n templateUrl: 'app/accountsPayable/views/searchinvoices.tpl.html'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global'])\r\n }\r\n })\r\n .state('Resend Invitation', {\r\n url: '/resendInvitation',\r\n data: {\r\n pageTitle: 'RESEND_INVITATION'\r\n },\r\n views: {\r\n 'header': {\r\n templateUrl: 'app/header/views/header_external.html'\r\n },\r\n 'content': {\r\n templateUrl: 'app/resendInvitation/views/resendInvitationForm.tpl.html',\r\n controller: 'resendInvitationController'\r\n },\r\n 'footer': {\r\n templateUrl: 'app/footer/views/footer.tpl.html',\r\n controller: 'FooterController'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common']),\r\n invitation: ['$stateParams', function ($stateParams) {\r\n return $stateParams.invitation;\r\n }]\r\n },\r\n params: { invitation: null }\r\n }).state('Resend Invitation Complete', {\r\n url: '/resendInvitationComplete',\r\n data: {\r\n pageTitle: 'RESEND_INVITATION_COMPLETE'\r\n },\r\n views: {\r\n 'header': {\r\n templateUrl: 'app/header/views/header_external.html'\r\n },\r\n 'content': {\r\n templateUrl: '../app/resendInvitation/views/resendInvitationComplete.tpl.html',\r\n controller: 'resendInvitationCompleteController'\r\n },\r\n 'footer': {\r\n templateUrl: 'app/footer/views/footer.tpl.html',\r\n controller: 'FooterController'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common'])\r\n }\r\n }).state('app.shipmentMap', {\r\n url: '/maps',\r\n data: {\r\n pageTitle: 'Maps'\r\n },\r\n views: {\r\n 'content@': {\r\n templateUrl: 'app/shipmentMap/shipmentMap.html',\r\n controller: 'shipmentMapController',\r\n controllerAs: 'vm'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Navigation', 'Global'])\r\n }\r\n }).state('logout', {\r\n url: '/logout',\r\n data: {\r\n pageTitle: 'Logout'\r\n },\r\n onEnter: ['authService', function (authService) {\r\n authService.logout();\r\n }]\r\n }).state('bridge', {\r\n url: '/bridge',\r\n onEnter: ['InteropService', function (InteropService) {\r\n InteropService.loginUser();\r\n }\r\n ]\r\n }).state('outgoingBridge', {\r\n url: '/outgoingBridge',\r\n params: {\r\n redirectUrl: null,\r\n currentUrl: null\r\n },\r\n onEnter: ['localStorageService', 'InteropService', '$stateParams', function (localStorageService, InteropService, $stateParams) {\r\n var redirectUrl = $stateParams.redirectUrl;\r\n var currentUrl = $stateParams.currentUrl;\r\n var user = localStorageService.get(\"User\");\r\n InteropService.redirectToOnlineOne(user.userId, redirectUrl, null, currentUrl);\r\n }]\r\n }).state('pageNotFound', {\r\n url: '/pageNotFound',\r\n data: {\r\n pageTitle: 'PAGE_TITLE_CREATE_SHIPMENT'\r\n },\r\n views: {\r\n 'content': {\r\n controller: 'PageNotFoundController'\r\n }\r\n },\r\n resolve: {\r\n translations: resourceLoaderProvider.loadTranslations(['Common', 'Global'])\r\n }\r\n });\r\n }]);\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n function queryService() {\r\n\r\n function stringify(query) {\r\n var queryArray = Object.keys(query).map(function(queryKey){\r\n return encodeURI(queryKey + '=' + query[queryKey]);\r\n });\r\n\r\n return queryArray.join('&');\r\n }\r\n\r\n return {\r\n stringify: stringify\r\n };\r\n }\r\n queryService.$inject = [];\r\n angular.module('NavisphereOnline').factory('queryService', queryService);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n /** @ngInject */\r\n function config(localStorageServiceProvider, jwtOptionsProvider, $httpProvider, okta_settings) {\r\n\r\n\r\n localStorageServiceProvider.setPrefix('NavisphereOnline');\r\n\r\n jwtOptionsProvider.config({\r\n tokenGetter: ['authService', function (authService) {\r\n return authService.getAccessToken();\r\n }],\r\n whiteListedDomains: okta_settings.whiteListedDomains,\r\n unauthenticatedRedirector: ['authService', function (authService) {\r\n authService.checkAuthSession();\r\n }]\r\n });\r\n\r\n $httpProvider.interceptors.push('jwtInterceptor');\r\n }\r\n\r\n config.$inject = ['localStorageServiceProvider', 'jwtOptionsProvider', '$httpProvider', 'okta_settings'];\r\n\r\n angular\r\n .module('NavisphereOnline')\r\n .config(config);\r\n})();\r\n\n angular.element(document).on('click', 'a.ui-select-choices-row-inner' , function() { return false; });\r\n\n(function () {\r\n 'use strict';\r\n function externalRoutesService(searchBaseUrl, queryService) {\r\n\r\n function search(query){\r\n window.location = searchBaseUrl + '#/?' + queryService.stringify(query);\r\n }\r\n\r\n return {\r\n search: search\r\n };\r\n }\r\n externalRoutesService.$inject = ['searchBaseUrl', 'queryService'];\r\n angular.module('NavisphereOnline').factory('externalRoutesService', externalRoutesService);\r\n})();\r\n\n'use strict';\r\n\r\nvar bolContext = {\r\n Order: 1,\r\n Load: 2\r\n};\r\n\r\nvar applicationIds = {\r\n Online2: 1,\r\n Inventory: 2,\r\n SmallBusiness: 3,\r\n Online1: 4,\r\n Products: 5,\r\n ManagedProcurement: 6,\r\n Insight: 7,\r\n RobinsonLabs: 8\r\n}\r\n\r\n\r\nangular.module('NavisphereOnline.constants', [])\r\n .constant('API_BASE_URL', appConfig.apiUrl)\r\n .constant('applicationVersion', appConfig.applicationVersion)\r\n .constant('bingMapKey', appConfig.bingMapKey)\r\n .constant('weatherApiKey', appConfig.weatherApiKey)\r\n .constant('DEV_FEATURES', appConfig.devFeatures)\r\n .constant('searchBaseUrl', appConfig.searchBaseUrl)\r\n .constant('reportsUIBaseUrl', appConfig.reportsUIBaseUrl)\r\n .constant('bolContext', bolContext)\r\n .constant('okta_settings', appConfig.okta_settings)\r\n .constant('API_COMMON_URL', appConfig.commonApiUrl)\r\n .constant('APPLICATIONS', applicationIds)\r\n .constant(\"OKTA_CONFIG\", {\r\n options : {\r\n issuer: appConfig.okta_settings.issuer,\r\n clientId: appConfig.okta_settings.clientID,\r\n tokenManager:{\r\n storage: \"memory\",\r\n expireEarlySeconds: 120,\r\n autoRenew: true\r\n },\r\n pkce: false,\r\n postLogoutRedirectUri: appConfig.postLogoutRedirectUri\r\n },\r\n apiUrl : appConfig.apiUrl\r\n })\r\n .constant('MERGE_ACCOUNTS', 'MERGE ACCOUNTS');\r\n"],"sourceRoot":"/source/"}