define(['quote/quote'], function (quote) { quote.controller('Payment', ['$scope', '$http', 'Helpers', '$q', '$timeout', '$mdDialog', function ($scope, $http, Helpers, $q, $timeout, $mdDialog) { $scope.SetStepHeader('Payment information'); $scope.BankAccountCache = {}; $scope.MaxPaymentDate = new Date().addDays(45); $scope.Today = new Date().toDateString(); if (!$scope.Quote.Account) $scope.Quote.Account = {}; if (!$scope.Quote.Type != "Amendment" && !$scope.Quote.Account.AccountHolder) { $scope.Quote.Account.AccountHolder = $scope.Quote.PolicyHolder.FirstName + " " + $scope.Quote.PolicyHolder.Surname; } if ($scope.Quote.Type == "Amendment" && $scope.Quote.IsReinstatement) { $scope.Quote.Account["SequenceNumber"] = $scope.Quote.Account.SequenceNumber; } $timeout(function () { //fix the policy start date var d = $scope.Quote.PolicyStartDate; if (!angular.isDate(d)) d = d ? new Date(d) : new Date(); if (!isNaN(d) && d < $scope.MaxPaymentDate) $scope.Quote.PolicyStartDate = d; else $scope.Quote.PolicyStartDate = new Date(); //disect the policy start date $scope.PolicyDATE = { PolicyStartDay: $scope.Quote.PolicyStartDate.getDate().toString(), PolicyStartMonth: ($scope.Quote.PolicyStartDate.getMonth() + 1).toString(), PolicyStartYear: $scope.Quote.PolicyStartDate.getFullYear().toString() }; }, 0); function ValidateAccountDetails() { //force validate the account number $scope.PaymentForm.AccountNumber.$validate(); //set dirty if it contains a value (so the user can see it's invalid) if ($scope.Quote.Account.AccountNumber && $scope.PaymentForm.AccountNumber.$pristine) { $scope.PaymentForm.AccountNumber.$setDirty(); } } function GetBranches(bank) { return $q(function (resolve, reject) { if (bank) { if (bank in $scope.BankAccountCache) { resolve($scope.BankAccountCache[bank]); } else { $http({ method: 'POST', url: '/Quote/Payment/GetBranchList', data: { bankCode: bank } }).then(function (response) { if (response && response.data) { $scope.BankAccountCache[bank] = response.data; resolve(response.data); } else { reject(); } }, reject); } } else { reject(); } }); } function DateChanged() { var year = parseFloat($scope.$eval("PolicyDATE.PolicyStartYear")), month = parseFloat($scope.$eval("PolicyDATE.PolicyStartMonth")), day = parseFloat($scope.$eval("PolicyDATE.PolicyStartDay")); if (Helpers.isDateValid(year, month, day)) { $scope.Quote.PolicyStartDate = new Date(year, month - 1, day); } else { delete $scope.Quote.PolicyStartDate; } } function ValidateExpiryDate() { var valid = true; var y = $scope.$eval("Quote.Account.CreditCard.ExpiryYear"); var m = $scope.$eval("Quote.Account.CreditCard.ExpiryMonth"); if (m && y) { var now = new Date(); now = new Date(now.getFullYear(), now.getMonth()); var cmp = new Date(y, m - 1); valid = now <= cmp; } $scope.PaymentForm.expirydateyear.$setValidity("expired", valid); } // Watches $scope.$watch("Quote.Account.Bank", function (bnk) { GetBranches(bnk).then(function (br) { $scope.Branches = br; }) }); $scope.$watch("Quote.Account.AccountType", function () { $scope.IsCreditCardOrUnset = $scope.Quote.Account.AccountType == null || $scope.Quote.Account.AccountType == 'C'; //if ($scope.IsCreditCardOrUnset) { // $scope.Quote.Account.Bank = undefined; // $scope.Quote.Account.BranchCode = undefined; //} }); $scope.$watch("PolicyDATE", DateChanged, true); $scope.$watch("Quote.Account.AccountType", ValidateAccountDetails); $scope.$watch("Quote.Account.AccountNumber", ValidateAccountDetails); $scope.$watch("Quote.Account.BranchCode", ValidateAccountDetails); $scope.$watch("Quote.Account.CreditCard.ExpiryYear", ValidateExpiryDate); $scope.$watch("Quote.Account.CreditCard.ExpiryMonth", ValidateExpiryDate); //Multi Signatory dialog var multiSignatoryDialogTemplate = Helpers.dialog("multiSignatoryDialog"); function dialogFunction(template, accept, reject) { return function dialogFunctionFunction(event) { $mdDialog.show({ clickOutsideToClose: true, disableParentScroll: false, scope: $scope, preserveScope: true, targetEvent: event, template: template, controller: ['$scope', '$mdDialog', function ($scope, $mdDialog) { $scope.accept = $mdDialog.hide; $scope.cancel = $mdDialog.cancel; }] }).then(accept, reject); } } $scope.showMultiSignatory = dialogFunction(multiSignatoryDialogTemplate, function () { $scope.Quote.Account.MultiSignatoryYN = true; }, function () { $scope.Quote.Account.MultiSignatoryYN = false; }); }]); });