{"version":3,"sources":["datepicker.js","timepicker.js","tab.js","tooltip.js","select.js","clickinon.angular.controls.autocomplete.js","clickinon.angular.controls.multi-select.js","clickinon.angular.controls.format-date.js","clickinon.angular.controls.format-time.js","clickinon.angular.controls.form-autofill-fix.js","routes.js","app.js","shared.module.js","login.module.js","menu.module.js","address.module.js","control_screen.module.js","map.module.js","consignments.module.js","manifests.module.js","customers.module.js","suppliers.module.js","settings.module.js","accounts.module.js","reports.module.js","menu.directive.js","address_list.directive.js","change_password.directive.js","assign_supplier.directive.js","loading.directive.js","edit_date_time.directive.js","prevent_enter_submit.directive.js","capitlize.directive.js","form_tracking.directive.js","signed_out.directive.js","modal.directive.js","consignment_address_goods_photos.directive.js","consignment_address_paperwork_photos.directive.js","valid-submit.directive.js","control_screen.consignments.directive.js","control_screen.manifests.directive.js","consignment_details.directive.js","consignment_address_list.directive.js","consignment_address.directive.js","consignment_address_details.directive.js","consignment_address_load_details_list.directive.js","consignment_address_collection_load_details.directive.js","consignment_address_delivery_load_details.directive.js","consignment_address_additional_charges_list.directive.js","consignment_address_additional_charge.directive.js","consignment_quote_confirmation.directive.js","consignment_confirmation.directive.js","manifest_confirmation.directive.js","consignment_missing_fields_confirmation.directive.js","consignment_change_log.directive.js","delete_consignment_confirmation.directive.js","consignment_address_status.directive.js","consignment_address_signature.directive.js","customer_list.directive.js","customer_details.directive.js","customer_contact_list.directive.js","customer_contact.directive.js","customer_user_list.directive.js","customer_user.directive.js","customer_address_list.directive.js","customer_address.directive.js","customer_pricing_list.directive.js","customer_pricing_matrix_details.directive.js","customer_pricing_matrix_item_details.directive.js","customer_account_info.directive.js","customer_invoice_settings.directive.js","customer_optional_consignment_fields.directive.js","customer_control_screen_configuration.directive.js","supplier_list.directive.js","supplier_details.directive.js","supplier_licence_list.directive.js","supplier_licence.directive.js","supplier_addresses.directive.js","supplier_vehicle_list.directive.js","supplier_vehicle.directive.js","supplier_account_info.directive.js","supplier_user_details.directive.js","supplier_deductions_list.directive.js","supplier_deduction.directive.js","supplier_photo_list.directive.js","supplier_photo.directive.js","global_settings.directive.js","vat_code_list.directive.js","vat_code.directive.js","currency_list.directive.js","currency.directive.js","supplier_type_list.directive.js","supplier_type.directive.js","licence_category_list.directive.js","licence_category.directive.js","ledger_number_list.directive.js","ledger_number.directive.js","user_list.directive.js","user.directive.js","additional_charge_list.directive.js","additional_charge.directive.js","vehicle_type_list.directive.js","vehicle_type.directive.js","pricing_list.directive.js","pricing_matrix_details.directive.js","pricing_matrix_item_details.directive.js","whitelisted_ip_address_list.directive.js","whitelisted_ip_address.directive.js","area_additional_charge_rule_list.directive.js","area_additional_charge_rule.directive.js","supplier_billing_type_list.directive.js","supplier_billing_type.directive.js","global_address_list.directive.js","global_address.directive.js","manifest_details.directive.js","manifest_change_log.directive.js","delete_manifest_confirmation.directive.js","email_confirmations.directive.js","accounts.consignments.directive.js","accounts.manifests.directive.js","transport_exchange_pods.directive.js","simple_profitability.directive.js","profitability.directive.js","earnings.directive.js","credit.directive.js","user_ip_log.directive.js","consignments.factory.js","manifests.factory.js","suppliers.factory.js","customers.factory.js","atlas_users.factory.js","countries.factory.js","settings.factory.js","photos.factory.js","common.factory.js","users.factory.js","authorizations-interceptor.factory.js","clickinon.http-interceptor-progress.factory.js","postcode-lookup.factory.js","manifestConsignmentAddressDate.filter.js","login.controller.js","menu.controller.js","control_screen.controller.js","control_screen.consignments.controller.js","control_screen.manifests.controller.js","map.controller.js","consignments.controller.js","manifests.controller.js","suppliers.controller.js","customers.controller.js","settings.controller.js","accounts.controller.js","accounts.consignments.controller.js","accounts.manifests.controller.js","transport_exchange_pods.controller.js","reports.controller.js","profitability.controller.js","simple_profitability.controller.js","earnings.controller.js","credit.controller.js","user_ip_log.controller.js"],"names":["angular","module","run","$templateCache","put","c","e","directive","$http","$parse","$timeout","restrict","scope","onItemSelected","getItems","onChange","model","disabled","onAlternateSearchClick","text","require","template","elem","attr","placeholder","undefined","cssClass","loadingText","displayProperty","showAlternativeSearch","showAlternativeSearchNoResults","alternativeSearchText","alternativeSearchCssClass","html","link","ngModelController","data","loadingData","searchText","textboxInFocus","resultsInFocus","minChars","minPause","errorMessage","noResults","highlightIndex","selectingItem","alternativeSearchType","type","hasSearched","$render","$modelValue","eval","selectedProperty","search","$setValidity","searchedValue","loadDataSilently","arguments","length","parseInt","timer","cancel","url","get","success","response","error","status","then","keyPress","event","keyCode","selectItem","stopPropagation","click","itemMouseOver","item","alternateSearch","console","log","$on","document","addEventListener","$document","items","key","selectedItems","class","buildSelectedItemText","selectedItemsText","initialText","input","find","show","on","$apply","isSelected","itemSelected","forEach","value","itemAlreadySelected","splice","push","moment","bind","typedFormat","outputFormat","dateFormat","val","datePart","substr","indexOf","monthPart","yearPart","date","year","month","toDate","$setViewValue","format","toUpperCase","timeFormat","hourPart","minutePart","hour","minute","priority","element","attrs","ngModelCtrl","autofillElements","$","i","is","trigger","foundationRoutes","name","path","config","$urlProvider","$locationProvider","$animateProvider","$httpProvider","otherwise","html5Mode","enabled","requireBase","hashPrefix","classNameFilter","interceptors","fn","toJSON","this","$rootScope","FastClick","attach","body","title","pageTitle","$inject","shared","login","menu","address","control_screen","map","consignments","manifests","customers","suppliers","settings","accounts","reports","selectedDateTime","updateDateTime","el","which","preventDefault","window","stop","execCommand","modelCtrl","capitalize","inputValue","capitalized","$parsers","ngModel","$scope","$element","$attrs","areYouSurePrompt","formObj","$pristine","removeEventListener","prompt","defaultPrevented","confirm","controller","controllerAs","$state","FoundationApi","UserFactory","AtlasModalFactory","ok","logout","close","go","transclude","modal","id","appendTo","open","addClass","hide","removeClass","add","remove","factory","modals","service","modalToRemove","_","findWhere","without","form","$submitted","validSubmit","$valid","$event","customer","consignment","isFrequentConsignment","ignoreRequiredFieldsAndSave","closeConsignmentMissingFieldsConfirmationModal","countries","xeroOrganisations","setParent","ParentId","Parent","Id","customerAccountTypes","ledgerNumbers","vatCodes","$parent","globalAddressesForm","consignmentAddressesCompleted","currentEmail","confirmationEmailErrorMessage","checkEmailAddresses","sendEmails","editEmails","sendEmail","dontSendEmail","dontSendEmails","$filter","copyConsignmentId","createNewConsignment","ConsignmentNumber","IsQuote","Customer","BookingContact","SaveContact","ConsignmentType","VehicleType","NotesForSupplier","NotesForOffice","NotesForInvoice","InvoiceStatus","AtlasCourierExpress","Enums","Uninvoiced","IsFrequentConsignment","FrequentConsignmentTemplate","OptimiseStops","CalculateTimes","Mileage","TotalTimeInMinutes","TotalMiles","RecommendedPrice","ApplyPostcodePricingRules","Price","IsWebBooking","IsCompleted","IsManuallyMarkedInvoiceable","ConsignmentAddresses","getConsignment","self","__WEB_SERVICE_BASE_URL","headers","Token","token","loadDetails","additionalCharges","locationLastDeliveryDate","locationLastDeliveryAddress","ScheduledStartDateAndTime","DisplayScheduledStartDateAndTime","ScheduledStartToDateAndTime","DisplayScheduledStartToDateAndTime","d","LoadDetails","BarcodeFileName","BarcodeThumbnailFileName","replace","Quantity","Description","AdditionalCharges","AdditionalCharge","ChargeFor","Cost","TotalLoadDetailsHtml","TotalAdditionalChargesHtml","Manifest","Supplier","SupplierUsers","LastKnownLocation","a","Address","LastDeliveryDate","LastDeliveryAddress","FormattedLastDeliveryAddress","getFullFormattedConsignmentAddress","searchConsignments","startDate","endDate","customerName","vehicleType","poNumber","consignmentNumber","manifestNumber","collectionAddress","deliveryAddress","bookingContact","supplierName","isFrequent","haveNoManifest","isQuote","isDeleted","urlParameters","encodeURIComponent","DisplayDateCreated","DateCreated","startDeliveryDate","startToDeliveryDate","timed","startDeliveryAddress","lastDeliveryDate","lastDeliveryAddress","totalLoad","manifestNumbers","consignmentManifests","Timed","ManifestNumber","ConsignmentAddressType","Name","m","CustomerName","ManifestNumbers","StartDeliveryDate","StartToDeliveryDate","StartDeliveryAddress","DisplayStartDeliveryAddress","Postcode","Town","AddressLine1","FormattedStartDeliveryAddress","DisplayLastDeliveryAddress","TotalLoad","Suppliers","exportConsignments","getConsignmentAddressesWithNoManifest","consignmentAddresses","getConsigmentAddress","index","getFormattedConsignmentAddress","args","formattedAddress","County","CompanyName","saveQuote","saveConsignment","ContactName","Phone","ContactPhoneNumber","Email","ContactEmailAddress","CreatedBy","ConsignmentChangeLogs","ConsignmentOrder","Consignment","ManifestChangeLogs","Vehicles","CustomerBranch","Contacts","TotalLoadedMiles","CustomerInvoice","post","deleteConsignment","copy","delete","getReport","showPrice","showPhotos","showSupplierNotes","responseType","sendReportEmail","to","To","Subject","Body","getAccountsConsignments","missingPONUmber","incorrectProfitMargin","missingPOD","holdInvoice","ignoreProfitMargin","Manifests","StartDeliveryAddressPostcode","LastDeliveryAddressPostcode","ConsignmentAddressesLength","VehicleTypeName","ConsignmentTypeShortName","ShortName","getProfitabilityConsignments","encodeURI","SchedsuledStartDateAndTime","getSimpleProfitabilityConsignmentsReport","invoiceConsignments","invoiceDate","isSame","ignoreProfitMargins","cancellationRequest","manifest","createNewManifest","totalMiles","totalTime","ManifestStatus","StatusColour","HexCode","Currency","getManifest","consignmentNumbers","firstConsignmentBookedDate","consignmentTypes","customerNotes","officeNotes","supplierNotes","invoiceNotes","manifestConsignments","startDeliveryTimed","lastDeliveryTimed","middleDeliveryTimed","DisplayEstimatedStartDateAndTime","DisplayStartStartTime","StartTime","DisplayArrivalTime","ArrivalTime","DisplayCompletionTime","CompletionTime","FormattedAddress","startDeliveryToDate","lastDeliveryToDate","Notes","Customers","ConsignmentNumbers","ConsignmentTypes","StartDeliveryToDate","LastDeliveryToDate","FirstConsignmentBookedDate","ManifestCreationDate","AllCustomerNotesHtml","AllOfficeNotesHtml","AllSupplierNotesHtml","AllInvoiceNotesHtml","StartDeliveryTimed","LastDeliveryTimed","MiddleDeliveryTimed","searchManifests","nonspec","notAcknowledged","isBackload","excludeBackload","consignmentPrices","SLA","ConsignmentPrices","exportManifests","getAccountsManifests","zeroCost","noInvoiceReference","TotalLoadDetails","SupplierName","saveManifest","emailMessage","ManifestOrder","TransportExchangeManifests","TransportExchangeManifestLogs","CustomerMessage","sendManifest","sendManifestToTransportExchange","removeManifestFromTransportExchange","rebookManifestWithTransportExchange","updateManifestCost","CalculatedCost","deleteManifest","getConsignmentNumbers","existingConsignmentNumbers","alreadyExists","j","getAvailableSuppliers","availableSuppliers","s","SmallestVehicle","Order","generateCompletedEmailBody","consignmentAddress","PONumber","CustomerReferenceNumber","CustomerReference","SignatureName","sendCompletedEmail","invoiceManifests","getManifestTransportExchangePodApprovals","approveTransportExchangePods","transportExchangeConsignmentAddresses","rejectTransportExchangePods","ManifestFactory","supplier","lastSupplierNameSearched","supplierExistsResponse","createNewSupplier","getSupplier","l","SupplierLicences","DisplayValidFrom","ValidFrom","DisplayValidTo","ValidTo","getSuppliers","smallestVehicle","v","searchSuppliers","isTrackingDisabled","isDeactivated","checkSupplierExists","getLastSupplierLocation","supplierId","location","locations","getLastSupplierLocationByConsignmentNumberCustomerReferenceOrPONumber","getLastSupplierLocationByManifestNumber","getLastSupplierLocationByVehicleType","vehicleTypeId","getLastSupplierLocationByStatus","statusId","getSupplierLocations","searchSupplierByName","getEarnings","saveSupplier","SupplierPhotos","saveSupplierPhoto","supplierPhoto","Deductions","deleteSupplierPhoto","lastCustomerNameSearched","customerSearchResponse","customerExistsResponse","lastCustomerExistingAddressSearched","customerExistingAddressSearchResponse","createNewCustomer","Addresses","CustomerUsers","Matrices","InvoiceSettings","OptionalConsignmentFields","getCustomer","getCustomers","getCustomersOverCreditLimit","searchCustomers","customerAccountType","monitoringEnabled","customPricing","searchCustomerByNameOrPostcode","nameOrPostcode","lastCustomerNamePostcodeSearched","checkCustomerExists","searchCustomersExistingAddress","addresses","ShortAddress","getCustomerMatrix","saveCustomer","Branches","HasParent","updateCreditData","customerDto","CreditLimit","CreditLimitNotes","username","password","currentActiveUser","$broadcast","$localStorage","changePassword","user","u","AtlasUserRole","isUserAdmin","isUserAccounts","isUserManager","$q","getCountries","deferred","defer","resolve","promise","globalSettings","supplierTypes","supplierBillingTypes","licenceCategories","matrices","costingMatrices","vehicleTypes","atlasUsers","accountCodes","whitelistedIpAddresses","userIpLogs","areaAdditionalChargeRules","brandingThemes","globalAddresses","getGlobalSettings","getSupplierTypes","getSupplierBillingTypes","searchSupplierBillingTypes","getLicenceCategories","searchLicenceCategories","getLedgerNumbers","getVatCodes","getMatrices","getCostingMatrices","getAdditionalCharges","searchAdditionalCharges","chargeFor","getVehicleTypes","searchVehicleTypes","getAtlasUsers","searchAtlasUsers","email","getWhitelistedIpAddresses","getUserIpLogs","getAreaAdditionalChargeRules","searchAreaAdditionalChargeRules","postcodes","getGlobalAddresses","searchGlobalAddresses","getAllSupplierTypes","getAllSupplierBillingTypes","getAllLicenceCategories","getAllLedgerNumbers","getAllVatCodes","getAllAdditionalCharges","getAllVehicleTypes","getAllAreaAdditionalChargeRules","saveGlobalSettings","saveSupplierTypes","supplierType","saveSupplierBillingTypes","supplierBillingType","saveLicenceCategories","licenceCategory","saveLedgerNumbers","ledgerNumber","saveVatCodes","vatCode","saveMatrices","priceMatrix","saveAdditionalCharges","additionalCharge","saveVehicleTypes","saveAtlasUsers","atlasUser","saveWhitelistedIpAddress","whitelistedIpAddress","saveAreaAdditionalChargeRules","areaAdditionalChargeRule","saveGlobalAddress","globalAddress","searchAccountCodes","Code","Item","deleteMatrix","matrix","deleteWhitelistedIpAddress","getBrandingThemes","upload","file","formData","FormData","append","Content-Type","transformRequest","identity","consignmentAddressTypes","statusColours","matrixTypes","matrixPriceIncrements","atlasUserRoles","invoiceSetupOptions","invoiceDeliveries","invoiceDeliveryOptions","paymentTermStartOptions","consignmentFrequencies","weekdays","xeroOrganiations","consignmentControlScreenColumns","getCustomerAccountTypes","getConsignmentTypes","getConsignmentAddressTypes","getStatusColours","getMatrixTypes","getMatrixPriceIncrements","getAtlasUserRoles","getInvoiceSetupOptions","getInvoiceDeliveries","getInvoiceDeliveryOptions","getPaymentTermStartOptions","getConsignmentFrequencies","getWeekDays","getInvoicingEvent","getXeroOrganisations","getControlScreenConsignmentColumns","lastUserEmailSearche","userExistsResponse","deviceId","authenticationCode","Authorization","getAuth","reject","btoa","checkUserExists","lastUserEmailSearched","timerNotification","timerSignOut","request","when","requestError","rejection","requestDateTime","startTimers","notificationTimeout","signoutTimeout","__TIMEOUT_NOTIFICATION","duration","diff","__TIMEOUT_SIGNOUT","publish","content","color","autoclose","responseError","httpInterceptorProgressFactory","httpRequests","exceptions","exception","found","ignoreProgress","isArray","__IDEAL_POSTCODES_KEY","filter","datetime","filteredConsignmentAddresses","scheduledDateTime","CustomerFactory","uuid","uuidv4","loggingIn","showAuthenticationCode","submitAuthenticationCode","AtlasUserFactory","tabs","roles","Roles","menuVisible","toggleMenu","goTo","state","params","Role","AtlasUser","activeTab","FileSaver","ConsignmentFactory","SettingsFactory","CommonFactory","$emit","sortBy","sortReverse","showFilters","StartDate","EndDate","DateRange","CollectionAddress","DeliveryAddress","IsFrequent","HaveNoManifest","IsDeleted","columns","selectedColumns","allCustomerConsignmentControlScreenColumns","CustomerConsignmentControlScreenColumns","controlScreenConsignmentColumns","exporting","CustomerId","ConsignmentControlScreenColumns","customerColumnIsInSelected","column","ConsignmentControlScreenColumn","IsVisible","columnIsInSelected","isIn","selectedColumnsChanged","SelectedConsignmentColumns","sort","field","keypress","filename","contentDisposition","split","Blob","saveAs","getConsignmentManifestNumbers","toString","showConsignmentDetails","closeConsignmentModal","manifestId","getManifestConsignmentNumbers","clearManifest","changeDateRange","subtract","resetDateRange","copyConsignment","formatAddressForList","selectIsFrequentConsignment","selectHaveNoManifest","getBackgroundColour","allAddressesCompleted","getCustomerName","$interval","SupplierFactory","searchStartDate","searchEndDate","searchDateRange","searchCustomerName","searchVehicleType","searchPONumber","searchConsignmentNumber","searchManifestNumber","searchCollectionAddress","searchDeliveryAddress","searchSupplierName","searchStatusColour","searchNonSpec","searchBackload","searchExcludeBackload","searchNotAcknowledged","searchIsDeleted","selectedSupplier","selectedManifestIndex","selectedManifest","assigningSupplier","SelectedManifestColumns","canSendToTransportExchange","sendingToTransportExchangeOptions","transportExchangeManifestOptions","tailLift","notes","transportExchangeDefaultSupplier","TransportExchangeDefaultSupplier","raw","match","parseFloat","startSearch","endSearch","showManifestDetails","closeManifestModal","getManifestConsignments","setNonSpec","setBackload","setExcludeBackload","selectManifest","canSendToTEG","TransportExchangeVehicleMappings","closeAssignSupplier","selectSupplier","IsSent","assignSupplier","assigningSupplierErrorMessage","confirmAssignSupplier","cancelAssignSupplier","closeConfirmAssignSupplier","showSendingToTransportExchangeOptions","consignmentExists","hideSendingToTransportExchange","removeFromTransportExchange","rebookWithTransportExchange","openLoadingModal","closeLoadingModal","getLoadDetails","toggleTailLift","trim","getAllSupplierLastLocations","supplierMap","clearMarkers","supplierLocations","addSupplierLocationToMap","triggerResize","loadingSupplierLocations","supplierLocation","markerType","infoContent","clickinon","google","maps","enums","markerTypes","PIN","addMarker","Latitude","Longitude","colour","fontColour","IconCode","Map","mapsLoaded","showTraffic","trackingDate","tracking","loadingHistoricalData","loadingHistoricalDataMessages","loadingHistoricalDataText","statuses","getMap","initialize","allowDuplicatesAddress","callback","searchSupplier","supplierSelected","clearSelectedSupplier","vehicleTypeSelected","statusSelected","zoomTo","zoomToPlace","toggleTraffic","removeTraffic","viewHistoricalData","counter","startTime","endTime","second","CIRCLE","searchSupplierLocation","consignmentNumberCustomerReferenceOrPONumber","resetSearchSupplierLocation","$stateParams","$sce","$window","PostcodeLookupFactory","CountryFactory","updateDistanceTimesAndPricing","consignmentMap","getLocations","totalDistance","getTotalDistance","Math","round","getRoute","getTotalTime","asMinutes","recommendedPrice","selectedCustomer","priceMatrices","MatrixType","MatrixPriceIncrement","p","PriceMatrices","From","ceil","Interval","PriceBreak","MinimumPrice","r","rule","Postcodes","exclusions","PostcodeExclusions","exclusionsFound","VehicleTypes","areaAdditionalChargePrice","startsWith","PricePercentage","MaxPrice","BackloadMultiplier","IsBackload","PriceCostMultiplier","updateCosting","consignmentHasManifests","consignmentManifestOneToOneRelationship","calculatedCost","areaAdditionalChargeCost","CostPercentage","MaxCost","RecommendedCost","defaultColour","autoOpenContent","customerAccountTypesEnums","CustomerAccountTypes","invoiceStatuses","stage","selectedCustomerOnStop","selectedCustomerIsProFormaAccountCustomer","selectedCustomerInactiveWarning","selectedCustomerInactiveWarningTimeframe","__INACTIVE_CUSTOMER_WARNING_MONTHS","selectedCustomerOverCreditLimitWarning","existingAddresses","branch","contacts","contactEmails","contact","defaultAdditionalCharges","consignmentAddressIndex","selectedExistingAddress","saveToCustomerRecord","loadDetailsIndex","additionalChargeIndex","selectedAdditionalCharges","additionalChargeChanges","savingQuote","savingConsignment","creatingManifest","existingConsignment","loadingConsignment","loadingManifest","ignorePORequired","report","allCollectionLoadDetails","dateToday","deletingConsignment","consignmentFrequencySettings","showReportOptions","showReport","showEmailDetailsForReport","emailReport","ShowPrice","ShowPhotos","reportEmailErrorMessage","consignmentAddressesView","minimumFrequentConsignmentData","minimumDate","day","manifestChangesRequired","consignmentDisabled","manifestSuppliers","requestingConsignmentCancellation","consignmentConfirmationOpen","consignmentToQuoteWarningCompleted","consignmentBackdatedWarningCompleted","updatingManifest","manifestUpdated","manifestInvoiced","costsChanged","contactErrorMessage","showInvoicingSection","pcaControl","goodsPhotos","paperworkPhotos","hideAddressSearch","customerSearchText","previousConsignmentGlobalAddress","customerSelected","consignmentId","AccountType","OnStop","ProFormaAccountCustomer","NameShownOnInvoice","PhoneNumber","CostCentre","AutoEmailOnCreate","AutoEmailOnCollection","AutoEmailOnDelivery","UseContactEmail","BookingEmailAddress","unassignedConsignmentAddress","ScheduledStartDate","ScheduledStartTime","ScheduledStartToDate","ScheduledStartToTime","manifestAlreadyAdded","ReadyToInvoice","Invoiced","NumberOfConsignmentAddresses","ConsignmentFrequencySettings","WeekDays","selected","CancellationRequested","ConsignmentReference","InvoiceDate","InvoiceNumber","IsOnRoute","HasArrived","NotesFromSupplier","Signature_FileName","GoodsPhotos","PaperworkPhotos","NoPaperworkProvided","RowVersion","Paid","pushAt","supplierAlreadyExists","Country","lat","lng","object","addLocation","dateTime","dateTimeLocked","IsScheduledStartDateAndTimeLocked","getDirections","goToDetails","goToChangeLog","goToAddresses","consignmentForm","txtConsignment_Customer","$invalid","txtConsignment_ContactName","ddlConsignment_VehicleType","ConsignmentDetailsFormSubmitted","contactNameAlreadyExists","changeVehicleType","searchCustomer","LastConsignmentBookedDate","OutstandingBalance","changeBranch","selectBookingContact","addNewConsignmentAddress","initialConsignmentAddressType","GlobalAddress","editConsignmentAddress","SelectedExistingAddress","existingLoadDetails","pickupASAP","clearManuallySetDateTime","dateManuallySet","unlockConsignmentAddressDateTime","options","CountryId","updateLocation","searchExistingAddresses","onAddressSearchChange","addressSelected","result","organisation_name","line_1","line_2","AddressLine2","line_3","AddressLine3","post_town","county","postcode","selectAccountAddress","searchPostcodeFinder","hits","suggestion","substring","lastIndexOf","addressChanged","utilities","nullToEmpty","equals","addAddressToCustomer","SaveToCustomerRecord","pop","priceManuallySet","PriceManuallySet","closeConsignmentLoadDetailsNotAddedWarning","clearLoadDetailsAndUpdateAddressList","updateAddressList","onAddressSearchBlur","txtConsignmentAddress_Address1","txtConsignmentAddress_Town","txtConsignmentAddress_Postcode","NoLoadDetailsGiven","ConsignmentAddressFormSubmitted","recalculate","insertLocation","$setPristine","copyConsignmentAddress","moveConsignmentAddressUp","$setDirty","moveElementInArray","moveLocation","moveConsignmentAddressDown","deleteConsignmentAddress","removeLocation","cancelAddressEdit","addNewLoadDetails","editLoadDetails","updateLoadDetailsList","txtConsignment_LoadDetailsQuantity","txtConsignment_LoadDetailsDescription","ConsignmentLoadDetailsFormSubmitted","ddlConsignment_ExistingLoadDetails","deleteLoadDetails","cancelLoadDetailsEdit","addNewAdditionalCharge","charge","checked","editAdditionalCharge","updateAdditionalChargesList","selectAdditionalCharge","deleteAdditionalCharge","cancelAdditionalChargeEdit","changeOptimizeStops","setOptimizeStops","showQuoteWarning","hasCollectionAddress","hasDeliveryAddress","ConsignmentFormSubmitted","MissingCollectionOrDeliveryAddress","closeQuoteWarning","nextConsignmentAddress","isBefore","$setUntouched","closeConsignmentQuoteConfirmationModal","PreventConsignmentWithoutPONumber","PreventConsignmentWithoutCostCode","CostCode","openFrequentConsignmentSettings","foundScheduledDateTime","txtConsignment_Price","IsPONumberRequired","ShowCostCode","startConsignmentAddress","ChangeLogs","closeConsignmentQuoteToConsignmentWarningModal","closeConsignmentBackdatedConsignmentWarningModal","markConsignmentToQuoteWarningCompleted","markConsignmentBackdatedWarningCompleted","closeFrequentConsignmentModal","saveFrequentConsignment","openDeleteConsignmentConfirmationModal","closeDeleteConsignmentConfirmationModal","consignmentHasManifest","createManifest","customerMessage","Message","closeConsignmentAddressSignatureModal","editManifest","checkCreateManifestCustomerMessage","closeCustomerEmailModal","getSupplierManifestOptionText","Make","Model","generateReport","ShowSupplierNotes","fileURL","URL","createObjectURL","trustAsResourceUrl","closeConsignmentReportModal","showEmailReportDetails","selectEmailReportTo","ExistingContact","setToRecommendedPrice","addAdditionalMiscChargeRow","removeAdditionalMiscChargeRow","changeAdditionalChargePrice","newPrice","oldPrice","priceDifference","changeCost","showSignature","showGoodsPhotos","slice","closeConsignmentAddressGoodsPhotos","showPaperworkPhotos","closeConsignmentAddressPaperworkPhotos","duplicateConsignment","reload","openChangeLogModal","closeConsignmentChangeLogModal","requestCancellation","closeConsignmentRequestCancellationConfirmationModal","closeConsignmentConfirmation","changeApplyPostcodePricingRules","changeBackload","showInvoicing","changeGlobalAddress","ModalFactory","manifestMap","EstimatedStartDateAndTime","Matrix","loadingConsignmentAddresses","savingManifest","deletingManifest","sendingManifest","consignmentAddressCustomerNameFilter","emails","currentEmailIndex","supplierEmails","SecondaryEmail","getConsignmentAddresses","closeConsignmentAddressesModal","costManuallySet","CostManuallySet","addToManifest","isBeingCompleted","At","closeConsignmentAddressSignature","openManifestChangeLog","closeManifestChangeLog","openTransportExchangeManifestLog","closeTransportExchangeManifestLog","openAssignSupplier","openDeleteManifestConfirmation","closeDeleteManifestConfirmation","ExistingEmail","closeManifestReport","selectDateTime","propertyName","overlay","overlayClose","templateUrl","contentScope","sameDateTimeForAll","IsAcknowledged","AcknowledgedTime","deactivate","destroy","clearDateTime","activate","setToCalculatedCost","ConsignmentAddress","Send","showLoadDetails","closeLoadDetails","PhotosFactory","supplierLicence","vehicle","supplierUser","searchName","deduction","saving","loadingSuppliers","loadingSupplier","photo","supplierPhotos","imageFile","requiredFieldError","supplierNameError","supplierExists","searchIsTrackingDisabled","searchIsDeactivated","supplierDetailsForm","txtSupplierDetails_Name","editSupplier","IsSelfBilling","Type","IsEmployed","addNewSupplierLicence","editSupplierLicence","updateSupplierLicenceList","ddlSupplierDetails_LicenceType","txtSupplierDetails_LicenceFrom","txtSupplierDetails_LicenceTo","SupplierLicencesFormSubmitted","$dirty","deleteSupplierLicence","licence","cancelSupplierLicenceEdit","addNewVehicle","IsDefaultVehicle","editVehicle","updateVehicleList","ddlSupplierDetails_VehicleType","txtSupplierDetails_VehicleMake","txtSupplierDetails_VehicleModel","txtSupplierDetails_VehicleRegNumber","txtSupplierDetails_VehicleLength","txtSupplierDetails_VehicleWidth","txtSupplierDetails_VehicleHeight","txtSupplierDetails_VehicleInsuranceExpiry","SupplierVehiclesFormSubmitted","deleteVehicle","cancelVehicleEdit","addNewDeduction","selectedAccountCode","searchAccountCode","accountCodeSelected","accountCode","AccountCode","editDeduction","updateSupplierDeductionList","txtSupplierDetails_DeductionName","txtSupplierDetails_DeductionValue","txtSupplierDetails_AccountCode","ddlSupplierDetails_DeductionVATCode","SupplierDeductionsFormSubmitted","deleteDeduction","cancelDeductionEdit","existingSupplier","numberDefaultVehicles","Username","NewPassword","ConfirmPassword","Password","addNewPhoto","Photos","editPhoto","photoSelected","files","Photo","updatePhotoList","txtSupplierDetails_PhotoDescription","SupplierPhotosFormSubmitted","deletePhoto","deletePhotoFromList","cancelPhotoEdit","customerAccountTypeEnums","customerIsOnStop","customerUser","createEditUser","priceMatrixIncrements","priceMatrixItem","searchCustomerAccountType","searchContactIsDeactivated","searchAddressIsDeactivated","saved","changePasswordUser","changePasswordErrorMessage","changingPassword","loadingCustomers","loadingCustomer","defaultControlScreenConsignmentColumns","customerNameError","userEmailError","customerExists","searchMonitoringEnabled","searchCustomPricing","addNewCustomer","customerDetailsForm","txtCustomerDetails_Name","editCustomer","IsDeactivated","useCustomControlScreen","txtCustomerAddresses_AddressLine1","txtCustomerAddresses_Postcode","ddlCustomerAddresses_Country","CustomerAddressesFormSubmitted","addNewAddress","editAddress","filterAddressList","updateContactList","txtCustomerContacts_Name","CustomerContactsFormSubmitted","addNewContact","editContact","cancelContactEdit","filterContactList","updateUserList","txtCustomerUsers_Email","txtCustomerUsers_Password","txtCustomerUsers_ConfirmPassword","CustomerUsersFormSubmitted","addNewUser","editUser","cancelUserEdit","customerContactForm","selectUser","openChangePasswordModal","changeUserPassword","updatePricingList","addNewPriceMatrix","editPriceMatrix","deletePriceMatrix","cancelPriceMatrixEdit","updatePricingMatrixList","addNewPriceMatrixItem","editPriceMatrixItem","Index","removePriceMatrixItem","updatePricingMatrixItemList","cancelPriceMatrixItemEdit","changeCustomerAccountType","closeChangePasswordModal","existingCustomer","moveColumnOrderUp","moveColumnOrderDown","loading","currencies","currency","supplierBillingTypeBrandingTheme","searchSupplierBillingType","searchLicenceCategory","searchAtlasUser","searchAdditionalCharge","updatingVehicleOrder","searchAreaAdditionalCharge","postCode","updatingAreaAdditionalChargeRuleOrder","settingsForms","updatingAdditionalChargeOrder","addNewVATCode","editVatCode","saveVATCode","cancelVATCodeSave","addNewCurrency","editCurrency","saveCurrency","cancelCurrencySave","addNewSupplierType","editSupplierType","t","saveSupplierType","cancelSupplierTypeSave","addNewSupplierBillingType","editSupplierBillingType","brandingTheme","BrandingTheme","SelectedBrandingTheme","saveSupplierBillingType","cancelSupplierBillingTypeSave","addNewLicenceCategory","editLicenceCategory","saveLicenceCategory","cancelLicenceCategorySave","addNewLedgerNumber","editLedgerNumber","saveLedgerNumber","cancelLedgerNumberSave","moveAdditionalChargeUp","moveAdditionalChargeDown","saveAdditionalCharge","cancelAdditionalChargeSave","saveUser","cancelUserSave","addNewVehicleType","editVehicleType","moveVehicleTypeUp","moveVehicleTypeDown","saveVehicleType","vehicleTypesForm","cancelVehicleTypeSave","copyPriceMatrix","savePriceMatrix","cancelPriceMatrixSave","addNewWhitelistedIpAddress","Value1","Value2","Value3","Value4","editWhitelistedIpAddress","whitelistedIpAddressParts","Value","whitelistedIpAddressesForm","cancelWhitelistedIpAddressSave","addNewAreaAdditionalChargeRule","editAreaAdditionalChargeRule","moveAreaAdditionalChargeRuleUp","moveAreaAdditionalChargeRuleDown","saveAreaAdditionalChargeRule","areaAdditionalChargeRulesForm","searchAreaAdditionalCharges","cancelAreaAdditionalChargeRuleSave","addNewGlobalAddress","editGlobalAddress","cancelGlobalAddressSave","getFormattedAddress","getInvoicingRunningEvent","invoicingRunningEvent","EventTypes","ConsignmentInvoicing","DateStarted","invoicingRunningEventText","User","ManifestInvoicing","eventCategoryType","EventCategoryTypes","eventTypes","searchIssues","allConsignmentsSelected","ignoringProfitMargins","creatingInvoices","isoWeekday","b","isValid","dateComparator","localeCompare","momentA","momentB","selectConsignment","_selected","selectAllConsignments","getSelectedConsignmentCount","selectedConsignments","getTotalConsignmentPrice","totalPrice","getTotalSelectedConsignmentPrice","missingPO","confirmInvoice","openInvoiceDateModal","cancelInvoice","consignmentsToInvoice","parentScope","selectedDate","invoice","allManifestsSelected","selectAllManifests","getSelectedManifestCount","selectedManifests","getTotalManifestCost","totalCost","getTotalSelectedManifestCost","manifestsToInvoice","totalDeductionAmount","hasIssues","supplierTotals","SplitXeroInvoices","XeroOrganisation","IsDefault","TotalInvoiceAmount","TotalDeductions","cancelManifestInvoiceIssues","transportExchangePods","transportExchangePodsForApproving","transportExchangePodsForRejecting","approving","rejecting","approveAllTransportExchangePODs","getTransportExchangePodApprovals","goToManifest","addForApproval","readyForRejection","readyForApproval","addForRejection","selectApproveAllTransportExchangePODs","TransportExchangeConsignmentAddresses","approve","export","Consignment Number","Booked","Start Date","Start Postcode","Finish Date","Last Postcode","Number Of Addresses","alasql","sheetid","header","getTotalPrice","getData","Lines","Date","Day","Total Manifests","TotalNumberManifests","getTotalManifests","totalManifests","updateEarnings","Earnings","OverLimit","editCreditData","saveCreditData","outstandingBalance","creditLimit","searchUserIpLogs"],"mappings":"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","file":"../app.min.f5123d76.js","sourcesContent":["angular.module('mgcrea.ngStrap.datepicker').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('datepicker/datepicker.tpl.html', '
');\r\n}]);","angular.module('mgcrea.ngStrap.timepicker').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('timepicker/timepicker.tpl.html', '
 
 
 
');\r\n}]);","angular.module('mgcrea.ngStrap.tab').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('tab/tab.tpl.html', '
');\r\n}]);","angular.module('mgcrea.ngStrap.tooltip').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('tooltip/tooltip.tpl.html', '
');\r\n}]);","angular.module('mgcrea.ngStrap.select').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('select/select.tpl.html', '');\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('clickinon.angular.controls.autocomplete', ['$templateCache', '$http', '$parse', '$timeout', function ($templateCache, $http, $parse, $timeout) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n onItemSelected: '&',\r\n getItems: '&',\r\n onChange: '&',\r\n model: '=ngModel',\r\n disabled: '=',\r\n onAlternateSearchClick: '&',\r\n text: '='\r\n },\r\n require: 'ngModel',\r\n template: function (elem, attr) {\r\n var placeholder = (attr.placeholder != undefined) ? attr.placeholder : \"\";\r\n var cssClass = (attr.cssClass != undefined) ? attr.cssClass : \"\";\r\n var loadingText = (attr.loadingText != undefined) ? attr.loadingText : \"Loading...\";\r\n var displayProperty = (attr.displayProperty != undefined) ? attr.displayProperty : \"undefined\";\r\n var showAlternativeSearch = (attr.showAlternativeSearch) ? (attr.showAlternativeSearch === \"true\") : false;\r\n var showAlternativeSearchNoResults = (attr.showAlternativeSearchNoResults) ? (attr.showAlternativeSearchNoResults === \"true\") : false;\r\n var alternativeSearchText = (attr.alternativeSearchText) ? attr.alternativeSearchText : \"Alternative Search\";\r\n var alternativeSearchCssClass = (attr.alternativeSearchCssClass) ? attr.alternativeSearchCssClass : \"\";\r\n var html = '';\r\n\r\n html += '
';\r\n html += '';\r\n html += '
' + loadingText + '
';\r\n html += '
{{errorMessage}}
';\r\n html += '
';\r\n html += '{{noResults}}';\r\n if (showAlternativeSearchNoResults) html += '';\r\n html += '
';\r\n html += '
';\r\n html += '';\r\n html += '
';\r\n html += '
';\r\n\r\n return html;\r\n },\r\n link: function (scope, elem, attr, ngModelController) {\r\n scope.data = null;\r\n scope.loadingData = false;\r\n scope.searchText = (scope.text) ? scope.text : null;\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.minChars = (attr.minChars != undefined) ? attr.minChars : 1;\r\n scope.minPause = (attr.minPause != undefined) ? attr.minPause : 1000;\r\n scope.errorMessage = null;\r\n scope.noResults = null;\r\n scope.highlightIndex = null;\r\n scope.selectingItem = false;\r\n scope.alternativeSearchType = (attr.alternativeSearchType != undefined) ? attr.alternativeSearchType : \"API\";\r\n scope.showAlternativeSearch = (attr.showAlternativeSearch) ? (attr.showAlternativeSearch === \"true\") : false;\r\n type = 'INTERNAL';\r\n hasSearched = false;\r\n\r\n ngModelController.$render = function () {\r\n if (ngModelController.$modelValue) {\r\n scope.searchText = (attr.selectedProperty) ? eval('ngModelController.$modelValue.' + attr.selectedProperty) : eval('ngModelController.$modelValue.' + attr.displayProperty);\r\n scope.search(true);\r\n ngModelController.$setValidity('autoCompleteValidation', true);\r\n }\r\n else {\r\n //scope.searchText = '';\r\n //scope.data = null;\r\n }\r\n }\r\n\r\n scope.search = function () {\r\n //console.log('Searching');\r\n scope.errorMessage = null;\r\n scope.noResults = null;\r\n scope.data = null;\r\n scope.showAlternativeSearch = true;\r\n scope.searchedValue = scope.searchText;\r\n //scope.textboxInFocus = true;\r\n type = 'INTERNAL';\r\n hasSearched = true;\r\n var timer = null;\r\n var loadDataSilently = (arguments.length == 1) ? arguments[0] : false;\r\n\r\n if (scope.onChange) scope.onChange({ searchText: scope.searchText });\r\n\r\n if (scope.searchText && scope.searchText.length >= parseInt(scope.minChars) && !scope.selectingItem) {\r\n if (scope.timer) $timeout.cancel(scope.timer);\r\n\r\n scope.timer = $timeout(function () {\r\n if (!loadDataSilently) scope.loadingData = true;\r\n\r\n if (attr.url) {\r\n $http.get(attr.url + '/' + scope.searchText)\r\n .success(function (response) {\r\n if (response) {\r\n if (response.length === 0) {\r\n scope.data = null;\r\n scope.noResults = 'No results found';\r\n }\r\n else {\r\n scope.data = response;\r\n }\r\n scope.loadingData = false;\r\n }\r\n })\r\n .error(function (response, status) {\r\n debugger;\r\n scope.loadingData = false;\r\n scope.data = null;\r\n scope.errorMessage = 'An error has occurred attempting to retrieve the data';\r\n });\r\n }\r\n else if (scope.getItems) {\r\n scope.getItems({ searchText: scope.searchText })\r\n .then(\r\n function (response) {\r\n if (response) {\r\n if (response.length === 0) {\r\n scope.data = null;\r\n scope.noResults = 'No results found';\r\n }\r\n else {\r\n scope.data = response;\r\n }\r\n scope.loadingData = false;\r\n\r\n //console.log('Data: ' + scope.data);\r\n //console.log('TextboxInFocus: ' + scope.textboxInFocus);\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n scope.loadingData = false;\r\n scope.data = null;\r\n scope.errorMessage = 'An error has occurred attempting to retrieve the data';\r\n }\r\n );\r\n }\r\n }, scope.minPause);\r\n }\r\n else {\r\n scope.data = null;\r\n }\r\n }\r\n\r\n scope.keyPress = function (event) {\r\n scope.selectingItem = false;\r\n scope.textboxInFocus = true;\r\n\r\n switch (event.keyCode) {\r\n case 13:\r\n scope.selectItem(scope.data[scope.highlightIndex]);\r\n break;\r\n case 38:\r\n if (scope.highlightIndex >= 0) {\r\n scope.highlightIndex--;\r\n }\r\n break;\r\n case 40:\r\n if (scope.highlightIndex == null) {\r\n scope.highlightIndex = 0;\r\n }\r\n else {\r\n if (scope.highlightIndex < scope.data.length) {\r\n scope.highlightIndex++;\r\n }\r\n }\r\n break;\r\n default:\r\n scope.model = null;\r\n break;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n scope.click = function (event) {\r\n if (scope.data) {\r\n scope.textboxInFocus = true;\r\n }\r\n else if (hasSearched) {\r\n scope.noResults = 'No results found';\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n ngModelController.$setValidity('autoCompleteValidation', false);\r\n\r\n scope.itemMouseOver = function () {\r\n scope.highlightIndex = null;\r\n }\r\n\r\n scope.selectItem = function (item) {\r\n $timeout(function () {\r\n //scope.model = item;\r\n ngModelController.$setValidity('autoCompleteValidation', true);\r\n\r\n scope.searchText = (attr.selectedProperty) ? eval('item.' + attr.selectedProperty) : eval('item.' + attr.displayProperty);\r\n\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.selectingItem = true;\r\n hasSearched = false;\r\n\r\n try {\r\n scope.onItemSelected({ item: item, type: type })\r\n .then(\r\n function (response) {\r\n //debugger;\r\n scope.searchText = scope.text;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n catch {\r\n scope.onItemSelected({ item: item, type: type });\r\n }\r\n });\r\n }\r\n\r\n scope.alternateSearch = function (searchText, event) {\r\n if (scope.alternativeSearchType == \"API\") event.stopPropagation();\r\n\r\n $timeout(function () {\r\n if (!scope.onAlternateSearchClick) {\r\n console.log('No alternate search function defined');\r\n return;\r\n }\r\n\r\n if (scope.alternativeSearchType != \"API\") {\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.noResults = false;\r\n scope.selectingItem = true;\r\n\r\n scope.onAlternateSearchClick({ searchText: searchText });\r\n }\r\n else {\r\n scope.data = null;\r\n scope.loadingData = true;\r\n type = 'EXTERNAL';\r\n\r\n scope.onAlternateSearchClick({ searchText: scope.searchText })\r\n .then(\r\n function (response) {\r\n if (response) {\r\n if (response.length === 0) {\r\n scope.data = null;\r\n scope.noResults = 'No results found';\r\n }\r\n else {\r\n scope.data = response;\r\n }\r\n scope.loadingData = false;\r\n scope.showAlternativeSearch = false;\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n scope.loadingData = false;\r\n scope.data = null;\r\n scope.errorMessage = 'An error has occurred attempting to retrieve the data';\r\n }\r\n );\r\n }\r\n })\r\n }\r\n\r\n scope.$on('autocomplete:focus', function () {\r\n //$timeout(function () {\r\n // elem[0].children[0].children[0].focus();\r\n // elem[0].children[0].children[0].select();\r\n //});\r\n });\r\n\r\n document.addEventListener('click', function () {\r\n $timeout(function () {\r\n //console.log('Document clicked');\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.noResults = false;\r\n });\r\n });\r\n }\r\n }\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('multiSelect', ['$templateCache', '$http', '$parse', '$document', '$timeout', function ($templateCache, $http, $parse, $document, $timeout) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n items: '=',\r\n key: '=',\r\n selectedItems: '=ngModel',\r\n onChange: '&'\r\n },\r\n require: 'ngModel',\r\n template: function (elem, attr) {\r\n var cssClass = (attr.class != undefined) ? attr.class : \"\";\r\n var loadingText = (attr.loadingText != undefined) ? attr.loadingText : \"Loading...\";\r\n var displayProperty = (attr.displayProperty != undefined) ? attr.displayProperty : \"undefined\";\r\n var html = '';\r\n\r\n html += '
';\r\n html += '';\r\n html += '
' + loadingText + '
';\r\n html += '
{{errorMessage}}
';\r\n html += '
{{noResults}}
';\r\n html += '
';\r\n html += '
    ';\r\n html += '
  • {{i.' + displayProperty + '}}
  • ';\r\n html += '
';\r\n html += '
';\r\n html += '
';\r\n\r\n return html;\r\n },\r\n link: function (scope, elem, attr, ngModelController) {\r\n scope.loadingData = false;\r\n scope.searchText = null;\r\n scope.input = elem.find('div.input');\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.minChars = (attr.minChars != undefined) ? attr.minChars : 1;\r\n scope.errorMessage = null;\r\n scope.noResults = null;\r\n scope.highlightIndex = null;\r\n scope.show = false;\r\n scope.selectedItemsText = '';\r\n scope.key = attr.key;\r\n scope.displayProperty = attr.displayProperty;\r\n\r\n $document.on('click', function () {\r\n scope.show = false;\r\n scope.$apply();\r\n });\r\n\r\n elem.on('click', function (e) {\r\n scope.show = !scope.show;\r\n e.stopPropagation();\r\n scope.$apply();\r\n });\r\n\r\n scope.search = function () {\r\n scope.errorMessage = null;\r\n scope.noResults = null;\r\n\r\n if (scope.searchText.length >= parseInt(scope.minChars)) {\r\n scope.loadingData = true;\r\n\r\n $http.get(attr.url + '/' + scope.searchText)\r\n .success(function (response) {\r\n if (response.length == 0) {\r\n scope.data = null;\r\n scope.noResults = 'No results found';\r\n }\r\n else {\r\n scope.data = response;\r\n }\r\n scope.loadingData = false;\r\n })\r\n .error(function (response, status) {\r\n debugger;\r\n scope.loadingData = false;\r\n scope.data = null;\r\n scope.errorMessage = 'An error has occurred attempting to retrieve the data';\r\n });\r\n }\r\n else {\r\n scope.data = null;\r\n }\r\n }\r\n\r\n scope.keyPress = function (event) {\r\n switch (event.keyCode) {\r\n case 13:\r\n scope.selectItem(scope.data[scope.highlightIndex]);\r\n break;\r\n case 38:\r\n if (scope.highlightIndex >= 0) {\r\n scope.highlightIndex--;\r\n }\r\n break;\r\n case 40:\r\n if (scope.highlightIndex == null) {\r\n scope.highlightIndex = 0;\r\n }\r\n else {\r\n if (scope.highlightIndex < scope.data.length) {\r\n scope.highlightIndex++;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n }\r\n\r\n scope.isSelected = function (item) {\r\n var itemSelected = false;\r\n\r\n angular.forEach(scope.selectedItems, function (value, key) {\r\n if (eval('value.' + scope.key) == eval('item.' + scope.key)) {\r\n itemSelected = true;\r\n return false;\r\n }\r\n });\r\n\r\n buildSelectedItemText();\r\n\r\n return itemSelected;\r\n }\r\n\r\n scope.selectItem = function (item, e) {\r\n e.stopPropagation();\r\n if (!scope.selectedItems) scope.selectedItems = [];\r\n var itemAlreadySelected = false;\r\n\r\n angular.forEach(scope.selectedItems, function (value, key) {\r\n if (eval('value.' + scope.key) == eval('item.' + scope.key)) {\r\n scope.selectedItems.splice(key, 1);\r\n itemAlreadySelected = true;\r\n return false;\r\n }\r\n });\r\n\r\n if (!itemAlreadySelected) scope.selectedItems.push(item);\r\n\r\n scope.onChange();\r\n\r\n buildSelectedItemText();\r\n }\r\n\r\n function buildSelectedItemText() {\r\n if (scope.selectedItems) {\r\n switch (scope.selectedItems.length) {\r\n case 0:\r\n scope.selectedItemsText = (attr.initialText != undefined) ? attr.initialText : \"\";\r\n break;\r\n case 1:\r\n scope.selectedItemsText = eval('scope.selectedItems[0].' + scope.displayProperty)\r\n break;\r\n default:\r\n scope.selectedItemsText = eval('scope.selectedItems[0].' + scope.displayProperty) + ' (' + (scope.selectedItems.length - 1) + ' others)'\r\n break;\r\n }\r\n }\r\n else {\r\n scope.selectedItemsText = '';\r\n }\r\n }\r\n\r\n buildSelectedItemText();\r\n }\r\n }\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('coFormatDate', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attr, ngModelController) {\r\n try {\r\n var dateTime = moment();\r\n }\r\n catch (error) {\r\n throw \"clickinon.angular.controls.format-date: Unable use momentjs library. Check momentjs library is loaded.\";\r\n }\r\n\r\n elem.bind('input propertychange', function (e) {\r\n var typedFormat = attr.typedFormat;\r\n var outputFormat = attr.dateFormat;\r\n\r\n if (elem.val().length == typedFormat.length) {\r\n scope.$apply(function () {\r\n var datePart = elem.val().substr(typedFormat.indexOf('dd'), 2);\r\n var monthPart = elem.val().substr(typedFormat.indexOf('MM'), 2);\r\n var yearPart = (typedFormat.indexOf('yyyy') >= 0) ? elem.val().substr(typedFormat.indexOf('yyyy'), 4) : '20' + elem.val().substr(typedFormat.indexOf('yy'), 2);\r\n\r\n var date = moment();\r\n date.year(yearPart).month(monthPart).date(datePart);\r\n\r\n ngModelController.$modelValue = date.toDate();\r\n ngModelController.$setViewValue(date.format(outputFormat.toUpperCase()));\r\n ngModelController.$render();\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('coFormatTime', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attr, ngModelController) {\r\n try {\r\n var dateTime = moment();\r\n }\r\n catch (error) {\r\n throw \"clickinon.angular.controls.format-date: Unable use momentjs library. Check momentjs library is loaded.\";\r\n }\r\n\r\n elem.bind('input propertychange', function (e) {\r\n var typedFormat = attr.typedFormat;\r\n var outputFormat = attr.timeFormat;\r\n\r\n if (elem.val().length == typedFormat.length) {\r\n scope.$apply(function () {\r\n var hourPart = elem.val().substr(typedFormat.indexOf('HH'), 2);\r\n var minutePart = elem.val().substr(typedFormat.indexOf('mm'), 2);\r\n\r\n var date = moment();\r\n date.hour(hourPart).minute(minutePart);\r\n\r\n ngModelController.$modelValue = date.toDate();\r\n ngModelController.$setViewValue(date.format(outputFormat));\r\n ngModelController.$render();\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('coFormAutofillFix', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'A',\r\n priority: -10, // set higher priority then other custom directives\r\n link: function (scope, element, attrs, ngModelCtrl) {\r\n element.bind('click', function () {\r\n var autofillElements = $(\"[autocomplete='off']\");\r\n\r\n if (autofillElements.length) {\r\n for (var i = 0; i < autofillElements.length; i++) {\r\n var element = $(autofillElements[i]);\r\n\r\n if (element.is('INPUT')) {\r\n //if (e.value && e.ngModel.$viewValue !== value) {\r\n // e.ngModel.$setViewValue(value);\r\n //}\r\n element.trigger('input');\r\n element.trigger('change');\r\n }\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}]);","var foundationRoutes = [\r\n { 'name': 'login', 'url': '/', 'path': 'templates/login/login.html' },\r\n { 'name': 'control_screen', 'url': '/control_screen/', 'path': 'templates/control_screen/control_screen.html' },\r\n { 'name': 'map', 'url': '/map/', 'path': 'templates/map/map.html' },\r\n { 'name': 'consignment', 'url': '/consignment/:id', 'path': 'templates/consignments/consignment.html' },\r\n { 'name': 'manifest', 'url': '/manifest/:id', 'path': 'templates/manifests/manifest.html' },\r\n { 'name': 'suppliers', 'url': '/suppliers/', 'path': 'templates/suppliers/suppliers.html' },\r\n { 'name': 'customers', 'url': '/customers/', 'path': 'templates/customers/customers.html' },\r\n { 'name': 'accounts', 'url': '/accounts/', 'path': 'templates/accounts/accounts.html' },\r\n { 'name': 'reports', 'url': '/reports/', 'path': 'templates/reports/reports.html' },\r\n { 'name': 'settings', 'url': '/settings/', 'path': 'templates/settings/settings.html' },\r\n { 'name': 'testing', 'url': '/testing/', 'path': 'templates/testing/testing.html' }\r\n];\r\n","!function () {\r\n 'use strict';\r\n\r\n config.$inject = ['$urlRouterProvider', '$locationProvider', '$animateProvider', '$httpProvider'];\r\n\r\n function config($urlProvider, $locationProvider, $animateProvider, $httpProvider) {\r\n $urlProvider.otherwise('/');\r\n\r\n $locationProvider.html5Mode({\r\n enabled: !1,\r\n requireBase: !1\r\n });\r\n\r\n $locationProvider.hashPrefix('!');\r\n\r\n $animateProvider.classNameFilter(/animate/);\r\n\r\n $httpProvider.interceptors.push('AuthorizationHttpInterceptorFactory');\r\n $httpProvider.interceptors.push('httpInterceptorProgressFactory');\r\n\r\n moment.fn.toJSON = function () { return this.format(); };\r\n }\r\n\r\n run.$inject = ['$rootScope'];\r\n\r\n function run($rootScope) {\r\n FastClick.attach(document.body);\r\n\r\n $rootScope.$on('title-updated', function (event, title) {\r\n $rootScope.pageTitle = 'ACE - ' + title;\r\n });\r\n }\r\n\r\n angular.module('application', [\r\n 'ui.router', 'templates',\r\n 'ngAnimate',\r\n 'ngSanitize',\r\n 'foundation',\r\n 'foundation.dynamicRouting',\r\n 'foundation.dynamicRouting.animations',\r\n 'clickinon.factories.httpInterceptor',\r\n 'ngStorage',\r\n 'ngFileSaver',\r\n 'shared',\r\n 'login',\r\n 'menu',\r\n 'control_screen',\r\n 'map',\r\n 'consignments',\r\n 'manifests',\r\n 'suppliers',\r\n 'customers',\r\n 'accounts',\r\n 'settings',\r\n 'reports'\r\n ]).config(config).run(run);\r\n}();","var shared = angular.module('shared', []);","var login = angular.module('login', []);","var menu = angular.module('menu', ['foundation.core', 'foundation.accordion', 'clickinon.angular.controls']);","var address = angular.module('address', ['foundation.core']);","var control_screen = angular.module('control_screen', ['angularMoment', 'mgcrea.ngStrap']);","var map = angular.module('map', ['angularMoment', 'mgcrea.ngStrap']);","var consignments = angular.module('consignments', ['mgcrea.ngStrap', 'angularMoment', 'foundation.core', 'foundation.panel']);","var manifests = angular.module('manifests', ['ngSanitize']);","var customers = angular.module('customers', ['foundation.core', 'foundation.accordion', 'clickinon.angular.controls']);","var suppliers = angular.module('suppliers', ['foundation.core', 'foundation.accordion', 'clickinon.angular.controls']);","var settings = angular.module('settings', ['foundation.core', 'foundation.accordion']);","var accounts = angular.module('accounts', ['angularMoment', 'mgcrea.ngStrap']);","var reports = angular.module('reports', ['foundation.core']);","menu.directive('ace.menu', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n template: $templateCache.get('menu/menu.html')\r\n }\r\n}]);","shared.directive('ace.shared.addressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/address_list.html')\r\n }\r\n}]);","shared.directive('ace.shared.changePassword', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/change_password.html')\r\n }\r\n}]);","shared.directive('ace.shared.assignSupplier', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n //require: 'ngModel',\r\n template: $templateCache.get('shared/controls/assign_supplier.html')\r\n }\r\n}]);","shared.directive('ace.shared.loading', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n //require: 'ngModel',\r\n template: $templateCache.get('shared/controls/loading.html')\r\n }\r\n}]);","shared.directive('ace.shared.editDateTime', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n selectedDateTime: '=',\r\n updateDateTime: '&'\r\n },\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/edit_date_time.html')\r\n }\r\n}]);","shared.directive('preventEnterSubmit', ['$templateCache', function ($templateCache) {\r\n return function (scope, el, attrs) {\r\n el.bind('keydown', function (event) {\r\n if (13 == event.which) {\r\n event.preventDefault(); // Doesn't work at all\r\n window.stop(); // Works in all browsers but IE...\r\n document.execCommand('Stop'); // Works in IE\r\n return false; // Don't even know why it's here. Does nothing.\r\n }\r\n });\r\n };\r\n}]);","shared.directive('capitalize', ['$templateCache', function ($templateCache) {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, modelCtrl) {\r\n var capitalize = function (inputValue) {\r\n if (inputValue == undefined) inputValue = '';\r\n var capitalized = inputValue.toUpperCase();\r\n if (capitalized !== inputValue) {\r\n modelCtrl.$setViewValue(capitalized);\r\n modelCtrl.$render();\r\n }\r\n return capitalized;\r\n }\r\n modelCtrl.$parsers.push(capitalize);\r\n capitalize(scope[attrs.ngModel]); // capitalize initial value\r\n }\r\n };\r\n}]);","shared.directive('dirtyTracking', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'A',\r\n link: function ($scope, $element, $attrs) {\r\n function isDirty() {\r\n var formObj = $scope[$element.attr('name')];\r\n return formObj && formObj.$pristine === false;\r\n }\r\n\r\n function areYouSurePrompt() {\r\n if (isDirty()) {\r\n return 'You have unsaved changes. Are you sure you want to leave this page?';\r\n }\r\n }\r\n\r\n $(window).bind('beforeunload', areYouSurePrompt);\r\n\r\n $element.bind(\"$destroy\", function () {\r\n window.removeEventListener('beforeunload', areYouSurePrompt);\r\n });\r\n\r\n $scope.$on('$stateChangeStart', function (event) {\r\n var prompt = areYouSurePrompt();\r\n if (!event.defaultPrevented && prompt && !confirm(prompt)) {\r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n };\r\n}]);","shared\r\n .directive('ace.shared.signedOut', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/signed_out.html'),\r\n controller: 'SignedOutController',\r\n controllerAs: 'ctrl'\r\n }\r\n }])\r\n .controller('SignedOutController', ['$state', 'FoundationApi', 'UserFactory', 'AtlasModalFactory', function ($state, FoundationApi, UserFactory, AtlasModalFactory) {\r\n var vm = this;\r\n\r\n vm.ok = ok;\r\n\r\n function ok() {\r\n UserFactory.logout()\r\n .then(\r\n function () {\r\n AtlasModalFactory.close('divSignedOut');\r\n\r\n $state.go('login');\r\n },\r\n function () {\r\n AtlasModalFactory.close('divSignedOut');\r\n\r\n $state.go('login');\r\n }\r\n );\r\n\r\n \r\n }\r\n }]);","shared\r\n .directive('ace.shared.modal', ['$templateCache', 'AtlasModalFactory', function ($templateCache, AtlasModalFactory) {\r\n return {\r\n restrict: 'EA',\r\n template: $templateCache.get('shared/controls/modal.html'),\r\n transclude: true,\r\n link: function ($scope, $element, $attrs) {\r\n // ensure id attribute exists\r\n if (!$attrs.id) {\r\n console.error('modal must have an id');\r\n return;\r\n }\r\n\r\n // move element to bottom of page (just before ) so it can be displayed above everything else\r\n $element.appendTo('body');\r\n\r\n // close modal on background click\r\n //element.on('click', function (e) {\r\n // var target = $(e.target);\r\n // if (!target.closest('.modal-body').length) {\r\n // scope.$evalAsync(Close);\r\n // }\r\n //});\r\n\r\n // add self (this modal instance) to the modal service so it's accessible from controllers\r\n var modal = {\r\n id: $attrs.id,\r\n open: open,\r\n close: close\r\n };\r\n AtlasModalFactory.add(modal);\r\n\r\n // remove self from modal service when directive is destroyed\r\n $scope.$on('$destroy', function () {\r\n AtlasModalFactory.remove($attrs.id);\r\n $element.remove();\r\n });\r\n\r\n // open modal\r\n function open() {\r\n $element.show();\r\n $('body').addClass('modal-open');\r\n }\r\n\r\n // close modal\r\n function close() {\r\n $element.hide();\r\n $('body').removeClass('modal-open');\r\n }\r\n\t\t\t}\r\n }\r\n }])\r\n .factory('AtlasModalFactory', function () {\r\n var modals = []; // array of modals on the page\r\n var service = {};\r\n\r\n service.add = add;\r\n service.remove = remove;\r\n service.open = open;\r\n service.close = close;\r\n\r\n return service;\r\n\r\n function add(modal) {\r\n // add modal to array of active modals\r\n modals.push(modal);\r\n }\r\n\r\n function remove(id) {\r\n // remove modal from array of active modals\r\n var modalToRemove = _.findWhere(modals, { id: id });\r\n modals = _.without(modals, modalToRemove);\r\n }\r\n\r\n function open(id) {\r\n // open modal specified by id\r\n var modal = _.findWhere(modals, { id: id });\r\n modal.open();\r\n }\r\n\r\n function close(id) {\r\n // close modal specified by id\r\n var modal = _.findWhere(modals, { id: id });\r\n modal.close();\r\n }\r\n });","manifests.directive('ace.shared.consignmentAddressGoodsPhotos', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/consignment_address_goods_photos.html')\r\n }\r\n}]);","manifests.directive('ace.shared.consignmentAddressPaperworkPhotos', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/consignment_address_paperwork_photos.html')\r\n }\r\n}]);","shared.directive('validSubmit', ['$templateCache', '$parse', function ($templateCache, $parse) {\r\n return {\r\n // we need a form controller to be on the same element as this directive\r\n // in other words: this directive can only be used on a <form>\r\n require: 'form',\r\n // one time action per form\r\n link: function (scope, element, attrs, form) {\r\n form.$submitted = false;\r\n // get a hold of the function that handles submission when form is valid\r\n var fn = $parse(attrs.validSubmit);\r\n\r\n // register DOM event handler and wire into Angular's lifecycle with scope.$apply\r\n element.on('submit', function (event) {\r\n scope.$apply(function () {\r\n \r\n // on submit event, set submitted to true (like the previous trick)\r\n form.$submitted = true;\r\n // if form is valid, execute the submission handler function and reset form submission state\r\n if (form.$valid) {\r\n fn(scope, { $event: event });\r\n form.$submitted = false;\r\n }\r\n });\r\n });\r\n }\r\n };\r\n}]);","control_screen.directive('ace.controlScreen.consignments', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('control_screen/controls/consignments.html')\r\n }\r\n}]);","control_screen.directive('ace.controlScreen.manifests', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('control_screen/controls/manifests.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_details.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_list.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddress', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressDetails', ['$templateCache', '$timeout', function ($templateCache, $timeout) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_details.html'),\r\n //link: function (scope, elem, attr) {\r\n\r\n // //$timeout(function(){\r\n // // debugger;\r\n // //}, 1000);\r\n\r\n // //capturePlus.load();\r\n\r\n // var fields = [\r\n // { element: \"txtConsignmentAddress_Address1\", field: \"Line1\", mode: pca.DEFAULT },\r\n // { element: \"txtConsignmentAddress_Address2\", field: \"Line2\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Town\", field: \"City\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_County\", field: \"Province\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Postcode\", field: \"PostalCode\", mode: pca.DEFAULT },\r\n // ];\r\n\r\n // var options = { key: \"ET69-BX99-PN81-NA98\" };\r\n\r\n // var control = new pca.Address(fields, options);\r\n\r\n // control.load();\r\n\r\n // control.listen(\"populate\", function (address) {\r\n // console.log(address);\r\n // console.log(scope);\r\n\r\n // var addressLine1 = '', addressLine2 = '', addressLine3 = '';\r\n\r\n // if (address.Line5.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3 + ', ' + address.Line4;\r\n // addressLine3 = address.Line5;\r\n // }\r\n // else {\r\n // if (address.Line4.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3;\r\n // addressLine3 = address.Line4;\r\n // }\r\n // else {\r\n // addressLine1 = address.Line1;\r\n // addressLine2 = address.Line2;\r\n // addressLine3 = address.Line3;\r\n // }\r\n // }\r\n\r\n // delete scope.consignmentAddress.Address.Id;\r\n // if (address.Company) scope.consignmentAddress.Address.CompanyName = address.Company;\r\n // scope.consignmentAddress.Address.AddressLine1 = addressLine1;\r\n // scope.consignmentAddress.Address.AddressLine2 = addressLine2;\r\n // scope.consignmentAddress.Address.AddressLine3 = addressLine3;\r\n // scope.consignmentAddress.Address.Town = address.City;\r\n // scope.consignmentAddress.Address.County = address.Province;\r\n // scope.consignmentAddress.Address.Postcode = address.PostalCode;\r\n // });\r\n //}\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressLoadDetailsList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_load_details_list.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressCollectionLoadDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_collection_load_details.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressDeliveryLoadDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_delivery_load_details.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressAdditionalChargesList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_additional_charges_list.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressAdditionalCharge', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_additional_charge.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentQuoteConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_quote_confirmation.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_confirmation.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.manifestConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/manifest_confirmation.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentMissingFieldsConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope:{\r\n customer: '=',\r\n consignment: '=',\r\n isFrequentConsignment: '=',\r\n ignoreRequiredFieldsAndSave: '&',\r\n closeConsignmentMissingFieldsConfirmationModal: '&'\r\n },\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_missing_fields_confirmation.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentChangeLog', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_change_log.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.deleteConsignmentConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/delete_consignment_confirmation.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.consignmentAddressStatus', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/consignment_address_status.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.consignmentAddressSignature', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n template: $templateCache.get('manifests/controls/consignment_address_signature.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_list.html')\r\n }\r\n }]);","customers.directive('ace.customers.customerDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n customer: \"=\",\r\n customers: \"=\",\r\n countries: \"=\",\r\n xeroOrganisations: \"=\"\r\n },\r\n template: $templateCache.get('customers/controls/customer_details.html'),\r\n link: function (scope, elem, attr, ngModelController) {\r\n scope.setParent = function () {\r\n scope.customer.ParentId = scope.customer.Parent.Id;\r\n }\r\n }\r\n }\r\n }]);","customers.directive('ace.customers.customerContactList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_contact_list.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerContact', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_contact.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerUserList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_user_list.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerUser', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_user.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerAddressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_address_list.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerAddress', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_address.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerPricingList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_pricing_list.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerPricingMatrixDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_pricing_matrix_details.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerPricingMatrixItemDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_pricing_matrix_item_details.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerAccountInfo', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n customer: '=',\r\n customerAccountTypes: '=',\r\n ledgerNumbers: '=',\r\n vatCodes: '='\r\n },\r\n template: $templateCache.get('customers/controls/customer_account_info.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerInvoiceSettings', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_invoice_settings.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerOptionalConsignmentFields', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_optional_consignment_fields.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerControlScreenConfiguration', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_control_screen_configuration.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_details.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierLicenceList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_licence_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierLicence', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_licence.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierAddresses', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_addresses.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierVehicleList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_vehicle_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierVehicle', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_vehicle.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierAccountInfo', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_account_info.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierUserDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_user_details.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierDeductionsList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_deductions_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierDeduction', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_deduction.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierPhotoList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_photo_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierPhoto', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_photo.html')\r\n }\r\n}]);","settings.directive('ace.settings.globalSettings', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/global_settings.html')\r\n }\r\n}]);","settings.directive('ace.settings.vatCodeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/vat_code_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.vatCode', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/vat_code.html')\r\n }\r\n}]);","settings.directive('ace.settings.currencyList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/currency_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.currency', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/currency.html')\r\n }\r\n}]);","settings.directive('ace.settings.supplierTypeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/supplier_type_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.supplierType', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/supplier_type.html')\r\n }\r\n}]);","settings.directive('ace.settings.licenceCategoryList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/licence_category_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.licenceCategory', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/licence_category.html')\r\n }\r\n}]);","settings.directive('ace.settings.ledgerNumberList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/ledger_number_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.ledgerNumber', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/ledger_number.html')\r\n }\r\n}]);","settings.directive('ace.settings.userList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/user_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.user', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/user.html')\r\n }\r\n}]);","settings.directive('ace.settings.additionalChargeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/additional_charge_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.additionalCharge', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/additional_charge.html')\r\n }\r\n}]);","settings.directive('ace.settings.vehicleTypeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/vehicle_type_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.vehicleType', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/vehicle_type.html')\r\n }\r\n}]);","settings.directive('ace.settings.pricingList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/pricing_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.pricingMatrixDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/pricing_matrix_details.html')\r\n }\r\n}]);","settings.directive('ace.settings.pricingMatrixItemDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/pricing_matrix_item_details.html')\r\n }\r\n}]);","settings.directive('ace.settings.whitelistedIpAddressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/whitelisted_ip_address_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.whitelistedIpAddress', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/whitelisted_ip_address.html')\r\n }\r\n}]);","settings.directive('ace.settings.areaAdditionalChargeRuleList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/area_additional_charge_rule_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.areaAdditionalChargeRule', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/area_additional_charge_rule.html')\r\n }\r\n}]);","settings.directive('ace.settings.supplierBillingTypeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/supplier_billing_type_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.supplierBillingType', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/supplier_billing_type.html')\r\n }\r\n}]);","settings.directive('ace.settings.globalAddressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/global_address_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.globalAddress', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/global_address.html'),\r\n link: function (scope, elem, attrs) {\r\n // Wait for Angular to compile form\r\n var form = elem.find('form')[0].name;\r\n\r\n // No idea why this needs so many $parent's but it does!\r\n scope.$parent.$parent.$parent.$parent.globalAddressesForm = scope[form];\r\n }\r\n }\r\n}]);","manifests.directive('ace.manifests.manifestDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/manifest_details.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.manifestChangeLog', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/manifest_change_log.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.deleteManifestConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/delete_manifest_confirmation.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.emailConfirmations', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n consignmentAddressesCompleted: '=',\r\n currentEmail: '=',\r\n confirmationEmailErrorMessage: '=',\r\n checkEmailAddresses: '&',\r\n sendEmails: '&',\r\n editEmails: '&',\r\n sendEmail: '&',\r\n dontSendEmail: '&',\r\n dontSendEmails: '&'\r\n },\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/email_confirmations.html')\r\n }\r\n}]);","accounts.directive('ace.accounts.consignments', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('accounts/controls/consignments.html')\r\n }\r\n}]);","accounts.directive('ace.accounts.manifests', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('accounts/controls/manifests.html')\r\n }\r\n}]);","accounts.directive('ace.accounts.transportExchangePods', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('accounts/controls/transport_exchange_pods.html')\r\n }\r\n}]);","reports.directive('ace.reports.simpleProfitability', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('reports/controls/simple_profitability.html')\r\n }\r\n}]);","reports.directive('ace.reports.profitability', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('reports/controls/profitability.html')\r\n }\r\n}]);","reports.directive('ace.reports.earnings', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('reports/controls/earnings.html')\r\n }\r\n}]);","reports.directive('ace.reports.credit', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n template: $templateCache.get('reports/controls/credit.html')\r\n }\r\n}]);","reports.directive('ace.reports.userIpLog', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('reports/controls/user_ip_log.html')\r\n }\r\n}]);","consignments.factory('ConsignmentFactory', ['$http', '$filter', 'UserFactory', function ($http, $filter, UserFactory) {\r\n return {\r\n consignments: null,\r\n consignment: null,\r\n copyConsignmentId: null,\r\n createNewConsignment: function(){\r\n this.consignment = {\r\n 'ConsignmentNumber': 0,\r\n 'IsQuote': true,\r\n 'Customer': null,\r\n 'BookingContact': null,\r\n 'SaveContact': true,\r\n 'ConsignmentType': null,\r\n 'VehicleType': null,\r\n 'NotesForSupplier': '',\r\n 'NotesForOffice': '',\r\n 'NotesForInvoice': '',\r\n 'InvoiceStatus': AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced,\r\n 'IsFrequentConsignment': false,\r\n 'FrequentConsignmentTemplate': null,\r\n 'OptimiseStops': false,\r\n 'CalculateTimes': true,\r\n 'Mileage': null,\r\n 'TotalTimeInMinutes': 0,\r\n 'TotalMiles': 0,\r\n 'RecommendedPrice': 0,\r\n 'ApplyPostcodePricingRules': true,\r\n 'Price': 0,\r\n 'IsWebBooking': false,\r\n 'IsCompleted': false,\r\n 'IsManuallyMarkedInvoiceable': false,\r\n 'ConsignmentAddresses': []\r\n };\r\n\r\n return this.consignment;\r\n },\r\n getConsignment: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignment = response.data;\r\n var loadDetails = '';\r\n var additionalCharges = '';\r\n var locationLastDeliveryDate = null;\r\n var locationLastDeliveryAddress = null;\r\n\r\n for (var i = 0; i < self.consignment.ConsignmentAddresses.length; i++) {\r\n self.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime = moment(self.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n self.consignment.ConsignmentAddresses[i].DisplayScheduledStartDateAndTime = moment(self.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n if (self.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime) {\r\n self.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime = moment(self.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n self.consignment.ConsignmentAddresses[i].DisplayScheduledStartToDateAndTime = moment(self.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime).format('HH:mm');\r\n }\r\n\r\n loadDetails = '';\r\n\r\n for (var d = 0; d < self.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n if (self.consignment.ConsignmentAddresses[i].LoadDetails[d].BarcodeFileName) {\r\n self.consignment.ConsignmentAddresses[i].LoadDetails[d].BarcodeThumbnailFileName = self.consignment.ConsignmentAddresses[i].LoadDetails[d].BarcodeFileName.replace('\\/full\\/', '\\/thumbnail\\/');\r\n }\r\n\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.consignment.ConsignmentAddresses[i].LoadDetails[d].Quantity + ' ' + self.consignment.ConsignmentAddresses[i].LoadDetails[d].Description;\r\n }\r\n\r\n additionalCharges = '';\r\n\r\n for (var c = 0; c < self.consignment.ConsignmentAddresses[i].AdditionalCharges.length; c++) {\r\n if (additionalCharges.length > 0) additionalCharges += '
';\r\n\r\n additionalCharges += self.consignment.ConsignmentAddresses[i].AdditionalCharges[c].AdditionalCharge.ChargeFor + ' (Cost: £' + self.consignment.ConsignmentAddresses[i].AdditionalCharges[c].AdditionalCharge.Cost + '; Price: £' + self.consignment.ConsignmentAddresses[i].AdditionalCharges[c].AdditionalCharge.Price + ')';\r\n }\r\n\r\n self.consignment.ConsignmentAddresses[i].TotalLoadDetailsHtml = loadDetails;\r\n self.consignment.ConsignmentAddresses[i].TotalAdditionalChargesHtml = additionalCharges;\r\n\r\n locationLastDeliveryDate = null;\r\n locationLastDeliveryAddress = null;\r\n\r\n if (self.consignment.ConsignmentAddresses[i].Manifest && self.consignment.ConsignmentAddresses[i].Manifest.Supplier && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0] && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses.length > 0) {\r\n for (var a = 0; a < self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses.length; a++) {\r\n if (!locationLastDeliveryDate) {\r\n locationLastDeliveryDate = moment(self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n locationLastDeliveryAddress = self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) > locationLastDeliveryDate) {\r\n locationLastDeliveryDate = moment(self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n locationLastDeliveryAddress = self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n\r\n self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.LastDeliveryDate = moment(locationLastDeliveryDate);\r\n self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.LastDeliveryAddress = locationLastDeliveryAddress;\r\n self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(locationLastDeliveryAddress);\r\n }\r\n }\r\n }\r\n );\r\n },\r\n searchConsignments: function (startDate, endDate, customerName, vehicleType, poNumber, consignmentNumber, manifestNumber, collectionAddress, deliveryAddress, bookingContact, supplierName, isFrequent, haveNoManifest, isQuote, isDeleted) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (vehicleType) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (vehicleType && vehicleType.Id && vehicleType.Id !== '0') urlParameters += 'vehicleType=' + vehicleType.Id;\r\n }\r\n\r\n if (customerName && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURIComponent(customerName);\r\n }\r\n\r\n if (poNumber && poNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'poNumber=' + encodeURIComponent(poNumber);\r\n }\r\n\r\n if (consignmentNumber && consignmentNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'consignmentNumber=' + encodeURIComponent(consignmentNumber);\r\n }\r\n\r\n if (manifestNumber && manifestNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'manifestNumber=' + encodeURIComponent(manifestNumber);\r\n }\r\n\r\n if (collectionAddress && collectionAddress.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'collectionAddress=' + encodeURIComponent(collectionAddress);\r\n }\r\n\r\n if (deliveryAddress && deliveryAddress.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'deliveryAddress=' + encodeURIComponent(deliveryAddress);\r\n }\r\n\r\n if (bookingContact && bookingContact.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'bookingContact=' + encodeURIComponent(bookingContact);\r\n }\r\n\r\n if (supplierName && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'supplierName=' + encodeURIComponent(supplierName);\r\n }\r\n\r\n if (isFrequent === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isFrequent=' + isFrequent;\r\n }\r\n\r\n if (haveNoManifest === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'haveNoManifest=' + haveNoManifest;\r\n }\r\n\r\n if (isQuote === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isQuote=' + isQuote;\r\n }\r\n\r\n if (isDeleted === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeleted=' + isDeleted;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignments = response.data;\r\n\r\n for (var c = 0; c < self.consignments.length; c++) {\r\n self.consignments[c].DisplayDateCreated = moment(self.consignments[c].DateCreated);\r\n\r\n var suppliers = '';\r\n var startDeliveryDate = null;\r\n var startToDeliveryDate = null;\r\n var timed = false;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var manifestNumbers = '';\r\n var consignmentManifests = [];\r\n\r\n for (var a = 0; a < self.consignments[c].ConsignmentAddresses.length; a++) {\r\n self.consignments[c].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YY HH:mm');\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startToDeliveryDate = (self.consignments[c].ConsignmentAddresses[a].ScheduledStartToDateAndTime) ? moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartToDateAndTime) : null;\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n timed = self.consignments[c].ConsignmentAddresses[a].Timed;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startToDeliveryDate = (self.consignments[c].ConsignmentAddresses[a].ScheduledStartToDateAndTime) ? moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartToDateAndTime) : null;\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n timed = self.consignments[c].ConsignmentAddresses[a].Timed;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].Manifest) {\r\n if (!($filter('filter')(consignmentManifests, { ManifestNumber: self.consignments[c].ConsignmentAddresses[a].Manifest.ManifestNumber }, true)).length) {\r\n consignmentManifests.push(self.consignments[c].ConsignmentAddresses[a].Manifest);\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].LoadDetails && self.consignments[c].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n if (self.consignments[c].ConsignmentAddresses[a].ConsignmentAddressType.Name === 'Collection') {\r\n //totalLoad += self.consignments[c].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.consignments[c].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n totalLoad += self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Quantity;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var m = 0; m < consignmentManifests.length; m++) {\r\n if (manifestNumbers.length > 0) manifestNumbers += ', ';\r\n\r\n manifestNumbers += consignmentManifests[m].ManifestNumber;\r\n\r\n if (suppliers.indexOf(consignmentManifests[m].Supplier) < 0) {\r\n if (suppliers.length > 0) suppliers += ', ';\r\n\r\n if (consignmentManifests[m].Supplier) suppliers += consignmentManifests[m].Supplier.Name;\r\n }\r\n }\r\n\r\n self.consignments[c].CustomerName = (self.consignments[c].CustomerBranch) ? self.consignments[c].CustomerBranch.Name : self.consignments[c].Customer.Name;\r\n self.consignments[c].ManifestNumbers = manifestNumbers;\r\n self.consignments[c].StartDeliveryDate = moment(startDeliveryDate);\r\n self.consignments[c].StartToDeliveryDate = (startToDeliveryDate) ? moment(startToDeliveryDate) : null;\r\n self.consignments[c].StartDeliveryAddress = startDeliveryAddress;\r\n self.consignments[c].DisplayStartDeliveryAddress = (startDeliveryAddress.Postcode && startDeliveryAddress.Postcode.length > 0) ? startDeliveryAddress.Postcode : (startDeliveryAddress.Town && startDeliveryAddress.Town.length > 0) ? startDeliveryAddress.Town : startDeliveryAddress.AddressLine1;\r\n self.consignments[c].FormattedStartDeliveryAddress = self.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n self.consignments[c].LastDeliveryDate = moment(lastDeliveryDate);\r\n self.consignments[c].LastDeliveryAddress = lastDeliveryAddress;\r\n self.consignments[c].DisplayLastDeliveryAddress = (lastDeliveryAddress.Postcode && lastDeliveryAddress.Postcode.length > 0) ? lastDeliveryAddress.Postcode : (lastDeliveryAddress.Town && lastDeliveryAddress.Town.length > 0) ? lastDeliveryAddress.Town : lastDeliveryAddress.AddressLine1;\r\n self.consignments[c].FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.consignments[c].TotalLoad = totalLoad;\r\n self.consignments[c].TotalLoadDetailsHtml = loadDetails;\r\n self.consignments[c].Suppliers = suppliers;\r\n self.consignments[c].Timed = timed;\r\n }\r\n }\r\n );\r\n },\r\n exportConsignments: function (startDate, endDate, customerName, vehicleType, poNumber, consignmentNumber, manifestNumber, collectionAddress, deliveryAddress, supplierName, isFrequent, haveNoManifest, isQuote, isDeleted) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (vehicleType) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (vehicleType && vehicleType.Id && vehicleType.Id !== '0') urlParameters += 'vehicleType=' + vehicleType.Id;\r\n }\r\n\r\n if (customerName && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURIComponent(customerName);\r\n }\r\n\r\n if (poNumber && poNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'poNumber=' + encodeURIComponent(poNumber);\r\n }\r\n\r\n if (consignmentNumber && consignmentNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'consignmentNumber=' + encodeURIComponent(consignmentNumber);\r\n }\r\n\r\n if (manifestNumber && manifestNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'manifestNumber=' + encodeURIComponent(manifestNumber);\r\n }\r\n\r\n if (collectionAddress && collectionAddress.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'collectionAddress=' + encodeURIComponent(collectionAddress);\r\n }\r\n\r\n if (deliveryAddress && deliveryAddress.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'deliveryAddress=' + encodeURIComponent(deliveryAddress);\r\n }\r\n\r\n if (supplierName && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'supplierName=' + encodeURIComponent(supplierName);\r\n }\r\n\r\n if (isFrequent === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isFrequent=' + isFrequent;\r\n }\r\n\r\n if (haveNoManifest === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'haveNoManifest=' + haveNoManifest;\r\n }\r\n\r\n if (isQuote === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isQuote=' + isQuote;\r\n }\r\n\r\n if (isDeleted === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeleted=' + isDeleted;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Export' + urlParameters, { headers: { 'Token': UserFactory.token } });\r\n },\r\n getConsignmentAddressesWithNoManifest: function(){\r\n var self = this;\r\n var consignmentAddresses = null;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentAddresses/NoManifest', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n consignmentAddresses = response.data;\r\n\r\n if (consignmentAddresses.length) {\r\n for (var i = 0; i < consignmentAddresses.length; i++) {\r\n consignmentAddresses[i].ScheduledStartDateAndTime = moment(consignmentAddresses[i].ScheduledStartDateAndTime);\r\n consignmentAddresses[i].DisplayScheduledStartDateAndTime = moment(consignmentAddresses[i].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n }\r\n\r\n return consignmentAddresses;\r\n }\r\n );\r\n },\r\n getConsigmentAddress: function (index) {\r\n return this.consignment.ConsignmentAddresses[index];\r\n },\r\n getFormattedConsignmentAddress: function (args) {\r\n var formattedAddress = '';\r\n var address = null;\r\n\r\n switch (typeof arguments[0]) {\r\n case 'object':\r\n if (arguments[0].Address) {\r\n address = arguments[0].Address;\r\n }\r\n else if (arguments[0].AddressLine1 || arguments[0].Town || arguments[0].Postcode) {\r\n address = arguments[0];\r\n }\r\n else {\r\n throw 'Unknown argument type';\r\n }\r\n break;\r\n case 'number':\r\n var index = arguments[0];\r\n\r\n address = this.consignment.ConsignmentAddresses[index].Address;\r\n\r\n break;\r\n default:\r\n throw 'Unknown argument type';\r\n }\r\n\r\n //formattedAddress += (address.CompanyName != null && address.CompanyName != '') ? address.CompanyName : '';\r\n //formattedAddress += (address.AddressLine1 != null && address.AddressLine1 != '') ? address.AddressLine1 : '';\r\n //formattedAddress += (address.AddressLine2 != null && address.AddressLine2 != '') ? (formattedAddress == '') ? address.AddressLine2 : ',' + address.AddressLine2 : '';\r\n //formattedAddress += (address.AddressLine3 != null && address.AddressLine3 != '') ? (formattedAddress == '') ? address.AddressLine3 : ',' + address.AddressLine3 : '';\r\n formattedAddress += (address.Town != null && address.Town !== '') ? (formattedAddress === '') ? address.Town : ',' + address.Town : '';\r\n formattedAddress += (address.County != null && address.County !== '') ? (formattedAddress === '') ? address.County : ',' + address.County : '';\r\n formattedAddress += (address.Postcode != null && address.Postcode !== '') ? (formattedAddress === '') ? address.Postcode : ',' + address.Postcode : '';\r\n\r\n return formattedAddress;\r\n },\r\n getFullFormattedConsignmentAddress: function (args) {\r\n var formattedAddress = '';\r\n var address = null;\r\n\r\n switch (typeof arguments[0]) {\r\n case 'object':\r\n if (arguments[0].Address) {\r\n address = arguments[0].Address;\r\n }\r\n else if (arguments[0].AddressLine1 || arguments[0].Town || arguments[0].Postcode) {\r\n address = arguments[0];\r\n }\r\n else {\r\n throw 'Unknown argument type';\r\n }\r\n break;\r\n case 'number':\r\n var index = arguments[0];\r\n\r\n address = this.consignment.ConsignmentAddresses[index].Address;\r\n\r\n break;\r\n default:\r\n throw 'Unknown argument type';\r\n }\r\n\r\n formattedAddress += (address.CompanyName !== null && address.CompanyName !== '') ? address.CompanyName : '';\r\n //formattedAddress += (address.AddressLine1 != null && address.AddressLine1 != '') ? address.AddressLine1 : '';\r\n //formattedAddress += (address.AddressLine2 != null && address.AddressLine2 != '') ? (formattedAddress == '') ? address.AddressLine2 : ',' + address.AddressLine2 : '';\r\n //formattedAddress += (address.AddressLine3 != null && address.AddressLine3 != '') ? (formattedAddress == '') ? address.AddressLine3 : ',' + address.AddressLine3 : '';\r\n formattedAddress += (address.Town !== null && address.Town !== '') ? (formattedAddress === '') ? address.Town : ',' + address.Town : '';\r\n formattedAddress += (address.County !== null && address.County !== '') ? (formattedAddress === '') ? address.County : ',' + address.County : '';\r\n formattedAddress += (address.Postcode !== null && address.Postcode !== '') ? (formattedAddress === '') ? address.Postcode : ',' + address.Postcode : '';\r\n\r\n return formattedAddress;\r\n },\r\n saveQuote: function(consignment){\r\n consignment.IsQuote = true;\r\n\r\n return this.saveConsignment(consignment);\r\n },\r\n saveConsignment: function (consignment) {\r\n var self = this;\r\n\r\n if (consignment.SaveContact) {\r\n if (consignment.BookingContact && consignment.BookingContact.Id) {\r\n var id = consignment.BookingContact.Id;\r\n\r\n consignment.BookingContact = {\r\n 'Id': id,\r\n 'Name': consignment.ContactName,\r\n 'Phone': consignment.ContactPhoneNumber,\r\n 'Email': consignment.ContactEmailAddress\r\n };\r\n }\r\n else {\r\n consignment.BookingContact = {\r\n 'Name': consignment.ContactName,\r\n 'Phone': consignment.ContactPhoneNumber,\r\n 'Email': consignment.ContactEmailAddress\r\n };\r\n }\r\n }\r\n\r\n delete consignment.CreatedBy;\r\n delete consignment.ConsignmentChangeLogs;\r\n\r\n for (var i = 0; i < consignment.ConsignmentAddresses.length; i++) {\r\n consignment.ConsignmentAddresses[i].ConsignmentOrder = (i + 1) * 10;\r\n consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(moment(consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime).toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n\r\n delete consignment.ConsignmentAddresses[i].Consignment;\r\n\r\n if (consignment.ConsignmentAddresses[i].Manifest) {\r\n if (consignment.ConsignmentAddresses[i].Manifest.ManifestChangeLogs) delete consignment.ConsignmentAddresses[i].Manifest.ManifestChangeLogs;\r\n \r\n if(consignment.ConsignmentAddresses[i].Manifest.Supplier){\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers) delete consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers;\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier.Vehicles) delete consignment.ConsignmentAddresses[i].Manifest.Supplier.Vehicles;\r\n }\r\n }\r\n }\r\n\r\n if (consignment.CustomerBranch && consignment.CustomerBranch.Contacts) delete consignment.CustomerBranch.Contacts;\r\n\r\n consignment.TotalLoadedMiles = consignment.TotalMiles;\r\n consignment.InvoiceStatus = 1;\r\n delete consignment.CustomerInvoice;\r\n\r\n if (!self.consignment.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Consignments', consignment, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function(response){\r\n self.consignment = response.data;\r\n\r\n return self.consignment;\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Consignments/' + consignment.Id, consignment, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.consignment;\r\n }\r\n );\r\n }\r\n },\r\n deleteConsignment: function () {\r\n var self = this;\r\n var c = angular.copy(self.consignment);\r\n\r\n for (var i = 0; i < c.ConsignmentAddresses.length; i++) {\r\n c.ConsignmentAddresses[i].ConsignmentOrder = (i + 1) * 10;\r\n c.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(c.ConsignmentAddresses[i].ScheduledStartDateAndTime.toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n }\r\n\r\n if (c.ConsignmentChangeLogs) delete c.ConsignmentChangeLogs;\r\n\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/Consignments/' + c.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.consignment;\r\n }\r\n );\r\n },\r\n getReport: function (id, showPrice, showPhotos, showSupplierNotes) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (showPrice) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showPrice) urlParameters += 'show-price=true';\r\n } \r\n\r\n if (showPhotos) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showPhotos) urlParameters += 'show-photos=true';\r\n } \r\n\r\n if (showSupplierNotes) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showSupplierNotes) urlParameters += 'show-supplier-notes=true';\r\n } \r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + id + '/Report' + urlParameters, { headers: { 'Token': UserFactory.token }, responseType: 'arraybuffer' })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n sendReportEmail: function (to, body, consignment, showPrice, showPhotos, showSupplierNotes){\r\n var self = this;\r\n var urlParameters = '';\r\n var email = {\r\n To: to,\r\n Subject: 'Consignment Report',\r\n Body: body\r\n };\r\n\r\n if (consignment) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'consignment=' + consignment.Id;\r\n }\r\n\r\n if (showPrice) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showPrice) urlParameters += 'show-price=true';\r\n }\r\n\r\n if (showPhotos) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showPhotos) urlParameters += 'show-photos=true';\r\n }\r\n\r\n if (showSupplierNotes) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showSupplierNotes) urlParameters += 'show-supplier-notes=true';\r\n } \r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Emails/ConsignmentReport' + urlParameters, email, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n getAccountsConsignments: function (startDate, endDate, customerName, missingPONUmber, incorrectProfitMargin, missingPOD, holdInvoice, ignoreProfitMargin) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (customerName && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customer=' + customerName;\r\n }\r\n\r\n if (missingPONUmber === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'po=' + missingPONUmber;\r\n }\r\n\r\n if (incorrectProfitMargin === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'profit=' + incorrectProfitMargin;\r\n }\r\n\r\n if (missingPOD === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'pod=' + missingPOD;\r\n }\r\n\r\n if (holdInvoice === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'hold-invoice=' + holdInvoice;\r\n }\r\n\r\n if (ignoreProfitMargin === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'ignore-profit-margin=' + ignoreProfitMargin;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Accounts' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignments = response.data;\r\n\r\n for (var c = 0; c < self.consignments.length; c++) {\r\n self.consignments[c].DisplayDateCreated = moment(self.consignments[c].DateCreated).format('DD/MM/YYYY HH:mm');\r\n\r\n var suppliers = '';\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var consignmentManifests = [];\r\n\r\n for (var a = 0; a < self.consignments[c].ConsignmentAddresses.length; a++) {\r\n self.consignments[c].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YY HH:mm');\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].Manifest) {\r\n if (!($filter('filter')(consignmentManifests, { ManifestNumber: self.consignments[c].ConsignmentAddresses[a].Manifest.ManifestNumber }, true)).length) {\r\n consignmentManifests.push(self.consignments[c].ConsignmentAddresses[a].Manifest);\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].LoadDetails && self.consignments[c].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n if (self.consignments[c].ConsignmentAddresses[a].ConsignmentAddressType.Name === 'Collection') {\r\n totalLoad += self.consignments[c].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.consignments[c].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var m = 0; m < consignmentManifests.length; m++) {\r\n if (suppliers.indexOf(consignmentManifests[m].Supplier) < 0) {\r\n if (suppliers.length > 0) suppliers += ', ';\r\n\r\n if (consignmentManifests[m].Supplier) suppliers += consignmentManifests[m].Supplier.Name;\r\n }\r\n }\r\n\r\n self.consignments[c].Manifests = consignmentManifests;\r\n self.consignments[c].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YYYY HH:mm');\r\n self.consignments[c].StartDeliveryAddress = startDeliveryAddress;\r\n self.consignments[c].StartDeliveryAddressPostcode = startDeliveryAddress.Postcode;\r\n if(startDeliveryAddress) self.consignments[c].FormattedStartDeliveryAddress = self.getFormattedConsignmentAddress(startDeliveryAddress);\r\n self.consignments[c].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YYYY HH:mm');\r\n self.consignments[c].LastDeliveryAddress = lastDeliveryAddress;\r\n self.consignments[c].LastDeliveryAddressPostcode = lastDeliveryAddress.Postcode;\r\n if(lastDeliveryAddress) self.consignments[c].FormattedLastDeliveryAddress = self.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.consignments[c].TotalLoad = totalLoad;\r\n self.consignments[c].TotalLoadDetailsHtml = loadDetails;\r\n self.consignments[c].Suppliers = suppliers;\r\n self.consignments[c].ConsignmentAddressesLength = self.consignments[c].ConsignmentAddresses.length;\r\n self.consignments[c].VehicleTypeName = self.consignments[c].VehicleType.Name;\r\n self.consignments[c].ConsignmentTypeShortName = self.consignments[c].ConsignmentType.ShortName;\r\n self.consignments[c].CustomerName = self.consignments[c].Customer.Name;\r\n\r\n if (!startDeliveryAddress) console.log(self.consignments[c].ConsignmentNumber);\r\n }\r\n }\r\n );\r\n },\r\n getProfitabilityConsignments: function (startDate, endDate, customerName) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (customerName !== null && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURI(customerName);\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Profitability' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignments = response.data;\r\n\r\n for (var c = 0; c < self.consignments.length; c++) {\r\n self.consignments[c].DisplayDateCreated = moment(self.consignments[c].DateCreated).format('DD/MM/YY HH:mm');\r\n\r\n var suppliers = '';\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var consignmentManifests = [];\r\n\r\n for (var a = 0; a < self.consignments[c].ConsignmentAddresses.length; a++) {\r\n self.consignments[c].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YY HH:mm');\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].SchedsuledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].Manifest) {\r\n if (!($filter('filter')(consignmentManifests, { ManifestNumber: self.consignments[c].ConsignmentAddresses[a].Manifest.ManifestNumber }, true)).length) {\r\n consignmentManifests.push(self.consignments[c].ConsignmentAddresses[a].Manifest);\r\n }\r\n }\r\n\r\n //if (self.consignments[c].ConsignmentAddresses[a].LoadDetails && self.consignments[c].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n // if (self.consignments[c].ConsignmentAddresses[a].ConsignmentAddressType.Name === 'Collection') {\r\n // totalLoad += self.consignments[c].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n // for (i = 0; i < self.consignments[c].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n // if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n // loadDetails += self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n // }\r\n // }\r\n //}\r\n }\r\n\r\n for (var m = 0; m < consignmentManifests.length; m++) {\r\n if (suppliers.indexOf(consignmentManifests[m].Supplier) < 0) {\r\n if (suppliers.length > 0) suppliers += ', ';\r\n\r\n if (consignmentManifests[m].Supplier) suppliers += consignmentManifests[m].Supplier.Name;\r\n }\r\n }\r\n\r\n self.consignments[c].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n self.consignments[c].StartDeliveryAddress = startDeliveryAddress;\r\n self.consignments[c].FormattedStartDeliveryAddress = self.getFormattedConsignmentAddress(startDeliveryAddress);\r\n self.consignments[c].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n self.consignments[c].LastDeliveryAddress = lastDeliveryAddress;\r\n self.consignments[c].FormattedLastDeliveryAddress = self.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.consignments[c].TotalLoad = totalLoad;\r\n self.consignments[c].TotalLoadDetailsHtml = loadDetails;\r\n self.consignments[c].Suppliers = suppliers;\r\n }\r\n }\r\n );\r\n },\r\n getSimpleProfitabilityConsignmentsReport: function (startDate, endDate, customerName) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (customerName !== null && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURI(customerName);\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/SimpleProfitability' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n invoiceConsignments: function (invoiceDate, consignments) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (!moment(moment().format('YYYY-MM-DD')).isSame(moment(invoiceDate).format('YYYY-MM-DD'))) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'invoiceDate=' + moment(invoiceDate).format('YYYY-MM-DD');\r\n }\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Consignments/Invoice' + urlParameters, consignments, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n ignoreProfitMargins: function (consignments) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Consignments/IgnoreProfitMargin', consignments, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n cancellationRequest: function (consignment) {\r\n var self = this;\r\n\r\n if (consignment.SaveContact) {\r\n if (consignment.BookingContact && consignment.BookingContact.Id) {\r\n var id = consignment.BookingContact.Id;\r\n\r\n consignment.BookingContact = {\r\n 'Id': id,\r\n 'Name': consignment.ContactName,\r\n 'Phone': consignment.ContactPhoneNumber,\r\n 'Email': consignment.ContactEmailAddress\r\n };\r\n }\r\n else {\r\n consignment.BookingContact = {\r\n 'Name': consignment.ContactName,\r\n 'Phone': consignment.ContactPhoneNumber,\r\n 'Email': consignment.ContactEmailAddress\r\n };\r\n }\r\n }\r\n\r\n delete consignment.CreatedBy;\r\n delete consignment.ConsignmentChangeLogs;\r\n\r\n for (var i = 0; i < consignment.ConsignmentAddresses.length; i++) {\r\n consignment.ConsignmentAddresses[i].ConsignmentOrder = (i + 1) * 10;\r\n consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(moment(consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime).toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n\r\n delete consignment.ConsignmentAddresses[i].Consignment;\r\n\r\n if (consignment.ConsignmentAddresses[i].Manifest) {\r\n if (consignment.ConsignmentAddresses[i].Manifest.ManifestChangeLogs) delete consignment.ConsignmentAddresses[i].Manifest.ManifestChangeLogs;\r\n\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier) {\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers) delete consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers;\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier.Vehicles) delete consignment.ConsignmentAddresses[i].Manifest.Supplier.Vehicles;\r\n }\r\n }\r\n }\r\n\r\n if (consignment.CustomerBranch && consignment.CustomerBranch.Contacts) delete consignment.CustomerBranch.Contacts;\r\n\r\n consignment.TotalLoadedMiles = consignment.TotalMiles;\r\n consignment.InvoiceStatus = 1;\r\n delete consignment.CustomerInvoice;\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Consignments/CancellationRequest/', consignment, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.consignment;\r\n }\r\n );\r\n }\r\n }\r\n}]);","manifests.factory('ManifestFactory', ['$http', '$filter', 'UserFactory', function ($http, $filter, UserFactory) {\r\n return {\r\n manifests: null,\r\n manifest: null,\r\n createNewManifest: function (vehicleType, consignmentAddresses, totalMiles, totalTime) {\r\n this.manifest = {\r\n 'ManifestStatus': { 'Id': '1BEE9AFF-F360-4876-99C3-84330093AFCD', 'Name': 'Unallocated' },\r\n 'VehicleType': vehicleType,\r\n 'StatusColour': { 'Id': '4DCBBAC7-4EBE-4886-BBAC-E4B7924AFE88', 'Name': 'White', 'HexCode': '#ffffff' },\r\n 'ConsignmentAddresses': consignmentAddresses,\r\n 'TotalMiles': totalMiles,\r\n 'TotalTimeInMinutes': totalTime,\r\n 'Currency': '£'\r\n };\r\n\r\n for (var i = 0; i < this.manifest.ConsignmentAddresses.length; i++) {\r\n this.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime = moment(this.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n }\r\n\r\n return this.manifest;\r\n },\r\n getManifest: function(id){\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.manifest = response.data;\r\n var customers = '';\r\n var consignmentNumbers = '';\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var firstConsignmentBookedDate = null;\r\n var consignmentTypes = '';\r\n var customerNotes = '';\r\n var officeNotes = '';\r\n var supplierNotes = '';\r\n var invoiceNotes = '';\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var smallestVehicleType = null;\r\n var manifestConsignments = [];\r\n var additionalCharges = '';\r\n var locationLastDeliveryDate = null;\r\n var locationLastDeliveryAddress = null;\r\n var startDeliveryTimed = false;\r\n var lastDeliveryTimed = false;\r\n var middleDeliveryTimed = false; \r\n\r\n for (var a = 0; a < self.manifest.ConsignmentAddresses.length; a++) {\r\n self.manifest.ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n self.manifest.ConsignmentAddresses[a].DisplayEstimatedStartDateAndTime = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n self.manifest.ConsignmentAddresses[a].DisplayStartStartTime = (self.manifest.ConsignmentAddresses[a].IsOnRoute) ? moment(self.manifest.ConsignmentAddresses[a].StartTime).format('DD/MM/YYYY HH:mm') : '';\r\n self.manifest.ConsignmentAddresses[a].DisplayArrivalTime = (self.manifest.ConsignmentAddresses[a].HasArrived) ? moment(self.manifest.ConsignmentAddresses[a].ArrivalTime).format('DD/MM/YYYY HH:mm') : '';\r\n self.manifest.ConsignmentAddresses[a].DisplayCompletionTime = (self.manifest.ConsignmentAddresses[a].IsCompleted) ? moment(self.manifest.ConsignmentAddresses[a].CompletionTime).format('DD/MM/YYYY HH:mm') : '';\r\n self.manifest.ConsignmentAddresses[a].FormattedAddress = self.getFormattedConsignmentAddress(self.manifest.ConsignmentAddresses[a].Address);\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n startDeliveryToDate = (self.manifest.ConsignmentAddresses[0].ScheduledStartToDateAndTime) ? moment(self.manifest.ConsignmentAddresses[0].ScheduledStartToDateAndTime) : null;\r\n startDeliveryTimed = self.manifest.ConsignmentAddresses[0].Timed;\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n lastDeliveryToDate = (self.manifest.ConsignmentAddresses[self.manifest.ConsignmentAddresses.length - 1].ScheduledStartToDateAndTime) ? moment(self.manifest.ConsignmentAddresses[self.manifest.ConsignmentAddresses.length - 1].ScheduledStartToDateAndTime) : null;\r\n lastDeliveryTimed = self.manifest.ConsignmentAddresses[self.manifest.ConsignmentAddresses.length - 1].Timed;\r\n\r\n if (a > 0 && a < self.manifest.ConsignmentAddresses.length - 1) {\r\n if (self.manifest.ConsignmentAddresses[a].Timed) middleDeliveryTimed = true;\r\n }\r\n\r\n if (!firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifest.ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n else {\r\n if (moment(self.manifest.ConsignmentAddresses[a].Consignment.DateCreated) < firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifest.ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n }\r\n\r\n if (!($filter('filter')(manifestConsignments, { ConsignmentNumber: self.manifest.ConsignmentAddresses[a].Consignment.ConsignmentNumber }, true)).length) {\r\n manifestConsignments.push(self.manifest.ConsignmentAddresses[a].Consignment);\r\n }\r\n\r\n if (self.manifest.ConsignmentAddresses[a].LoadDetails && self.manifest.ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n totalLoad += self.manifest.ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.manifest.ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.manifest.ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.manifest.ConsignmentAddresses[a].LoadDetails[i].Description;\r\n }\r\n }\r\n\r\n additionalCharges = '';\r\n\r\n for (var c = 0; c < self.manifest.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n if (additionalCharges.length > 0) additionalCharges += '
';\r\n\r\n additionalCharges += self.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.ChargeFor + ' (Cost: £' + self.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Cost + '; Price: £' + self.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Price + ')';\r\n }\r\n\r\n self.manifest.ConsignmentAddresses[a].TotalAdditionalChargesHtml = additionalCharges;\r\n }\r\n\r\n for (var c = 0; c < manifestConsignments.length; c++) {\r\n if (consignmentNumbers.length > 0) consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifestConsignments[c].ConsignmentNumber;\r\n\r\n if (consignmentTypes.indexOf(manifestConsignments[c].ConsignmentType.ShortName) < 0) {\r\n if (consignmentTypes.length > 0) consignmentTypes += ', ';\r\n\r\n consignmentTypes += manifestConsignments[c].ConsignmentType.ShortName;\r\n }\r\n\r\n if (manifestConsignments[c].CustomerBranch) {\r\n if (customers.indexOf(manifestConsignments[c].CustomerBranch.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].CustomerBranch.Name;\r\n }\r\n }\r\n else {\r\n if (customers.indexOf(manifestConsignments[c].Customer.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].Customer.Name;\r\n }\r\n\t\t\t\t\t\t\t}\r\n\r\n if (customerNotes.length > 0) customerNotes += '
';\r\n\r\n if (manifestConsignments[c].Customer.Notes && manifestConsignments[c].Customer.Notes.length > 0) customerNotes += manifestConsignments[c].Customer.Notes;\r\n\r\n if (officeNotes.length > 0) officeNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForOffice && manifestConsignments[c].NotesForOffice.length > 0) officeNotes += manifestConsignments[c].NotesForOffice;\r\n\r\n if (supplierNotes.length > 0) supplierNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForSupplier && manifestConsignments[c].NotesForSupplier.length > 0) supplierNotes += manifestConsignments[c].NotesForSupplier;\r\n\r\n if (invoiceNotes.length > 0) invoiceNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForInvoice && manifestConsignments[c].NotesForInvoice.length > 0) invoiceNotes += manifestConsignments[c].NotesForInvoice;\r\n }\r\n\r\n if (self.manifest.Supplier && self.manifest.Supplier.SupplierUsers && self.manifest.Supplier.SupplierUsers[0] && self.manifest.Supplier.SupplierUsers[0].LastKnownLocation && self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest && self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses.length > 0) {\r\n for (var a = 0; a < self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses.length; a++) {\r\n if (!locationLastDeliveryDate) {\r\n locationLastDeliveryDate = moment(self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n locationLastDeliveryAddress = self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) > locationLastDeliveryDate) {\r\n locationLastDeliveryDate = moment(self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n locationLastDeliveryAddress = self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n\r\n self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.LastDeliveryDate = moment(locationLastDeliveryDate);\r\n self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.LastDeliveryAddress = locationLastDeliveryAddress;\r\n self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(locationLastDeliveryAddress);\r\n }\r\n\r\n self.manifest.Customers = customers;\r\n self.manifest.ConsignmentNumbers = consignmentNumbers;\r\n self.manifest.ConsignmentTypes = consignmentTypes;\r\n self.manifest.StartDeliveryDate = moment(startDeliveryDate);\r\n self.manifest.StartDeliveryToDate = (startDeliveryToDate) ? moment(startDeliveryToDate) : null;\r\n self.manifest.StartDeliveryAddress = startDeliveryAddress;\r\n self.manifest.DisplayStartDeliveryAddress = (startDeliveryAddress.Postcode && startDeliveryAddress.Postcode.length > 0) ? startDeliveryAddress.Postcode : (startDeliveryAddress.Town && startDeliveryAddress.Town.length > 0) ? startDeliveryAddress.Town : startDeliveryAddress.AddressLine1;\r\n self.manifest.FormattedStartDeliveryAddress = self.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n self.manifest.LastDeliveryDate = moment(lastDeliveryDate);\r\n self.manifest.LastDeliveryToDate = (lastDeliveryToDate) ? moment(lastDeliveryToDate) : null;\r\n self.manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n self.manifest.DisplayLastDeliveryAddress = (lastDeliveryAddress.Postcode && lastDeliveryAddress.Postcode.length > 0) ? lastDeliveryAddress.Postcode : (lastDeliveryAddress.Town && lastDeliveryAddress.Town.length > 0) ? lastDeliveryAddress.Town : lastDeliveryAddress.AddressLine1;\r\n self.manifest.FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.manifest.FirstConsignmentBookedDate = moment(firstConsignmentBookedDate).format('DD/MM/YY HH:mm');\r\n self.manifest.ManifestCreationDate = moment(self.manifest.ManifestChangeLogs[0].DateCreated);\r\n self.manifest.AllCustomerNotesHtml = customerNotes;\r\n self.manifest.AllOfficeNotesHtml = officeNotes;\r\n self.manifest.AllSupplierNotesHtml = supplierNotes;\r\n self.manifest.AllInvoiceNotesHtml = invoiceNotes;\r\n self.manifest.TotalLoad = totalLoad;\r\n self.manifest.TotalLoadDetailsHtml = loadDetails;\r\n self.manifest.StartDeliveryTimed = startDeliveryTimed;\r\n self.manifest.LastDeliveryTimed = lastDeliveryTimed;\r\n self.manifest.MiddleDeliveryTimed = middleDeliveryTimed;\r\n }\r\n );\r\n },\r\n searchManifests: function(startDate, endDate, vehicleType, customerName, poNumber, consignmentNumber, manifestNumber, collectionAddress, deliveryAddress, supplierName, nonspec, notAcknowledged, isBackload, excludeBackload, isDeleted){\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (vehicleType) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n if (vehicleType && vehicleType.Id && vehicleType.Id !== '0') urlParameters += 'vehicleType=' + vehicleType.Id;\r\n }\r\n\r\n if (customerName != null && customerName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURIComponent(customerName);\r\n }\r\n\r\n if (poNumber != null && poNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'poNumber=' + encodeURIComponent(poNumber);\r\n }\r\n\r\n if (consignmentNumber != null && consignmentNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'consignmentNumber=' + encodeURIComponent(consignmentNumber);\r\n }\r\n\r\n if (manifestNumber != null && manifestNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'manifestNumber=' + encodeURIComponent(manifestNumber);\r\n }\r\n\r\n if (collectionAddress != null && collectionAddress.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'collectionAddress=' + encodeURIComponent(collectionAddress);\r\n }\r\n\r\n if (deliveryAddress != null && deliveryAddress.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'deliveryAddress=' + encodeURIComponent(deliveryAddress);\r\n }\r\n\r\n if (supplierName != null && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'supplierName=' + encodeURIComponent(supplierName);\r\n }\r\n\r\n if (nonspec) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'nonspec=' + nonspec;\r\n }\r\n\r\n if (notAcknowledged) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'notacknowledged=' + notAcknowledged;\r\n }\r\n\r\n if (isBackload) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'isbackload=' + isBackload;\r\n }\r\n\r\n if (excludeBackload) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'excludebackload=' + excludeBackload;\r\n }\r\n\r\n if (isDeleted) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'isdeleted=' + isDeleted;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.manifests = response.data;\r\n\r\n for (var m = 0; m < self.manifests.length; m++) {\r\n var startDeliveryDate = null;\r\n var startDeliveryToDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var firstConsignmentBookedDate = null;\r\n var customers = '';\r\n var consignmentNumbers = '';\r\n var consignmentTypes = '';\r\n var officeNotes = '';\r\n var supplierNotes = '';\r\n var invoiceNotes = '';\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var smallestVehicleType = null;\r\n var manifestConsignments = [];\r\n var consignmentPrices = '';\r\n var startDeliveryTimed = false;\r\n var lastDeliveryTimed = false;\r\n var middleDeliveryTimed = false;\r\n\r\n for (var a = 0; a < self.manifests[m].ConsignmentAddresses.length; a++) {\r\n self.manifests[m].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n /*\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n */\r\n\r\n if (!firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated) < firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n }\r\n\r\n if (!($filter('filter')(manifestConsignments, { ConsignmentNumber: self.manifests[m].ConsignmentAddresses[a].Consignment.ConsignmentNumber }, true)).length) {\r\n manifestConsignments.push(self.manifests[m].ConsignmentAddresses[a].Consignment);\r\n }\r\n\r\n if (self.manifests[m].ConsignmentAddresses[a].LoadDetails && self.manifests[m].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n if (self.manifests[m].ConsignmentAddresses[a].ConsignmentAddressType.Name == 'Collection') {\r\n //totalLoad += self.manifests[m].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.manifests[m].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n totalLoad += self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Quantity;\r\n }\r\n }\r\n }\r\n\r\n if (a > 0 && a < self.manifests[m].ConsignmentAddresses.length - 1) {\r\n if (self.manifests[m].ConsignmentAddresses[a].Timed) middleDeliveryTimed = true;\r\n }\r\n }\r\n\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryToDate = (self.manifests[m].ConsignmentAddresses[0].ScheduledStartToDateAndTime) ? moment(self.manifests[m].ConsignmentAddresses[0].ScheduledStartToDateAndTime) : null;\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[0].Address;\r\n startDeliveryTimed = self.manifests[m].ConsignmentAddresses[0].Timed;\r\n\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryToDate = (self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].ScheduledStartToDateAndTime) ? moment(self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].ScheduledStartToDateAndTime) : null;\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].Address;\r\n lastDeliveryTimed = self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].Timed;\r\n \r\n for (var c = 0; c < manifestConsignments.length; c++) {\r\n if (consignmentNumbers.length > 0) consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifestConsignments[c].ConsignmentNumber;\r\n\r\n if (consignmentTypes.indexOf(manifestConsignments[c].ConsignmentType.ShortName) < 0) {\r\n if (consignmentTypes.length > 0) consignmentTypes += ', ';\r\n\r\n consignmentTypes += manifestConsignments[c].ConsignmentType.ShortName;\r\n }\r\n\r\n if (manifestConsignments[c].CustomerBranch) {\r\n if (customers.indexOf(manifestConsignments[c].CustomerBranch.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].CustomerBranch.Name;\r\n\r\n if (manifestConsignments[c].CustomerBranch.SLA && manifestConsignments[c].CustomerBranch.SLA.length > 0) customers += ' [' + manifestConsignments[c].CustomerBranch.SLA + ']';\r\n }\r\n }\r\n else {\r\n if (customers.indexOf(manifestConsignments[c].Customer.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].Customer.Name;\r\n\r\n if (manifestConsignments[c].Customer.SLA && manifestConsignments[c].Customer.SLA.length > 0) customers += ' [' + manifestConsignments[c].Customer.SLA + ']';\r\n }\r\n }\r\n\r\n if (officeNotes.length > 0) officeNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForOffice && manifestConsignments[c].NotesForOffice.length > 0) officeNotes += manifestConsignments[c].NotesForOffice;\r\n\r\n if (supplierNotes.length > 0) supplierNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForSupplier && manifestConsignments[c].NotesForSupplier.length > 0) supplierNotes += manifestConsignments[c].NotesForSupplier;\r\n\r\n if (invoiceNotes.length > 0) invoiceNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForInvoice && manifestConsignments[c].NotesForInvoice.length > 0) invoiceNotes += manifestConsignments[c].NotesForInvoice;\r\n\r\n if (consignmentPrices.length > 0) consignmentPrices += ', ';\r\n\r\n consignmentPrices += '£' + $filter('number')(manifestConsignments[c].Price, 2);\r\n }\r\n \r\n self.manifests[m].Customers = customers;\r\n self.manifests[m].ConsignmentNumbers = consignmentNumbers;\r\n self.manifests[m].ConsignmentTypes = consignmentTypes;\r\n self.manifests[m].StartDeliveryDate = moment(startDeliveryDate);\r\n self.manifests[m].StartDeliveryToDate = (startDeliveryToDate) ? moment(startDeliveryToDate) : null;\r\n self.manifests[m].StartDeliveryAddress = startDeliveryAddress;\r\n self.manifests[m].DisplayStartDeliveryAddress = (startDeliveryAddress.Postcode && startDeliveryAddress.Postcode.length > 0) ? startDeliveryAddress.Postcode : (startDeliveryAddress.Town && startDeliveryAddress.Town.length > 0) ? startDeliveryAddress.Town : startDeliveryAddress.AddressLine1;\r\n self.manifests[m].FormattedStartDeliveryAddress = self.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n self.manifests[m].LastDeliveryDate = moment(lastDeliveryDate);\r\n self.manifests[m].LastDeliveryToDate = (lastDeliveryToDate) ? moment(lastDeliveryToDate) : null;\r\n self.manifests[m].LastDeliveryAddress = lastDeliveryAddress;\r\n self.manifests[m].DisplayLastDeliveryAddress = (lastDeliveryAddress.Postcode && lastDeliveryAddress.Postcode.length > 0) ? lastDeliveryAddress.Postcode : (lastDeliveryAddress.Town && lastDeliveryAddress.Town.length > 0) ? lastDeliveryAddress.Town : lastDeliveryAddress.AddressLine1;\r\n self.manifests[m].FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.manifests[m].FirstConsignmentBookedDate = moment(firstConsignmentBookedDate);\r\n self.manifests[m].ManifestCreationDate = moment(self.manifests[m].ManifestChangeLogs[0].DateCreated);\r\n self.manifests[m].AllOfficeNotesHtml = officeNotes;\r\n self.manifests[m].AllSupplierNotesHtml = supplierNotes;\r\n self.manifests[m].AllInvoiceNotesHtml = invoiceNotes;\r\n self.manifests[m].TotalLoad = totalLoad;\r\n self.manifests[m].TotalLoadDetailsHtml = loadDetails;\r\n self.manifests[m].ConsignmentPrices = consignmentPrices;\r\n self.manifests[m].StartDeliveryTimed = startDeliveryTimed;\r\n self.manifests[m].LastDeliveryTimed = lastDeliveryTimed;\r\n self.manifests[m].MiddleDeliveryTimed = middleDeliveryTimed;\r\n }\r\n }\r\n );\r\n },\r\n exportManifests: function (startDate, endDate, vehicleType, customerName, poNumber, consignmentNumber, manifestNumber, collectionAddress, deliveryAddress, supplierName, nonspec, notAcknowledged, isBackload, excludeBackload, isDeleted) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (vehicleType) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n if (vehicleType && vehicleType.Id && vehicleType.Id !== '0') urlParameters += 'vehicleType=' + vehicleType.Id;\r\n }\r\n\r\n if (customerName != null && customerName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURIComponent(customerName);\r\n }\r\n\r\n if (poNumber != null && poNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'poNumber=' + encodeURIComponent(poNumber);\r\n }\r\n\r\n if (consignmentNumber != null && consignmentNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'consignmentNumber=' + encodeURIComponent(consignmentNumber);\r\n }\r\n\r\n if (manifestNumber != null && manifestNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'manifestNumber=' + encodeURIComponent(manifestNumber);\r\n }\r\n\r\n if (collectionAddress != null && collectionAddress.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'collectionAddress=' + encodeURIComponent(collectionAddress);\r\n }\r\n\r\n if (deliveryAddress != null && deliveryAddress.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'deliveryAddress=' + encodeURIComponent(deliveryAddress);\r\n }\r\n\r\n if (supplierName != null && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'supplierName=' + encodeURIComponent(supplierName);\r\n }\r\n\r\n if (nonspec) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'nonspec=' + nonspec;\r\n }\r\n\r\n if (notAcknowledged) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'notacknowledged=' + notAcknowledged;\r\n }\r\n\r\n if (isBackload) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'isbackload=' + isBackload;\r\n }\r\n\r\n if (excludeBackload) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'excludebackload=' + excludeBackload;\r\n }\r\n\r\n if (isDeleted) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'isdeleted=' + isDeleted;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Export' + urlParameters, { headers: { 'Token': UserFactory.token } });\r\n },\r\n getAccountsManifests: function (startDate, endDate, supplierName, missingPOD, zeroCost, noInvoiceReference, holdInvoice) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (supplierName && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'supplier=' + supplierName;\r\n }\r\n\r\n if (missingPOD == true) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'pod=' + missingPOD;\r\n }\r\n\r\n if (zeroCost == true) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'zeroCost=' + zeroCost;\r\n }\r\n\r\n if (noInvoiceReference == true) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'noInvoiceReference=' + noInvoiceReference;\r\n }\r\n\r\n if (holdInvoice === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'hold-invoice=' + holdInvoice;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Accounts' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.manifests = response.data;\r\n\r\n for (var m = 0; m < self.manifests.length; m++) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var firstConsignmentBookedDate = null;\r\n var customers = '';\r\n var consignmentNumbers = '';\r\n var officeNotes = '';\r\n var supplierNotes = '';\r\n var invoiceNotes = '';\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var smallestVehicleType = null;\r\n var manifestConsignments = [];\r\n\r\n for (var a = 0; a < self.manifests[m].ConsignmentAddresses.length; a++) {\r\n self.manifests[m].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated) < firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n }\r\n\r\n if (!($filter('filter')(manifestConsignments, { ConsignmentNumber: self.manifests[m].ConsignmentAddresses[a].Consignment.ConsignmentNumber }, true)).length) {\r\n manifestConsignments.push(self.manifests[m].ConsignmentAddresses[a].Consignment);\r\n }\r\n\r\n if (self.manifests[m].ConsignmentAddresses[a].LoadDetails && self.manifests[m].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n if (self.manifests[m].ConsignmentAddresses[a].ConsignmentAddressType.Name == 'Collection') {\r\n totalLoad += self.manifests[m].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.manifests[m].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var c = 0; c < manifestConsignments.length; c++) {\r\n if (consignmentNumbers.length > 0) consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifestConsignments[c].ConsignmentNumber;\r\n\r\n if (customers.indexOf(manifestConsignments[c].Customer.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].Customer.Name;\r\n }\r\n\r\n if (officeNotes.length > 0) officeNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForOffice && manifestConsignments[c].NotesForOffice.length > 0) officeNotes += manifestConsignments[c].NotesForOffice;\r\n\r\n if (supplierNotes.length > 0) supplierNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForSupplier && manifestConsignments[c].NotesForSupplier.length > 0) supplierNotes += manifestConsignments[c].NotesForSupplier;\r\n\r\n if (invoiceNotes.length > 0) invoiceNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForInvoice && manifestConsignments[c].NotesForInvoice.length > 0) invoiceNotes += manifestConsignments[c].NotesForInvoice;\r\n }\r\n\r\n self.manifests[m].Customers = customers;\r\n self.manifests[m].ConsignmentNumbers = consignmentNumbers;\r\n self.manifests[m].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YYYY HH:mm');\r\n self.manifests[m].StartDeliveryAddress = startDeliveryAddress;\r\n self.manifests[m].StartDeliveryAddressPostcode = startDeliveryAddress.Postcode;\r\n self.manifests[m].FormattedStartDeliveryAddress = self.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n self.manifests[m].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YYYY HH:mm');\r\n self.manifests[m].LastDeliveryAddress = lastDeliveryAddress;\r\n self.manifests[m].LastDeliveryAddressPostcode = lastDeliveryAddress.Postcode;\r\n self.manifests[m].FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.manifests[m].FirstConsignmentBookedDate = moment(firstConsignmentBookedDate).format('DD/MM/YYYY HH:mm');\r\n self.manifests[m].AllOfficeNotesHtml = officeNotes;\r\n self.manifests[m].AllSupplierNotesHtml = supplierNotes;\r\n self.manifests[m].AllInvoiceNotesHtml = invoiceNotes;\r\n self.manifests[m].TotalLoad = totalLoad;\r\n self.manifests[m].TotalLoadDetails = loadDetails;\r\n self.manifests[m].ConsignmentAddressesLength = self.manifests[m].ConsignmentAddresses.length;\r\n self.manifests[m].VehicleTypeName = self.manifests[m].VehicleType.Name;\r\n self.manifests[m].SupplierName = self.manifests[m].Supplier.Name;\r\n }\r\n }\r\n );\r\n },\r\n saveManifest: function (emailMessage) {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n m.ConsignmentAddresses[i].ManifestOrder = (i + 1) * 10;\r\n m.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(moment(m.ConsignmentAddresses[i].ScheduledStartDateAndTime).toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n delete m.ConsignmentAddresses[i].AdditionalCharges;\r\n\r\n delete m.ConsignmentAddresses[i].Consignment.ConsignmentChangeLogs;\r\n }\r\n\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n\r\n if (m.Supplier) {\r\n if (m.Supplier.SupplierUsers) delete m.Supplier.SupplierUsers;\r\n if (m.Supplier.Vehicles) delete m.Supplier.Vehicles;\r\n }\r\n\r\n if (m.TransportExchangeManifests) {\r\n for (var i = 0; i < m.TransportExchangeManifests.length; i++) {\r\n if (m.TransportExchangeManifests[i].TransportExchangeManifestLogs) delete m.TransportExchangeManifests[i].TransportExchangeManifestLogs;\r\n }\r\n }\r\n\r\n m.InvoiceStatus = 1;\r\n\r\n if (!m.Id) {\r\n var manifestWithCustomerMessage = {\r\n Manifest: m,\r\n CustomerMessage: emailMessage\r\n };\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Manifests', manifestWithCustomerMessage, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + m.Id, m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n }\r\n },\r\n sendManifest: function (manifest) {\r\n var m = {\r\n Id: manifest.Id\r\n };\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + m.Id + '/Send', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n sendManifestToTransportExchange: function (manifest) {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n m.ConsignmentAddresses[i].ManifestOrder = (i + 1) * 10;\r\n m.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(moment(m.ConsignmentAddresses[i].ScheduledStartDateAndTime).toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n delete m.ConsignmentAddresses[i].AdditionalCharges;\r\n\r\n delete m.ConsignmentAddresses[i].Consignment.ConsignmentChangeLogs;\r\n }\r\n\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + manifest.Id + '/SendToTransportExchange', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n removeManifestFromTransportExchange: function (manifest) {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n if (m.ConsignmentAddresses) {\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n delete m.ConsignmentAddresses[i].Consignment.ConsignmentChangeLogs;\r\n }\r\n }\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n if (m.Supplier.SupplierUsers) delete m.Supplier.SupplierUsers;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + manifest.Id + '/RemoveFromTransportExchange', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n rebookManifestWithTransportExchange: function (manifest) {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n if (m.ConsignmentAddresses) {\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n delete m.ConsignmentAddresses[i].Consignment.ConsignmentChangeLogs;\r\n }\r\n }\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n if (m.Supplier) delete m.Supplier;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + manifest.Id + '/RebookWithTransportExchange', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n updateManifestCost: function (manifest) {\r\n var m = {\r\n Id: manifest.Id,\r\n CalculatedCost: manifest.CalculatedCost,\r\n Cost: manifest.Cost\r\n };\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + m.Id + '/UpdateCosts', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n deleteManifest: function () {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n m.ConsignmentAddresses[i].ManifestOrder = (i + 1) * 10;\r\n }\r\n\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/Manifests/' + m.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n getConsignmentNumbers: function (manifest) {\r\n var consignmentNumbers = '';\r\n \r\n if (!manifest) manifest = this.manifest;\r\n\r\n if (manifest) {\r\n var existingConsignmentNumbers = [];\r\n var alreadyExists = false;\r\n\r\n for (var i = 0; i < manifest.ConsignmentAddresses.length; i++) {\r\n alreadyExists = false;\r\n\r\n if (existingConsignmentNumbers.length == 0) {\r\n if (consignmentNumbers != '') consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber;\r\n existingConsignmentNumbers.push(manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber);\r\n }\r\n else {\r\n for (var j = 0; j < existingConsignmentNumbers.length; j++) {\r\n if (existingConsignmentNumbers[j] == manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber) {\r\n alreadyExists = true;\r\n }\r\n }\r\n\r\n if (!alreadyExists) {\r\n if (consignmentNumbers != '') consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber;\r\n existingConsignmentNumbers.push(manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return consignmentNumbers;\r\n },\r\n getFormattedConsignmentAddress: function (args) {\r\n var formattedAddress = '';\r\n var address = null;\r\n\r\n switch (typeof arguments[0]) {\r\n case 'object':\r\n if (arguments[0].Address) {\r\n address = arguments[0].Address;\r\n }\r\n else if (arguments[0].AddressLine1 || arguments[0].Town || arguments[0].Postcode) {\r\n address = arguments[0];\r\n }\r\n else {\r\n throw 'Unknown argument type';\r\n }\r\n break;\r\n case 'number':\r\n var index = arguments[0];\r\n\r\n address = this.manifest.ConsignmentAddresses[index].Address;\r\n\r\n break;\r\n default:\r\n throw 'Unknown argument type';\r\n }\r\n\r\n //formattedAddress += (address.CompanyName != null && address.CompanyName != '') ? address.CompanyName : '';\r\n //formattedAddress += (address.AddressLine1 != null && address.AddressLine1 != '') ? address.AddressLine1 : '';\r\n //formattedAddress += (address.AddressLine2 != null && address.AddressLine2 != '') ? (formattedAddress == '') ? address.AddressLine2 : ',' + address.AddressLine2 : '';\r\n //formattedAddress += (address.AddressLine3 != null && address.AddressLine3 != '') ? (formattedAddress == '') ? address.AddressLine3 : ',' + address.AddressLine3 : '';\r\n formattedAddress += (address.Town != null && address.Town != '') ? (formattedAddress == '') ? address.Town : ',' + address.Town : '';\r\n formattedAddress += (address.County != null && address.County != '') ? (formattedAddress == '') ? address.County : ',' + address.County : '';\r\n formattedAddress += (address.Postcode != null && address.Postcode != '') ? (formattedAddress == '') ? address.Postcode : ',' + address.Postcode : '';\r\n\r\n return formattedAddress;\r\n },\r\n getFullFormattedConsignmentAddress: function (args) {\r\n var formattedAddress = '';\r\n var address = null;\r\n\r\n switch (typeof arguments[0]) {\r\n case 'object':\r\n if (arguments[0].Address) {\r\n address = arguments[0].Address;\r\n }\r\n else if (arguments[0].AddressLine1 || arguments[0].Town || arguments[0].Postcode) {\r\n address = arguments[0];\r\n }\r\n else {\r\n throw 'Unknown argument type';\r\n }\r\n break;\r\n case 'number':\r\n var index = arguments[0];\r\n\r\n address = this.manifest.ConsignmentAddresses[index].Address;\r\n\r\n break;\r\n default:\r\n throw 'Unknown argument type';\r\n }\r\n\r\n formattedAddress += (address.CompanyName != null && address.CompanyName != '') ? address.CompanyName : '';\r\n //formattedAddress += (address.AddressLine1 != null && address.AddressLine1 != '') ? address.AddressLine1 : '';\r\n //formattedAddress += (address.AddressLine2 != null && address.AddressLine2 != '') ? (formattedAddress == '') ? address.AddressLine2 : ',' + address.AddressLine2 : '';\r\n //formattedAddress += (address.AddressLine3 != null && address.AddressLine3 != '') ? (formattedAddress == '') ? address.AddressLine3 : ',' + address.AddressLine3 : '';\r\n formattedAddress += (address.Town != null && address.Town != '') ? (formattedAddress == '') ? address.Town : ', ' + address.Town : '';\r\n formattedAddress += (address.County != null && address.County != '') ? (formattedAddress == '') ? address.County : ', ' + address.County : '';\r\n formattedAddress += (address.Postcode != null && address.Postcode != '') ? (formattedAddress == '') ? address.Postcode : ', ' + address.Postcode : '';\r\n\r\n return formattedAddress;\r\n },\r\n getAvailableSuppliers: function (manifest, suppliers) {\r\n var availableSuppliers = [];\r\n\r\n for (var s = 0; s < suppliers.length; s++) {\r\n if (suppliers[s].SmallestVehicle) {\r\n if (suppliers[s].SmallestVehicle.VehicleType.Order >= manifest.VehicleType.Order) {\r\n availableSuppliers.push(suppliers[s]);\r\n }\r\n }\r\n }\r\n\r\n return availableSuppliers;\r\n },\r\n getReport: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + id + '/Report', { headers: { 'Token': UserFactory.token }, responseType: 'arraybuffer' })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n generateCompletedEmailBody: function (consignmentAddress, manifest) {\r\n var body = '';\r\n\r\n body += 'Please accept this e-mail as confirmation of delivered goods as carried by\\n\\n';\r\n body += 'Type:\\t\\t\\t\\t' + consignmentAddress.ConsignmentAddressType.Name + '\\n';\r\n body += 'Stop:\\t\\t\\t\\t' + (consignmentAddress.ManifestOrder / 10) + ' of ' + (manifest.ConsignmentAddresses[manifest.ConsignmentAddresses.length - 1].ManifestOrder / 10) + '\\n';\r\n body += 'Our Ref:\\t\\t\\t\\t' + manifest.ManifestNumber + '\\n';\r\n\r\n if (consignmentAddress.Consignment.PONumber && consignmentAddress.Consignment.PONumber !== '') {\r\n body += 'Your PO:\\t\\t\\t\\t' + consignmentAddress.Consignment.PONumber + '\\n';\r\n }\r\n\r\n if (consignmentAddress.Consignment.CustomerReferenceNumber && consignmentAddress.Consignment.CustomerReference !== '') {\r\n body += 'Your Ref:\\t\\t\\t\\t' + consignmentAddress.Consignment.CustomerReference + '\\n';\r\n }\r\n\r\n body += 'Address:\\t\\t\\t\\t' + consignmentAddress.FormattedAddress + '\\n';\r\n\r\n if (consignmentAddress.ArrivalTime) {\r\n body += 'Arrival Time:\\t\\t\\t' + moment(consignmentAddress.ArrivalTime).format('DD/MM/YY HH:mm') + '\\n';\r\n }\r\n\r\n if (consignmentAddress.CompletionTime) {\r\n body += 'Completion Time:\\t\\t' + moment(consignmentAddress.CompletionTime).format('DD/MM/YY HH:mm') + '\\n';\r\n }\r\n\r\n if (consignmentAddress.SignatureName && consignmentAddress.SignatureName !== '') {\r\n body += 'Signed For:\\t\\t\\t' + consignmentAddress.SignatureName + '\\n';\r\n }\r\n\r\n return body;\r\n },\r\n sendCompletedEmail: function (to, consignmentAddress) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (to != null && to.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'to=' + to;\r\n }\r\n\r\n if (consignmentAddress) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'consignmentAddress=' + consignmentAddress.Id;\r\n }\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Emails/Confirmation' + urlParameters, null, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n sendReportEmail: function (to, body, manifest) {\r\n var self = this;\r\n var urlParameters = '';\r\n var email = {\r\n To: to,\r\n Subject: 'Manifest Report',\r\n Body: body\r\n };\r\n\r\n if (manifest) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'manifest=' + manifest.Id;\r\n }\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Emails/ManifestReport' + urlParameters, email, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n invoiceManifests: function (invoiceDate, manifests) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (!moment(moment().format('YYYY-MM-DD')).isSame(moment(invoiceDate).format('YYYY-MM-DD'))) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'invoiceDate=' + moment(invoiceDate).format('YYYY-MM-DD');\r\n }\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Manifests/Invoice' + urlParameters, manifests, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n getManifestTransportExchangePodApprovals() {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/TransportExchangePodApprovals', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n approveTransportExchangePods(transportExchangeConsignmentAddresses) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Manifests/ApproveTransportExchangePods', transportExchangeConsignmentAddresses, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n rejectTransportExchangePods(transportExchangeConsignmentAddresses) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Manifests/RejectTransportExchangePods', transportExchangeConsignmentAddresses, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n }\r\n }\r\n}]);","suppliers.factory('SupplierFactory', ['$http', 'UserFactory', 'ManifestFactory', function ($http, UserFactory, ManifestFactory) {\r\n return {\r\n supplier: null,\r\n suppliers: null,\r\n lastSupplierNameSearched: null,\r\n supplierExistsResponse: null,\r\n createNewSupplier: function () {\r\n this.supplier = {\r\n\r\n };\r\n\r\n return this.supplier;\r\n },\r\n getSupplier: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplier = response.data;\r\n\r\n for (var l = 0; l < self.supplier.SupplierLicences.length; l++) {\r\n self.supplier.SupplierLicences[l].DisplayValidFrom = moment(self.supplier.SupplierLicences[l].ValidFrom).format('DD/MM/YYYY');\r\n self.supplier.SupplierLicences[l].DisplayValidTo = moment(self.supplier.SupplierLicences[l].ValidTo).format('DD/MM/YYYY');\r\n }\r\n\r\n return self.supplier;\r\n }\r\n );\r\n },\r\n getSuppliers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.suppliers = response.data;\r\n\r\n for (var s = 0; s < self.suppliers.length; s++) {\r\n var smallestVehicle = null;\r\n\r\n for (var v = 0; v < self.suppliers[s].Vehicles.length; v++) {\r\n if (!smallestVehicle || self.suppliers[s].Vehicles[v].VehicleType.Order < smallestVehicle.VehicleType.Order) {\r\n smallestVehicle = self.suppliers[s].Vehicles[v];\r\n }\r\n }\r\n\r\n self.suppliers[s].SmallestVehicle = smallestVehicle;\r\n }\r\n\r\n return self.suppliers;\r\n }\r\n );\r\n },\r\n searchSuppliers: function (name, isTrackingDisabled, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name !== null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n if (isTrackingDisabled) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'is-tracking-disabled=' + isTrackingDisabled;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'is-deactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.suppliers = response.data;\r\n\r\n for (var s = 0; s < self.suppliers.length; s++) {\r\n var smallestVehicle = null;\r\n\r\n for (var v = 0; v < self.suppliers[s].Vehicles.length; v++) {\r\n if (!smallestVehicle || self.suppliers[s].Vehicles[v].VehicleType.Order < smallestVehicle.VehicleType.Order) {\r\n smallestVehicle = self.suppliers[s].Vehicles[v];\r\n }\r\n }\r\n\r\n self.suppliers[s].SmallestVehicle = smallestVehicle;\r\n }\r\n\r\n return self.suppliers;\r\n }\r\n );\r\n },\r\n checkSupplierExists: function (name) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n urlParameters += '?name=' + encodeURIComponent(name);\r\n\r\n self.lastSupplierNameSearched = name;\r\n console.log(\"Last Supplier Name Searched: \" + self.lastSupplierNameSearched);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers/Exists' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n console.log(\"Last Supplier Name Searched: \" + self.lastSupplierNameSearched + \", 'name': \" + name);\r\n\r\n if (self.lastSupplierNameSearched === name) {\r\n self.supplierExistsResponse = response.data;\r\n }\r\n\r\n return self.supplierExistsResponse;\r\n }\r\n );\r\n },\r\n getLastSupplierLocation: function(supplierId){\r\n var urlParameters = '';\r\n\r\n if(supplierId) urlParameters += '?supplierId=' + encodeURI(supplierId)\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Last' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n if (supplierId) {\r\n var location = response.data;\r\n\r\n if (location.Manifest !== null) {\r\n startDeliveryDate = moment(location.Manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Manifest.ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(location.Manifest.ConsignmentAddresses[location.Manifest.ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Manifest.ConsignmentAddresses[location.Manifest.ConsignmentAddresses.length - 1].Address;\r\n\r\n location.Manifest.StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Manifest.StartDeliveryAddress = startDeliveryAddress;\r\n location.Manifest.FormattedStartDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n location.Manifest.LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n location.Manifest.FormattedLastDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n\r\n return location;\r\n }\r\n else {\r\n var locations = response.data;\r\n\r\n for (var i = 0; i < locations.length; i++) {\r\n if (locations[i].Manifest !== null) {\r\n startDeliveryDate = null;\r\n startDeliveryAddress = null;\r\n lastDeliveryDate = null;\r\n lastDeliveryAddress = null;\r\n\r\n for (var a = 0; a < locations[i].Manifest.ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n\r\n locations[i].Manifest.StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.StartDeliveryAddress = startDeliveryAddress;\r\n if (locations[i].Manifest.StartDeliveryAddress) locations[i].Manifest.FormattedStartDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(startDeliveryAddress);\r\n locations[i].Manifest.LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n if (locations[i].Manifest.LastDeliveryAddress) locations[i].Manifest.FormattedLastDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return locations;\r\n }\r\n }\r\n );\r\n },\r\n getLastSupplierLocationByConsignmentNumberCustomerReferenceOrPONumber: function (searchText) {\r\n var urlParameters = '';\r\n\r\n if (searchText) urlParameters += '?consignmentNumberCustomerReferenceOrPONumber=' + encodeURI(searchText)\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var location = response.data;\r\n\r\n if (location.Supplier && location.Supplier.Manifests !== null) {\r\n if (location.Supplier.Manifests.length === 1) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n /*\r\n for (var a = 0; a < location.Supplier.Manifests[0].ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n */\r\n\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[location.Supplier.Manifests[0].ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[location.Supplier.Manifests[0].ConsignmentAddresses.length - 1].Address;\r\n\r\n location.Supplier.Manifests[0].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Supplier.Manifests[0].StartDeliveryAddress = startDeliveryAddress;\r\n location.Supplier.Manifests[0].FormattedStartDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n location.Supplier.Manifests[0].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Supplier.Manifests[0].LastDeliveryAddress = lastDeliveryAddress;\r\n location.Supplier.Manifests[0].FormattedLastDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return location;\r\n }\r\n );\r\n },\r\n getLastSupplierLocationByManifestNumber: function (manifestNumber) {\r\n var urlParameters = '';\r\n\r\n if (manifestNumber) urlParameters += '?manifestNumber=' + encodeURI(manifestNumber)\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var location = response.data;\r\n\r\n if (location.Supplier && location.Supplier.Manifests !== null) {\r\n if (location.Supplier.Manifests.length === 1) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n /*\r\n for (var a = 0; a < location.Supplier.Manifests[0].ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n */\r\n\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[location.Supplier.Manifests[0].ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[location.Supplier.Manifests[0].ConsignmentAddresses.length - 1].Address;\r\n\r\n location.Supplier.Manifests[0].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Supplier.Manifests[0].StartDeliveryAddress = startDeliveryAddress;\r\n location.Supplier.Manifests[0].FormattedStartDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n location.Supplier.Manifests[0].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Supplier.Manifests[0].LastDeliveryAddress = lastDeliveryAddress;\r\n location.Supplier.Manifests[0].FormattedLastDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return location;\r\n }\r\n );\r\n },\r\n getLastSupplierLocationByVehicleType: function (vehicleTypeId) {\r\n var urlParameters = '';\r\n\r\n urlParameters += '?vehicleTypeId=' + encodeURI(vehicleTypeId);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Last' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var locations = response.data;\r\n\r\n for (var i = 0; i < locations.length; i++) {\r\n if (locations[i].Supplier && locations[i].Manifest !== null && locations[i].Manifest.ConsignmentAddresses.length > 0) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n /*\r\n for (var a = 0; a < locations[i].Supplier.Manifests[0].ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n */\r\n\r\n startDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[locations[i].Manifest.ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[locations[i].Manifest.ConsignmentAddresses.length - 1].Address;\r\n\r\n locations[i].Manifest.StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.StartDeliveryAddress = startDeliveryAddress;\r\n if (locations[i].Manifest.StartDeliveryAddress) locations[i].Manifest.FormattedStartDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(startDeliveryAddress);\r\n\r\n locations[i].Manifest.LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n if (locations[i].Manifest.LastDeliveryAddress) locations[i].Manifest.FormattedLastDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return locations;\r\n }\r\n );\r\n },\r\n getLastSupplierLocationByStatus: function (statusId) {\r\n var urlParameters = '';\r\n\r\n urlParameters += '?statusId=' + encodeURI(statusId);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Last' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var locations = response.data;\r\n\r\n for (var i = 0; i < locations.length; i++) {\r\n if (locations[i].Supplier && locations[i].Manifest !== null && locations[i].Manifest.ConsignmentAddresses.length > 0) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n /*\r\n for (var a = 0; a < locations[i].Supplier.Manifests[0].ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n */\r\n\r\n startDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[locations[i].Manifest.ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[locations[i].Manifest.ConsignmentAddresses.length - 1].Address;\r\n\r\n locations[i].Manifest.StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.StartDeliveryAddress = startDeliveryAddress;\r\n if (locations[i].Manifest.StartDeliveryAddress) locations[i].Manifest.FormattedStartDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(startDeliveryAddress);\r\n\r\n locations[i].Manifest.LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n if (locations[i].Manifest.LastDeliveryAddress) locations[i].Manifest.FormattedLastDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return locations;\r\n }\r\n );\r\n },\r\n getSupplierLocations: function (supplierId, startDate, endDate) {\r\n var urlParameters = '';\r\n\r\n if (supplierId) urlParameters += '?supplierId=' + encodeURI(supplierId)\r\n if (startDate) urlParameters += '&startDate=' + encodeURI(moment(startDate).format('YYYY-MM-DDTHH:mm'))\r\n if (encodeURI) urlParameters += '&endDate=' + encodeURI(moment(endDate).format('YYYY-MM-DDTHH:mm'))\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Track' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n searchSupplierByName: function (searchText) {\r\n var urlParameters = '';\r\n\r\n urlParameters += '?supplierName=' + encodeURI(searchText);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n getEarnings: function(startDate, endDate){\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Earnings', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n saveSupplier: function () {\r\n var self = this;\r\n\r\n if (this.supplier.SupplierPhotos) delete this.supplier.SupplierPhotos;\r\n\r\n if (!this.supplier.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Suppliers', self.supplier, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplier = response.data;\r\n\r\n return self.supplier;\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Suppliers/' + self.supplier.Id, self.supplier, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.supplier;\r\n }\r\n );\r\n }\r\n },\r\n saveSupplierPhoto: function (supplierPhoto) {\r\n if (supplierPhoto.Supplier.Deductions) delete supplierPhoto.Supplier.Deductions;\r\n if (supplierPhoto.Supplier.SupplierLicences) delete supplierPhoto.Supplier.SupplierLicences;\r\n if (supplierPhoto.Supplier.SupplierPhotos) delete supplierPhoto.Supplier.SupplierPhotos;\r\n if (supplierPhoto.Supplier.SupplierUsers) delete supplierPhoto.Supplier.SupplierUsers;\r\n if (supplierPhoto.Supplier.Vehicles) delete supplierPhoto.Supplier.Vehicles;\r\n\r\n if (!supplierPhoto.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/SupplierPhotos', supplierPhoto, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/SupplierPhotos/' + supplierPhoto.Id, supplierPhoto, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return supplierPhoto;\r\n }\r\n );\r\n }\r\n },\r\n deleteSupplierPhoto: function (supplierPhoto) {\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/SupplierPhotos/' + supplierPhoto.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n }\r\n }\r\n}]);","customers.factory('CustomerFactory', ['$http', 'UserFactory', function ($http, UserFactory) {\r\n return {\r\n lastCustomerNameSearched: null,\r\n customerSearchResponse: null,\r\n customerExistsResponse: null,\r\n lastCustomerExistingAddressSearched: null,\r\n customerExistingAddressSearchResponse: null,\r\n customer: null,\r\n customers: null,\r\n createNewCustomer: function () {\r\n this.customer = {\r\n Addresses: [],\r\n Contacts: [],\r\n CustomerUsers: [],\r\n Matrices: [],\r\n InvoiceSettings: [],\r\n OptionalConsignmentFields: []\r\n };\r\n\r\n return this.customer;\r\n },\r\n getCustomer: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customer = response.data;\r\n\r\n return self.customer;\r\n }\r\n );\r\n },\r\n getCustomers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customers = response.data;\r\n\r\n return self.customers;\r\n }\r\n );\r\n },\r\n getCustomersOverCreditLimit: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/Report/Credit', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n searchCustomers: function (name, customerAccountType, monitoringEnabled, customPricing, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name !== null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + encodeURIComponent(name);\r\n }\r\n if (customerAccountType) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerAccountType=' + customerAccountType.Id;\r\n }\r\n if (monitoringEnabled) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'monitoringEnabled=' + monitoringEnabled;\r\n }\r\n if (customPricing) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customPricing=' + customPricing;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customers = response.data;\r\n\r\n return self.customers;\r\n }\r\n );\r\n },\r\n searchCustomerByNameOrPostcode: function (nameOrPostcode) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n urlParameters += '?customerNameOrPostcode=' + encodeURIComponent(nameOrPostcode);\r\n\r\n self.lastCustomerNamePostcodeSearched = nameOrPostcode;\r\n console.log(\"Last Customer Name / Postcode Searched: \" + self.lastCustomerNamePostcodeSearched);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n console.log(\"Last Customer Name Searched: \" + self.lastCustomerNamePostcodeSearched + \", 'name': \" + nameOrPostcode);\r\n\r\n if (self.lastCustomerNamePostcodeSearched === nameOrPostcode) {\r\n self.customerSearchResponse = response.data;\r\n }\r\n\r\n return self.customerSearchResponse;\r\n }\r\n );\r\n },\r\n checkCustomerExists: function (name) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n urlParameters += '?name=' + encodeURIComponent(name);\r\n\r\n self.lastCustomerNameSearched = name;\r\n console.log(\"Last Customer Name Searched: \" + self.lastCustomerNameSearched);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/Exists' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n console.log(\"Last Customer Name Searched: \" + self.lastCustomerNameSearched + \", 'name': \" + name);\r\n\r\n if (self.lastCustomerNameSearched === name) {\r\n self.customerExistsResponse = response.data;\r\n }\r\n\r\n return self.customerExistsResponse;\r\n }\r\n );\r\n },\r\n searchCustomersExistingAddress: function (id, searchText) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n urlParameters += '?text=' + encodeURIComponent(searchText);\r\n\r\n self.lastCustomerExistingAddressSearched = searchText;\r\n console.log(\"Last Customer Existing Address Searched: \" + self.lastCustomerExistingAddressSearched);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/' + id + '/Address/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n console.log(\"Last Customer Name Searched: \" + self.lastCustomerExistingAddressSearched + \", 'searchText': \" + searchText);\r\n\r\n var addresses = response.data;\r\n var address;\r\n\r\n for (var i = 0; i < addresses.length; i++) {\r\n address = '';\r\n\r\n if (addresses[i].CompanyName) address += addresses[i].CompanyName + ', ';\r\n address += addresses[i].AddressLine1 + ', ' + addresses[i].Postcode;\r\n\r\n addresses[i].ShortAddress = address;\r\n }\r\n\r\n if (self.lastCustomerExistingAddressSearched === searchText) {\r\n self.customerExistingAddressSearchResponse = addresses;\r\n }\r\n\r\n return self.customerExistingAddressSearchResponse;\r\n }\r\n );\r\n },\r\n getCustomerMatrix: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Matrices/Customer/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n saveCustomer: function () {\r\n var self = this;\r\n\r\n var c = angular.copy(self.customer);\r\n if (c.Branches) delete c.Branches;\r\n\r\n if (!self.customer.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Customers', c, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customer = response.data;\r\n\r\n return self.customer;\r\n }\r\n );\r\n }\r\n else {\r\n if (!self.customer.HasParent) {\r\n self.customer.ParentId = null;\r\n self.customer.Parent = null;\r\n }\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Customers/' + c.Id, c, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.customer;\r\n }\r\n );\r\n }\r\n },\r\n updateCreditData: function (customer) {\r\n var customerDto = {\r\n 'Id': customer.Id,\r\n 'CreditLimit': customer.CreditLimit,\r\n 'CreditLimitNotes': customer.CreditLimitNotes\r\n };\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Customers/' + customerDto.Id + '/UpdateCreditLimit', customerDto, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.customer;\r\n }\r\n );\r\n },\r\n login: function (username, password) {\r\n var self = this;\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Customers/Login', { 'username': username, 'password': password })\r\n .then(\r\n function (response) {\r\n self.currentActiveUser = response.data;\r\n\r\n $rootScope.$broadcast('user:loggedIn', self.currentActiveUser);\r\n\r\n return self.currentActiveUser;\r\n }\r\n );\r\n }\r\n }\r\n}]);","shared.factory('AtlasUserFactory', ['$rootScope', '$http', '$localStorage', 'UserFactory', function ($rootScope, $http, $localStorage, UserFactory) {\r\n return {\r\n changePassword: function (user) {\r\n var self = this;\r\n var u = angular.copy(user);\r\n\r\n delete u.AtlasUserRole;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/AtlasUsers/ChangePassword/' + u.Id, user, { headers: { 'Token': UserFactory.token } });\r\n },\r\n isUserAdmin: function () {\r\n return (UserFactory.currentActiveUser) ? (UserFactory.currentActiveUser.AtlasUserRole && UserFactory.currentActiveUser.AtlasUserRole.Id.toUpperCase() === '26752E67-6FB2-47C5-88B2-221BBDB38262') : false;\r\n },\r\n isUserAccounts: function () {\r\n return (UserFactory.currentActiveUser) ? (UserFactory.currentActiveUser.AtlasUserRole && UserFactory.currentActiveUser.AtlasUserRole.Id.toUpperCase() === '98653A85-F0BF-4B46-B49F-77516A0AA950') : false;\r\n },\r\n isUserManager: function () {\r\n return (UserFactory.currentActiveUser) ? (UserFactory.currentActiveUser.AtlasUserRole && UserFactory.currentActiveUser.AtlasUserRole.Id.toUpperCase() === '1AB95751-3A03-46ED-BEF0-5203E37FC660') : false;\r\n }\r\n }\r\n}]);","shared.factory('CountryFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n countries: null,\r\n getCountries: function () {\r\n var self = this;\r\n\r\n if (!self.countries) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Countries', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.countries = response.data;\r\n\r\n return self.countries;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.countries);\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n }\r\n}]);","settings.factory('SettingsFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n globalSettings: null,\r\n supplierTypes: null,\r\n supplierBillingTypes: null,\r\n licenceCategories: null,\r\n ledgerNumbers: null,\r\n vatCodes: null,\r\n matrices: null,\r\n costingMatrices: null,\r\n additionalCharges: null,\r\n vehicleTypes: null,\r\n atlasUsers: null,\r\n accountCodes: null,\r\n whitelistedIpAddresses: null,\r\n userIpLogs: null,\r\n areaAdditionalChargeRules: null,\r\n brandingThemes: null,\r\n globalAddresses: null,\r\n\r\n getGlobalSettings: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Settings', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.globalSettings = response.data[0];\r\n\r\n return self.globalSettings;\r\n }\r\n );\r\n },\r\n getSupplierTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierTypes = response.data;\r\n\r\n return self.supplierTypes;\r\n }\r\n );\r\n },\r\n getSupplierBillingTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierBillingTypes = response.data;\r\n\r\n return self.supplierBillingTypes;\r\n }\r\n );\r\n },\r\n searchSupplierBillingTypes: function (name, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name != null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + username;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierBillingTypes = response.data;\r\n\r\n return self.supplierBillingTypes;\r\n }\r\n );\r\n },\r\n getLicenceCategories: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LicenceCategories', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.licenceCategories = response.data;\r\n\r\n return self.licenceCategories;\r\n }\r\n );\r\n },\r\n searchLicenceCategories: function (name, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name != null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LicenceCategories' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.licenceCategories = response.data;\r\n\r\n return self.licenceCategories;\r\n }\r\n );\r\n },\r\n getLedgerNumbers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LedgerNumbers', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.ledgerNumbers = response.data;\r\n\r\n return self.ledgerNumbers;\r\n }\r\n );\r\n },\r\n getVatCodes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VATCodes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vatCodes = response.data;\r\n\r\n return self.vatCodes;\r\n }\r\n );\r\n },\r\n getMatrices: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Matrices', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.matrices = response.data;\r\n\r\n return self.matrices;\r\n }\r\n );\r\n },\r\n getCostingMatrices: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Matrices/Costing', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.costingMatrices = response.data;\r\n\r\n return self.costingMatrices;\r\n }\r\n );\r\n },\r\n getAdditionalCharges: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AdditionalCharges', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.additionalCharges = response.data;\r\n\r\n return self.additionalCharges;\r\n }\r\n );\r\n },\r\n searchAdditionalCharges: function (chargeFor, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (chargeFor != null && chargeFor.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'charge-for=' + chargeFor;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AdditionalCharges' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.additionalCharges = response.data;\r\n\r\n return self.additionalCharges;\r\n }\r\n );\r\n },\r\n getVehicleTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VehicleTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vehicleTypes = response.data;\r\n\r\n return self.vehicleTypes;\r\n }\r\n );\r\n },\r\n searchVehicleTypes: function (name, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name != null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + username;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VehicleTypes' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vehicleTypes = response.data;\r\n\r\n return self.vehicleTypes;\r\n }\r\n );\r\n },\r\n getAtlasUsers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AtlasUsers', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.atlasUsers = response.data;\r\n\r\n return self.atlasUsers;\r\n }\r\n );\r\n },\r\n searchAtlasUsers: function (username, email, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (username != null && username.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'username=' + username;\r\n }\r\n if (email != null && email.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'email=' + email;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AtlasUsers' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.atlasUsers = response.data;\r\n\r\n return self.atlasUsers;\r\n }\r\n );\r\n },\r\n getWhitelistedIpAddresses: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/WhitelistedIpAddresses', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.whitelistedIpAddresses = response.data;\r\n\r\n return self.whitelistedIpAddresses;\r\n }\r\n );\r\n },\r\n getUserIpLogs: function (startDate, endDate) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/UserIpLogs/' + startDate.format('YYYY-MM-DD') + '/' + endDate.format('YYYY-MM-DD'), { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.userIpLogs = response.data;\r\n\r\n return self.userIpLogs;\r\n }\r\n );\r\n },\r\n getAreaAdditionalChargeRules: function () {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.areaAdditionalChargeRules = response.data;\r\n\r\n return self.areaAdditionalChargeRules;\r\n }\r\n );\r\n },\r\n searchAreaAdditionalChargeRules: function (name, postcodes, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name != null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n if (postcodes != null && postcodes.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'postcodes=' + postcodes;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.areaAdditionalChargeRules = response.data;\r\n\r\n return self.areaAdditionalChargeRules;\r\n }\r\n );\r\n },\r\n getGlobalAddresses: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/GlobalAddresses', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.globalAddresses = response.data;\r\n\r\n return self.globalAddresses;\r\n }\r\n );\r\n },\r\n searchGlobalAddresses: function (isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/GlobalAddresses' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.globalAddresses = response.data;\r\n\r\n return self.globalAddresses;\r\n }\r\n );\r\n },\r\n\r\n getAllSupplierTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierTypes/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierTypes = response.data;\r\n\r\n return self.supplierTypes;\r\n }\r\n );\r\n },\r\n getAllSupplierBillingTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierBillingTypes = response.data;\r\n\r\n return self.supplierBillingTypes;\r\n }\r\n );\r\n },\r\n getAllLicenceCategories: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LicenceCategories/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.licenceCategories = response.data;\r\n\r\n return self.licenceCategories;\r\n }\r\n );\r\n },\r\n getAllLedgerNumbers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LedgerNumbers/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.ledgerNumbers = response.data;\r\n\r\n return self.ledgerNumbers;\r\n }\r\n );\r\n },\r\n getAllVatCodes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VATCodes/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vatCodes = response.data;\r\n\r\n return self.vatCodes;\r\n }\r\n );\r\n },\r\n getAllAdditionalCharges: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AdditionalCharges/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.additionalCharges = response.data;\r\n\r\n return self.additionalCharges;\r\n }\r\n );\r\n },\r\n getAllVehicleTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VehicleTypes/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vehicleTypes = response.data;\r\n\r\n return self.vehicleTypes;\r\n }\r\n );\r\n\r\n },\r\n getAllAreaAdditionalChargeRules: function () {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.areaAdditionalChargeRules = response.data;\r\n\r\n return self.areaAdditionalChargeRules;\r\n }\r\n );\r\n },\r\n\r\n saveGlobalSettings: function () {\r\n var self = this;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Settings/' + self.globalSettings.Id, self.globalSettings, { headers: { 'Token': UserFactory.token } });\r\n },\r\n saveSupplierTypes: function (supplierType) {\r\n var self = this;\r\n\r\n if (!supplierType.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/SupplierTypes', supplierType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierTypes.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/SupplierTypes/' + supplierType.Id, supplierType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.supplierTypes.length; i++) {\r\n if (self.supplierTypes[i].Id === supplierType.Id) {\r\n self.supplierTypes[i] = supplierType;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveSupplierBillingTypes: function (supplierBillingType) {\r\n var self = this;\r\n\r\n if (!supplierBillingType.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes', supplierBillingType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierBillingTypes.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes/' + supplierBillingType.Id, supplierBillingType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.supplierBillingTypes.length; i++) {\r\n if (self.supplierBillingTypes[i].Id === supplierBillingType.Id) {\r\n self.supplierBillingTypes[i] = supplierBillingType;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveLicenceCategories: function (licenceCategory) {\r\n var self = this;\r\n\r\n if (!licenceCategory.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/LicenceCategories', licenceCategory, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.licenceCategories.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/LicenceCategories/' + licenceCategory.Id, licenceCategory, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.licenceCategories.length; i++) {\r\n if (self.licenceCategories[i].Id === licenceCategory.Id) {\r\n self.licenceCategories[i] = licenceCategory;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveLedgerNumbers: function (ledgerNumber) {\r\n var self = this;\r\n\r\n if (!ledgerNumber.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/LedgerNumbers', ledgerNumber, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.ledgerNumbers.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/LedgerNumbers/' + ledgerNumber.Id, ledgerNumber, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.ledgerNumbers.length; i++) {\r\n if (self.ledgerNumbers[i].Id === ledgerNumber.Id) {\r\n self.ledgerNumbers[i] = ledgerNumber;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveVatCodes: function (vatCode) {\r\n var self = this;\r\n\r\n if (!vatCode.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/VATCodes', vatCode, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vatCodes.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/VATCodes/' + vatCode.Id, vatCode, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.vatCodes.length; i++) {\r\n if (self.vatCodes[i].Id === vatCode.Id) {\r\n self.vatCodes[i] = vatCode;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveMatrices: function (priceMatrix) {\r\n var self = this;\r\n\r\n if (!priceMatrix.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Matrices', priceMatrix, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.matrices.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Matrices/' + priceMatrix.Id, priceMatrix, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.matrices.length; i++) {\r\n if (self.matrices[i].Id === priceMatrix.Id) {\r\n self.matrices[i] = priceMatrix;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveAdditionalCharges: function (additionalCharge) {\r\n var self = this;\r\n\r\n if (!additionalCharge.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/AdditionalCharges', additionalCharge, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.additionalCharges.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/AdditionalCharges/' + additionalCharge.Id, additionalCharge, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.additionalCharges.length; i++) {\r\n if (self.additionalCharges[i].Id === additionalCharge.Id) {\r\n self.additionalCharges[i] = additionalCharge;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveVehicleTypes: function (vehicleType) {\r\n var self = this;\r\n\r\n if (!vehicleType.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/VehicleTypes', vehicleType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vehicleTypes.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/VehicleTypes/' + vehicleType.Id, vehicleType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.vehicleTypes.length; i++) {\r\n if (self.vehicleTypes[i].Id === vehicleType.Id) {\r\n self.vehicleTypes[i] = vehicleType;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveAtlasUsers: function (atlasUser) {\r\n var self = this;\r\n\r\n if (!atlasUser.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/AtlasUsers', atlasUser, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.atlasUsers.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/AtlasUsers/' + atlasUser.Id, atlasUser, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.atlasUsers.length; i++) {\r\n if (self.atlasUsers[i].Id === atlasUser.Id) {\r\n self.atlasUsers[i] = atlasUser;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveWhitelistedIpAddress: function (whitelistedIpAddress) {\r\n var self = this;\r\n\r\n if (!whitelistedIpAddress.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/WhitelistedIpAddresses', whitelistedIpAddress, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.whitelistedIpAddresses.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/WhitelistedIpAddresses/' + whitelistedIpAddress.Id, whitelistedIpAddress, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.whitelistedIpAddresses.length; i++) {\r\n if (self.whitelistedIpAddresses[i].Id === whitelistedIpAddress.Id) {\r\n self.whitelistedIpAddresses[i] = whitelistedIpAddress;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveAreaAdditionalChargeRules: function (areaAdditionalChargeRule) {\r\n var self = this;\r\n\r\n if (!areaAdditionalChargeRule.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules', areaAdditionalChargeRule, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.areaAdditionalChargeRules.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules/' + areaAdditionalChargeRule.Id, areaAdditionalChargeRule, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.areaAdditionalChargeRules.length; i++) {\r\n if (self.areaAdditionalChargeRules[i].Id === areaAdditionalChargeRule.Id) {\r\n self.areaAdditionalChargeRules[i] = areaAdditionalChargeRule;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveGlobalAddress: function (globalAddress) {\r\n var self = this;\r\n\r\n if (!globalAddress.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/GlobalAddresses', globalAddress, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.globalAddresses.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/GlobalAddresses/' + globalAddress.Id, globalAddress, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.globalAddresses.length; i++) {\r\n if (self.globalAddresses[i].Id === globalAddress.Id) {\r\n self.globalAddresses[i] = globalAddress;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n\r\n searchAccountCodes: function (name) {\r\n var self = this;\r\n\r\n var urlParameters = '';\r\n\r\n if (name) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AccountCodes' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.accountCodes = [];\r\n\r\n for (var i = 0; i < response.data.length; i++) {\r\n self.accountCodes.push({\r\n Name: response.data[i].Code + ' - ' + response.data[i].Name,\r\n Item: response.data[i]\r\n });\r\n }\r\n\r\n return self.accountCodes;\r\n }\r\n );\r\n },\r\n\r\n deleteMatrix: function (matrix) {\r\n var self = this;\r\n\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/Matrices/' + matrix.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n deleteWhitelistedIpAddress: function (whitelistedIpAddress) {\r\n var self = this;\r\n\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/WhitelistedIpAddresses/' + whitelistedIpAddress.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n getBrandingThemes: function (name) {\r\n var self = this;\r\n\r\n var urlParameters = '';\r\n\r\n if (name) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/BrandingThemes' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.brandingThemes = [];\r\n\r\n for (var i = 0; i < response.data.length; i++) {\r\n self.brandingThemes.push({\r\n Name: response.data[i].Name,\r\n Item: response.data[i]\r\n });\r\n }\r\n\r\n return self.brandingThemes;\r\n }\r\n );\r\n },\r\n }\r\n}]);","shared.factory('PhotosFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n upload: function (file) {\r\n var self = this;\r\n var formData = new FormData();\r\n\r\n formData.append('file', file, file.name);\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Photos', formData, { headers: { 'Token': UserFactory.token, 'Content-Type': undefined }, transformRequest: angular.identity })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n }\r\n }\r\n}]);","shared.factory('CommonFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n customerAccountTypes: null,\r\n consignmentTypes: null,\r\n consignmentAddressTypes: null,\r\n statusColours: null,\r\n matrixTypes: null,\r\n matrixPriceIncrements: null,\r\n atlasUserRoles: null,\r\n invoiceSetupOptions: null,\r\n invoiceDeliveries: null,\r\n invoiceDeliveryOptions: null,\r\n paymentTermStartOptions: null,\r\n consignmentFrequencies: null,\r\n weekdays: null,\r\n xeroOrganiations: null,\r\n consignmentControlScreenColumns: null,\r\n\r\n getCustomerAccountTypes: function () {\r\n var self = this;\r\n\r\n if (!self.customerAccountTypes) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/CustomerAccountTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customerAccountTypes = response.data;\r\n\r\n return self.customerAccountTypes;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.customerAccountTypes);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getConsignmentTypes: function () {\r\n var self = this;\r\n\r\n if (!self.consignmentTypes) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignmentTypes = response.data;\r\n\r\n return self.consignmentTypes;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.consignmentTypes);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getConsignmentAddressTypes: function () {\r\n var self = this;\r\n\r\n if (!self.consignmentAddressTypes) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentAddressTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignmentAddressTypes = response.data;\r\n\r\n return self.consignmentAddressTypes;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.consignmentAddressTypes);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getStatusColours: function () {\r\n var self = this;\r\n\r\n if (!self.statusColours) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/StatusColours', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.statusColours = response.data;\r\n\r\n return self.statusColours;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.statusColours);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getMatrixTypes: function () {\r\n var self = this;\r\n\r\n if (!self.matrixTypes) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/MatrixTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.matrixTypes = response.data;\r\n\r\n return self.matrixTypes;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.matrixTypes);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getMatrixPriceIncrements: function () {\r\n var self = this;\r\n\r\n if (!self.matrixPriceIncrements) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/MatrixPriceIncrements', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.matrixPriceIncrements = response.data;\r\n\r\n return self.matrixPriceIncrements;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.matrixPriceIncrements);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getAtlasUserRoles: function () {\r\n var self = this;\r\n\r\n if (!self.atlasUserRoles) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AtlasUserRoles', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.atlasUserRoles = response.data;\r\n\r\n return self.atlasUserRoles;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.atlasUserRoles);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getInvoiceSetupOptions: function () {\r\n var self = this;\r\n\r\n if (!self.invoiceSetupOptions) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/InvoiceSetupOptions', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.invoiceSetupOptions = response.data;\r\n\r\n return self.invoiceSetupOptions;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.invoiceSetupOptions);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getInvoiceDeliveries: function () {\r\n var self = this;\r\n\r\n if (!self.invoiceDeliveries) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/InvoiceDeliveries', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.invoiceDeliveries = response.data;\r\n\r\n return self.invoiceDeliveries;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.invoiceDeliveries);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getInvoiceDeliveryOptions: function () {\r\n var self = this;\r\n\r\n if (!self.invoiceDeliveryOptions) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/InvoiceDeliveryOptions', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.invoiceDeliveryOptions = response.data;\r\n\r\n return self.invoiceDeliveryOptions;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.invoiceDeliveryOptions);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getPaymentTermStartOptions: function () {\r\n var self = this;\r\n\r\n if (!self.paymentTermStartOptions) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/PaymentTermStartOptions', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.paymentTermStartOptions = response.data;\r\n\r\n return self.paymentTermStartOptions;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.paymentTermStartOptions);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getConsignmentFrequencies: function () {\r\n var self = this;\r\n\r\n if (!self.consignmentFrequencies) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentFrequencies', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignmentFrequencies = response.data;\r\n\r\n return self.consignmentFrequencies;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.consignmentFrequencies);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getWeekDays: function () {\r\n var self = this;\r\n\r\n if (!self.weekdays) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/WeekDays', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.weekdays = response.data;\r\n\r\n return self.weekdays;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.weekdays);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getInvoicingEvent: function () {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Events/Invoicing', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n getXeroOrganisations: function () {\r\n var self = this;\r\n\r\n if (!self.xeroOrganiations) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/XeroOrganisations', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.xeroOrganiations = response.data;\r\n\r\n return self.xeroOrganiations;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.xeroOrganiations);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getControlScreenConsignmentColumns: function () {\r\n var self = this;\r\n\r\n if (!self.consignmentControlScreenColumns) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentControlScreenColumns', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignmentControlScreenColumns = response.data;\r\n\r\n return self.consignmentControlScreenColumns;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.consignmentControlScreenColumns);\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n }\r\n}]);","shared.factory('UserFactory', ['$rootScope', '$http', '$localStorage', '$q', function ($rootScope, $http, $localStorage, $q) {\r\n return {\r\n currentActiveUser: $localStorage.currentActiveUser,\r\n token: $localStorage.token,\r\n lastUserEmailSearche: null,\r\n userExistsResponse: null,\r\n login: function (email, password, deviceId, authenticationCode) {\r\n var self = this;\r\n var deferred = $q.defer();\r\n\r\n $http.post(__WEB_SERVICE_BASE_URL + '/Users/Authenticate', '', { headers: { 'Authorization': 'Basic ' + this.getAuth(email, password, deviceId, authenticationCode) } })\r\n .then(\r\n function (response) {\r\n self.token = response.headers('Token');\r\n\r\n $localStorage.token = self.token;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Users/Current', { headers: { 'Token': self.token } })\r\n .then(\r\n function (response) {\r\n self.currentActiveUser = response.data;\r\n\r\n $localStorage.currentActiveUser = self.currentActiveUser;\r\n\r\n deferred.resolve(self.currentActiveUser);\r\n\r\n $rootScope.$broadcast('user:loggedIn', self.currentActiveUser);\r\n },\r\n function (error) {\r\n console.log(error);\r\n\r\n deferred.reject(error);\r\n }\r\n );\r\n },\r\n function (error, status, headers) {\r\n console.log(error);\r\n\r\n deferred.reject(error);\r\n }\r\n );\r\n\r\n return deferred.promise;\r\n },\r\n logout: function () {\r\n var self = this;\r\n var deferred = $q.defer();\r\n\r\n if (self.token) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Users/SignOut', '', { headers: { 'Token': self.token } })\r\n .then(\r\n function (response) {\r\n $localStorage.token = null;\r\n $localStorage.currentActiveUser = null;\r\n\r\n self.token = null;\r\n self.currentActiveUser = null;\r\n\r\n $rootScope.$broadcast('user:loggedOut');\r\n\r\n deferred.resolve();\r\n },\r\n function () {\r\n $localStorage.token = null;\r\n $localStorage.currentActiveUser = null;\r\n\r\n self.token = null;\r\n self.currentActiveUser = null;\r\n\r\n $rootScope.$broadcast('user:loggedOut');\r\n\r\n deferred.resolve();\r\n }\r\n );\r\n }\r\n else {\r\n $localStorage.token = null;\r\n $localStorage.currentActiveUser = null;\r\n\r\n self.token = null;\r\n self.currentActiveUser = null;\r\n\r\n $rootScope.$broadcast('user:loggedOut');\r\n\r\n deferred.resolve();\r\n }\r\n\r\n return deferred.promise;\r\n },\r\n getAuth: function (username, password, deviceId, authenticationCode) {\r\n if (authenticationCode) {\r\n return btoa(username + ':' + password + ':' + deviceId + ':' + authenticationCode);\r\n }\r\n else {\r\n return btoa(username + ':' + password + ':' + deviceId);\r\n\t\t\t}\r\n },\r\n changePassword: function (user) {\r\n var self = this;\r\n var u = angular.copy(user);\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Users/ChangePassword/' + u.Id, user, { headers: { 'Token': self.token } });\r\n },\r\n checkUserExists: function (email) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n urlParameters += '?email=' + encodeURIComponent(email);\r\n\r\n self.lastUserEmailSearched = email;\r\n console.log(\"Last User Email Searched: \" + self.lastUserEmailSearched);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Users/Exists' + urlParameters, { headers: { 'Token': self.token } })\r\n .then(\r\n function (response) {\r\n console.log(\"Last User Email Searched: \" + self.lastUserEmailSearched + \", 'email': \" + email);\r\n\r\n if (self.lastUserEmailSearched === email) {\r\n self.userExistsResponse = response.data;\r\n }\r\n\r\n return self.userExistsResponse;\r\n }\r\n );\r\n },\r\n }\r\n}]);","shared.factory('AuthorizationHttpInterceptorFactory', ['$q', '$rootScope', '$timeout', '$localStorage', 'FoundationApi', 'AtlasModalFactory', function ($q, $rootScope, $timeout, $localStorage, FoundationApi, AtlasModalFactory) {\r\n var timerNotification = null;\r\n var timerSignOut = null;\r\n\r\n var service = {\r\n request: request,\r\n requestError: requestError,\r\n response: response,\r\n responseError: responseError\r\n };\r\n\r\n return service;\r\n\r\n function request(config) {\r\n //if (config.url.indexOf(__WEB_SERVICE_BASE_URL) >= 0) {\r\n // $localStorage.requestDateTime = moment();\r\n\r\n // if (timerNotification) $timeout.cancel(timerNotification);\r\n\r\n // startNotificationTimer(__TIMEOUT_NOTIFICATION);\r\n //}\r\n\r\n return config || $q.when(config);\r\n }\r\n\r\n function requestError(rejection) {\r\n return $q.reject(rejection);\r\n }\r\n\r\n function response(response) {\r\n if (response.config.url.indexOf(__WEB_SERVICE_BASE_URL) >= 0 && response.config.url.indexOf(\"Users/SignOut\") < 0) {\r\n $localStorage.requestDateTime = moment();\r\n\r\n //console.log('Last request: ' + moment($localStorage.requestDateTime).format('DD/MM/YYYY HH:mm:ss'));\r\n\r\n startTimers(__TIMEOUT_NOTIFICATION, __TIMEOUT_SIGNOUT);\r\n }\r\n\r\n return response || $q.when(response);\r\n }\r\n\r\n function responseError(rejection) {\r\n if (rejection.status === 401 && rejection.config.url.indexOf(\"Users/Authenticate\") < 0 && rejection.config.url.indexOf(\"Users/SignOut\") < 0) {\r\n if (timerNotification) $timeout.cancel(timerNotification);\r\n AtlasModalFactory.open('divSignedOut');\r\n }\r\n\r\n return $q.reject(rejection);\r\n }\r\n\r\n function startTimers(notificationTimeout, signoutTimeout) {\r\n $timeout.cancel(timerNotification);\r\n $timeout.cancel(timerSignOut);\r\n\r\n //console.log('Notification of signout set for ' + moment().add(notificationTimeout, 'ms').format('DD/MM/YYYY HH:mm:ss'));\r\n //console.log('Signout set for ' + moment().add(signoutTimeout, 'ms').format('DD/MM/YYYY HH:mm:ss'));\r\n\r\n timerNotification = $timeout(function () {\r\n $timeout.cancel(timerNotification);\r\n\r\n if ($localStorage.requestDateTime && moment($localStorage.requestDateTime).add(__TIMEOUT_NOTIFICATION, 'ms') > moment()) {\r\n notificationTimeout = moment.duration(moment($localStorage.requestDateTime).add(__TIMEOUT_NOTIFICATION, 'ms').diff(moment()));\r\n signoutTimeout = moment.duration(moment($localStorage.requestDateTime).add(__TIMEOUT_SIGNOUT, 'ms').diff(moment()));\r\n\r\n startTimers(notificationTimeout, signoutTimeout);\r\n\r\n return false;\r\n }\r\n\r\n FoundationApi.publish('user-signout-notifications', { title: 'Warning', content: 'You will be logged out in 2 minutes', color: 'warning', autoclose: 4000 });\r\n }, notificationTimeout);\r\n\r\n timerSignOut = $timeout(function () {\r\n $timeout.cancel(timerNotification);\r\n $timeout.cancel(timerSignOut);\r\n\r\n AtlasModalFactory.open('divSignedOut');\r\n }, signoutTimeout);\r\n }\r\n}]);","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('clickinon.factories.httpInterceptor', [])\r\n .factory('httpInterceptorProgressFactory', httpInterceptorProgressFactory);\r\n\r\n httpInterceptorProgressFactory.$inject = ['$q', '$rootScope'];\r\n\r\n function httpInterceptorProgressFactory($q, $rootScope) {\r\n var httpRequests = 0;\r\n\r\n var service = {\r\n exceptions: [],\r\n config: config,\r\n request: request,\r\n requestError: requestError,\r\n response: response,\r\n responseError: responseError\r\n };\r\n\r\n return service;\r\n\r\n function config(exception) {\r\n var found = false;\r\n\r\n for (var i = 0; i < this.exceptions.length; i++) {\r\n if (this.exceptions[i] === exception) found = true;\r\n }\r\n\r\n if (!found) this.exceptions.push(exception);\r\n }\r\n\r\n function request(config) {\r\n var self = service;\r\n var ignoreProgress = false;\r\n\r\n if (angular.isArray(self.exceptions)) {\r\n for (var i = 0; i < self.exceptions.length; i++) {\r\n if (config.url.indexOf(self.exceptions[i]) >= 0) {\r\n ignoreProgress = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (++httpRequests === 1 && !ignoreProgress) $rootScope.$broadcast('HttpRequests:Progress');\r\n return config || $q.when(config);\r\n }\r\n\r\n function requestError(rejection) {\r\n if (--httpRequests === 0) $rootScope.$broadcast('HttpRequests:Finish');\r\n return $q.reject(rejection);\r\n }\r\n\r\n function response(response) {\r\n if (--httpRequests === 0) $rootScope.$broadcast('HttpRequests:Finish');\r\n return response || $q.when(response);\r\n }\r\n\r\n function responseError(rejection) {\r\n if (--httpRequests === 0) $rootScope.$broadcast('HttpRequests:Finish');\r\n return $q.reject(rejection);\r\n }\r\n }\r\n})();","shared.factory('PostcodeLookupFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n search: function (text) {\r\n //var self = this;\r\n //var params = {\r\n // all: true\r\n //}\r\n\r\n //return $http.post('https://api.getAddress.io/autocomplete/' + text + '?api-key=' + __GETADDRESS_KEY, params);\r\n\r\n return $http.get('https://api.ideal-postcodes.co.uk/v1/autocomplete/addresses?query=' + text + '&api_key=' + __IDEAL_POSTCODES_KEY);\r\n },\r\n\r\n get: function (id) {\r\n //return $http.get('https://api.getAddress.io/get/' + id + '?api-key=' + __GETADDRESS_KEY);\r\n\r\n return $http.get('https://api.ideal-postcodes.co.uk/v1/autocomplete/addresses/' + id + '/gbr?api_key=' + __IDEAL_POSTCODES_KEY);\r\n }\r\n }\r\n}]);","manifests.filter('scheduledDateTimeFilter', function () {\r\n return function (consignmentAddresses, datetime) {\r\n if (!consignmentAddresses || !datetime) return consignmentAddresses;\r\n\r\n var filteredConsignmentAddresses = [];\r\n\r\n angular.forEach(consignmentAddresses, function (consignmentAddress) {\r\n datetime = moment(datetime);\r\n scheduledDateTime = moment(consignmentAddress.ScheduledStartDateAndTime);\r\n \r\n if (moment(consignmentAddress.ScheduledStartDateAndTime).isSame(moment(datetime), 'day')) {\r\n filteredConsignmentAddresses.push(consignmentAddress);\r\n }\r\n });\r\n\r\n return filteredConsignmentAddresses;\r\n }\r\n});","login.controller('LoginController', ['$scope', '$state', '$localStorage', 'UserFactory', 'CustomerFactory', function ($scope, $state, $localStorage, UserFactory, CustomerFactory) {\r\n if (UserFactory.currentActiveUser) {\r\n $state.go('control_screen');\r\n }\r\n\r\n $scope.uuid = ($localStorage.uuid) ? $localStorage.uuid : uuidv4();\r\n $scope.email = \"\";\r\n $scope.password = \"\";\r\n $scope.errorMessage = null;\r\n $scope.loggingIn = false;\r\n $scope.showAuthenticationCode = false;\r\n\r\n if (!$localStorage.uuid) $localStorage.uuid = $scope.uuid;\r\n\r\n $scope.login = function () {\r\n $scope.loggingIn = true;\r\n $scope.errorMessage = null;\r\n\r\n UserFactory.login($scope.email, $scope.password, $scope.uuid, $scope.authenticationCode)\r\n .then(\r\n function (user) {\r\n $scope.loggingIn = false;\r\n\r\n //if (user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n // $state.go('control_screen');\r\n //}\r\n //else {\r\n // $state.go('consignment');\r\n //}\r\n\r\n $state.go('control_screen');\r\n },\r\n function (error) {\r\n $scope.loggingIn = false;\r\n\r\n if (error.status === 401) {\r\n if (error.headers('FailureReason') && error.headers('FailureReason').length !== 0) {\r\n if (error.headers('FailureCode') && error.headers('FailureCode').length !== 0) {\r\n switch (parseInt(error.headers('FailureCode'), 10)) {\r\n case 614:\r\n $scope.showAuthenticationCode = true;\r\n break;\r\n case 615:\r\n $scope.showAuthenticationCode = true;\r\n $scope.errorMessage = error.headers('FailureReason');\r\n break;\r\n case 616:\r\n $scope.showAuthenticationCode = true;\r\n $scope.errorMessage = error.headers('FailureReason');\r\n break;\r\n default:\r\n $scope.errorMessage = error.headers('FailureReason');\r\n break;\r\n\t\t\t\t\t\t\t\t}\r\n }\r\n else {\r\n $scope.errorMessage = error.headers('FailureReason');\r\n }\r\n }\r\n else {\r\n $scope.errorMessage = 'Incorrect Email Address or Password. Please try again.';\r\n }\r\n }\r\n else if (error.status === 404) {\r\n $scope.errorMessage = 'Unable to log in. Please try again.';\r\n }\r\n else if (error.status === 423) {\r\n $scope.errorMessage = 'Unfortunately, due to too many incorrect access attempts, your account has been locked.';\r\n }\r\n else {\r\n console.log(error);\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.submitAuthenticationCode = function () {\r\n\r\n\t}\r\n}]);","menu.controller('MenuController', ['$scope', '$state', 'FoundationApi', 'UserFactory', 'AtlasUserFactory', function ($scope, $state, FoundationApi, UserFactory, AtlasUserFactory) {\r\n $scope.tabs = [\r\n { 'name': 'Control Screen', 'url': 'control_screen' }\r\n ];\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n $scope.menuVisible = false;\r\n\r\n $scope.toggleMenu = function (){\r\n if (!$scope.user) {\r\n $scope.menuVisible = false;\r\n }\r\n else {\r\n $scope.menuVisible = !$scope.menuVisible;\r\n }\r\n }\r\n\r\n $scope.goTo = function (state, params) {\r\n $scope.menuVisible = false;\r\n\r\n $state.go(state, params);\r\n };\r\n\r\n $scope.$on('user:loggedIn', function (event, data) {\r\n $scope.user = data;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n });\r\n\r\n $scope.$on('user:loggedOut', function (event, data) {\r\n $scope.user = null;\r\n\r\n $state.go('login');\r\n });\r\n\r\n $scope.logout = function () {\r\n $scope.menuVisible = false;\r\n\r\n UserFactory.logout();\r\n }\r\n}]);","control_screen.controller('ControlScreenController', ['$scope', '$state', 'UserFactory', function ($scope, $state, UserFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.user = UserFactory.currentActiveUser;\r\n\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $scope.tabs = [\r\n {\r\n 'name': 'Manifests',\r\n 'title': 'Manifests'\r\n },\r\n {\r\n 'name': 'Consignments',\r\n 'title': 'Consignments'\r\n }\r\n ];\r\n $scope.tabs.activeTab = 'Manifests';\r\n }\r\n else {\r\n $scope.tabs = [\r\n {\r\n 'name': 'Consignments',\r\n 'title': 'Consignments'\r\n }\r\n ];\r\n $scope.tabs.activeTab = 'Consignments';\r\n }\r\n \r\n}]);","control_screen.controller('ControlScreenConsignmentController', ['$rootScope', '$scope', '$http', '$state', '$localStorage', 'FileSaver', 'CustomerFactory', 'ConsignmentFactory', 'ManifestFactory', 'SettingsFactory', 'CommonFactory', 'UserFactory', 'AtlasModalFactory', function ($rootScope, $scope, $http, $state, $localStorage, FileSaver, CustomerFactory, ConsignmentFactory, ManifestFactory, SettingsFactory, CommonFactory, UserFactory, AtlasModalFactory) {\r\n\r\n $rootScope.$emit('title-updated', 'Consignments Screen');\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.consignments = null;\r\n $scope.sortBy = 'StartDateAndTime';\r\n $scope.sortReverse = false;\r\n $scope.showFilters = ($scope.user.Role === $scope.roles.Customer) ? true : false;\r\n //$scope.searchStartDate = moment('2015-08-01');\r\n //$scope.searchEndDate = moment().add(1, 'M');\r\n $scope.search = {\r\n StartDate: moment(),\r\n EndDate: moment(),\r\n DateRange: 'Today',\r\n VehicleType: null,\r\n ConsignmentNumber: '',\r\n ManifestNumber: '',\r\n CollectionAddress: '',\r\n DeliveryAddress: '',\r\n BookingContact: '',\r\n SupplierName: '',\r\n IsFrequent: false,\r\n HaveNoManifest: false,\r\n IsDeleted: false\r\n };\r\n //$scope.searchStartDate = moment();\r\n //$scope.searchEndDate = moment().add(1, 'd');\r\n //$scope.searchDateRange = 'Today';\r\n ////$scope.searchCustomerName = '';\r\n //$scope.searchVehicleType = null;\r\n ////$scope.searchPONumber = '';\r\n ////$scope.searchConsignmentNumber = '';\r\n ////$scope.searchManifestNumber = '';\r\n //$scope.searchCollectionAddress = '';\r\n //$scope.searchDeliveryAddress = '';\r\n //$scope.searchIsQuote = false;\r\n //$scope.searchIsFrequent = false;\r\n //$scope.searchIsDeleted = false;\r\n $scope.vehicleTypes = null;\r\n $scope.consignment = null;\r\n $scope.manifest = null;\r\n $scope.columns = [\r\n { 'index': 1, 'name': 'Consignment Number' },\r\n { 'index': 2, 'name': 'Manifest Number(s)' },\r\n { 'index': 3, 'name': 'Type' },\r\n { 'index': 4, 'name': 'Customer' },\r\n { 'index': 5, 'name': 'PO Number' },\r\n { 'index': 6, 'name': 'Booked Date' },\r\n { 'index': 7, 'name': 'Start Date' },\r\n { 'index': 8, 'name': 'Start Address' },\r\n { 'index': 9, 'name': 'Finish Date' },\r\n { 'index': 10, 'name': 'Last Address' },\r\n { 'index': 11, 'name': 'Number Of Addresses' },\r\n { 'index': 12, 'name': 'Vehicle' },\r\n { 'index': 13, 'name': 'Load Details' },\r\n { 'index': 14, 'name': 'Supplier' },\r\n { 'index': 15, 'name': 'Office Notes' },\r\n { 'index': 16, 'name': 'Supplier Notes' },\r\n { 'index': 17, 'name': 'Invoice Notes' },\r\n { 'index': 18, 'name': 'Price' },\r\n { 'index': 19, 'name': 'Cost' },\r\n { 'index': 20, 'name': 'Miles' },\r\n ];\r\n\r\n $scope.selectedColumns = ($localStorage.SelectedConsignmentColumns) ? $localStorage.SelectedConsignmentColumns : [\r\n { 'index': 1, 'name': 'Consignment Number' },\r\n { 'index': 2, 'name': 'Manifest Number(s)' },\r\n { 'index': 3, 'name': 'Type' },\r\n { 'index': 4, 'name': 'Customer' },\r\n { 'index': 5, 'name': 'PO Number' },\r\n { 'index': 6, 'name': 'Booked Date' },\r\n { 'index': 7, 'name': 'Start Date' },\r\n { 'index': 8, 'name': 'Start Address' },\r\n { 'index': 9, 'name': 'Finish Date' },\r\n { 'index': 10, 'name': 'Last Address' },\r\n { 'index': 11, 'name': 'Number Of Addresses' },\r\n { 'index': 12, 'name': 'Vehicle' },\r\n { 'index': 13, 'name': 'Load Details' },\r\n { 'index': 14, 'name': 'Supplier' },\r\n { 'index': 15, 'name': 'Office Notes' },\r\n { 'index': 16, 'name': 'Supplier Notes' },\r\n { 'index': 17, 'name': 'Invoice Notes' },\r\n { 'index': 18, 'name': 'Price' },\r\n { 'index': 19, 'name': 'Cost' },\r\n { 'index': 20, 'name': 'Miles' },\r\n ];\r\n $scope.consignments = [];\r\n $scope.allCustomerConsignmentControlScreenColumns = AtlasCourierExpress.Enums.CustomerConsignmentControlScreenColumns;\r\n $scope.controlScreenConsignmentColumns = [];\r\n $scope.exporting = false;\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n }\r\n );\r\n\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.Customer) {\r\n CustomerFactory.getCustomer($scope.user.CustomerId)\r\n .then(\r\n function (customer) {\r\n $scope.user.Customer = customer;\r\n $scope.controlScreenConsignmentColumns = (customer.ConsignmentControlScreenColumns.length > 0 ) ? customer.ConsignmentControlScreenColumns : ((customer.Parent != null) ? customer.Parent.ConsignmentControlScreenColumns : null);\r\n\r\n if (!$scope.controlScreenConsignmentColumns || $scope.controlScreenConsignmentColumns.length === 0) {\r\n CommonFactory.getControlScreenConsignmentColumns()\r\n .then(\r\n function (response) {\r\n $scope.controlScreenConsignmentColumns = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.customerColumnIsInSelected = function (column) {\r\n if ($scope.controlScreenConsignmentColumns && $scope.controlScreenConsignmentColumns.length > 0) {\r\n for (var i = 0; i < $scope.controlScreenConsignmentColumns.length; i++) {\r\n if ($scope.controlScreenConsignmentColumns[i].ConsignmentControlScreenColumn.Id === column && $scope.controlScreenConsignmentColumns[i].IsVisible) return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n $scope.columnIsInSelected = function (index) {\r\n var isIn = false;\r\n\r\n angular.forEach($scope.selectedColumns, function (value, key) {\r\n if (value.index === index) {\r\n isIn = true;\r\n return false;\r\n }\r\n });\r\n\r\n return isIn;\r\n }\r\n\r\n $scope.selectedColumnsChanged = function () {\r\n $localStorage.SelectedConsignmentColumns = $scope.selectedColumns;\r\n debugger;\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchConsignments();\r\n }\r\n\r\n $scope.searchConsignments = function () {\r\n $scope.consignments = null;\r\n\r\n ConsignmentFactory.searchConsignments($scope.search.StartDate, $scope.search.EndDate, $scope.search.CustomerName, $scope.search.VehicleType, $scope.search.PONumber, $scope.search.ConsignmentNumber, $scope.search.ManifestNumber, $scope.search.CollectionAddress, $scope.search.DeliveryAddress, $scope.search.BookingContact, $scope.search.SupplierName, $scope.search.IsFrequent, $scope.search.HaveNoManifest, $scope.search.IsQuote, $scope.search.IsDeleted)\r\n .then(\r\n function () {\r\n $scope.consignments = ConsignmentFactory.consignments;\r\n },\r\n function(){\r\n $scope.consignments = [];\r\n }\r\n );\r\n }\r\n\r\n $scope.exportConsignments = function () {\r\n $scope.exporting = true;\r\n\r\n ConsignmentFactory.exportConsignments($scope.search.StartDate, $scope.search.EndDate, $scope.search.CustomerName, $scope.search.VehicleType, $scope.search.PONumber, $scope.search.ConsignmentNumber, $scope.search.ManifestNumber, $scope.search.CollectionAddress, $scope.search.DeliveryAddress, $scope.search.SupplierName, $scope.search.IsFrequent, $scope.search.HaveNoManifest, $scope.search.IsQuote, $scope.search.IsDeleted)\r\n .then(\r\n function (response) {\r\n var filename = 'Consignments Export - ' + moment().format('DD MMMM YYYY') + '.csv';\r\n $scope.exporting = false;\r\n\r\n if (response.headers('Filename')) {\r\n filename = response.headers('Filename');\r\n }\r\n else if (response.headers('Content-Disposition')) {\r\n var contentDisposition = response.headers('Content-Disposition').split(';');\r\n for (var i = 0; i < contentDisposition.length; i++) {\r\n if (contentDisposition[i].indexOf('filename') >= 0) {\r\n var parts = contentDisposition[i].split('=');\r\n filename = parts[1].replace('\"', '');\r\n }\r\n }\r\n }\r\n\r\n var file = new Blob([response.data], { type: 'text/csv; charset=utf-8' });\r\n\r\n FileSaver.saveAs(file, filename);\r\n },\r\n function () {\r\n $scope.exporting = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.getConsignmentManifestNumbers = function (consignment) {\r\n var manifestNumbers = null;\r\n\r\n for (var a = 0; a < consignment.ConsignmentAddresses.length; a++) {\r\n if (!manifestNumbers) {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n manifestNumbers = consignment.ConsignmentAddresses[a].Manifest.ManifestNumber.toString();\r\n }\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (manifestNumbers.indexOf(consignment.ConsignmentAddresses[a].Manifest.ManifestNumber) < 0) {\r\n manifestNumbers += ', ' + consignment.ConsignmentAddresses[a].Manifest.ManifestNumber;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return manifestNumbers;\r\n }\r\n\r\n $scope.getSuppliers = function (consignment) {\r\n var suppliers = null;\r\n\r\n for (var a = 0; a < consignment.ConsignmentAddresses.length; a++) {\r\n if (!suppliers) {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (consignment.ConsignmentAddresses[a].Manifest.Supplier) {\r\n suppliers = consignment.ConsignmentAddresses[a].Manifest.Supplier.Name;\r\n }\r\n }\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (consignment.ConsignmentAddresses[a].Manifest.Supplier) {\r\n if (suppliers.indexOf(consignment.ConsignmentAddresses[a].Manifest.Supplier.Name) < 0) {\r\n suppliers += ', ' + consignment.ConsignmentAddresses[a].Manifest.Supplier.Name;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return suppliers;\r\n }\r\n\r\n $scope.showConsignmentDetails = function (consignment) {\r\n $scope.consignment = consignment;\r\n\r\n AtlasModalFactory.open('consignmentModal');\r\n }\r\n\r\n $scope.closeConsignmentModal = function () {\r\n AtlasModalFactory.close('consignmentModal');\r\n\t}\r\n\r\n $scope.getManifest = function (manifestId) {\r\n ManifestFactory.getManifest(manifestId)\r\n .then(\r\n function () {\r\n $scope.manifest = ManifestFactory.manifest;\r\n }\r\n );\r\n }\r\n\r\n $scope.getManifestConsignmentNumbers = function () {\r\n return ManifestFactory.getConsignmentNumbers();\r\n }\r\n\r\n $scope.clearManifest = function () {\r\n $scope.manifest = null;\r\n }\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.search.DateRange) {\r\n case 'TODAY':\r\n $scope.search.StartDate = moment();\r\n $scope.search.EndDate = moment();\r\n break;\r\n case 'TOMORROW':\r\n $scope.search.StartDate = moment().add(1, 'd');\r\n $scope.search.EndDate = moment().add(1, 'd');\r\n break;\r\n case 'YESTERDAY':\r\n $scope.search.StartDate = moment().subtract(1, 'd');\r\n $scope.search.EndDate = moment().subtract(1, 'd');\r\n break;\r\n }\r\n \r\n }\r\n\r\n $scope.resetDateRange = function () {\r\n $scope.search.DateRange = '';\r\n }\r\n\r\n $scope.copyConsignment = function(consignment){\r\n ConsignmentFactory.copyConsignmentId = consignment.Id;\r\n\r\n $state.go(\"consignment\");\r\n }\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName != null && address.CompanyName != '') {\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 != null && address.AddressLine1 != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town != null && address.Town != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode != null && address.Postcode != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.selectIsFrequentConsignment = function () {\r\n if ($scope.search.IsFrequent) {\r\n $scope.search.HaveNoManifest = false;\r\n $scope.search.IsQuote = false;\r\n }\r\n }\r\n\r\n $scope.selectHaveNoManifest = function () {\r\n if ($scope.search.HaveNoManifest) {\r\n $scope.search.IsFrequent = false;\r\n $scope.search.IsQuote = false;\r\n }\r\n }\r\n\r\n $scope.getBackgroundColour = function (consignment) {\r\n var allAddressesCompleted = true;\r\n\r\n for (var i = 0; i < consignment.ConsignmentAddresses.length; i++) {\r\n if (!consignment.ConsignmentAddresses[i].IsCompleted) {\r\n allAddressesCompleted = false;\r\n break;\r\n }\r\n }\r\n\r\n if (allAddressesCompleted) {\r\n return '#2c6fba';\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[0].IsCompleted) {\r\n return '#9de89d';\r\n\t\t\t}\r\n\t\t}\r\n }\r\n\r\n $scope.getCustomerName = function (consignment) {\r\n var customerName = '';\r\n\r\n if (consignment.CustomerBranch) {\r\n customerName = consignment.CustomerBranch.Name;\r\n\r\n if (consignment.CustomerBranch.SLA && consignment.CustomerBranch.SLA.length > 0) customerName += ' [' + consignment.CustomerBranch.SLA + ']';\r\n }\r\n else {\r\n customerName = consignment.Customer.Name;\r\n\r\n if (consignment.Customer.SLA && consignment.Customer.SLA.length > 0) customerName += ' [' + consignment.Customer.SLA + ']';\r\n }\r\n\r\n return customerName;\r\n }\r\n\r\n if ($scope.user.Role === $scope.roles.Customer) {\r\n $scope.searchConsignments();\r\n }\r\n}]);","control_screen.controller('ControlScreenManifestController', ['$rootScope', '$scope', '$http', '$state', '$timeout', '$interval', '$localStorage', 'FileSaver', 'FoundationApi', 'UserFactory', 'ConsignmentFactory', 'ManifestFactory', 'SettingsFactory', 'SupplierFactory', 'CommonFactory', 'AtlasModalFactory', function ($rootScope, $scope, $http, $state, $timeout, $interval, $localStorage, FileSaver, FoundationApi, UserFactory, ConsignmentFactory, ManifestFactory, SettingsFactory, SupplierFactory, CommonFactory, AtlasModalFactory) {\r\n\r\n $rootScope.$emit('title-updated', 'Manifests Screen');\r\n $scope.manifests = null;\r\n $scope.errorMessage = null;\r\n $scope.timer = null;\r\n $scope.sortBy = 'StartDeliveryDate';\r\n $scope.sortReverse = false;\r\n //$scope.searchStartDate = moment('2015-08-01');\r\n //$scope.searchEndDate = moment().add(1, 'M');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.searchDateRange = 'Today';\r\n $scope.searchCustomerName = '';\r\n $scope.searchVehicleType = null;\r\n $scope.searchPONumber = '';\r\n $scope.searchConsignmentNumber = '';\r\n $scope.searchManifestNumber = '';\r\n $scope.searchCollectionAddress = '';\r\n $scope.searchDeliveryAddress = '';\r\n $scope.searchSupplierName = '';\r\n $scope.searchStatusColour = null;\r\n $scope.searchNonSpec = false;\r\n $scope.searchBackload = false;\r\n $scope.searchExcludeBackload = false;\r\n $scope.searchNotAcknowledged = false;\r\n $scope.searchIsDeleted = false;\r\n $scope.vehicleTypes = null;\r\n $scope.statusColours = null;\r\n $scope.consignment = null;\r\n $scope.selectedSupplier = null;\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.suppliers = null;\r\n $scope.availableSuppliers = null;\r\n $scope.assigningSupplier = false;\r\n $scope.columns = [\r\n { 'index': 1, 'name': 'Manifest Number' },\r\n { 'index': 2, 'name': 'Consignment Number(s)' },\r\n //{ 'index': 3, 'name': 'First Consignment Booked' },\r\n { 'index': 3, 'name': 'Manifest Created' },\r\n { 'index': 4, 'name': 'Customer(s)' },\r\n { 'index': 5, 'name': 'Start Date' },\r\n { 'index': 6, 'name': 'Start Address' },\r\n { 'index': 7, 'name': 'Finish Date' },\r\n { 'index': 8, 'name': 'Last Address' },\r\n { 'index': 9, 'name': 'Number Of Addresses' },\r\n //{ 'index': 10, 'name': 'Consignment Types' },\r\n { 'index': 11, 'name': 'Vehicle' },\r\n { 'index': 12, 'name': 'Load Details' },\r\n { 'index': 13, 'name': 'Supplier' },\r\n { 'index': 14, 'name': 'Send' },\r\n { 'index': 15, 'name': 'Office Notes' },\r\n { 'index': 16, 'name': 'Supplier Notes' },\r\n //{ 'index': 17, 'name': 'Invoice Notes' },\r\n { 'index': 18, 'name': 'Cost' },\r\n { 'index': 19, 'name': 'Price(s)' }\r\n ];\r\n $scope.exporting = false;\r\n\r\n $scope.selectedColumns = ($localStorage.SelectedManifestColumns && $localStorage.SelectedManifestColumns.length === $scope.columns.length) ? $localStorage.SelectedManifestColumns : [\r\n { 'index': 1, 'name': 'Manifest Number' },\r\n { 'index': 2, 'name': 'Consignment Number(s)' },\r\n //{ 'index': 3, 'name': 'First Consignment Booked' },\r\n { 'index': 3, 'name': 'Manifest Created' },\r\n { 'index': 4, 'name': 'Customer(s)' },\r\n { 'index': 5, 'name': 'Start Date' },\r\n { 'index': 6, 'name': 'Start Address' },\r\n { 'index': 7, 'name': 'Finish Date' },\r\n { 'index': 8, 'name': 'Last Address' },\r\n { 'index': 9, 'name': 'Number Of Addresses' },\r\n //{ 'index': 10, 'name': 'Consignment Types' },\r\n { 'index': 11, 'name': 'Vehicle' },\r\n { 'index': 12, 'name': 'Load Details' },\r\n { 'index': 13, 'name': 'Supplier' },\r\n { 'index': 14, 'name': 'Send' },\r\n { 'index': 15, 'name': 'Office Notes' },\r\n { 'index': 16, 'name': 'Supplier Notes' },\r\n //{ 'index': 17, 'name': 'Invoice Notes' },\r\n { 'index': 18, 'name': 'Cost' },\r\n { 'index': 19, 'name': 'Price(s)' }\r\n ];\r\n $scope.canSendToTransportExchange = false;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n $scope.transportExchangeManifestOptions = {\r\n tailLift: false,\r\n timed: false,\r\n notes: null\r\n }\r\n $scope.transportExchangeDefaultSupplier = AtlasCourierExpress.Enums.TransportExchangeDefaultSupplier;\r\n\r\n SupplierFactory.getSuppliers()\r\n .then(\r\n function () {\r\n $scope.suppliers = SupplierFactory.suppliers;\r\n $scope.availableSuppliers = $scope.suppliers;\r\n }\r\n );\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n }\r\n );\r\n\r\n //CommonFactory.getStatusColours()\r\n // .then(\r\n // function (response) {\r\n // $scope.statusColours = response;\r\n\r\n // for (var c = 0; c < $scope.statusColours.length; c++) {\r\n // $scope.statusColours[c].HtmlLabel = '' + $scope.statusColours[c].Name + '';\r\n // }\r\n // },\r\n // function (response, status) {\r\n // debugger;\r\n // }\r\n // );\r\n\r\n $scope.columnIsInSelected = function (index) {\r\n var isIn = false;\r\n\r\n angular.forEach($scope.selectedColumns, function (value, key) {\r\n if (value.index === index) {\r\n isIn = true;\r\n return false;\r\n }\r\n });\r\n\r\n return isIn;\r\n }\r\n\r\n $scope.selectedColumnsChanged = function () {\r\n $localStorage.SelectedManifestColumns = $scope.selectedColumns;\r\n }\r\n\r\n $scope.sort = function (field) {\r\n if (field === 'ConsignmentPrices') {\r\n $scope.sortBy = function (m) {\r\n var raw = m.ConsignmentPrices;\r\n if (!raw) return 0;\r\n var match = raw.match(/£[\\d,]+(?:\\.\\d+)?/);\r\n if (!match) return 0;\r\n return parseFloat(match[0].replace(/£|,/g, '')) || 0;\r\n };\r\n } else {\r\n $scope.sortBy = field;\r\n }\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchManifests();\r\n }\r\n\r\n $scope.searchManifests = function () {\r\n $scope.manifests = null;\r\n var startSearch = moment();\r\n\r\n console.log(\"Starting searching for manifests: \" + startSearch.format(\"DD/MM/YYYY HH:mm:ss.SSS\"));\r\n\r\n ManifestFactory.searchManifests($scope.searchStartDate, $scope.searchEndDate, $scope.searchVehicleType, $scope.searchCustomerName, $scope.searchPONumber, $scope.searchConsignmentNumber, $scope.searchManifestNumber, $scope.searchCollectionAddress, $scope.searchDeliveryAddress, $scope.searchSupplierName, $scope.searchNonSpec, $scope.searchNotAcknowledged, $scope.searchBackload, $scope.searchExcludeBackload, $scope.searchIsDeleted)\r\n .then(\r\n function () {\r\n $scope.manifests = ManifestFactory.manifests;\r\n var endSearch = moment();\r\n\r\n console.log(\"Manifests received: \" + endSearch.format(\"DD/MM/YYYY HH:mm:ss.SSS\") + \", time taken: \" + endSearch.diff(startSearch, 'seconds', true) + \" seconds\");\r\n\r\n //$timeout.cancel($scope.timer);\r\n\r\n //$scope.timer = $timeout(function () {\r\n // $scope.searchManifests();\r\n //}, __SEARCH_REFRESH_TIME);\r\n }\r\n );\r\n }\r\n\r\n $scope.exportManifests = function () {\r\n $scope.exporting = true;\r\n\r\n ManifestFactory.exportManifests($scope.searchStartDate, $scope.searchEndDate, $scope.searchVehicleType, $scope.searchCustomerName, $scope.searchPONumber, $scope.searchConsignmentNumber, $scope.searchManifestNumber, $scope.searchCollectionAddress, $scope.searchDeliveryAddress, $scope.searchSupplierName, $scope.searchNonSpec, $scope.searchNotAcknowledged, $scope.searchBackload, $scope.searchExcludeBackload, $scope.searchIsDeleted)\r\n .then(\r\n function (response) {\r\n var filename = 'Manifests Export - ' + moment().format('DD MMMM YYYY') + '.csv';\r\n $scope.exporting = false;\r\n\r\n if (response.headers('Filename')) {\r\n filename = response.headers('Filename');\r\n }\r\n else if (response.headers('Content-Disposition')) {\r\n var contentDisposition = response.headers('Content-Disposition').split(';');\r\n for (var i = 0; i < contentDisposition.length; i++) {\r\n if (contentDisposition[i].indexOf('filename') >= 0) {\r\n var parts = contentDisposition[i].split('=');\r\n filename = parts[1].replace('\"', '');\r\n }\r\n }\r\n }\r\n\r\n var file = new Blob([response.data], { type: 'text/csv; charset=utf-8' });\r\n\r\n FileSaver.saveAs(file, filename);\r\n },\r\n function () {\r\n $scope.exporting = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.showManifestDetails = function (manifest) {\r\n $scope.manifest = manifest;\r\n\r\n AtlasModalFactory.open('manifestModal');\r\n }\r\n\r\n $scope.closeManifestModal = function () {\r\n AtlasModalFactory.close('manifestModal');\r\n\t}\r\n\r\n $scope.getManifest = function (manifestId) {\r\n ManifestFactory.getManifest(manifestId)\r\n .then(\r\n function () {\r\n $scope.manifest = ManifestFactory.manifest;\r\n }\r\n );\r\n }\r\n\r\n $scope.getManifestConsignments = function (manifest) {\r\n var consignments = [];\r\n\r\n if (manifest) {\r\n var alreadyExists = false;\r\n\r\n for (var i = 0; i < manifest.ConsignmentAddresses.length; i++) {\r\n alreadyExists = false;\r\n\r\n if (consignments.length === 0) {\r\n consignments.push(manifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n else {\r\n for (var j = 0; j < consignments.length; j++) {\r\n if (consignments[j].ConsignmentNumber === manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber) {\r\n alreadyExists = true;\r\n }\r\n }\r\n\r\n if (!alreadyExists) {\r\n consignments.push(manifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return consignments;\r\n }\r\n\r\n $scope.getCustomers = function (manifest) {\r\n var customers = null;\r\n\r\n for (var a = 0; a < manifest.ConsignmentAddresses.length; a++) {\r\n if (!customers) {\r\n customers = manifest.ConsignmentAddresses[a].Consignment.Customer.Name;\r\n }\r\n else {\r\n if (customers.indexOf(manifest.ConsignmentAddresses[a].Consignment.Customer.Name) < 0) {\r\n customers += ', ' + manifest.ConsignmentAddresses[a].Consignment.Customer.Name;\r\n }\r\n }\r\n }\r\n\r\n return customers;\r\n }\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'TOMORROW':\r\n $scope.searchStartDate = moment().add(1, 'd');\r\n $scope.searchEndDate = moment().add(1, 'd');\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n }\r\n }\r\n\r\n $scope.resetDateRange = function () {\r\n $scope.searchDateRange = '';\r\n }\r\n\r\n $scope.setNonSpec = function () {\r\n if ($scope.searchNonSpec) {\r\n $scope.searchSupplierName = '';\r\n }\r\n }\r\n\r\n $scope.setBackload = function () {\r\n if ($scope.searchBackload) $scope.searchExcludeBackload = false;\r\n }\r\n\r\n $scope.setExcludeBackload = function () {\r\n if ($scope.searchExcludeBackload) $scope.searchBackload = false;\r\n }\r\n\r\n $scope.selectManifest = function (index, m) {\r\n $scope.selectedManifestIndex = index;\r\n $scope.selectedManifest = m;\r\n $scope.availableSuppliers = ManifestFactory.getAvailableSuppliers($scope.selectedManifest, $scope.suppliers);\r\n $scope.canSendToTEG = false;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n //if ($scope.selectedManifest.Supplier) {\r\n // $scope.selectedSupplier = $scope.selectedManifest.Supplier;\r\n //}\r\n\r\n if ($scope.selectedManifest.VehicleType.TransportExchangeVehicleMappings && $scope.selectedManifest.VehicleType.TransportExchangeVehicleMappings.length > 0) {\r\n $scope.canSendToTransportExchange = true;\r\n }\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n }\r\n\r\n $scope.closeAssignSupplier = function () {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n\t}\r\n\r\n $scope.selectSupplier = function (s) {\r\n if ($scope.selectedManifest.Supplier && $scope.selectedManifest.Supplier.Id !== s.Id) {\r\n if (ManifestFactory.manifest) ManifestFactory.manifest.IsSent = false;\r\n $scope.selectedManifest.IsSent = false;\r\n }\r\n\r\n if ($scope.selectedSupplier && $scope.selectedSupplier.Id === s.Id) {\r\n $scope.selectedSupplier = null;\r\n $scope.canSendToTransportExchange = true;\r\n }\r\n else {\r\n $scope.selectedSupplier = s;\r\n $scope.canSendToTransportExchange = false;\r\n }\r\n }\r\n\r\n $scope.assignSupplier = function () {\r\n //if (!$scope.selectedSupplier) {\r\n // $scope.errorMessage = 'No supplier selected';\r\n // return false;\r\n //}\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n\r\n ManifestFactory.getManifest($scope.selectedManifest.Id)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.manifest.Supplier = $scope.selectedSupplier;\r\n ManifestFactory.manifest.IsSent = false;\r\n delete ManifestFactory.manifest.TransportExchangeManifests;\r\n\r\n ManifestFactory.saveManifest()\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.selectedSupplier = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.confirmAssignSupplier = function () {\r\n if ($scope.selectedManifest.Supplier && $scope.selectedManifest.Supplier.Id === $scope.transportExchangeDefaultSupplier.Id) {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n AtlasModalFactory.open('divConfirmAssignSupplier');\r\n return false;\r\n }\r\n else {\r\n $scope.assignSupplier();\r\n }\r\n }\r\n\r\n $scope.cancelAssignSupplier = function ($event) {\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n AtlasModalFactory.open('divAssignSupplier');\r\n if ($event) $event.stopPropagation();\r\n return false;\r\n }\r\n\r\n $scope.closeConfirmAssignSupplier = function () {\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n return false;\r\n }\r\n\r\n $scope.showSendingToTransportExchangeOptions = function () {\r\n $scope.sendingToTransportExchangeOptions = true;\r\n $scope.transportExchangeManifestOptions.timed = false;\r\n $scope.transportExchangeManifestOptions.notes = '';\r\n var manifestConsignments = [];\r\n var consignmentExists = false;\r\n\r\n for (var i = 0; i < $scope.selectedManifest.ConsignmentAddresses.length; i++) {\r\n if ($scope.selectedManifest.ConsignmentAddresses[i].ConsignmentAddressType.Name == 'Delivery' && $scope.selectedManifest.ConsignmentAddresses[i].Timed) {\r\n $scope.transportExchangeManifestOptions.timed = true;\r\n }\r\n\r\n if (manifestConsignments.length == 0) {\r\n manifestConsignments.push($scope.selectedManifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n else {\r\n consignmentExists = false;\r\n\r\n for (var m = 0; m < manifestConsignments.length; m++) {\r\n if ($scope.selectedManifest.ConsignmentAddresses[i].Consignment.Id == manifestConsignments[m].Id) {\r\n consignmentExists = true;\r\n }\r\n }\r\n\r\n if (!consignmentExists) manifestConsignments.push($scope.selectedManifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n }\r\n\r\n for (var m = 0; m < manifestConsignments.length; m++) {\r\n if ($scope.transportExchangeManifestOptions.notes.length > 0) $scope.notes += ' --- ';\r\n\r\n $scope.transportExchangeManifestOptions.notes += manifestConsignments[m].NotesForSupplier;\r\n }\r\n }\r\n\r\n $scope.hideSendingToTransportExchange = function () {\r\n $scope.sendingToTransportExchangeOptions = false;\r\n }\r\n\r\n $scope.sendManifestToTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.getManifest($scope.selectedManifest.Id)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.manifest.TransportExchangeManifests = [];\r\n ManifestFactory.manifest.TransportExchangeManifests.push($scope.transportExchangeManifestOptions);\r\n\r\n ManifestFactory.sendManifestToTransportExchange(ManifestFactory.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.selectedSupplier = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n \r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n \r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.removeFromTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.getManifest($scope.selectedManifest.Id)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.removeManifestFromTransportExchange(ManifestFactory.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.selectedSupplier = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.rebookWithTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.getManifest($scope.selectedManifest.Id)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.rebookManifestWithTransportExchange(ManifestFactory.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.selectedSupplier = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.sendManifest = function (m) {\r\n $scope.closeManifestModal();\r\n AtlasModalFactory.open('divLoading');\r\n\r\n ManifestFactory.sendManifest(m)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(m.Id)\r\n .then(\r\n function () {\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n\r\n AtlasModalFactory.close('divLoading');\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.openLoadingModal = function () {\r\n AtlasModalFactory.open('divLoading');\r\n }\r\n\r\n $scope.closeLoadingModal = function () {\r\n AtlasModalFactory.close('divLoading');\r\n\t}\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName != null && address.CompanyName != '') {\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 != null && address.AddressLine1 != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town != null && address.Town != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode != null && address.Postcode != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.getLoadDetails = function (consignmentAddress) {\r\n var loadDetails = '';\r\n\r\n for (var i = 0; i < consignmentAddress.LoadDetails.length; i++) {\r\n if (loadDetails && loadDetails.length > 0) loadDetails += '; ';\r\n\r\n loadDetails += consignmentAddress.LoadDetails[i].Quantity + ' ' + consignmentAddress.LoadDetails[i].Description;\r\n }\r\n\r\n return loadDetails;\r\n }\r\n\r\n $scope.getAdditionalCharges = function (consignmentAddress) {\r\n var additionalCharges = '';\r\n\r\n for (var i = 0; i < consignmentAddress.AdditionalCharges.length; i++) {\r\n if (additionalCharges && additionalCharges.length > 0) additionalCharges += '; ';\r\n\r\n additionalCharges += consignmentAddress.AdditionalCharges[i].AdditionalCharge.ChargeFor + ' (Cost: £' + consignmentAddress.AdditionalCharges[i].AdditionalCharge.Cost + ', Price: £' + consignmentAddress.AdditionalCharges[i].AdditionalCharge.Price + ')';\r\n }\r\n\r\n return additionalCharges;\r\n }\r\n\r\n $scope.searchManifests();\r\n\r\n $scope.toggleTailLift = function () {\r\n if ($scope.transportExchangeManifestOptions.tailLift) {\r\n if ($scope.transportExchangeManifestOptions.notes && $scope.transportExchangeManifestOptions.notes.length > 0) $scope.transportExchangeManifestOptions.notes += '\\n';\r\n $scope.transportExchangeManifestOptions.notes += 'Pallet truck required';\r\n }\r\n else {\r\n $scope.transportExchangeManifestOptions.notes = $scope.transportExchangeManifestOptions.notes.replace('Pallet truck required', '');\r\n $scope.transportExchangeManifestOptions.notes = $scope.transportExchangeManifestOptions.notes.trim();\r\n }\r\n }\r\n}]);","/// \r\n\r\nmap.controller('MapController', ['$rootScope', '$scope', '$state', '$timeout', '$interval', 'UserFactory', 'SupplierFactory', 'SettingsFactory', function ($rootScope, $scope, $state, $timeout, $interval, UserFactory, SupplierFactory, SettingsFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Map');\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.supplierMap = new clickinon.google.maps.Map();\r\n $scope.mapsLoaded = false;\r\n $scope.selectedSupplier = null;\r\n $scope.vehicleType = null;\r\n $scope.showTraffic = false;\r\n $scope.supplierLocations = null;\r\n $scope.trackingDate = {};\r\n $scope.tracking = {};\r\n $scope.loadingHistoricalData = false;\r\n $scope.loadingHistoricalDataMessages = ['Loading Historical Data...', 'Still Loading Historical Data...', 'Sorry, this is taking a bit of time...'];\r\n $scope.loadingHistoricalDataText = '';\r\n $scope.statuses = [\r\n { Id: 'E43233FD-5617-4E6F-9BD1-FA1C05809FB9', Name: 'Completed' }\r\n ];\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n if (!$scope.supplierMap.getMap()) $scope.supplierMap.initialize('divSupplierMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n //$scope.supplierMap.setCenter(51.5072, 0.1275);\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n $timeout(function () {\r\n $scope.supplierMap.triggerResize();\r\n }, 1000);\r\n\r\n $scope.searchSupplier = function (searchText) {\r\n return SupplierFactory.searchSupplierByName(searchText);\r\n }\r\n\r\n $scope.supplierSelected = function (supplier) {\r\n $scope.tracking.selectedSupplier = supplier;\r\n $scope.tracking.vehicleType = null;\r\n $scope.loadingSupplierLocations = true;\r\n\r\n $scope.supplierMap.clearMarkers();\r\n\r\n SupplierFactory.getLastSupplierLocation(supplier.Id)\r\n .then(\r\n function (supplierLocation) {\r\n addSupplierLocationToMap(supplierLocation, clickinon.google.maps.enums.markerType);\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.clearSelectedSupplier = function () {\r\n $scope.tracking.selectedSupplier = null;\r\n $scope.loadingSupplierLocations = true;\r\n\r\n $scope.supplierMap.clearMarkers();\r\n getAllSupplierLastLocations();\r\n }\r\n\r\n $scope.vehicleTypeSelected = function () {\r\n $scope.tracking.selectedSupplier = null;\r\n $scope.supplierMap.clearMarkers();\r\n $scope.loadingSupplierLocations = true;\r\n\r\n if ($scope.tracking.vehicleType) {\r\n SupplierFactory.getLastSupplierLocationByVehicleType($scope.tracking.vehicleType.Id)\r\n .then(\r\n function (supplierLocations) {\r\n $scope.supplierLocations = supplierLocations;\r\n\r\n for (var i = 0; i < supplierLocations.length; i++) {\r\n addSupplierLocationToMap(supplierLocations[i]);\r\n }\r\n\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n else {\r\n getAllSupplierLastLocations();\r\n }\r\n }\r\n\r\n $scope.statusSelected = function () {\r\n $scope.tracking.selectedSupplier = null;\r\n $scope.supplierMap.clearMarkers();\r\n $scope.loadingSupplierLocations = true;\r\n\r\n if ($scope.tracking.status) {\r\n SupplierFactory.getLastSupplierLocationByStatus($scope.tracking.status.Id)\r\n .then(\r\n function (supplierLocations) {\r\n $scope.supplierLocations = supplierLocations;\r\n\r\n for (var i = 0; i < supplierLocations.length; i++) {\r\n addSupplierLocationToMap(supplierLocations[i]);\r\n }\r\n\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n else {\r\n getAllSupplierLastLocations();\r\n }\r\n }\r\n\r\n $scope.zoomTo = function ($event) {\r\n if ($event.keyCode === 13) {\r\n if ($scope.zoomToPlace && $scope.zoomToPlace.length > 0) {\r\n $scope.supplierMap.zoomTo($scope.zoomToPlace + ',UK');\r\n }\r\n else {\r\n $scope.supplierMap.zoomTo();\r\n }\r\n }\r\n }\r\n\r\n $scope.toggleTraffic = function () {\r\n if ($scope.showTraffic) {\r\n $scope.supplierMap.removeTraffic();\r\n $scope.showTraffic = false;\r\n }\r\n else {\r\n $scope.supplierMap.showTraffic();\r\n $scope.showTraffic = true;\r\n }\r\n }\r\n\r\n $scope.viewHistoricalData = function () {\r\n if (!$scope.trackingDate.date || !$scope.trackingDate.startTime || !$scope.trackingDate.endTime) return;\r\n\r\n var counter = 0;\r\n\r\n $scope.loadingHistoricalData = true;\r\n $scope.loadingHistoricalDataText = $scope.loadingHistoricalDataMessages[counter];\r\n\r\n $scope.supplierMap.clearMarkers();\r\n \r\n var timer = $interval(function ()\r\n {\r\n if (counter === 2) counter = 0;\r\n\r\n counter++;\r\n\r\n $scope.loadingHistoricalDataText = $scope.loadingHistoricalDataMessages[counter];\r\n }, 30000);\r\n\r\n SupplierFactory.getSupplierLocations($scope.tracking.selectedSupplier.Id, moment($scope.trackingDate.date).hour(moment($scope.trackingDate.startTime).hour()).minute(moment($scope.trackingDate.startTime).minute()).second(0), moment($scope.trackingDate.date).hour(moment($scope.trackingDate.endTime).hour()).minute(moment($scope.trackingDate.endTime).minute()).second(0))\r\n .then(\r\n function (supplierLocations) {\r\n $scope.supplierLocations = supplierLocations;\r\n $scope.loadingHistoricalDataText = 'Placing Pin Locations...';\r\n $interval.cancel(timer);\r\n\r\n timer = $timeout(function () {\r\n for (var i = 0; i < supplierLocations.length; i++) {\r\n addSupplierLocationToMap(supplierLocations[i], clickinon.google.maps.enums.markerTypes.CIRCLE);\r\n }\r\n\r\n $scope.loadingHistoricalData = false;\r\n\r\n $timeout.cancel(timer);\r\n }, 500);\r\n },\r\n function (response, status) {\r\n $scope.loadingHistoricalData = false;\r\n\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.searchSupplierLocation = function () {\r\n $scope.supplierMap.clearMarkers();\r\n $scope.loadingSupplierLocations = true;\r\n\r\n if ($scope.consignmentNumberCustomerReferenceOrPONumber && $scope.consignmentNumberCustomerReferenceOrPONumber.length > 0) {\r\n SupplierFactory.getLastSupplierLocationByConsignmentNumberCustomerReferenceOrPONumber($scope.consignmentNumberCustomerReferenceOrPONumber)\r\n .then(\r\n function (supplierLocation) {\r\n addSupplierLocationToMap(supplierLocation);\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n else if ($scope.manifestNumber && $scope.manifestNumber.length > 0){\r\n SupplierFactory.getLastSupplierLocationByManifestNumber($scope.manifestNumber)\r\n .then(\r\n function (supplierLocation) {\r\n $scope.loadingSupplierLocations = false;\r\n addSupplierLocationToMap(supplierLocation);\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.resetSearchSupplierLocation = function () {\r\n $scope.tracking.selectedSupplier = null;\r\n $scope.tracking.vehicleType = null;\r\n $scope.consignmentNumberCustomerReferenceOrPONumber = null;\r\n $scope.manifestNumber = null;\r\n $scope.loadingSupplierLocations = true;\r\n\r\n $scope.supplierMap.clearMarkers();\r\n getAllSupplierLastLocations();\r\n }\r\n\r\n function getAllSupplierLastLocations() {\r\n $scope.supplierMap.clearMarkers();\r\n\r\n SupplierFactory.getLastSupplierLocation()\r\n .then(\r\n function (supplierLocations) {\r\n $scope.supplierLocations = supplierLocations;\r\n\r\n for (var i = 0; i < supplierLocations.length; i++) {\r\n addSupplierLocationToMap(supplierLocations[i]);\r\n }\r\n\r\n $scope.supplierMap.triggerResize();\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n function addSupplierLocationToMap(supplierLocation, markerType) {\r\n var infoContent;\r\n var defaultColour = '#2c6fba';\r\n\r\n if (!markerType) markerType = clickinon.google.maps.enums.markerTypes.PIN;\r\n\r\n infoContent = '
Driver: ' + supplierLocation.Supplier.Name + '
';\r\n\r\n if (supplierLocation.Manifest) {\r\n //infoContent += '
Vehicle: ' + supplierLocation.Supplier.Manifests[0].VehicleType.Name + '
'\r\n infoContent += '
Vehicle: ' + supplierLocation.Supplier.Vehicles[0].VehicleType.Name + '
';\r\n if($scope.user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) infoContent += '
Manifest Number: ' + supplierLocation.Manifest.ManifestNumber + '
';\r\n if (supplierLocation.Manifest.FormattedLastDeliveryAddress) infoContent += '
Last Address: ' + supplierLocation.Manifest.FormattedLastDeliveryAddress + '
';\r\n infoContent += '
Last Tracked: ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.supplierMap.addMarker(\r\n supplierLocation.Latitude,\r\n supplierLocation.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: supplierLocation.Manifest.StatusColour.HexCode,\r\n fontColour: (supplierLocation.Manifest.StatusColour.HexCode.indexOf('#595959') >= 0 || supplierLocation.Manifest.StatusColour.HexCode.indexOf('#2c6fba') >= 0) ? ':#ffffff' : '#000000',\r\n //text: (supplierLocation.Supplier.Manifests.length > 0) ? supplierLocation.Supplier.Manifests[0].VehicleType.IconCode : '',\r\n text: supplierLocation.Supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType\r\n }\r\n );\r\n }\r\n else {\r\n infoContent += '
Vehicle: ' + supplierLocation.Supplier.Vehicles[0].VehicleType.Name + '
';\r\n infoContent += '
Last Tracked: ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.supplierMap.addMarker(\r\n supplierLocation.Latitude,\r\n supplierLocation.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: defaultColour,\r\n fontColour: '#000000',\r\n text: supplierLocation.Supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType\r\n }\r\n );\r\n }\r\n }\r\n \r\n getAllSupplierLastLocations();\r\n}]);","consignments.controller('ConsignmentController', ['$rootScope', '$scope', '$stateParams', '$http', '$filter', '$timeout', '$state', '$sce', '$window', 'FoundationApi', 'PostcodeLookupFactory', 'UserFactory', 'ConsignmentFactory', 'ManifestFactory', 'SupplierFactory', 'CountryFactory', 'SettingsFactory', 'CommonFactory', 'CustomerFactory', 'AtlasUserFactory', 'AtlasModalFactory', function ($rootScope, $scope, $stateParams, $http, $filter, $timeout, $state, $sce, $window, FoundationApi, PostcodeLookupFactory, UserFactory, ConsignmentFactory, ManifestFactory, SupplierFactory, CountryFactory, SettingsFactory, CommonFactory, CustomerFactory, AtlasUserFactory, AtlasModalFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Consignment');\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.customerAccountTypesEnums = AtlasCourierExpress.Enums.CustomerAccountTypes;\r\n $scope.invoiceStatuses = AtlasCourierExpress.Enums.InvoiceStatus;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n $scope.stage = 'details';\r\n $scope.selectedCustomer = null;\r\n $scope.selectedCustomerOnStop = false;\r\n $scope.selectedCustomerIsProFormaAccountCustomer = false;\r\n $scope.selectedCustomerInactiveWarning = false;\r\n $scope.selectedCustomerInactiveWarningTimeframe = __INACTIVE_CUSTOMER_WARNING_MONTHS;\r\n $scope.selectedCustomerOverCreditLimitWarning = false;\r\n $scope.existingAddresses = null;\r\n $scope.consignmentTypes = null;\r\n $scope.consignmentFrequencies = null;\r\n $scope.vehicleTypes = null;\r\n $scope.consignmentAddressTypes = null;\r\n $scope.branch = null;\r\n $scope.contacts = null;\r\n $scope.contactEmails = null;\r\n $scope.contact = null;\r\n $scope.defaultAdditionalCharges = null;\r\n $scope.additionalCharges = null;\r\n $scope.consignmentAddress = null;\r\n $scope.consignmentAddressIndex = null;\r\n $scope.selectedExistingAddress = null;\r\n $scope.saveToCustomerRecord = false;\r\n $scope.countries = null;\r\n $scope.loadDetails = {};\r\n $scope.loadDetailsIndex = null;\r\n $scope.additionalCharge = null;\r\n $scope.additionalChargeIndex = null;\r\n $scope.selectedAdditionalCharges = [];\r\n $scope.additionalChargeChanges = [];\r\n $scope.savingQuote = false;\r\n $scope.savingConsignment = false;\r\n $scope.creatingManifest = false;\r\n $scope.consignment = ConsignmentFactory.createNewConsignment();\r\n $scope.existingConsignment = false;\r\n $scope.loadingConsignment = false;\r\n $scope.loadingManifest = false;\r\n $scope.manifest = null;\r\n $scope.suppliers = null;\r\n $scope.consignmentMap = new clickinon.google.maps.Map();\r\n $scope.mapsLoaded = false;\r\n $scope.ignorePORequired = false;\r\n $scope.report = null;\r\n $scope.allCollectionLoadDetails = null;\r\n $scope.dateToday = moment();\r\n $scope.customerNotes = '';\r\n $scope.deletingConsignment = false;\r\n $scope.isFrequentConsignment = false;\r\n $scope.consignmentFrequencySettings = {};\r\n $scope.showReportOptions = true;\r\n $scope.showReport = false;\r\n $scope.showEmailDetailsForReport = false;\r\n $scope.emailReport = {\r\n ShowPrice: true,\r\n ShowPhotos: true\r\n };\r\n $scope.reportEmailErrorMessage = null;\r\n $scope.consignmentAddressesView = 'Details';\r\n $scope.minimumFrequentConsignmentData = getMinimumFrequentConsignmentDate();\r\n $scope.weekdays = null;\r\n $scope.consignmentManifests = [];\r\n $scope.consignmentManifestOneToOneRelationship = false;\r\n $scope.manifestChangesRequired = false;\r\n $scope.consignmentHasManifests = false;\r\n $scope.consignmentDisabled = false;\r\n $scope.manifestSuppliers = [];\r\n $scope.requestingConsignmentCancellation = false;\r\n $scope.consignmentConfirmationOpen = false;\r\n $scope.consignmentToQuoteWarningCompleted = false;\r\n $scope.consignmentBackdatedWarningCompleted = false;\r\n $scope.updatingManifest = false;\r\n $scope.manifestUpdated = false;\r\n $scope.manifestInvoiced = false;\r\n $scope.costsChanged = false;\r\n $scope.areaAdditionalChargeRules = [];\r\n $scope.contactErrorMessage = null;\r\n $scope.settings = null;\r\n $scope.showInvoicingSection = false;\r\n $scope.priceMatrices = null;\r\n $scope.pcaControl = null;\r\n $scope.goodsPhotos = [];\r\n $scope.paperworkPhotos = [];\r\n $scope.hideAddressSearch = false;\r\n $scope.customerSearchText = '';\r\n $scope.globalAddresses = [];\r\n $scope.previousConsignmentGlobalAddress = null;\r\n\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.Customer) {\r\n CustomerFactory.getCustomer($scope.user.CustomerId)\r\n .then(\r\n function (customer) {\r\n $scope.customerSelected(customer);\r\n\r\n if ($scope.selectedCustomer.Matrices == null || $scope.selectedCustomer.Matrices.length === 0) {\r\n CustomerFactory.getCustomerMatrix($scope.user.CustomerId)\r\n .then(\r\n function (matrices) {\r\n $scope.selectedCustomer.Matrices = matrices;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n if ($stateParams.id.length > 0 || ConsignmentFactory.copyConsignmentId) {\r\n $scope.loadingConsignment = true;\r\n var consignmentId = ($stateParams.id.length > 0) ? $stateParams.id : ConsignmentFactory.copyConsignmentId;\r\n\r\n ConsignmentFactory.getConsignment(consignmentId)\r\n .then(\r\n function () {\r\n $scope.existingConsignment = true;\r\n $scope.loadingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignment.RecommendedPrice = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n $scope.consignment.Price = $filter('number')($scope.consignment.Price, 2);\r\n $scope.consignment.RecommendedCost = $filter('number')($scope.consignment.RecommendedCost, 2);\r\n $scope.consignment.Cost = $filter('number')($scope.consignment.Cost, 2);\r\n $scope.selectedCustomer = $scope.consignment.Customer;\r\n $scope.existingAddresses = [];\r\n\r\n $rootScope.$emit('title-updated', 'Consignment ' + $scope.consignment.ConsignmentNumber);\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.Address != null) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Address);\r\n }\r\n\r\n if ($scope.selectedCustomer.Addresses != null) {\r\n for (var i = 0; i < $scope.selectedCustomer.Addresses.length; i++) {\r\n if ($scope.selectedCustomer.Addresses[i].Id != $scope.selectedCustomer.Address.Id) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Addresses[i]);\r\n }\r\n }\r\n }\r\n\r\n $scope.contacts = $scope.selectedCustomer.Contacts;\r\n $scope.contactEmails = [];\r\n\r\n for (var i = 0; i < $scope.contacts.length; i++) {\r\n if ($scope.contacts[i].Email) $scope.contactEmails.push($scope.contacts[i]);\r\n }\r\n\r\n $scope.contactEmails.push({ Id: '-1', Email: '-- Other Email Address --' });\r\n\r\n $scope.consignment.Customer = {\r\n 'Id': $scope.selectedCustomer.Id,\r\n 'Name': $scope.selectedCustomer.Name,\r\n 'NameShownOnInvoice': $scope.selectedCustomer.NameShownOnInvoice,\r\n 'PhoneNumber': $scope.selectedCustomer.PhoneNumber,\r\n 'CostCentre': $scope.selectedCustomer.CostCentre,\r\n 'AccountType': $scope.selectedCustomer.AccountType,\r\n 'Addresses': $scope.selectedCustomer.Addresses,\r\n 'AutoEmailOnCreate': $scope.selectedCustomer.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': $scope.selectedCustomer.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': $scope.selectedCustomer.AutoEmailOnDelivery,\r\n 'UseContactEmail': $scope.selectedCustomer.UseContactEmail,\r\n 'BookingEmailAddress': $scope.selectedCustomer.BookingEmailAddress\r\n };\r\n\r\n $scope.customerNotes = ($scope.consignment.CustomerBranch) ? $scope.consignment.CustomerBranch.Notes : ($scope.selectedCustomer) ? $scope.selectedCustomer.Notes : '';\r\n\r\n var unassignedConsignmentAddress = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n }\r\n\r\n var manifestAlreadyAdded = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses[i].Manifest) {\r\n unassignedConsignmentAddress = true;\r\n }\r\n else {\r\n $scope.consignmentHasManifests = true;\r\n\r\n for (var m = 0; m < $scope.consignmentManifests.length; m++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest.Id === $scope.consignmentManifests[m].Id) manifestAlreadyAdded = true;\r\n }\r\n\r\n if (!manifestAlreadyAdded) $scope.consignmentManifests.push($scope.consignment.ConsignmentAddresses[i].Manifest);\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest && ($scope.consignment.ConsignmentAddresses[i].Manifest.InvoiceStatus == $scope.invoiceStatuses.ReadyToInvoice || $scope.consignment.ConsignmentAddresses[i].Manifest.InvoiceStatus == $scope.invoiceStatuses.Invoiced)) $scope.manifestInvoiced = true;\r\n\r\n }\r\n\r\n if (!unassignedConsignmentAddress && $scope.consignmentManifests.length === 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentManifests[0].NumberOfConsignmentAddresses) {\r\n $scope.consignmentManifestOneToOneRelationship = true;\r\n $scope.consignment.RecommendedCost = $filter('number')($scope.consignment.ConsignmentAddresses[0].Manifest.CalculatedCost, 2);\r\n $scope.consignment.Cost = $filter('number')($scope.consignment.ConsignmentAddresses[0].Manifest.Cost, 2);\r\n }\r\n\r\n if (!$scope.consignmentHasManifests) {\r\n updateCosting();\r\n }\r\n\r\n //$timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n\r\n //}, 1000);\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ($stateParams.id.length > 0) {\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n }\r\n\r\n if (ConsignmentFactory.copyConsignmentId) {\r\n createCopyFromConsignment();\r\n\r\n ConsignmentFactory.copyConsignmentId = null;\r\n }\r\n\r\n if ($scope.vehicleTypes && $scope.vehicleTypes.length > 0) {\r\n var found = false;\r\n var pushAt = 0;\r\n\r\n for (var i = 0; i < $scope.vehicleTypes.length; i++) {\r\n if ($scope.consignment.VehicleType.Id === $scope.vehicleTypes[i].Id) {\r\n found = true;\r\n break;\r\n } else {\r\n if ($scope.consignment.VehicleType.Order > $scope.vehicleTypes[i].Order) {\r\n pushAt++;\r\n }\r\n }\r\n }\r\n\r\n if (!found) {\r\n $scope.vehicleTypes.splice(pushAt, 0, $scope.consignment.VehicleType);\r\n }\r\n }\r\n\r\n if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n if ($scope.consignmentMap.getLocations().length == 0) {\r\n $timeout(function () {\r\n $scope.consignmentMap.triggerResize();\r\n\r\n var supplierAlreadyExists = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress(i) + ',' + $scope.consignment.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.consignment.ConsignmentAddresses[i].Address.Latitude,\r\n lng: $scope.consignment.ConsignmentAddresses[i].Address.Longitude,\r\n object: $scope.consignment.ConsignmentAddresses[i].Address\r\n }\r\n\r\n $scope.consignmentMap.addLocation(address,\r\n {\r\n 'dateTime': $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime,\r\n 'dateTimeLocked': $scope.consignment.ConsignmentAddresses[i].IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address === location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n for (var i = 0; i < $scope.manifestSuppliers.length; i++) {\r\n if ($scope.manifestSuppliers[i].SupplierUsers[0] && $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation) addSupplierLocationToMap($scope.manifestSuppliers[i], $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation, clickinon.google.maps.enums.markerType);\r\n }\r\n\r\n updateDistanceTimesAndPricing();\r\n\r\n updateCosting();\r\n });\r\n }\r\n }\r\n }\r\n );\r\n\r\n supplierAlreadyExists = false;\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0] && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation) {\r\n for (var s = 0; s < $scope.manifestSuppliers.length; s++) {\r\n if ($scope.manifestSuppliers[s].Id === $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.Id) supplierAlreadyExists = true;\r\n }\r\n\r\n if (!supplierAlreadyExists) $scope.manifestSuppliers.push($scope.consignment.ConsignmentAddresses[i].Manifest.Supplier);\r\n }\r\n }\r\n }, 1000);\r\n }\r\n }\r\n );\r\n }\r\n\r\n CommonFactory.getConsignmentTypes()\r\n .then(\r\n function (response) {\r\n $scope.consignmentTypes = response;\r\n\r\n if (!$scope.consignment.ConsignmentType) $scope.consignment.ConsignmentType = $scope.consignmentTypes[0];\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getConsignmentFrequencies()\r\n .then(\r\n function (response) {\r\n $scope.consignmentFrequencies = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getWeekDays()\r\n .then(\r\n function (response) {\r\n $scope.weekdays = response;\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n }\r\n );\r\n\r\n CommonFactory.getConsignmentAddressTypes()\r\n .then(\r\n function (response) {\r\n $scope.consignmentAddressTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAdditionalCharges()\r\n .then(\r\n function (response) {\r\n $scope.defaultAdditionalCharges = response;\r\n $scope.additionalCharges = angular.copy($scope.defaultAdditionalCharges);\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CountryFactory.getCountries()\r\n .then(\r\n function () {\r\n $scope.countries = CountryFactory.countries;\r\n }\r\n );\r\n\r\n SupplierFactory.getSuppliers()\r\n .then(\r\n function () {\r\n $scope.suppliers = SupplierFactory.suppliers;\r\n }\r\n );\r\n\r\n SettingsFactory.getAreaAdditionalChargeRules()\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getGlobalSettings()\r\n .then(\r\n function (response) {\r\n $scope.settings = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getMatrices()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrices = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getGlobalAddresses()\r\n .then(\r\n function (response) {\r\n $scope.globalAddresses = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n $timeout(function () {\r\n if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n //if ($scope.consignmentMap.getLocations().length == 0) {\r\n // $timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // var supplierAlreadyExists = false;\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // var address = {\r\n // text: ConsignmentFactory.getFormattedConsignmentAddress(i) + ',' + $scope.consignment.ConsignmentAddresses[i].Address.Country.Name,\r\n // lat: $scope.consignment.ConsignmentAddresses[i].Address.Latitude,\r\n // lng: $scope.consignment.ConsignmentAddresses[i].Address.Longitude,\r\n // object: $scope.consignment.ConsignmentAddresses[i].Address\r\n // }\r\n\r\n // $scope.consignmentMap.addLocation(address,\r\n // {\r\n // 'dateTime': $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime,\r\n // 'dateTimeLocked': $scope.consignment.ConsignmentAddresses[i].IsScheduledStartDateAndTimeLocked,\r\n // 'callback': function (location) {\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // if ($scope.consignment.ConsignmentAddresses[i].Address === location.object) {\r\n // $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n // $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n // }\r\n // }\r\n\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n // $scope.consignmentMap.getDirections(function () {\r\n // for (var i = 0; i < $scope.manifestSuppliers.length; i++) {\r\n // if ($scope.manifestSuppliers[i].SupplierUsers[0] && $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation) addSupplierLocationToMap($scope.manifestSuppliers[i], $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation, clickinon.google.maps.enums.markerType);\r\n // }\r\n\r\n // updateDistanceTimesAndPricing();\r\n\r\n // updateCosting();\r\n // });\r\n // }\r\n // }\r\n // }\r\n // );\r\n\r\n // supplierAlreadyExists = false;\r\n\r\n // if ($scope.consignment.ConsignmentAddresses[i].Manifest && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0] && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation) {\r\n // for (var s = 0; s < $scope.manifestSuppliers.length; s++) {\r\n // if ($scope.manifestSuppliers[s].Id === $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.Id) supplierAlreadyExists = true;\r\n // }\r\n\r\n // if (!supplierAlreadyExists) $scope.manifestSuppliers.push($scope.consignment.ConsignmentAddresses[i].Manifest.Supplier);\r\n // }\r\n // }\r\n // }, 1000);\r\n //}\r\n }, 500);\r\n\r\n $scope.goToDetails = function () {\r\n $scope.stage = 'details';\r\n }\r\n\r\n $scope.goToChangeLog = function () {\r\n $scope.stage = 'change-log';\r\n }\r\n\r\n $scope.goToAddresses = function () {\r\n $scope.manifestSuppliers = [];\r\n\r\n if (($scope.consignmentForm.txtConsignment_Customer && $scope.consignmentForm.txtConsignment_Customer.$invalid) || $scope.consignmentForm.txtConsignment_ContactName.$invalid || $scope.consignmentForm.ddlConsignment_VehicleType.$invalid) {\r\n $scope.ConsignmentDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.SaveContact) {\r\n var contactNameAlreadyExists = false;\r\n\r\n for (var j = 0; j < $scope.selectedCustomer.Contacts.length; j++) {\r\n if ($scope.consignment.BookingContact !== null) {\r\n if ($scope.consignment.BookingContact.Id !== $scope.selectedCustomer.Contacts[j].Id) {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n }\r\n\r\n if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n if ($scope.consignmentMap.getLocations().length == 0) {\r\n $timeout(function () {\r\n $scope.consignmentMap.triggerResize();\r\n\r\n var supplierAlreadyExists = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress(i) + ',' + $scope.consignment.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.consignment.ConsignmentAddresses[i].Address.Latitude,\r\n lng: $scope.consignment.ConsignmentAddresses[i].Address.Longitude,\r\n object: $scope.consignment.ConsignmentAddresses[i].Address\r\n }\r\n\r\n $scope.consignmentMap.addLocation(address,\r\n {\r\n 'dateTime': $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime,\r\n 'dateTimeLocked': $scope.consignment.ConsignmentAddresses[i].IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address === location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n for (var i = 0; i < $scope.manifestSuppliers.length; i++) {\r\n if ($scope.manifestSuppliers[i].SupplierUsers[0] && $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation) addSupplierLocationToMap($scope.manifestSuppliers[i], $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation, clickinon.google.maps.enums.markerType);\r\n }\r\n\r\n updateDistanceTimesAndPricing();\r\n\r\n updateCosting();\r\n });\r\n }\r\n }\r\n }\r\n );\r\n\r\n supplierAlreadyExists = false;\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0] && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation) {\r\n for (var s = 0; s < $scope.manifestSuppliers.length; s++) {\r\n if ($scope.manifestSuppliers[s].Id === $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.Id) supplierAlreadyExists = true;\r\n }\r\n\r\n if (!supplierAlreadyExists) $scope.manifestSuppliers.push($scope.consignment.ConsignmentAddresses[i].Manifest.Supplier);\r\n }\r\n }\r\n }, 1000);\r\n }\r\n\r\n //if (!$scope.consignmentMap.getMap()) {\r\n // $scope.consignmentMap.initialize('divConsignmentMap', true, function () {\r\n // $timeout(function () {\r\n // $scope.mapsLoaded = true;\r\n\r\n // debugger;\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n // });\r\n // });\r\n //}\r\n\r\n $scope.stage = 'addresses';\r\n }\r\n\r\n $scope.changeVehicleType = function () {\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n\r\n updateDistanceTimesAndPricing();\r\n\r\n updateCosting();\r\n }\r\n\r\n $scope.searchCustomer = function (searchText) {\r\n return CustomerFactory.searchCustomerByNameOrPostcode(searchText);\r\n }\r\n\r\n $scope.customerSelected = function (c) {\r\n $scope.selectedCustomerOnStop = false;\r\n $scope.selectedCustomerIsProFormaAccountCustomer = false;\r\n $scope.selectedCustomerInactiveWarning = false;\r\n $scope.selectedCustomerOverCreditLimitWarning = false;\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.Customer && moment().diff(c.LastConsignmentBookedDate, 'months') > __INACTIVE_CUSTOMER_WARNING_MONTHS && moment().diff(c.DateCreated, 'months') > __INACTIVE_CUSTOMER_WARNING_MONTHS) {\r\n $scope.selectedCustomerInactiveWarning = true;\r\n }\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.Customer && c.OutstandingBalance > c.CreditLimit) {\r\n $scope.selectedCustomerOverCreditLimitWarning = true;\r\n }\r\n\r\n $scope.consignment.CustomerBranch = null;\r\n $scope.consignment.ContactName = null;\r\n $scope.consignment.ContactPhoneNumber = null;\r\n $scope.consignment.ContactEmailAddress = null;\r\n\r\n $scope.selectedCustomer = c;\r\n $scope.consignment.Customer = {\r\n 'Id': c.Id,\r\n 'Name': c.Name,\r\n 'NameShownOnInvoice': c.NameShownOnInvoice,\r\n 'PhoneNumber': c.PhoneNumber,\r\n 'CostCentre': c.CostCentre,\r\n 'AccountType': c.AccountType,\r\n 'Addresses': c.Addresses,\r\n 'AutoEmailOnCreate': c.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': c.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': c.AutoEmailOnDelivery,\r\n 'UseContactEmail': c.UseContactEmail,\r\n 'BookingEmailAddress': c.BookingEmailAddress\r\n\r\n };\r\n $scope.existingAddresses = [];\r\n $scope.contacts = $scope.selectedCustomer.Contacts;\r\n $scope.contactEmails = [];\r\n\r\n for (var i = 0; i < $scope.contacts.length; i++) {\r\n if ($scope.contacts[i].Email) $scope.contactEmails.push($scope.contacts[i]);\r\n }\r\n\r\n $scope.contactEmails.push({ Id: '-1', Email: '-- Other Email Address --' });\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if (c.Address != null) {\r\n $scope.existingAddresses.push(c.Address);\r\n }\r\n if (c.Addresses != null) {\r\n for (var i = 0; i < c.Addresses.length; i++) {\r\n if (c.Addresses[i].Id != c.Address.Id) {\r\n $scope.existingAddresses.push(c.Addresses[i]);\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.Id) {\r\n $scope.consignment.Customer.Contacts = null;\r\n delete $scope.consignment.BookingContact.Id;\r\n\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n delete $scope.consignment.ConsignmentAddresses[a].Address.Id;\r\n }\r\n }\r\n\r\n $scope.customerNotes = ($scope.consignment.CustomerBranch) ? $scope.consignment.CustomerBranch.Notes : ($scope.selectedCustomer) ? $scope.selectedCustomer.Notes : '';\r\n }\r\n\r\n $scope.changeBranch = function () {\r\n $scope.customerNotes = ($scope.consignment.CustomerBranch) ? $scope.consignment.CustomerBranch.Notes : ($scope.selectedCustomer) ? $scope.selectedCustomer.Notes : '';\r\n $scope.contacts = ($scope.consignment.CustomerBranch) ? $scope.consignment.CustomerBranch.Contacts : ($scope.selectedCustomer) ? $scope.selectedCustomer.Contacts : [];\r\n $scope.contactEmails = [];\r\n\r\n for (var i = 0; i < $scope.contacts.length; i++) {\r\n if ($scope.contacts[i].Email) $scope.contactEmails.push($scope.contacts[i]);\r\n }\r\n\r\n $scope.contactEmails.push({ Id: '-1', Email: '-- Other Email Address --' });\r\n }\r\n\r\n $scope.selectBookingContact = function () {\r\n if ($scope.consignment.BookingContact) {\r\n $scope.consignment.ContactName = $scope.consignment.BookingContact.Name;\r\n $scope.consignment.ContactPhoneNumber = $scope.consignment.BookingContact.Phone;\r\n $scope.consignment.ContactEmailAddress = $scope.consignment.BookingContact.Email;\r\n $scope.consignment.SaveContact = false;\r\n }\r\n else {\r\n $scope.consignment.ContactName = '';\r\n $scope.consignment.ContactPhoneNumber = '';\r\n $scope.consignment.ContactEmailAddress = '';\r\n $scope.consignment.SaveContact = true;\r\n }\r\n }\r\n\r\n $scope.addNewConsignmentAddress = function () {\r\n var initialConsignmentAddressType = null;\r\n\r\n for (var i = 0; i < $scope.consignmentAddressTypes.length; i++) {\r\n if ($scope.consignmentAddressTypes[i].Name.toUpperCase() == 'COLLECTION' && (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length == 0 || ($scope.consignment.GlobalAddress && $scope.consignment.ConsignmentAddresses.length === 2))) {\r\n initialConsignmentAddressType = $scope.consignmentAddressTypes[i];\r\n break;\r\n }\r\n else if ($scope.consignmentAddressTypes[i].Name.toUpperCase() == 'DELIVERY') {\r\n initialConsignmentAddressType = $scope.consignmentAddressTypes[i];\r\n break;\r\n }\r\n }\r\n\r\n $scope.consignmentAddress = { 'ConsignmentAddressType': initialConsignmentAddressType, 'Address': { 'Country': $scope.countries[0] } };\r\n $scope.stage = 'address';\r\n $scope.allCollectionLoadDetails = [];\r\n $scope.loadDetails = {};\r\n var counter = 1;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection' && $scope.consignment.ConsignmentAddresses[i].LoadDetails) {\r\n for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n var loadDetails = angular.copy($scope.consignment.ConsignmentAddresses[i].LoadDetails[d]);\r\n loadDetails.id = counter;\r\n\r\n $scope.allCollectionLoadDetails.push(loadDetails);\r\n\r\n counter++;\r\n }\r\n }\r\n }\r\n\r\n $scope.additionalCharges = angular.copy($scope.defaultAdditionalCharges);\r\n\r\n //$timeout(function () {\r\n // var fields = [\r\n // { element: \"txtConsignmentAddress_Address1\", field: \"Line1\", mode: pca.DEFAULT },\r\n // { element: \"txtConsignmentAddress_Address2\", field: \"Line2\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Town\", field: \"City\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_County\", field: \"Province\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Postcode\", field: \"PostalCode\", mode: pca.DEFAULT },\r\n // ];\r\n\r\n // var options = { key: __LOQATE_KEY };\r\n\r\n // $scope.pcaControl = new pca.Address(fields, options);\r\n\r\n // $scope.pcaControl.load();\r\n\r\n // //control.listen(\"load\", function () {\r\n // //custom code\r\n // $scope.pcaControl.listen(\"populate\", function (address) {\r\n // $scope.$apply(function () {\r\n // var addressLine1 = '', addressLine2 = '', addressLine3 = '';\r\n\r\n // if (address.Line5.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3 + ', ' + address.Line4;\r\n // addressLine3 = address.Line5;\r\n // }\r\n // else {\r\n // if (address.Line4.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3;\r\n // addressLine3 = address.Line4;\r\n // }\r\n // else {\r\n // addressLine1 = address.Line1;\r\n // addressLine2 = address.Line2;\r\n // addressLine3 = address.Line3;\r\n // }\r\n // }\r\n\r\n // delete $scope.consignmentAddress.Address.Id;\r\n // $scope.consignmentAddress.Address.CompanyName = (address.Company) ? address.Company : '';\r\n // $scope.consignmentAddress.Address.AddressLine1 = addressLine1;\r\n // $scope.consignmentAddress.Address.AddressLine2 = addressLine2;\r\n // $scope.consignmentAddress.Address.AddressLine3 = addressLine3;\r\n // $scope.consignmentAddress.Address.Town = address.City;\r\n // $scope.consignmentAddress.Address.County = address.Province;\r\n // $scope.consignmentAddress.Address.Postcode = address.PostalCode;\r\n // $scope.consignmentAddress.Address.Country = $scope.countries[0];\r\n // });\r\n // });\r\n // //});\r\n //});\r\n }\r\n\r\n $scope.editConsignmentAddress = function (a, i) {\r\n $scope.consignmentAddress = a;\r\n $scope.consignmentAddress.SelectedExistingAddress = a.Address;\r\n $scope.consignmentAddressIndex = i;\r\n $scope.stage = 'address';\r\n $scope.allCollectionLoadDetails = [];\r\n $scope.loadDetails = {};\r\n $scope.hideAddressSearch = true;\r\n var counter = 1;\r\n\r\n if ($scope.consignmentAddress.IsScheduledStartDateAndTimeLocked) {\r\n $scope.consignmentAddress.ScheduledStartDate = moment($scope.consignmentAddress.ScheduledStartDateAndTime);\r\n $scope.consignmentAddress.ScheduledStartTime = moment($scope.consignmentAddress.ScheduledStartDateAndTime);\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection' && $scope.consignment.ConsignmentAddresses[i].LoadDetails) {\r\n for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n var loadDetails = angular.copy($scope.consignment.ConsignmentAddresses[i].LoadDetails[d]);\r\n loadDetails.id = counter;\r\n\r\n $scope.allCollectionLoadDetails.push(loadDetails);\r\n\r\n counter++;\r\n }\r\n }\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].LoadDetails) {\r\n for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].LoadDetails[d].existingLoadDetails) {\r\n for (var a = 0; a < $scope.allCollectionLoadDetails.length; a++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].LoadDetails[d].existingLoadDetails.id === $scope.allCollectionLoadDetails[a].id) {\r\n $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].existingLoadDetails.Quantity = $scope.allCollectionLoadDetails[a].Quantity;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.additionalCharges = angular.copy($scope.defaultAdditionalCharges);\r\n\r\n //$timeout(function () {\r\n // var fields = [\r\n // { element: \"txtConsignmentAddress_Address1\", field: \"Line1\", mode: pca.DEFAULT },\r\n // { element: \"txtConsignmentAddress_Address2\", field: \"Line2\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Town\", field: \"City\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_County\", field: \"Province\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Postcode\", field: \"PostalCode\", mode: pca.DEFAULT },\r\n // ];\r\n\r\n // var options = { key: __LOQATE_KEY };\r\n\r\n // $scope.pcaControl = new pca.Address(fields, options);\r\n\r\n // $scope.pcaControl.load();\r\n\r\n // //capturePlus.listen(\"load\", function (control) {\r\n // //custom code\r\n // $scope.pcaControl.listen(\"populate\", function (address) {\r\n // $scope.$apply(function () {\r\n // var addressLine1 = '', addressLine2 = '', addressLine3 = '';\r\n\r\n // if (address.Line5.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3 + ', ' + address.Line4;\r\n // addressLine3 = address.Line5;\r\n // }\r\n // else {\r\n // if (address.Line4.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3;\r\n // addressLine3 = address.Line4;\r\n // }\r\n // else {\r\n // addressLine1 = address.Line1;\r\n // addressLine2 = address.Line2;\r\n // addressLine3 = address.Line3;\r\n // }\r\n // }\r\n\r\n // delete $scope.consignmentAddress.Address.Id;\r\n // $scope.consignmentAddress.Address.CompanyName = (address.Company) ? address.Company : '';\r\n // $scope.consignmentAddress.Address.AddressLine1 = addressLine1;\r\n // $scope.consignmentAddress.Address.AddressLine2 = addressLine2;\r\n // $scope.consignmentAddress.Address.AddressLine3 = addressLine3;\r\n // $scope.consignmentAddress.Address.Town = address.City;\r\n // $scope.consignmentAddress.Address.County = address.Province;\r\n // $scope.consignmentAddress.Address.Postcode = address.PostalCode;\r\n // $scope.consignmentAddress.Address.Country = $scope.countries[0];\r\n // delete $scope.consignmentAddress.Address.Latitude;\r\n // delete $scope.consignmentAddress.Address.Longitude;\r\n // });\r\n // });\r\n // //});\r\n //});\r\n }\r\n\r\n $scope.pickupASAP = function () {\r\n // Add 30 minutes to the current time\r\n $scope.consignmentAddress.ScheduledStartDate = moment().add(30, 'm');\r\n $scope.consignmentAddress.ScheduledStartTime = moment().add(30, 'm');\r\n $scope.consignmentAddress.ScheduledStartDateAndTime = moment().add(30, 'm');\r\n $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked = true;\r\n }\r\n\r\n $scope.clearManuallySetDateTime = function () {\r\n $scope.consignmentAddress.ScheduledStartDate = null;\r\n $scope.consignmentAddress.ScheduledStartTime = null;\r\n $scope.consignmentAddress.ScheduledStartDateAndTime = null;\r\n $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked = false;\r\n }\r\n\r\n $scope.dateManuallySet = function () {\r\n //$scope.formatManualDate();\r\n $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked = true;\r\n }\r\n\r\n $scope.unlockConsignmentAddressDateTime = function (consignmentAddress, index) {\r\n consignmentAddress.IsScheduledStartDateAndTimeLocked = false;\r\n\r\n if (index = 0) {\r\n var atLeastOneAddressLocked = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].IsScheduledStartDateAndTimeLocked) {\r\n atLeastOneAddressLocked = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneAddressLocked) {\r\n consignmentAddress.ScheduledStartDate = null;\r\n consignmentAddress.ScheduledStartTime = null;\r\n consignmentAddress.ScheduledStartDateAndTime = null;\r\n }\r\n }\r\n else {\r\n consignmentAddress.ScheduledStartDate = null;\r\n consignmentAddress.ScheduledStartTime = null;\r\n consignmentAddress.ScheduledStartDateAndTime = null;\r\n }\r\n\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress(consignmentAddress) + ',' + consignmentAddress.Address.Country.Name,\r\n lat: consignmentAddress.Address.Latitude,\r\n lng: consignmentAddress.Address.Longitude,\r\n object: consignmentAddress.Address\r\n }\r\n\r\n consignmentAddress.Address.CountryId = consignmentAddress.Address.Country.Id;\r\n\r\n var options = {\r\n 'dateTime': (consignmentAddress.IsScheduledStartDateAndTimeLocked) ? consignmentAddress.ScheduledStartDateAndTime : null,\r\n 'dateTimeLocked': consignmentAddress.IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address == location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n }\r\n }\r\n\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n };\r\n\r\n $scope.consignmentMap.updateLocation(index, address, options);\r\n }\r\n\r\n $scope.searchExistingAddresses = function (searchText) {\r\n return CustomerFactory.searchCustomersExistingAddress($scope.selectedCustomer.Id, searchText);\r\n }\r\n\r\n //$scope.existingAddressSelected = function () {\r\n // if ($scope.consignmentAddress.SelectedExistingAddress) {\r\n // angular.copy($scope.consignmentAddress.SelectedExistingAddress, $scope.consignmentAddress.Address);\r\n // }\r\n //}\r\n\r\n $scope.onAddressSearchChange = function (searchText) {\r\n $scope.consignmentAddress.Address.Postcode = searchText;\r\n }\r\n\r\n $scope.addressSelected = function (address, type) {\r\n if (type === 'EXTERNAL') {\r\n return PostcodeLookupFactory.get(address.id)\r\n .then(\r\n function (address) {\r\n $scope.consignmentAddress.Address = {};\r\n\r\n if (!address.data.result.organisation_name) {\r\n $scope.consignmentAddress.Address.AddressLine1 = address.data.result.line_1;\r\n $scope.consignmentAddress.Address.AddressLine2 = address.data.result.line_2;\r\n $scope.consignmentAddress.Address.AddressLine3 = address.data.result.line_3;\r\n }\r\n else {\r\n $scope.consignmentAddress.Address.CompanyName = address.data.result.line_1;\r\n $scope.consignmentAddress.Address.AddressLine1 = address.data.result.line_2;\r\n $scope.consignmentAddress.Address.AddressLine2 = address.data.result.line_3;\r\n }\r\n\r\n $scope.consignmentAddress.Address.Town = address.data.result.post_town;\r\n $scope.consignmentAddress.Address.County = address.data.result.county;\r\n $scope.consignmentAddress.Address.Postcode = address.data.result.postcode;\r\n $scope.consignmentAddress.Address.Country = $scope.countries[0];\r\n\r\n return address;\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n else {\r\n $scope.consignmentAddress.Address = address;\r\n\r\n //angular.copy($scope.consignmentAddress.SelectedExistingAddress, $scope.consignmentAddress.Address);\r\n }\r\n }\r\n\r\n $scope.selectAccountAddress = function () {\r\n $scope.consignmentAddress.SelectedExistingAddress = $scope.selectedCustomer.Address;\r\n\r\n angular.copy($scope.consignmentAddress.SelectedExistingAddress, $scope.consignmentAddress.Address);\r\n }\r\n\r\n $scope.searchPostcodeFinder = function (searchText) {\r\n //$scope.consignmentAddress.Address.Postcode = searchText;\r\n\r\n //document.getElementsByName('txtConsignmentAddress_Postcode')[0].focus();\r\n\r\n //$timeout(function () {\r\n // $scope.pcaControl.autocomplete.dblclick();\r\n //}, 50);\r\n\r\n return PostcodeLookupFactory.search(searchText)\r\n .then(\r\n function (response) {\r\n var addresses = [];\r\n\r\n for (var i = 0; i < response.data.result.hits.length; i++) {\r\n var address = response.data.result.hits[i];\r\n\r\n address.ShortAddress = address.suggestion;\r\n address.Postcode = address.suggestion.substring(address.suggestion.lastIndexOf(',') + 1);\r\n\r\n addresses.push(address);\r\n }\r\n\r\n return addresses;\r\n }\r\n );\r\n }\r\n\r\n $scope.addressChanged = function () {\r\n if ($scope.consignmentAddress.SelectedExistingAddress) {\r\n if (clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.CompanyName) == $scope.consignmentAddress.Address.CompanyName &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.AddressLine1) == $scope.consignmentAddress.Address.AddressLine1 &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.AddressLine2) == $scope.consignmentAddress.Address.AddressLine2 &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.AddressLine3) == $scope.consignmentAddress.Address.AddressLine3 &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.Town) == $scope.consignmentAddress.Address.Town &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.County) == $scope.consignmentAddress.Address.County &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.Postcode) == $scope.consignmentAddress.Address.Postcode &&\r\n angular.equals($scope.consignmentAddress.SelectedExistingAddress.Country, $scope.consignmentAddress.Address.Country)) {\r\n\r\n $scope.consignmentAddress.Address.Id = $scope.consignmentAddress.SelectedExistingAddress.Id;\r\n }\r\n else {\r\n delete $scope.consignmentAddress.Address.Id;\r\n $scope.consignmentAddress.Address.Latitude = null;\r\n $scope.consignmentAddress.Address.Longitude = null;\r\n }\r\n }\r\n else {\r\n delete $scope.consignmentAddress.Address.Id;\r\n $scope.consignmentAddress.Address.Latitude = null;\r\n $scope.consignmentAddress.Address.Longitude = null;\r\n }\r\n }\r\n\r\n $scope.addAddressToCustomer = function () {\r\n if ($scope.consignmentAddress.SaveToCustomerRecord) {\r\n if (!$scope.consignment.Customer.Addresses) $scope.consignment.Customer.Addresses = [];\r\n\r\n $scope.consignment.Customer.Addresses.push($scope.consignmentAddress.Address);\r\n }\r\n else {\r\n if (!$scope.consignment.Customer.Addresses[$scope.consignment.Customer.Addresses.length - 1].Id) {\r\n $scope.consignment.Customer.Addresses.pop();\r\n }\r\n }\r\n }\r\n\r\n $scope.priceManuallySet = function () {\r\n $scope.consignment.PriceManuallySet = true;\r\n }\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName != null && address.CompanyName != '') {\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 != null && address.AddressLine1 != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town != null && address.Town != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode != null && address.Postcode != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.closeConsignmentLoadDetailsNotAddedWarning = function ($event) {\r\n AtlasModalFactory.close('divConsignmentLoadDetailsNotAdded');\r\n if ($event) $event.stopPropagation();\r\n return false;\r\n }\r\n\r\n $scope.clearLoadDetailsAndUpdateAddressList = function () {\r\n $scope.loadDetails = {};\r\n AtlasModalFactory.close('divConsignmentLoadDetailsNotAdded');\r\n $scope.updateAddressList();\r\n }\r\n\r\n $scope.onAddressSearchBlur = function (searchText) {\r\n $scope.consignmentAddress.Address.Postcode = searchText;\r\n $scope.hideAddressSearch = true;\r\n }\r\n\r\n $scope.updateAddressList = function () {\r\n if ($scope.consignmentForm.txtConsignmentAddress_Address1.$invalid || $scope.consignmentForm.txtConsignmentAddress_Town.$invalid || $scope.consignmentForm.txtConsignmentAddress_Postcode.$invalid || ((!$scope.consignmentAddress.LoadDetails || $scope.consignmentAddress.LoadDetails.length === 0) && !$scope.consignmentAddress.NoLoadDetailsGiven && $scope.user.Role == $scope.roles.Customer)) {\r\n $scope.ConsignmentAddressFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.loadDetails.Quantity || $scope.loadDetails.Description) {\r\n AtlasModalFactory.open('divConsignmentLoadDetailsNotAdded');\r\n return false;\r\n }\r\n\r\n if (!$scope.consignment.ConsignmentAddresses) {\r\n $scope.consignment.ConsignmentAddresses = [];\r\n }\r\n\r\n if (($scope.consignmentAddress.ScheduledStartDate && !$scope.consignmentAddress.ScheduledStartTime) || (!$scope.consignmentAddress.ScheduledStartDate && $scope.consignmentAddress.ScheduledStartTime) || ($scope.consignmentAddress.ScheduledStartDate && $scope.consignmentAddress.ScheduledStartTime)) {\r\n if (!$scope.consignmentAddress.ScheduledStartDate) {\r\n $scope.consignmentAddress.ScheduledStartDate = moment();\r\n }\r\n\r\n if (!$scope.consignmentAddress.ScheduledStartTime) {\r\n $scope.consignmentAddress.ScheduledStartTime = moment();\r\n }\r\n\r\n $scope.consignmentAddress.ScheduledStartDateAndTime = moment($scope.consignmentAddress.ScheduledStartDate).hour(moment($scope.consignmentAddress.ScheduledStartTime).hour()).minute(moment($scope.consignmentAddress.ScheduledStartTime).minute());\r\n\r\n if ($scope.consignmentAddress.ScheduledStartToTime) {\r\n $scope.consignmentAddress.ScheduledStartToDateAndTime = moment($scope.consignmentAddress.ScheduledStartDate).hour(moment($scope.consignmentAddress.ScheduledStartToTime).hour()).minute(moment($scope.consignmentAddress.ScheduledStartToTime).minute());\r\n }\r\n else {\r\n $scope.consignmentAddress.ScheduledStartToDateAndTime = null;\r\n }\r\n }\r\n\r\n if ($scope.consignmentAddress.ScheduledStartDateAndTime) {\r\n $scope.consignmentAddress.DisplayScheduledStartDateAndTime = moment($scope.consignmentAddress.ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n\r\n if ($scope.consignmentAddress.ScheduledStartToDateAndTime) {\r\n $scope.consignmentAddress.DisplayScheduledStartToDateAndTime = moment($scope.consignmentAddress.ScheduledStartToDateAndTime).format('HH:mm');\r\n }\r\n\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress($scope.consignmentAddress) + ',' + $scope.consignmentAddress.Address.Country.Name,\r\n lat: $scope.consignmentAddress.Address.Latitude,\r\n lng: $scope.consignmentAddress.Address.Longitude,\r\n object: $scope.consignmentAddress.Address\r\n }\r\n\r\n //if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap', true, function () {\r\n // $timeout(function () {\r\n // $scope.mapsLoaded = true;\r\n // });\r\n //});\r\n\r\n $scope.consignmentAddress.Address.CountryId = $scope.consignmentAddress.Address.Country.Id;\r\n\r\n var options = {\r\n 'dateTime': ($scope.consignmentAddress.IsScheduledStartDateAndTimeLocked) ? $scope.consignmentAddress.ScheduledStartDateAndTime : null,\r\n 'dateTimeLocked': $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address == location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length || ($scope.consignment.GlobalAddress && ($scope.consignment.ConsignmentAddresses.length + 2) === $scope.consignmentMap.getLocations().length)) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n },\r\n 'object': $scope.consignmentAddress\r\n };\r\n\r\n if ($scope.existingConsignment) {\r\n options.recalculate = true;\r\n }\r\n\r\n if ($scope.consignmentAddressIndex != null) {\r\n $scope.consignment.ConsignmentAddresses[$scope.consignmentAddressIndex] = $scope.consignmentAddress;\r\n\r\n $scope.consignmentMap.updateLocation($scope.consignmentAddressIndex, address, options);\r\n }\r\n else {\r\n $scope.consignmentAddress.Signature_FileName = '';\r\n\r\n\r\n\r\n if (!$scope.consignment.GlobalAddress) {\r\n $scope.consignment.ConsignmentAddresses.push($scope.consignmentAddress);\r\n\r\n $scope.consignmentMap.addLocation(address, options);\r\n }\r\n else {\r\n $scope.consignment.ConsignmentAddresses.splice(($scope.consignment.ConsignmentAddresses.length - 1), 0, $scope.consignmentAddress);\r\n\r\n $scope.consignmentMap.insertLocation(($scope.consignmentMap.getLocations().length - 1), address, options);\r\n }\r\n }\r\n\r\n $scope.consignmentAddress = null;\r\n $scope.consignmentAddressIndex = null;\r\n $scope.ConsignmentAddressFormSubmitted = false;\r\n $scope.consignmentForm.txtConsignmentAddress_Address1.$setPristine();\r\n $scope.consignmentForm.txtConsignmentAddress_Town.$setPristine();\r\n $scope.consignmentForm.txtConsignmentAddress_Postcode.$setPristine();\r\n $scope.selectedAdditionalCharges = [];\r\n /*$scope.stage = 'addresses';*/\r\n $scope.stage = 'details';\r\n\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n }\r\n\r\n $scope.copyConsignmentAddress = function (a) {\r\n var initialConsignmentAddressType = null;\r\n\r\n for (var i = 0; i < $scope.consignmentAddressTypes.length; i++) {\r\n if ($scope.consignmentAddressTypes[i].Name.toUpperCase() == 'COLLECTION' && (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length == 0)) {\r\n initialConsignmentAddressType = $scope.consignmentAddressTypes[i];\r\n break;\r\n }\r\n else if ($scope.consignmentAddressTypes[i].Name.toUpperCase() == 'DELIVERY') {\r\n initialConsignmentAddressType = $scope.consignmentAddressTypes[i];\r\n break;\r\n }\r\n }\r\n\r\n $scope.consignmentAddress = {\r\n 'ConsignmentAddressType': a.ConsignmentAddressType,\r\n 'Address': angular.copy(a.Address)\r\n };\r\n $scope.stage = 'address';\r\n $scope.allCollectionLoadDetails = [];\r\n var counter = 1;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection' && $scope.consignment.ConsignmentAddresses[i].LoadDetails) {\r\n for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n var loadDetails = angular.copy($scope.consignment.ConsignmentAddresses[i].LoadDetails[d]);\r\n loadDetails.id = counter;\r\n\r\n $scope.allCollectionLoadDetails.push(loadDetails);\r\n\r\n counter++;\r\n }\r\n }\r\n }\r\n\r\n $scope.additionalCharges = angular.copy($scope.defaultAdditionalCharges);\r\n\r\n //$timeout(function () {\r\n // var fields = [\r\n // { element: \"txtConsignmentAddress_Address1\", field: \"Line1\", mode: pca.DEFAULT },\r\n // { element: \"txtConsignmentAddress_Address2\", field: \"Line2\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Town\", field: \"City\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_County\", field: \"Province\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Postcode\", field: \"PostalCode\", mode: pca.DEFAULT },\r\n // ];\r\n\r\n // var options = { key: __LOQATE_KEY };\r\n\r\n // var control = new pca.Address(fields, options);\r\n\r\n // control.load();\r\n\r\n // //control.listen(\"load\", function () {\r\n // //custom code\r\n // control.listen(\"populate\", function (address) {\r\n // $scope.$apply(function () {\r\n // var addressLine1 = '', addressLine2 = '', addressLine3 = '';\r\n\r\n // if (address.Line5.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3 + ', ' + address.Line4;\r\n // addressLine3 = address.Line5;\r\n // }\r\n // else {\r\n // if (address.Line4.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3;\r\n // addressLine3 = address.Line4;\r\n // }\r\n // else {\r\n // addressLine1 = address.Line1;\r\n // addressLine2 = address.Line2;\r\n // addressLine3 = address.Line3;\r\n // }\r\n // }\r\n\r\n // if (address.Company) $scope.consignmentAddress.Address.CompanyName = address.Company;\r\n // $scope.consignmentAddress.Address.AddressLine1 = addressLine1;\r\n // $scope.consignmentAddress.Address.AddressLine2 = addressLine2;\r\n // $scope.consignmentAddress.Address.AddressLine3 = addressLine3;\r\n // $scope.consignmentAddress.Address.Town = address.City;\r\n // $scope.consignmentAddress.Address.County = address.Province;\r\n // $scope.consignmentAddress.Address.Postcode = address.PostalCode;\r\n // $scope.consignmentAddress.Address.Country = $scope.countries[0];\r\n // });\r\n // });\r\n // //});\r\n //});\r\n }\r\n\r\n $scope.moveConsignmentAddressUp = function (a, i) {\r\n $scope.consignmentForm.$setDirty();\r\n\r\n if (i != 0) {\r\n //$scope.consignment.ConsignmentAddresses.move(i, (i - 1));\r\n $scope.consignment.ConsignmentAddresses = clickinon.utilities.moveElementInArray($scope.consignment.ConsignmentAddresses, i, (i - 1));\r\n\r\n $scope.consignmentMap.moveLocation(i, (i - 1), function () {\r\n if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n });\r\n\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n }\r\n }\r\n\r\n $scope.moveConsignmentAddressDown = function (a, i) {\r\n $scope.consignmentForm.$setDirty();\r\n\r\n if (i != ($scope.consignment.ConsignmentAddresses.length - 1)) {\r\n //$scope.consignment.ConsignmentAddresses.move(i, (i + 1));\r\n $scope.consignment.ConsignmentAddresses = clickinon.utilities.moveElementInArray($scope.consignment.ConsignmentAddresses, i, (i + 1));\r\n\r\n $scope.consignmentMap.moveLocation(i, (i + 1), function () {\r\n if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n });\r\n\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n }\r\n }\r\n\r\n $scope.deleteConsignmentAddress = function (i) {\r\n $scope.consignmentForm.$setDirty();\r\n\r\n var address = ConsignmentFactory.getFormattedConsignmentAddress(i);\r\n\r\n $scope.consignment.ConsignmentAddresses.splice(i, 1);\r\n\r\n $scope.consignmentMap.removeLocation(i, function () {\r\n if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n else {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n }\r\n });\r\n\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n }\r\n\r\n $scope.cancelAddressEdit = function () {\r\n $scope.consignmentAddress = null;\r\n $scope.consignmentAddressIndex = null;\r\n /*$scope.stage = 'addresses';*/\r\n $scope.stage = 'details';\r\n $scope.selectedAdditionalCharges = [];\r\n }\r\n\r\n $scope.addNewLoadDetails = function () {\r\n $scope.loadDetails = {};\r\n }\r\n\r\n $scope.editLoadDetails = function (d, i) {\r\n $scope.loadDetails = angular.copy(d);\r\n $scope.loadDetailsIndex = i;\r\n }\r\n\r\n $scope.updateLoadDetailsList = function () {\r\n if ($scope.consignmentForm.txtConsignment_LoadDetailsQuantity.$invalid || ($scope.consignmentForm.txtConsignment_LoadDetailsDescription && $scope.consignmentForm.txtConsignment_LoadDetailsDescription.$invalid)) {\r\n $scope.ConsignmentLoadDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if (!$scope.consignmentAddress.LoadDetails) {\r\n $scope.consignmentAddress.LoadDetails = [];\r\n }\r\n\r\n if ($scope.consignmentAddress.ConsignmentAddressType.Name === 'Delivery') {\r\n $scope.loadDetails.Description = $scope.loadDetails.existingLoadDetails.Description;\r\n }\r\n\r\n if ($scope.loadDetailsIndex != null) {\r\n $scope.consignmentAddress.LoadDetails[$scope.loadDetailsIndex] = $scope.loadDetails;\r\n }\r\n else {\r\n $scope.consignmentAddress.LoadDetails.push($scope.loadDetails);\r\n }\r\n\r\n $scope.loadDetails = {};\r\n $scope.loadDetailsIndex = null;\r\n $scope.ConsignmentLoadDetailsFormSubmitted = false;\r\n $scope.consignmentForm.txtConsignment_LoadDetailsQuantity.$setPristine();\r\n if ($scope.consignmentForm.txtConsignment_LoadDetailsDescription) $scope.consignmentForm.txtConsignment_LoadDetailsDescription.$setPristine();\r\n if ($scope.consignmentForm.ddlConsignment_ExistingLoadDetails) $scope.consignmentForm.ddlConsignment_ExistingLoadDetails.$setPristine();\r\n }\r\n\r\n $scope.deleteLoadDetails = function (i) {\r\n $scope.consignmentAddress.LoadDetails.splice(i, 1);\r\n }\r\n\r\n $scope.cancelLoadDetailsEdit = function () {\r\n $scope.loadDetails = null;\r\n }\r\n\r\n $scope.addNewAdditionalCharge = function () {\r\n $scope.additionalCharge = {};\r\n $scope.additionalChargeChanges = [];\r\n\r\n if ($scope.consignmentAddress.AdditionalCharges) {\r\n $scope.selectedAdditionalCharges = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.AdditionalCharges.length; i++) {\r\n $scope.selectedAdditionalCharges.push($scope.consignmentAddress.AdditionalCharges[i].AdditionalCharge);\r\n $scope.additionalChargeChanges.push({ 'charge': $scope.consignmentAddress.AdditionalCharges[i].AdditionalCharge, 'status': 'EXISTING' });\r\n\r\n for (var j = 0; j < $scope.additionalCharges.length; j++) {\r\n if ($scope.consignmentAddress.AdditionalCharges[i].AdditionalCharge.Id == $scope.additionalCharges[j].Id) {\r\n $scope.additionalCharges[j].checked = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.editAdditionalCharge = function (d, i) {\r\n $scope.additionalCharge = d;\r\n $scope.additionalChargeIndex = i;\r\n }\r\n\r\n $scope.updateAdditionalChargesList = function (charge) {\r\n $scope.consignmentAddress.AdditionalCharges = [];\r\n\r\n for (var i = 0; i < $scope.selectedAdditionalCharges.length; i++) {\r\n $scope.consignmentAddress.AdditionalCharges.push({ AdditionalCharge: $scope.selectedAdditionalCharges[i] });\r\n }\r\n\r\n if ($scope.consignment.Id) {\r\n for (var i = 0; i < $scope.additionalChargeChanges.length; i++) {\r\n if ($scope.additionalChargeChanges[i].status === 'ADDED') {\r\n $scope.consignment.Price = $filter('number')(parseInt($scope.consignment.Price, 10) + parseInt($scope.additionalChargeChanges[i].charge.Price, 10), 2);\r\n $scope.consignment.Cost = $filter('number')(parseFloat($scope.consignment.Cost, 10) + parseInt($scope.additionalChargeChanges[i].charge.Cost, 10), 2);\r\n $scope.costsChanged = true;\r\n }\r\n if ($scope.additionalChargeChanges[i].status === 'REMOVED') {\r\n $scope.consignment.Price = $filter('number')(parseInt($scope.consignment.Price, 10) - parseInt($scope.additionalChargeChanges[i].charge.Price, 10), 2);\r\n $scope.consignment.Cost = $filter('number')(parseFloat($scope.consignment.Cost, 10) - parseInt($scope.additionalChargeChanges[i].charge.Cost, 10), 2);\r\n $scope.costsChanged = true;\r\n }\r\n }\r\n\r\n }\r\n\r\n $scope.additionalCharge = null;\r\n }\r\n\r\n $scope.selectAdditionalCharge = function (charge) {\r\n var found = false;\r\n\r\n for (var i = 0; i < $scope.selectedAdditionalCharges.length; i++) {\r\n if ($scope.selectedAdditionalCharges[i].Id === charge.Id) {\r\n found = true;\r\n $scope.selectedAdditionalCharges.splice(i, 1);\r\n $scope.additionalChargeChanges.push({ 'charge': charge, 'status': 'REMOVED' });\r\n break;\r\n }\r\n }\r\n\r\n if (!found) {\r\n $scope.selectedAdditionalCharges.push(charge);\r\n $scope.additionalChargeChanges.push({ 'charge': charge, 'status': 'ADDED' });\r\n }\r\n }\r\n\r\n $scope.deleteAdditionalCharge = function (i, charge) {\r\n $scope.consignmentAddress.AdditionalCharges.splice(i, 1);\r\n\r\n $scope.additionalCharges.push(charge.AdditionalCharge);\r\n\r\n $scope.additionalCharges = $filter('orderBy')($scope.additionalCharges, 'ChargeFor');\r\n\r\n if ($scope.consignment.Id) {\r\n //$scope.consignment.Price = $filter('number')(parseInt($scope.consignment.Price, 10) - parseInt(charge.AdditionalCharge.Price, 10), 2);\r\n //$scope.consignment.Cost = $filter('number')(parseFloat($scope.consignment.Cost, 10) + parseInt(charge.Cost, 10), 2);\r\n $scope.costsChanged = true;\r\n }\r\n }\r\n\r\n $scope.cancelAdditionalChargeEdit = function () {\r\n $scope.additionalCharge = null;\r\n }\r\n\r\n $scope.changeOptimizeStops = function () {\r\n $scope.consignmentMap.setOptimizeStops($scope.consignment.OptimiseStops);\r\n $scope.consignmentMap.getDirections();\r\n }\r\n\r\n $scope.showQuoteWarning = function ($event) {\r\n var hasCollectionAddress = false;\r\n var hasDeliveryAddress = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length < 2) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection') hasCollectionAddress = true;\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Delivery') hasDeliveryAddress = true;\r\n }\r\n\r\n if (!hasCollectionAddress || !hasDeliveryAddress) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n $scope.MissingCollectionOrDeliveryAddress = true;\r\n return false;\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentIsQuoteWarning');\r\n $event.stopPropagation();\r\n }\r\n\r\n $scope.closeQuoteWarning = function ($event) {\r\n AtlasModalFactory.close('divConsignmentIsQuoteWarning');\r\n $event.stopPropagation();\r\n return false;\r\n }\r\n\r\n $scope.saveQuote = function () {\r\n AtlasModalFactory.close('divConsignmentIsQuoteWarning');\r\n\r\n $scope.manifestSuppliers = [];\r\n\r\n if (($scope.consignmentForm.txtConsignment_Customer && $scope.consignmentForm.txtConsignment_Customer.$invalid) || $scope.consignmentForm.txtConsignment_ContactName.$invalid || $scope.consignmentForm.ddlConsignment_VehicleType.$invalid) {\r\n $scope.ConsignmentDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.SaveContact) {\r\n var contactNameAlreadyExists = false;\r\n\r\n for (var j = 0; j < $scope.selectedCustomer.Contacts.length; j++) {\r\n if ($scope.consignment.BookingContact !== null) {\r\n if ($scope.consignment.BookingContact.Id !== $scope.selectedCustomer.Contacts[j].Id) {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n }\r\n\r\n var hasCollectionAddress = false;\r\n var hasDeliveryAddress = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length < 2) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection') hasCollectionAddress = true;\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Delivery') hasDeliveryAddress = true;\r\n }\r\n\r\n if (!hasCollectionAddress || !hasDeliveryAddress) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n $scope.MissingCollectionOrDeliveryAddress = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length - 1; i++) {\r\n var consignmentAddress = $scope.consignment.ConsignmentAddresses[i];\r\n var nextConsignmentAddress = $scope.consignment.ConsignmentAddresses[(i + 1)];\r\n\r\n if (moment(nextConsignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm').isBefore(moment(consignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm'))) {\r\n $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the next date and time cannot be the same or before as the previous date and time)';\r\n return false;\r\n }\r\n /*\r\n REMOVED AS PER JIRA ITEM ACE-215\r\n */\r\n //else if (moment(nextConsignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm').isSame(moment(consignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm'))) {\r\n // if (!angular.equals(consignmentAddress.Address, nextConsignmentAddress.Address)) {\r\n // $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the next date and time can be the same as the before as the previous date and time, but the addresses must match)';\r\n // return false;\r\n // }\r\n //}\r\n }\r\n\r\n $scope.savingQuote = true;\r\n $scope.isFrequentConsignment = false;\r\n $scope.consignment.IsFrequentConsignment = false;\r\n $scope.errorMessage = null;\r\n\r\n if ($scope.consignment.GlobalAddress) {\r\n $scope.consignment.ConsignmentAddresses.splice(0, 1);\r\n $scope.consignment.ConsignmentAddresses.splice(($scope.consignment.ConsignmentAddresses.length - 1), 1);\r\n }\r\n\r\n ConsignmentFactory.saveQuote($scope.consignment)\r\n .then(\r\n function (consignment) {\r\n $scope.consignmentForm.$setPristine();\r\n $scope.consignmentForm.$setUntouched();\r\n\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.savingQuote = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n\r\n AtlasModalFactory.open('divConsignmentQuoteConfirmation');\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function(response){\r\n $scope.savingQuote = false;\r\n\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.closeConsignmentQuoteConfirmationModal = function () {\r\n AtlasModalFactory.close('divConsignmentQuoteConfirmation');\r\n\t}\r\n\r\n $scope.ignoreRequiredFieldsAndSave = function () {\r\n if (($scope.selectedCustomer.InvoiceSettings[0].PreventConsignmentWithoutPONumber && (!$scope.consignment.PONumber || $scope.consignment.PONumber.length === 0)) || ($scope.selectedCustomer.InvoiceSettings[0].PreventConsignmentWithoutCostCode && (!$scope.consignment.CostCode || $scope.consignment.CostCode.length === 0))) {\r\n return false;\r\n }\r\n\r\n $scope.ignorePORequired = true;\r\n\r\n AtlasModalFactory.close('divConsignmentMissingFieldsConfirmation');\r\n\r\n if ($scope.isFrequentConsignment) {\r\n $scope.openFrequentConsignmentSettings();\r\n }\r\n else {\r\n $scope.saveConsignment();\r\n }\r\n }\r\n\r\n $scope.saveConsignment = function () {\r\n $scope.manifestSuppliers = [];\r\n\r\n if (($scope.consignmentForm.txtConsignment_Customer && $scope.consignmentForm.txtConsignment_Customer.$invalid) || $scope.consignmentForm.txtConsignment_ContactName.$invalid || $scope.consignmentForm.ddlConsignment_VehicleType.$invalid) {\r\n $scope.ConsignmentDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.SaveContact) {\r\n var contactNameAlreadyExists = false;\r\n\r\n for (var j = 0; j < $scope.selectedCustomer.Contacts.length; j++) {\r\n if ($scope.consignment.BookingContact !== null) {\r\n if ($scope.consignment.BookingContact.Id !== $scope.selectedCustomer.Contacts[j].Id) {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n }\r\n\r\n var foundScheduledDateTime = false;\r\n var hasCollectionAddress = false;\r\n var hasDeliveryAddress = false;\r\n\r\n if ($scope.consignmentForm.txtConsignment_Price.$invalid) return false;\r\n\r\n $scope.isFrequentConsignment = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length < 2) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection') hasCollectionAddress = true;\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Delivery') hasDeliveryAddress = true;\r\n }\r\n\r\n if (!hasCollectionAddress || !hasDeliveryAddress) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n $scope.MissingCollectionOrDeliveryAddress = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.CalculateTimes) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime) {\r\n foundScheduledDateTime = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!foundScheduledDateTime) {\r\n $scope.errorMessage = 'Please make sure that at least one of the consignment addresses has a date and time specified';\r\n return false;\r\n }\r\n }\r\n else {\r\n foundScheduledDateTime = true;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if (!$scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime) {\r\n foundScheduledDateTime = false;\r\n break;\r\n }\r\n }\r\n\r\n if (!foundScheduledDateTime) {\r\n $scope.errorMessage = 'Please make sure that all consignment addresses have a date and time specified';\r\n return false;\r\n }\r\n }\r\n\r\n var existingConsignment = ($scope.consignment.Id) ? true : false;\r\n\r\n if (($scope.selectedCustomer.InvoiceSettings[0].IsPONumberRequired && !$scope.ignorePORequired && ($scope.consignment.PONumber === '' || $scope.consignment.PONumber == null)) || ($scope.selectedCustomer && $scope.selectedCustomer.OptionalConsignmentFields && $scope.selectedCustomer.OptionalConsignmentFields.length > 0 && $scope.selectedCustomer.OptionalConsignmentFields[0] && $scope.selectedCustomer.OptionalConsignmentFields[0].ShowCostCode && ($scope.consignment.CostCode === '' || $scope.consignment.CostCode == null))) {\r\n AtlasModalFactory.open('divConsignmentMissingFieldsConfirmation');\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.GlobalAddress) {\r\n $scope.consignment.ConsignmentAddresses.splice(0, 1);\r\n $scope.consignment.ConsignmentAddresses.splice(($scope.consignment.ConsignmentAddresses.length - 1), 1);\r\n }\r\n\r\n var startConsignmentAddress = $scope.consignment.ConsignmentAddresses[0];\r\n //var endConsignmentAddress = $scope.consignment.ConsignmentAddresses[$scope.consignment.ConsignmentAddresses.length - 1];\r\n\r\n //if (moment(endConsignmentAddress.ScheduledStartDateAndTime.format()).isSame(moment(startConsignmentAddress.ScheduledStartDateAndTime.format())) || moment(endConsignmentAddress.ScheduledStartDateAndTime.format()).isBefore(moment(startConsignmentAddress.ScheduledStartDateAndTime.format()))) {\r\n // $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the start date and time cannot be the same or before as the end date and time)';\r\n // return false;\r\n //}\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length - 1; i++) {\r\n var consignmentAddress = $scope.consignment.ConsignmentAddresses[i];\r\n var nextConsignmentAddress = $scope.consignment.ConsignmentAddresses[(i + 1)];\r\n\r\n if (moment(nextConsignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm').isBefore(moment(consignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm'))) {\r\n $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the next date and time cannot be the same or before as the previous date and time)';\r\n return false;\r\n }\r\n /*\r\n REMOVED AS PER JIRA ITEM ACE-215\r\n */\r\n //else if (moment(nextConsignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm').isSame(moment(consignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm'))) {\r\n // if (!angular.equals(consignmentAddress.Address, nextConsignmentAddress.Address)){\r\n // $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the next date and time can be the same as the before as the previous date and time, but the addresses must match)';\r\n // return false;\r\n // }\r\n //}\r\n }\r\n\r\n if ($scope.consignment.Id && $scope.consignment.IsQuote && !$scope.consignmentToQuoteWarningCompleted) {\r\n AtlasModalFactory.open('divConsignmentQuoteToConsignmentWarning');\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.Id && $scope.consignment.IsQuote && $scope.consignmentToQuoteWarningCompleted) {\r\n AtlasModalFactory.close('divConsignmentQuoteToConsignmentWarning');\r\n }\r\n\r\n if (!$scope.consignment.Id && !$scope.consignmentBackdatedWarningCompleted && moment(startConsignmentAddress.ScheduledStartDateAndTime.format()).isBefore(moment().format())) {\r\n AtlasModalFactory.open('divConsignmentBackdatedConsignmentWarning');\r\n return false;\r\n }\r\n\r\n if (!$scope.consignment.Id && $scope.consignmentBackdatedWarningCompleted && moment(startConsignmentAddress.ScheduledStartDateAndTime.format()).isBefore(moment().format())) {\r\n AtlasModalFactory.close('divConsignmentBackdatedConsignmentWarning');\r\n }\r\n\r\n $scope.savingConsignment = true;\r\n $scope.consignment.IsQuote = false;\r\n $scope.consignment.IsFrequentConsignment = false;\r\n $scope.creatingManifest = false;\r\n $scope.manifest = null;\r\n $scope.errorMessage = null;\r\n\r\n //FoundationApi.publish('divConsignmentConfirmation', 'open');\r\n //return false;\r\n\r\n ConsignmentFactory.saveConsignment($scope.consignment)\r\n .then(\r\n function (consignment) {\r\n $scope.consignmentForm.$setPristine();\r\n $scope.consignmentForm.$setUntouched();\r\n\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.savingConsignment = false;\r\n $scope.existingConsignment = existingConsignment;\r\n $scope.loadingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignment.RecommendedPrice = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n $scope.consignment.Price = $filter('number')($scope.consignment.Price, 2);\r\n $scope.selectedCustomer = $scope.consignment.Customer;\r\n $scope.existingAddresses = [];\r\n\r\n $rootScope.$emit('title-updated', 'Consignment ' + $scope.consignment.ConsignmentNumber);\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.Address != null) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Address);\r\n }\r\n if ($scope.selectedCustomer.Addresses != null) {\r\n for (var i = 0; i < $scope.selectedCustomer.Addresses.length; i++) {\r\n if ($scope.selectedCustomer.Addresses[i].Id != $scope.selectedCustomer.Address.Id) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Addresses[i]);\r\n }\r\n }\r\n }\r\n $scope.consignment.Customer = {\r\n 'Id': $scope.selectedCustomer.Id,\r\n 'Name': $scope.selectedCustomer.Name,\r\n 'NameShownOnInvoice': $scope.selectedCustomer.NameShownOnInvoice,\r\n 'PhoneNumber': $scope.selectedCustomer.PhoneNumber,\r\n 'CostCentre': $scope.selectedCustomer.CostCentre,\r\n 'AccountType': $scope.selectedCustomer.AccountType,\r\n 'Addresses': $scope.selectedCustomer.Addresses,\r\n 'AutoEmailOnCreate': $scope.selectedCustomer.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': $scope.selectedCustomer.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': $scope.selectedCustomer.AutoEmailOnDelivery,\r\n 'UseContactEmail': c.UseContactEmail,\r\n 'BookingEmailAddress': c.BookingEmailAddress\r\n };\r\n\r\n var unassignedConsignmentAddress = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n }\r\n\r\n var manifestAlreadyAdded = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses[i].Manifest) {\r\n unassignedConsignmentAddress = true;\r\n }\r\n else {\r\n $scope.consignmentHasManifests = true;\r\n\r\n for (var m = 0; m < $scope.consignmentManifests.length; m++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest.Id === $scope.consignmentManifests[m].Id) manifestAlreadyAdded = true;\r\n }\r\n\r\n if (!manifestAlreadyAdded) $scope.consignmentManifests.push($scope.consignment.ConsignmentAddresses[i].Manifest);\r\n }\r\n }\r\n\r\n if (!unassignedConsignmentAddress && $scope.consignmentManifests.length === 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentManifests[0].NumberOfConsignmentAddresses) {\r\n $scope.consignmentManifestOneToOneRelationship = true;\r\n }\r\n\r\n //$timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n\r\n //}, 1000);\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n\r\n if (ConsignmentFactory.copyConsignmentId) {\r\n delete $scope.consignment.Id;\r\n delete $scope.consignment.ConsignmentNumber;\r\n delete $scope.consignment.ConsignmentReference;\r\n delete $scope.consignment.ChangeLogs;\r\n delete $scope.consignment.Supplier;\r\n delete $scope.consignment.InvoiceDate;\r\n delete $scope.consignment.InvoiceNumber;\r\n delete $scope.consignment.DateCreated;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].Id;\r\n delete $scope.consignment.ConsignmentAddresses[i].Manifest;\r\n delete $scope.consignment.ConsignmentAddresses[i].LoadDetails;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsOnRoute;\r\n delete $scope.consignment.ConsignmentAddresses[i].StartTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].HasArrived;\r\n delete $scope.consignment.ConsignmentAddresses[i].ArrivalTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsCompleted;\r\n delete $scope.consignment.ConsignmentAddresses[i].CompletionTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].NotesFromSupplier;\r\n delete $scope.consignment.ConsignmentAddresses[i].SignatureName;\r\n delete $scope.consignment.ConsignmentAddresses[i].Signature_FileName;\r\n delete $scope.consignment.ConsignmentAddresses[i].RowVersion;\r\n\r\n //for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n // delete $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].Id;\r\n //}\r\n }\r\n\r\n ConsignmentFactory.copyConsignmentId = null;\r\n }\r\n\r\n if ($scope.consignmentToQuoteWarningCompleted) updateCosting();\r\n\r\n $scope.consignmentToQuoteWarningCompleted = false;\r\n $scope.consignmentBackdatedWarningCompleted = false;\r\n \r\n $scope.consignmentForm.$setPristine();\r\n\r\n $scope.consignmentConfirmationOpen = true;\r\n AtlasModalFactory.open('divConsignmentConfirmation');\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.savingConsignment = false;\r\n \r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.closeConsignmentQuoteToConsignmentWarningModal = function () {\r\n AtlasModalFactory.close('divConsignmentQuoteToConsignmentWarning');\r\n }\r\n\r\n $scope.closeConsignmentBackdatedConsignmentWarningModal = function () {\r\n AtlasModalFactory.close('divConsignmentBackdatedConsignmentWarning');\r\n\t}\r\n\r\n $scope.markConsignmentToQuoteWarningCompleted = function () {\r\n $scope.consignmentToQuoteWarningCompleted = true;\r\n\r\n $scope.saveConsignment();\r\n }\r\n\r\n $scope.markConsignmentBackdatedWarningCompleted = function () {\r\n $scope.consignmentBackdatedWarningCompleted = true;\r\n\r\n $scope.saveConsignment();\r\n }\r\n\r\n $scope.openFrequentConsignmentSettings = function () {\r\n $scope.isFrequentConsignment = true;\r\n var hasCollectionAddress = false;\r\n var hasDeliveryAddress = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length < 2) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection') hasCollectionAddress = true;\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Delivery') hasDeliveryAddress = true;\r\n }\r\n\r\n if (!hasCollectionAddress || !hasDeliveryAddress) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n $scope.MissingCollectionOrDeliveryAddress = true;\r\n return false;\r\n }\r\n\r\n var existingConsignment = ($scope.consignment.Id) ? true : false;\r\n\r\n if ($scope.selectedCustomer.InvoiceSettings[0].IsPONumberRequired && !$scope.ignorePORequired && ($scope.consignment.PONumber === '' || $scope.consignment.PONumber == null)) {\r\n AtlasModalFactory.open('divConsignmentMissingFieldsConfirmation');\r\n return false;\r\n }\r\n\r\n AtlasModalFactory.open('divFrequentConsignment');\r\n return false; \r\n }\r\n\r\n $scope.closeConsignmentMissingFieldsConfirmationModal = function () {\r\n AtlasModalFactory.close('divConsignmentMissingFieldsConfirmation');\r\n\t}\r\n\r\n $scope.closeFrequentConsignmentModal = function () {\r\n AtlasModalFactory.close('divFrequentConsignment');\r\n\t}\r\n\r\n $scope.saveFrequentConsignment = function () {\r\n $scope.manifestSuppliers = [];\r\n\r\n if (($scope.consignmentForm.txtConsignment_Customer && $scope.consignmentForm.txtConsignment_Customer.$invalid) || $scope.consignmentForm.txtConsignment_ContactName.$invalid || $scope.consignmentForm.ddlConsignment_VehicleType.$invalid) {\r\n $scope.ConsignmentDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.SaveContact) {\r\n var contactNameAlreadyExists = false;\r\n\r\n for (var j = 0; j < $scope.selectedCustomer.Contacts.length; j++) {\r\n if ($scope.consignment.BookingContact !== null) {\r\n if ($scope.consignment.BookingContact.Id !== $scope.selectedCustomer.Contacts[j].Id) {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n }\r\n\r\n $scope.savingConsignment = true;\r\n $scope.consignment.IsQuote = false;\r\n $scope.consignment.IsFrequentConsignment = true;\r\n $scope.consignmentFrequencySettings.WeekDays = [];\r\n\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n if ($scope.weekdays[i].selected) {\r\n $scope.consignmentFrequencySettings.WeekDays.push($scope.weekdays[i]);\r\n }\r\n }\r\n\r\n $scope.consignment.ConsignmentFrequencySettings = [];\r\n $scope.consignment.ConsignmentFrequencySettings.push($scope.consignmentFrequencySettings);\r\n $scope.errorMessage = null;\r\n\r\n if ($scope.consignment.GlobalAddress) {\r\n $scope.consignment.ConsignmentAddresses.splice(0, 1);\r\n $scope.consignment.ConsignmentAddresses.splice(($scope.consignment.ConsignmentAddresses.length - 1), 1);\r\n }\r\n\r\n AtlasModalFactory.close('divFrequentConsignment');\r\n\r\n ConsignmentFactory.saveConsignment($scope.consignment)\r\n .then(\r\n function (consignment) {\r\n $scope.consignmentForm.$setPristine();\r\n $scope.consignmentForm.$setUntouched();\r\n\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.savingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.consignmentForm.$setPristine();\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.savingConsignment = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.deleteConsignment = function () {\r\n $scope.deletingConsignment = true;\r\n $scope.errorMessage = null;\r\n\r\n AtlasModalFactory.close('divDeleteConsignmentConfirmation');\r\n\r\n ConsignmentFactory.deleteConsignment()\r\n .then(\r\n function (consignment) {\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.deletingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n },\r\n function (response) {\r\n $scope.deletingConsignment = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.deletingConsignment = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.openDeleteConsignmentConfirmationModal = function () {\r\n AtlasModalFactory.open('divDeleteConsignmentConfirmation');\r\n }\r\n\r\n $scope.closeDeleteConsignmentConfirmationModal = function () {\r\n AtlasModalFactory.close('divDeleteConsignmentConfirmation');\r\n\t}\r\n\r\n $scope.consignmentHasManifest = function (consignment) {\r\n var consignmentHasManifest = false;\r\n\r\n if ($scope.consignment) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest != null) {\r\n consignmentHasManifest = true;\r\n break;\r\n }\r\n }\r\n } \r\n\r\n return consignmentHasManifest;\r\n }\r\n\r\n $scope.createManifest = function () {\r\n $scope.creatingManifest = true;\r\n var locations = $scope.consignmentMap.getLocations();\r\n var totalDistance = $scope.consignmentMap.getTotalDistance() / 1609.34;\r\n var totalTime = 0;\r\n\r\n $scope.consignmentManifestOneToOneRelationship = true;\r\n\r\n if ($scope.consignment.CreatedBy && $scope.consignment.CreatedBy.Role === AtlasCourierExpress.Enums.Roles.Customer) AtlasModalFactory.close('divCustomerEmail');\r\n\r\n $scope.manifest = ManifestFactory.createNewManifest($scope.consignment.VehicleType, $scope.consignment.ConsignmentAddresses, $scope.consignment.TotalMiles, $scope.consignment.TotalTimeInMinutes);\r\n\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n //$scope.manifest.ConsignmentAddresses[i].ManifestOrder = (i + 1) * 10;\r\n $scope.manifest.ConsignmentAddresses[i].ManifestOrder = $scope.manifest.ConsignmentAddresses[i].ConsignmentOrder;\r\n $scope.manifest.ConsignmentAddresses[i].Consignment = { Id: $scope.consignment.Id };\r\n }\r\n\r\n if ($scope.consignment.Id && !$scope.consignmentManifestOneToOneRelationship) {\r\n var calculatedCost = 0;\r\n\r\n for (var i = 0; i < $scope.selectedCustomer.Matrices.length; i++) {\r\n if ($scope.manifest.VehicleType.Id == $scope.selectedCustomer.Matrices[i].VehicleType.Id && $scope.selectedCustomer.Matrices[i].MatrixType.Name.toUpperCase() == 'COSTING - SUPPLIER') {\r\n if ($scope.selectedCustomer.Matrices[i].MatrixPriceIncrement.Name.toUpperCase() == 'DISTANCE') {\r\n for (var p = 0; p < $scope.selectedCustomer.Matrices[i].PriceMatrices.length; p++) {\r\n if (totalDistance > $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) {\r\n if (totalDistance > $scope.selectedCustomer.Matrices[i].PriceMatrices[p].To) {\r\n calculatedCost += (($scope.selectedCustomer.Matrices[i].PriceMatrices[p].To - $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) / $scope.selectedCustomer.Matrices[i].PriceMatrices[p].Interval) * $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n else {\r\n calculatedCost += ((totalDistance - $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) / $scope.selectedCustomer.Matrices[i].PriceMatrices[p].Interval) * $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < $scope.selectedCustomer.Matrices[i].PriceMatrices.length; p++) {\r\n if (totalTime > $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) {\r\n //if (totalTime > $scope.selectedCustomer.Matrices[i].PriceMatrices[p].To) {\r\n // calculatedCost += (($scope.selectedCustomer.Matrices[i].PriceMatrices[p].To - $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) / $scope.selectedCustomer.Matrices[i].PriceMatrices[p].Interval) * $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n //}\r\n //else {\r\n // calculatedCost += ((totalTime - $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) / $scope.selectedCustomer.Matrices[i].PriceMatrices[p].Interval) * $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n //}\r\n calculatedCost += $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n if (calculatedCost < $scope.selectedCustomer.Matrices[i].MinimumPrice) {\r\n calculatedCost = $scope.selectedCustomer.Matrices[i].MinimumPrice;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.manifest.ConsignmentAddresses) {\r\n for (var a = 0; a < $scope.manifest.ConsignmentAddresses.length; a++) {\r\n if ($scope.manifest.ConsignmentAddresses[a].AdditionalCharges) {\r\n for (var c = 0; c < $scope.manifest.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n calculatedCost += $scope.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Cost;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.manifest.CalculatedCost = $filter('number')(calculatedCost, 2);\r\n $scope.manifest.Cost = $filter('number')(calculatedCost, 2);\r\n }\r\n else {\r\n $scope.manifest.CalculatedCost = $filter('number')($scope.consignment.RecommendedCost, 2);\r\n $scope.manifest.Cost = $filter('number')($scope.consignment.Cost, 2);\r\n }\r\n \r\n\r\n // NOT SURE WHY, BUT THE CUSTOMER MESSAGE IS ONLY AVAILABLE ON 'THIS', RATHER THAN $SCOPE?!\r\n var customerMessage = this.customerMessage;\r\n\r\n ManifestFactory.saveManifest(customerMessage)\r\n .then(\r\n function (manifest) {\r\n $scope.creatingManifest = false;\r\n $scope.manifest = manifest;\r\n\r\n ConsignmentFactory.getConsignment($scope.consignment.Id)\r\n .then(\r\n function () {\r\n $scope.savingConsignment = false;\r\n $scope.existingConsignment = true;\r\n $scope.loadingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignment.RecommendedPrice = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n $scope.consignment.Price = $filter('number')($scope.consignment.Price, 2);\r\n $scope.selectedCustomer = $scope.consignment.Customer;\r\n $scope.existingAddresses = [];\r\n\r\n $rootScope.$emit('title-updated', 'Consignment ' + $scope.consignment.ConsignmentNumber);\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.Address != null) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Address);\r\n }\r\n if ($scope.selectedCustomer.Addresses != null) {\r\n for (var i = 0; i < $scope.selectedCustomer.Addresses.length; i++) {\r\n if ($scope.selectedCustomer.Addresses[i].Id != $scope.selectedCustomer.Address.Id) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Addresses[i]);\r\n }\r\n }\r\n }\r\n $scope.consignment.Customer = {\r\n 'Id': $scope.selectedCustomer.Id,\r\n 'Name': $scope.selectedCustomer.Name,\r\n 'NameShownOnInvoice': $scope.selectedCustomer.NameShownOnInvoice,\r\n 'PhoneNumber': $scope.selectedCustomer.PhoneNumber,\r\n 'CostCentre': $scope.selectedCustomer.CostCentre,\r\n 'AccountType': $scope.selectedCustomer.AccountType,\r\n 'Addresses': $scope.selectedCustomer.Addresses,\r\n 'AutoEmailOnCreate': $scope.selectedCustomer.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': $scope.selectedCustomer.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': $scope.selectedCustomer.AutoEmailOnDelivery,\r\n 'UseContactEmail': $scope.selectedCustomer.UseContactEmail,\r\n 'BookingEmailAddress': $scope.selectedCustomer.BookingEmailAddress\r\n };\r\n\r\n var unassignedConsignmentAddress = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n }\r\n\r\n var manifestAlreadyAdded = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses[i].Manifest) {\r\n unassignedConsignmentAddress = true;\r\n }\r\n else {\r\n $scope.consignmentHasManifests = true;\r\n\r\n for (var m = 0; m < $scope.consignmentManifests.length; m++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest.Id === $scope.consignmentManifests[m].Id) manifestAlreadyAdded = true;\r\n }\r\n\r\n if (!manifestAlreadyAdded) $scope.consignmentManifests.push($scope.consignment.ConsignmentAddresses[i].Manifest);\r\n }\r\n }\r\n\r\n if (!unassignedConsignmentAddress && $scope.consignmentManifests.length === 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentManifests[0].NumberOfConsignmentAddresses) $scope.consignmentManifestOneToOneRelationship = true;\r\n\r\n //$timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n\r\n //}, 1000);\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (ConsignmentFactory.copyConsignmentId) {\r\n delete $scope.consignment.Id;\r\n delete $scope.consignment.ConsignmentNumber;\r\n delete $scope.consignment.ConsignmentReference;\r\n delete $scope.consignment.ChangeLogs;\r\n delete $scope.consignment.Supplier;\r\n delete $scope.consignment.InvoiceDate;\r\n delete $scope.consignment.InvoiceNumber;\r\n delete $scope.consignment.DateCreated;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].Id;\r\n delete $scope.consignment.ConsignmentAddresses[i].Manifest;\r\n delete $scope.consignment.ConsignmentAddresses[i].LoadDetails;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsOnRoute;\r\n delete $scope.consignment.ConsignmentAddresses[i].StartTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].HasArrived;\r\n delete $scope.consignment.ConsignmentAddresses[i].ArrivalTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsCompleted;\r\n delete $scope.consignment.ConsignmentAddresses[i].CompletionTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].NotesFromSupplier;\r\n delete $scope.consignment.ConsignmentAddresses[i].SignatureName;\r\n delete $scope.consignment.ConsignmentAddresses[i].Signature_FileName;\r\n delete $scope.consignment.ConsignmentAddresses[i].RowVersion;\r\n\r\n //for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n // delete $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].Id;\r\n //}\r\n }\r\n\r\n ConsignmentFactory.copyConsignmentId = null;\r\n }\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n $scope.errorMessage = null;\r\n\r\n if ($stateParams.id.length > 0 && !$scope.consignmentConfirmationOpen) {\r\n AtlasModalFactory.open('divManifestConfirmation');\r\n }\r\n },\r\n function (response) {\r\n $scope.creatingManifest = false;\r\n \r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = response.data.Message;\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n } \r\n\r\n $scope.closeDeleteConsignmentConfirmationModal = function(){\r\n AtlasModalFactory.close('divDeleteConsignmentConfirmation');\r\n }\r\n\r\n $scope.closeConsignmentAddressSignatureModal = function () {\r\n AtlasModalFactory.close('divConsignmentAddressSignature');\r\n\t}\r\n\r\n $scope.editManifest = function () {\r\n $state.go('manifest', { 'id': $scope.manifest.Id });\r\n }\r\n\r\n $scope.updateManifestCost = function () {\r\n $scope.updatingManifest = true; \r\n\r\n var manifest = $scope.consignment.ConsignmentAddresses[0].Manifest;\r\n\r\n manifest.CalculatedCost = $filter('number')($scope.consignment.RecommendedCost, 2);\r\n manifest.Cost = $filter('number')($scope.consignment.Cost, 2);\r\n\r\n ManifestFactory.updateManifestCost(manifest)\r\n .then(\r\n function(){\r\n $scope.updatingManifest = false;\r\n $scope.manifestUpdated = true;\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.checkCreateManifestCustomerMessage = function () {\r\n if (!$scope.consignment.CreatedBy || $scope.consignment.CreatedBy.Role !== AtlasCourierExpress.Enums.Roles.Customer) {\r\n $scope.createManifest();\r\n }\r\n else{\r\n AtlasModalFactory.open('divCustomerEmail');\r\n }\r\n }\r\n\r\n $scope.closeCustomerEmailModal = function () {\r\n AtlasModalFactory.close('divCustomerEmail');\r\n\t}\r\n\r\n $scope.getManifestConsignmentNumbers = function(){\r\n return ManifestFactory.getConsignmentNumbers();\r\n }\r\n\r\n $scope.getSupplierManifestOptionText = function (s) {\r\n var text = '';\r\n\r\n text += s.Name + ' - ' + s.Vehicles[0].Make + '/' + s.Vehicles[0].Model + ' (' + s.Vehicles[0].VehicleType.Name + ')';\r\n\r\n return text;\r\n }\r\n\r\n $scope.selectSupplier = function (s) {\r\n $scope.selectedSupplier = s;\r\n }\r\n\r\n $scope.assignSupplier = function () {\r\n if (!$scope.selectedSupplier) {\r\n $scope.errorMessage = 'No supplier selected';\r\n return false;\r\n }\r\n\r\n $scope.assigningSupplier = true;\r\n $scope.errorMessage = null;\r\n\r\n ManifestFactory.manifest.Supplier = $scope.selectedSupplier;\r\n $scope.manifest.Supplier = $scope.selectedSupplier;\r\n\r\n ManifestFactory.saveManifest()\r\n .then(\r\n function (manifest) {\r\n $scope.assigningSupplier = false;\r\n $scope.errorMessage = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.errorMessage = 'An error has occurred.'\r\n }\r\n );\r\n }\r\n\r\n $scope.getReport = function () {\r\n $scope.showReportOptions = true;\r\n $scope.showReport = false;\r\n $scope.showEmailDetailsForReport = false;\r\n\r\n AtlasModalFactory.open('divConsignmentReport');\r\n\r\n //ConsignmentFactory.getReport($scope.consignment.Id)\r\n // .then(\r\n // function (response) {\r\n // var filename = 'Report.pdf';\r\n // var contentDisposition = response.headers('Content-Disposition').split(';');\r\n // for (var i = 0; i < contentDisposition.length; i++) {\r\n // if (contentDisposition[i].indexOf('filename') >= 0) {\r\n // var parts = contentDisposition[i].split('=');\r\n // filename = parts[1].replace('\"', '');\r\n // }\r\n // }\r\n // var file = new Blob([response.data], { type: 'application/pdf' });\r\n // var fileURL = window.URL.createObjectURL(file);\r\n // $scope.report = $sce.trustAsResourceUrl(fileURL);\r\n // //var link = document.createElement('a');\r\n // //angular.element(link)\r\n // // .attr('href', fileURL)\r\n // // //.attr('download', filename)\r\n // // .attr('target', '_blank')\r\n // //link.click();\r\n // },\r\n // function (response) {\r\n // debugger;\r\n // }\r\n // );\r\n }\r\n\r\n $scope.generateReport = function () {\r\n $scope.showReportOptions = false;\r\n $scope.showReport = true;\r\n\r\n ConsignmentFactory.getReport($scope.consignment.Id, $scope.emailReport.ShowPrice, $scope.emailReport.ShowPhotos, $scope.emailReport.ShowSupplierNotes)\r\n .then(\r\n function (response) {\r\n var filename = 'Report.pdf';\r\n var contentDisposition = response.headers('Content-Disposition').split(';');\r\n for (var i = 0; i < contentDisposition.length; i++) {\r\n if (contentDisposition[i].indexOf('filename') >= 0) {\r\n var parts = contentDisposition[i].split('=');\r\n filename = parts[1].replace('\"', '');\r\n }\r\n }\r\n var file = new Blob([response.data], { type: 'application/pdf' });\r\n var fileURL = window.URL.createObjectURL(file);\r\n $scope.report = $sce.trustAsResourceUrl(fileURL);\r\n //var link = document.createElement('a');\r\n //angular.element(link)\r\n // .attr('href', fileURL)\r\n // //.attr('download', filename)\r\n // .attr('target', '_blank')\r\n //link.click();\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.closeConsignmentReportModal = function () {\r\n AtlasModalFactory.close('divConsignmentReport');\r\n\t}\r\n\r\n $scope.showEmailReportDetails = function () {\r\n $scope.showReport = false;\r\n $scope.showEmailDetailsForReport = true;\r\n }\r\n\r\n $scope.sendReportEmail = function () {\r\n $scope.reportEmailErrorMessage = null;\r\n\r\n ConsignmentFactory.sendReportEmail($scope.emailReport.To, $scope.emailReport.Body, $scope.consignment, $scope.emailReport.ShowPrice, $scope.emailReport.ShowPhotos, $scope.emailReport.ShowSupplierNotes);\r\n\r\n AtlasModalFactory.close('divConsignmentReport');\r\n }\r\n\r\n $scope.selectEmailReportTo = function () {\r\n if ($scope.emailReport.ExistingContact) {\r\n if ($scope.emailReport.ExistingContact.Id != '-1') $scope.emailReport.To = $scope.emailReport.ExistingContact.Email;\r\n if ($scope.emailReport.ExistingContact.Id === '-1') $scope.emailReport.To = '';\r\n }\r\n }\r\n\r\n $scope.setToRecommendedPrice = function () {\r\n $scope.consignment.Price = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n }\r\n\r\n $scope.addAdditionalMiscChargeRow = function () {\r\n if (!$scope.consignment.AdditionalCharges) $scope.consignment.AdditionalCharges = [];\r\n\r\n $scope.consignment.AdditionalCharges.push({ Description: '', Cost: $filter('number')(0, 2), Price: $filter('number')(0, 2) });\r\n }\r\n\r\n $scope.removeAdditionalMiscChargeRow = function (index) {\r\n $scope.consignment.RecommendedPrice = $filter('number')(parseFloat($scope.consignment.RecommendedPrice) - $scope.consignment.AdditionalCharges[index].Price, 2);\r\n $scope.consignment.Price = $filter('number')(parseFloat($scope.consignment.Price) - $scope.consignment.AdditionalCharges[index].Price, 2);\r\n\r\n //$scope.calculatedCost = $filter('number')(parseFloat($scope.calculatedCost) - $scope.consignment.AdditionalCharges[index].Cost, 2);\r\n //$scope.cost = $filter('number')(parseFloat($scope.cost) - $scope.consignment.AdditionalCharges[index].Cost, 2);\r\n\r\n $scope.consignment.AdditionalCharges.splice(index, 1);\r\n }\r\n\r\n $scope.changeAdditionalChargePrice = function (newPrice, oldPrice) {\r\n var priceDifference = (parseFloat(newPrice.Price) ? parseFloat(newPrice.Price) : 0) - (parseFloat(oldPrice) ? parseFloat(oldPrice) : 0);\r\n\r\n $scope.consignment.RecommendedPrice = $filter('number') (parseFloat($scope.consignment.RecommendedPrice) + priceDifference, 2);\r\n $scope.consignment.Price = $filter('number')(parseFloat($scope.consignment.Price) + priceDifference, 2);\r\n }\r\n\r\n //$scope.changeAdditionalChargeCost = function (newPrice, oldPrice) {\r\n // var priceDifference = (parseFloat(newPrice.Cost) ? parseFloat(newPrice.Cost) : 0) - (parseFloat(oldPrice) ? parseFloat(oldPrice) : 0);\r\n\r\n // $scope.calculatedCost = $filter('number')(parseFloat($scope.calculatedCost) + priceDifference, 2);\r\n // $scope.cost = $filter('number')(parseFloat($scope.cost) + priceDifference, 2);\r\n //}\r\n\r\n $scope.changeCost = function () {\r\n $scope.costsChanged = true;\r\n }\r\n\r\n $scope.showSignature = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n AtlasModalFactory.open('divConsignmentAddressSignature');\r\n }\r\n\r\n $scope.showGoodsPhotos = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n $scope.goodsPhotos = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.GoodsPhotos.length; i += 3) {\r\n $scope.goodsPhotos.push($scope.consignmentAddress.GoodsPhotos.slice(i, i + 3));\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentAddressGoodsPhotos');\r\n }\r\n\r\n $scope.closeConsignmentAddressGoodsPhotos = function () {\r\n AtlasModalFactory.close('divConsignmentAddressGoodsPhotos');\r\n }\r\n\r\n $scope.showPaperworkPhotos = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n $scope.paperworkPhotos = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.PaperworkPhotos.length; i += 3) {\r\n $scope.paperworkPhotos.push($scope.consignmentAddress.PaperworkPhotos.slice(i, i + 3));\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentAddressPaperworkPhotos');\r\n }\r\n\r\n $scope.closeConsignmentAddressPaperworkPhotos = function () {\r\n AtlasModalFactory.close('divConsignmentAddressPaperworkPhotos');\r\n }\r\n\r\n $scope.duplicateConsignment = function () {\r\n ConsignmentFactory.copyConsignmentId = $scope.consignment.Id;\r\n\r\n $state.go(\"consignment\", { id: null }, { location: true, reload: true });\r\n }\r\n\r\n $scope.openChangeLogModal = function(){\r\n AtlasModalFactory.open('divConsignmentChangeLog');\r\n }\r\n\r\n $scope.closeConsignmentChangeLogModal = function () {\r\n AtlasModalFactory.close('divConsignmentChangeLog');\r\n\t}\r\n\r\n $scope.requestCancellation = function () {\r\n $scope.requestingConsignmentCancellation = true;\r\n $scope.errorMessage = null;\r\n\r\n ConsignmentFactory.cancellationRequest($scope.consignment)\r\n .then(\r\n function (consignment) {\r\n $scope.consignmentForm.$setPristine();\r\n $scope.consignmentForm.$setUntouched();\r\n\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.requestingConsignmentCancellation = false;\r\n $scope.loadingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignment.RecommendedPrice = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n $scope.consignment.Price = $filter('number')($scope.consignment.Price, 2);\r\n $scope.selectedCustomer = $scope.consignment.Customer;\r\n $scope.existingAddresses = [];\r\n\r\n $rootScope.$emit('title-updated', 'Consignment ' + $scope.consignment.ConsignmentNumber);\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.Address != null) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Address);\r\n }\r\n if ($scope.selectedCustomer.Addresses != null) {\r\n for (var i = 0; i < $scope.selectedCustomer.Addresses.length; i++) {\r\n if ($scope.selectedCustomer.Addresses[i].Id != $scope.selectedCustomer.Address.Id) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Addresses[i]);\r\n }\r\n }\r\n }\r\n $scope.consignment.Customer = {\r\n 'Id': $scope.selectedCustomer.Id,\r\n 'Name': $scope.selectedCustomer.Name,\r\n 'NameShownOnInvoice': $scope.selectedCustomer.NameShownOnInvoice,\r\n 'PhoneNumber': $scope.selectedCustomer.PhoneNumber,\r\n 'CostCentre': $scope.selectedCustomer.CostCentre,\r\n 'AccountType': $scope.selectedCustomer.AccountType,\r\n 'Addresses': $scope.selectedCustomer.Addresses,\r\n 'AutoEmailOnCreate': $scope.selectedCustomer.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': $scope.selectedCustomer.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': $scope.selectedCustomer.AutoEmailOnDelivery,\r\n 'UseContactEmail': c.UseContactEmail,\r\n 'BookingEmailAddress': c.BookingEmailAddress\r\n };\r\n\r\n var unassignedConsignmentAddress = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n\r\n var manifestAlreadyAdded = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses[i].Manifest) {\r\n unassignedConsignmentAddress = true;\r\n }\r\n else {\r\n $scope.consignmentHasManifests = true;\r\n\r\n for (var m = 0; m < $scope.consignmentManifests.length; m++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest.Id === $scope.consignmentManifests[m].Id) manifestAlreadyAdded = true;\r\n }\r\n\r\n if (!manifestAlreadyAdded) $scope.consignmentManifests.push($scope.consignment.ConsignmentAddresses[i].Manifest);\r\n }\r\n }\r\n\r\n if (!unassignedConsignmentAddress && $scope.consignmentManifests.length === 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentManifests[0].NumberOfConsignmentAddresses) $scope.consignmentManifestOneToOneRelationship = true;\r\n\r\n //$timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n\r\n //}, 1000);\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n\r\n if (ConsignmentFactory.copyConsignmentId) {\r\n delete $scope.consignment.Id;\r\n delete $scope.consignment.ConsignmentNumber;\r\n delete $scope.consignment.ConsignmentReference;\r\n delete $scope.consignment.ChangeLogs;\r\n delete $scope.consignment.Supplier;\r\n delete $scope.consignment.InvoiceDate;\r\n delete $scope.consignment.InvoiceNumber;\r\n delete $scope.consignment.DateCreated;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].Id;\r\n delete $scope.consignment.ConsignmentAddresses[i].Manifest;\r\n delete $scope.consignment.ConsignmentAddresses[i].LoadDetails;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsOnRoute;\r\n delete $scope.consignment.ConsignmentAddresses[i].StartTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].HasArrived;\r\n delete $scope.consignment.ConsignmentAddresses[i].ArrivalTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsCompleted;\r\n delete $scope.consignment.ConsignmentAddresses[i].CompletionTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].NotesFromSupplier;\r\n delete $scope.consignment.ConsignmentAddresses[i].SignatureName;\r\n delete $scope.consignment.ConsignmentAddresses[i].Signature_FileName;\r\n delete $scope.consignment.ConsignmentAddresses[i].RowVersion;\r\n\r\n //for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n // delete $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].Id;\r\n //}\r\n }\r\n\r\n ConsignmentFactory.copyConsignmentId = null;\r\n }\r\n\r\n $scope.consignmentForm.$setPristine();\r\n\r\n AtlasModalFactory.open('divConsignmentRequestCancellationConfirmation');\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.savingConsignment = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.closeConsignmentRequestCancellationConfirmationModal = function () {\r\n AtlasModalFactory.close('divConsignmentRequestCancellationConfirmation');\r\n\t}\r\n\r\n $scope.closeConsignmentConfirmation = function () {\r\n $scope.consignmentConfirmationOpen = false;\r\n AtlasModalFactory.close('divConsignmentConfirmation');\r\n }\r\n\r\n $scope.changeApplyPostcodePricingRules = function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n }\r\n\r\n $scope.changeBackload = function () {\r\n updateDistanceTimesAndPricing();\r\n\r\n updateCosting();\r\n }\r\n\r\n $scope.showInvoicing = function () {\r\n $scope.showInvoicingSection = !$scope.showInvoicingSection;\r\n }\r\n\r\n $scope.changeGlobalAddress = function (globalAddress) {\r\n if ($scope.previousConsignmentGlobalAddress && !$scope.consignment.GlobalAddress) {\r\n $scope.consignment.ConsignmentAddresses.splice(0, 1);\r\n\r\n $scope.consignmentMap.removeLocation(0, function () {\r\n $scope.consignmentMap.removeLocation(($scope.consignmentMap.getLocations().length - 1), function () {\r\n $scope.consignment.ConsignmentAddresses.splice(($scope.consignment.ConsignmentAddresses.length - 1), 1);\r\n\r\n if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n else {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n if (!$scope.consignment.ConsignmentAddresses) {\r\n $scope.consignment.ConsignmentAddresses = [];\r\n }\r\n\r\n $scope.consignmentAddress = {};\r\n $scope.consignmentAddress.Address = $scope.consignment.GlobalAddress.Address;\r\n\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress($scope.consignmentAddress) + ',' + $scope.consignmentAddress.Address.Country.Name,\r\n lat: $scope.consignmentAddress.Address.Latitude,\r\n lng: $scope.consignmentAddress.Address.Longitude,\r\n object: $scope.consignmentAddress.Address\r\n }\r\n\r\n //if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap', true, function () {\r\n // $timeout(function () {\r\n // $scope.mapsLoaded = true;\r\n // });\r\n //});\r\n\r\n $scope.consignmentAddress.Address.CountryId = $scope.consignmentAddress.Address.Country.Id;\r\n\r\n var options = {\r\n 'dateTime': ($scope.consignmentAddress.IsScheduledStartDateAndTimeLocked) ? $scope.consignmentAddress.ScheduledStartDateAndTime : null,\r\n 'dateTimeLocked': $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address == location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length || ($scope.consignment.GlobalAddress && ($scope.consignment.ConsignmentAddresses.length + 2) === $scope.consignmentMap.getLocations().length)) {\r\n $scope.consignmentMap.getDirections(function () {\r\n $scope.consignment.GlobalAddress.Address.Latitude = location.lat;\r\n $scope.consignment.GlobalAddress.Address.Longitude = location.lng;\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n },\r\n 'object': $scope.consignmentAddress\r\n };\r\n\r\n //var address = {\r\n // text: ConsignmentFactory.getFormattedConsignmentAddress($scope.consignment.GlobalAddress) + ',' + $scope.consignment.GlobalAddress.Address.Country.Name,\r\n // lat: $scope.consignment.GlobalAddress.Address.Latitude,\r\n // lng: $scope.consignment.GlobalAddress.Address.Longitude,\r\n // object: $scope.consignment.GlobalAddress.Address\r\n //}\r\n\r\n //var options = {\r\n // 'dateTime': null,\r\n // 'dateTimeLocked': false,\r\n // 'callback': function (location) {\r\n // $scope.consignment.GlobalAddress.Address.Latitude = location.lat;\r\n // $scope.consignment.GlobalAddress.Address.Longitude = location.lng;\r\n // $scope.consignmentMap.getDirections(function () {\r\n // updateDistanceTimesAndPricing();\r\n // updateCosting();\r\n // });\r\n // },\r\n // 'recalculate': true,\r\n // 'object': $scope.consignment.GlobalAddress\r\n //};\r\n\r\n if ($scope.previousConsignmentGlobalAddress && $scope.previousConsignmentGlobalAddress.Id != $scope.consignment.GlobalAddress.Id) {\r\n $scope.consignment.ConsignmentAddresses.splice(0, 0, $scope.consignmentAddress);\r\n\r\n $scope.consignmentMap.updateLocation(0, address, {\r\n 'callback': function (location) {\r\n $scope.consignment.ConsignmentAddresses.push($scope.consignmentAddress);\r\n\r\n $scope.consignmentMap.updateLocation(($scope.consignmentMap.getLocations().length - 1), address, options);\r\n }\r\n });\r\n \r\n }\r\n else {\r\n if (!$scope.consignmentAddress.ScheduledStartDate) {\r\n $scope.consignmentAddress.ScheduledStartDate = moment();\r\n }\r\n\r\n if (!$scope.consignmentAddress.ScheduledStartTime) {\r\n $scope.consignmentAddress.ScheduledStartTime = moment();\r\n }\r\n\r\n $scope.consignmentAddress.ScheduledStartDateAndTime = moment($scope.consignmentAddress.ScheduledStartDate).hour(moment($scope.consignmentAddress.ScheduledStartTime).hour()).minute(moment($scope.consignmentAddress.ScheduledStartTime).minute());\r\n\r\n if ($scope.consignmentAddress.ScheduledStartDateAndTime) {\r\n $scope.consignmentAddress.DisplayScheduledStartDateAndTime = moment($scope.consignmentAddress.ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n\r\n if ($scope.consignmentAddress.ScheduledStartToDateAndTime) {\r\n $scope.consignmentAddress.DisplayScheduledStartToDateAndTime = moment($scope.consignmentAddress.ScheduledStartToDateAndTime).format('HH:mm');\r\n }\r\n\r\n $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked = true;\r\n $scope.consignment.ConsignmentAddresses.splice(0, 0, $scope.consignmentAddress);\r\n\r\n $scope.consignmentMap.insertLocation(0, address, {\r\n 'dateTime': $scope.consignmentAddress.ScheduledStartDateAndTime,\r\n 'dateTimeLocked': true,\r\n 'callback': function (location) {\r\n var consignmentAddress = angular.copy($scope.consignmentAddress);\r\n\r\n $scope.consignmentAddress = null;\r\n\r\n delete consignmentAddress.ScheduledStartDate;\r\n delete consignmentAddress.ScheduledStartTime;\r\n delete consignmentAddress.ScheduledStartDateAndTime;\r\n delete consignmentAddress.DisplayScheduledStartDateAndTime;\r\n delete consignmentAddress.DisplayScheduledStartToDateAndTime;\r\n consignmentAddress.IsScheduledStartDateAndTimeLocked = false;\r\n\r\n $scope.consignment.ConsignmentAddresses.push(consignmentAddress);\r\n\r\n $scope.consignmentMap.addLocation(address, options);\r\n }\r\n });\r\n \r\n }\r\n }\r\n\r\n $scope.previousConsignmentGlobalAddress = $scope.consignment.GlobalAddress;\r\n }\r\n\r\n function updateDistanceTimes() {\r\n $timeout(function () {\r\n var dateTimeIndex = null;\r\n var locations = $scope.consignmentMap.getLocations();\r\n var totalDistance = $scope.consignmentMap.getTotalDistance() / 1609.34;\r\n var totalTime = 0;\r\n\r\n $scope.consignment.TotalMiles = Math.round(totalDistance);\r\n\r\n if ($scope.consignment.CalculateTimes) {\r\n var route = $scope.consignmentMap.getRoute();\r\n totalTime = $scope.consignmentMap.getTotalTime() / 60;\r\n\r\n $scope.consignment.TotalTimeInMinutes = Math.round(totalTime);\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if (locations[i].datetime) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime = locations[i].datetime;\r\n $scope.consignment.ConsignmentAddresses[i].DisplayScheduledStartDateAndTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n }\r\n }\r\n else {\r\n var duration = moment.duration(moment($scope.consignment.ConsignmentAddresses[$scope.consignment.ConsignmentAddresses.length - 1].ScheduledStartDateAndTime).diff(moment($scope.consignment.ConsignmentAddresses[0].ScheduledStartDateAndTime)));\r\n totalTime = duration.asMinutes();\r\n\r\n $scope.consignment.TotalTimeInMinutes = Math.round(totalTime);\r\n }\r\n });\r\n }\r\n\r\n function updatePricing() {\r\n $timeout(function () {\r\n var locations = $scope.consignmentMap.getLocations();\r\n var totalDistance = $scope.consignmentMap.getTotalDistance() / 1609.34;\r\n var recommendedPrice = 0;\r\n var matrices = null;\r\n var totalTime = 0;\r\n\r\n if ($scope.selectedCustomer) {\r\n matrices = $scope.selectedCustomer.Matrices;\r\n }\r\n else {\r\n matrices = $scope.priceMatrices;\r\n }\r\n\r\n if ($scope.consignment.CalculateTimes) {\r\n var route = $scope.consignmentMap.getRoute();\r\n totalTime = $scope.consignmentMap.getTotalTime() / 60;\r\n }\r\n else {\r\n var duration = moment.duration(moment($scope.consignment.ConsignmentAddresses[$scope.consignment.ConsignmentAddresses.length - 1].ScheduledStartDateAndTime).diff(moment($scope.consignment.ConsignmentAddresses[0].ScheduledStartDateAndTime)));\r\n totalTime = duration.asMinutes();\r\n }\r\n\r\n if ($scope.consignment.VehicleType) {\r\n for (var i = 0; i < matrices.length; i++) {\r\n if ($scope.consignment.VehicleType.Id == matrices[i].VehicleType.Id && matrices[i].MatrixType.Name.toUpperCase() == 'PRICING') {\r\n if (matrices[i].MatrixPriceIncrement.Name.toUpperCase() == 'DISTANCE') {\r\n for (var p = 0; p < matrices[i].PriceMatrices.length; p++) {\r\n if (totalDistance > matrices[i].PriceMatrices[p].From) {\r\n if (totalDistance > matrices[i].PriceMatrices[p].To) {\r\n recommendedPrice += Math.ceil(((matrices[i].PriceMatrices[p].To - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak);\r\n }\r\n else {\r\n recommendedPrice += Math.ceil(((totalDistance - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < matrices[i].PriceMatrices.length; p++) {\r\n if (totalTime > matrices[i].PriceMatrices[p].From) {\r\n //if (totalTime > matrices[i].PriceMatrices[p].To) {\r\n // recommendedPrice += Math.ceil(((matrices[i].PriceMatrices[p].To - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak);\r\n //}\r\n //else {\r\n // recommendedPrice += Math.ceil(((totalTime - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak);\r\n //}\r\n recommendedPrice += matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n if (recommendedPrice < matrices[i].MinimumPrice) {\r\n recommendedPrice = matrices[i].MinimumPrice;\r\n }\r\n }\r\n }\r\n\r\n /*\r\n TO DO:\r\n AREA ADDITIONAL CHARGE RULES\r\n \r\n LOOP THROUGH THE RULES BASED ON THEIR ORDER.\r\n CHECK IF THE CONSIGNMENT VEHICLE IS IN THE RULE *AND* THAT ANY OF THE CONSIGNMENT ADDRESSES POSTCODES ARE IN THE RULE\r\n IF FIND A RULE THEN MULTIPLY THE *BASE* PRICE BY THE RULES PRICE PERCENTAGE\r\n IF THIS PRICE TO ADD IS GREATER THAN THE RULES MAX PRICE ONLY ADD THE MAX PRICE, OTHERWISE ADD THE CALCULATED PRICE\r\n */\r\n\r\n if ($scope.consignment.ApplyPostcodePricingRules) {\r\n for (var r = 0; r < $scope.areaAdditionalChargeRules.length; r++) {\r\n var rule = $scope.areaAdditionalChargeRules[r];\r\n var postcodes = rule.Postcodes.split('\\n');\r\n var exclusions = (rule.PostcodeExclusions) ? rule.PostcodeExclusions.split('\\n') : null;\r\n var exclusionsFound = false;\r\n\r\n for (var v = 0; v < rule.VehicleTypes.length; v++) {\r\n if ($scope.consignment.VehicleType.Id === rule.VehicleTypes[v].Id) {\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n for (var p = 0; p < postcodes.length; p++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(postcodes[p].toUpperCase())) {\r\n if (exclusions) {\r\n for (var e = 0; e < exclusions.length; e++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(exclusions[e].toUpperCase())) {\r\n exclusionsFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!exclusionsFound) {\r\n var areaAdditionalChargePrice = Math.ceil(recommendedPrice * (rule.PricePercentage / 100));\r\n\r\n if (areaAdditionalChargePrice > rule.MaxPrice) {\r\n recommendedPrice += rule.MaxPrice;\r\n }\r\n else {\r\n recommendedPrice += areaAdditionalChargePrice;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargePrice) break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargePrice) break;\r\n }\r\n\r\n if (areaAdditionalChargePrice) break;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses) {\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].AdditionalCharges) {\r\n for (var c = 0; c < $scope.consignment.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n recommendedPrice += $scope.consignment.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Price;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.AdditionalCharges) {\r\n for (var a = 0; a < $scope.consignment.AdditionalCharges.length; a++) {\r\n recommendedPrice += $scope.consignment.AdditionalCharges[a].Price;\r\n }\r\n }\r\n\r\n if ($scope.settings && $scope.settings.BackloadMultiplier > 0 && $scope.consignment.IsBackload) {\r\n recommendedPrice = (recommendedPrice * ($scope.settings.BackloadMultiplier / 100));\r\n }\r\n\r\n if ($scope.settings && $scope.settings.PriceCostMultiplier > 0) {\r\n recommendedPrice = (recommendedPrice * ((100 + $scope.settings.PriceCostMultiplier) / 100));\r\n }\r\n\r\n $scope.consignment.RecommendedPrice = $filter('number')(recommendedPrice, 2);\r\n\r\n //if (!$scope.consignment.PriceManuallySet) {\r\n // $scope.consignment.Price = $filter('number')(recommendedPrice, 2);\r\n //}\r\n\r\n if (!$scope.consignment.Id) {\r\n $scope.consignment.Price = $filter('number')(recommendedPrice, 2);\r\n }\r\n });\r\n }\r\n\r\n function updateDistanceTimesAndPricing() {\r\n updateDistanceTimes();\r\n updatePricing();\r\n }\r\n\r\n function updateCosting() {\r\n if ($scope.consignment.Id && $scope.consignmentHasManifests && !$scope.consignmentManifestOneToOneRelationship) return false;\r\n\r\n $timeout(function () {\r\n var dateTimeIndex = null;\r\n var locations = $scope.consignmentMap.getLocations();\r\n var totalDistance = $scope.consignmentMap.getTotalDistance() / 1609.34;\r\n var totalTime = 0;\r\n\r\n var calculatedCost = 0;\r\n var matrices = null;\r\n\r\n if ($scope.selectedCustomer) {\r\n matrices = $scope.selectedCustomer.Matrices;\r\n }\r\n else {\r\n matrices = $scope.priceMatrices;\r\n }\r\n\r\n if ($scope.consignment.VehicleType) {\r\n for (var i = 0; i < matrices.length; i++) {\r\n if ($scope.consignment.VehicleType.Id == matrices[i].VehicleType.Id && matrices[i].MatrixType.Name.toUpperCase() == 'COSTING - SUPPLIER') {\r\n if (matrices[i].MatrixPriceIncrement.Name.toUpperCase() == 'DISTANCE') {\r\n for (var p = 0; p < matrices[i].PriceMatrices.length; p++) {\r\n if (totalDistance > matrices[i].PriceMatrices[p].From) {\r\n if (totalDistance > matrices[i].PriceMatrices[p].To) {\r\n calculatedCost += ((matrices[i].PriceMatrices[p].To - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n else {\r\n calculatedCost += ((totalDistance - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < matrices[i].PriceMatrices.length; p++) {\r\n if (totalTime > matrices[i].PriceMatrices[p].From) {\r\n //if (totalTime > matrices[i].PriceMatrices[p].To) {\r\n // calculatedCost += ((matrices[i].PriceMatrices[p].To - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak;\r\n //}\r\n //else {\r\n // calculatedCost += ((totalTime - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak;\r\n //}\r\n calculatedCost += matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n if (calculatedCost < matrices[i].MinimumPrice) {\r\n calculatedCost = matrices[i].MinimumPrice;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.ApplyPostcodePricingRules) {\r\n for (var r = 0; r < $scope.areaAdditionalChargeRules.length; r++) {\r\n var rule = $scope.areaAdditionalChargeRules[r];\r\n var postcodes = rule.Postcodes.split('\\n');\r\n var exclusions = (rule.PostcodeExclusions) ? rule.PostcodeExclusions.split('\\n') : null;\r\n var exclusionsFound = false;\r\n\r\n for (var v = 0; v < rule.VehicleTypes.length; v++) {\r\n if ($scope.consignment.VehicleType.Id === rule.VehicleTypes[v].Id) {\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n for (var p = 0; p < postcodes.length; p++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(postcodes[p].toUpperCase())) {\r\n if (exclusions) {\r\n for (var e = 0; e < exclusions.length; e++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(exclusions[e].toUpperCase())) {\r\n exclusionsFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!exclusionsFound) {\r\n var areaAdditionalChargeCost = calculatedCost * (rule.CostPercentage / 100);\r\n\r\n if (areaAdditionalChargeCost > rule.MaxCost) {\r\n calculatedCost += rule.MaxCost;\r\n }\r\n else {\r\n calculatedCost += areaAdditionalChargeCost;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses) {\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].AdditionalCharges) {\r\n for (var c = 0; c < $scope.consignment.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n calculatedCost += $scope.consignment.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Cost;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ($scope.settings && $scope.settings.BackloadMultiplier > 0 && $scope.consignment.IsBackload) {\r\n calculatedCost = (calculatedCost * ($scope.settings.BackloadMultiplier / 100));\r\n }\r\n\r\n if ($scope.settings && $scope.settings.PriceCostMultiplier > 0) {\r\n calculatedCost = (calculatedCost * ((100 + $scope.settings.PriceCostMultiplier) / 100));\r\n }\r\n\r\n $scope.consignment.RecommendedCost = $filter('number')(calculatedCost, 2);\r\n\r\n //if (!$scope.consignment.Id || ($scope.consignment.Id && !$scope.consignmentHasManifests)) {\r\n if (!$scope.consignment.Id) {\r\n $scope.consignment.Cost = $filter('number')(calculatedCost, 2);\r\n }\r\n });\r\n }\r\n\r\n function getMinimumFrequentConsignmentDate() {\r\n var minimumDate = moment();\r\n\r\n if (minimumDate.day() === 0 || minimumDate.day() === 1 || minimumDate.day() === 2) {\r\n minimumDate = minimumDate.add(7, 'd');\r\n }\r\n\r\n while (minimumDate.day() !== 1) {\r\n minimumDate = minimumDate.add(1, 'd');\r\n }\r\n\r\n return minimumDate;\r\n }\r\n\r\n function createCopyFromConsignment() {\r\n delete $scope.consignment.Id;\r\n delete $scope.consignment.ConsignmentNumber;\r\n delete $scope.consignment.ConsignmentReference;\r\n delete $scope.consignment.ConsignmentChangeLogs;\r\n delete $scope.consignment.Supplier;\r\n delete $scope.consignment.InvoiceDate;\r\n delete $scope.consignment.InvoiceNumber;\r\n delete $scope.consignment.DateCreated;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].Id;\r\n delete $scope.consignment.ConsignmentAddresses[i].Manifest;\r\n delete $scope.consignment.ConsignmentAddresses[i].LoadDetails;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsOnRoute;\r\n delete $scope.consignment.ConsignmentAddresses[i].StartTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].HasArrived;\r\n delete $scope.consignment.ConsignmentAddresses[i].ArrivalTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsCompleted;\r\n delete $scope.consignment.ConsignmentAddresses[i].CompletionTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].NotesFromSupplier;\r\n delete $scope.consignment.ConsignmentAddresses[i].SignatureName;\r\n delete $scope.consignment.ConsignmentAddresses[i].Signature_FileName;\r\n delete $scope.consignment.ConsignmentAddresses[i].GoodsPhotos;\r\n delete $scope.consignment.ConsignmentAddresses[i].PaperworkPhotos;\r\n delete $scope.consignment.ConsignmentAddresses[i].NoPaperworkProvided;\r\n delete $scope.consignment.ConsignmentAddresses[i].RowVersion;\r\n\r\n //for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n // delete $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].Id;\r\n //}\r\n\r\n for (var c = 0; c < $scope.consignment.ConsignmentAddresses[i].AdditionalCharges.length; c++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].AdditionalCharges[c].Id;\r\n }\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.AdditionalCharges.length; i++) {\r\n delete $scope.consignment.AdditionalCharges[i].Id;\r\n }\r\n\r\n $scope.consignmentManifests = [];\r\n $scope.consignmentManifestOneToOneRelationship = false;\r\n $scope.manifestChangesRequired = false;\r\n $scope.consignmentHasManifests = false;\r\n\r\n $scope.consignment.InvoiceStatus = AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced;\r\n $scope.consignment.Paid = false;\r\n\r\n $rootScope.$emit('title-updated', 'Consignment');\r\n }\r\n\r\n function addSupplierLocationToMap(supplier, location, markerType) {\r\n var infoContent;\r\n var defaultColour = '#2c6fba';\r\n\r\n if (!markerType) markerType = clickinon.google.maps.enums.markerTypes.PIN;\r\n\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n infoContent = '
Driver: ' + supplier.Name + '
';\r\n\r\n if (location.Manifest) {\r\n //infoContent += '
Vehicle: ' + supplierLocation.Supplier.Manifests[0].VehicleType.Name + '
'\r\n infoContent += '
Vehicle: ' + supplier.Vehicles[0].VehicleType.Name + '
';\r\n infoContent += '
Manifest Number: ' + location.Manifest.ManifestNumber + '
';\r\n infoContent += '
Last Address: ' + location.Manifest.FormattedLastDeliveryAddress + '
';\r\n infoContent += '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.consignmentMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: location.Manifest.StatusColour.HexCode,\r\n fontColour: (location.Manifest.StatusColour.HexCode.indexOf('#595959') >= 0 || location.Manifest.StatusColour.HexCode.indexOf('#2c6fba') >= 0) ? ':#ffffff' : '#000000',\r\n //text: (supplierLocation.Supplier.Manifests.length > 0) ? supplierLocation.Supplier.Manifests[0].VehicleType.IconCode : '',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n else {\r\n infoContent += '
Vehicle: ' + supplier.Vehicles[0].VehicleType.Name + '
';\r\n infoContent += '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.consignmentMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: defaultColour,\r\n fontColour: '#000000',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n }\r\n else {\r\n infoContent = '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.consignmentMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n colour: defaultColour,\r\n fontColour: '#000000',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n } \r\n}]);","manifests.controller('ManifestController', ['$rootScope', '$scope', '$state', '$stateParams', '$timeout', '$filter', '$sce', 'FoundationApi', 'ModalFactory', 'ManifestFactory', 'SupplierFactory', 'ConsignmentFactory', 'UserFactory', 'AtlasUserFactory', 'SettingsFactory', 'AtlasModalFactory', function ($rootScope, $scope, $state, $stateParams, $timeout, $filter, $sce, FoundationApi, ModalFactory, ManifestFactory, SupplierFactory, ConsignmentFactory, UserFactory, AtlasUserFactory, SettingsFactory, AtlasModalFactory) {\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Manifest');\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n $scope.loadingManifest = false;\r\n $scope.suppliers = null;\r\n $scope.manifest = ManifestFactory.createNewManifest(null, [], 0, 0);\r\n $scope.manifestMap = new clickinon.google.maps.Map();\r\n $scope.selectedSupplier = null;\r\n $scope.suppliers = null;\r\n $scope.availableSuppliers = null;\r\n $scope.assigningSupplier = false;\r\n $scope.mapsLoaded = false;\r\n $scope.consignmentAddresses = null;\r\n $scope.loadingConsignmentAddresses = false;\r\n $scope.savingManifest = false;\r\n $scope.deletingManifest = false;\r\n $scope.consignmentAddressesView = 'Details';\r\n $scope.sendingManifest = false;\r\n $scope.consignmentAddress = null;\r\n $scope.selectedDateTime = null;\r\n $scope.costingMatrices = null;\r\n $scope.consignmentAddressCustomerNameFilter = '';\r\n $scope.consignmentAddressesCompleted = [];\r\n $scope.emails = null;\r\n $scope.currentEmail = null;\r\n $scope.currentEmailIndex = null;\r\n $scope.confirmationEmailErrorMessage = null;\r\n $scope.showReport = true;\r\n $scope.showEmailDetailsForReport = false;\r\n $scope.emailReport = {};\r\n $scope.supplierEmails = null;\r\n $scope.reportEmailErrorMessage = null;\r\n $scope.showTraffic = false;\r\n $scope.customerMessage = null;\r\n $scope.areaAdditionalChargeRules = [];\r\n $scope.goodsPhotos = [];\r\n $scope.paperworkPhotos = [];\r\n $scope.canSendToTransportExchange = false;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n $scope.transportExchangeManifestOptions = {\r\n tailLift: false,\r\n timed: false,\r\n notes: null\r\n }\r\n $scope.transportExchangeDefaultSupplier = AtlasCourierExpress.Enums.TransportExchangeDefaultSupplier;\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n }\r\n );\r\n\r\n SettingsFactory.getCostingMatrices()\r\n .then(\r\n function (response) {\r\n $scope.costingMatrices = response;\r\n }\r\n );\r\n\r\n SettingsFactory.getAreaAdditionalChargeRules()\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = response;\r\n }\r\n );\r\n\r\n if ($stateParams.id.length > 0) {\r\n $scope.loadingManifest = true;\r\n\r\n ManifestFactory.getManifest($stateParams.id)\r\n .then(\r\n function () {\r\n SupplierFactory.getSuppliers()\r\n .then(\r\n function () {\r\n $scope.suppliers = SupplierFactory.suppliers;\r\n $scope.availableSuppliers = $scope.suppliers;\r\n\r\n $scope.manifest = ManifestFactory.manifest;\r\n $scope.availableSuppliers = ManifestFactory.getAvailableSuppliers($scope.manifest, $scope.suppliers);\r\n $scope.loadingManifest = false;\r\n $scope.manifest.CalculateTimes = true;\r\n\r\n $rootScope.$emit('title-updated', 'Manifest ' + $scope.manifest.ManifestNumber);\r\n\r\n var found = false;\r\n $scope.supplierEmails = [];\r\n\r\n if ($scope.manifest.Supplier) {\r\n //$scope.selectedSupplier = $scope.manifest.Supplier;\r\n\r\n if ($scope.manifest.Supplier.Email) $scope.supplierEmails.push($scope.manifest.Supplier.Email);\r\n if ($scope.manifest.Supplier.SecondaryEmail) $scope.supplierEmails.push($scope.manifest.Supplier.SecondaryEmail);\r\n\r\n for (var i = 0; i < $scope.supplierEmails.length; i++) {\r\n if ($scope.manifest.Supplier.SupplierUsers[0] && $scope.supplierEmails[i] == $scope.manifest.Supplier.SupplierUsers[0].Email) found = true;\r\n }\r\n\r\n if (!found && $scope.manifest.Supplier.SupplierUsers[0] && $scope.manifest.Supplier.SupplierUsers[0].Email) $scope.supplierEmails.push($scope.manifest.Supplier.SupplierUsers[0].Email);\r\n }\r\n\r\n if ($scope.manifest.VehicleType.TransportExchangeVehicleMappings && $scope.manifest.VehicleType.TransportExchangeVehicleMappings.length > 0) {\r\n $scope.canSendToTransportExchange = true;\r\n }\r\n\r\n $scope.supplierEmails.push('-- Other Email Address --');\r\n\r\n if (!$scope.manifestMap.getMap()) $scope.manifestMap.initialize('divManifestMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n $timeout(function () {\r\n $scope.manifestMap.triggerResize();\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ManifestFactory.getFormattedConsignmentAddress(i) + ',' + $scope.manifest.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.manifest.ConsignmentAddresses[i].Address.Latitude,\r\n lng: $scope.manifest.ConsignmentAddresses[i].Address.Longitude,\r\n object: $scope.manifest.ConsignmentAddresses[i]\r\n }\r\n\r\n $scope.manifestMap.addLocation(address,\r\n { \r\n 'dateTime': (i === 0 ? $scope.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime : null), \r\n 'callback': function (location) {\r\n if ($scope.manifest.ConsignmentAddresses.length > 1 && $scope.manifest.ConsignmentAddresses.length === $scope.manifestMap.getLocations().length) {\r\n $scope.manifestMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n\r\n if ($scope.manifest.Supplier && $scope.manifest.Supplier.SupplierUsers[0] && $scope.manifest.Supplier.SupplierUsers[0].LastKnownLocation) addSupplierLocationToMap($scope.manifest.Supplier, $scope.manifest.Supplier.SupplierUsers[0].LastKnownLocation, clickinon.google.maps.enums.markerType);\r\n });\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n }, 1000);\r\n }\r\n );\r\n },\r\n function () {\r\n $scope.loadingManifest = false;\r\n }\r\n )\r\n }\r\n else {\r\n $timeout(function () {\r\n if (!$scope.manifestMap.getMap()) $scope.manifestMap.initialize('divManifestMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n }, 1000);\r\n }\r\n\r\n $scope.getManifestConsignmentNumbers = function () {\r\n return ManifestFactory.getConsignmentNumbers();\r\n }\r\n\r\n $scope.getConsignmentAddresses = function () {\r\n if ($scope.consignmentAddresses == null) {\r\n $scope.loadingConsignmentAddresses = true;\r\n\r\n ConsignmentFactory.getConsignmentAddressesWithNoManifest()\r\n .then(\r\n function (response) {\r\n $scope.consignmentAddresses = response;\r\n\r\n $scope.loadingConsignmentAddresses = false;\r\n\r\n AtlasModalFactory.open('consignmentAddressesModal');\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.closeConsignmentAddressesModal = function () {\r\n AtlasModalFactory.close('consignmentAddressesModal');\r\n\t}\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName !== null && address.CompanyName !== '') {\r\n if (formattedAddress.length !== 0) formattedAddress += ', ';\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 !== null && address.AddressLine1 !== '') {\r\n if (formattedAddress.length !== 0) formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town !== null && address.Town !== '') {\r\n if (formattedAddress.length !== 0) formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode !== null && address.Postcode !== '') {\r\n if (formattedAddress.length !== 0) formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.costManuallySet = function () {\r\n $scope.manifest.CostManuallySet = true;\r\n }\r\n\r\n $scope.changeVehicleType = function () {\r\n updateDistanceTimesAndPricing();\r\n }\r\n\r\n $scope.moveConsignmentAddressUp = function (a, i) {\r\n //$scope.manifest.ConsignmentAddresses.move(i, (i - 1));\r\n $scope.manifest.ConsignmentAddresses = clickinon.utilities.moveElementInArray($scope.manifest.ConsignmentAddresses, i, (i - 1));\r\n\r\n $scope.manifestMap.moveLocation(i, (i - 1), function () {\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ManifestFactory.getFormattedConsignmentAddress(i) + ',' + $scope.manifest.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.manifest.ConsignmentAddresses[i].Latitude,\r\n lng: $scope.manifest.ConsignmentAddresses[i].Longitude,\r\n object: $scope.manifest.ConsignmentAddresses[i]\r\n }\r\n var options = {\r\n 'dateTime': $scope.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime,\r\n 'callback': updateDistanceTimesAndPricing\r\n };\r\n\r\n $scope.manifestMap.updateLocation(i, address, options);\r\n }\r\n });\r\n }\r\n\r\n $scope.moveConsignmentAddressDown = function (a, i) {\r\n //$scope.manifest.ConsignmentAddresses.move(i, (i + 1));\r\n $scope.manifest.ConsignmentAddresses = clickinon.utilities.moveElementInArray($scope.manifest.ConsignmentAddresses, i, (i + 1));\r\n\r\n $scope.manifestMap.moveLocation(i, (i + 1), function () {\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ManifestFactory.getFormattedConsignmentAddress(i) + ',' + $scope.manifest.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.manifest.ConsignmentAddresses[i].Latitude,\r\n lng: $scope.manifest.ConsignmentAddresses[i].Longitude,\r\n object: $scope.manifest.ConsignmentAddresses[i]\r\n }\r\n var options = {\r\n 'dateTime': (i === 0 ? $scope.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime : null),\r\n 'callback': updateDistanceTimesAndPricing\r\n };\r\n\r\n $scope.manifestMap.updateLocation(i, address, options);\r\n }\r\n });\r\n }\r\n\r\n $scope.deleteConsignmentAddress = function (index) {\r\n $scope.manifest.ConsignmentAddresses.splice(index, 1);\r\n\r\n $scope.manifestMap.removeLocation(index);\r\n\r\n updateDistanceTimesAndPricing();\r\n }\r\n\r\n $scope.addToManifest = function (a, index) {\r\n if (!a.LoadDetails) a.LoadDetails = [];\r\n\r\n if (!a.AdditionalCharges) a.AdditionalCharges = [];\r\n\r\n $scope.manifest.ConsignmentAddresses.push(a);\r\n\r\n if (!$scope.manifest.VehicleType || $scope.manifest.VehicleType.Order < a.Consignment.VehicleType.Order) $scope.manifest.VehicleType = a.Consignment.VehicleType;\r\n\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress(a) + ',' + a.Address.Country.Name,\r\n lat: a.Latitude,\r\n lng: a.Longitude,\r\n object: a\r\n }\r\n\r\n $scope.manifest.CalculateTimes = true;\r\n\r\n if (!$scope.manifestMap.getMap()) $scope.manifestMap.initialize('divManifestMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function (location) {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n if ($scope.manifest.ConsignmentAddresses.length === 1) {\r\n $scope.manifestMap.addLocation(address, \r\n {\r\n 'dateTime': $scope.manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime,\r\n 'callback': function () {\r\n $scope.manifestMap.getDirections(updateDistanceTimesAndPricing);\r\n }\r\n }\r\n );\r\n }\r\n else {\r\n $scope.manifestMap.addLocation(address, \r\n {\r\n 'callback': function () {\r\n $scope.manifestMap.getDirections(updateDistanceTimesAndPricing);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.saveManifest = function () {\r\n $scope.savingManifest = true;\r\n $scope.errorMessage = null;\r\n var openEmailConfirmation = false;\r\n\r\n if ($scope.manifest.ConsignmentAddresses.length < 2) {\r\n $scope.savingManifest = false;\r\n $scope.errorMessage = 'There must be at least 2 consignment addresses on a manifest.';\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n if ($scope.manifest.ConsignmentAddresses[i].isBeingCompleted) {\r\n $scope.consignmentAddressesCompleted.push($scope.manifest.ConsignmentAddresses[i]);\r\n }\r\n }\r\n\r\n ManifestFactory.saveManifest($scope.customerMessage)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n //ManifestFactory.getManifest($scope.manifest.Id)\r\n .then(\r\n function () {\r\n $scope.savingManifest = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n if ($scope.consignmentAddressesCompleted && $scope.consignmentAddressesCompleted.length > 0) {\r\n for(var i = 0; i < $scope.consignmentAddressesCompleted.length; i++){\r\n if($scope.consignmentAddressesCompleted[i].ConsignmentAddressType.Name.toUpperCase() === 'COLLECTION' && $scope.consignmentAddressesCompleted[i].Consignment.Customer.AutoEmailOnCollection){\r\n AtlasModalFactory.open('divConfirmEmails');\r\n break;\r\n }\r\n else if($scope.consignmentAddressesCompleted[i].ConsignmentAddressType.Name.toUpperCase() === 'DELIVERY' && $scope.consignmentAddressesCompleted[i].Consignment.Customer.AutoEmailOnDelivery){\r\n AtlasModalFactory.open('divConfirmEmails');\r\n break;\r\n }\r\n }\r\n\r\n //FoundationApi.publish('divConfirmEmails', 'open');\r\n }\r\n },\r\n function (response) {\r\n $scope.savingManifest = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.savingManifest = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.deleteManifest = function () {\r\n $scope.deletingManifest = true;\r\n $scope.errorMessage = null;\r\n\r\n ManifestFactory.deleteManifest()\r\n .then(\r\n function (manifest) {\r\n AtlasModalFactory.close('divDeleteManifestConfirmation');\r\n \r\n $state.go('control_screen');\r\n },\r\n function (response) {\r\n $scope.deletingManifest = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = response.data.Message;\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.selectSupplier = function (s) {\r\n if ($scope.manifest.Supplier && $scope.manifest.Supplier.Id !== s.Id) {\r\n ManifestFactory.manifest.IsSent = false;\r\n $scope.manifest.IsSent = false;\r\n }\r\n\r\n var found = false;\r\n $scope.supplierEmails = [];\r\n\r\n if ($scope.selectedSupplier && $scope.selectedSupplier.Id === s.Id) {\r\n $scope.selectedSupplier = null;\r\n $scope.canSendToTransportExchange = true;\r\n }\r\n else {\r\n $scope.selectedSupplier = s;\r\n $scope.canSendToTransportExchange = false;\r\n\r\n if ($scope.selectedSupplier.Email) $scope.supplierEmails.push($scope.selectedSupplier.Email);\r\n if ($scope.selectedSupplier.SecondaryEmail) $scope.supplierEmails.push($scope.selectedSupplier.SecondaryEmail);\r\n\r\n for (var i = 0; i < $scope.supplierEmails.length; i++) {\r\n if ($scope.selectedSupplier.SupplierUsers[0] && $scope.supplierEmails[i] == $scope.selectedSupplier.SupplierUsers[0].Email) found = true;\r\n }\r\n\r\n if (!found && $scope.selectedSupplier.SupplierUsers[0] && $scope.selectedSupplier.SupplierUsers[0].Email) $scope.supplierEmails.push($scope.selectedSupplier.SupplierUsers[0].Email);\r\n }\r\n\r\n $scope.supplierEmails.push('-- Other Email Address --');\r\n }\r\n\r\n $scope.assignSupplier = function () {\r\n //if (!$scope.selectedSupplier) {\r\n // $scope.errorMessage = 'No supplier selected';\r\n // return false;\r\n //}\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n\r\n ManifestFactory.manifest.Supplier = $scope.selectedSupplier;\r\n ManifestFactory.manifest.IsSent = false;\r\n delete ManifestFactory.manifest.TransportExchangeManifests;\r\n\r\n $scope.manifest.Supplier = $scope.selectedSupplier;\r\n $scope.manifest.IsSent = false;\r\n delete $scope.manifest.TransportExchangeManifests;\r\n\r\n ManifestFactory.saveManifest()\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n var found = false;\r\n $scope.supplierEmails = [];\r\n\r\n if ($scope.manifest.Supplier) {\r\n //$scope.selectedSupplier = $scope.manifest.Supplier;\r\n\r\n if ($scope.manifest.Supplier.Email) $scope.supplierEmails.push($scope.manifest.Supplier.Email);\r\n if ($scope.manifest.Supplier.SecondaryEmail) $scope.supplierEmails.push($scope.manifest.Supplier.SecondaryEmail);\r\n\r\n for (var i = 0; i < $scope.supplierEmails.length; i++) {\r\n if ($scope.manifest.Supplier.SupplierUsers[0] && $scope.supplierEmails[i] == $scope.manifest.Supplier.SupplierUsers[0].Email) found = true;\r\n }\r\n\r\n if (!found && $scope.manifest.Supplier.SupplierUsers[0] && $scope.manifest.Supplier.SupplierUsers[0].Email) $scope.supplierEmails.push($scope.manifest.Supplier.SupplierUsers[0].Email);\r\n }\r\n\r\n $scope.supplierEmails.push('-- Other Email Address --');\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n \r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n }\r\n\r\n $scope.confirmAssignSupplier = function () {\r\n if ($scope.selectedManifest.Supplier && $scope.selectedManifest.Supplier.Id === $scope.transportExchangeDefaultSupplier.Id) {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n AtlasModalFactory.open('divConfirmAssignSupplier');\r\n return false;\r\n }\r\n else {\r\n $scope.assignSupplier();\r\n }\r\n }\r\n\r\n $scope.cancelAssignSupplier = function ($event) {\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n AtlasModalFactory.open('divAssignSupplier');\r\n if ($event) $event.stopPropagation();\r\n return false;\r\n }\r\n\r\n $scope.closeConfirmAssignSupplier = function () {\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n return false;\r\n }\r\n\r\n $scope.showSendingToTransportExchangeOptions = function () {\r\n $scope.assigningSupplierErrorMessage = null;\r\n\r\n if (moment($scope.manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime).isBefore(moment(), 'day')) {\r\n $scope.assigningSupplierErrorMessage = 'Consignment address scheduled date / time is in the past';\r\n return;\r\n }\r\n\r\n $scope.sendingToTransportExchangeOptions = true;\r\n $scope.transportExchangeManifestOptions.timed = false;\r\n $scope.transportExchangeManifestOptions.notes = '';\r\n var manifestConsignments = [];\r\n var consignmentExists = false;\r\n\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n if ($scope.manifest.ConsignmentAddresses[i].ConsignmentAddressType.Name == 'Delivery' && $scope.manifest.ConsignmentAddresses[i].Timed) {\r\n $scope.transportExchangeManifestOptions.timed = true;\r\n }\r\n\r\n if (manifestConsignments.length == 0) {\r\n manifestConsignments.push($scope.manifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n else {\r\n consignmentExists = false;\r\n\r\n for (var m = 0; m < manifestConsignments.length; m++) {\r\n if ($scope.manifest.ConsignmentAddresses[i].Consignment.Id == manifestConsignments[m].Id) {\r\n consignmentExists = true;\r\n }\r\n }\r\n\r\n if (!consignmentExists) manifestConsignments.push($scope.manifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n }\r\n\r\n for (var m = 0; m < manifestConsignments.length; m++) {\r\n if ($scope.transportExchangeManifestOptions.notes.length > 0) $scope.notes += ' --- ';\r\n\r\n $scope.transportExchangeManifestOptions.notes += manifestConsignments[m].NotesForSupplier;\r\n }\r\n }\r\n\r\n $scope.hideSendingToTransportExchange = function () {\r\n $scope.sendingToTransportExchangeOptions = false;\r\n }\r\n\r\n $scope.sendManifestToTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n $scope.manifest.TransportExchangeManifests = [];\r\n $scope.manifest.TransportExchangeManifests.push($scope.transportExchangeManifestOptions);\r\n\r\n ManifestFactory.sendManifestToTransportExchange($scope.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n }\r\n\r\n $scope.removeFromTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.removeManifestFromTransportExchange($scope.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n }\r\n\r\n $scope.rebookWithTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.rebookManifestWithTransportExchange($scope.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n }\r\n\r\n $scope.sendManifest = function () {\r\n $scope.sendingManifest = true;\r\n ManifestFactory.manifest.IsSent = true;\r\n\r\n ManifestFactory.saveManifest()\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.manifest = ManifestFactory.manifest;\r\n $scope.sendingManifest = false;\r\n\r\n At('divLoading', 'close');\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.closeLoadingModal = function () {\r\n AtlasModalFactory.close('divLoading');\r\n }\r\n\r\n $scope.showSignature = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n\r\n AtlasModalFactory.open('divConsignmentAddressSignature');\r\n }\r\n\r\n $scope.closeConsignmentAddressSignature = function () {\r\n AtlasModalFactory.close('divConsignmentAddressSignature');\r\n }\r\n\r\n $scope.showGoodsPhotos = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n $scope.goodsPhotos = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.GoodsPhotos.length; i += 3) {\r\n $scope.goodsPhotos.push($scope.consignmentAddress.GoodsPhotos.slice(i, i + 3));\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentAddressGoodsPhotos');\r\n }\r\n\r\n $scope.closeConsignmentAddressGoodsPhotos = function () {\r\n AtlasModalFactory.close('divConsignmentAddressGoodsPhotos');\r\n }\r\n\r\n $scope.showPaperworkPhotos = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n $scope.paperworkPhotos = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.PaperworkPhotos.length; i += 3) {\r\n $scope.paperworkPhotos.push($scope.consignmentAddress.PaperworkPhotos.slice(i, i + 3));\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentAddressPaperworkPhotos');\r\n }\r\n\r\n $scope.closeConsignmentAddressPaperworkPhotos = function () {\r\n AtlasModalFactory.close('divConsignmentAddressPaperworkPhotos');\r\n }\r\n\r\n $scope.openManifestChangeLog = function () {\r\n AtlasModalFactory.open('divManifestChangeLog');\r\n }\r\n\r\n $scope.closeManifestChangeLog = function () {\r\n AtlasModalFactory.close('divManifestChangeLog');\r\n }\r\n\r\n $scope.openTransportExchangeManifestLog = function () {\r\n AtlasModalFactory.open('divTransportExchangeManifestLog');\r\n }\r\n\r\n $scope.closeTransportExchangeManifestLog = function () {\r\n AtlasModalFactory.close('divTransportExchangeManifestLog');\r\n }\r\n\r\n $scope.openAssignSupplier = function () {\r\n $scope.selectedManifest = $scope.manifest;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n }\r\n\r\n $scope.closeAssignSupplier = function () {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n }\r\n\r\n $scope.openDeleteManifestConfirmation = function () {\r\n AtlasModalFactory.open('divDeleteManifestConfirmation');\r\n }\r\n\r\n $scope.closeDeleteManifestConfirmation = function () {\r\n AtlasModalFactory.close('divDeleteManifestConfirmation');\r\n }\r\n\r\n $scope.getReport = function () {\r\n $scope.showReport = true;\r\n $scope.showEmailDetailsForReport = false;\r\n\r\n AtlasModalFactory.open('divManifestReport');\r\n\r\n ManifestFactory.getReport($scope.manifest.Id)\r\n .then(\r\n function (response) {\r\n var filename = 'Report.pdf';\r\n var contentDisposition = response.headers('Content-Disposition').split(';');\r\n for (var i = 0; i < contentDisposition.length; i++) {\r\n if (contentDisposition[i].indexOf('filename') >= 0) {\r\n var parts = contentDisposition[i].split('=');\r\n filename = parts[1].replace('\"', '');\r\n }\r\n }\r\n var file = new Blob([response.data], { type: 'application/pdf' });\r\n var fileURL = window.URL.createObjectURL(file);\r\n $scope.report = $sce.trustAsResourceUrl(fileURL);\r\n //var link = document.createElement('a');\r\n //angular.element(link)\r\n // .attr('href', fileURL)\r\n // //.attr('download', filename)\r\n // .attr('target', '_blank')\r\n //link.click();\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.selectEmailReportTo = function () {\r\n if ($scope.emailReport.ExistingEmail) {\r\n if ($scope.emailReport.ExistingEmail != '-- Other Email Address--') $scope.emailReport.To = $scope.emailReport.ExistingEmail;\r\n if ($scope.emailReport.ExistingEmail === '-- Other Email Address --') $scope.emailReport.To = '';\r\n }\r\n }\r\n\r\n $scope.closeManifestReport = function () {\r\n AtlasModalFactory.close('divManifestReport');\r\n\t}\r\n\r\n $scope.selectDateTime = function (manifest, consignmentAddress, propertyName, datetime) {\r\n /*\r\n $scope.selectedDateTime = datetime;\r\n\r\n debugger;\r\n\r\n FoundationApi.publish('divEditDateTime', 'open');\r\n */\r\n\r\n var template = '';\r\n\r\n switch (propertyName.toUpperCase()) {\r\n case 'ACKNOWLEDGEDTIME':\r\n template = 'templates/shared/controls/edit_date_time.html';\r\n break;\r\n default:\r\n template = 'templates/manifests/controls/edit_driver_manifest_date_time.html';\r\n break;\r\n }\r\n\r\n var modal = new ModalFactory({\r\n // Add CSS classes to the modal\r\n // Can be a single string or an array of classes\r\n class: 'ace-modal-large',\r\n // Set if the modal has a background overlay\r\n overlay: true,\r\n // Set if the modal can be closed by clicking on the overlay\r\n overlayClose: false,\r\n // Define a template to use for the modal\r\n templateUrl: template,\r\n // Allows you to pass in properties to the scope of the modal\r\n contentScope: {\r\n manifest: manifest,\r\n consignmentAddress: consignmentAddress,\r\n propertyName: propertyName,\r\n selectedDateTime: datetime,\r\n sameDateTimeForAll: false,\r\n updateDateTime: function () {\r\n if (this.sameDateTimeForAll) {\r\n consignmentAddress.IsOnRoute = true;\r\n consignmentAddress.StartTime = moment(this.selectedDateTime);\r\n consignmentAddress.HasArrived = true;\r\n consignmentAddress.ArrivalTime = moment(this.selectedDateTime);\r\n consignmentAddress.isBeingCompleted = true;\r\n consignmentAddress.IsCompleted = true;\r\n consignmentAddress.CompletionTime = moment(this.selectedDateTime);\r\n }\r\n else {\r\n switch (propertyName.toUpperCase()) {\r\n case 'ACKNOWLEDGEDTIME':\r\n manifest.IsAcknowledged = true;\r\n manifest.AcknowledgedTime = moment(this.selectedDateTime);\r\n break;\r\n case 'STARTTIME':\r\n consignmentAddress.IsOnRoute = true;\r\n consignmentAddress.StartTime = moment(this.selectedDateTime);\r\n break;\r\n case 'ARRIVALTIME':\r\n consignmentAddress.HasArrived = true;\r\n consignmentAddress.ArrivalTime = moment(this.selectedDateTime);\r\n break;\r\n case 'COMPLETIONTIME':\r\n consignmentAddress.isBeingCompleted = true;\r\n consignmentAddress.IsCompleted = true;\r\n consignmentAddress.CompletionTime = moment(this.selectedDateTime);\r\n break;\r\n }\r\n }\r\n\r\n modal.deactivate();\r\n\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n },\r\n clearDateTime: function () {\r\n switch (propertyName.toUpperCase()) {\r\n case 'ACKNOWLEDGEDTIME':\r\n manifest.IsAcknowledged = false;\r\n manifest.AcknowledgedTime = null;\r\n break;\r\n case 'STARTTIME':\r\n consignmentAddress.IsOnRoute = false;\r\n consignmentAddress.StartTime = null;\r\n break;\r\n case 'ARRIVALTIME':\r\n consignmentAddress.HasArrived = false;\r\n consignmentAddress.ArrivalTime = null;\r\n break;\r\n case 'COMPLETIONTIME':\r\n consignmentAddress.isBeingCompleted = false;\r\n consignmentAddress.IsCompleted = false;\r\n consignmentAddress.CompletionTime = null;\r\n break;\r\n }\r\n\r\n modal.deactivate();\r\n\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n },\r\n close: function () {\r\n modal.deactivate();\r\n\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n }\r\n }\r\n });\r\n modal.activate();\r\n }\r\n\r\n $scope.setToCalculatedCost = function () {\r\n $scope.manifest.Cost = $filter('number')($scope.manifest.CalculatedCost, 2);\r\n }\r\n\r\n $scope.checkEmailAddresses = function () {\r\n for (var i = 0; i < $scope.consignmentAddressesCompleted.length; i++) {\r\n if (!$scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress && !$scope.consignmentAddressesCompleted[i].Consignment.ContactEmailAddress) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n $scope.sendEmails = function () {\r\n var to;\r\n var body = '';\r\n\r\n for (var i = 0; i < $scope.consignmentAddressesCompleted.length; i++) {\r\n to = ($scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress && !$scope.consignmentAddressesCompleted[i].Consignment.Customer.UseContactEmail) ? $scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress : $scope.consignmentAddressesCompleted[i].Consignment.ContactEmailAddress;\r\n\r\n ManifestFactory.sendCompletedEmail(to, $scope.consignmentAddressesCompleted[i]);\r\n }\r\n\r\n $scope.consignmentAddressesCompleted = [];\r\n\r\n AtlasModalFactory.close('divConfirmEmails');\r\n }\r\n\r\n $scope.editEmails = function () {\r\n $scope.emails = [];\r\n $scope.currentEmailIndex = 0;\r\n var body = '';\r\n\r\n for (var i = 0; i < $scope.consignmentAddressesCompleted.length; i++) {\r\n body = ManifestFactory.generateCompletedEmailBody($scope.consignmentAddressesCompleted[i], $scope.manifest);\r\n\r\n $scope.emails.push({\r\n ConsignmentAddress: $scope.consignmentAddressesCompleted[i],\r\n To: ($scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress && !$scope.consignmentAddressesCompleted[i].Consignment.Customer.UseContactEmail) ? $scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress : $scope.consignmentAddressesCompleted[i].Consignment.ContactEmailAddress,\r\n Body: body,\r\n Send: null\r\n })\r\n }\r\n\r\n $scope.currentEmail = $scope.emails[$scope.currentEmailIndex];\r\n }\r\n\r\n $scope.sendEmail = function () {\r\n $scope.confirmationEmailErrorMessage = null;\r\n\r\n if ($scope.currentEmail.To == null || $scope.currentEmail.To.length === 0) {\r\n $scope.confirmationEmailErrorMessage = 'A \\'To \\' address must be entered';\r\n return false;\r\n }\r\n\r\n $scope.currentEmail.Send = true;\r\n\r\n if ($scope.currentEmailIndex === ($scope.consignmentAddressesCompleted.length - 1)) {\r\n $scope.consignmentAddressesCompleted = [];\r\n\r\n for (var i = 0; i < $scope.emails.length; i++) {\r\n if ($scope.emails[i].Send) ManifestFactory.sendCompletedEmail($scope.emails[i].To, $scope.emails[i].ConsignmentAddress);\r\n }\r\n\r\n AtlasModalFactory.close('divConfirmEmails');\r\n }\r\n else {\r\n $scope.currentEmailIndex++;\r\n $scope.currentEmail = $scope.emails[$scope.currentEmailIndex];\r\n }\r\n }\r\n\r\n $scope.dontSendEmail = function () {\r\n $scope.currentEmail.Send = false;\r\n\r\n if ($scope.currentEmailIndex === ($scope.consignmentAddressesCompleted.length - 1)) {\r\n $scope.consignmentAddressesCompleted = [];\r\n\r\n for (var i = 0; i < $scope.emails.length; i++) {\r\n if ($scope.emails[i].Send) ManifestFactory.sendCompletedEmail($scope.emails.To, $scope.emails[i].ConsignmentAddress);\r\n }\r\n\r\n AtlasModalFactory.close('divConfirmEmails');\r\n }\r\n else {\r\n $scope.currentEmailIndex++;\r\n $scope.currentEmail = $scope.emails[$scope.currentEmailIndex];\r\n }\r\n }\r\n\r\n $scope.dontSendEmails = function () {\r\n $scope.consignmentAddressesCompleted = [];\r\n \r\n AtlasModalFactory.close('divConfirmEmails');\r\n }\r\n\r\n $scope.showEmailReportDetails = function () {\r\n $scope.showReport = false;\r\n $scope.showEmailDetailsForReport = true;\r\n }\r\n\r\n $scope.sendReportEmail = function () {\r\n $scope.reportEmailErrorMessage = null;\r\n\r\n ManifestFactory.sendReportEmail($scope.emailReport.To, $scope.emailReport.Body, $scope.manifest);\r\n\r\n AtlasModalFactory.close('divManifestReport');\r\n }\r\n\r\n $scope.showLoadDetails = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n\r\n AtlasModalFactory.open('divLoadDetails');\r\n }\r\n\r\n $scope.closeLoadDetails = function () {\r\n AtlasModalFactory.close('divLoadDetails');\r\n\t}\r\n\r\n $scope.toggleTraffic = function () {\r\n if ($scope.showTraffic) {\r\n $scope.manifestMap.removeTraffic();\r\n $scope.showTraffic = false;\r\n }\r\n else {\r\n $scope.manifestMap.showTraffic();\r\n $scope.showTraffic = true;\r\n }\r\n }\r\n\r\n $scope.getCustomerName = function (consignmentAddress) {\r\n var customerName = '';\r\n\r\n if (consignmentAddress.Consignment.CustomerBranch) {\r\n customerName = consignmentAddress.Consignment.CustomerBranch.Name;\r\n\r\n if (consignmentAddress.Consignment.CustomerBranch.SLA && consignmentAddress.Consignment.CustomerBranch.SLA.length > 0) customerName += ' [' + consignmentAddress.Consignment.CustomerBranch.SLA + ']';\r\n }\r\n else {\r\n customerName = consignmentAddress.Consignment.Customer.Name;\r\n\r\n if (consignmentAddress.Consignment.Customer.SLA && consignmentAddress.Consignment.Customer.SLA.length > 0) customerName += ' [' + consignmentAddress.Consignment.Customer.SLA + ']';\r\n }\r\n\r\n return customerName;\r\n }\r\n\r\n $scope.toggleTailLift = function () {\r\n if ($scope.transportExchangeManifestOptions.tailLift) {\r\n if ($scope.transportExchangeManifestOptions.notes && $scope.transportExchangeManifestOptions.notes.length > 0) $scope.transportExchangeManifestOptions.notes += '\\n';\r\n $scope.transportExchangeManifestOptions.notes += 'Pallet truck required';\r\n }\r\n else {\r\n $scope.transportExchangeManifestOptions.notes = $scope.transportExchangeManifestOptions.notes.replace('Pallet truck required', '');\r\n $scope.transportExchangeManifestOptions.notes = $scope.transportExchangeManifestOptions.notes.trim();\r\n }\r\n }\r\n\r\n function addSupplierLocationToMap(supplier, location, markerType) {\r\n var infoContent;\r\n var defaultColour = '#2c6fba';\r\n\r\n if (!markerType) markerType = clickinon.google.maps.enums.markerTypes.PIN;\r\n\r\n infoContent = '
Driver: ' + supplier.Name + '
';\r\n\r\n if (location.Manifest) {\r\n //infoContent += '
Vehicle: ' + supplierLocation.Supplier.Manifests[0].VehicleType.Name + '
'\r\n infoContent += '
Vehicle: ' + supplier.Vehicles[0].VehicleType.Name + '
';\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) infoContent += '
Manifest Number: ' + location.Manifest.ManifestNumber + '
';\r\n infoContent += '
Last Address: ' + location.Manifest.FormattedLastDeliveryAddress + '
';\r\n infoContent += '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.manifestMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: location.Manifest.StatusColour.HexCode,\r\n fontColour: (location.Manifest.StatusColour.HexCode.indexOf('#595959') >= 0 || location.Manifest.StatusColour.HexCode.indexOf('#2c6fba') >= 0) ? ':#ffffff' : '#000000',\r\n //text: (supplierLocation.Supplier.Manifests.length > 0) ? supplierLocation.Supplier.Manifests[0].VehicleType.IconCode : '',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n else {\r\n infoContent += '
Vehicle: ' + supplier.Vehicles[0].VehicleType.Name + '
';\r\n infoContent += '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.manifestMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: defaultColour,\r\n fontColour: '#000000',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n }\r\n\r\n function updateDistanceTimesAndPricing() {\r\n $timeout(function () {\r\n var dateTimeIndex = null;\r\n var locations = $scope.manifestMap.getLocations();\r\n var totalDistance = $scope.manifestMap.getTotalDistance() / 1609.34;\r\n var totalTime = 0;\r\n\r\n $scope.manifest.TotalMiles = Math.round(totalDistance);\r\n\r\n if ($scope.manifest.CalculateTimes) {\r\n var route = $scope.manifestMap.getRoute();\r\n totalTime = $scope.manifestMap.getTotalTime() / 60;\r\n\r\n $scope.manifest.TotalTimeInMinutes = Math.round(totalTime);\r\n\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n if (locations[i].datetime) {\r\n $scope.manifest.ConsignmentAddresses[i].EstimatedStartDateAndTime = locations[i].datetime;\r\n $scope.manifest.ConsignmentAddresses[i].DisplayEstimatedStartDateAndTime = moment($scope.manifest.ConsignmentAddresses[i].EstimatedStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n }\r\n }\r\n else {\r\n var duration = moment.duration(moment($scope.manifest.ConsignmentAddresses[$scope.manifest.ConsignmentAddresses.length - 1].EstimatedStartDateAndTime).diff(moment($scope.manifest.ConsignmentAddresses[0].EstimatedStartDateAndTime)));\r\n totalTime = duration.asMinutes();\r\n\r\n $scope.manifest.TotalTimeInMinutes = Math.round(totalTime);\r\n }\r\n\r\n var calculatedCost = 0;\r\n\r\n if (!$scope.manifest.Matrix && $scope.costingMatrices) {\r\n for (var i = 0; i < $scope.costingMatrices.length; i++) {\r\n if ($scope.manifest.VehicleType.Id === $scope.costingMatrices[i].VehicleType.Id) {\r\n $scope.manifest.Matrix = $scope.costingMatrices[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.manifest.Matrix) {\r\n if ($scope.manifest.VehicleType.Id === $scope.manifest.Matrix.VehicleType.Id && $scope.manifest.Matrix.MatrixType.Name.toUpperCase() === 'COSTING - SUPPLIER') {\r\n if ($scope.manifest.Matrix.MatrixPriceIncrement.Name.toUpperCase() === 'DISTANCE') {\r\n for (var p = 0; p < $scope.manifest.Matrix.PriceMatrices.length; p++) {\r\n if (totalDistance > $scope.manifest.Matrix.PriceMatrices[p].From) {\r\n if (totalDistance > $scope.manifest.Matrix.PriceMatrices[p].To) {\r\n calculatedCost += (($scope.manifest.Matrix.PriceMatrices[p].To - $scope.manifest.Matrix.PriceMatrices[p].From) / $scope.manifest.Matrix.PriceMatrices[p].Interval) * $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n }\r\n else {\r\n calculatedCost += ((totalDistance - $scope.manifest.Matrix.PriceMatrices[p].From) / $scope.manifest.Matrix.PriceMatrices[p].Interval) * $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < $scope.manifest.Matrix.PriceMatrices.length; p++) {\r\n if (totalTime > $scope.manifest.Matrix.PriceMatrices[p].From) {\r\n //if (totalTime > $scope.manifest.Matrix.PriceMatrices[p].To) {\r\n // calculatedCost += (($scope.manifest.Matrix.PriceMatrices[p].To - $scope.manifest.Matrix.PriceMatrices[p].From) / $scope.manifest.Matrix.PriceMatrices[p].Interval) * $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n //}\r\n //else {\r\n // calculatedCost += ((totalTime - $scope.manifest.Matrix.PriceMatrices[p].From) / $scope.manifest.Matrix.PriceMatrices[p].Interval) * $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n //}\r\n\r\n calculatedCost += $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n if (calculatedCost < $scope.manifest.Matrix.MinimumPrice) {\r\n calculatedCost = $scope.manifest.Matrix.MinimumPrice;\r\n }\r\n }\r\n\r\n for (var r = 0; r < $scope.areaAdditionalChargeRules.length; r++) {\r\n var rule = $scope.areaAdditionalChargeRules[r];\r\n var postcodes = rule.Postcodes.split('\\n');\r\n var exclusions = (rule.PostcodeExclusions) ? rule.PostcodeExclusions.split('\\n') : null;\r\n var exclusionsFound = false;\r\n\r\n for (var v = 0; v < rule.VehicleTypes.length; v++) {\r\n if ($scope.manifest.VehicleType.Id === rule.VehicleTypes[v].Id) {\r\n for (var a = 0; a < $scope.manifest.ConsignmentAddresses.length; a++) {\r\n for (var p = 0; p < postcodes.length; p++) {\r\n if ($scope.manifest.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(postcodes[p].toUpperCase())) {\r\n if (exclusions) {\r\n for (var e = 0; e < exclusions.length; e++) {\r\n if ($scope.manifest.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(exclusions[e].toUpperCase())) {\r\n exclusionsFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!exclusionsFound) {\r\n var areaAdditionalChargeCost = calculatedCost * (rule.CostPercentage / 100);\r\n\r\n if (areaAdditionalChargeCost > rule.MaxCost) {\r\n calculatedCost += rule.MaxCost;\r\n }\r\n else {\r\n calculatedCost += areaAdditionalChargeCost;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n\r\n if ($scope.manifest.ConsignmentAddresses) {\r\n for (var a = 0; a < $scope.manifest.ConsignmentAddresses.length; a++) {\r\n if ($scope.manifest.ConsignmentAddresses[a].AdditionalCharges) {\r\n for (var c = 0; c < $scope.manifest.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n calculatedCost += $scope.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Cost;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.manifest.CalculatedCost = $filter('number')(calculatedCost, 2);\r\n\r\n //if (!$scope.manifest.CostManuallySet) {\r\n // $scope.manifest.Cost = $filter('number')(calculatedCost, 2);\r\n //}\r\n\r\n if (!$scope.manifest.Id) {\r\n $scope.manifest.Cost = $filter('number')(calculatedCost, 2);\r\n }\r\n }\r\n });\r\n }\r\n}]);","suppliers.controller('SuppliersController', ['$rootScope', '$scope', '$http', '$filter', '$state', 'FoundationApi', 'UserFactory', 'SupplierFactory', 'SettingsFactory', 'AtlasUserFactory', 'PhotosFactory', function ($rootScope, $scope, $http, $filter, $state, FoundationApi, UserFactory, SupplierFactory, SettingsFactory, AtlasUserFactory, PhotosFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Suppliers');\r\n $scope.suppliers = null;\r\n $scope.supplier = null;\r\n $scope.supplierTypes = null;\r\n $scope.supplierBillingTypes = null;\r\n $scope.vatCodes = null;\r\n $scope.licenceCategories = null;\r\n $scope.vehicleTypes = null;\r\n $scope.supplierLicence = null;\r\n $scope.vehicle = null;\r\n $scope.supplierUser = {};\r\n $scope.sortBy = 'Name';\r\n $scope.searchName = '';\r\n $scope.accountCodes = null;\r\n $scope.deduction = null;\r\n $scope.errorMessage = null;\r\n $scope.saving = false;\r\n $scope.loadingSuppliers = false;\r\n $scope.loadingSupplier = false;\r\n $scope.photo = null;\r\n $scope.supplierPhotos = null;\r\n $scope.imageFile = null;\r\n $scope.requiredFieldError = 'Please note this is a required field';\r\n $scope.supplierNameError = $scope.requiredFieldError;\r\n $scope.supplierExists = false;\r\n\r\n //SupplierFactory.getSuppliers()\r\n // .then(\r\n // function () {\r\n // $scope.suppliers = SupplierFactory.suppliers;\r\n // $scope.loadingSuppliers = false;\r\n // }\r\n // );\r\n\r\n SettingsFactory.getSupplierTypes()\r\n .then(\r\n function (response) {\r\n $scope.supplierTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getVatCodes()\r\n .then(\r\n function (response) {\r\n $scope.vatCodes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getLicenceCategories()\r\n .then(\r\n function (response) {\r\n $scope.licenceCategories = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getSupplierBillingTypes()\r\n .then(\r\n function (response) {\r\n $scope.supplierBillingTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n $scope.searchSuppliers = function () {\r\n $scope.suppliers = null;\r\n $scope.loadingSuppliers = true;\r\n\r\n SupplierFactory.searchSuppliers($scope.searchName, $scope.searchIsTrackingDisabled, $scope.searchIsDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.suppliers = response;\r\n $scope.loadingSuppliers = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchSuppliers();\r\n }\r\n\r\n $scope.createNewSupplier = function () {\r\n $scope.supplier = SupplierFactory.createNewSupplier();\r\n }\r\n\r\n $scope.checkSupplierExists = function () {\r\n $scope.supplierNameError = $scope.requiredFieldError;\r\n $scope.supplierExists = false;\r\n\r\n SupplierFactory.checkSupplierExists($scope.supplier.Name)\r\n .then(\r\n function (response) {\r\n if (response) {\r\n $scope.supplierNameError = 'This supplier name already exists in the system';\r\n $scope.supplierDetailsForm.txtSupplierDetails_Name.$invalid = true;\r\n $scope.supplierExists = true;\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.editSupplier = function (s) {\r\n $scope.loadingSupplier = true;\r\n FoundationApi.publish('SupplierDetails', 'open');\r\n\r\n SupplierFactory.getSupplier(s.Id)\r\n .then(\r\n function (response) {\r\n $scope.supplier = SupplierFactory.supplier;\r\n $scope.loadingSupplier = false;\r\n\r\n $rootScope.$emit('title-updated', $scope.supplier.Name);\r\n\r\n if ($scope.supplier.IsSelfBilling) {\r\n $scope.supplier.Type = 'IS_SELF_BILLING';\r\n }\r\n else if ($scope.supplier.IsEmployed) {\r\n $scope.supplier.Type = 'IS_EMPLOYED';\r\n }\r\n else {\r\n $scope.supplier.Type = 'SUBCONTRACTOR';\r\n }\r\n\r\n if ($scope.supplier.SupplierUsers.length > 0) {\r\n $scope.supplierUser = $scope.supplier.SupplierUsers[0];\r\n }\r\n else {\r\n $scope.supplierUser = {};\r\n }\r\n\r\n $scope.supplierPhotos = [];\r\n\r\n for (var i = 0; i < $scope.supplier.SupplierPhotos.length; i += 3) {\r\n $scope.supplierPhotos.push($scope.supplier.SupplierPhotos.slice(i, i + 3));\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewSupplierLicence = function () {\r\n $scope.supplierLicence = {};\r\n }\r\n\r\n $scope.editSupplierLicence = function (l) {\r\n $scope.supplierLicence = l;\r\n }\r\n\r\n $scope.updateSupplierLicenceList = function () {\r\n if ($scope.supplierDetailsForm.ddlSupplierDetails_LicenceType.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_LicenceFrom.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_LicenceTo.$invalid) {\r\n $scope.SupplierLicencesFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n $scope.supplierLicence.DisplayValidFrom = moment($scope.supplierLicence.ValidFrom).format('DD/MM/YYYY');\r\n $scope.supplierLicence.DisplayValidTo = moment($scope.supplierLicence.ValidTo).format('DD/MM/YYYY');\r\n\r\n if ($scope.supplierLicence.Id) {\r\n for (var i = 0; i < $scope.supplier.SupplierLicences.length; i++) {\r\n if ($scope.supplier.SupplierLicences[i].Id === $scope.supplierLicence.Id) {\r\n $scope.supplier.SupplierLicences[i] = $scope.supplierLicence;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if (!$scope.supplier.SupplierLicences) $scope.supplier.SupplierLicences = [];\r\n\r\n $scope.supplier.SupplierLicences.push($scope.supplierLicence);\r\n }\r\n\r\n $scope.supplierLicence = null;\r\n $scope.SupplierLicencesFormSubmitted = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_LicenceType.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_LicenceFrom.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_LicenceTo.$dirty = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_LicenceType.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_LicenceFrom.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_LicenceTo.$pristine = true;\r\n }\r\n\r\n $scope.deleteSupplierLicence = function (index, licence) {\r\n $scope.supplier.SupplierLicences.splice(index, 1);\r\n }\r\n\r\n $scope.cancelSupplierLicenceEdit = function () {\r\n $scope.supplierLicence = null;\r\n }\r\n\r\n $scope.addNewVehicle = function () {\r\n if (!$scope.supplier.Vehicles || $scope.supplier.Vehicles.length === 0) {\r\n $scope.vehicle = {\r\n IsDefaultVehicle: true\r\n };\r\n }\r\n else {\r\n $scope.vehicle = {};\r\n }\r\n }\r\n\r\n $scope.editVehicle = function (v) {\r\n $scope.vehicle = v;\r\n }\r\n\r\n $scope.updateVehicleList = function () {\r\n if ($scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$invalid) {\r\n $scope.SupplierVehiclesFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.vehicle.Id) {\r\n for (var i = 0; i < $scope.supplier.Vehicles.length; i++) {\r\n if ($scope.supplier.Vehicles[i].Id === $scope.vehicle.Id) {\r\n $scope.supplier.Vehicles[i] = $scope.vehicle;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if (!$scope.supplier.Vehicles) $scope.supplier.Vehicles = [];\r\n\r\n $scope.supplier.Vehicles.push($scope.vehicle);\r\n }\r\n\r\n $scope.vehicle = null;\r\n $scope.SupplierVehiclesFormSubmitted = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$dirty = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$pristine = true;\r\n }\r\n\r\n $scope.deleteVehicle = function (index, deduction) {\r\n $scope.supplier.Vehicles.splice(index, 1);\r\n }\r\n\r\n $scope.cancelVehicleEdit = function () {\r\n $scope.vehicle = null;\r\n }\r\n\r\n $scope.addNewDeduction = function () {\r\n $scope.deduction = {};\r\n $scope.selectedAccountCode = null;\r\n }\r\n\r\n $scope.searchAccountCode = function (searchText) {\r\n if (searchText.indexOf(' - ') > 0) searchText = searchText.slice(0, searchText.indexOf(' - '));\r\n\r\n return SettingsFactory.searchAccountCodes(searchText);\r\n }\r\n\r\n $scope.accountCodeSelected = function (accountCode) {\r\n $scope.selectedAccountCode = accountCode;\r\n\r\n $scope.deduction.AccountCode = accountCode.Item.Code;\r\n }\r\n\r\n $scope.editDeduction = function (deduction) {\r\n SettingsFactory.searchAccountCodes(deduction.AccountCode)\r\n .then(\r\n function (accountCodes) {\r\n $scope.deduction = deduction;\r\n $scope.selectedAccountCode = accountCodes[0];\r\n },\r\n function (error) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.updateSupplierDeductionList = function () {\r\n if ($scope.supplierDetailsForm.txtSupplierDetails_DeductionName.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_DeductionValue.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_AccountCode.$invalid || $scope.supplierDetailsForm.ddlSupplierDetails_DeductionVATCode.$invalid) {\r\n $scope.SupplierDeductionsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.deduction.Id) {\r\n for (var i = 0; i < $scope.supplier.Deductions.length; i++) {\r\n if ($scope.supplier.Deductions[i].Id === $scope.deduction.Id) {\r\n $scope.supplier.Deductions[i] = $scope.deduction;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if (!$scope.supplier.Deductions) $scope.supplier.Deductions = [];\r\n\r\n $scope.supplier.Deductions.push($scope.deduction);\r\n }\r\n\r\n $scope.deduction = null;\r\n $scope.SupplierDeductionsFormSubmitted = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_DeductionName.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_DeductionValue.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_AccountCode.$dirty = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_DeductionVATCode.$dirty = false;\r\n }\r\n\r\n $scope.deleteDeduction = function (index, deduction) {\r\n $scope.supplier.Deductions.splice(index, 1);\r\n }\r\n\r\n $scope.cancelDeductionEdit = function () {\r\n $scope.deduction = null;\r\n $scope.selectedAccountCode = null;\r\n }\r\n\r\n $scope.saveSupplier = function () {\r\n $scope.errorMessage = null;\r\n var existingSupplier = ($scope.supplier.Id) ? true : false;\r\n\r\n if ($scope.supplierExists) {\r\n $scope.errorMessage = 'A Supplier with this name already exists. Please change the name and try again.'\r\n return false;\r\n }\r\n\r\n if ($scope.supplier.SupplierLicences == null || $scope.supplier.SupplierLicences.length === 0) {\r\n $scope.errorMessage = 'Must add at least one licence';\r\n return false;\r\n }\r\n\r\n if ($scope.supplier.Vehicles == null || $scope.supplier.Vehicles.length === 0) {\r\n $scope.errorMessage = 'Must add at least one vehicle';\r\n return false;\r\n }\r\n\r\n var numberDefaultVehicles = 0;\r\n\r\n for (var i = 0; i < $scope.supplier.Vehicles.length; i++) {\r\n if ($scope.supplier.Vehicles[i].IsDefaultVehicle) numberDefaultVehicles++;\r\n }\r\n\r\n if (numberDefaultVehicles === 0) {\r\n $scope.errorMessage = 'You must select at least one vehicle as the default vehicle';\r\n return false;\r\n }\r\n\r\n if (numberDefaultVehicles > 1) {\r\n $scope.errorMessage = 'You can only have one vehicle as the default vehicle';\r\n return false;\r\n }\r\n\r\n switch ($scope.supplier.Type) {\r\n case 'IS_SELF_BILLING':\r\n $scope.supplier.IsSelfBilling = true;\r\n $scope.supplier.IsEmployed = false;\r\n break;\r\n case 'IS_EMPLOYED':\r\n $scope.supplier.IsSelfBilling = false;\r\n $scope.supplier.IsEmployed = true;\r\n break;\r\n default:\r\n $scope.supplier.IsSelfBilling = false;\r\n $scope.supplier.IsEmployed = false;\r\n break;\r\n }\r\n\r\n debugger;\r\n\r\n if ($scope.supplierUser && ($scope.supplierUser.Email || $scope.supplierUser.Username)) {\r\n if ($scope.supplierUser.NewPassword !== $scope.supplierUser.ConfirmPassword) {\r\n $scope.errorMessage = 'Supplier app passwords must match';\r\n return false;\r\n }\r\n\r\n if($scope.supplierUser.NewPassword) $scope.supplierUser.Password = $scope.supplierUser.NewPassword;\r\n $scope.supplier.SupplierUsers = [];\r\n $scope.supplier.SupplierUsers.push($scope.supplierUser);\r\n }\r\n\r\n $scope.saving = true;\r\n\r\n SupplierFactory.saveSupplier()\r\n .then(\r\n function (supplier) {\r\n SupplierFactory.getSupplier(supplier.Id)\r\n .then(\r\n function (supplier) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n $scope.supplier = supplier;\r\n\r\n $rootScope.$emit('title-updated', $scope.supplier.Name);\r\n\r\n if ($scope.supplier.IsSelfBilling) {\r\n $scope.supplier.Type = 'IS_SELF_BILLING';\r\n }\r\n else if ($scope.supplier.IsEmployed) {\r\n $scope.supplier.Type = 'IS_EMPLOYED';\r\n }\r\n else {\r\n $scope.supplier.Type = 'SUBCONTRACTOR';\r\n }\r\n\r\n if ($scope.supplier.SupplierUsers.length > 0) {\r\n $scope.supplierUser = $scope.supplier.SupplierUsers[0];\r\n }\r\n else {\r\n $scope.supplierUser = {};\r\n }\r\n\r\n if (existingSupplier) {\r\n for (var i = 0; i < $scope.suppliers.length; i++) {\r\n if ($scope.suppliers[i].Id === $scope.supplier.Id) {\r\n $scope.suppliers[i] = $scope.supplier;\r\n $scope.errorMessage = null;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.suppliers.push($scope.supplier);\r\n }\r\n\r\n FoundationApi.publish('supplier-notifications', { title: 'Supplier Record Saved', content: 'The supplier record for ' + $scope.supplier.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewPhoto = function () {\r\n if (!$scope.supplier.Photos || $scope.supplier.Photos.length === 0) {\r\n $scope.supplierPhoto = {};\r\n }\r\n else {\r\n $scope.supplierPhoto = {};\r\n }\r\n }\r\n\r\n $scope.editPhoto = function (p) {\r\n $scope.supplierPhoto = p;\r\n }\r\n\r\n $scope.photoSelected = function (element) {\r\n $scope.$apply(function () {\r\n $scope.saving = true;\r\n $scope.imageFile = element.files[0];\r\n\r\n PhotosFactory.upload(element.files[0])\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.supplierPhoto.Photo = response;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n }\r\n );\r\n });\r\n }\r\n\r\n $scope.updatePhotoList = function () {\r\n if ($scope.supplierDetailsForm.txtSupplierDetails_PhotoDescription.$invalid) {\r\n $scope.SupplierPhotosFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n $scope.saving = true;\r\n\r\n $scope.supplierPhoto.Supplier = $scope.supplier;\r\n\r\n SupplierFactory.saveSupplierPhoto($scope.supplierPhoto)\r\n .then(\r\n function (response) {\r\n SupplierFactory.getSupplier($scope.supplier.Id)\r\n .then(\r\n function (response) {\r\n $scope.supplier = SupplierFactory.supplier;\r\n $scope.saving = false;\r\n $scope.loadingSupplier = false;\r\n $scope.supplierPhoto = null;\r\n $scope.imageFile = null;\r\n\r\n if ($scope.supplier.IsSelfBilling) {\r\n $scope.supplier.Type = 'IS_SELF_BILLING';\r\n }\r\n else if ($scope.supplier.IsEmployed) {\r\n $scope.supplier.Type = 'IS_EMPLOYED';\r\n }\r\n else {\r\n $scope.supplier.Type = 'SUBCONTRACTOR';\r\n }\r\n\r\n if ($scope.supplier.SupplierUsers.length > 0) {\r\n $scope.supplierUser = $scope.supplier.SupplierUsers[0];\r\n }\r\n else {\r\n $scope.supplierUser = {};\r\n }\r\n\r\n $scope.supplierPhotos = [];\r\n\r\n for (var i = 0; i < $scope.supplier.SupplierPhotos.length; i += 3) {\r\n $scope.supplierPhotos.push($scope.supplier.SupplierPhotos.slice(i, i + 3));\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n \r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n }\r\n );\r\n\r\n //if ($scope.vehicle.Id) {\r\n // for (var i = 0; i < $scope.supplier.Vehicles.length; i++) {\r\n // if ($scope.supplier.Vehicles[i].Id === $scope.vehicle.Id) {\r\n // $scope.supplier.Vehicles[i] = $scope.vehicle;\r\n // break;\r\n // }\r\n // }\r\n //}\r\n //else {\r\n // if (!$scope.supplier.Vehicles) $scope.supplier.Vehicles = [];\r\n\r\n // $scope.supplier.Vehicles.push($scope.vehicle);\r\n //}\r\n\r\n //$scope.vehicle = null;\r\n //$scope.SupplierVehiclesFormSubmitted = false;\r\n //$scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$dirty = false;\r\n //$scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$pristine = true;\r\n }\r\n\r\n $scope.deletePhoto = function () {\r\n $scope.imageFile = null;\r\n }\r\n\r\n $scope.deletePhotoFromList = function (photo) {\r\n $scope.saving = true;\r\n\r\n SupplierFactory.deleteSupplierPhoto(photo)\r\n .then(\r\n function (response) {\r\n SupplierFactory.getSupplier($scope.supplier.Id)\r\n .then(\r\n function (response) {\r\n $scope.supplier = SupplierFactory.supplier;\r\n $scope.saving = false;\r\n $scope.loadingSupplier = false;\r\n\r\n if ($scope.supplier.IsSelfBilling) {\r\n $scope.supplier.Type = 'IS_SELF_BILLING';\r\n }\r\n else if ($scope.supplier.IsEmployed) {\r\n $scope.supplier.Type = 'IS_EMPLOYED';\r\n }\r\n else {\r\n $scope.supplier.Type = 'SUBCONTRACTOR';\r\n }\r\n\r\n if ($scope.supplier.SupplierUsers.length > 0) {\r\n $scope.supplierUser = $scope.supplier.SupplierUsers[0];\r\n }\r\n else {\r\n $scope.supplierUser = {};\r\n }\r\n\r\n $scope.supplierPhotos = [];\r\n\r\n for (var i = 0; i < $scope.supplier.SupplierPhotos.length; i += 3) {\r\n $scope.supplierPhotos.push($scope.supplier.SupplierPhotos.slice(i, i + 3));\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelPhotoEdit = function () {\r\n $scope.supplierPhoto = null;\r\n }\r\n}]);","customers.controller('CustomersController', ['$rootScope', '$scope', '$http', '$filter', '$state', '$timeout', 'FoundationApi', 'UserFactory', 'CustomerFactory', 'CountryFactory', 'SettingsFactory', 'CommonFactory', 'AtlasUserFactory', 'AtlasModalFactory', function ($rootScope, $scope, $http, $filter, $state, $timeout, FoundationApi, UserFactory, CustomerFactory, CountryFactory, SettingsFactory, CommonFactory, AtlasUserFactory, AtlasModalFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n\r\n $rootScope.$emit('title-updated', 'Customers');\r\n $scope.customerAccountTypeEnums = AtlasCourierExpress.Enums.CustomerAccountTypes;\r\n $scope.customers = null;\r\n $scope.customer = null;\r\n $scope.customerIsOnStop = false;\r\n $scope.addresses = [];\r\n $scope.address = null;\r\n $scope.countries = null;\r\n $scope.contacts = [];\r\n $scope.contact = null;\r\n $scope.customerUser = null;\r\n $scope.createEditUser = false;\r\n $scope.priceMatrix = null;\r\n $scope.matrixTypes = null;\r\n $scope.priceMatrixIncrements = null;\r\n $scope.vehicleTypes = null;\r\n $scope.priceMatrices = null;\r\n $scope.priceMatrix = null;\r\n $scope.priceMatrixItem = null;\r\n $scope.searchName = '';\r\n $scope.searchCustomerAccountType = null;\r\n $scope.searchIsDeactivated = false;\r\n $scope.searchContactIsDeactivated = false;\r\n $scope.searchAddressIsDeactivated = false;\r\n $scope.sortBy = 'Name';\r\n $scope.sortReverse = false;\r\n $scope.errorMessage = null;\r\n $scope.saving = false;\r\n $scope.saved = false;\r\n $scope.changePasswordUser = null;\r\n $scope.changePasswordErrorMessage = null;\r\n $scope.changingPassword = false;\r\n $scope.customerAccountTypes = null;\r\n $scope.vatCodes = null;\r\n $scope.ledgerNumbers = null;\r\n $scope.invoiceSetupOptions = null;\r\n $scope.invoiceDeliveries = null;\r\n $scope.invoiceDeliveryOptions = null;\r\n $scope.paymentTermStartOptions = null;\r\n $scope.loadingCustomers = false;\r\n $scope.loadingCustomer = false;\r\n $scope.defaultControlScreenConsignmentColumns = null;\r\n $scope.controlScreenConsignmentColumns = null;\r\n $scope.contactErrorMessage = null;\r\n $scope.requiredFieldError = 'Please note this is a required field';\r\n $scope.customerNameError = $scope.requiredFieldError;\r\n $scope.userEmailError = $scope.requiredFieldError;\r\n $scope.customerExists = false;\r\n\r\n //CustomerFactory.getCustomers()\r\n // .then(\r\n // function (response) {\r\n // $scope.customers = response;\r\n // $scope.loadingCustomers = false;\r\n // },\r\n // function (response, status) {\r\n // debugger;\r\n // }\r\n // );\r\n\r\n CommonFactory.getCustomerAccountTypes()\r\n .then(\r\n function (response) {\r\n $scope.customerAccountTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getVatCodes()\r\n .then(\r\n function (response) {\r\n $scope.vatCodes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getLedgerNumbers()\r\n .then(\r\n function (response) {\r\n $scope.ledgerNumbers = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CountryFactory.getCountries()\r\n .then(\r\n function () {\r\n $scope.countries = CountryFactory.countries;\r\n }\r\n );\r\n\r\n CommonFactory.getMatrixTypes()\r\n .then(\r\n function (response) {\r\n $scope.matrixTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getMatrixPriceIncrements()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrixIncrements = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAllVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getMatrices()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrices = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getInvoiceSetupOptions()\r\n .then(\r\n function (response) {\r\n $scope.invoiceSetupOptions = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getInvoiceDeliveries()\r\n .then(\r\n function (response) {\r\n $scope.invoiceDeliveries = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getInvoiceDeliveryOptions()\r\n .then(\r\n function (response) {\r\n $scope.invoiceDeliveryOptions = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getPaymentTermStartOptions()\r\n .then(\r\n function (response) {\r\n $scope.paymentTermStartOptions = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getXeroOrganisations()\r\n .then(\r\n function (response) {\r\n $scope.xeroOrganisations = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getControlScreenConsignmentColumns()\r\n .then(\r\n function (response) {\r\n $scope.defaultControlScreenConsignmentColumns = response;\r\n $scope.controlScreenConsignmentColumns = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n $scope.searchCustomers = function () {\r\n $scope.customers = null;\r\n $scope.customer = null;\r\n $scope.address = null;\r\n $scope.contact = null;\r\n $scope.createEditUser = false;\r\n $scope.priceMatrix = null;\r\n $scope.priceMatrixItem = null;\r\n\r\n $scope.loadingCustomers = true;\r\n\r\n CustomerFactory.searchCustomers($scope.searchName, $scope.searchCustomerAccountType, $scope.searchMonitoringEnabled, $scope.searchCustomPricing, $scope.searchIsDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.customers = response;\r\n $scope.loadingCustomers = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchCustomers();\r\n }\r\n\r\n $scope.addNewCustomer = function () {\r\n $scope.addresses = [];\r\n $scope.contacts = [];\r\n $scope.customer = CustomerFactory.createNewCustomer();\r\n }\r\n\r\n $scope.checkCustomerExists = function () {\r\n $scope.customerNameError = $scope.requiredFieldError;\r\n $scope.customerExists = false;\r\n\r\n CustomerFactory.checkCustomerExists($scope.customer.Name)\r\n .then(\r\n function (response) {\r\n if (response) {\r\n $scope.customerNameError = 'This customer name already exists in the system';\r\n $scope.customerDetailsForm.txtCustomerDetails_Name.$invalid = true;\r\n $scope.customerExists = true;\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.editCustomer = function (c) {\r\n $scope.loadingCustomer = true;\r\n $scope.addresses = [];\r\n $scope.contacts = [];\r\n\r\n CustomerFactory.getCustomer(c.Id)\r\n .then(\r\n function (response) {\r\n $scope.loadingCustomer = false;\r\n $scope.customer = response;\r\n\r\n $rootScope.$emit('title-updated', $scope.customer.Name);\r\n\r\n if ($scope.customer.Parent !== null) {\r\n $scope.customer.HasParent = true;\r\n }\r\n else {\r\n $scope.customer.HasParent = false;\r\n }\r\n\r\n if ($scope.customer.AccountType.Id.toUpperCase() === $scope.customerAccountTypeEnums.OnStop) {\r\n $scope.customerIsOnStop = true;\r\n }\r\n else {\r\n $scope.customerIsOnStop = false;\r\n }\r\n\r\n //if ($scope.customer.Matrices == null || $scope.customer.Matrices.length == 0) {\r\n // $scope.customer.Matrices = $scope.priceMatrices;\r\n //}\r\n\r\n if ($scope.customer.Matrices) {\r\n for (var i = 0; i < $scope.customer.Matrices.length; i++) {\r\n $scope.customer.Matrices[i].MinimumPrice = $filter('number')($scope.customer.Matrices[i].MinimumPrice, 2);\r\n }\r\n }\r\n\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if (!$scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if (!$scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n\r\n if ($scope.customer.ConsignmentControlScreenColumns && $scope.customer.ConsignmentControlScreenColumns.length > 0) {\r\n $scope.customer.useCustomControlScreen = true;\r\n $scope.controlScreenConsignmentColumns = $scope.customer.ConsignmentControlScreenColumns;\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.updateAddressList = function () {\r\n if ($scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$invalid || $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$invalid || $scope.customerDetailsForm.ddlCustomerAddresses_Country.$invalid) {\r\n $scope.CustomerAddressesFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.address.Id) {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if ($scope.customer.Addresses[i].Id === $scope.address.Id) {\r\n $scope.customer.Addresses[i] = $scope.address;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.customer.Addresses.push($scope.address);\r\n }\r\n\r\n $scope.addresses = [];\r\n\r\n if ($scope.searchAddressIsDeactivated) {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if ($scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if (!$scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n }\r\n\r\n $scope.address = null;\r\n $scope.CustomerAddressesFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$dirty = false;\r\n $scope.customerDetailsForm.ddlCustomerAddresses_Country.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$pristine = true;\r\n $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$pristine = true;\r\n $scope.customerDetailsForm.ddlCustomerAddresses_Country.$pristine = true;\r\n }\r\n\r\n $scope.addNewAddress = function () {\r\n $scope.address = {};\r\n }\r\n\r\n $scope.editAddress = function (a) {\r\n $scope.address = a;\r\n }\r\n\r\n $scope.cancelAddressEdit = function () {\r\n $scope.address = null;\r\n $scope.CustomerAddressesFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$dirty = false;\r\n $scope.customerDetailsForm.ddlCustomerAddresses_Country.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$pristine = true;\r\n $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$pristine = true;\r\n $scope.customerDetailsForm.ddlCustomerAddresses_Country.$pristine = true;\r\n }\r\n\r\n $scope.filterAddressList = function () {\r\n $scope.addresses = [];\r\n $scope.searchAddressIsDeactivated = !$scope.searchAddressIsDeactivated;\r\n\r\n if ($scope.searchAddressIsDeactivated) {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if ($scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if (!$scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n }\r\n }\r\n\r\n $scope.updateContactList = function () {\r\n if ($scope.customerDetailsForm.txtCustomerContacts_Name.$invalid) {\r\n $scope.CustomerContactsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n var contactNameAlreadyExists = false;\r\n\r\n if ($scope.contact.Id) {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if ($scope.customer.Contacts[i].Id === $scope.contact.Id) {\r\n for (var j = 0; j < $scope.customer.Contacts.length; j++) {\r\n if ($scope.contact.Id !== $scope.customer.Contacts[j].Id) {\r\n if ($scope.contact.Name.trim().toUpperCase() === $scope.customer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n\t\t\t\t\t\t}\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n\r\n $scope.customer.Contacts[i] = $scope.contact;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if ($scope.contact.Name.trim().toUpperCase() === $scope.customer.Contacts[i].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n\t\t\t}\r\n\r\n $scope.customer.Contacts.push($scope.contact);\r\n $scope.contacts.push($scope.contact);\r\n }\r\n\r\n $scope.contacts = [];\r\n\r\n if ($scope.searchContactIsDeactivated) {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if ($scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if (!$scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n }\r\n\r\n $scope.contact = null;\r\n $scope.CustomerContactsFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerContacts_Name.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerContacts_Name.$pristine = true;\r\n }\r\n\r\n $scope.addNewContact = function () {\r\n $scope.contact = {};\r\n }\r\n\r\n $scope.editContact = function (c) {\r\n $scope.contact = c;\r\n }\r\n\r\n $scope.cancelContactEdit = function () {\r\n $scope.contact = null;\r\n $scope.CustomerContactsFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerContacts_Name.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerContacts_Name.$pristine = true;\r\n }\r\n\r\n $scope.filterContactList = function () {\r\n $scope.contacts = [];\r\n $scope.searchContactIsDeactivated = !$scope.searchContactIsDeactivated;\r\n\r\n if ($scope.searchContactIsDeactivated) {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if ($scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n }\r\n else{\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if (!$scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n }\r\n }\r\n\r\n $scope.updateUserList = function (customerUser) {\r\n if ($scope.customerDetailsForm.txtCustomerUsers_Email.$invalid || $scope.customerDetailsForm.txtCustomerUsers_Email.$invalid || ($scope.customerDetailsForm.txtCustomerUsers_Password.$invalid && $scope.customerUser.Id == null) || ($scope.customerDetailsForm.txtCustomerUsers_ConfirmPassword.$invalid && $scope.customerUser.Id == null)) {\r\n $scope.CustomerUsersFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.customerUser.Id) {\r\n for (var i = 0; i < $scope.customer.CustomerUsers.length; i++) {\r\n if ($scope.customer.CustomerUsers[i].Id === $scope.customerUser.Id) {\r\n $scope.customer.CustomerUsers[i] = $scope.customerUser;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.customer.CustomerUsers.push($scope.customerUser);\r\n }\r\n\r\n $scope.customerUser = null;\r\n $scope.createEditUser = false;\r\n $scope.CustomerUsersFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerUsers_Email.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerUsers_Password.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerUsers_ConfirmPassword.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerUsers_Email.$pristine = true;\r\n $scope.customerDetailsForm.txtCustomerUsers_Password.$pristine = true;\r\n $scope.customerDetailsForm.txtCustomerUsers_ConfirmPassword.$pristine = true;\r\n }\r\n\r\n $scope.addNewUser = function () {\r\n $scope.customerUser = {};\r\n $scope.createEditUser = true;\r\n }\r\n\r\n $scope.checkUserExists = function () {\r\n $scope.userEmailError = $scope.requiredFieldError;\r\n\r\n UserFactory.checkUserExists($scope.customerUser.Email)\r\n .then(\r\n function (response) {\r\n if (response) {\r\n $scope.userEmailError = 'This user email already exists in the system';\r\n $scope.customerDetailsForm.txtCustomerUsers_Email.$invalid = true;\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.editUser = function (u) {\r\n $scope.customerUser = u;\r\n $scope.createEditUser = true;\r\n }\r\n\r\n $scope.cancelUserEdit = function () {\r\n $scope.customerUser = null;\r\n $scope.createEditUser = false;\r\n\r\n if ($scope.customerContactForm) {\r\n $scope.customerContactForm.txtCustomerUsers_Email.$dirty = false;\r\n $scope.customerContactForm.txtCustomerUsers_Email.$dirty = false;\r\n $scope.customerContactForm.txtCustomerUsers_Password.$dirty = false;\r\n $scope.customerContactForm.txtCustomerUsers_ConfirmPassword.$dirty = false;\r\n $scope.customerContactForm.txtCustomerUsers_Email.$pristine = true;\r\n $scope.customerContactForm.txtCustomerUsers_Email.$pristine = true;\r\n $scope.customerContactForm.txtCustomerUsers_Password.$pristine = true;\r\n $scope.customerContactForm.txtCustomerUsers_ConfirmPassword.$pristine = true;\r\n }\r\n }\r\n\r\n $scope.selectUser = function (u) {\r\n $scope.changePasswordUser = {\r\n Id: u.Id,\r\n Role: u.Role,\r\n Email: u.Email,\r\n Username: u.Username,\r\n Password: '',\r\n ConfirmPassword: '',\r\n IsDeactivated: u.IsDeactivated\r\n };\r\n\r\n AtlasModalFactory.open('changePasswordModal');\r\n }\r\n\r\n $scope.openChangePasswordModal = function () {\r\n \r\n\t}\r\n\r\n $scope.changeUserPassword = function () {\r\n $scope.changingPassword = true;\r\n\r\n UserFactory.changePassword($scope.changePasswordUser)\r\n .then(\r\n function (response) {\r\n $scope.changingPassword = false;\r\n\r\n AtlasModalFactory.close('changePasswordModal');\r\n },\r\n function (response, status) {\r\n $scope.changingPassword = false;\r\n $scope.changePasswordErrorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.updatePricingList = function () {\r\n if ($scope.priceMatrix.Id) {\r\n for (var i = 0; i < $scope.customer.Matrices.length; i++) {\r\n if ($scope.customer.Matrices[i].Id === $scope.priceMatrix.Id) {\r\n $scope.customer.Matrices[i] = $scope.priceMatrix;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.customer.Matrices.push($scope.priceMatrix);\r\n }\r\n\r\n $scope.priceMatrix = null;\r\n }\r\n\r\n $scope.addNewPriceMatrix = function () {\r\n var type = null;\r\n\r\n for (var i = 0; i < $scope.matrixTypes.length; i++) {\r\n if ($scope.matrixTypes[i].Name.toUpperCase() === 'PRICING') {\r\n type = $scope.matrixTypes[i];\r\n }\r\n }\r\n\r\n $scope.priceMatrix = {\r\n MatrixType: type\r\n };\r\n }\r\n\r\n $scope.editPriceMatrix = function (m) {\r\n $scope.priceMatrix = m;\r\n }\r\n\r\n $scope.deletePriceMatrix = function (m, index) {\r\n $scope.customer.Matrices.splice(index, 1);\r\n }\r\n\r\n $scope.cancelPriceMatrixEdit = function () {\r\n $scope.priceMatrix = null;\r\n }\r\n\r\n $scope.updatePricingMatrixList = function () {\r\n if ($scope.priceMatrix.Id) {\r\n for (var i = 0; i < $scope.customer.Matrices.length; i++) {\r\n if ($scope.customer.Matrices[i].Id === $scope.priceMatrix.Id) {\r\n $scope.customer.Matrices[i] = $scope.priceMatrix;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.customer.Matrices.push($scope.priceMatrix);\r\n }\r\n\r\n $scope.priceMatrix = null;\r\n }\r\n\r\n $scope.addNewPriceMatrixItem = function () {\r\n $scope.priceMatrixItem = {};\r\n }\r\n\r\n $scope.editPriceMatrixItem = function (m, index) {\r\n $scope.priceMatrixItem = m;\r\n $scope.priceMatrixItem.Index = index;\r\n }\r\n\r\n $scope.removePriceMatrixItem = function (m, index) {\r\n $scope.priceMatrix.PriceMatrices.splice(index, 1);\r\n }\r\n\r\n $scope.updatePricingMatrixItemList = function () {\r\n if ($scope.priceMatrixItem.Index != null || $scope.priceMatrixItem.Index != undefined) {\r\n $scope.priceMatrix.PriceMatrices[$scope.priceMatrixItem.Index] = $scope.priceMatrixItem;\r\n }\r\n else {\r\n if (!$scope.priceMatrix.PriceMatrices) $scope.priceMatrix.PriceMatrices = [];\r\n\r\n $scope.priceMatrix.PriceMatrices.push($scope.priceMatrixItem);\r\n }\r\n\r\n $scope.priceMatrixItem = null;\r\n }\r\n\r\n $scope.cancelPriceMatrixItemEdit = function () {\r\n $scope.priceMatrixItem = null;\r\n }\r\n\r\n $scope.changeCustomerAccountType = function () {\r\n $scope.customerIsOnStop = false;\r\n\r\n if ($scope.customer.AccountType.Id.toUpperCase() === $scope.customerAccountTypeEnums.OnStop) {\r\n $scope.customerIsOnStop = true;\r\n }\r\n }\r\n\r\n $scope.closeChangePasswordModal = function () {\r\n AtlasModalFactory.close('changePasswordModal');\r\n\t}\r\n\r\n $scope.saveCustomer = function () {\r\n $scope.errorMessage = null;\r\n \r\n if ($scope.customerExists) {\r\n $scope.errorMessage = 'A customer with this name already exists. Please change the name and try again.'\r\n return false;\r\n }\r\n\r\n $scope.saving = true;\r\n var existingCustomer = ($scope.customer.Id) ? true : false;\r\n\r\n if ($scope.customer.useCustomControlScreen && ($scope.customer.ConsignmentControlScreenColumns == null || $scope.customer.ConsignmentControlScreenColumns.length == 0)) {\r\n $scope.customer.ConsignmentControlScreenColumns = $scope.controlScreenConsignmentColumns;\r\n\r\n for (var i = 0; i < $scope.customer.ConsignmentControlScreenColumns.length; i++) {\r\n delete $scope.customer.ConsignmentControlScreenColumns[i].Id;\r\n }\r\n }\r\n else if(!$scope.customer.useCustomControlScreen && $scope.customer.ConsignmentControlScreenColumns != null && $scope.customer.ConsignmentControlScreenColumns.length > 0) {\r\n $scope.customer.ConsignmentControlScreenColumns = [];\r\n }\r\n\r\n CustomerFactory.saveCustomer()\r\n .then(\r\n function (customer) {\r\n CustomerFactory.getCustomer(customer.Id)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n $scope.customer = response;\r\n $scope.addresses = [];\r\n $scope.contacts = [];\r\n\r\n $rootScope.$emit('title-updated', $scope.customer.Name);\r\n\r\n if (existingCustomer) {\r\n for (var i = 0; i < $scope.customers.length; i++) {\r\n if ($scope.customers[i].Id === $scope.customer.Id) {\r\n $scope.customers[i] = $scope.customer;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.customer.Parent !== null) {\r\n $scope.customer.HasParent = true;\r\n }\r\n else {\r\n $scope.customer.HasParent = false;\r\n }\r\n\r\n $scope.customers.push($scope.customer);\r\n }\r\n\r\n if ($scope.customer.AccountType.Id.toUpperCase() === $scope.customerAccountTypeEnums.OnStop) {\r\n $scope.customerIsOnStop = true;\r\n }\r\n\r\n //if ($scope.customer.Matrices == null || $scope.customer.Matrices.length == 0) {\r\n // $scope.customer.Matrices = $scope.priceMatrices;\r\n //}\r\n\r\n if ($scope.customer.Matrices) {\r\n for (var i = 0; i < $scope.customer.Matrices.length; i++) {\r\n $scope.customer.Matrices[i].MinimumPrice = $filter('number')($scope.customer.Matrices[i].MinimumPrice, 2);\r\n }\r\n }\r\n\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if (!$scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if (!$scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n\r\n if ($scope.customer.ConsignmentControlScreenColumns && $scope.customer.ConsignmentControlScreenColumns.length > 0) {\r\n $scope.customer.useCustomControlScreen = true;\r\n $scope.controlScreenConsignmentColumns = $scope.customer.ConsignmentControlScreenColumns;\r\n }\r\n else {\r\n $scope.customer.useCustomControlScreen = false;\r\n $scope.controlScreenConsignmentColumns = $scope.defaultControlScreenConsignmentColumns;\r\n }\r\n\r\n FoundationApi.publish('customer-notifications', { title: 'Customer Record Saved', content: 'The customer record for ' + $scope.customer.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n }, \r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.moveColumnOrderUp = function (column, index) {\r\n if (column.Order === 1) return;\r\n\r\n $scope.controlScreenConsignmentColumns[index].Order -= 1;\r\n $scope.controlScreenConsignmentColumns[index - 1].Order += 1;\r\n\r\n $scope.controlScreenConsignmentColumns = clickinon.utilities.moveElementInArray($scope.controlScreenConsignmentColumns, index, (index - 1));\r\n }\r\n\r\n $scope.moveColumnOrderDown = function (column, index) {\r\n if (column.Order === ($scope.controlScreenConsignmentColumns.length + 1)) return;\r\n\r\n $scope.controlScreenConsignmentColumns[index].Order += 1;\r\n $scope.controlScreenConsignmentColumns[index + 1].Order -= 1;\r\n\r\n $scope.controlScreenConsignmentColumns = clickinon.utilities.moveElementInArray($scope.controlScreenConsignmentColumns, index, (index + 1));\r\n }\r\n}]);","settings.controller('SettingsController', ['$rootScope', '$scope', '$http', '$filter', '$state', 'FoundationApi', 'UserFactory', 'AtlasUserFactory', 'SettingsFactory', 'CommonFactory', 'AtlasModalFactory', 'CountryFactory', function ($rootScope, $scope, $http, $filter, $state, FoundationApi, UserFactory, AtlasUserFactory, SettingsFactory, CommonFactory, AtlasModalFactory, CountryFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Settings');\r\n $scope.loading = true;\r\n $scope.globalSettings = null;\r\n $scope.vatCodes = null;\r\n $scope.vatCode = null;\r\n $scope.currencies = null;\r\n $scope.currency = null;\r\n $scope.supplierTypes = null;\r\n $scope.supplierType = null;\r\n $scope.supplierBillingTypes = null;\r\n $scope.supplierBillingType = null;\r\n $scope.supplierBillingTypeBrandingTheme = null;\r\n $scope.searchSupplierBillingType = {\r\n name: null,\r\n isDeactivated: false\r\n };\r\n $scope.brandingThemes = null;\r\n $scope.searchLicenceCategory = {\r\n name: null,\r\n isDeactivated: false\r\n }; \r\n $scope.licenceCategories = null;\r\n $scope.licenceCategory = null;\r\n $scope.ledgerNumbers = null;\r\n $scope.ledgerNumber = null;\r\n $scope.searchAtlasUser = {\r\n username: null,\r\n email: null,\r\n isDeactivated: false\r\n }; \r\n $scope.atlasUsers = null;\r\n $scope.atlasUser = null;\r\n $scope.roles = null;\r\n $scope.searchAdditionalCharge = {\r\n chargeFor: null,\r\n isDeactivated: false\r\n }; \r\n $scope.additionalCharges = null;\r\n $scope.additionalCharge = null;\r\n $scope.searchVehicleType = {\r\n name: null,\r\n isDeactivated: false\r\n }; \r\n $scope.vehicleTypes = null;\r\n $scope.vehicleType = null;\r\n $scope.priceMatrices = null;\r\n $scope.priceMatrix = null;\r\n $scope.priceMatrixItem = null;\r\n $scope.matrixTypes = null;\r\n $scope.priceMatrixIncrements = null;\r\n $scope.errorMessage = null;\r\n $scope.saving = null;\r\n $scope.changePasswordUser = null;\r\n $scope.changePasswordErrorMessage = null;\r\n $scope.changingPassword = false;\r\n $scope.updatingVehicleOrder = false;\r\n $scope.whitelistedIpAddresses = null;\r\n $scope.whitelistedIpAddress = null;\r\n $scope.userIpLogs = null;\r\n $scope.searchAreaAdditionalCharge = {\r\n name: null,\r\n postCode: null,\r\n isDeactivated: false\r\n }; \r\n $scope.areaAdditionalChargeRules = null;\r\n $scope.areaAdditionalChargeRule = null;\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n $scope.settingsForms = {};\r\n $scope.userEmailError = null;\r\n $scope.updatingAdditionalChargeOrder = false;\r\n $scope.globalAddresses = null;\r\n $scope.globalAddress = null;\r\n $scope.countries = null;\r\n\r\n SettingsFactory.getGlobalSettings()\r\n .then(\r\n function (response) {\r\n $scope.globalSettings = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAllVatCodes()\r\n .then(\r\n function (response) {\r\n $scope.vatCodes = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAllSupplierTypes()\r\n .then(\r\n function (response) {\r\n $scope.supplierTypes = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchLicenceCategories($scope.searchLicenceCategory.name, $scope.searchLicenceCategory.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.licenceCategories = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAllLedgerNumbers()\r\n .then(\r\n function (response) {\r\n $scope.ledgerNumbers = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchAdditionalCharges($scope.searchAdditionalCharge.chargeFor, $scope.searchAdditionalCharge.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.additionalCharges = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchVehicleTypes($scope.searchVehicleType.name, $scope.searchVehicleType.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n }\r\n );\r\n\r\n CommonFactory.getMatrixTypes()\r\n .then(\r\n function (response) {\r\n $scope.matrixTypes = response;\r\n\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getMatrixPriceIncrements()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrixIncrements = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getMatrices()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrices = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchAtlasUsers($scope.searchAtlasUser.username, $scope.searchAtlasUser.email, $scope.searchAtlasUser.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.atlasUsers = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getAtlasUserRoles()\r\n .then(\r\n function (response) {\r\n $scope.roles = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getWhitelistedIpAddresses()\r\n .then(\r\n function (response) {\r\n $scope.whitelistedIpAddresses = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchAreaAdditionalChargeRules($scope.searchAreaAdditionalCharge.name, $scope.searchAreaAdditionalCharge.postCode, $scope.searchAreaAdditionalCharge.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getBrandingThemes()\r\n .then(\r\n function (response) {\r\n $scope.brandingThemes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchSupplierBillingTypes($scope.searchSupplierBillingType.name, $scope.searchSupplierBillingType.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.supplierBillingTypes = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getGlobalAddresses()\r\n .then(\r\n function (response) {\r\n $scope.globalAddresses = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CountryFactory.getCountries()\r\n .then(\r\n function () {\r\n $scope.countries = CountryFactory.countries;\r\n }\r\n );\r\n\r\n $scope.saveGlobalSettings = function () {\r\n $scope.saving = true;\r\n\r\n SettingsFactory.saveGlobalSettings()\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Global Settings Record Saved', content: 'The global settings have been successfully saved', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewVATCode = function(){\r\n $scope.vatCode = {};\r\n }\r\n\r\n $scope.editVatCode = function (v) {\r\n $scope.vatCode = v;\r\n }\r\n\r\n $scope.saveVATCode = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingVATCode = $scope.vatCode.Id ? true : false;\r\n\r\n SettingsFactory.saveVatCodes($scope.vatCode)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'VAT Code Saved', content: 'The vat code ' + $scope.vatCode.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.vatCode = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelVATCodeSave = function () {\r\n $scope.vatCode = null;\r\n }\r\n\r\n $scope.addNewCurrency = function () {\r\n $scope.currency = {};\r\n }\r\n\r\n $scope.editCurrency = function (c) {\r\n $scope.currency = c;\r\n }\r\n\r\n $scope.saveCurrency = function () {\r\n //$scope.errorMessage = null;\r\n //$scope.saving = true;\r\n\r\n //if (!$scope.currency.Id) {\r\n // $http.post(__WEB_SERVICE_BASE_URL + '/Currencies', $scope.currency)\r\n // .success(function (response) {\r\n // $scope.saving = false;\r\n // $scope.errorMessage = null;\r\n // $scope.currencies.push($scope.currency);\r\n // })\r\n // .error(function (response, status) {\r\n // $scope.saving = false;\r\n // $scope.errorMessage = \"An error has occurred.\"\r\n // });\r\n //}\r\n //else {\r\n // $http.put(__WEB_SERVICE_BASE_URL + '/Currencies/' + $scope.currency.Id, $scope.currency)\r\n // .success(function (response) {\r\n // for (var i = 0; i < $scope.currencies.length; i++) {\r\n // if ($scope.currencies[i].Id == $scope.currency.Id) {\r\n // $scope.currencies[i] = $scope.currency;\r\n // $scope.errorMessage = null;\r\n // break;\r\n // }\r\n // }\r\n // $scope.saving = false;\r\n // })\r\n // .error(function (response, status) {\r\n // $scope.saving = false;\r\n // $scope.errorMessage = \"An error has occurred.\"\r\n // });\r\n //}\r\n }\r\n\r\n $scope.cancelCurrencySave = function () {\r\n $scope.currency = null;\r\n }\r\n\r\n $scope.addNewSupplierType = function () {\r\n $scope.supplierType = {};\r\n }\r\n\r\n $scope.editSupplierType = function (t) {\r\n $scope.supplierType = t;\r\n }\r\n\r\n $scope.saveSupplierType = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingSupplierType = $scope.supplierType.Id ? true : false;\r\n\r\n SettingsFactory.saveSupplierTypes($scope.supplierType)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Supplier Type Saved', content: 'The supplier type ' + $scope.supplierType.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.supplierType = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelSupplierTypeSave = function () {\r\n $scope.supplierType = null;\r\n }\r\n\r\n $scope.addNewSupplierBillingType = function () {\r\n $scope.supplierBillingType = {};\r\n }\r\n\r\n $scope.editSupplierBillingType = function (t) {\r\n $scope.supplierBillingType = t;\r\n var brandingTheme = $scope.supplierBillingType.BrandingTheme;\r\n\r\n $scope.supplierBillingType.SelectedBrandingTheme = {\r\n Name: brandingTheme\r\n };\r\n }\r\n\r\n $scope.saveSupplierBillingType = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingSupplierBillingType = $scope.supplierBillingType.Id ? true : false;\r\n\r\n $scope.supplierBillingType.BrandingTheme = $scope.supplierBillingType.SelectedBrandingTheme.Name;\r\n\r\n SettingsFactory.saveSupplierBillingTypes($scope.supplierBillingType)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Supplier Billing Type Saved', content: 'The supplier billing type ' + $scope.supplierBillingType.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.supplierBillingType = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelSupplierBillingTypeSave = function () {\r\n $scope.supplierBillingType = null;\r\n }\r\n\r\n $scope.addNewLicenceCategory = function () {\r\n $scope.licenceCategory = {};\r\n }\r\n\r\n $scope.editLicenceCategory = function (c) {\r\n $scope.licenceCategory = c;\r\n }\r\n\r\n $scope.saveLicenceCategory = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingLicenceCategory = $scope.licenceCategory.Id ? true : false;\r\n\r\n SettingsFactory.saveLicenceCategories($scope.licenceCategory)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Licence Category Saved', content: 'The licence category ' + $scope.licenceCategory.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.licenceCategory = null;\r\n\r\n $scope.searchLicenceCategories();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelLicenceCategorySave = function () {\r\n $scope.licenceCategory = null;\r\n }\r\n\r\n $scope.searchLicenceCategories = function () {\r\n $scope.licenceCategories = null;\r\n\r\n SettingsFactory.searchLicenceCategories($scope.searchLicenceCategory.name, $scope.searchLicenceCategory.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.licenceCategories = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewLedgerNumber = function () {\r\n $scope.ledgerNumber = {};\r\n }\r\n\r\n $scope.editLedgerNumber = function (c) {\r\n $scope.ledgerNumber = c;\r\n }\r\n\r\n $scope.saveLedgerNumber = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingLedgerNumber = $scope.ledgerNumber.Id ? true : false;\r\n\r\n SettingsFactory.saveLedgerNumbers($scope.ledgerNumber)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Ledger Number Saved', content: 'The ledger number ' + $scope.ledgerNumber.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.ledgerNumber = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelLedgerNumberSave = function () {\r\n $scope.ledgerNumber = null;\r\n }\r\n\r\n $scope.addNewAdditionalCharge = function () {\r\n $scope.additionalCharge = {};\r\n }\r\n\r\n $scope.editAdditionalCharge = function (c) {\r\n $scope.additionalCharge = c;\r\n }\r\n\r\n $scope.moveAdditionalChargeUp = function (v, i) {\r\n if (i !== 0 && !$scope.updatingAdditionalChargeOrder) {\r\n $scope.updatingAdditionalChargeOrder = true;\r\n\r\n $scope.additionalCharges[(i - 1)].Order = ((i + 1) * 10);\r\n $scope.additionalCharges[i].Order = (i * 10);\r\n\r\n SettingsFactory.saveAdditionalCharges($scope.additionalCharges[(i - 1)])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveAdditionalCharges($scope.additionalCharges[i])\r\n .then(\r\n function (response) {\r\n //$scope.vehicleTypes.move(i, (i - 1));\r\n $scope.additionalCharges = clickinon.utilities.moveElementInArray($scope.additionalCharges, i, (i - 1));\r\n\r\n $scope.updatingAdditionalChargeOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAdditionalChargeOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAdditionalChargeOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.moveAdditionalChargeDown = function (v, i) {\r\n if (i !== ($scope.additionalCharges.length - 1) && !$scope.updatingAdditionalChargeOrder) {\r\n $scope.updatingAdditionalChargeOrder = true;\r\n\r\n $scope.additionalCharges[i].Order = ((i + 2) * 10);\r\n $scope.additionalCharges[(i + 1)].Order = ((i + 1) * 10);\r\n\r\n SettingsFactory.saveAdditionalCharges($scope.additionalCharges[i])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveAdditionalCharges($scope.additionalCharges[(i + 1)])\r\n .then(\r\n function (response) {\r\n //$scope.vehicleTypes.move(i, (i + 1));\r\n $scope.additionalCharges = clickinon.utilities.moveElementInArray($scope.additionalCharges, i, (i + 1));\r\n\r\n $scope.updatingAdditionalChargeOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAdditionalChargeOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAdditionalChargeOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.saveAdditionalCharge = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingAdditionalCharge = $scope.additionalCharge.Id ? true : false;\r\n\r\n SettingsFactory.saveAdditionalCharges($scope.additionalCharge)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Additional Charge Saved', content: 'The additional charge ' + $scope.additionalCharge.ChargeFor + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.additionalCharge = null;\r\n\r\n $scope.searchAdditionalCharges();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelAdditionalChargeSave = function () {\r\n $scope.additionalCharge = null;\r\n }\r\n\r\n $scope.searchAdditionalCharges = function () {\r\n $scope.additionalCharges = null;\r\n\r\n SettingsFactory.searchAdditionalCharges($scope.searchAdditionalCharge.chargeFor, $scope.searchAdditionalCharge.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.additionalCharges = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.searchAtlasUsers = function () {\r\n $scope.atlasUsers = null;\r\n\r\n SettingsFactory.searchAtlasUsers($scope.searchAtlasUser.username, $scope.searchAtlasUser.email, $scope.searchAtlasUser.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.atlasUsers = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewUser = function () {\r\n $scope.atlasUser = {};\r\n }\r\n\r\n $scope.checkUserExists = function () {\r\n $scope.userEmailError = null;\r\n\r\n UserFactory.checkUserExists($scope.atlasUser.Email)\r\n .then(\r\n function (response) {\r\n if (response) {\r\n $scope.userEmailError = 'This user email already exists in the system';\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.editUser = function (u) {\r\n $scope.atlasUser = u;\r\n }\r\n\r\n $scope.selectUser = function (u) {\r\n $scope.changePasswordUser = {\r\n Id: u.Id,\r\n AtlasUserRole: u.AtlasUserRole,\r\n Role: u.Role,\r\n Email: u.Email,\r\n Username: u.Username,\r\n Password: '',\r\n ConfirmPassword: '',\r\n IsDeactivated: u.IsDeactivated\r\n };\r\n\r\n AtlasModalFactory.open('changePasswordModal');\r\n }\r\n\r\n $scope.changeUserPassword = function () {\r\n $scope.changingPassword = true;\r\n\r\n UserFactory.changePassword($scope.changePasswordUser)\r\n .then(\r\n function (response) {\r\n $scope.changingPassword = false;\r\n\r\n AtlasModalFactory.close('changePasswordModal');\r\n },\r\n function (response, status) {\r\n $scope.changingPassword = false;\r\n $scope.changePasswordErrorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.closeChangePasswordModal = function () {\r\n AtlasModalFactory.close('changePasswordModal');\r\n\t}\r\n\r\n $scope.saveUser = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingUser = $scope.atlasUser.Id ? true : false;\r\n\r\n if ($scope.atlasUser.Id == null && $scope.atlasUser.Password !== $scope.atlasUser.ConfirmPassword) {\r\n $scope.errorMessage = 'Passwords do not match!';\r\n $scope.saving = false;\r\n return false;\r\n }\r\n\r\n SettingsFactory.saveAtlasUsers($scope.atlasUser)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'User Saved', content: 'The user ' + $scope.atlasUser.Username + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.atlasUser = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelUserSave = function () {\r\n $scope.atlasUser = null;\r\n }\r\n\r\n $scope.addNewVehicleType = function () {\r\n $scope.vehicleType = {};\r\n }\r\n\r\n $scope.editVehicleType = function (v) {\r\n $scope.vehicleType = v;\r\n }\r\n\r\n $scope.moveVehicleTypeUp = function (v, i) {\r\n if (i !== 0 && !$scope.updatingVehicleOrder) {\r\n $scope.updatingVehicleOrder = true;\r\n\r\n $scope.vehicleTypes[(i - 1)].Order = ((i + 1) * 10);\r\n $scope.vehicleTypes[i].Order = (i * 10);\r\n\r\n SettingsFactory.saveVehicleTypes($scope.vehicleTypes[(i - 1)])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveVehicleTypes($scope.vehicleTypes[i])\r\n .then(\r\n function (response) {\r\n //$scope.vehicleTypes.move(i, (i - 1));\r\n $scope.vehicleTypes = clickinon.utilities.moveElementInArray($scope.vehicleTypes, i, (i - 1));\r\n\r\n $scope.updatingVehicleOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingVehicleOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingVehicleOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.moveVehicleTypeDown = function (v, i) {\r\n if (i !== ($scope.vehicleTypes.length - 1) && !$scope.updatingVehicleOrder) {\r\n $scope.updatingVehicleOrder = true;\r\n\r\n $scope.vehicleTypes[i].Order = ((i + 2) * 10);\r\n $scope.vehicleTypes[(i + 1)].Order = ((i + 1) * 10);\r\n\r\n SettingsFactory.saveVehicleTypes($scope.vehicleTypes[i])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveVehicleTypes($scope.vehicleTypes[(i + 1)])\r\n .then(\r\n function (response) {\r\n //$scope.vehicleTypes.move(i, (i + 1));\r\n $scope.vehicleTypes = clickinon.utilities.moveElementInArray($scope.vehicleTypes, i, (i + 1));\r\n\r\n $scope.updatingVehicleOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingVehicleOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingVehicleOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.saveVehicleType = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingVehicleType = $scope.vehicleType.Id ? true : false;\r\n\r\n SettingsFactory.saveVehicleTypes($scope.vehicleType)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Vehicle Type Saved', content: 'The vehicle type ' + $scope.vehicleType.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.vehicleType = null;\r\n this.vehicleTypesForm.$setPristine();\r\n this.vehicleTypesForm.$setUntouched();\r\n\r\n $scope.searchVehicleTypes();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelVehicleTypeSave = function () {\r\n $scope.vehicleType = null;\r\n }\r\n\r\n $scope.searchVehicleTypes = function () {\r\n $scope.vehicleTypes = null;\r\n\r\n SettingsFactory.searchVehicleTypes($scope.searchVehicleType.name, $scope.searchVehicleType.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewPriceMatrix = function () {\r\n $scope.priceMatrix = {};\r\n }\r\n\r\n $scope.editPriceMatrix = function (m) {\r\n $scope.priceMatrix = angular.copy(m);\r\n }\r\n\r\n $scope.copyPriceMatrix = function (m) {\r\n $scope.priceMatrix = angular.copy(m);\r\n\r\n delete $scope.priceMatrix.Id;\r\n $scope.priceMatrix.Name += ' - Copy';\r\n\r\n for (var i = 0; i < $scope.priceMatrix.PriceMatrices.length; i++) {\r\n delete $scope.priceMatrix.PriceMatrices[i].Id;\r\n\t\t}\r\n\t}\r\n\r\n $scope.savePriceMatrix = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingPriceMatrix = $scope.priceMatrix.Id ? true : false;\r\n\r\n SettingsFactory.saveMatrices($scope.priceMatrix)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Price Matrix Saved', content: 'The price matrix ' + $scope.priceMatrix.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\";\r\n }\r\n );\r\n }\r\n\r\n $scope.deletePriceMatrix = function (m, index) {\r\n SettingsFactory.deleteMatrix(m)\r\n .then(\r\n function (matrix) {\r\n $scope.priceMatrices.splice(1, index);\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Price Matrix Deleted', content: 'The price matrix ' + matrix.Name + ' has been successfully deleted', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelPriceMatrixSave = function () {\r\n $scope.priceMatrix = null;\r\n }\r\n\r\n $scope.addNewPriceMatrixItem = function () {\r\n $scope.priceMatrixItem = {};\r\n }\r\n\r\n $scope.editPriceMatrixItem = function (m, index) {\r\n $scope.priceMatrixItem = m;\r\n $scope.priceMatrixItem.Index = index;\r\n }\r\n\r\n $scope.removePriceMatrixItem = function (m, index) {\r\n $scope.priceMatrix.PriceMatrices.splice(index, 1);\r\n }\r\n\r\n $scope.updatePricingMatrixList = function () {\r\n if ($scope.priceMatrixItem.Index != null) {\r\n $scope.priceMatrix.PriceMatrices[$scope.priceMatrixItem.Index] = $scope.priceMatrixItem;\r\n }\r\n else {\r\n if (!$scope.priceMatrix.PriceMatrices) $scope.priceMatrix.PriceMatrices = [];\r\n\r\n $scope.priceMatrix.PriceMatrices.push($scope.priceMatrixItem);\r\n }\r\n\r\n $scope.priceMatrixItem = null;\r\n }\r\n\r\n $scope.cancelPriceMatrixEdit = function () {\r\n $scope.priceMatrixItem = null;\r\n }\r\n\r\n $scope.addNewWhitelistedIpAddress = function () {\r\n $scope.whitelistedIpAddress = {};\r\n $scope.whitelistedIpAddress.Value1 = 0;\r\n $scope.whitelistedIpAddress.Value2 = 0;\r\n $scope.whitelistedIpAddress.Value3 = 0;\r\n $scope.whitelistedIpAddress.Value4 = 0;\r\n }\r\n\r\n $scope.editWhitelistedIpAddress = function (i) {\r\n $scope.whitelistedIpAddress = i;\r\n\r\n var whitelistedIpAddressParts = $scope.whitelistedIpAddress.Value.split('.');\r\n\r\n $scope.whitelistedIpAddress.Value1 = parseInt(whitelistedIpAddressParts[0], 0);\r\n $scope.whitelistedIpAddress.Value2 = parseInt(whitelistedIpAddressParts[1], 0);\r\n $scope.whitelistedIpAddress.Value3 = parseInt(whitelistedIpAddressParts[2], 0);\r\n $scope.whitelistedIpAddress.Value4 = parseInt(whitelistedIpAddressParts[3], 0);\r\n }\r\n\r\n $scope.saveWhitelistedIpAddress = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n\r\n $scope.whitelistedIpAddress.Value = $scope.whitelistedIpAddress.Value1 + '.' + $scope.whitelistedIpAddress.Value2 + '.' + $scope.whitelistedIpAddress.Value3 + '.' + $scope.whitelistedIpAddress.Value4;\r\n\r\n SettingsFactory.saveWhitelistedIpAddress($scope.whitelistedIpAddress)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Whitelisted Ip Address Saved', content: 'The whitelisted ip address ' + $scope.whitelistedIpAddress.Value + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.whitelistedIpAddress = null;\r\n this.whitelistedIpAddressesForm.$setPristine();\r\n this.whitelistedIpAddressesForm.$setUntouched();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\";\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelWhitelistedIpAddressSave = function () {\r\n $scope.whitelistedIpAddress = null;\r\n }\r\n\r\n $scope.deleteWhitelistedIpAddress = function (index, whitelistedIpAddress) {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n\r\n SettingsFactory.deleteWhitelistedIpAddress(whitelistedIpAddress)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Whitelisted Ip Address Deleted', content: 'The whitelisted ip address ' + whitelistedIpAddress.Value + ' has been successfully deleted', color: 'success', autoclose: 2000 });\r\n\r\n $scope.whitelistedIpAddresses.splice(index, 1);\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\";\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewAreaAdditionalChargeRule = function () {\r\n $scope.areaAdditionalChargeRule = {};\r\n }\r\n\r\n $scope.editAreaAdditionalChargeRule = function (c) {\r\n $scope.areaAdditionalChargeRule = c;\r\n }\r\n\r\n $scope.moveAreaAdditionalChargeRuleUp = function (v, i) {\r\n if (i !== 0 && !$scope.updatingAreaAdditionalChargeRuleOrder) {\r\n $scope.updatingAreaAdditionalChargeRuleOrder = true;\r\n\r\n $scope.areaAdditionalChargeRules[(i - 1)].Order = ((i + 1) * 10);\r\n $scope.areaAdditionalChargeRules[i].Order = (i * 10);\r\n\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRules[(i - 1)])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRules[i])\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = clickinon.utilities.moveElementInArray($scope.areaAdditionalChargeRules, i, (i - 1));\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.moveAreaAdditionalChargeRuleDown = function (v, i) {\r\n if (i !== ($scope.vehicleTypes.length - 1) && !$scope.updatingAreaAdditionalChargeRuleOrder) {\r\n $scope.updatingAreaAdditionalChargeRuleOrder = true;\r\n\r\n $scope.areaAdditionalChargeRules[i].Order = ((i + 2) * 10);\r\n $scope.areaAdditionalChargeRules[(i + 1)].Order = ((i + 1) * 10);\r\n\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRules[i])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRules[(i + 1)])\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = clickinon.utilities.moveElementInArray($scope.areaAdditionalChargeRules, i, (i + 1));\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.saveAreaAdditionalChargeRule = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingAreaAdditionalChargeRule = $scope.areaAdditionalChargeRule.Id ? true : false;\r\n\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRule)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Area Additional Charge Rule Saved', content: 'The area additional charge rule ' + $scope.areaAdditionalChargeRule.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.areaAdditionalChargeRule = null;\r\n $scope.settingsForms.areaAdditionalChargeRulesForm.$setPristine();\r\n $scope.settingsForms.areaAdditionalChargeRulesForm.$setUntouched();\r\n\r\n $scope.searchAreaAdditionalCharges();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelAreaAdditionalChargeRuleSave = function () {\r\n $scope.areaAdditionalChargeRule = null;\r\n }\r\n\r\n $scope.searchAreaAdditionalCharges = function () {\r\n $scope.areaAdditionalChargeRules = null;\r\n\r\n SettingsFactory.searchAreaAdditionalChargeRules($scope.searchAreaAdditionalCharge.name, $scope.searchAreaAdditionalCharge.postCode, $scope.searchAreaAdditionalCharge.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewGlobalAddress = function () {\r\n $scope.globalAddress = {};\r\n }\r\n\r\n $scope.editGlobalAddress = function (a) {\r\n $scope.globalAddress = a;\r\n }\r\n\r\n $scope.saveGlobalAddress = function () {\r\n $scope.errorMessage = null;\r\n\r\n if (!$scope.globalAddressesForm || $scope.globalAddressesForm.$invalid) {\r\n return false; // form invalid → highlights now show automatically\r\n }\r\n\r\n $scope.saving = true;\r\n\r\n SettingsFactory.saveGlobalAddress($scope.globalAddress)\r\n .then(function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n FoundationApi.publish('settings-notifications', {\r\n title: 'Global Address Saved',\r\n content: 'The global address ' + $scope.globalAddress.Address.AddressLine1 + ' has been successfully saved',\r\n color: 'success',\r\n autoclose: 2000\r\n });\r\n\r\n // reset form & model\r\n $scope.globalAddress = null;\r\n $scope.globalAddressesForm.$setPristine();\r\n $scope.globalAddressesForm.$setUntouched();\r\n }, function () {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\";\r\n });\r\n }\r\n\r\n $scope.cancelGlobalAddressSave = function () {\r\n $scope.globalAddress = null;\r\n }\r\n\r\n $scope.getFormattedAddress = function (address) {\r\n var response = '';\r\n\r\n if (address.CompanyName) response += address.CompanyName + ', ';\r\n response += address.AddressLine1 + ', ';\r\n if (address.Town) response += address.Town + ', ';\r\n response += address.Postcode;\r\n\r\n return response;\r\n }\r\n}]);","accounts.controller('AccountsController', ['$scope', '$state', 'UserFactory', 'AtlasUserFactory', function ($scope, $state, UserFactory, AtlasUserFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.tabs = [\r\n {\r\n 'name': 'Consignments',\r\n 'title': 'Consignments',\r\n },\r\n {\r\n 'name': 'Manifests',\r\n 'title': 'Manifests',\r\n }\r\n ];\r\n\r\n if ($scope.isUserAdmin || $scope.isUserAccounts) {\r\n $scope.tabs.push({\r\n 'name': 'TX PODs',\r\n 'title': 'TX PODs'\r\n });\r\n }\r\n\r\n $scope.tabs.activeTab = 'Consignments';\r\n}]);","accounts.controller('AccountsConsignmentController', ['$rootScope', '$scope', '$timeout', '$filter', 'FoundationApi', 'ModalFactory', 'ConsignmentFactory', 'ManifestFactory', 'CommonFactory', 'AtlasModalFactory', function ($rootScope, $scope, $timeout, $filter, FoundationApi, ModalFactory, ConsignmentFactory, ManifestFactory, CommonFactory, AtlasModalFactory) {\r\n\r\n $rootScope.$emit('title-updated', 'Accounts');\r\n $scope.eventCategoryType = AtlasCourierExpress.Enums.EventCategoryTypes;\r\n $scope.eventTypes = AtlasCourierExpress.Enums.EventTypes;\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.searchIssues = 'READY_TO_INVOICE';\r\n $scope.searchCustomerName = null;\r\n $scope.showFilters = false;\r\n $scope.consignments = null;\r\n $scope.allConsignmentsSelected = false;\r\n $scope.ignoringProfitMargins = false;\r\n $scope.creatingInvoices = false;\r\n $scope.invoiceDate = moment().add(-1, 'd');\r\n $scope.invoicingRunningEvent = null;\r\n $scope.consignments = [];\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n }\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n\r\n $scope.consignments.sort(function (a, b) {\r\n if (typeof a[field] === 'string' && moment(a[field], 'DD/MM/YYYY HH:mm', true).isValid()) {\r\n console.log('Sort type: date');\r\n if ($scope.sortReverse) {\r\n return $scope.dateComparator(b[field], a[field]);\r\n }\r\n else {\r\n return $scope.dateComparator(a[field], b[field]);\r\n }\r\n }\r\n else if (typeof a[field] === 'string' && a[field].indexOf('£') >= 0) {\r\n console.log('Sort type: currency');\r\n if ($scope.sortReverse) {\r\n return parseFloat(b[field].replace('£', '')) - parseFloat(a[field].replace('£', ''));\r\n }\r\n else {\r\n return parseFloat(a[field].replace('£', '')) - parseFloat(b[field].replace('£', ''));\r\n }\r\n }\r\n else if (typeof a[field] === 'number') {\r\n console.log('Sort type: number');\r\n if ($scope.sortReverse) {\r\n return b[field] - a[field];\r\n }\r\n else {\r\n return a[field] - b[field];\r\n }\r\n }\r\n else {\r\n console.log('Sort type: string');\r\n if ($scope.sortReverse) {\r\n return b[field].localeCompare(a[field]);\r\n }\r\n else {\r\n //console.log('\"' + a[field] + '\"');\r\n //console.log('\"' + b[field] + '\"');\r\n //console.log(a[field].localeCompare(b[field]));\r\n return a[field].localeCompare(b[field]);\r\n //return (a[field] < b[field]) ? -1 : (a[field] === b[field]) ? 0 : 1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n $scope.dateComparator = function (a, b) {\r\n var momentA = moment(a, 'DD/MM/YYYY HH:mm');\r\n var momentB = moment(b, 'DD/MM/YYYY HH:mm');\r\n var result = (momentA.isBefore(momentB) ? -1 : (momentA.isSame(momentB) ? 0 : 1));\r\n return result;\r\n }\r\n\r\n $scope.selectConsignment = function (consignment) {\r\n var allConsignmentsSelected = true;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if (!$scope.consignments[i]._selected) {\r\n allConsignmentsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n $scope.allConsignmentsSelected = allConsignmentsSelected;\r\n }\r\n\r\n $scope.selectAllConsignments = function () {\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n $scope.consignments[i]._selected = $scope.allConsignmentsSelected;\r\n }\r\n }\r\n\r\n $scope.getSelectedConsignmentCount = function () {\r\n var selectedConsignments = 0;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if ($scope.consignments[i]._selected) {\r\n selectedConsignments++;\r\n }\r\n }\r\n\r\n return selectedConsignments;\r\n }\r\n\r\n $scope.getTotalConsignmentPrice = function () {\r\n var totalPrice = 0;\r\n\r\n if ($scope.consignments) {\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n totalPrice += $scope.consignments[i].Price;\r\n }\r\n }\r\n\r\n return $filter('number')(totalPrice, 2);\r\n }\r\n\r\n $scope.getTotalSelectedConsignmentPrice = function () {\r\n var totalPrice = 0;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if ($scope.consignments[i]._selected) {\r\n totalPrice += $scope.consignments[i].Price;\r\n }\r\n }\r\n\r\n return $filter('number')(totalPrice, 2);\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchConsignments();\r\n }\r\n\r\n $scope.searchConsignments = function(){\r\n $scope.consignments = null;\r\n $scope.allConsignmentsSelected = false;\r\n\r\n switch ($scope.searchIssues) {\r\n case 'MISSING_PO_NUMBER':\r\n $scope.missingPO = true;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n case 'INCORRECT_PROFIT_MARGIN':\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = true;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n case 'MISSING_POD_DATETIME':\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = true;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n case 'HOLD_INVOICE':\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = true;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n case 'IGNORE_PROFIT_MARGIN':\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = true;\r\n break;\r\n default:\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n }\r\n\r\n ConsignmentFactory.getAccountsConsignments($scope.searchStartDate, $scope.searchEndDate, $scope.searchCustomerName, $scope.missingPO, $scope.incorrectProfitMargin, $scope.missingPOD, $scope.holdInvoice, $scope.ignoreProfitMargin)\r\n .then(\r\n function () {\r\n $scope.consignments = ConsignmentFactory.consignments;\r\n getInvoicingRunningEvent();\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n $scope.confirmInvoice = function () {\r\n if ($scope.missingPO || $scope.incorrectProfitMargin || $scope.missingPOD) {\r\n //FoundationApi.publish('divConsignmentConfirmInvoice', 'open');\r\n AtlasModalFactory.open('divConsignmentConfirmInvoice');\r\n return false;\r\n }\r\n else {\r\n $scope.openInvoiceDateModal();\r\n }\r\n }\r\n\r\n $scope.cancelInvoice = function () {\r\n AtlasModalFactory.close('divConsignmentConfirmInvoice');\r\n return false;\r\n }\r\n\r\n $scope.openInvoiceDateModal = function () {\r\n var consignmentsToInvoice = [];\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if ($scope.consignments[i]._selected) {\r\n consignmentsToInvoice.push({ Id: $scope.consignments[i].Id });\r\n }\r\n }\r\n\r\n var template = 'templates/shared/controls/set_invoice_date.html';\r\n\r\n if (consignmentsToInvoice.length >= 0) {\r\n var modal = new ModalFactory({\r\n // Add CSS classes to the modal\r\n // Can be a single string or an array of classes\r\n class: 'ace-modal',\r\n // Set if the modal has a background overlay\r\n overlay: true,\r\n // Set if the modal can be closed by clicking on the overlay\r\n overlayClose: false,\r\n // Define a template to use for the modal\r\n templateUrl: template,\r\n // Allows you to pass in properties to the scope of the modal\r\n contentScope: {\r\n parentScope: $scope,\r\n consignments: consignmentsToInvoice,\r\n selectedDate: moment(),\r\n invoice: function () {\r\n var parentScope = this.parentScope;\r\n this.parentScope.creatingInvoices = true;\r\n\r\n ConsignmentFactory.invoiceConsignments(this.selectedDate, this.consignments)\r\n .then(\r\n function () {\r\n parentScope.creatingInvoices = false;\r\n FoundationApi.publish('accounts-notifications', { title: 'Invoices Scheduled', content: 'All invoices have been scheduled for creation', color: 'success', autoclose: 2000 });\r\n $scope.searchConsignments();\r\n getInvoicingRunningEvent();\r\n },\r\n function (error) {\r\n parentScope.creatingInvoices = false;\r\n console.log(error);\r\n }\r\n );\r\n\r\n modal.deactivate();\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n },\r\n close: function () {\r\n modal.deactivate();\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n }\r\n }\r\n });\r\n modal.activate();\r\n }\r\n }\r\n\r\n $scope.ignoreProfitMargins = function () {\r\n $scope.ignoringProfitMargins = true;\r\n\r\n var consignments = [];\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if ($scope.consignments[i]._selected) {\r\n consignments.push({ Id: $scope.consignments[i].Id });\r\n }\r\n }\r\n\r\n ConsignmentFactory.ignoreProfitMargins(consignments)\r\n .then(\r\n function(){\r\n $scope.ignoringProfitMargins = false;\r\n\r\n $scope.searchConsignments();\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n function getInvoicingRunningEvent() {\r\n CommonFactory.getInvoicingEvent()\r\n .then(\r\n function (event) {\r\n if (event) { \r\n $scope.invoicingRunningEvent = event;\r\n\r\n if ($scope.invoicingRunningEvent.Type === AtlasCourierExpress.Enums.EventTypes.ConsignmentInvoicing) {\r\n if ($scope.invoicingRunningEvent.DateStarted == null) {\r\n $scope.invoicingRunningEventText = 'Consignment Invoicing scheduled, created by ' + $scope.invoicingRunningEvent.User.Username + ' at ' + moment($scope.invoicingRunningEvent.DateCreated).format('DD/MM/YYYY HH:mm:ss');\r\n }\r\n else {\r\n $scope.invoicingRunningEventText = 'Consignment Invoicing started at ' + moment($scope.invoicingRunningEvent.DateStarted).format('DD/MM/YYYY HH:mm:ss') + ', created by ' + $scope.invoicingRunningEvent.User.Username;\r\n }\r\n }\r\n else if ($scope.invoicingRunningEvent.Type === AtlasCourierExpress.Enums.EventTypes.ManifestInvoicing) {\r\n if ($scope.invoicingRunningEvent.DateStarted == null) {\r\n $scope.invoicingRunningEventText = 'Manifest Invoicing scheduled, created by ' + $scope.invoicingRunningEvent.User.Username + ' at ' + moment($scope.invoicingRunningEvent.DateCreated).format('DD/MM/YYYY HH:mm:ss');\r\n }\r\n else {\r\n $scope.invoicingRunningEventText = 'Manifest Invoicing started at ' + moment($scope.invoicingRunningEvent.DateStarted).format('DD/MM/YYYY HH:mm:ss') + ', created by ' + $scope.invoicingRunningEvent.User.Username;\r\n }\r\n }\r\n }\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n //$scope.searchConsignments();\r\n getInvoicingRunningEvent();\r\n}]);","accounts.controller('AccountsManifestController', ['$rootScope', '$scope', '$timeout', '$filter', 'FoundationApi', 'ModalFactory', 'ManifestFactory', 'CommonFactory', 'AtlasModalFactory', function ($rootScope, $scope, $timeout, $filter, FoundationApi, ModalFactory, ManifestFactory, CommonFactory, AtlasModalFactory) {\r\n\r\n $rootScope.$emit('title-updated', 'Accounts');\r\n $scope.eventCategoryType = AtlasCourierExpress.Enums.EventCategoryTypes;\r\n $scope.eventTypes = AtlasCourierExpress.Enums.EventTypes;\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.searchIssues = 'READY_TO_INVOICE';\r\n $scope.searchSupplierName = null;\r\n $scope.showFilters = false;\r\n $scope.manifests = null;\r\n $scope.allConsignmentsSelected = false;\r\n $scope.creatingInvoices = false;\r\n $scope.invoicingRunningEvent = null;\r\n $scope.manifests = [];\r\n $scope.sortBy = '';\r\n $scope.sortReverse = false;\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n }\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n\r\n $scope.manifests.sort(function (a, b) {\r\n if (typeof a[field] === 'string' && moment(a[field], 'DD/MM/YYYY HH:mm', true).isValid()) {\r\n if ($scope.sortReverse) {\r\n return $scope.dateComparator(b[field], a[field]);\r\n }\r\n else {\r\n return $scope.dateComparator(a[field], b[field]);\r\n }\r\n }\r\n else if (typeof a[field] === 'string' && a[field].indexOf('£') >= 0) {\r\n if ($scope.sortReverse) {\r\n return parseFloat(b[field].replace('£', '')) - parseFloat(a[field].replace('£', ''));\r\n }\r\n else {\r\n return parseFloat(a[field].replace('£', '')) - parseFloat(b[field].replace('£', ''));\r\n }\r\n }\r\n else if (typeof a[field] === 'number') {\r\n if ($scope.sortReverse) {\r\n return b[field] - a[field];\r\n }\r\n else {\r\n return a[field] - b[field];\r\n }\r\n }\r\n else {\r\n if ($scope.sortReverse) {\r\n return b[field].localeCompare(a[field]);\r\n }\r\n else {\r\n return a[field].localeCompare(b[field]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n $scope.dateComparator = function(a, b) {\r\n var momentA = moment(a, 'DD/MM/YYYY HH:mm');\r\n var momentB = moment(b, 'DD/MM/YYYY HH:mm');\r\n var result = (momentA.isBefore(momentB) ? -1 : (momentA.isSame(momentB) ? 0 : 1));\r\n return result;\r\n }\r\n\r\n $scope.selectManifest = function (manifest) {\r\n var allManifestsSelected = true;\r\n\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if (!$scope.manifests[i]._selected) {\r\n allManifestsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n $scope.allManifestsSelected = allManifestsSelected;\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n }\r\n\r\n $scope.closeAssignSupplier = function () {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n\t}\r\n\r\n $scope.selectAllManifests = function () {\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n $scope.manifests[i]._selected = $scope.allManifestsSelected;\r\n }\r\n }\r\n\r\n $scope.getSelectedManifestCount = function () {\r\n var selectedManifests = 0;\r\n\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if ($scope.manifests[i]._selected) {\r\n selectedManifests++;\r\n }\r\n }\r\n\r\n return selectedManifests;\r\n }\r\n\r\n $scope.getTotalManifestCost = function () {\r\n var totalCost = 0;\r\n\r\n if ($scope.manifests) {\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n totalCost += $scope.manifests[i].Cost;\r\n }\r\n }\r\n\r\n return $filter('number')(totalCost, 2);\r\n }\r\n\r\n $scope.getTotalSelectedManifestCost = function () {\r\n var totalCost = 0;\r\n\r\n if ($scope.manifests) {\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if ($scope.manifests[i]._selected) {\r\n totalCost += $scope.manifests[i].Cost;\r\n }\r\n }\r\n }\r\n\r\n return $filter('number')(totalCost, 2);\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchManifests();\r\n }\r\n\r\n $scope.searchManifests = function () {\r\n $scope.manifests = null;\r\n $scope.allManifestsSelected = false;\r\n\r\n switch ($scope.searchIssues) {\r\n case 'MISSING_POD_DATETIME':\r\n $scope.missingPOD = true;\r\n $scope.zeroCost = false;\r\n $scope.noInvoiceReference = false;\r\n $scope.holdInvoice = false;\r\n break;\r\n case 'ZERO_COST':\r\n $scope.missingPOD = false;\r\n $scope.zeroCost = true;\r\n $scope.noInvoiceReference = false;\r\n $scope.holdInvoice = false;\r\n break;\r\n case 'NO_INVOICE_REFERENCE':\r\n $scope.missingPOD = false;\r\n $scope.zeroCost = false;\r\n $scope.noInvoiceReference = true;\r\n $scope.holdInvoice = false;\r\n break;\r\n case 'HOLD_INVOICE':\r\n $scope.missingPOD = false;\r\n $scope.zeroCost = false;\r\n $scope.noInvoiceReference = false;\r\n $scope.holdInvoice = true;\r\n break;\r\n default:\r\n $scope.missingPOD = false;\r\n $scope.zeroCost = false;\r\n $scope.noInvoiceReference = false;\r\n \r\n }\r\n\r\n ManifestFactory.getAccountsManifests($scope.searchStartDate, $scope.searchEndDate, $scope.searchSupplierName, $scope.missingPOD, $scope.zeroCost, $scope.noInvoiceReference, $scope.holdInvoice)\r\n .then(\r\n function () {\r\n $scope.manifests = ManifestFactory.manifests;\r\n getInvoicingRunningEvent();\r\n }\r\n );\r\n\r\n }\r\n\r\n $scope.openInvoiceDateModal = function () {\r\n var manifestsToInvoice = [];\r\n var supplierExists = false;\r\n var totalDeductionAmount = 0;\r\n var hasIssues = false;\r\n $scope.supplierTotals = [];\r\n\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if ($scope.manifests[i]._selected) {\r\n supplierExists = false;\r\n\r\n for (var s = 0; s < $scope.supplierTotals.length; s++) {\r\n if ($scope.manifests[i].Supplier.Id === $scope.supplierTotals[s].Supplier.Id) {\r\n if ($scope.manifests[i].Supplier.SplitXeroInvoices) {\r\n if ($scope.manifests[i].ConsignmentAddresses[0].Consignment.Customer.XeroOrganisation.IsDefault) $scope.supplierTotals[s].TotalInvoiceAmount += $scope.manifests[i].Cost;\r\n }\r\n else {\r\n $scope.supplierTotals[s].TotalInvoiceAmount += $scope.manifests[i].Cost;\r\n }\r\n \r\n supplierExists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!supplierExists) {\r\n if ($scope.manifests[i].Supplier.SplitXeroInvoices) {\r\n if ($scope.manifests[i].ConsignmentAddresses[0].Consignment.Customer.XeroOrganisation.IsDefault) {\r\n totalDeductionAmount = 0;\r\n\r\n for (var d = 0; d < $scope.manifests[i].Supplier.Deductions.length; d++) {\r\n totalDeductionAmount += $scope.manifests[i].Supplier.Deductions[d].Value;\r\n }\r\n\r\n $scope.supplierTotals.push({\r\n Supplier: $scope.manifests[i].Supplier,\r\n TotalDeductions: totalDeductionAmount,\r\n TotalInvoiceAmount: $scope.manifests[i].Cost\r\n });\r\n }\r\n }\r\n else {\r\n totalDeductionAmount = 0;\r\n\r\n for (var d = 0; d < $scope.manifests[i].Supplier.Deductions.length; d++) {\r\n totalDeductionAmount += $scope.manifests[i].Supplier.Deductions[d].Value;\r\n }\r\n\r\n $scope.supplierTotals.push({\r\n Supplier: $scope.manifests[i].Supplier,\r\n TotalDeductions: totalDeductionAmount,\r\n TotalInvoiceAmount: $scope.manifests[i].Cost\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var s = 0; s < $scope.supplierTotals.length; s++) {\r\n if ($scope.supplierTotals[s].TotalDeductions > $scope.supplierTotals[s].TotalInvoiceAmount) {\r\n hasIssues = true;\r\n break;\r\n }\r\n }\r\n\r\n if (hasIssues) { \r\n AtlasModalFactory.open('divManifestInvoiceIssues');\r\n\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if ($scope.manifests[i]._selected) {\r\n manifestsToInvoice.push({ Id: $scope.manifests[i].Id });\r\n }\r\n }\r\n\r\n var template = 'templates/shared/controls/set_invoice_date.html';\r\n\r\n if (manifestsToInvoice.length >= 0) {\r\n var modal = new ModalFactory({\r\n // Add CSS classes to the modal\r\n // Can be a single string or an array of classes\r\n class: 'ace-modal',\r\n // Set if the modal has a background overlay\r\n overlay: true,\r\n // Set if the modal can be closed by clicking on the overlay\r\n overlayClose: false,\r\n // Define a template to use for the modal\r\n templateUrl: template,\r\n // Allows you to pass in properties to the scope of the modal\r\n contentScope: {\r\n parentScope: $scope,\r\n manifests: manifestsToInvoice,\r\n selectedDate: moment(),\r\n invoice: function () {\r\n var parentScope = this.parentScope;\r\n this.parentScope.creatingInvoices = true;\r\n\r\n ManifestFactory.invoiceManifests(this.selectedDate, this.manifests)\r\n .then(\r\n function () {\r\n parentScope.creatingInvoices = false;\r\n FoundationApi.publish('accounts-notifications', { title: 'Invoices Scheduled', content: 'All invoices have been scheduled for creation', color: 'success', autoclose: 2000 });\r\n $scope.searchManifests();\r\n getInvoicingRunningEvent();\r\n },\r\n function (error) {\r\n parentScope.creatingInvoices = false;\r\n console.log(error);\r\n }\r\n );\r\n\r\n modal.deactivate();\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n },\r\n close: function () {\r\n modal.deactivate();\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n }\r\n }\r\n });\r\n modal.activate();\r\n }\r\n }\r\n\r\n $scope.cancelManifestInvoiceIssues = function() {\r\n AtlasModalFactory.close('divManifestInvoiceIssues');\r\n }\r\n\r\n function getInvoicingRunningEvent() {\r\n CommonFactory.getInvoicingEvent()\r\n .then(\r\n function (event) {\r\n if (event) {\r\n $scope.invoicingRunningEvent = event;\r\n\r\n if ($scope.invoicingRunningEvent.Type === AtlasCourierExpress.Enums.EventTypes.ConsignmentInvoicing) {\r\n if ($scope.invoicingRunningEvent.DateStarted == null) {\r\n $scope.invoicingRunningEventText = 'Consignment Invoicing scheduled, created by ' + $scope.invoicingRunningEvent.User.Username + ' at ' + moment($scope.invoicingRunningEvent.DateCreated).format('DD/MM/YYYY HH:mm:ss');\r\n }\r\n else {\r\n $scope.invoicingRunningEventText = 'Consignment Invoicing started at ' + moment($scope.invoicingRunningEvent.DateStarted).format('DD/MM/YYYY HH:mm:ss') + ', created by ' + $scope.invoicingRunningEvent.User.Username;\r\n }\r\n }\r\n else if ($scope.invoicingRunningEvent.Type === AtlasCourierExpress.Enums.EventTypes.ManifestInvoicing) {\r\n if ($scope.invoicingRunningEvent.DateStarted == null) {\r\n $scope.invoicingRunningEventText = 'Manifest Invoicing scheduled, created by ' + $scope.invoicingRunningEvent.User.Username + ' at ' + moment($scope.invoicingRunningEvent.DateCreated).format('DD/MM/YYYY HH:mm:ss');\r\n }\r\n else {\r\n $scope.invoicingRunningEventText = 'Manifest Invoicing started at ' + moment($scope.invoicingRunningEvent.DateStarted).format('DD/MM/YYYY HH:mm:ss') + ', created by ' + $scope.invoicingRunningEvent.User.Username;\r\n }\r\n }\r\n }\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n //$scope.searchManifests();\r\n getInvoicingRunningEvent();\r\n}]);","accounts.controller('AccountsTransportExchangePodsController', ['$rootScope', '$scope', '$state', '$filter', 'ManifestFactory', function ($rootScope, $scope, $state, $filter, ManifestFactory) {\r\n $rootScope.$emit('title-updated', 'Accounts');\r\n //$scope.searchStartDate = moment();\r\n //$scope.searchEndDate = moment();\r\n //$scope.showFilters = false;\r\n $scope.transportExchangePods = null;\r\n $scope.transportExchangePodsForApproving = [];\r\n $scope.transportExchangePodsForRejecting = [];\r\n $scope.approving = false;\r\n $scope.rejecting = false;\r\n $scope.approveAllTransportExchangePODs = false;\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.getTransportExchangePodApprovals = function () {\r\n ManifestFactory.getManifestTransportExchangePodApprovals()\r\n .then(\r\n function (response) {\r\n $scope.transportExchangePods = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.goToManifest = function(m) {\r\n\r\n }\r\n\r\n $scope.addForApproval = function (p) {\r\n if (p.readyForRejection) {\r\n p.readyForRejection = false;\r\n var i = $scope.transportExchangePodsForRejecting.length;\r\n\r\n while (i--) {\r\n if ($scope.transportExchangePodsForRejecting[i].Id === p.Id) $scope.transportExchangePodsForRejecting.splice(i, 1);\r\n }\r\n }\r\n\r\n if (p.readyForApproval) {\r\n $scope.transportExchangePodsForApproving.push(p);\r\n }\r\n else {\r\n var i = $scope.transportExchangePodsForApproving.length;\r\n\r\n while (i--) {\r\n if ($scope.transportExchangePodsForApproving[i].Id === p.Id) $scope.transportExchangePodsForApproving.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n $scope.addForRejection = function (p) {\r\n if (p.readyForApproval) {\r\n p.readyForApproval = false;\r\n var i = $scope.transportExchangePodsForApproving.length;\r\n\r\n while (i--) {\r\n if ($scope.transportExchangePodsForApproving[i].Id === p.Id) $scope.transportExchangePodsForApproving.splice(i, 1);\r\n }\r\n }\r\n\r\n if (p.readyForRejection) {\r\n $scope.transportExchangePodsForRejecting.push(p);\r\n }\r\n else {\r\n var i = $scope.transportExchangePodsForRejecting.length;\r\n\r\n while (i--) {\r\n if ($scope.transportExchangePodsForRejecting[i].Id === p.Id) $scope.transportExchangePodsForRejecting.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n $scope.selectApproveAllTransportExchangePODs = function () {\r\n //$scope.approveAllTransportExchangePODs = !$scope.approveAllTransportExchangePODs;\r\n\r\n if ($scope.approveAllTransportExchangePODs) {\r\n for (var i = 0; i < $scope.transportExchangePods.length; i++) {\r\n $scope.transportExchangePodsForApproving.push($scope.transportExchangePods[i].TransportExchangeManifests[0].TransportExchangeConsignmentAddresses[0]);\r\n $scope.transportExchangePods[i].TransportExchangeManifests[0].TransportExchangeConsignmentAddresses[0].readyForApproval = $scope.approveAllTransportExchangePODs;\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.transportExchangePods.length; i++) {\r\n $scope.transportExchangePods[i].TransportExchangeManifests[0].TransportExchangeConsignmentAddresses[0].readyForApproval = $scope.approveAllTransportExchangePODs;\r\n }\r\n\r\n $scope.transportExchangePodsForApproving = [];\r\n }\r\n }\r\n\r\n $scope.approve = function(p) {\r\n $scope.approving = true;\r\n\r\n ManifestFactory.approveTransportExchangePods($scope.transportExchangePodsForApproving)\r\n .then(\r\n function (response) {\r\n $scope.approving = false;\r\n $scope.approveAllTransportExchangePODs = false;\r\n $scope.transportExchangePodsForApproving = [];\r\n $scope.transportExchangePodsForRejecting = [];\r\n\r\n $scope.getTransportExchangePodApprovals();\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.reject = function () {\r\n $scope.rejecting = true;\r\n\r\n ManifestFactory.rejectTransportExchangePods($scope.transportExchangePodsForRejecting)\r\n .then(\r\n function (response) {\r\n $scope.rejecting = false;\r\n $scope.transportExchangePodsForApproving = [];\r\n $scope.transportExchangePodsForRejecting = [];\r\n\r\n $scope.getTransportExchangePodApprovals();\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.goToManifest = function(p){\r\n $state.go('manifest', { 'id': p.Id });\r\n }\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName != null && address.CompanyName != '') {\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 != null && address.AddressLine1 != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town != null && address.Town != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode != null && address.Postcode != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.getTransportExchangePodApprovals();\r\n}]);","reports.controller('ReportsController', ['$scope', '$state', 'UserFactory', 'AtlasUserFactory', function ($scope, $state, UserFactory, AtlasUserFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n\r\n $scope.tabs = [\r\n {\r\n 'name': 'Sales Summary',\r\n 'title': 'Sales Summary'\r\n },\r\n {\r\n 'name': 'Sales',\r\n 'title': 'Sales'\r\n },\r\n {\r\n 'name': 'Earnings',\r\n 'title': 'Earnings'\r\n },\r\n {\r\n 'name': 'Credit',\r\n 'title': 'Credit'\r\n }\r\n ];\r\n\r\n if ($scope.isUserAdmin) {\r\n $scope.tabs.push({\r\n 'name': 'User Ip Logs',\r\n 'title': 'User Ip Logs'\r\n });\r\n }\r\n\r\n $scope.tabs.activeTab = 'Sales Summary';\r\n}]);","reports.controller('ReportsProfitabilityController', ['$rootScope', '$scope', '$state', '$filter', 'UserFactory', 'ConsignmentFactory', function ($rootScope, $scope, $state, $filter, UserFactory, ConsignmentFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.customerName = '';\r\n $scope.showFilters = false;\r\n $scope.consignments = [];\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'TOMORROW':\r\n $scope.searchStartDate = moment().add(1, 'd');\r\n $scope.searchEndDate = moment().add(1, 'd');\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'THIS_MONTH':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment().add(1, 'M');\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n case 'LAST_MONTH':\r\n $scope.searchStartDate = moment().subtract(1, 'M');\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment();\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n };\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchConsignments();\r\n }\r\n\r\n $scope.searchConsignments = function () {\r\n $scope.consignments = null;\r\n\r\n ConsignmentFactory.getProfitabilityConsignments($scope.searchStartDate, $scope.searchEndDate, $scope.customerName)\r\n .then(\r\n function () {\r\n $scope.consignments = ConsignmentFactory.consignments;\r\n }\r\n );\r\n }\r\n\r\n $scope.getConsignmentManifestNumbers = function (consignment) {\r\n var manifestNumbers = null;\r\n\r\n for (var a = 0; a < consignment.ConsignmentAddresses.length; a++) {\r\n if (!manifestNumbers) {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n manifestNumbers = consignment.ConsignmentAddresses[a].Manifest.ManifestNumber.toString();\r\n }\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (manifestNumbers.indexOf(consignment.ConsignmentAddresses[a].Manifest.ManifestNumber) < 0) {\r\n manifestNumbers += ', ' + consignment.ConsignmentAddresses[a].Manifest.ManifestNumber;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return manifestNumbers;\r\n }\r\n\r\n $scope.export = function () {\r\n var data = [];\r\n var manifestNumbers;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n manifestNumbers = $scope.getConsignmentManifestNumbers($scope.consignments[i]);\r\n\r\n data.push(\r\n {\r\n 'Consignment Number': $scope.consignments[i].ConsignmentNumber,\r\n 'Manifests': (manifestNumbers == null) ? '' : manifestNumbers,\r\n 'Customer': $scope.consignments[i].Customer.Name,\r\n 'Booked': $scope.consignments[i].DisplayDateCreated, \r\n 'Start Date': $scope.consignments[i].StartDeliveryDate,\r\n 'Start Postcode': $scope.consignments[i].StartDeliveryAddress.Postcode,\r\n 'Finish Date': $scope.consignments[i].LastDeliveryDate,\r\n 'Last Postcode': $scope.consignments[i].LastDeliveryAddress.Postcode,\r\n 'Number Of Addresses': $scope.consignments[i].ConsignmentAddresses.length,\r\n 'Supplier': $scope.consignments[i].Suppliers,\r\n 'Price': $scope.consignments[i].Price\r\n }\r\n );\r\n }\r\n\r\n var opts = [{ sheetid: 'Profitability', header: true }];\r\n var res = alasql('SELECT INTO XLSX(\"Profitability.xlsx\",?) FROM ?', [opts, [data]]);\r\n }\r\n\r\n $scope.getTotalPrice = function () {\r\n var totalPrice = 0;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n totalPrice += $scope.consignments[i].Price;\r\n }\r\n\r\n return $filter('number')(totalPrice, 2);\r\n }\r\n\r\n $scope.searchConsignments();\r\n}]);","reports.controller('ReportsSimpleProfitabilityController', ['$rootScope', '$scope', '$state', '$filter', 'UserFactory', 'ConsignmentFactory', function ($rootScope, $scope, $state, $filter, UserFactory, ConsignmentFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.customerName = '';\r\n $scope.showFilters = false;\r\n $scope.data = [];\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'TOMORROW':\r\n $scope.searchStartDate = moment().add(1, 'd');\r\n $scope.searchEndDate = moment().add(1, 'd');\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'THIS_MONTH':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment().add(1, 'M');\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n case 'LAST_MONTH':\r\n $scope.searchStartDate = moment().subtract(1, 'M');\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment();\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n };\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.getData();\r\n }\r\n\r\n $scope.getData = function () {\r\n $scope.data = null;\r\n\r\n ConsignmentFactory.getSimpleProfitabilityConsignmentsReport($scope.searchStartDate, $scope.searchEndDate, $scope.customerName)\r\n .then(\r\n function (data) {\r\n $scope.data = data;\r\n }\r\n );\r\n }\r\n\r\n $scope.getConsignmentManifestNumbers = function (consignment) {\r\n var manifestNumbers = null;\r\n\r\n for (var a = 0; a < consignment.ConsignmentAddresses.length; a++) {\r\n if (!manifestNumbers) {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n manifestNumbers = consignment.ConsignmentAddresses[a].Manifest.ManifestNumber.toString();\r\n }\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (manifestNumbers.indexOf(consignment.ConsignmentAddresses[a].Manifest.ManifestNumber) < 0) {\r\n manifestNumbers += ', ' + consignment.ConsignmentAddresses[a].Manifest.ManifestNumber;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return manifestNumbers;\r\n }\r\n\r\n $scope.export = function () {\r\n var data = [];\r\n var manifestNumbers;\r\n\r\n for (var i = 0; i < $scope.data.Lines.length; i++) {\r\n data.push(\r\n {\r\n 'Date': $scope.data.Lines[i].Date,\r\n 'Day': $scope.data.Lines[i].Day,\r\n 'Total Manifests': $scope.data.Lines[i].TotalNumberManifests,\r\n 'Price': $scope.data.Lines[i].Price\r\n }\r\n );\r\n }\r\n\r\n var opts = [{ sheetid: 'Simple Profitability', header: true }];\r\n var res = alasql('SELECT INTO XLSX(\"Simple Profitability.xlsx\",?) FROM ?', [opts, [data]]);\r\n }\r\n\r\n $scope.getTotalManifests = function () {\r\n var totalManifests = 0;\r\n\r\n for (var i = 0; i < $scope.data.Lines.length; i++) {\r\n totalManifests += $scope.data.Lines[i].TotalNumberManifests;\r\n }\r\n\r\n return totalManifests;\r\n }\r\n\r\n $scope.getTotalPrice = function () {\r\n var totalPrice = 0;\r\n\r\n for (var i = 0; i < $scope.data.Lines.length; i++) {\r\n totalPrice += $scope.data.Lines[i].Price;\r\n }\r\n\r\n return $filter('number')(totalPrice, 2);\r\n }\r\n\r\n $scope.getData();\r\n}]);","reports.controller('ReportsEarningsController', ['$rootScope', '$scope', '$state', '$filter', 'UserFactory', 'SupplierFactory', function ($rootScope, $scope, $state, $filter, UserFactory, SupplierFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.sortBy = 'Name';\r\n $scope.sortReverse = false;\r\n $scope.showFilters = false;\r\n $scope.suppliers = [];\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'THIS_MONTH':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment().add(1, 'M');\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n case 'LAST_MONTH':\r\n $scope.searchStartDate = moment().subtract(1, 'M');\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment();\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n };\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.updateEarnings = function () {\r\n $scope.suppliers = null;\r\n\r\n SupplierFactory.getEarnings($scope.searchStartDate, $scope.searchEndDate)\r\n .then(\r\n function (suppliers) {\r\n $scope.suppliers = suppliers;\r\n }\r\n );\r\n }\r\n\r\n $scope.export = function () {\r\n var data = [];\r\n var manifestNumbers;\r\n\r\n for (var i = 0; i < $scope.suppliers.length; i++) {\r\n data.push(\r\n {\r\n 'Supplier': $scope.suppliers[i].Name,\r\n 'Earnings': (($scope.suppliers[i].Earnings) ? $scope.suppliers[i].Earnings : 0)\r\n }\r\n );\r\n }\r\n\r\n var opts = [{ sheetid: 'Earnings', header: true }];\r\n var res = alasql('SELECT INTO XLSX(\"Earnings.xlsx\",?) FROM ?', [opts, [data]]);\r\n }\r\n\r\n $scope.updateEarnings();\r\n}]);","reports.controller('ReportsCreditController', ['$rootScope', '$scope', '$state', '$filter', 'UserFactory', 'CustomerFactory', function ($rootScope, $scope, $state, $filter, UserFactory, CustomerFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.sortBy = 'Name';\r\n $scope.sortReverse = false;\r\n $scope.showFilters = false;\r\n $scope.data = [];\r\n $scope.selectedCustomer = null;\r\n $scope.saving = false;\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.export = function () {\r\n var data = [];\r\n var outstandingBalance = 0;\r\n var creditLimit = 0;\r\n var overLimit = 0;\r\n\r\n for (var i = 0; i < $scope.data.length; i++) {\r\n data.push(\r\n {\r\n 'Customer': $scope.data[i].Customer,\r\n 'OutstandingBalance': $scope.data[i].OutstandingBalance,\r\n 'CreditLimit': $scope.data[i].CreditLimit,\r\n 'OverLimit': $scope.data[i].OverLimit,\r\n 'CreditLimitNotes': $scope.data[i].CreditLimitNotes\r\n }\r\n );\r\n }\r\n\r\n var opts = [{ sheetid: 'Credit', header: true }];\r\n var res = alasql('SELECT INTO XLSX(\"Credit.xlsx\",?) FROM ?', [opts, [data]]);\r\n }\r\n\r\n $scope.editCreditData = function (c) {\r\n if ($scope.selectedCustomer && $scope.selectedCustomer.Id === c.Id) {\r\n $scope.selectedCustomer = null;\r\n }\r\n else {\r\n $scope.selectedCustomer = c;\r\n }\r\n }\r\n\r\n $scope.saveCreditData = function () {\r\n $scope.saving = true;\r\n\r\n CustomerFactory.updateCreditData($scope.selectedCustomer)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.selectedCustomer = null;\r\n\r\n $scope.getCustomersOverCreditLimit();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n console.log(response);\r\n }\r\n );\r\n }\r\n\r\n $scope.getCustomersOverCreditLimit = function () {\r\n CustomerFactory.getCustomersOverCreditLimit()\r\n .then(\r\n function (customers) {\r\n $scope.data = [];\r\n var outstandingBalance = 0;\r\n var creditLimit = 0;\r\n var overLimit = 0;\r\n\r\n for (var i = 0; i < customers.length; i++) {\r\n outstandingBalance = (customers[i].OutstandingBalance) ? customers[i].OutstandingBalance : 0;\r\n creditLimit = (customers[i].CreditLimit) ? customers[i].CreditLimit : 0;\r\n overLimit = outstandingBalance - creditLimit;\r\n\r\n $scope.data.push(\r\n {\r\n 'Id': customers[i].Id,\r\n 'Customer': customers[i].Name,\r\n 'OutstandingBalance': outstandingBalance,\r\n 'CreditLimit': creditLimit,\r\n 'OverLimit': overLimit,\r\n 'CreditLimitNotes': customers[i].CreditLimitNotes\r\n }\r\n );\r\n }\r\n },\r\n function (error) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.getCustomersOverCreditLimit();\r\n}]);","reports.controller('ReportsUserIpLogController', ['$rootScope', '$scope', '$state', '$filter', 'SettingsFactory', function ($rootScope, $scope, $state, $filter, SettingsFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.showFilters = false;\r\n $scope.userIpLogs = [];\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.searchUserIpLogs = function () {\r\n SettingsFactory.getUserIpLogs(moment($scope.searchStartDate), moment($scope.searchEndDate))\r\n .then(\r\n function (response) {\r\n $scope.userIpLogs = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.searchUserIpLogs();\r\n}]);"]}