define(['dashboard/dashboard'], function (dashboard) { dashboard.controller('DashboardDocuments', ['$scope', '$http', '$filter', '$rootScope', '$state', function ($scope, $http, $filter, $rootScope, $state) { var determineDocuments = function () { if ($scope.Dashboard.Policy.Documents != null && $scope.Dashboard.Policy.Documents.length > 0) { return true; } else return false; } $scope.goToRequest = function () { $scope.goToState("dashboard.documents.request"); }; $scope.initDocuments = function () { $scope.Dashboard.Policy.Documents = null; $scope.Dashboard.LoadingData = true; $scope.DashboardPost('DashboardDocuments/GetDocuments', { referenceNumber: $scope.Dashboard.Policy.ReferenceNumber }) .then(function (success) { $scope.Dashboard.Policy.Documents = success.data; $scope.hasDocuments = determineDocuments(); $scope.Dashboard.LoadingData = false; }, function (failure) { console.log(failure) $scope.Dashboard.LoadingData = false; }) }; }]) .controller('DashboardDocumentsRequest', ['$scope', '$http', '$filter', '$rootScope', '$state', function ($scope, $http, $filter, $rootScope, $state) { $scope.$watch("Documents.AdhocProcess.TaxLetter.EndDate", function (value) { if (value && value != null) { $scope.maxTaxLetterStartDate = value; } else { var today = new Date(); $scope.maxTaxLetterStartDate = today.getDateOnly(); } }); $scope.$watch("Documents.AdhocProcess.TaxLetter.StartDate", function (value) { if (value && value != null) { $scope.minTaxLetterEndDate = value.getDateOnly(); } }); $scope.GetInspectionUrl = function (riskItem) { return $scope.DashboardGetActionUrl('dashboardvehicleinspection', { 'vehicleSequenceNumber': riskItem.RiskItemSeqNo }); } $scope.validRiskItemFilter = function (riskItem) { if (riskItem.InspectionDone != 'N' || riskItem.InspectionRequired == 'N') { return riskItem; } } $scope.getMinDate = function (item) { if (item.Description.indexOf('departure') >= 0) return $scope.Documents.Today; else if (item.Description.indexOf('arrival') >= 0) return $scope.Documents.DateArrivalMin; else return null; } $scope.getMaxDate = function (item) { if (item.Description.indexOf('arrival') >= 0) return $scope.Documents.DateArrivalMax; else return null; } $scope.suburbAutocompleteFormatter = function suburbAutocompleteFormatter(value) { if (value && value.SuburbName) { return value.SuburbName + ' ' + value.PostCode; } else { return value; } } $scope.toggleSelection = function toggleSelection(item) { var idx = $scope.Documents.AdhocProcess.TaxLetter.CoverItems.indexOf(item); // is currently selected if (idx > -1) { $scope.Documents.AdhocProcess.TaxLetter.CoverItems.splice(idx, 1); } // is newly selected else { $scope.Documents.AdhocProcess.TaxLetter.CoverItems.push(item); } }; $scope.SubmitLetter = function (final) { var idx = 0; var addressToSave = ""; if ($scope.Documents.AdhocProcess.ActiveRiskItemObject && $scope.Documents.AdhocProcess.ActiveRiskItemObject.AdhocLetters_AdditionalInfoDetail) { angular.forEach($scope.Documents.AdhocProcess.ActiveRiskItemObject.AdhocLetters_AdditionalInfoDetail, function (value, key) { if (value.Description.toLowerCase().indexOf("address") > 0) { $scope.Documents.SelectedRegisteredAddress = value.Value; addressToSave = value.Value.Address1 + ', ' + value.Value.Address2 + ', ' + value.Value.Address3; idx = key; } }); if (idx > 0) { $scope.Documents.AdhocProcess.ActiveRiskItemObject.AdhocLetters_AdditionalInfoDetail[idx].Value = addressToSave; } } if ($scope.Documents.OtherAddress && $scope.Documents.OtherAddress.Suburb) { $scope.Documents.OtherAddress.PostCode = $scope.Documents.OtherAddress.Suburb.PostCode; $scope.Documents.OtherAddress.SuburbName = $scope.Documents.OtherAddress.Suburb.SuburbName; $scope.Documents.OtherAddress.SuburbSequence = $scope.Documents.OtherAddress.Suburb.SuburbSequence; } var drivers = []; if ($scope.Documents.AdditionalDriver1) drivers.push($scope.Documents.AdditionalDriver1); if ($scope.Documents.AdditionalDriver2) drivers.push($scope.Documents.AdditionalDriver2); // send the request $scope.DashboardPost('DashboardDocumentsRequest/SubmitLetterRequest', { referenceNumber: $scope.Documents.ActivePolicy, riskDetails: $scope.Documents.AdhocProcess.ActiveRiskItemObject, letterName: $scope.Documents.SelectedLetterObject.LetterDescription, forwardTo: $scope.Documents.AdhocProcess.ForwardTo, letterCode: $scope.Documents.SelectedLetterObject.LetterCode, addressInfo: $scope.Documents.SelectedRegisteredAddress, taxLetterInfo: $scope.Documents.AdhocProcess.TaxLetter, otherAdressInfo: $scope.Documents.OtherAddress, additionalDrivers: drivers, otherRegular: $scope.Documents.OtherRegularDriver, regularDriverDisplay: $scope.Documents.RegisteredOwnerDisplay }) .then(function (success) { console.log(success) }, function (failure) { console.log(failure) }); if (final) { $scope.Documents.AdhocProcess.Steps.ForwardLetter = false; $scope.Documents.AdhocProcess.Steps.Confirmation = true; } }; $scope.checkDates = function (dd, mm) { if (dd < 10) { dd = '0' + dd } if (mm < 10) { mm = '0' + mm } }; $scope.someSelected = function (object) { return Object.keys(object).some(function (key) { return object[key]; }); } $scope.ChangeRO = function (ownerSeqNo, ownerIndex) { if (ownerSeqNo !== 'Other') { var owner = $scope.Documents.AvailableDrivers[ownerIndex]; $scope.Documents.RegisteredOwnerDisplay = (owner.FirstName + ' ' + owner.Surname).trim(); } else { $scope.Documents.RegisteredOwnerDisplay = ownerSeqNo; } }; $scope.CADateValid = function () { if ($scope.Documents.SelectedLetterObject.LetterCode == 'CSBL') { if ($scope.Documents.DateDeparture && $scope.Documents.DateArrival) { var dateDepart = $scope.Documents.DateDeparture.getDateOnly(); var dateArrive = $scope.Documents.DateArrival.getDateOnly(); $scope.Documents.CADateValid = (dateArrive >= $scope.Documents.Today && dateDepart >= $scope.Documents.Today && dateArrive >= dateDepart && dateArrive <= $scope.Documents.DateArrivalMax); // No more than 3 months apart and all dates after today's date } else { $scope.Documents.CADateValid = false; } } else { $scope.Documents.CADateValid = true; } } $scope.ChangedCADate = function (item) { if (item.Description.indexOf("departure") >= 0) { $scope.Documents.DateDeparture = new Date(item.Value); $scope.Documents.DateArrivalMin = $scope.Documents.DateDeparture.getDateOnly(); $scope.Documents.DateArrivalMax = $scope.Documents.DateArrivalMin.addMonths(3); } else if (item.Description.indexOf("arrival") >= 0) { $scope.Documents.DateArrival = new Date(item.Value); } $scope.CADateValid(); } $scope.ResetForm = function () { $scope.Documents.AdhocProcess.Steps = $scope.InitDocumentSteps(); //$scope.Documents.AdhocProcess.Completed = $scope.InitCompleted(); $scope.Documents.SelectedLetter = undefined; delete $scope.Documents.AdhocProcess.ActiveRiskItem; delete $scope.Documents.AdhocProcess.ActiveRiskItemObject; delete $scope.Documents.AdhocProcess.ForwardTo; }; $scope.SendLetter = function () { //$scope.Documents.AdhocProcess.Completed.CaptureData = true; //$scope.Documents.AdhocProcess.Completed.TaxLetter = true; $scope.Documents.AdhocProcess.Steps.CaptureData = false; $scope.Documents.AdhocProcess.Steps.ForwardLetter = true; $scope.Documents.AdhocProcess.Steps.TaxLetter = false; $scope.SubmitLetter(); }; $scope.ChooseRiskItem = function () { //$scope.Documents.AdhocProcess.Completed.ChooseRiskItem = true; $scope.Documents.AdhocProcess.Steps.ChooseRiskItem = false; $scope.Documents.AdhocProcess.Steps.CaptureData = true; if ($scope.Documents.SelectedLetterObject.LetterCode == 'CIDL') $scope.GetVehicleDetails(); }; $scope.StartAdhoc = function () { if ($scope.Documents.SelectedLetterObject.LetterCode == "TAXL") { $scope.GetTaxCoverItems(); //$scope.Documents.AdhocProcess.Completed.ChooseLetter = false; $scope.Documents.AdhocProcess.Steps.ChooseLetter = false; $scope.Documents.AdhocProcess.Steps.ChooseRiskItem = false; $scope.Documents.AdhocProcess.Steps.TaxLetter = true; } else { if (!$scope.Documents.SelectedLetterObject.AdhocLetters_RiskItemDetail) { // handle letters that don't have risk items //$scope.Documents.AdhocProcess.Completed.ChooseLetter = true; $scope.SubmitLetter(); $scope.Documents.AdhocProcess.Steps.ChooseLetter = false; $scope.Documents.AdhocProcess.Steps.ForwardLetter = true; $scope.Documents.AdhocProcess.Steps.TaxLetter = false; $scope.Documents.AdhocProcess.Steps.Confirmation = false; } else { // always ask them to choose the risk item //$scope.Documents.AdhocProcess.Completed.ChooseLetter = true; $scope.Documents.AdhocProcess.Steps.ChooseLetter = false; $scope.Documents.AdhocProcess.Steps.ChooseRiskItem = true; $scope.Documents.AdhocProcess.Steps.TaxLetter = false; } if ($scope.Documents.SelectedLetterObject.LetterCode == 'CSBL') { $scope.Documents.RiskItemsRequiringInspection = $filter('filter')($scope.Documents.SelectedLetterObject.AdhocLetters_RiskItemDetail, { InspectionDone: 'N', InspectionRequired: 'Y' }, true); } // kick off some binds we may need later $scope.GetFinanceCompanies(); $scope.GetMortgateCompanies(); $scope.GetAvailableDrivers(); $scope.GetAddressList(); } }; //$scope.DashboardPost('DashboardDocumentsRequest/GetBankBranchList', { bankCode: $scope.Documents.SelectedFI }, 'POST') //.then(function (success) { // $scope.Documents.BankBranchItems = success.data; //}); //$scope.GetBankBranches = function () { // $http({ // method: 'POST', // data: { bankCode: $scope.Documents.SelectedFI }, // url: 'DashboardDocumentsRequest/GetBankBranchList' // }).then(function success(data, status, headers, config) { // $scope.Documents.BankBranchItems = data.data; // }); //}; $scope.GetTaxCoverItems = function () { $scope.DashboardPost('DashboardDocumentsRequest/GetTaxCoverItems', { refnum: $scope.Documents.ActivePolicy }) .then(function (success) { $scope.Documents.TaxCoverItems = success.data; }, function (failure) { console.log(failure) } ) }; $scope.GetFinanceCompanies = function () { $scope.DashboardPost('DashboardDocumentsRequest/GetFinanceCompanyList') .then(function (success) { $scope.Documents.FinanceCompanies = success.data; }, function (failure) { console.log(failure) }) }; $scope.GetMortgateCompanies = function () { $scope.DashboardPost('DashboardDocumentsRequest/GetMortgageCompanyList') .then(function (success) { $scope.Documents.MortgageCompanies = success.data; }, function (failure) { console.log(failure) }) }; $scope.GetAvailableDrivers = function () { $scope.DashboardPost('DashboardDocumentsRequest/GetAvailableDrivers', { referenceNumber: $scope.Documents.ActivePolicy }) .then(function (success) { $scope.Documents.AvailableDrivers = success.data; }, function (failure) { console.log(failure) }) }; $scope.GetAddressList = function () { $scope.DashboardPost('DashboardDocumentsRequest/GetAddressList', { referenceNumber: $scope.Documents.ActivePolicy, type: 'P' }) .then(function (success) { $scope.Documents.AddressList = success.data; }, function (failure) { console.log(failure) }) }; $scope.GetVehicleDetails = function () { $scope.Documents.ActiveDriver = null; $http({ method: 'POST', data: { referenceNumber: $scope.Documents.ActivePolicy, vehicleSequenceNumber: $scope.Documents.AdhocProcess.ActiveRiskItemObject.RiskItemSeqNo }, url: 'DashboardDocumentsRequest/GetVehicleDetails' }).then(function success(data, status, headers, config) { var activeVehicle = data.data; for (i = 0; i < $scope.Documents.AvailableDrivers.length; i++) { if (activeVehicle.RegularDriverSeqNo == $scope.Documents.AvailableDrivers[i].PersonNumber) { $scope.Documents.ActiveDriver = $scope.Documents.AvailableDrivers[i]; break; } } }, function () { $scope.Documents.ActiveDriver = "Unable to retrieve driver name."; }); }; $scope.dpShow = function ($event) { var selector = "#" + $event.target.id; angular.element(selector).datepicker('show'); }; $scope.ParseSelectLetter = function () { if ($scope.Documents.SelectedLetter) $scope.Documents.SelectedLetterObject = JSON.parse($scope.Documents.SelectedLetter); } $scope.ParseActiveRiskItem = function () { if ($scope.Documents.AdhocProcess.ActiveRiskItem) $scope.Documents.AdhocProcess.ActiveRiskItemObject = JSON.parse($scope.Documents.AdhocProcess.ActiveRiskItem); } $scope.$watch('$parent.Documents', function (newValue, oldValue) { if (newValue !== oldValue) { $scope.Documents = newValue; } }); }]); });