{"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","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","parseFloat","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.4987a452.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 $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.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) {\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}]);"]}