define(['quote/quote'], function (quote) { quote.controller('Personal', ['$scope', '$http', 'Helpers', '$timeout', '$rootScope', function ($scope, $http, Helpers, $timeout, $rootScope) { if ($rootScope.IsBroker) { $scope.SetStepHeader('Client details'); } else { $scope.SetStepHeader('Your details'); } function blankAddress() { return { "AccessControlledArea": null, "Address1": null, "Address2": null, "Address3": null, "AreaType": null, "PostalAddressSame": null, "PostCode": null, "ReferenceNumber": null, "SuburbName": null, "SuburbSequence": 0, "AddressLattitude": 0, "AddressLongitude": 0 }; } eval(document.getElementById("personalInit").innerHTML); $scope.RiskAddresses = _RiskAddresses; var otherOption = { Address1: 'Other' }; if ($scope.RiskAddresses !== undefined && $scope.RiskAddresses !== null) $scope.RiskAddresses.push(otherOption); $scope.dirtySelectionChecks = function dirtySelectionChecks() { $scope.PersonalForm.personalSelection.chkCar.$setDirty(); $scope.PersonalForm.personalSelection.chkHome.$setDirty(); $scope.PersonalForm.personalSelection.chkBuilding.$setDirty(); $scope.PersonalForm.personalSelection.chkMotorcycle.$setDirty(); } $scope.$watch("Personal.IdNumber", function getAgeBasedOnIdNumber() { $scope.Quote.Selection.Age = Helpers.getIdNumberAge($scope.Personal.IdNumber); }); $scope.$watch("Selection.Age", function (age) { if (age < 50 && $scope.Personal.EmploymentStatus == 'R') { $scope.Personal.EmploymentStatus = null; } }); $scope.$watch("Personal.MaritalStatus", function (status) { if (status != 'M' && $scope.Personal.EmploymentStatus == 'H') { $scope.Personal.EmploymentStatus = null; } }) $scope.$watch("Quote.Selection.Home || Quote.Selection.Car || Quote.Selection.Motorcycle || Quote.Selection.Building", function (v) { $scope.Quote.Selection.Any = v; }); $scope.$watch("Personal.AreaType", function (nv, ov) { if (nv == "H") { $scope.Personal.AreaAccess = "01"; } else if (ov == "H") { $scope.Personal.AreaAccess = null; } }); $scope.loadScript = function (url) { var script = document.createElement("script"); script.type = "text/javascript"; script.defer = "true"; script.src = url; document.querySelector(".section-background").appendChild(script); }; $scope.$watch("Quote.SelectedRiskAddress", function (nv, ov) { if (typeof nv !== 'undefined' && nv !== null && nv.Address1 == "Other") { $timeout(function () { if ($scope.TempRiskAddress) { $scope.Quote.RiskAddress = $scope.TempRiskAddress; } else { $scope.Quote.RiskAddress = blankAddress(); } }, 10); } validateAddress($scope.Quote.RiskAddress); }); function validateAddress(nv) { var hasPolicies = !!($scope.RiskAddresses && $scope.RiskAddresses.length); var address = !!(nv && nv.SuburbName); var valid; if (hasPolicies) { valid = address || (typeof $scope.Quote.SelectedRiskAddress !== 'undefined' && $scope.Quote.SelectedRiskAddress !== null && $scope.Quote.SelectedRiskAddress.Address1 != "Other"); } else { valid = address; } if ($scope.personalDetails && $scope.personalDetails.RiskSuburb && $scope.Quote.UseGoogleAddress) { $scope.personalDetails.RiskSuburb.$setValidity('fulladdress', valid); $scope.personalDetails.RiskSuburb.$setValidity('autocomplete', valid); } else if ($scope.personalDetails && $scope.personalDetails.RiskSuburb) { $scope.personalDetails.RiskSuburb.$setValidity('fulladdress', true); $scope.personalDetails.RiskSuburb.$setValidity('autocomplete', true); } if ($scope.Quote.UseGoogleAddress && $rootScope.addressLookUp && valid) { $scope.SearchLocation($scope.Quote.RiskAddress); $rootScope.addressLookUp = false; $scope.isActive = false; } } $scope.$watch("Quote.RiskAddress", validateAddress, true); hiddenprop($scope, "PersonalAmend", function () { //if (!$scope.Quote.AmendmentType) { var isPersonalAmendment = Helpers.isPersonalAmendment($scope.Quote); return isPersonalAmendment; }); //startup code: $scope.Personal = $scope.Quote.Personal; //if we are in amendment and we come into the process with a married ph, that person cannot then transition to "single" $scope.CanBeSingle = !$scope.Quote.IsAmendment || !!$scope.Quote.PolicyHolder.MaritalStatus.match(/[PS]/i); if (isDebugMode && $scope.Quote.Type == 'Lead') { $scope.Personal.FirstName = $scope.Personal.FirstName || "Jack"; $scope.Personal.LastName = $scope.Personal.LastName || "The Ripper"; $scope.Personal.ContactNumber = $scope.Personal.ContactNumber || "0888888888"; $scope.Personal.Email = $scope.Personal.Email || "budgettestmail@mailinator.com"; $scope.Personal.IdNumber = $scope.Personal.IdNumber || "8010275619188"; $scope.Personal.MaritalStatus = $scope.Personal.MaritalStatus || "S"; $scope.Personal.EmploymentStatus = $scope.Personal.EmploymentStatus || "E"; //Only populate debugging address when no other exist and in debugging if ($scope.RiskAddresses && $scope.RiskAddresses.length > 0) { } else { if ($scope.Quote.RiskAddress && ($scope.Quote.RiskAddress.Address1 || $scope.Quote.RiskAddress.SuburbName)) { } else { $scope.Quote.RiskAddress = {}; $scope.Quote.RiskAddress.Address1 = "1 Yen St"; $scope.Quote.RiskAddress.Address2 = "Eldo Glen"; $scope.Quote.RiskAddress.Address3 = "Centurion"; $scope.Quote.RiskAddress.SuburbName = "Eldo Glen"; $scope.Quote.RiskAddress.PostCode = "0157"; $scope.Quote.RiskAddress.FullAddress = "Yen Street, Centurion, South Africa"; } } $scope.Personal.AreaType = "R"; $scope.Personal.AreaAccess = "01"; $scope.Personal.CashBack = $scope.Personal.CashBack || false; $scope.Personal.Newsletter = true; $scope.Personal.TrueAndCorrect = true; } $scope.SubmitPersonal = function () { $scope.Quote.antiForgeryToken = $scope.antiForgeryToken; if ($scope.Quote.Type == "Lead") { if ($scope.RiskAddresses && $scope.RiskAddresses.length > 0 && ($scope.Quote.SelectedRiskAddress && $scope.Quote.SelectedRiskAddress.Address1 != "Other")) { $scope.Quote.RiskAddress = $scope.Quote.SelectedRiskAddress; } } $scope.PersonalSubmit(); } //for suburb autocomplete. TODO: replace with directive $scope.suburbAutocompleteFormatter = function suburbAutocompleteFormatter(value) { if (value && value.SuburbName) { return "" + value.SuburbName + ' ' + value.PostCode; } else { return ""; } } $scope.ToggleAddressSearch = function () { if ($scope.Quote.UseGoogleAddress) $scope.Quote.RiskAddress = undefined; else $scope.Quote.RiskAddress = {}; $scope.Quote.UseGoogleAddress = !$scope.Quote.UseGoogleAddress; validateAddress(); }; //If the user selected anything other than other he would redirect to dashboard so this check should be save for google and suburb search $scope.CheckForOtherSelected = function () { if (($scope.RiskAddresses && $scope.RiskAddresses.length > 0) && ($scope.Quote.RiskAddress && ($scope.Quote.RiskAddress.Address1 || $scope.Quote.RiskAddress.SuburbName))) { $scope.Quote.SelectedRiskAddress = otherOption; $scope.TempRiskAddress = $scope.Quote.RiskAddress; } } //Handle case where a user may have gone back from next step $scope.CheckForOtherSelected(); if ($scope.Quote.UseGoogleAddress) { $scope.showCurrentLocation = false; window.map = new google.maps.Map(document.getElementById('map-canvas'), $scope.mapOptions); map.controls[google.maps.ControlPosition.TOP_RIGHT].push(document.getElementById('current-location-legend')); google.maps.event.addListener(map, 'click', function (event) { $scope.placeMarker(event.latLng, false); }); google.maps.event.addListenerOnce(map, 'tilesloaded', function () { $scope.showCurrentLocation = true; }); } $rootScope.currentLocationSub = {}; $scope.updateAddress = function () { if ($rootScope.currentLocationSub.DisplayName != null) $scope.Quote.RiskAddress = $rootScope.currentLocationSub; } $rootScope.enablecurrentlocation = true; $rootScope.$watch("currentLocationSub", $scope.updateAddress, true); $scope.currentLocation = function () { if ($rootScope.enablecurrentlocation) { $rootScope.enablecurrentlocation = false; $rootScope.currentLocationSub = {}; $scope.getSuburbLocation(); $scope.isActive = true; } } }]); });