{"version":3,"file":"index.min.js","sources":["../../node_modules/isteven-angular-multiselect/isteven-multi-select.js","../../js/filesfromccqbase/AuthInterceptor.ts","../../js/filesfromccqbase/BroadcastService.ts","../../js/apptermdirective.ts","../../js/models/enum/LicenseMasterStatusEnum.cs.d.ts","../../js/requiresalldirective.ts","../../js/requiresroledirective.ts","../../js/requiresstatedirective.ts","../../js/whitelabelleddirective.ts","../../js/clickOutsideDirective.ts","../../js/filesfromccqbase/CcqDirectives.ts","../../js/libs/date.js","../../js/filesfromccqbase/Components/fileupload/fileupload.ts","../../js/filesfromccqbase/Components/globalsearchbar/globalsearchbar.ts","../../js/filesfromccqbase/Components/lazyloadlist/lazyloadlist.ts","../../js/registerCCQBaseComponents.ts","../../components/assistance-slider/assistance-slider.ts","../../components/breadcrumb-tabs/breadcrumb-tabs.ts","../../components/carousel/carousel.ts","../../components/modal-popup/modal-popup.ts","../../components/payment-toggle/payment-toggle.ts","../../components/registration-info-panel/reg-info-panel.ts","../../components/spinner/spinner.ts","../../components/tour-popup/tour-popup.ts","../../components/vertical-progress-bar/vertical-progress-bar.ts","../../js/controllers/CriteriaController.ts","../../js/models/enum/CaseStatusEnum.cs.d.ts","../../js/models/enum/DealSourceTypeEnum.cs.d.ts","../../js/models/enum/LandOrPropertyEnum.cs.d.ts","../../js/models/enum/LinkTypeEnum.cs.d.ts","../../js/models/enum/LoanCompletionTypeEnum.cs.d.ts","../../js/models/enum/LocationEnum.cs.d.ts","../../js/models/enum/OriginatorRoleTypeEnum.cs.d.ts","../../js/models/enum/OwnOrPurchaseEnum.cs.d.ts","../../js/models/enum/PlanningPermissionTypeEnum.cs.d.ts","../../js/models/enum/ProductFamilyEnum.cs.d.ts","../../js/models/enum/ProductTypeEnum.cs.d.ts","../../js/models/enum/PropertyTypeEnum.cs.d.ts","../../js/models/enum/RefurbishmentLevelEnum.cs.d.ts","../../js/models/enum/YesNoMaybeEnum.cs.d.ts","../../js/models/enum/UserRoleEnum.cs.d.ts","../../js/controllers/BridgingCriteriaController.ts","../../js/models/enum/LoanRepaymentTypeEnum.cs.d.ts","../../js/controllers/CommercialCriteriaController.ts","../../js/models/enum/AreaUnitEnum.cs.d.ts","../../js/controllers/DevFinanceCriteriaController.ts","../../js/registerComponents.ts","../../js/controllers/AccountsController.ts","../../js/models/enum/BillingFrequencyEnum.cs.d.ts","../../js/models/enum/ContractLengthEnum.cs.d.ts","../../js/models/enum/PricingFrequencyEnum.cs.d.ts","../../js/controllers/AccountSettingsController.ts","../../js/controllers/AgentLandingController.ts","../../js/controllers/AllLoansLandingController.ts","../../js/controllers/ApplicantController.ts","../../js/models/enum/ALItemTypeEnum.cs.d.ts","../../js/models/enum/ALTypeEnum.cs.d.ts","../../js/controllers/ApplicantDetailsController.ts","../../js/controllers/ApplicationDetailsController.ts","../../js/controllers/AssignLicensesController.ts","../../js/controllers/BorrowerTermsController.ts","../../js/models/enum/CaseAccessLevelEnum.cs.d.ts","../../js/models/enum/CaseLenderStateEnum.cs.d.ts","../../js/models/enum/ExistingPlanningChangeTypeEnum.cs.d.ts","../../js/models/enum/ExitStrategyEnum.cs.d.ts","../../js/models/enum/LenderProductTypeEnum.cs.d.ts","../../js/models/enum/LoanPurposeEnum.cs.d.ts","../../js/models/enum/ModuleEnum.cs.d.ts","../../js/models/enum/OwnNewDevelopmentEnum.cs.d.ts","../../js/models/enum/PropertyTypeDetailEnum.cs.d.ts","../../js/models/enum/TenureEnum.cs.d.ts","../../js/models/enum/TitleEnum.cs.d.ts","../../js/models/enum/EventLogEnum.cs.d.ts","../../js/controllers/BridgingCaseController.ts","../../js/models/enum/InterestRateBasisEnum.cs.d.ts","../../js/models/enum/InterestRateTypeEnum.cs.d.ts","../../js/models/enum/MessageRoleEnum.cs.d.ts","../../js/controllers/BridgingHeadsOfTermsController.ts","../../js/models/enum/BridgingPersonalGuaranteeLevelEnum.cs.d.ts","../../js/models/enum/MaxFlatUnitPriceEnum.cs.d.ts","../../js/models/enum/MaxHouseSalePriceEnum.cs.d.ts","../../js/models/enum/MaxSqFtSalePriceEnum.cs.d.ts","../../js/models/enum/PreviousDevelopmentsEnum.cs.d.ts","../../js/models/enum/SortByEnum.cs.d.ts","../../js/controllers/BridgingLenderResultsScreenController.ts","../../js/models/enum/BuildProcurementTypeEnum.cs.d.ts","../../js/models/enum/ExternalLinksEnum.cs.d.ts","../../js/models/enum/PlanningResponsibilityEnum.cs.d.ts","../../js/models/enum/PurchaseProcessTypeEnum.cs.d.ts","../../js/controllers/CaseController.ts","../../js/controllers/CaseLenderController.ts","../../js/controllers/CaseOverviewController.ts","../../js/controllers/ClientDashboardController.ts","../../js/models/enum/FixedRateTermEnum.cs.d.ts","../../js/controllers/CommercialCaseController.ts","../../js/controllers/CommercialComparisonController.ts","../../js/controllers/CommercialHeadsOfTermsController.ts","../../js/models/enum/EPCRatingTypeEnum.cs.d.ts","../../js/models/enum/EWS1GradeTypeEnum.cs.d.ts","../../js/models/enum/MaxIndividualUnitPriceEnum.cs.d.ts","../../js/models/enum/TimeLeftOnLeaseEnum.cs.d.ts","../../js/controllers/CommercialLenderResultsScreenController.ts","../../js/controllers/ComparisonController.ts","../../js/controllers/DashboardController.ts","../../js/controllers/DealLenderController.ts","../../js/models/enum/SecurityQuestionEnum.cs.d.ts","../../js/controllers/DealSecurityCheckController.ts","../../js/controllers/DeveloperExitFinanceComparisonController.ts","../../js/controllers/DeveloperExitFinanceDevelopmentInputController.ts","../../js/controllers/DeveloperExitFinanceDevScheduleInputController.ts","../../js/controllers/DeveloperExitFinanceLoanInputController.ts","../../js/controllers/DeveloperExitFinanceResultController.ts","../../js/controllers/DevelopmentAppraisalScreenController.ts","../../js/models/enum/OwnerOrEmployeeEnum.cs.d.ts","../../js/controllers/DevelopmentExperienceController.ts","../../js/controllers/DevelopmentInputController.ts","../../js/models/enum/ScheduleTypeEnum.cs.d.ts","../../js/controllers/DevelopmentInputScheduleController.ts","../../js/controllers/DevelopmentInputScreenController.ts","../../js/controllers/DevelopmentInputWithNoLoginController.ts","../../js/controllers/DevelopmentTrackRecordController.ts","../../js/models/enum/PreAgreementEnum.cs.d.ts","../../js/models/enum/ScheduleDescriptionTypeEnum.cs.d.ts","../../js/controllers/DevFinanceCaseController.ts","../../js/controllers/DevFinanceHeadsOfTermsController.ts","../../js/models/enum/PersonalGuaranteeLevelEnum.cs.d.ts","../../js/models/enum/ShareholderDepositRequiredEnum.cs.d.ts","../../js/controllers/DevFinanceLenderResultsScreenController.ts","../../js/controllers/EnquiryController.ts","../../js/controllers/EnterpriseLeadCaptureController.ts","../../js/controllers/FeaturePriceController.ts","../../js/controllers/FeedBackController.ts","../../js/controllers/FileAttachmentController.ts","../../js/controllers/HeadsOfTermsController.ts","../../js/controllers/IndexController.ts","../../js/models/enum/ApplicantRoleEnum.cs.d.ts","../../js/models/enum/IntroducerTypeEnum.cs.d.ts","../../js/controllers/InitialRegistrationController.ts","../../js/controllers/IntroducerController.ts","../../js/controllers/LandingController.ts","../../js/controllers/LandingV3Controller.ts","../../js/controllers/LeadGenPromoController.ts","../../js/controllers/LenderController.ts","../../js/controllers/LoginController.ts","../../js/controllers/LenderResultScreenController.ts","../../js/controllers/ManageLicenseController.ts","../../js/models/enum/StatusEnum.cs.d.ts","../../js/controllers/NewDashboardController.ts","../../js/controllers/NewSearchSelectionsController.ts","../../js/models/enum/OrganisationTypeEnum.cs.d.ts","../../js/controllers/OrganisationsController.ts","../../js/controllers/PayFailController.ts","../../js/controllers/PaymentController.ts","../../js/controllers/PaySucessController.ts","../../js/controllers/PrivacyController.ts","../../js/controllers/ProductController.ts","../../js/controllers/ProductStubController.ts","../../js/Utils.ts","../../js/controllers/ProfileController.ts","../../js/controllers/ReferFriendController.ts","../../js/controllers/RegistrationBrokerController.ts","../../js/models/enum/ReferrerEnum.cs.d.ts","../../js/controllers/RegistrationController.ts","../../js/controllers/RegistrationIntroducerController.ts","../../js/controllers/RoleController.ts","../../js/controllers/SecurityCheckController.ts","../../js/controllers/TermsOfBusinessController.ts","../../js/controllers/TrackRecordController.ts","../../js/controllers/UserController.ts","../../js/controllers/UserDashboardController.ts","../../js/controllers/UserLicenseController.ts","../../js/controllers/WelcomeController.ts","../../js/controllers/UnsubscribeEmailController.ts","../../js/registerControllers.ts","../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../js/react/ReactTest.tsx","../../node_modules/lodash.frompairs/index.js","../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObject.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assignValue.js","../../node_modules/lodash/_copyObject.js","../../node_modules/lodash/identity.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/_createAssigner.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/isArray.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/assign.js","../../node_modules/lodash/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_setCacheAdd.js","../../node_modules/lodash/_setCacheHas.js","../../node_modules/lodash/_SetCache.js","../../node_modules/lodash/_arraySome.js","../../node_modules/lodash/_cacheHas.js","../../node_modules/lodash/_equalArrays.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_mapToArray.js","../../node_modules/lodash/_setToArray.js","../../node_modules/lodash/_equalByTag.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_equalObjects.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/_baseIsEqualDeep.js","../../node_modules/lodash/_baseIsEqual.js","../../node_modules/lodash/_baseIsMatch.js","../../node_modules/lodash/_isStrictComparable.js","../../node_modules/lodash/_getMatchData.js","../../node_modules/lodash/_matchesStrictComparable.js","../../node_modules/lodash/_baseMatches.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.js","../../node_modules/lodash/memoize.js","../../node_modules/lodash/_memoizeCapped.js","../../node_modules/lodash/_stringToPath.js","../../node_modules/lodash/_arrayMap.js","../../node_modules/lodash/_baseToString.js","../../node_modules/lodash/toString.js","../../node_modules/lodash/_castPath.js","../../node_modules/lodash/_toKey.js","../../node_modules/lodash/_baseGet.js","../../node_modules/lodash/get.js","../../node_modules/lodash/_baseHasIn.js","../../node_modules/lodash/_hasPath.js","../../node_modules/lodash/hasIn.js","../../node_modules/lodash/_baseMatchesProperty.js","../../node_modules/lodash/_baseProperty.js","../../node_modules/lodash/_basePropertyDeep.js","../../node_modules/lodash/property.js","../../node_modules/lodash/_baseIteratee.js","../../node_modules/lodash/mapValues.js","../../node_modules/lodash/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/_baseSome.js","../../node_modules/lodash/some.js","../../node_modules/ngcomponent/index.js","../../node_modules/react2angular/index.js","../../js/registerReactComponents.ts","../../js/filesfromccqbase/BaseService.ts","../../js/services/AccountService.ts","../../js/services/AccountSettingsService.ts","../../js/services/ApplicantService.ts","../../js/services/AssetLiabilityItemService.ts","../../js/filesfromccqbase/AuthServiceBase.ts","../../js/services/AuthService.ts","../../js/services/BridgingCaseService.ts","../../js/services/BridgingSearchService.ts","../../js/services/CaseLenderMessageService.ts","../../js/services/CaseLenderService.ts","../../js/services/CaseMemberService.ts","../../js/services/CaseNoteService.ts","../../js/services/CaseService.ts","../../js/services/CaseSummaryService.ts","../../js/services/ClientService.ts","../../js/services/ComparablePropertyService.ts","../../js/models/enum/InterestServicedorRolledEnum.cs.d.ts","../../js/services/Deal/BridgingDealService.ts","../../js/models/enum/BorrowingEntityTypeEnum.cs.d.ts","../../js/models/enum/TradingPeriodEnum.cs.d.ts","../../js/services/Deal/CommercialDealService.ts","../../js/services/Deal/CommercialSearchResultsService.ts","../../js/services/Deal/DealLenderMessageService.ts","../../js/services/Deal/DealLenderService.ts","../../js/services/Deal/DealNoteService.ts","../../js/services/Deal/DealScheduleService.ts","../../js/services/Deal/DealService.ts","../../js/services/Deal/DevFinanceDealService.ts","../../js/services/Deal/DevFinanceSearchResultsService.ts","../../js/services/Deal/SharedCriteriaService.ts","../../js/models/enum/AppraisalModuleEnum.cs.d.ts","../../js/models/enum/OwnershipRoleEnum.cs.d.ts","../../js/services/Deal/SharedDealService.ts","../../js/services/Deal/SharedSearchResultsService.ts","../../js/services/DealClientService.ts","../../js/services/DealCompletionService.ts","../../js/services/DealFileAttachmentService.ts","../../js/services/DevelopmentExperienceService.ts","../../js/services/DevelopmentInputScheduleService.ts","../../js/services/DevelopmentInputService.ts","../../js/services/DevelopmentInputWithNoLoginService.ts","../../js/services/DevelopmentTrackRecordService.ts","../../js/services/DevExitFinance/DeveloperExitFinanceDevelopmentInputService.ts","../../js/services/DevExitFinance/DeveloperExitFinanceDevScheduleInputService.ts","../../js/services/DevExitFinance/DeveloperExitFinanceLoanInputService.ts","../../js/services/DevExitFinance/DeveloperExitFinanceResultService.ts","../../js/services/DevFinanceScheduleService.ts","../../js/services/EventLogService.ts","../../js/services/ExternalLinksService.ts","../../js/services/FeaturePriceService.ts","../../js/services/FeedBackService.ts","../../js/services/FIleAttachmentService.ts","../../js/services/IntroducerService.ts","../../js/services/IntroducerSimpleService.ts","../../js/services/InviteService.ts","../../js/services/LenderResultMinimalService.ts","../../js/services/LenderResultService.ts","../../js/services/LenderService.ts","../../js/services/LicenseService.ts","../../js/services/ModalService.ts","../../js/services/OrganisationLinkService.ts","../../js/models/enum/PlanTypeEnum.cs.d.ts","../../js/services/OrganisationService.ts","../../js/services/PaymentService.ts","../../js/services/ProductService.ts","../../js/services/ProductStubService.ts","../../js/services/QualificationsService.ts","../../js/services/RoleService.ts","../../js/models/enum/BuildStageEnum.cs.d.ts","../../js/models/enum/ChargeTypeEnum.cs.d.ts","../../js/models/enum/ConditionEnum.cs.d.ts","../../js/models/enum/MaritalStatusEnum.cs.d.ts","../../js/models/enum/ProjectCompletionTypeEnum.cs.d.ts","../../js/models/enum/SiteTypeEnum.cs.d.ts","../../js/models/enum/SourceOfIncomeEnum.cs.d.ts","../../js/models/enum/TeamSizeEnum.cs.d.ts","../../js/models/enum/YesNoEnum.cs.d.ts","../../js/models/enum/ValuationMethodEnum.cs.d.ts","../../js/models/enum/MaxCommercialFloorspaceEnum.cs.d.ts","../../js/models/enum/CRMEnum.cs.d.ts","../../js/models/enum/BrokerNetworkEnum.cs.d.ts","../../js/services/SelectListService.ts","../../js/services/SharedDataService.ts","../../js/services/StreetAddressService.ts","../../js/services/TaskItemService.ts","../../js/services/TeamMemberService.ts","../../js/services/UserService.ts","../../js/services/EnterpriseService.ts","../../js/services/UserDashboardService.ts","../../js/services/Deal/SharedHeadsOfTermsService.ts","../../js/registerServices.ts","../../js/routes.js","../../js/Ccq.Lenderapp.ts"],"sourcesContent":["/* \r\n * Angular JS Multi Select\r\n * Creates a dropdown-like button with checkboxes. \r\n *\r\n * Project started on: Tue, 14 Jan 2014 - 5:18:02 PM\r\n * Current version: 4.0.0\r\n * \r\n * Released under the MIT License\r\n * --------------------------------------------------------------------------------\r\n * The MIT License (MIT)\r\n *\r\n * Copyright (c) 2014 Ignatius Steven (https://github.com/isteven)\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy \r\n * of this software and associated documentation files (the \"Software\"), to deal \r\n * in the Software without restriction, including without limitation the rights \r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell \r\n * copies of the Software, and to permit persons to whom the Software is \r\n * furnished to do so, subject to the following conditions: \r\n *\r\n * The above copyright notice and this permission notice shall be included in all \r\n * copies or substantial portions of the Software.\r\n * \r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR \r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE \r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER \r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, \r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE \r\n * SOFTWARE.\r\n * --------------------------------------------------------------------------------\r\n */\r\n\r\n'use strict'\r\n\r\nangular.module( 'isteven-multi-select', ['ng'] ).directive( 'istevenMultiSelect' , [ '$sce', '$timeout', '$templateCache', function ( $sce, $timeout, $templateCache ) {\r\n return {\r\n restrict: \r\n 'AE',\r\n\r\n scope: \r\n { \r\n // models\r\n inputModel : '=',\r\n outputModel : '=',\r\n\r\n // settings based on attribute\r\n isDisabled : '=',\r\n\r\n // callbacks\r\n onClear : '&', \r\n onClose : '&',\r\n onSearchChange : '&', \r\n onItemClick : '&', \r\n onOpen : '&', \r\n onReset : '&', \r\n onSelectAll : '&', \r\n onSelectNone : '&', \r\n\r\n // i18n\r\n translation : '=' \r\n },\r\n \r\n /* \r\n * The rest are attributes. They don't need to be parsed / binded, so we can safely access them by value.\r\n * - buttonLabel, directiveId, helperElements, itemLabel, maxLabels, orientation, selectionMode, minSearchLength,\r\n * tickProperty, disableProperty, groupProperty, searchProperty, maxHeight, outputProperties\r\n */\r\n \r\n templateUrl: \r\n 'isteven-multi-select.htm', \r\n\r\n link: function ( $scope, element, attrs ) { \r\n\r\n $scope.backUp = [];\r\n $scope.varButtonLabel = ''; \r\n $scope.spacingProperty = '';\r\n $scope.indexProperty = ''; \r\n $scope.orientationH = false;\r\n $scope.orientationV = true;\r\n $scope.filteredModel = [];\r\n $scope.inputLabel = { labelFilter: '' }; \r\n $scope.tabIndex = 0; \r\n $scope.lang = {};\r\n $scope.helperStatus = {\r\n all : true,\r\n none : true,\r\n reset : true,\r\n filter : true\r\n };\r\n\r\n var \r\n prevTabIndex = 0,\r\n helperItems = [],\r\n helperItemsLength = 0,\r\n checkBoxLayer = '',\r\n scrolled = false,\r\n selectedItems = [],\r\n formElements = [],\r\n vMinSearchLength = 0,\r\n clickedItem = null \r\n\r\n // v3.0.0\r\n // clear button clicked\r\n $scope.clearClicked = function( e ) { \r\n $scope.inputLabel.labelFilter = '';\r\n $scope.updateFilter();\r\n $scope.select( 'clear', e ); \r\n }\r\n\r\n // A little hack so that AngularJS ng-repeat can loop using start and end index like a normal loop\r\n // http://stackoverflow.com/questions/16824853/way-to-ng-repeat-defined-number-of-times-instead-of-repeating-over-array\r\n $scope.numberToArray = function( num ) {\r\n return new Array( num ); \r\n }\r\n\r\n // Call this function when user type on the filter field\r\n $scope.searchChanged = function() { \r\n if ( $scope.inputLabel.labelFilter.length < vMinSearchLength && $scope.inputLabel.labelFilter.length > 0 ) {\r\n return false;\r\n } \r\n $scope.updateFilter();\r\n }\r\n\r\n $scope.updateFilter = function()\r\n { \r\n // we check by looping from end of input-model\r\n $scope.filteredModel = [];\r\n var i = 0;\r\n\r\n if ( typeof $scope.inputModel === 'undefined' ) {\r\n return false; \r\n }\r\n\r\n for( i = $scope.inputModel.length - 1; i >= 0; i-- ) {\r\n\r\n // if it's group end, we push it to filteredModel[];\r\n if ( typeof $scope.inputModel[ i ][ attrs.groupProperty ] !== 'undefined' && $scope.inputModel[ i ][ attrs.groupProperty ] === false ) {\r\n $scope.filteredModel.push( $scope.inputModel[ i ] );\r\n }\r\n \r\n // if it's data \r\n var gotData = false;\r\n if ( typeof $scope.inputModel[ i ][ attrs.groupProperty ] === 'undefined' ) { \r\n \r\n // If we set the search-key attribute, we use this loop. \r\n if ( typeof attrs.searchProperty !== 'undefined' && attrs.searchProperty !== '' ) {\r\n\r\n for (var key in $scope.inputModel[ i ] ) {\r\n if ( \r\n typeof $scope.inputModel[ i ][ key ] !== 'boolean'\r\n && String( $scope.inputModel[ i ][ key ] ).toUpperCase().indexOf( $scope.inputLabel.labelFilter.toUpperCase() ) >= 0 \r\n && attrs.searchProperty.indexOf( key ) > -1\r\n ) {\r\n gotData = true;\r\n break;\r\n }\r\n } \r\n }\r\n // if there's no search-key attribute, we use this one. Much better on performance.\r\n else {\r\n for ( var key in $scope.inputModel[ i ] ) {\r\n if ( \r\n typeof $scope.inputModel[ i ][ key ] !== 'boolean'\r\n && String( $scope.inputModel[ i ][ key ] ).toUpperCase().indexOf( $scope.inputLabel.labelFilter.toUpperCase() ) >= 0 \r\n ) {\r\n gotData = true;\r\n break;\r\n }\r\n } \r\n }\r\n\r\n if ( gotData === true ) { \r\n // push\r\n $scope.filteredModel.push( $scope.inputModel[ i ] );\r\n }\r\n }\r\n\r\n // if it's group start\r\n if ( typeof $scope.inputModel[ i ][ attrs.groupProperty ] !== 'undefined' && $scope.inputModel[ i ][ attrs.groupProperty ] === true ) {\r\n\r\n if ( typeof $scope.filteredModel[ $scope.filteredModel.length - 1 ][ attrs.groupProperty ] !== 'undefined' \r\n && $scope.filteredModel[ $scope.filteredModel.length - 1 ][ attrs.groupProperty ] === false ) {\r\n $scope.filteredModel.pop();\r\n }\r\n else {\r\n $scope.filteredModel.push( $scope.inputModel[ i ] );\r\n }\r\n }\r\n } \r\n\r\n $scope.filteredModel.reverse(); \r\n \r\n $timeout( function() { \r\n\r\n $scope.getFormElements(); \r\n \r\n // Callback: on filter change \r\n if ( $scope.inputLabel.labelFilter.length > vMinSearchLength ) {\r\n\r\n var filterObj = [];\r\n\r\n angular.forEach( $scope.filteredModel, function( value, key ) {\r\n if ( typeof value !== 'undefined' ) { \r\n if ( typeof value[ attrs.groupProperty ] === 'undefined' ) { \r\n var tempObj = angular.copy( value );\r\n var index = filterObj.push( tempObj ); \r\n delete filterObj[ index - 1 ][ $scope.indexProperty ];\r\n delete filterObj[ index - 1 ][ $scope.spacingProperty ]; \r\n }\r\n }\r\n });\r\n\r\n $scope.onSearchChange({ \r\n data: \r\n {\r\n keyword: $scope.inputLabel.labelFilter, \r\n result: filterObj \r\n } \r\n });\r\n }\r\n },0);\r\n };\r\n\r\n // List all the input elements. We need this for our keyboard navigation.\r\n // This function will be called everytime the filter is updated. \r\n // Depending on the size of filtered mode, might not good for performance, but oh well..\r\n $scope.getFormElements = function() { \r\n formElements = [];\r\n\r\n var \r\n selectButtons = [],\r\n inputField = [],\r\n checkboxes = [],\r\n clearButton = [];\r\n \r\n // If available, then get select all, select none, and reset buttons\r\n if ( $scope.helperStatus.all || $scope.helperStatus.none || $scope.helperStatus.reset ) { \r\n selectButtons = element.children().children().next().children().children()[ 0 ].getElementsByTagName( 'button' ); \r\n // If available, then get the search box and the clear button\r\n if ( $scope.helperStatus.filter ) { \r\n // Get helper - search and clear button. \r\n inputField = element.children().children().next().children().children().next()[ 0 ].getElementsByTagName( 'input' ); \r\n clearButton = element.children().children().next().children().children().next()[ 0 ].getElementsByTagName( 'button' ); \r\n }\r\n }\r\n else {\r\n if ( $scope.helperStatus.filter ) { \r\n // Get helper - search and clear button. \r\n inputField = element.children().children().next().children().children()[ 0 ].getElementsByTagName( 'input' ); \r\n clearButton = element.children().children().next().children().children()[ 0 ].getElementsByTagName( 'button' );\r\n }\r\n }\r\n \r\n // Get checkboxes\r\n if ( !$scope.helperStatus.all && !$scope.helperStatus.none && !$scope.helperStatus.reset && !$scope.helperStatus.filter ) {\r\n checkboxes = element.children().children().next()[ 0 ].getElementsByTagName( 'input' );\r\n }\r\n else {\r\n checkboxes = element.children().children().next().children().next()[ 0 ].getElementsByTagName( 'input' );\r\n }\r\n\r\n // Push them into global array formElements[] \r\n for ( var i = 0; i < selectButtons.length ; i++ ) { formElements.push( selectButtons[ i ] ); }\r\n for ( var i = 0; i < inputField.length ; i++ ) { formElements.push( inputField[ i ] ); }\r\n for ( var i = 0; i < clearButton.length ; i++ ) { formElements.push( clearButton[ i ] ); }\r\n for ( var i = 0; i < checkboxes.length ; i++ ) { formElements.push( checkboxes[ i ] ); } \r\n } \r\n\r\n // check if an item has attrs.groupProperty (be it true or false)\r\n $scope.isGroupMarker = function( item , type ) {\r\n if ( typeof item[ attrs.groupProperty ] !== 'undefined' && item[ attrs.groupProperty ] === type ) return true; \r\n return false;\r\n }\r\n\r\n $scope.removeGroupEndMarker = function( item ) {\r\n if ( typeof item[ attrs.groupProperty ] !== 'undefined' && item[ attrs.groupProperty ] === false ) return false; \r\n return true;\r\n } \r\n\r\n // call this function when an item is clicked\r\n $scope.syncItems = function( item, e, ng_repeat_index ) { \r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n // if the directive is globaly disabled, do nothing\r\n if ( typeof attrs.disableProperty !== 'undefined' && item[ attrs.disableProperty ] === true ) { \r\n return false;\r\n }\r\n\r\n // if item is disabled, do nothing\r\n if ( typeof attrs.isDisabled !== 'undefined' && $scope.isDisabled === true ) { \r\n return false;\r\n } \r\n\r\n // if end group marker is clicked, do nothing\r\n if ( typeof item[ attrs.groupProperty ] !== 'undefined' && item[ attrs.groupProperty ] === false ) {\r\n return false;\r\n } \r\n\r\n var index = $scope.filteredModel.indexOf( item ); \r\n\r\n // if the start of group marker is clicked ( only for multiple selection! )\r\n // how it works:\r\n // - if, in a group, there are items which are not selected, then they all will be selected\r\n // - if, in a group, all items are selected, then they all will be de-selected \r\n if ( typeof item[ attrs.groupProperty ] !== 'undefined' && item[ attrs.groupProperty ] === true ) { \r\n\r\n // this is only for multiple selection, so if selection mode is single, do nothing\r\n if ( typeof attrs.selectionMode !== 'undefined' && attrs.selectionMode.toUpperCase() === 'SINGLE' ) {\r\n return false;\r\n }\r\n \r\n var i,j,k;\r\n var startIndex = 0;\r\n var endIndex = $scope.filteredModel.length - 1;\r\n var tempArr = [];\r\n\r\n // nest level is to mark the depth of the group.\r\n // when you get into a group (start group marker), nestLevel++\r\n // when you exit a group (end group marker), nextLevel--\r\n var nestLevel = 0; \r\n\r\n // we loop throughout the filtered model (not whole model)\r\n for( i = index ; i < $scope.filteredModel.length ; i++) { \r\n\r\n // this break will be executed when we're done processing each group\r\n if ( nestLevel === 0 && i > index ) \r\n {\r\n break;\r\n }\r\n \r\n if ( typeof $scope.filteredModel[ i ][ attrs.groupProperty ] !== 'undefined' && $scope.filteredModel[ i ][ attrs.groupProperty ] === true ) {\r\n \r\n // To cater multi level grouping\r\n if ( tempArr.length === 0 ) {\r\n startIndex = i + 1; \r\n } \r\n nestLevel = nestLevel + 1;\r\n } \r\n\r\n // if group end\r\n else if ( typeof $scope.filteredModel[ i ][ attrs.groupProperty ] !== 'undefined' && $scope.filteredModel[ i ][ attrs.groupProperty ] === false ) {\r\n\r\n nestLevel = nestLevel - 1; \r\n\r\n // cek if all are ticked or not \r\n if ( tempArr.length > 0 && nestLevel === 0 ) { \r\n\r\n var allTicked = true; \r\n\r\n endIndex = i;\r\n\r\n for ( j = 0; j < tempArr.length ; j++ ) { \r\n if ( typeof tempArr[ j ][ $scope.tickProperty ] !== 'undefined' && tempArr[ j ][ $scope.tickProperty ] === false ) {\r\n allTicked = false;\r\n break;\r\n }\r\n } \r\n\r\n if ( allTicked === true ) {\r\n for ( j = startIndex; j <= endIndex ; j++ ) {\r\n if ( typeof $scope.filteredModel[ j ][ attrs.groupProperty ] === 'undefined' ) {\r\n if ( typeof attrs.disableProperty === 'undefined' ) {\r\n $scope.filteredModel[ j ][ $scope.tickProperty ] = false;\r\n // we refresh input model as well\r\n inputModelIndex = $scope.filteredModel[ j ][ $scope.indexProperty ];\r\n $scope.inputModel[ inputModelIndex ][ $scope.tickProperty ] = false;\r\n }\r\n else if ( $scope.filteredModel[ j ][ attrs.disableProperty ] !== true ) {\r\n $scope.filteredModel[ j ][ $scope.tickProperty ] = false;\r\n // we refresh input model as well\r\n inputModelIndex = $scope.filteredModel[ j ][ $scope.indexProperty ];\r\n $scope.inputModel[ inputModelIndex ][ $scope.tickProperty ] = false;\r\n }\r\n }\r\n } \r\n }\r\n\r\n else {\r\n for ( j = startIndex; j <= endIndex ; j++ ) {\r\n if ( typeof $scope.filteredModel[ j ][ attrs.groupProperty ] === 'undefined' ) {\r\n if ( typeof attrs.disableProperty === 'undefined' ) {\r\n $scope.filteredModel[ j ][ $scope.tickProperty ] = true; \r\n // we refresh input model as well\r\n inputModelIndex = $scope.filteredModel[ j ][ $scope.indexProperty ];\r\n $scope.inputModel[ inputModelIndex ][ $scope.tickProperty ] = true;\r\n\r\n } \r\n else if ( $scope.filteredModel[ j ][ attrs.disableProperty ] !== true ) {\r\n $scope.filteredModel[ j ][ $scope.tickProperty ] = true;\r\n // we refresh input model as well\r\n inputModelIndex = $scope.filteredModel[ j ][ $scope.indexProperty ];\r\n $scope.inputModel[ inputModelIndex ][ $scope.tickProperty ] = true;\r\n }\r\n }\r\n } \r\n } \r\n }\r\n }\r\n \r\n // if data\r\n else { \r\n tempArr.push( $scope.filteredModel[ i ] ); \r\n }\r\n } \r\n }\r\n\r\n // if an item (not group marker) is clicked\r\n else {\r\n\r\n // If it's single selection mode\r\n if ( typeof attrs.selectionMode !== 'undefined' && attrs.selectionMode.toUpperCase() === 'SINGLE' ) {\r\n \r\n // first, set everything to false\r\n for( i=0 ; i < $scope.filteredModel.length ; i++) { \r\n $scope.filteredModel[ i ][ $scope.tickProperty ] = false; \r\n } \r\n for( i=0 ; i < $scope.inputModel.length ; i++) { \r\n $scope.inputModel[ i ][ $scope.tickProperty ] = false; \r\n } \r\n \r\n // then set the clicked item to true\r\n $scope.filteredModel[ index ][ $scope.tickProperty ] = true; \r\n } \r\n\r\n // Multiple\r\n else {\r\n $scope.filteredModel[ index ][ $scope.tickProperty ] = !$scope.filteredModel[ index ][ $scope.tickProperty ];\r\n }\r\n\r\n // we refresh input model as well\r\n var inputModelIndex = $scope.filteredModel[ index ][ $scope.indexProperty ]; \r\n $scope.inputModel[ inputModelIndex ][ $scope.tickProperty ] = $scope.filteredModel[ index ][ $scope.tickProperty ]; \r\n } \r\n\r\n // we execute the callback function here\r\n clickedItem = angular.copy( item ); \r\n if ( clickedItem !== null ) { \r\n $timeout( function() {\r\n delete clickedItem[ $scope.indexProperty ];\r\n delete clickedItem[ $scope.spacingProperty ]; \r\n $scope.onItemClick( { data: clickedItem } );\r\n clickedItem = null; \r\n }, 0 ); \r\n } \r\n \r\n $scope.refreshOutputModel();\r\n $scope.refreshButton(); \r\n\r\n // We update the index here\r\n prevTabIndex = $scope.tabIndex;\r\n $scope.tabIndex = ng_repeat_index + helperItemsLength;\r\n \r\n // Set focus on the hidden checkbox \r\n e.target.focus();\r\n\r\n // set & remove CSS style\r\n $scope.removeFocusStyle( prevTabIndex );\r\n $scope.setFocusStyle( $scope.tabIndex );\r\n\r\n if ( typeof attrs.selectionMode !== 'undefined' && attrs.selectionMode.toUpperCase() === 'SINGLE' ) {\r\n // on single selection mode, we then hide the checkbox layer\r\n $scope.toggleCheckboxes( e ); \r\n }\r\n } \r\n\r\n // update $scope.outputModel\r\n $scope.refreshOutputModel = function() { \r\n \r\n $scope.outputModel = [];\r\n var \r\n outputProps = [],\r\n tempObj = {};\r\n\r\n // v4.0.0\r\n if ( typeof attrs.outputProperties !== 'undefined' ) { \r\n outputProps = attrs.outputProperties.split(' '); \r\n angular.forEach( $scope.inputModel, function( value, key ) { \r\n if ( \r\n typeof value !== 'undefined' \r\n && typeof value[ attrs.groupProperty ] === 'undefined' \r\n && value[ $scope.tickProperty ] === true \r\n ) {\r\n tempObj = {};\r\n angular.forEach( value, function( value1, key1 ) { \r\n if ( outputProps.indexOf( key1 ) > -1 ) { \r\n tempObj[ key1 ] = value1; \r\n }\r\n });\r\n var index = $scope.outputModel.push( tempObj ); \r\n delete $scope.outputModel[ index - 1 ][ $scope.indexProperty ];\r\n delete $scope.outputModel[ index - 1 ][ $scope.spacingProperty ]; \r\n }\r\n }); \r\n }\r\n else {\r\n angular.forEach( $scope.inputModel, function( value, key ) { \r\n if ( \r\n typeof value !== 'undefined' \r\n && typeof value[ attrs.groupProperty ] === 'undefined' \r\n && value[ $scope.tickProperty ] === true \r\n ) {\r\n var temp = angular.copy( value );\r\n var index = $scope.outputModel.push( temp ); \r\n delete $scope.outputModel[ index - 1 ][ $scope.indexProperty ];\r\n delete $scope.outputModel[ index - 1 ][ $scope.spacingProperty ]; \r\n }\r\n }); \r\n }\r\n }\r\n\r\n // refresh button label\r\n $scope.refreshButton = function() {\r\n\r\n $scope.varButtonLabel = ''; \r\n var ctr = 0; \r\n\r\n // refresh button label...\r\n if ( $scope.outputModel.length === 0 ) {\r\n // https://github.com/isteven/angular-multi-select/pull/19 \r\n $scope.varButtonLabel = $scope.lang.nothingSelected;\r\n }\r\n else { \r\n var tempMaxLabels = $scope.outputModel.length;\r\n if ( typeof attrs.maxLabels !== 'undefined' && attrs.maxLabels !== '' ) {\r\n tempMaxLabels = attrs.maxLabels;\r\n }\r\n\r\n // if max amount of labels displayed..\r\n if ( $scope.outputModel.length > tempMaxLabels ) {\r\n $scope.more = true;\r\n }\r\n else {\r\n $scope.more = false;\r\n } \r\n \r\n angular.forEach( $scope.inputModel, function( value, key ) {\r\n if ( typeof value !== 'undefined' && value[ attrs.tickProperty ] === true ) { \r\n if ( ctr < tempMaxLabels ) { \r\n $scope.varButtonLabel += ( $scope.varButtonLabel.length > 0 ? ',
' : '
') + $scope.writeLabel( value, 'buttonLabel' );\r\n }\r\n ctr++;\r\n }\r\n }); \r\n\r\n if ( $scope.more === true ) {\r\n // https://github.com/isteven/angular-multi-select/pull/16\r\n if (tempMaxLabels > 0) {\r\n $scope.varButtonLabel += ', ... ';\r\n }\r\n $scope.varButtonLabel += '(' + $scope.outputModel.length + ')'; \r\n }\r\n }\r\n $scope.varButtonLabel = $sce.trustAsHtml( $scope.varButtonLabel + '' ); \r\n }\r\n\r\n // Check if a checkbox is disabled or enabled. It will check the granular control (disableProperty) and global control (isDisabled)\r\n // Take note that the granular control has higher priority.\r\n $scope.itemIsDisabled = function( item ) {\r\n \r\n if ( typeof attrs.disableProperty !== 'undefined' && item[ attrs.disableProperty ] === true ) { \r\n return true;\r\n }\r\n else { \r\n if ( $scope.isDisabled === true ) { \r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n \r\n }\r\n\r\n // A simple function to parse the item label settings. Used on the buttons and checkbox labels.\r\n $scope.writeLabel = function( item, type ) {\r\n \r\n // type is either 'itemLabel' or 'buttonLabel'\r\n var temp = attrs[ type ].split( ' ' ); \r\n var label = ''; \r\n\r\n angular.forEach( temp, function( value, key ) { \r\n item[ value ] && ( label += ' ' + value.split( '.' ).reduce( function( prev, current ) {\r\n return prev[ current ]; \r\n }, item )); \r\n });\r\n \r\n if ( type.toUpperCase() === 'BUTTONLABEL' ) { \r\n return label;\r\n }\r\n return $sce.trustAsHtml( label );\r\n } \r\n\r\n // UI operations to show/hide checkboxes based on click event..\r\n $scope.toggleCheckboxes = function( e ) { \r\n \r\n // We grab the button\r\n var clickedEl = element.children()[0];\r\n\r\n // Just to make sure.. had a bug where key events were recorded twice\r\n angular.element( document ).off( 'click', $scope.externalClickListener );\r\n angular.element( document ).off( 'keydown', $scope.keyboardListener ); \r\n\r\n // The idea below was taken from another multi-select directive - https://github.com/amitava82/angular-multiselect \r\n // His version is awesome if you need a more simple multi-select approach. \r\n\r\n // close\r\n if ( angular.element( checkBoxLayer ).hasClass( 'show' )) { \r\n\r\n angular.element( checkBoxLayer ).removeClass( 'show' ); \r\n angular.element( clickedEl ).removeClass( 'buttonClicked' ); \r\n angular.element( document ).off( 'click', $scope.externalClickListener );\r\n angular.element( document ).off( 'keydown', $scope.keyboardListener ); \r\n\r\n // clear the focused element;\r\n $scope.removeFocusStyle( $scope.tabIndex );\r\n if ( typeof formElements[ $scope.tabIndex ] !== 'undefined' ) {\r\n formElements[ $scope.tabIndex ].blur();\r\n }\r\n\r\n // close callback\r\n $timeout( function() {\r\n $scope.onClose();\r\n }, 0 );\r\n\r\n // set focus on button again\r\n element.children().children()[ 0 ].focus();\r\n } \r\n // open\r\n else \r\n { \r\n // clear filter\r\n $scope.inputLabel.labelFilter = ''; \r\n $scope.updateFilter(); \r\n\r\n helperItems = [];\r\n helperItemsLength = 0;\r\n\r\n angular.element( checkBoxLayer ).addClass( 'show' );\r\n angular.element( clickedEl ).addClass( 'buttonClicked' ); \r\n\r\n // Attach change event listener on the input filter. \r\n // We need this because ng-change is apparently not an event listener. \r\n angular.element( document ).on( 'click', $scope.externalClickListener );\r\n angular.element( document ).on( 'keydown', $scope.keyboardListener ); \r\n\r\n // to get the initial tab index, depending on how many helper elements we have. \r\n // priority is to always focus it on the input filter \r\n $scope.getFormElements();\r\n $scope.tabIndex = 0;\r\n\r\n var helperContainer = angular.element( element[ 0 ].querySelector( '.helperContainer' ) )[0]; \r\n \r\n if ( typeof helperContainer !== 'undefined' ) {\r\n for ( var i = 0; i < helperContainer.getElementsByTagName( 'BUTTON' ).length ; i++ ) {\r\n helperItems[ i ] = helperContainer.getElementsByTagName( 'BUTTON' )[ i ];\r\n }\r\n helperItemsLength = helperItems.length + helperContainer.getElementsByTagName( 'INPUT' ).length;\r\n }\r\n \r\n // focus on the filter element on open. \r\n if ( element[ 0 ].querySelector( '.inputFilter' ) ) { \r\n element[ 0 ].querySelector( '.inputFilter' ).focus(); \r\n $scope.tabIndex = $scope.tabIndex + helperItemsLength - 2;\r\n // blur button in vain\r\n angular.element( element ).children()[ 0 ].blur();\r\n }\r\n // if there's no filter then just focus on the first checkbox item\r\n else { \r\n if ( !$scope.isDisabled ) { \r\n $scope.tabIndex = $scope.tabIndex + helperItemsLength;\r\n if ( $scope.inputModel.length > 0 ) {\r\n formElements[ $scope.tabIndex ].focus();\r\n $scope.setFocusStyle( $scope.tabIndex );\r\n // blur button in vain\r\n angular.element( element ).children()[ 0 ].blur();\r\n } \r\n }\r\n } \r\n\r\n // open callback\r\n $scope.onOpen();\r\n } \r\n }\r\n \r\n // handle clicks outside the button / multi select layer\r\n $scope.externalClickListener = function( e ) { \r\n\r\n var targetsArr = element.find( e.target.tagName );\r\n for (var i = 0; i < targetsArr.length; i++) { \r\n if ( e.target == targetsArr[i] ) {\r\n return;\r\n }\r\n }\r\n\r\n angular.element( checkBoxLayer.previousSibling ).removeClass( 'buttonClicked' ); \r\n angular.element( checkBoxLayer ).removeClass( 'show' );\r\n angular.element( document ).off( 'click', $scope.externalClickListener ); \r\n angular.element( document ).off( 'keydown', $scope.keyboardListener ); \r\n \r\n // close callback \r\n $timeout( function() {\r\n $scope.onClose();\r\n }, 0 );\r\n\r\n // set focus on button again\r\n element.children().children()[ 0 ].focus();\r\n }\r\n \r\n // select All / select None / reset buttons\r\n $scope.select = function( type, e ) {\r\n\r\n var helperIndex = helperItems.indexOf( e.target );\r\n $scope.tabIndex = helperIndex;\r\n\r\n switch( type.toUpperCase() ) {\r\n case 'ALL':\r\n angular.forEach( $scope.filteredModel, function( value, key ) { \r\n if ( typeof value !== 'undefined' && value[ attrs.disableProperty ] !== true ) { \r\n if ( typeof value[ attrs.groupProperty ] === 'undefined' ) { \r\n value[ $scope.tickProperty ] = true;\r\n }\r\n }\r\n }); \r\n $scope.refreshOutputModel(); \r\n $scope.refreshButton(); \r\n $scope.onSelectAll(); \r\n break;\r\n case 'NONE':\r\n angular.forEach( $scope.filteredModel, function( value, key ) {\r\n if ( typeof value !== 'undefined' && value[ attrs.disableProperty ] !== true ) { \r\n if ( typeof value[ attrs.groupProperty ] === 'undefined' ) { \r\n value[ $scope.tickProperty ] = false;\r\n }\r\n }\r\n }); \r\n $scope.refreshOutputModel(); \r\n $scope.refreshButton(); \r\n $scope.onSelectNone(); \r\n break;\r\n case 'RESET': \r\n angular.forEach( $scope.filteredModel, function( value, key ) { \r\n if ( typeof value[ attrs.groupProperty ] === 'undefined' && typeof value !== 'undefined' && value[ attrs.disableProperty ] !== true ) { \r\n var temp = value[ $scope.indexProperty ]; \r\n value[ $scope.tickProperty ] = $scope.backUp[ temp ][ $scope.tickProperty ];\r\n }\r\n }); \r\n $scope.refreshOutputModel(); \r\n $scope.refreshButton(); \r\n $scope.onReset(); \r\n break;\r\n case 'CLEAR':\r\n $scope.tabIndex = $scope.tabIndex + 1;\r\n $scope.onClear(); \r\n break;\r\n case 'FILTER': \r\n $scope.tabIndex = helperItems.length - 1;\r\n break;\r\n default: \r\n } \r\n } \r\n\r\n // just to create a random variable name \r\n function genRandomString( length ) { \r\n var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\r\n var temp = '';\r\n for( var i=0; i < length; i++ ) {\r\n temp += possible.charAt( Math.floor( Math.random() * possible.length ));\r\n }\r\n return temp;\r\n }\r\n\r\n // count leading spaces\r\n $scope.prepareGrouping = function() {\r\n var spacing = 0; \r\n angular.forEach( $scope.filteredModel, function( value, key ) {\r\n value[ $scope.spacingProperty ] = spacing; \r\n if ( value[ attrs.groupProperty ] === true ) {\r\n spacing+=2;\r\n } \r\n else if ( value[ attrs.groupProperty ] === false ) {\r\n spacing-=2;\r\n } \r\n });\r\n }\r\n\r\n // prepare original index\r\n $scope.prepareIndex = function() {\r\n var ctr = 0;\r\n angular.forEach( $scope.filteredModel, function( value, key ) {\r\n value[ $scope.indexProperty ] = ctr;\r\n ctr++;\r\n });\r\n }\r\n\r\n // navigate using up and down arrow\r\n $scope.keyboardListener = function( e ) { \r\n \r\n var key = e.keyCode ? e.keyCode : e.which; \r\n var isNavigationKey = false; \r\n\r\n // ESC key (close)\r\n if ( key === 27 ) {\r\n e.preventDefault(); \r\n e.stopPropagation();\r\n $scope.toggleCheckboxes( e );\r\n } \r\n \r\n \r\n // next element ( tab, down & right key ) \r\n else if ( key === 40 || key === 39 || ( !e.shiftKey && key == 9 ) ) { \r\n \r\n isNavigationKey = true;\r\n prevTabIndex = $scope.tabIndex; \r\n $scope.tabIndex++; \r\n if ( $scope.tabIndex > formElements.length - 1 ) {\r\n $scope.tabIndex = 0;\r\n prevTabIndex = formElements.length - 1; \r\n } \r\n while ( formElements[ $scope.tabIndex ].disabled === true ) {\r\n $scope.tabIndex++;\r\n if ( $scope.tabIndex > formElements.length - 1 ) {\r\n $scope.tabIndex = 0; \r\n } \r\n if ( $scope.tabIndex === prevTabIndex ) {\r\n break;\r\n }\r\n } \r\n }\r\n \r\n // prev element ( shift+tab, up & left key )\r\n else if ( key === 38 || key === 37 || ( e.shiftKey && key == 9 ) ) { \r\n isNavigationKey = true;\r\n prevTabIndex = $scope.tabIndex; \r\n $scope.tabIndex--; \r\n if ( $scope.tabIndex < 0 ) {\r\n $scope.tabIndex = formElements.length - 1;\r\n prevTabIndex = 0;\r\n } \r\n while ( formElements[ $scope.tabIndex ].disabled === true ) { \r\n $scope.tabIndex--;\r\n if ( $scope.tabIndex === prevTabIndex ) {\r\n break;\r\n } \r\n if ( $scope.tabIndex < 0 ) {\r\n $scope.tabIndex = formElements.length - 1;\r\n } \r\n } \r\n } \r\n\r\n if ( isNavigationKey === true ) { \r\n \r\n e.preventDefault();\r\n\r\n // set focus on the checkbox \r\n formElements[ $scope.tabIndex ].focus(); \r\n var actEl = document.activeElement; \r\n \r\n if ( actEl.type.toUpperCase() === 'CHECKBOX' ) { \r\n $scope.setFocusStyle( $scope.tabIndex );\r\n $scope.removeFocusStyle( prevTabIndex );\r\n } \r\n else {\r\n $scope.removeFocusStyle( prevTabIndex );\r\n $scope.removeFocusStyle( helperItemsLength );\r\n $scope.removeFocusStyle( formElements.length - 1 );\r\n } \r\n } \r\n\r\n isNavigationKey = false;\r\n }\r\n\r\n // set (add) CSS style on selected row\r\n $scope.setFocusStyle = function( tabIndex ) { \r\n angular.element( formElements[ tabIndex ] ).parent().parent().parent().addClass( 'multiSelectFocus' ); \r\n }\r\n\r\n // remove CSS style on selected row\r\n $scope.removeFocusStyle = function( tabIndex ) { \r\n angular.element( formElements[ tabIndex ] ).parent().parent().parent().removeClass( 'multiSelectFocus' );\r\n }\r\n\r\n /*********************\r\n ********************* \r\n *\r\n * 1) Initializations\r\n *\r\n *********************\r\n *********************/\r\n\r\n // attrs to $scope - attrs-$scope - attrs - $scope\r\n // Copy some properties that will be used on the template. They need to be in the $scope.\r\n $scope.groupProperty = attrs.groupProperty; \r\n $scope.tickProperty = attrs.tickProperty;\r\n $scope.directiveId = attrs.directiveId;\r\n \r\n // Unfortunately I need to add these grouping properties into the input model\r\n var tempStr = genRandomString( 5 );\r\n $scope.indexProperty = 'idx_' + tempStr;\r\n $scope.spacingProperty = 'spc_' + tempStr; \r\n\r\n // set orientation css \r\n if ( typeof attrs.orientation !== 'undefined' ) {\r\n\r\n if ( attrs.orientation.toUpperCase() === 'HORIZONTAL' ) { \r\n $scope.orientationH = true;\r\n $scope.orientationV = false;\r\n }\r\n else \r\n {\r\n $scope.orientationH = false;\r\n $scope.orientationV = true;\r\n }\r\n } \r\n\r\n // get elements required for DOM operation\r\n checkBoxLayer = element.children().children().next()[0];\r\n\r\n // set max-height property if provided\r\n if ( typeof attrs.maxHeight !== 'undefined' ) { \r\n var layer = element.children().children().children()[0];\r\n angular.element( layer ).attr( \"style\", \"height:\" + attrs.maxHeight + \"; overflow-y:scroll;\" ); \r\n }\r\n\r\n // some flags for easier checking \r\n for ( var property in $scope.helperStatus ) {\r\n if ( $scope.helperStatus.hasOwnProperty( property )) { \r\n if ( \r\n typeof attrs.helperElements !== 'undefined' \r\n && attrs.helperElements.toUpperCase().indexOf( property.toUpperCase() ) === -1 \r\n ) {\r\n $scope.helperStatus[ property ] = false;\r\n }\r\n }\r\n }\r\n if ( typeof attrs.selectionMode !== 'undefined' && attrs.selectionMode.toUpperCase() === 'SINGLE' ) {\r\n $scope.helperStatus[ 'all' ] = false;\r\n $scope.helperStatus[ 'none' ] = false;\r\n }\r\n\r\n // helper button icons.. I guess you can use html tag here if you want to. \r\n $scope.icon = {}; \r\n $scope.icon.selectAll = '✓'; // a tick icon\r\n $scope.icon.selectNone = '×'; // x icon\r\n $scope.icon.reset = '↶'; // undo icon \r\n // this one is for the selected items\r\n $scope.icon.tickMark = '✓'; // a tick icon \r\n\r\n // configurable button labels \r\n if ( typeof attrs.translation !== 'undefined' ) {\r\n $scope.lang.selectAll = $sce.trustAsHtml( $scope.icon.selectAll + '  ' + $scope.translation.selectAll );\r\n $scope.lang.selectNone = $sce.trustAsHtml( $scope.icon.selectNone + '  ' + $scope.translation.selectNone );\r\n $scope.lang.reset = $sce.trustAsHtml( $scope.icon.reset + '  ' + $scope.translation.reset );\r\n $scope.lang.search = $scope.translation.search; \r\n $scope.lang.nothingSelected = $sce.trustAsHtml( $scope.translation.nothingSelected ); \r\n }\r\n else {\r\n $scope.lang.selectAll = $sce.trustAsHtml( $scope.icon.selectAll + '  Select All' ); \r\n $scope.lang.selectNone = $sce.trustAsHtml( $scope.icon.selectNone + '  Select None' );\r\n $scope.lang.reset = $sce.trustAsHtml( $scope.icon.reset + '  Reset' );\r\n $scope.lang.search = 'Search...';\r\n $scope.lang.nothingSelected = 'None Selected'; \r\n }\r\n $scope.icon.tickMark = $sce.trustAsHtml( $scope.icon.tickMark );\r\n \r\n // min length of keyword to trigger the filter function\r\n if ( typeof attrs.MinSearchLength !== 'undefined' && parseInt( attrs.MinSearchLength ) > 0 ) {\r\n vMinSearchLength = Math.floor( parseInt( attrs.MinSearchLength ) );\r\n }\r\n\r\n /*******************************************************\r\n *******************************************************\r\n *\r\n * 2) Logic starts here, initiated by watch 1 & watch 2\r\n *\r\n *******************************************************\r\n *******************************************************/\r\n \r\n // watch1, for changes in input model property\r\n // updates multi-select when user select/deselect a single checkbox programatically\r\n // https://github.com/isteven/angular-multi-select/issues/8 \r\n $scope.$watch( 'inputModel' , function( newVal ) { \r\n if ( newVal ) { \r\n $scope.refreshOutputModel(); \r\n $scope.refreshButton(); \r\n }\r\n }, true );\r\n \r\n // watch2 for changes in input model as a whole\r\n // this on updates the multi-select when a user load a whole new input-model. We also update the $scope.backUp variable\r\n $scope.$watch( 'inputModel' , function( newVal ) { \r\n if ( newVal ) {\r\n $scope.backUp = angular.copy( $scope.inputModel ); \r\n $scope.updateFilter();\r\n $scope.prepareGrouping();\r\n $scope.prepareIndex(); \r\n $scope.refreshOutputModel(); \r\n $scope.refreshButton(); \r\n }\r\n }); \r\n\r\n // watch for changes in directive state (disabled or enabled)\r\n $scope.$watch( 'isDisabled' , function( newVal ) { \r\n $scope.isDisabled = newVal; \r\n }); \r\n \r\n // this is for touch enabled devices. We don't want to hide checkboxes on scroll. \r\n var onTouchStart = function( e ) { \r\n \t$scope.$apply( function() {\r\n \t\t$scope.scrolled = false;\r\n \t}); \r\n };\r\n angular.element( document ).bind( 'touchstart', onTouchStart);\r\n var onTouchMove = function( e ) { \r\n \t$scope.$apply( function() {\r\n \t\t$scope.scrolled = true; \r\n \t});\r\n };\r\n angular.element( document ).bind( 'touchmove', onTouchMove); \r\n\r\n // unbind document events to prevent memory leaks\r\n $scope.$on( '$destroy', function () {\r\n\t\t\t angular.element( document ).unbind( 'touchstart', onTouchStart);\r\n \tangular.element( document ).unbind( 'touchmove', onTouchMove);\r\n });\r\n }\r\n }\r\n}]).run( [ '$templateCache' , function( $templateCache ) {\r\n var template = \r\n '' +\r\n // main button\r\n '' +\r\n // overlay layer\r\n '
' +\r\n // container of the helper elements\r\n '
' +\r\n // container of the first 3 buttons, select all, none and reset\r\n '
' +\r\n // select all\r\n ''+\r\n // select none\r\n ''+\r\n // reset\r\n '' +\r\n '
' +\r\n // the search box\r\n '
'+\r\n // textfield \r\n ''+\r\n // clear button\r\n ' '+\r\n '
'+\r\n '
'+\r\n // selection items\r\n '
'+\r\n '
'+\r\n // this is the spacing for grouped items\r\n '
0\" ng-repeat=\"i in numberToArray( item[ spacingProperty ] ) track by $index\">'+ \r\n '
'+ \r\n '
'+\r\n ''+\r\n '
'+\r\n // the tick/check mark\r\n ''+\r\n '
'+\r\n '
'+\r\n '
'+\r\n '
';\r\n\t$templateCache.put( 'isteven-multi-select.htm' , template );\r\n}]); \r\n","authInterceptor.$inject = [\"$rootScope\", \"$q\", \"$location\", \"$cookies\"];\r\n\r\nexport function authInterceptor(\r\n $rootScope: ng.IRootScopeService,\r\n $q: ng.IQService,\r\n $location: ng.ILocationService,\r\n $cookies: ng.cookies.ICookiesService,\r\n) {\r\n return {\r\n // intercept every request for Amazon AWS\r\n request: function (config: any) {\r\n var foreignUrl = config.url.indexOf(\"amazonaws\") > -1;\r\n if (foreignUrl) {\r\n config.headers[\"Authorization\"] = undefined;\r\n }\r\n return config;\r\n },\r\n\r\n // Intercept every response. If it's 401, we need to go to login.\r\n response: (response: any) => {\r\n if (response.status === 401) {\r\n $cookies.remove(\"access_token\");\r\n $cookies.remove(\"access_token_expires\");\r\n $cookies.remove(\"profile\");\r\n\r\n localStorage.clear();\r\n\r\n $location.path(\"/login\");\r\n }\r\n\r\n // Otherwise return our response. (q helps us pass back promises)\r\n return response || $q.when(response);\r\n },\r\n\r\n // Intercept http error responses. If it's 401, we need to go to login.\r\n responseError: (response: any) => {\r\n if (response.status === 401) {\r\n $cookies.remove(\"access_token\");\r\n $cookies.remove(\"access_token_expires\");\r\n $cookies.remove(\"profile\");\r\n\r\n localStorage.clear();\r\n\r\n $location.path(\"/login\");\r\n }\r\n\r\n // Otherwise just pass on the error (could be a 500/etc we want to handle gracefully.)\r\n //return $q.reject(rejection);\r\n return $q.reject(response);\r\n },\r\n };\r\n}\r\n","export class BroadcastService {\r\n public static $inject = [\"$rootScope\", \"$q\"];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $q: ng.IQService,\r\n ) {}\r\n\r\n public broadcastError(screen: string, message: string): void {\r\n this.$rootScope.$broadcast(\"error\", {\r\n page: screen,\r\n severity: \"error\",\r\n error: message,\r\n });\r\n }\r\n\r\n public broadcastWarning(screen: string, message: string): void {\r\n this.$rootScope.$broadcast(\"error\", {\r\n page: screen,\r\n severity: \"warning\",\r\n error: message,\r\n });\r\n }\r\n\r\n public broadcastInfo(screen: string, message: string): void {\r\n this.$rootScope.$broadcast(\"error\", {\r\n page: screen,\r\n severity: \"info\",\r\n error: message,\r\n });\r\n }\r\n}\r\n","import angular from \"angular\";\r\n\r\nexport function registerAppTermDirective() {\r\n const ccqdirectives = angular.module(\"Ccq.directives\");\r\n\r\n ccqdirectives.directive(\"applicationName\", [\r\n \"$rootScope\",\r\n ($rootScope: ng.IRootScopeService) => {\r\n return {\r\n restrict: \"E\",\r\n controller: function ($scope, $element, $attrs) {\r\n if (sessionStorage.getItem(\"applicationName\") != null) {\r\n $scope.applicationName = sessionStorage.getItem(\"applicationName\");\r\n } else {\r\n $scope.applicationName = \"Brickflow\";\r\n }\r\n\r\n $rootScope.$on(\r\n \"applicationNameChanged\",\r\n (event, newApplicationName) => {\r\n $scope.applicationName = newApplicationName;\r\n },\r\n );\r\n },\r\n template: \"{{applicationName}}\",\r\n };\r\n },\r\n ]);\r\n\r\n ccqdirectives.directive(\"applicationConsultant\", [\r\n \"$rootScope\",\r\n ($rootScope: ng.IRootScopeService) => {\r\n return {\r\n restrict: \"A\",\r\n controller: function ($scope, $element, $attrs) {\r\n if (sessionStorage.getItem(\"applicationName\") != null) {\r\n $scope.applicationName = sessionStorage.getItem(\"applicationName\");\r\n } else {\r\n $scope.applicationName = \"Brickflow\";\r\n }\r\n\r\n $rootScope.$on(\r\n \"applicationNameChanged\",\r\n (event, newApplicationName) => {\r\n $scope.applicationName = newApplicationName;\r\n },\r\n );\r\n },\r\n template: \"{{applicationName}} consultant \",\r\n };\r\n },\r\n ]);\r\n}\r\n","export const enum LicenseMasterStatusEnum {\r\n None = 0,\r\n PaidUp = 1,\r\n PayFailure = 2,\r\n Unpaid = 3,\r\n Cancelled = 4,\r\n PreCancel = 5,\r\n PreSubscription = 6,\r\n PaymentProcessing = 7,\r\n Trial = 8,\r\n Offered = 9,\r\n}\r\n","import angular from \"angular\";\r\nimport { UserService } from \"./services/UserService\";\r\nimport { LicenseMasterStatusEnum } from \"./models/enum/LicenseMasterStatusEnum.cs.d\";\r\n\r\ninterface RequiredOption {\r\n name: string;\r\n disable: boolean;\r\n hide: boolean;\r\n}\r\n\r\nexport function registerRequiresAllDirective() {\r\n const ccqdirectives = angular.module(\"Ccq.directives\");\r\n\r\n ccqdirectives.directive(\"requiresAll\", [\r\n \"UserService\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n (\r\n userService: UserService,\r\n $rootScope: ng.IRootScopeService,\r\n $cookies: ng.cookies.ICookiesService,\r\n ) => {\r\n return {\r\n restrict: \"A\",\r\n controller: function ($scope, $element, $attrs) {\r\n $scope.userService = userService;\r\n //console.log($rootScope)\r\n },\r\n scope: false,\r\n link: function (\r\n scope: angular.IScope,\r\n element: JQLite,\r\n attr: angular.IAttributes,\r\n ctrls: angular.IController[],\r\n ) {\r\n const el: HTMLElement = angular.element(element)[0];\r\n const $rootScope = scope.$root;\r\n const $userService = (scope as any)?.userService;\r\n\r\n const statusRequirementId =\r\n ($rootScope as any)?.statusRequirementId ?? null;\r\n const statusRequirementEventName =\r\n (ctrls[0] as any)?.statusRequirementEventName ?? null;\r\n\r\n // dictate behaviour if requirement not met ( || default values if not provided)\r\n const hideIfNotInState: Boolean =\r\n scope.$parent.$eval(attr.hideIfNotInState) || false;\r\n const disableIfNotInRole: Boolean =\r\n scope.$parent.$eval(attr.disableIfNotInRole) || false;\r\n const matchAllRoles: Boolean =\r\n scope.$parent.$eval(attr.matchAllRoles) || false;\r\n const disableIfNotInFeatures: Boolean =\r\n scope.$parent.$eval(attr.disableIfNotInFeatures) || false;\r\n const hideIfInvalidSubscription: Boolean =\r\n scope.$parent.$eval(attr.hideIfInvalidSubscription) || false;\r\n\r\n // requirements are fetched from the elements attributes\r\n const requiredStates: string[] | string = scope.$parent.$eval(\r\n attr.requiredStates,\r\n );\r\n const requiredRoles: string[] | string = scope.$parent.$eval(\r\n attr.requiredRoles,\r\n );\r\n const requiredFeatures: string[] | string = scope.$parent.$eval(\r\n attr.requiredFeatures,\r\n );\r\n\r\n // providing 'required features' will override value if set to false or not provided\r\n // in order to check features there must be a valid license\r\n const requiresActiveSubscription: Boolean =\r\n scope.$parent.$eval(attr.requiresActiveSubscription) ||\r\n !!requiredFeatures;\r\n const allowIfInvited: Boolean =\r\n scope.$parent.$eval(attr.allowIfInvited) || false;\r\n\r\n //override options - allows specific outcomes to be set for specific values, overuling the required... values and default behaviour\r\n const requiredRolesOptions: RequiredOption[] = scope.$parent.$eval(\r\n attr.requiredRolesOptions,\r\n );\r\n const requiredStatesOptions: RequiredOption[] = scope.$parent.$eval(\r\n attr.requiredStatesOptions,\r\n );\r\n const requiredFeaturesOptions: RequiredOption[] = scope.$parent.$eval(\r\n attr.requiredFeaturesOptions,\r\n );\r\n\r\n // define callback scope with initial values\r\n // required for async functions to use values after function has ended and values are destroyed\r\n var callbackScope = {\r\n parentScope: scope,\r\n requiredStates: requiredStates,\r\n requiredStatesOptions: requiredStatesOptions,\r\n statusRequirementId: statusRequirementId,\r\n requiredRoles: requiredRoles,\r\n requiredRolesOptions: requiredRolesOptions,\r\n requiredFeatures: requiredFeatures,\r\n requiredFeaturesOptions: requiredFeaturesOptions,\r\n requiresActiveSubscription: requiresActiveSubscription,\r\n };\r\n\r\n // if the status requirement id changes, we update the value in callbackScope\r\n $rootScope.$watch(\r\n \"statusRequirementId\",\r\n function () {\r\n this.callbackScope.statusRequirementId = ($rootScope as any)\r\n ?.statusRequirementId;\r\n if (!!this.callbackScope.statusRequirementId) {\r\n let roles =\r\n (($rootScope as any)?.currentUser?.Roles as string[]) ?? null;\r\n let status =\r\n this.callbackScope.statusRequirementId > 0\r\n ? (($rootScope as any)?.caseStateChange[\r\n this.callbackScope.statusRequirementId\r\n ] as string)\r\n : null;\r\n let features =\r\n ($rootScope as any)?.currentUser?.Features ?? null;\r\n let subscriptionStatus =\r\n (($rootScope as any)?.currentUser\r\n ?.SubscriptionStatus as number) ?? null;\r\n\r\n updateAll(\r\n this.callbackScope.requiredStates,\r\n status,\r\n this.callbackScope.requiredStatesOptions,\r\n this.callbackScope.requiredRoles,\r\n roles,\r\n this.callbackScope.requiredRolesOptions,\r\n this.callbackScope.requiredFeatures,\r\n features,\r\n this.callbackScope.requiredFeaturesOptions,\r\n this.callbackScope.requiresActiveSubscription,\r\n subscriptionStatus,\r\n ($rootScope as any)?.isInvitedToCase as boolean,\r\n ($rootScope as any)?.isInvitedAndHasReadonlyAccess as boolean,\r\n );\r\n }\r\n }.bind({ callbackScope: callbackScope }),\r\n );\r\n\r\n const originalStyles = {\r\n cursor: el.style.cursor,\r\n pointerEvents: el.style.pointerEvents,\r\n opacity: el.style.opacity,\r\n display: el.style.display,\r\n };\r\n\r\n //Styling Functions\r\n const disable = () => {\r\n el.style.cursor = \"not-allowed\";\r\n el.style.pointerEvents = \"none\";\r\n el.style.opacity = \"0.8\";\r\n };\r\n const hide = () => {\r\n el.style.display = \"none\";\r\n };\r\n const enable = () => {\r\n el.style.cursor = originalStyles.cursor;\r\n el.style.pointerEvents = originalStyles.pointerEvents;\r\n el.style.opacity = originalStyles.opacity;\r\n };\r\n const show = () => {\r\n el.style.display = originalStyles.display;\r\n };\r\n const applyStyle = (showElement: boolean, enableElement: boolean) => {\r\n if (showElement) {\r\n show();\r\n if (enableElement) {\r\n enable();\r\n } else {\r\n disable();\r\n }\r\n } else {\r\n hide();\r\n }\r\n };\r\n\r\n //Helper Functions\r\n const isLenderOrAdmin = (roles: string[]): boolean => {\r\n if (!roles) return false;\r\n let res = roles.find(\r\n (role) =>\r\n role.toLowerCase() === \"lender\" ||\r\n role.toLowerCase() === \"admin\",\r\n );\r\n return !!res;\r\n };\r\n\r\n const checkRolesMatch = (\r\n currentRoles: string[],\r\n requiredRoles: string[],\r\n matchAllRoles: Boolean,\r\n ): boolean => {\r\n let roleMatch = false;\r\n // set rolematch based on requiredRoles, currentRoles and matchAllRoles\r\n for (let i = 0; i < requiredRoles.length; i++) {\r\n var matchingGroup = currentRoles.find(\r\n (group) =>\r\n group.toLowerCase() === requiredRoles[i].toLowerCase(),\r\n );\r\n if (matchingGroup && !matchAllRoles) {\r\n roleMatch = true;\r\n break;\r\n } else if (matchingGroup && matchAllRoles) {\r\n roleMatch = true;\r\n } // needed since we start rolematch as false\r\n else if (!matchingGroup && matchAllRoles) {\r\n roleMatch = false;\r\n break;\r\n }\r\n }\r\n\r\n return roleMatch;\r\n };\r\n\r\n const checkFeaturesMatch = (\r\n currentFeatures: string[],\r\n requiredFeatures: string[],\r\n ): boolean => {\r\n let matchingFeatures = false;\r\n for (let i = 0; i < requiredFeatures.length; i++) {\r\n let match = currentFeatures.find(\r\n (feature) =>\r\n feature.toLowerCase() === requiredFeatures[i].toLowerCase(),\r\n );\r\n if (!!match) {\r\n matchingFeatures = true;\r\n break;\r\n }\r\n }\r\n return matchingFeatures;\r\n };\r\n\r\n const checkCaseStateMatch = (\r\n currentState: string,\r\n requiredStates: string[],\r\n ): boolean => {\r\n let matchingState = requiredStates.find(\r\n (state) => state.toLowerCase() === currentState.toLowerCase(),\r\n );\r\n let stateMatch = !!matchingState;\r\n return stateMatch;\r\n };\r\n\r\n // Main function containing logic\r\n const updateAll = (\r\n requiredStates: string[] | string,\r\n currentState: string,\r\n requiredStatesOptions: RequiredOption[],\r\n requiredRoles: string[] | string,\r\n currentRoles: string[],\r\n requiredRolesOptions: RequiredOption[],\r\n requiredFeatures: string[] | string,\r\n currentFeatures: string[],\r\n requiredFeaturesOptions: RequiredOption[],\r\n requiresActiveSubscription: Boolean,\r\n subscriptionStatus: number,\r\n isInvited: Boolean,\r\n isInvitedAndHasReadonlyAccess: Boolean,\r\n ): void => {\r\n if (typeof requiredStates === \"string\") {\r\n requiredStates = [requiredStates];\r\n }\r\n if (typeof requiredRoles === \"string\") {\r\n requiredRoles = [requiredRoles];\r\n }\r\n if (typeof requiredFeatures === \"string\") {\r\n requiredFeatures = [requiredFeatures] as string[];\r\n }\r\n\r\n //defaults\r\n disable();\r\n hide();\r\n\r\n var showState = false;\r\n var enableState = false;\r\n //maintain state within each criteria - needed for override options\r\n var showTmp = showState;\r\n var enableTmp = enableState;\r\n\r\n /* Order or Priority\r\n - subscription status\r\n - feature access\r\n - correct role\r\n - correct case status\r\n \r\n Exceptions\r\n - invited users don't require an active subscription\r\n - admins and lenders don't need active subscriptions\r\n \r\n Required options\r\n - can only override changes made by respective criteria\r\n - requiredRoleOption cannot enable a button is invalid subscription status has disabled it\r\n */\r\n\r\n if (\r\n (isLenderOrAdmin(currentRoles) && requiresActiveSubscription) ||\r\n (allowIfInvited == true && isInvited == true)\r\n ) {\r\n showTmp = showState = true;\r\n enableTmp = enableState = true;\r\n }\r\n // check if active subscription required\r\n else if (requiresActiveSubscription) {\r\n const activeSubscription =\r\n subscriptionStatus == LicenseMasterStatusEnum.PaidUp ||\r\n subscriptionStatus ==\r\n LicenseMasterStatusEnum.PaymentProcessing ||\r\n subscriptionStatus == LicenseMasterStatusEnum.PreCancel;\r\n\r\n // valid subscription\r\n if (activeSubscription) {\r\n showTmp = true;\r\n enableTmp = true;\r\n }\r\n // invalid subscription\r\n else {\r\n if (hideIfInvalidSubscription) {\r\n showTmp = false;\r\n } else {\r\n showTmp = true;\r\n enableTmp = false;\r\n }\r\n }\r\n\r\n showState = showTmp;\r\n enableState = enableTmp;\r\n //stop eval if hidden\r\n if (!showState) {\r\n hide();\r\n return;\r\n }\r\n\r\n if (requiredFeatures && currentFeatures) {\r\n const matchingFeatures = checkFeaturesMatch(\r\n currentFeatures,\r\n requiredFeatures as string[],\r\n );\r\n\r\n if (!matchingFeatures) {\r\n if (disableIfNotInFeatures && showState && enableState) {\r\n //only disable if it hasn't been hidden or disabled by inactive subscription\r\n enableTmp = false;\r\n } else {\r\n showTmp = false;\r\n }\r\n }\r\n //right feature is same as result from subscription so no need to disable/hide again\r\n\r\n if (currentFeatures && requiredFeaturesOptions) {\r\n for (let i = 0; i < requiredFeaturesOptions.length; i++) {\r\n const option = requiredFeaturesOptions[i];\r\n const matchingGroup = currentFeatures.find(\r\n (group) =>\r\n group.toLowerCase() === option.name.toLowerCase(),\r\n );\r\n\r\n if (!!matchingGroup) {\r\n // don't change if been disabled by previous requirement\r\n if (enableState == true) {\r\n if (option.disable) {\r\n disable();\r\n show();\r\n showTmp = true;\r\n enableTmp = false;\r\n } else {\r\n enable();\r\n show();\r\n showTmp = true;\r\n enableTmp = true;\r\n }\r\n }\r\n\r\n if (option.hide) {\r\n showTmp = false;\r\n } else {\r\n show();\r\n showTmp = true;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n showState = showTmp;\r\n enableState = enableTmp;\r\n //stop eval if hidden\r\n if (!showState) {\r\n hide();\r\n return;\r\n }\r\n }\r\n\r\n // At this stage, element is either visible or doesn't require subscription\r\n // element is not hidden or required roles is most important criteria\r\n if (requiredRoles && currentRoles) {\r\n const roleMatch = checkRolesMatch(\r\n currentRoles,\r\n requiredRoles,\r\n matchAllRoles,\r\n );\r\n if (!roleMatch) {\r\n if (disableIfNotInRole) {\r\n showTmp = true;\r\n enableTmp = false;\r\n } else {\r\n showTmp = false;\r\n }\r\n }\r\n //only allowed to enable if it is the most important criteria so not to override prev changes\r\n else if (roleMatch && !requiresActiveSubscription) {\r\n showTmp = true;\r\n enableTmp = true;\r\n }\r\n if (currentRoles && requiredRolesOptions) {\r\n for (let i = 0; i < requiredRolesOptions.length; i++) {\r\n const option = requiredRolesOptions[i];\r\n\r\n const matchingGroup = currentRoles.find(\r\n (group) =>\r\n group.toLowerCase() === option.name.toLowerCase(),\r\n );\r\n\r\n if (!!matchingGroup) {\r\n if (enableState == true) {\r\n if (option.disable) {\r\n showTmp = true;\r\n enableTmp = false;\r\n } else {\r\n showTmp = true;\r\n enableTmp = true;\r\n }\r\n }\r\n if (option.hide) {\r\n showTmp = false;\r\n } else {\r\n showTmp = true;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n showState = showTmp;\r\n enableState = enableTmp;\r\n if (!showState) {\r\n hide();\r\n return;\r\n }\r\n }\r\n\r\n // if element is not hidden or state is most important requirement\r\n if (requiredStates && currentState) {\r\n let stateMatch = checkCaseStateMatch(\r\n currentState,\r\n requiredStates,\r\n );\r\n\r\n if (!stateMatch) {\r\n if (hideIfNotInState) {\r\n showTmp = false;\r\n } else {\r\n showTmp = true;\r\n enableTmp = false;\r\n }\r\n }\r\n //only allowed to enable if it is the most important criteria so not to override prev changes\r\n else if (\r\n stateMatch &&\r\n !(\r\n requiresActiveSubscription ||\r\n requiredFeatures ||\r\n requiredRoles\r\n )\r\n ) {\r\n showTmp = true;\r\n enableTmp = true;\r\n }\r\n\r\n if (currentState && requiredStatesOptions) {\r\n for (let i = 0; i < requiredStatesOptions.length; i++) {\r\n let option = requiredStatesOptions[i];\r\n let matchingState =\r\n option.name.toLowerCase() === currentState.toLowerCase();\r\n\r\n if (matchingState) {\r\n if (enableState == true) {\r\n if (option.disable) {\r\n showTmp = true;\r\n enableTmp = false;\r\n } else {\r\n showTmp = true;\r\n enableTmp = true;\r\n }\r\n }\r\n if (option.hide) {\r\n showTmp = false;\r\n } else {\r\n showTmp = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n showState = showTmp;\r\n enableState = enableTmp;\r\n if (!showState) {\r\n hide();\r\n return;\r\n }\r\n }\r\n\r\n // apply styling\r\n\r\n if (isInvitedAndHasReadonlyAccess) {\r\n applyStyle(showState, false);\r\n } else {\r\n applyStyle(showState, enableState);\r\n }\r\n };\r\n\r\n // test removing event listener\r\n $rootScope.$on(\r\n statusRequirementEventName,\r\n function (event, statusUpdate: { id: number; status: string }) {\r\n if (statusUpdate.id === this.statusRequirementId) {\r\n let currentRoles =\r\n (($rootScope as any)?.currentUser?.Roles as string[]) ?? null;\r\n let features =\r\n (($rootScope as any)?.currentUser?.Features as string[]) ??\r\n null;\r\n let subscriptionStatus =\r\n (($rootScope as any)?.currentUser\r\n ?.SubscriptionStatus as number) ?? null;\r\n\r\n updateAll(\r\n this.requiredStates,\r\n statusUpdate.status,\r\n this.requiredStatesOptions,\r\n this.requiredRoles,\r\n currentRoles,\r\n this.requiredRolesOptions,\r\n this.requiredFeatures,\r\n features,\r\n this.requiredFeaturesOptions,\r\n this.requiresActiveSubscription,\r\n subscriptionStatus,\r\n ($rootScope as any)?.isInvitedToCase as boolean,\r\n ($rootScope as any)?.isInvitedAndHasReadonlyAccess as boolean,\r\n );\r\n }\r\n }.bind(callbackScope),\r\n );\r\n\r\n $rootScope.$on(\r\n \"userRolesChange\",\r\n function (event, userRoles: string[]) {\r\n let status = this.statusRequirementId\r\n ? (($rootScope as any)?.caseStateChange[\r\n this.statusRequirementId\r\n ] as string)\r\n : null;\r\n let features =\r\n (($rootScope as any)?.currentUser?.Features as string[]) ??\r\n null;\r\n let subscriptionStatus =\r\n (($rootScope as any)?.currentUser\r\n ?.SubscriptionStatus as number) ?? null;\r\n\r\n updateAll(\r\n this.requiredStates,\r\n status,\r\n this.requiredStatesOptions,\r\n this.requiredRoles,\r\n userRoles,\r\n this.requiredRolesOptions,\r\n this.requiredFeatures,\r\n features,\r\n this.requiredFeaturesOptions,\r\n this.requiresActiveSubscription,\r\n subscriptionStatus,\r\n ($rootScope as any)?.isInvitedToCase as boolean,\r\n ($rootScope as any)?.isInvitedAndHasReadonlyAccess as boolean,\r\n );\r\n }.bind(callbackScope),\r\n );\r\n\r\n $rootScope.$on(\r\n \"invitedStatusChange\",\r\n function () {\r\n let roles = ($rootScope as any)?.currentUser?.Roles;\r\n let status = this.statusRequirementId\r\n ? (($rootScope as any)?.caseStateChange[\r\n this.statusRequirementId\r\n ] as string)\r\n : null;\r\n let features =\r\n (($rootScope as any)?.currentUser?.Features as string[]) ??\r\n null;\r\n let subscriptionStatus =\r\n (($rootScope as any)?.currentUser\r\n ?.SubscriptionStatus as number) ?? null;\r\n\r\n updateAll(\r\n this.requiredStates,\r\n status,\r\n this.requiredStatesOptions,\r\n this.requiredRoles,\r\n roles,\r\n this.requiredRolesOptions,\r\n this.requiredFeatures,\r\n features,\r\n this.requiredFeaturesOptions,\r\n this.requiresActiveSubscription,\r\n subscriptionStatus,\r\n ($rootScope as any)?.isInvitedToCase as boolean,\r\n ($rootScope as any)?.isInvitedAndHasReadonlyAccess as boolean,\r\n );\r\n }.bind(callbackScope),\r\n );\r\n\r\n if (\r\n ($rootScope as any)?.currentUser &&\r\n $cookies.get(\"access_token\")\r\n ) {\r\n let roles = ($rootScope as any)?.currentUser?.Roles;\r\n let status = statusRequirementId\r\n ? (($rootScope as any)?.caseStateChange[\r\n statusRequirementId\r\n ] as string)\r\n : null;\r\n let features =\r\n (($rootScope as any)?.currentUser?.Features as string[]) ?? null;\r\n let subscriptionStatus =\r\n (($rootScope as any)?.currentUser\r\n ?.SubscriptionStatus as number) ?? null;\r\n\r\n updateAll(\r\n requiredStates,\r\n status,\r\n requiredStatesOptions,\r\n requiredRoles,\r\n roles,\r\n requiredRolesOptions,\r\n requiredFeatures,\r\n features,\r\n requiredFeaturesOptions,\r\n requiresActiveSubscription,\r\n subscriptionStatus,\r\n ($rootScope as any)?.isInvitedToCase as boolean,\r\n ($rootScope as any)?.isInvitedAndHasReadonlyAccess as boolean,\r\n );\r\n } else if ($cookies.get(\"access_token\")) {\r\n $userService.getcurentuserrecord().then(\r\n function (response) {\r\n ($rootScope as any).currentUser = response;\r\n\r\n let roles = ($rootScope as any)?.currentUser?.Roles;\r\n let status = this.statusRequirementId\r\n ? (($rootScope as any)?.caseStateChange[\r\n this.statusRequirementId\r\n ] as string)\r\n : null;\r\n let features =\r\n (($rootScope as any)?.currentUser?.Features as string[]) ??\r\n null;\r\n let subscriptionStatus =\r\n (($rootScope as any)?.currentUser\r\n ?.SubscriptionStatus as number) ?? null;\r\n\r\n updateAll(\r\n this.requiredStates,\r\n status,\r\n this.requiredStatesOptions,\r\n this.requiredRoles,\r\n roles,\r\n this.requiredRolesOptions,\r\n this.requiredFeatures,\r\n features,\r\n this.requiredFeaturesOptions,\r\n this.requiresActiveSubscription,\r\n subscriptionStatus,\r\n ($rootScope as any)?.isInvitedToCase as boolean,\r\n ($rootScope as any)?.isInvitedAndHasReadonlyAccess as boolean,\r\n );\r\n }.bind(callbackScope),\r\n );\r\n }\r\n },\r\n };\r\n },\r\n ]);\r\n /*\r\n * ======================================================================================\r\n *\r\n * use state variables to set values right at the end and not call functions every time\r\n * break out of evaluation as soon as show state is set to false. - no need to eval as can't override hidden in later eval\r\n * must evaluate ...options first\r\n *\r\n * make use of object pass by reference to reuse code\r\n *\r\n * extract function to get values from root scope\r\n *\r\n */\r\n}\r\n","import angular from \"angular\";\r\nimport { UserService } from \"./services/UserService\";\r\nimport { CaseStatusEnum } from \"./models/enum/CaseStatusEnum.cs.d\";\r\n\r\ninterface RequiresRolesOption {\r\n name: string;\r\n disable: boolean;\r\n hide: boolean;\r\n}\r\n\r\nexport function registerRequireRoleDirective() {\r\n const ccqdirectives = angular.module(\"Ccq.directives\");\r\n\r\n ccqdirectives.directive(\"requiresRolesTERMINATED\", [\r\n \"UserService\",\r\n \"$rootScope\",\r\n (userService: UserService, $rootScope: ng.IRootScopeService) => {\r\n return {\r\n restrict: \"A\",\r\n controller: function ($scope, $element, $attrs) {\r\n $scope.userService = userService;\r\n this.requiresRoles = ($scope as any).requiresRoles;\r\n this.requiresRolesOptions = ($scope as any).requiresRolesOptions;\r\n },\r\n scope: {\r\n requiresRoles: \"=\",\r\n matchAllRoles: \"=\",\r\n minimumStateRequired: \"=\",\r\n clickedEvent: \"@\",\r\n disableIfNotInRole: \"=\",\r\n requiresRolesOptions: \"=\",\r\n },\r\n link: function (\r\n scope: angular.IScope,\r\n element: JQLite,\r\n attr: angular.IAttributes,\r\n ctrl: angular.IController,\r\n ) {\r\n const el: HTMLElement = angular.element(element)[0];\r\n const $rootScope = scope.$root;\r\n const $userService = (scope as any).userService;\r\n\r\n let requiresRoles: string[] | string = (scope as any).requiresRoles;\r\n let requiresRolesOptions: RequiresRolesOption[] = (scope as any)\r\n .requiresRolesOptions;\r\n const matchAllRoles: Boolean = (scope as any).matchAllRoles || false;\r\n let disableIfNotInRole: Boolean =\r\n (scope as any).disableIfNotInRole || false; // defines a behaviour - ability to be disabled\r\n\r\n let originalStyles = {\r\n cursor: el.style.cursor,\r\n pointerEvents: el.style.pointerEvents,\r\n opacity: el.style.opacity,\r\n display: el.style.display,\r\n };\r\n\r\n const permitted = function (): void {\r\n if (disableIfNotInRole) {\r\n performPermitted(false, true); // enable - if permitted and can be disabled\r\n } else {\r\n performPermitted(); // show button - if permitted and can be hidden\r\n }\r\n };\r\n\r\n const notPermitted = function (): void {\r\n if (disableIfNotInRole) {\r\n performNotPermitted(false, true); //button disabled - if permitted and can be disabled\r\n } else {\r\n performNotPermitted(); // hidden - if permitted and can be hidden\r\n }\r\n };\r\n\r\n const performPermitted = function (\r\n hideIfNotPermitted: Boolean = true,\r\n disableIfNotPermitted: Boolean = false,\r\n ): void {\r\n if (disableIfNotPermitted) {\r\n //enable\r\n el.style.cursor = originalStyles.cursor;\r\n el.style.pointerEvents = originalStyles.pointerEvents;\r\n el.style.opacity = originalStyles.opacity;\r\n }\r\n\r\n if (hideIfNotPermitted) {\r\n //show\r\n el.style.display = originalStyles.display;\r\n }\r\n };\r\n\r\n const performNotPermitted = function (\r\n hideIfNotPermitted: Boolean = true,\r\n disableIfNotPermitted: Boolean = false,\r\n ): void {\r\n if (disableIfNotPermitted) {\r\n //disable\r\n el.style.cursor = \"not-allowed\";\r\n el.style.pointerEvents = \"none\";\r\n el.style.opacity = \"0.8\";\r\n }\r\n\r\n if (hideIfNotPermitted) {\r\n //hide\r\n el.style.display = \"none\";\r\n }\r\n };\r\n\r\n const executeOptions = function (option: RequiresRolesOption): void {\r\n if (option.disable) {\r\n el.style.cursor = \"not-allowed\";\r\n el.style.pointerEvents = \"none\";\r\n el.style.opacity = \"0.8\";\r\n el.style.display = originalStyles.display;\r\n }\r\n\r\n if (option.hide) {\r\n el.style.display = originalStyles.display;\r\n }\r\n };\r\n\r\n const updateRoles = (\r\n requiresRoles: string[] | string,\r\n requiresRolesOptions: RequiresRolesOption[],\r\n currentUserRoles: string[],\r\n ): void => {\r\n // We may pass in a string or an array of strings. If it's jsut a single string, let's put it into an array so we can use the same handling either way.\r\n if (typeof requiresRoles === \"string\") {\r\n const role = requiresRoles;\r\n requiresRoles = [requiresRoles];\r\n }\r\n\r\n if (requiresRoles && currentUserRoles) {\r\n if (!matchAllRoles) {\r\n let matchFound = false;\r\n for (let i = 0; i < requiresRoles.length; i++) {\r\n let role = requiresRoles[i];\r\n var matchingGroup = currentUserRoles.find(\r\n (group) => group.toLowerCase() === role.toLowerCase(),\r\n );\r\n if (matchingGroup) {\r\n permitted();\r\n matchFound = true;\r\n break;\r\n }\r\n if (!matchFound) {\r\n notPermitted();\r\n }\r\n }\r\n } else {\r\n let matchFound = true;\r\n for (let i = 0; i < requiresRoles.length; i++) {\r\n let role = requiresRoles[i];\r\n var matchingGroup = currentUserRoles.find(\r\n (group) => group === role,\r\n );\r\n if (!matchingGroup) {\r\n matchFound = false;\r\n notPermitted();\r\n break;\r\n }\r\n }\r\n if (matchFound) {\r\n permitted();\r\n }\r\n }\r\n }\r\n\r\n // requiresRolesOptions will always override anything applied as part of requiresRoles\r\n if (requiresRolesOptions && currentUserRoles) {\r\n for (let i = 0; i < requiresRolesOptions.length; i++) {\r\n let roleOption = requiresRolesOptions[i];\r\n var matchingGroup = currentUserRoles.find(\r\n (group) =>\r\n group.toLowerCase() === roleOption.name.toLowerCase(),\r\n );\r\n\r\n if (matchingGroup) {\r\n executeOptions(roleOption);\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Setup defaults; we should assume we don't have access then grant it if we find we do.\r\n notPermitted();\r\n\r\n // Listen for updates to status.\r\n $rootScope.$on(\r\n \"caseStateChange\",\r\n function (\r\n event,\r\n statusUpdate: { caseId: number; caseStatus: CaseStatusEnum },\r\n ) {},\r\n );\r\n\r\n // Listen for updates to user roles.\r\n $rootScope.$on(\r\n \"userRolesChange\",\r\n function (event, userRoles: string[]) {\r\n updateRoles(requiresRoles, requiresRolesOptions, userRoles);\r\n },\r\n );\r\n\r\n if (($rootScope as any).currentUser) {\r\n updateRoles(\r\n requiresRoles,\r\n requiresRolesOptions,\r\n ($rootScope as any).currentUser.Roles,\r\n );\r\n } else {\r\n $userService.getcurentuserrecord().then(\r\n function (response) {\r\n ($rootScope as any).currentUser = response;\r\n updateRoles(\r\n this.requiresRoles,\r\n this.requiresRolesOptions,\r\n ($rootScope as any).currentUser.Roles,\r\n );\r\n }.bind({\r\n requiresRoles: (scope as any).requiresRoles,\r\n requiresRolesOptions: (scope as any).requiresRolesOptions,\r\n }),\r\n );\r\n }\r\n\r\n //el.onclick = (event: Event) => {\r\n // if (clickPermitted) {\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n // return false;\r\n // }\r\n //};\r\n },\r\n };\r\n },\r\n ]);\r\n}\r\n","import angular from \"angular\";\r\nimport { UserService } from \"./services/UserService\";\r\n\r\ninterface RequiredStatesOption {\r\n name: string;\r\n disable: boolean;\r\n hide: boolean;\r\n}\r\n\r\nexport function registerRequiresStateDirective() {\r\n const ccqdirectives = angular.module(\"Ccq.directives\");\r\n\r\n ccqdirectives.directive(\"statusRequirementId\", [\r\n \"$rootScope\",\r\n ($rootScope: ng.IRootScopeService) => {\r\n return {\r\n restrict: \"A\",\r\n controller: function ($scope, $element, $attrs) {\r\n // Expose the scope.\r\n this.$scope = $scope;\r\n // This is set asynchronously, so we need to watch for changes.\r\n $scope.$watch(\"statusRequirementId\", function () {\r\n this.statusRequirementId = ($scope as any).statusRequirementId;\r\n });\r\n // This is a static string, so we can set it immediately.\r\n this.statusRequirementEventName = (\r\n $scope as any\r\n ).statusRequirementEventName;\r\n },\r\n scope: {\r\n statusRequirementId: \"=\", // status of current case id, need to check this against required states 'after it is loaded async-ly'\r\n statusRequirementEventName: \"@\",\r\n hideIfNotInState: \"=\",\r\n requiredStatesOptions: \"=\",\r\n },\r\n };\r\n },\r\n ]);\r\n\r\n ccqdirectives.directive(\"requiredStatesTERMINATED\", [\r\n \"UserService\",\r\n \"$rootScope\",\r\n (userService: UserService, $rootScope: ng.IRootScopeService) => {\r\n return {\r\n restrict: \"A\",\r\n require: [\"^statusRequirementId\"],\r\n controller: function ($scope, $element, $attrs) {\r\n $scope.userService = userService;\r\n },\r\n scope: false,\r\n link: function (\r\n scope: angular.IScope,\r\n element: JQLite,\r\n attr: angular.IAttributes,\r\n ctrls: angular.IController[],\r\n ) {\r\n const el: HTMLElement = angular.element(element)[0];\r\n const $rootScope = scope.$root;\r\n const $userService = (scope as any).userService;\r\n\r\n let statusRequirementId = (ctrls[0] as any).statusRequirementId;\r\n const statusRequirementEventName = (ctrls[0] as any)\r\n .statusRequirementEventName;\r\n let requiredStatesOptions: RequiredStatesOption[] =\r\n scope.$parent.$eval(attr.requiredStatesOptions);\r\n let hideIfNotInState: Boolean =\r\n scope.$parent.$eval(attr.hideIfNotInState) || false;\r\n\r\n let requiredStates: string[] | string = scope.$parent.$eval(\r\n attr.requiredStates,\r\n ); // get the value of the javascript attribute required-states\r\n\r\n //define callback scope with initial values\r\n let callbackScope = {\r\n parentScope: scope,\r\n requiredStates: requiredStates,\r\n statusRequirementId: statusRequirementId,\r\n };\r\n\r\n // if the status requirement id changes, we update the value in callbackScope\r\n (ctrls[0] as any).$scope.$watch(\r\n \"statusRequirementId\",\r\n function () {\r\n this.callbackScope.statusRequirementId = (\r\n ctrls[0] as any\r\n ).$scope.statusRequirementId;\r\n if (!!this.callbackScope.statusRequirementId) {\r\n let status = ($rootScope as any).caseStateChange[\r\n this.callbackScope.statusRequirementId\r\n ] as string; // current state\r\n updateState(requiredStates, requiredStatesOptions, status);\r\n }\r\n }.bind({ callbackScope: callbackScope }),\r\n );\r\n\r\n let originalStyles = {\r\n cursor: el.style.cursor,\r\n pointerEvents: el.style.pointerEvents,\r\n opacity: el.style.opacity,\r\n display: el.style.display,\r\n };\r\n\r\n const permitted = function (): void {\r\n if (hideIfNotInState) {\r\n performPermitted(true, false); //show\r\n } else {\r\n performPermitted(); //enable\r\n }\r\n };\r\n\r\n const notPermitted = function (): void {\r\n if (hideIfNotInState) {\r\n performNotPermitted(true, false); //hidden\r\n } else {\r\n performNotPermitted(); //disabled\r\n }\r\n };\r\n\r\n const performPermitted = function (\r\n hideIfNotPermitted: Boolean = false,\r\n disableIfNotPermitted: Boolean = true,\r\n ): void {\r\n if (disableIfNotPermitted) {\r\n el.style.cursor = originalStyles.cursor;\r\n el.style.pointerEvents = originalStyles.pointerEvents;\r\n el.style.opacity = originalStyles.opacity;\r\n }\r\n\r\n if (hideIfNotPermitted) {\r\n el.style.display = originalStyles.display;\r\n }\r\n };\r\n\r\n const performNotPermitted = function (\r\n hideIfNotPermitted: Boolean = false,\r\n disableIfNotPermitted: Boolean = true,\r\n ): void {\r\n if (disableIfNotPermitted) {\r\n el.style.cursor = \"not-allowed\";\r\n el.style.pointerEvents = \"none\";\r\n el.style.opacity = \"0.8\";\r\n }\r\n\r\n if (hideIfNotPermitted) {\r\n el.style.display = \"none\";\r\n }\r\n };\r\n\r\n const executeOptions = function (option: RequiredStatesOption): void {\r\n // if state option is disabled or required it is hidden\r\n if (option.disable) {\r\n el.style.cursor = originalStyles.cursor;\r\n el.style.pointerEvents = originalStyles.pointerEvents;\r\n el.style.opacity = originalStyles.opacity;\r\n el.style.display = \"none\";\r\n }\r\n\r\n if (option.hide) {\r\n el.style.display = \"none\";\r\n }\r\n };\r\n\r\n const updateState = (\r\n requiredStates: string[] | string,\r\n requiredStatesOptions: RequiredStatesOption[],\r\n currentState: string,\r\n ): void => {\r\n // We may pass in a string or an array of strings. If it's jsut a single string, let's put it into an array so we can use the same handling either way.\r\n if (typeof requiredStates === \"string\") {\r\n requiredStates = [requiredStates];\r\n }\r\n\r\n if (requiredStates && currentState) {\r\n let matchingState = requiredStates.find(\r\n (state) => state.toLowerCase() === currentState.toLowerCase(),\r\n );\r\n if (!!matchingState) {\r\n permitted();\r\n } else {\r\n notPermitted();\r\n }\r\n }\r\n\r\n // requiredStatesOptions will always override anything applied as part of requiredStates\r\n if (requiredStatesOptions && currentState) {\r\n for (let i = 0; i < requiredStatesOptions.length; i++) {\r\n let stateOption = requiredStatesOptions[i];\r\n var matchingState =\r\n currentState.toLowerCase() === stateOption.name.toLowerCase();\r\n\r\n if (!matchingState) {\r\n executeOptions(stateOption);\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Setup defaults; we should assume we don't have access then grant it if we find we do.\r\n notPermitted();\r\n\r\n // Listen for updates to status.\r\n\r\n let testy = $rootScope.$on(\r\n statusRequirementEventName,\r\n function (event, statusUpdate: { id: number; status: string }) {\r\n if (statusUpdate.id === this.statusRequirementId) {\r\n updateState(\r\n this.requiredStates,\r\n this.requiredStatesOptions,\r\n statusUpdate.status,\r\n );\r\n }\r\n }.bind(callbackScope),\r\n ); //uses updated values\r\n },\r\n };\r\n },\r\n ]);\r\n}\r\n","import angular from \"angular\";\r\nimport { UserService } from \"./services/UserService\";\r\n\r\nexport function registerWhiteLabelledDirective() {\r\n const ccqdirectives = angular.module(\"Ccq.directives\");\r\n\r\n ccqdirectives.directive(\"whiteLabelOnly\", [\r\n \"UserService\",\r\n \"$rootScope\",\r\n (userService: UserService, $rootScope: ng.IRootScopeService) => {\r\n return {\r\n restrict: \"A\",\r\n controller: function ($scope, $element, $attrs) {},\r\n link: function (\r\n scope: angular.IScope,\r\n element: JQLite,\r\n attr: angular.IAttributes,\r\n ctrl: angular.IController,\r\n ) {\r\n const el: HTMLElement = angular.element(element)[0];\r\n const $rootScope = scope.$root;\r\n\r\n let originalStyles = {\r\n display: el.style.display,\r\n };\r\n\r\n const permitted = function (): void {\r\n el.style.display = originalStyles.display;\r\n };\r\n\r\n const notPermitted = function (): void {\r\n el.style.display = \"none\";\r\n };\r\n\r\n const updateWhiteLabel = (isWhiteLabelled: boolean): void => {\r\n if (isWhiteLabelled == true) {\r\n permitted();\r\n } else {\r\n notPermitted();\r\n }\r\n };\r\n\r\n // Setup defaults; we should assume we don't have access then grant it if we find we do.\r\n notPermitted();\r\n\r\n if (($rootScope as any).isWhiteLabelled) {\r\n updateWhiteLabel(($rootScope as any).isWhiteLabelled);\r\n } else {\r\n userService.IsWhiteLabelled().then(\r\n function (response: boolean) {\r\n ($rootScope as any).isWhiteLabelled = response;\r\n updateWhiteLabel(($rootScope as any).isWhiteLabelled);\r\n }.bind({ requiresRoles: (scope as any).requiresRoles }),\r\n );\r\n }\r\n },\r\n };\r\n },\r\n ]);\r\n}\r\n","import angular from \"angular\";\r\n\r\nexport function registerClickOutsideDirective() {\r\n const ccqdirectives = angular.module(\"Ccq.directives\");\r\n\r\n ccqdirectives.directive('clickOutside', ['$document', function ($document) {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n clickOutside: '&'\r\n },\r\n link: function (scope, element) {\r\n // Function to check if the click is outside the HTML element\r\n const onClick = (event) => {\r\n \r\n // Check if the clicked target is inside the element or any ancestor has the click-outside directive\r\n const closestDropdown = event.target.closest('[click-outside]');\r\n\r\n // If the closest dropdown is not the current element, it means we clicked outside\r\n // const isInside = closestDropdown === element[0];\r\n\r\n \r\n // If the click is outside, trigger the clickOutside handler\r\n if (!element[0].contains(event.target) && !closestDropdown) {\r\n scope.$apply(function () {\r\n (scope as any).clickOutside();\r\n });\r\n }\r\n }\r\n // Listen for click events on the document\r\n $document.on('click', onClick);\r\n\r\n // Cleanup listener when the directive is destroyed\r\n scope.$on('$destroy', function () {\r\n $document.off('click', onClick);\r\n });\r\n }\r\n };\r\n }]);\r\n}\r\n","import { registerAppTermDirective } from \"@js/apptermdirective\";\r\nimport { registerRequiresAllDirective } from \"@js/requiresalldirective\";\r\nimport { registerRequireRoleDirective } from \"@js/requiresroledirective\";\r\nimport { registerRequiresStateDirective } from \"@js/requiresstatedirective\";\r\nimport { registerWhiteLabelledDirective } from \"@js/whitelabelleddirective\";\r\nimport { registerClickOutsideDirective } from \"@js/clickOutsideDirective\";\r\nimport angular from \"angular\";\r\n\r\nexport interface IpdfdownlaodScope extends angular.IScope {\r\n downloadPdf: any;\r\n name: string;\r\n icon: string;\r\n}\r\n\r\nexport function instantiateCcqDirectives() {\r\n angular\r\n .module(\"Ccq.directives\", [])\r\n\r\n .directive(\"scrollBottom\", function ($document) {\r\n return {\r\n restrict: \"A\",\r\n link: function (scope, element, attrs) {\r\n var el = element[0];\r\n element.bind(\"scroll\", function () {\r\n if (el.scrollTop + el.offsetHeight >= el.scrollHeight) {\r\n scope.$apply(attrs.scrollBottom);\r\n }\r\n });\r\n },\r\n };\r\n })\r\n\r\n .directive(\"ngConfirmClick\", [\r\n function () {\r\n return {\r\n link: function (scope, element, attr) {\r\n var msg = attr.ngConfirmClick || \"Are you sure?\";\r\n var clickAction = attr.confirmedClick;\r\n element.bind(\"click\", function (event) {\r\n if (window.confirm(msg)) {\r\n scope.$eval(clickAction);\r\n }\r\n });\r\n },\r\n };\r\n },\r\n ])\r\n\r\n .directive(\"convertToBoolean\", function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, element, attrs, ngModel) {\r\n (ngModel as any).$parsers.push(function (val: any) {\r\n if (val === undefined) {\r\n return undefined;\r\n }\r\n\r\n return val === \"true\";\r\n });\r\n (ngModel as any).$formatters.push(function (val: any) {\r\n return \"\" + val;\r\n });\r\n },\r\n };\r\n })\r\n\r\n .directive(\"convertToNumber\", function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, element, attrs, ngModel) {\r\n (ngModel as any).$parsers.push(function (val: any) {\r\n return parseInt(val, 10);\r\n });\r\n (ngModel as any).$formatters.push(function (val: any) {\r\n //chek if flagged\r\n\r\n return \"\" + val;\r\n });\r\n },\r\n };\r\n })\r\n //this is used for enums set with flags with mulit option ability\r\n .directive(\"convertToNumberm\", function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, element, attrs, ngModel) {\r\n (ngModel as any).$parsers.push(function (val: any) {\r\n if (Array.isArray(val)) {\r\n var res: number = parseInt(val[0], 10);\r\n\r\n //if an array multi select enum\r\n val.forEach((x) => (res = parseInt(x, 10) | res));\r\n return res;\r\n } else {\r\n return parseInt(val, 10);\r\n }\r\n });\r\n (ngModel as any).$formatters.push(function (val: any) {\r\n //chek if flagged\r\n var ret: string[] = [];\r\n //deal with top 0 being selected\r\n if (val == 0) {\r\n ret.push(\"0\");\r\n return ret;\r\n }\r\n\r\n var res: string = parseInt(val, 10).toString(2);\r\n var currentenumval: number = 1;\r\n for (var i = res.length - 1; i >= 0; i--) {\r\n if (res.charAt(i) == \"1\") {\r\n ret.push(currentenumval.toString());\r\n }\r\n currentenumval = currentenumval * 2;\r\n }\r\n return ret;\r\n });\r\n },\r\n };\r\n })\r\n .directive(\"moveNext\", function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, element, attrs, ngModel) {\r\n element.bind(\"keyup\", (e) => {\r\n if (\r\n (element.val() as string).length === parseInt(attrs[\"moveNext\"])\r\n ) {\r\n (element.next()[0] as any).focus();\r\n }\r\n });\r\n },\r\n };\r\n })\r\n .directive(\"currency\", [\r\n \"$filter\",\r\n function ($filter) {\r\n return {\r\n require: \"?ngModel\",\r\n link: function (scope, elem, attrs, ctrl: any) {\r\n if (!ctrl) return;\r\n\r\n ctrl.$formatters.unshift(function (a: any) {\r\n return $filter(\"currency\")(ctrl.$modelValue, \"\");\r\n });\r\n },\r\n };\r\n },\r\n ])\r\n .directive(\"decimalPlace\", [\r\n \"$filter\",\r\n function ($filter) {\r\n return {\r\n require: \"?ngModel\",\r\n link: function (scope, elem, attrs, ctrl: any) {\r\n if (!ctrl) return;\r\n\r\n ctrl.$formatters.push(function (a: any) {\r\n if (!a || a.length == 0) {\r\n return a;\r\n }\r\n const value = parseFloat(a);\r\n return value.toFixed(attrs.decimalPlace);\r\n });\r\n elem.bind(\"blur\", function (e) {\r\n const value = parseFloat(ctrl.$modelValue);\r\n elem.val(value.toFixed(attrs.decimalPlace));\r\n elem.triggerHandler(\"input\");\r\n });\r\n },\r\n };\r\n },\r\n ])\r\n\r\n .directive(\"currencyMask\", function () {\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: function (scope, element, attrs, ngModelController: any) {\r\n // Run formatting on keyup\r\n var numberWithCommas = function (value: any, addExtraZero: any) {\r\n if (addExtraZero == undefined) addExtraZero = false;\r\n value = value.toString();\r\n value = value.replace(/[^0-9\\.]/g, \"\");\r\n var parts = value.split(\".\");\r\n parts[0] = parts[0].replace(/\\d{1,3}(?=(\\d{3})+(?!\\d))/g, \"$&,\");\r\n if (parts[1] && parts[1].length > 2) {\r\n parts[1] = parts[1].substring(0, 2);\r\n }\r\n if (addExtraZero && parts[1] && parts[1].length === 1) {\r\n parts[1] = parts[1] + \"0\";\r\n }\r\n return parts.join(\".\");\r\n };\r\n var applyFormatting = function () {\r\n var value = element.val();\r\n var original = value;\r\n if (!value || (value as string).length == 0) {\r\n return;\r\n }\r\n value = numberWithCommas(value, false);\r\n if (value != original) {\r\n element.val(value);\r\n element.triggerHandler(\"input\");\r\n }\r\n };\r\n element.bind(\"keyup\", (e: any) => {\r\n var keycode = e.keyCode;\r\n let originalPosition = (e.target as HTMLInputElement)\r\n .selectionStart;\r\n var isTextInputKey =\r\n (keycode > 47 && keycode < 58) || // number keys\r\n keycode == 32 ||\r\n keycode == 8 ||\r\n keycode == 46 ||\r\n keycode == 229 || // spacebar or backspace/delete (or android)\r\n (keycode > 64 && keycode < 91) || // letter keys\r\n (keycode > 95 && keycode < 112) || // numpad keys\r\n (keycode > 185 && keycode < 193) || // ;=,-./` (in order)\r\n (keycode > 218 && keycode < 223); // [\\]' (in order)\r\n if (isTextInputKey) {\r\n let originalLength = (element.val() as string).length;\r\n applyFormatting();\r\n // If our length changed (due to commas being added), we need to adjust our position.\r\n originalPosition =\r\n originalPosition +\r\n ((element.val() as string).length - originalLength);\r\n if (originalPosition < 0) {\r\n originalPosition = 0;\r\n }\r\n (e.target as HTMLInputElement).selectionStart = originalPosition;\r\n (e.target as HTMLInputElement).selectionEnd = originalPosition;\r\n }\r\n });\r\n ngModelController.$parsers.push(function (value: any) {\r\n if (!value || value.length == 0) {\r\n return value;\r\n }\r\n value = value.toString();\r\n value = value.replace(/[^0-9\\.]/g, \"\");\r\n return value;\r\n });\r\n ngModelController.$formatters.push(function (value: any) {\r\n if (!value || value.length == 0) {\r\n return value;\r\n }\r\n value = numberWithCommas(value, true);\r\n return value;\r\n });\r\n },\r\n };\r\n })\r\n // .filter('percentage', ['$filter', function ($filter) {\r\n // return function (input, decimals) {\r\n\r\n // return $filter('number')(input * 100, decimals);\r\n // };\r\n\r\n // }])\r\n .directive(\"pdfDownload\", function () {\r\n return {\r\n restrict: \"E\",\r\n templateUrl: \"/views/partials/pdfdownload.html\",\r\n scope: true,\r\n link: function (scope: IpdfdownlaodScope, element, attr) {\r\n var anchor = element.children()[0];\r\n scope.name = attr.controlname;\r\n // When the download starts, do nothing at moment but maybe display somthing\r\n scope.$on(\"download-start\", function () { });\r\n\r\n // When the download finishes, attach the data to the link. and init the click event\r\n scope.$on(\"downloaded\", function (event, data, filename) {\r\n var fileURL = window.URL.createObjectURL(data);\r\n var a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.href = fileURL;\r\n if (attr.filename && attr.filename.length > 0) {\r\n a.download = attr.filename;\r\n } else {\r\n a.download = filename;\r\n }\r\n a.click();\r\n });\r\n },\r\n controller: [\r\n \"$scope\",\r\n \"$attrs\",\r\n \"$http\",\r\n function ($scope, $attrs, $http) {\r\n $scope.downloadPdf = () => {\r\n $scope.$emit(\"download-start\");\r\n $http\r\n .get($attrs.url, {\r\n responseType: \"arraybuffer\",\r\n })\r\n .then((response: any) => {\r\n var filename = \"\";\r\n var disposition = response.headers()[\"content-disposition\"];\r\n if (disposition && disposition.indexOf(\"attachment\") !== -1) {\r\n var filenameRegex =\r\n /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n var matches = filenameRegex.exec(disposition);\r\n if (matches != null && matches[1]) {\r\n filename = matches[1].replace(/['\"]/g, \"\");\r\n }\r\n }\r\n var dispostype = response.headers()[\"content-type\"];\r\n if (!dispostype) {\r\n dispostype = \"octet/stream\";\r\n }\r\n var blob = new Blob([response.data], {\r\n type: dispostype,\r\n });\r\n $scope.$emit(\"downloaded\", blob, filename);\r\n });\r\n };\r\n },\r\n ],\r\n };\r\n });\r\n\r\n registerAppTermDirective();\r\n registerRequireRoleDirective();\r\n registerRequiresStateDirective();\r\n registerRequiresAllDirective();\r\n registerWhiteLabelledDirective();\r\n registerClickOutsideDirective();\r\n}\r\n","/**\r\n * Version: 1.0 Alpha-1 \r\n * Build Date: 13-Nov-2007\r\n * Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved.\r\n * License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. \r\n * Website: http://www.datejs.com/ or http://www.coolite.com/datejs/\r\n */\r\nDate.CultureInfo={name:\"en-US\",englishName:\"English (United States)\",nativeName:\"English (United States)\",dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],abbreviatedDayNames:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],shortestDayNames:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],firstLetterDayNames:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],abbreviatedMonthNames:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],amDesignator:\"AM\",pmDesignator:\"PM\",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:\"mdy\",formatPatterns:{shortDate:\"M/d/yyyy\",longDate:\"dddd, MMMM dd, yyyy\",shortTime:\"h:mm tt\",longTime:\"h:mm:ss tt\",fullDateTime:\"dddd, MMMM dd, yyyy h:mm:ss tt\",sortableDateTime:\"yyyy-MM-ddTHH:mm:ss\",universalSortableDateTime:\"yyyy-MM-dd HH:mm:ssZ\",rfc1123:\"ddd, dd MMM yyyy HH:mm:ss GMT\",monthDay:\"MMMM dd\",yearMonth:\"MMMM, yyyy\"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:\"-000\",EST:\"-0400\",CST:\"-0500\",MST:\"-0600\",PST:\"-0700\"},abbreviatedTimeZoneDST:{GMT:\"-000\",EDT:\"-0500\",CDT:\"-0600\",MDT:\"-0700\",PDT:\"-0800\"}};\r\nDate.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;idate)?1:(this=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config==\"number\"){this._orient=config;return this;}\r\nvar x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);}\r\nif(x.second||x.seconds){this.addSeconds(x.second||x.seconds);}\r\nif(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);}\r\nif(x.hour||x.hours){this.addHours(x.hour||x.hours);}\r\nif(x.month||x.months){this.addMonths(x.month||x.months);}\r\nif(x.year||x.years){this.addYears(x.year||x.years);}\r\nif(x.day||x.days){this.addDays(x.day||x.days);}\r\nreturn this;};Date._validate=function(value,min,max,name){if(typeof value!=\"number\"){throw new TypeError(value+\" is not a Number.\");}else if(valuemax){throw new RangeError(value+\" is not a valid value for \"+name+\".\");}\r\nreturn true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,\"milliseconds\");};Date.validateSecond=function(n){return Date._validate(n,0,59,\"seconds\");};Date.validateMinute=function(n){return Date._validate(n,0,59,\"minutes\");};Date.validateHour=function(n){return Date._validate(n,0,23,\"hours\");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),\"days\");};Date.validateMonth=function(n){return Date._validate(n,0,11,\"months\");};Date.validateYear=function(n){return Date._validate(n,1,9999,\"seconds\");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;}\r\nif(!x.second&&x.second!==0){x.second=-1;}\r\nif(!x.minute&&x.minute!==0){x.minute=-1;}\r\nif(!x.hour&&x.hour!==0){x.hour=-1;}\r\nif(!x.day&&x.day!==0){x.day=-1;}\r\nif(!x.month&&x.month!==0){x.month=-1;}\r\nif(!x.year&&x.year!==0){x.year=-1;}\r\nif(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());}\r\nif(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());}\r\nif(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());}\r\nif(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());}\r\nif(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());}\r\nif(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());}\r\nif(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());}\r\nif(x.timezone){this.setTimezone(x.timezone);}\r\nif(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);}\r\nreturn this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;}\r\nvar daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}}\r\nreturn w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]==\"D\";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return\"+\"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?\"0\"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case\"hh\":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case\"h\":return self.getHours()<13?self.getHours():(self.getHours()-12);case\"HH\":return p(self.getHours());case\"H\":return self.getHours();case\"mm\":return p(self.getMinutes());case\"m\":return self.getMinutes();case\"ss\":return p(self.getSeconds());case\"s\":return self.getSeconds();case\"yyyy\":return self.getFullYear();case\"yy\":return self.getFullYear().toString().substring(2,4);case\"dddd\":return self.getDayName();case\"ddd\":return self.getDayName(true);case\"dd\":return p(self.getDate());case\"d\":return self.getDate().toString();case\"MMMM\":return self.getMonthName();case\"MMM\":return self.getMonthName(true);case\"MM\":return p((self.getMonth()+1));case\"M\":return self.getMonth()+1;case\"t\":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case\"tt\":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case\"zzz\":case\"zz\":case\"z\":return\"\";}}):this._toString();};\r\nDate.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement=\"day\";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=(\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),mx=(\"january february march april may june july august september october november december\").split(/\\s/),px=(\"Millisecond Second Minute Hour Day Week Month Year\").split(/\\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}\r\nreturn this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}\r\nif(!last&&q[1].length===0){last=true;}\r\nif(!last){var qx=[];for(var j=0;j0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}\r\nif(rx[1].length1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}\r\nif(args){for(var i=0,px=args.shift();i2)?n:(n+(((n+2000)Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+\" is not a valid value for days.\");}\r\nvar r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}\r\nreturn r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}\r\nfor(var i=0;i ng.IPromise;\r\n\r\n public uploading: boolean;\r\n\r\n public error: boolean;\r\n\r\n\r\n static $inject = ['$scope', '$http'];\r\n constructor(private $scope: ng.IScope, public $http: ng.IHttpService) {\r\n\r\n }\r\n\r\n uploadFile(file: File) {\r\n this.uploading = true;\r\n if (!file) {\r\n return;\r\n }\r\n\r\n this.$http.get(this.uploadRequestUrl, { params: { fileName: this.folderPath + file.name, fileType: file.type } }).then((response) => {\r\n\r\n this.$http.put(response.data as string, file, { headers: { 'Content-Type': file.type } })\r\n .then((response) => {\r\n this.uploadComplete({ filename: file.name });\r\n })\r\n .catch((response) => {\r\n\r\n }).finally(() => {\r\n this.uploading = false;\r\n });\r\n });\r\n };\r\n\r\n}\r\n","export class CcqGlobalSearchBarComponent implements ng.IComponentOptions {\r\n\r\n public transclude: boolean = true;\r\n\r\n public bindings: any;\r\n public controller: any;\r\n public templateUrl: string;\r\n\r\n constructor() {\r\n this.bindings = {\r\n placeholder: '@',\r\n search: '&',\r\n selectItem: '&'\r\n\r\n };\r\n this.controller = CcqGlobalSearchBarController;\r\n this.templateUrl = 'js/dist/components/globalsearchbar/globalsearchbar.html';\r\n }\r\n}\r\n\r\nexport class CcqGlobalSearchBarController {\r\n public placeholder: string;\r\n public search: (any) => ng.IPromise;\r\n public selectItem: (any) => ng.IPromise;\r\n\r\n public needle: string;\r\n public items: any[];\r\n public selectedItem: any;\r\n public selectedIndex: number;\r\n\r\n public meterCount: number = 0;\r\n public customerCount: number = 0;\r\n public agencyCount: number = 0;\r\n public siteCount: number = 0;\r\n\r\n\r\n static $inject = ['$parse'];\r\n constructor(private $parse: ng.IParseService) {\r\n\r\n }\r\n\r\n highlightItem(index: number) {\r\n if (!this.items) {\r\n return;\r\n }\r\n }\r\n\r\n keyUp($event: KeyboardEvent) {\r\n if ($event.keyCode === 13) {\r\n this.selectByIndex();\r\n }\r\n else if ($event.keyCode === 38) {\r\n if (this.selectedIndex > 0) {\r\n this.selectedIndex--;\r\n }\r\n }\r\n else if ($event.keyCode === 40) {\r\n if (this.selectedIndex === undefined) {\r\n this.selectedIndex = 0;\r\n }\r\n\r\n }\r\n\r\n this.highlightItem(this.selectedIndex);\r\n }\r\n\r\n updateSearch() {\r\n if (!this.needle) {\r\n delete this.items;\r\n return;\r\n }\r\n\r\n this.search({ needle: this.needle }).then((response) => {\r\n this.items = response;\r\n\r\n });\r\n }\r\n\r\n selectByIndex() {\r\n\r\n }\r\n\r\n select(item: any, type: string) {\r\n delete this.items;\r\n this.selectItem({ item: item });\r\n }\r\n}\r\n\r\n\r\n","export class LazyLoadListComponent implements ng.IComponentOptions {\r\n public transclude: boolean = true;\r\n public bindings: any;\r\n public controller: any;\r\n public templateUrl: string;\r\n\r\n constructor() {\r\n this.bindings = {\r\n getItems: \"&\",\r\n selectItem: \"&\",\r\n frontendFiltering: \"<\",\r\n };\r\n\r\n this.controller = LazyLoadListController;\r\n this.templateUrl = \"js/components/lazyloadlist/lazyloadlist.html\";\r\n }\r\n}\r\n\r\nexport class LazyLoadListController implements ng.IComponentController {\r\n public items: any[] = [];\r\n public getItems: (query: any) => ng.IPromise;\r\n public selectItem: (item: any) => ng.IPromise;\r\n public page: number = 1;\r\n public itemFormat: any;\r\n public scrollPercent: number = 0;\r\n public limitHit: boolean = false;\r\n public fetchingItems: boolean = false;\r\n public needle: string = \"\";\r\n public frontendFiltering: boolean = false;\r\n\r\n static $inject = [\"$scope\"];\r\n constructor(private $scope: ng.IScope) {}\r\n\r\n $postLink() {\r\n this.doGetItems();\r\n }\r\n\r\n doGetItems() {\r\n if (!this.limitHit) {\r\n this.fetchingItems = true;\r\n this.getItems({ page: this.page, needle: this.needle })\r\n .then((response) => {\r\n if (response.TotalPageCount >= this.page) {\r\n this.items = [...this.items, ...response.List];\r\n this.page++;\r\n } else {\r\n this.limitHit = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.fetchingItems = false;\r\n });\r\n }\r\n }\r\n\r\n doSelectItem(item: any) {\r\n this.selectItem({ item: item });\r\n }\r\n\r\n resetListAndSearch() {\r\n this.items = [];\r\n this.page = 1;\r\n this.limitHit = false;\r\n this.doGetItems();\r\n }\r\n\r\n filterItems() {\r\n if (this.frontendFiltering) {\r\n return this.needle;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n}\r\n","import angular from \"angular\";\r\nimport {\r\n CcqFileUploadComponent,\r\n CcqFileUploadController,\r\n} from \"./filesfromccqbase/Components/fileupload/fileupload\";\r\nimport {\r\n CcqGlobalSearchBarComponent,\r\n CcqGlobalSearchBarController,\r\n} from \"./filesfromccqbase/Components/globalsearchbar/globalsearchbar\";\r\nimport {\r\n LazyLoadListComponent,\r\n LazyLoadListController,\r\n} from \"./filesfromccqbase/Components/lazyloadlist/lazyloadlist\";\r\n\r\nexport function registerCCQBaseComponents() {\r\n angular\r\n .module(\"ccqapp\")\r\n .controller(\"FileUploadController\", CcqFileUploadController)\r\n .component(\"fileupload\", new CcqFileUploadComponent())\r\n .controller(\"GlobalSearchBarController\", CcqGlobalSearchBarController)\r\n .component(\"globalSearchBar\", new CcqGlobalSearchBarComponent())\r\n .controller(\"LazyLoadListController\", LazyLoadListController)\r\n .component(\"lazyLoadList\", new LazyLoadListComponent());\r\n}\r\n","import { LenderService } from \"@js/services/LenderService\";\r\n\r\nexport class AssistanceSliderComponentController {\r\n\r\n public assistanceSlider: boolean = false;\r\n public accordionShow: boolean[] = [];\r\n public applicationName: string;\r\n public totalLenderCount: number;\r\n\r\n constructor(public $location, private lenderService: LenderService) {\r\n this.lenderService.getTotalLenders().then((result: number) => {\r\n this.totalLenderCount = result;\r\n });\r\n }\r\n\r\n public toggleAccordion(id: number) {\r\n if (!this.accordionShow[id]) {\r\n this.accordionShow[id] = true;\r\n } else {\r\n this.accordionShow[id] = !this.accordionShow[id];\r\n }\r\n\r\n }\r\n\r\n public getApplicationName() {\r\n let lsd = sessionStorage.getItem('applicationName');\r\n if (lsd != null) {\r\n this.applicationName = lsd;\r\n } else {\r\n this.applicationName = 'Brickflow';\r\n }\r\n }\r\n\r\n}\r\n","export class BreadcrumbTabsComponentController {\r\n\r\n public links: string[] = [];\r\n\r\n constructor(private $window: ng.IWindowService) {\r\n }\r\n\r\n\r\n}\r\n","export class CarouselComponentController {\r\n\r\n public carouselData: string[] = [];\r\n public totalSteps: number=0;\r\n public carouselStep: number = 0;\r\n public autoCycle: boolean = true;\r\n\r\n constructor(public $interval) { }\r\n\r\n $postLink() {\r\n this.totalSteps = this.carouselData.length - 1;\r\n this.$interval(() => {\r\n if (this.autoCycle) {\r\n this.carouselNext();\r\n }\r\n }, 7000);\r\n }\r\n\r\n $doCheck() {\r\n if (this.carouselStep > this.totalSteps) {\r\n this.carouselStep = 0;\r\n }\r\n if (this.carouselStep < 0) {\r\n this.carouselStep = this.totalSteps;\r\n }\r\n }\r\n\r\n public carouselNext() {\r\n //Just before stepping, make the opacity of the text 0\r\n this.carouselStep++;\r\n }\r\n\r\n public carouselBack() {\r\n this.carouselStep--;\r\n }\r\n\r\n}\r\n\r\n","export class ModalPopupComponentController {\r\n\r\n public toggleModal: boolean = false;\r\n public prevToggleModalVal: boolean = false;\r\n public loading: boolean = false;\r\n public formSectionNames: [] = [];\r\n public step: number;\r\n\r\n // Configures whether the modal closes when the user clicks outside of the modal - by default (true/undefined) the modal will close\r\n public closeOnBlur: boolean = true;\r\n\r\n constructor(private $element: ng.IAugmentedJQuery, private $scope: ng.IScope) {\r\n }\r\n\r\n sum(a: number, b: number): number {\r\n return a + b;\r\n }\r\n\r\n}\r\n","\r\n//JS Not in use, when used as a component as the code is currently, the ng-model is not updating before the ng-change\r\n\r\nexport class PaymentToggleController {\r\n\r\n constructor(private $rootScope, private $element) { }\r\n\r\n}\r\n","export class RegInfoPanelController {\r\n public heading: string;\r\n public subtext: string;\r\n public mainheading: string;\r\n public subheading: string;\r\n public logoUrl: string = '';\r\n public isWhiteLabelled: boolean = false;\r\n\r\n constructor(private $rootScope, private $element) {\r\n }\r\n\r\n public getLogo() {\r\n if (sessionStorage.getItem('companyLogoUrl') != null) {\r\n this.isWhiteLabelled = true;\r\n return sessionStorage.getItem('companyLogoUrl');\r\n } else {\r\n this.isWhiteLabelled = false;\r\n return '../../img/BrickFlow_Logo_RGB_Blue_Icon.svg';\r\n }\r\n }\r\n}\r\n","\r\n\r\n export class SpinnerController {\r\n public minValue: number;\r\n public maxValue: number;\r\n public value: number;\r\n \r\n constructor(private $rootScope, private $element) { }\r\n\r\n public next() {\r\n if (this.value == this.maxValue) {\r\n return;\r\n }\r\n this.value++;\r\n }\r\n\r\n public prev() {\r\n if (this.value == this.minValue) {\r\n return;\r\n }\r\n this.value--;\r\n }\r\n }\r\n","\r\n\r\n export class TourPopupComponentController {\r\n\r\n public tourOrder: number;\r\n public tourState: any;\r\n public stepEnabled: boolean = true;\r\n public repeatStop: number;\r\n\r\n constructor(private $rootScope, private $element) { }\r\n\r\n $postLink() {\r\n // Update the total steps by adding ourself.\r\n this.tourState.tourTotalSteps = this.tourState.tourTotalSteps + 1;\r\n }\r\n\r\n $onDestroy() {\r\n // Update the total steps by removing ourself.\r\n this.tourState.tourTotalSteps = this.tourState.tourTotalSteps - 1;\r\n }\r\n\r\n $doCheck() {\r\n\r\n // See if we're the next step...\r\n if ((this.tourState.tourStep == this.tourOrder) && (this.tourOrder != this.$rootScope.repeatStop)) {\r\n\r\n if (!this.stepEnabled && this.stepEnabled !== undefined) {\r\n // If we're disabled, we want to move to the next step immediately.\r\n this.next();\r\n } else {\r\n if (this.tourOrder != 1) {\r\n let element = document.getElementById('tourStep' + this.tourState.tourStep);\r\n if (element) {\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n }\r\n }\r\n\r\n //suppress repeat calls for this step\r\n this.$rootScope.repeatStop = this.tourOrder;\r\n }\r\n }\r\n\r\n public next() {\r\n this.$rootScope.$broadcast('nextTour');\r\n }\r\n\r\n public back() {\r\n this.$rootScope.$broadcast('backTour');\r\n }\r\n\r\n public skip() {\r\n this.$rootScope.$broadcast('skipTour');\r\n }\r\n\r\n }\r\n\r\n","export class VerticalProgressBarController {\r\n public nodes: { step: number, label: string, active: boolean, complete: boolean }[];\r\n public currentStep: number;\r\n \r\n constructor(private $rootScope, private $element) {}\r\n}\r\n","import { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { LocationEnum } from \"@js/models/enum/LocationEnum.cs.d\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\n\r\nexport class CriteriaController<\r\n T extends BridgingDealDTO | CommercialDealDTO | DevelopmentFinanceDealDTO,\r\n> {\r\n dealDto: T;\r\n dataLoading: boolean = false;\r\n\r\n //Postcode properties\r\n showPostcodeErrorMessage: boolean = false;\r\n postcodeErrorMsg: string;\r\n previouslySelectedLocation: LocationEnum;\r\n\r\n static $inject = [\"DealService\"];\r\n\r\n constructor(public dealService: DealService) {}\r\n\r\n getRegionByPostcode() {\r\n if (\r\n this.dealDto.PostcodeSearchString &&\r\n this.dealDto.PostcodeSearchString.replace(\" \", \"\").length >= 2\r\n ) {\r\n if (\r\n this.dealService.isValidPostcodeString(\r\n this.dealDto.PostcodeSearchString,\r\n )\r\n ) {\r\n this.dataLoading = true;\r\n this.dealService\r\n .getRegionByPostcode(this.dealDto.PostcodeSearchString)\r\n .then((response) => {\r\n if (response.Location != null) {\r\n this.dealDto.Locations = response.Location;\r\n this.showPostcodeErrorMessage = false;\r\n } else {\r\n this.postcodeErrorMsg = response.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n } else {\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n }\r\n\r\n onHasPostcodeChange() {\r\n if (!this.dealDto.hasPostcode) {\r\n this.showPostcodeErrorMessage = false;\r\n this.dealDto.PostcodeSearchString = null;\r\n this.dealDto.Locations = this.previouslySelectedLocation;\r\n } else {\r\n this.previouslySelectedLocation = this.dealDto.Locations;\r\n this.dealDto.Locations = null;\r\n }\r\n }\r\n}\r\n","export const enum CaseStatusEnum {\r\n Search = 999,\r\n NewCase = 0,\r\n InProgress = 1,\r\n UnderReview = 2,\r\n ReadyToSubmit = 3,\r\n SubmittedToLendersForHoT = 4,\r\n ReadyToReSubmit = 12,\r\n Applied = 5,\r\n CreditApproved = 10,\r\n WithProfessionals = 11,\r\n Completed = 6,\r\n Dormant = 7,\r\n SubmittedToLendersPendingReview = 9,\r\n SentToPackager = 13,\r\n\r\n}\r\n","export const enum DealSourceTypeEnum {\r\n Unknown = 0,\r\n Application = 1,\r\n WhitelabelApplication = 2,\r\n IFrameEnterprise = 3,\r\n IFrameUniqueLink = 4,\r\n UniqueLink = 5,\r\n Enterprise = 6,\r\n Api = 7,\r\n WidgetUniqueLink = 8,\r\n WidgetEnterprise = 9,\r\n}\r\n","export const enum LandOrPropertyEnum {\r\n None = 0,\r\n Land = 1,\r\n Property = 2,\r\n}\r\n","export const enum LinkTypeEnum {\r\n Development = 1,\r\n Bridging = 2,\r\n AllLoans = 3,\r\n Commercial = 4,\r\n}\r\n","export const enum LoanCompletionTypeEnum {\r\n AsSoonAsPossible = 1,\r\n JustCheckingMyOptions = 2,\r\n WithinNextFewWeeks = 3,\r\n WithinNext2to3Months = 4,\r\n}\r\n","export const enum LocationEnum {\r\n None = 0,\r\n London = 1,\r\n NorthWest = 2,\r\n Midlands = 4,\r\n EastofEngland = 8,\r\n SouthEast = 16,\r\n SouthWest = 32,\r\n NorthEast = 64,\r\n Wales = 128,\r\n Scotland = 256,\r\n NorthernIreland = 512,\r\n ChannelIsland = 1024,\r\n Any,\r\n}\r\n","export const enum OriginatorRoleTypeEnum {\r\n Unknown = 0,\r\n Admin = 1,\r\n Broker = 2,\r\n Lender = 3,\r\n Borrower = 4,\r\n}\r\n","export const enum OwnOrPurchaseEnum {\r\n Own = 1,\r\n Purchasing = 2,\r\n}\r\n","export const enum PlanningPermissionTypeEnum {\r\n None = 0,\r\n NoPlanning = 1,\r\n DetailedPlanning = 2,\r\n OutlinePlanning = 3,\r\n NoPlanningRequired = 4,\r\n PermittedDevelopment = 5,\r\n NoOutlinePlanning = 6,\r\n VaryPlanningonExistingBuilding = 7,\r\n NewPlanningOnAnotherPartOfSite = 8,\r\n VaryPlanningOnExistingAndNewPlanningOnAnotherPartOfSite = 9,\r\n NewPlanningApplicationOrDemolishExistingBuilding = 10,\r\n}\r\n","export const enum ProductFamilyEnum {\r\n None = 0,\r\n Development = 1,\r\n Bridging = 2,\r\n Commercial = 3,\r\n}\r\n","export const enum ProductTypeEnum {\r\n None = 0,\r\n Development = 1,\r\n BridgingPreconstruction = 2,\r\n BridgingPurchaseOrRefinance = 4,\r\n BridgingRefurb = 8,\r\n BridgingDeveloperExit = 16,\r\n CommercialInvestment = 32,\r\n CommercialOwnerOccupied = 64,\r\n /** IMPORTANT NOTE JSAny changes to the above enums (including additions) must be reflected below.Issue with the MadsKristensen.TypeScriptDefinitionGenerator being used since the generated file does not calculate the composite value,and will just increment 1 to the previous item in the list. Therefore the below commented code would not work.Bridging = BridgingPreconstruction | BridgingPurchaseOrRefinance | BridgingRefurb | BridgingDeveloperExitCommercialAll = CommercialInvestment | CommercialOwnerOccupied */\r\n Bridging = 30,\r\n CommercialAll = 96,\r\n}\r\n","export const enum PropertyTypeEnum {\r\n None = 0,\r\n Residential = 1,\r\n MixedUse = 2,\r\n Hotel = 4,\r\n Leisure = 8,\r\n CareRetirement = 16,\r\n Medical = 32,\r\n Office = 64,\r\n Retail = 128,\r\n LightIndustrial = 256,\r\n Student = 512,\r\n HeavyIndustrial = 1024,\r\n HMO = 2048,\r\n LandWithoutPlanning = 4096,\r\n Education = 8192,\r\n Retirement = 16384,\r\n AllCommercialMixedUse = 32768,\r\n MultiUnitFreeholdBlock = 65536,\r\n}\r\n","export const enum RefurbishmentLevelEnum {\r\n None = 0,\r\n Light = 1,\r\n Medium = 2,\r\n Heavy = 3,\r\n}\r\n","export const enum YesNoMaybe {\r\n NotfilledIn = 0,\r\n Yes = 1,\r\n No = 2,\r\n Maybe = 3,\r\n}\r\n","export const enum UserRoleEnum {\r\n None = 0,\r\n Admin = 1,\r\n Broker = 2,\r\n Lender = 3,\r\n Client = 4,\r\n Introducer = 5,\r\n}\r\n","import { CriteriaController } from \"@js/controllers/CriteriaController\";\r\nimport { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { SaveBridgingSearchRequest } from \"@js/DTO/Messages/Deal/SaveBridgingSearchMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { OrganisationLinkDTO } from \"@js/DTO/OrgnisationLinkDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { DealSourceTypeEnum } from \"@js/models/enum/DealSourceTypeEnum.cs.d\";\r\nimport { LandOrPropertyEnum } from \"@js/models/enum/LandOrPropertyEnum.cs.d\";\r\nimport { LinkTypeEnum } from \"@js/models/enum/LinkTypeEnum.cs.d\";\r\nimport { LoanCompletionTypeEnum } from \"@js/models/enum/LoanCompletionTypeEnum.cs.d\";\r\nimport { LocationEnum } from \"@js/models/enum/LocationEnum.cs.d\";\r\nimport { OriginatorRoleTypeEnum } from \"@js/models/enum/OriginatorRoleTypeEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { PlanningPermissionTypeEnum } from \"@js/models/enum/PlanningPermissionTypeEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { RefurbishmentLevelEnum } from \"@js/models/enum/RefurbishmentLevelEnum.cs.d\";\r\nimport { YesNoMaybe } from \"@js/models/enum/YesNoMaybeEnum.cs.d\";\r\nimport { SaveSearchReturnUniqueRefResponse } from \"@js/models/SaveSearchReturnUniqueRef.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { ClientService } from \"@js/services/ClientService\";\r\nimport { BridgingDealService } from \"@js/services/Deal/BridgingDealService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { SharedCriteriaService } from \"@js/services/Deal/SharedCriteriaService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { EnterpriseService } from \"@js/services/EnterpriseService\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\nexport class BridgingCriteriaController extends CriteriaController {\r\n isSaving: boolean = false;\r\n hasError: boolean = false;\r\n\r\n productType: ProductTypeEnum;\r\n\r\n dealDto: BridgingDealDTO;\r\n tempDealDto: BridgingDealDTO;\r\n snapshotDealDto: BridgingDealDTO;\r\n classUses: {} = {};\r\n yesNoOptions = [];\r\n siteTypeOptions = [];\r\n propertyTypeOptions = [];\r\n showResidual: boolean = false;\r\n showSummary: boolean = false;\r\n showKeyMatrix: boolean = false;\r\n isLoggedInUser: boolean = false;\r\n isSearchStarted: boolean = false;\r\n totalLenders: number;\r\n buildingConditionOptions = [];\r\n buildStageOptions = [];\r\n locationOptions = [];\r\n loanCompletionTypeOptions = [];\r\n refurbishmentLevelOptions = [];\r\n planningOptions = [];\r\n multiPartForm1: ng.IFormController;\r\n multiPartForm2: ng.IFormController;\r\n multiPartForm3: ng.IFormController;\r\n propertyForm: ng.IFormController;\r\n\r\n isBorrower: boolean = false;\r\n organisation: OrganisationDTO;\r\n moveContactBrokerBtnInMiddle: boolean = false;\r\n user: ApplicationUserDTO = null;\r\n initialRegistrationClient: ClientDTO;\r\n orgCode: string;\r\n\r\n //Share a search modal\r\n showShareSearchtoClientModal: boolean = false;\r\n isResultScreen: boolean = false;\r\n existingUsers: UserSimpleDTO[];\r\n existingborrower: boolean;\r\n shareDealDto: ShareDealDTO = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n showClientDetails: boolean = false;\r\n profitBeforeCosts: number = 0;\r\n ROCE: number = 0;\r\n purchasePrice: number = 0;\r\n purchaseCosts: number = 0;\r\n GDV: number = 0;\r\n isSubmitted: boolean = false;\r\n showAutofill: boolean = false;\r\n error: string;\r\n\r\n //share search modal\r\n isBridging: boolean = true;\r\n\r\n guidanceCheckbox: boolean = true;\r\n maxPurchaseDate: Date = new Date();\r\n minPurchaseDate: Date = new Date(\"Jan 01 1900\");\r\n minCompletionDate: Date;\r\n hasPurchasecostChanged: boolean = false;\r\n hasLandcostChanged: boolean = false;\r\n userRole: string = \"\";\r\n userDetails: string = null;\r\n projectName: string = null;\r\n clientId: string = null;\r\n //dataLoading: boolean = false;\r\n\r\n isFamilyInResidence: boolean = false;\r\n ownOrPurchase: boolean = false;\r\n landOrProperty: boolean = false;\r\n\r\n headingAdjustment: string;\r\n\r\n //Enterprise\r\n organisationLink: OrganisationLinkDTO;\r\n noPermissionErrorMsg: string = \"\";\r\n\r\n contingencyAmount: number = null;\r\n\r\n //Postcode properties\r\n //showPostcodeErrorMessage: boolean = false;\r\n // postcodeErrorMsg: string;\r\n //previouslySelectedLocation: LocationEnum;\r\n\r\n isAdmin: boolean = false;\r\n isBroker: boolean = false;\r\n isLender: boolean = false;\r\n\r\n isUniqueLink: boolean = false;\r\n\r\n //enterprise widget journey\r\n isMobileView: boolean = false;\r\n showHelpModal: boolean = false;\r\n loanInfoText: string;\r\n progressAmount: string = \"50%\";\r\n progressSection: number = 1;\r\n totalSections: number = 2;\r\n enterpriseLinkLogo: string;\r\n isWidget: boolean = false;\r\n\r\n //This propert is used to show only postcode ot location field on critera for mobile view\r\n isCriteria: boolean = true;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"DevelopmentInputService\",\r\n \"$location\",\r\n \"$q\",\r\n \"CaseService\",\r\n \"UserService\",\r\n \"RoleService\",\r\n \"OrganisationService\",\r\n \"SelectListService\",\r\n \"LenderService\",\r\n \"BridgingDealService\",\r\n \"ClientService\",\r\n \"ProductService\",\r\n \"AuthService\",\r\n \"OrganisationLinkService\",\r\n \"EventLogService\",\r\n \"SharedCriteriaService\",\r\n \"DealService\",\r\n \"EnterpriseService\"\r\n ].concat(CriteriaController.$inject);\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private $location: ng.ILocationService,\r\n protected $q: ng.IQService,\r\n private caseService: CaseService,\r\n private userService: UserService,\r\n private roleService: RoleService,\r\n private organisationService: OrganisationService,\r\n private selectListService: SelectListService,\r\n private lenderService: LenderService,\r\n private bridgingDealService: BridgingDealService,\r\n private clientService: ClientService,\r\n private productService: ProductService,\r\n private $auth: AuthService,\r\n private organisationLinkService: OrganisationLinkService,\r\n private eventLogService: EventLogService,\r\n private sharedCriteriaService: SharedCriteriaService,\r\n dealService: DealService,\r\n private enterpriseService: EnterpriseService\r\n ) {\r\n super(dealService);\r\n try {\r\n\r\n if (this.$routeParams.context == 'widget' && window.self != window.top) {\r\n this.isWidget = true;\r\n } else {\r\n if (window.innerWidth <= 480)\r\n this.isMobileView = true\r\n }\r\n\r\n\r\n if (this.dealDto == null) {\r\n this.dealDto = {} as BridgingDealDTO;\r\n }\r\n\r\n //Enteprise journey code\r\n if (!$cookies.get(\"access_token\") &&\r\n (this.$location.path().startsWith(\"/e/bridgingcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ) {\r\n this.isBorrower = true;\r\n\r\n if (this.$location.path().startsWith(\"/e/bridgingcriteria\")) {\r\n var imgs = document.getElementsByTagName(\"img\");\r\n this.enterpriseLinkLogo = imgs[0].src;\r\n this.sharedCriteriaService.storeEnterpriseLinkType(LinkTypeEnum.Bridging.toString());\r\n }\r\n\r\n if (this.isWidget) {\r\n // document.getElementById(\"footer\").style.display = \"none\";\r\n this.organisationService.sendDataToParent(\"height\", \"745px\");\r\n }\r\n\r\n if (!this.$routeParams.DealUniqueRef) {\r\n if (window.self == window.top) {\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n sessionStorage.setItem(\"userRole\", UserRoleEnum.Client.toString());\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.organisationService.sendDataToParent(\"userRole\", UserRoleEnum.Client.toString());\r\n }\r\n\r\n this.logEventWithoutDealData();\r\n\r\n }\r\n\r\n\r\n this.organisationService\r\n .getOrgByUrlIfOrgHasEnterpriseSearchPermission(\r\n this.orgCode,\r\n ProductFamilyEnum.Bridging,\r\n this.$routeParams.linkId,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.organisation = response;\r\n this.orgCode = response.OrganisationCode;\r\n\r\n if (this.$routeParams.linkId) {\r\n if (this.$location.path().startsWith(\"/e/bridgingcriteria\")) {\r\n this.organisationLinkService\r\n .getOrganisationLinkLogoByLinkIdAndLogPageLoadEvent(\r\n this.$routeParams.linkId\r\n )\r\n .then((logoUrl) => {\r\n if (logoUrl) this.enterpriseLinkLogo = imgs[0].src = logoUrl;\r\n });\r\n }\r\n }\r\n\r\n } else {\r\n this.logEvent(\"BRIDGINGCRITERIA-NO-PERMISSION-TO-SEARCH\");\r\n this.noPermissionErrorMsg =\r\n \"We are unable to compare loans right now. Please contact your broker.\";\r\n }\r\n })\r\n .finally(() => { });\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.isAdmin = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (this.isBroker) {\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.gotoDashboard();\r\n }\r\n }\r\n }\r\n if (\r\n result.filter((x) => x.toLowerCase() == \"lender\").length > 0 &&\r\n !this.isAdmin\r\n ) {\r\n this.isLender = true;\r\n }\r\n\r\n if (\r\n result.filter((x) => x.toLowerCase() == \"client\").length > 0 &&\r\n !this.isAdmin\r\n ) {\r\n this.isBorrower = true;\r\n }\r\n }).finally(() => {\r\n if (this.$auth.getHasValidStatustoShowShareSearchModal()) {\r\n if (sessionStorage.getItem(\"skip\")) {\r\n //This will hide's a share search to client modal\r\n this.showShareSearchtoClientModal = false;\r\n } else {\r\n //getting a previously entered DealName and Client data \r\n if (this.dealService.getShowSearchNameAndUserSelectionModal()) {\r\n this.showShareSearchtoClientModal = true;\r\n this.getUsersBelongToBrokerOrAdmin();\r\n } else {\r\n this.shareDealDto.ClientDto = this.dealService.getClient();\r\n this.shareDealDto.DealName = this.dealService.getDealName();\r\n }\r\n }\r\n }\r\n this.getOriginatorInfoForUser();\r\n });\r\n } else {\r\n if (!this.$routeParams.DealUniqueRef) {\r\n if (window.self == window.top) {\r\n this.clientId = sessionStorage.getItem(\"clientId\");\r\n } else {\r\n Promise.all([\r\n this.organisationService.getData(\"clientId\").then((clientId) => {\r\n if (clientId) {\r\n this.clientId = clientId;\r\n }\r\n }),\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n if (this.$routeParams.DealUniqueRef && this.$routeParams.DealUniqueRef != '0') {\r\n this.dataLoading = true;\r\n this.dealService\r\n .fetchByUniqueRef(this.$routeParams.DealUniqueRef)\r\n .then((response) => {\r\n this.postRetrieveProcessing(response);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n else if (this.$routeParams.SearchId > 0) {\r\n this.dataLoading = true;\r\n this.bridgingDealService\r\n .fetch(this.$routeParams.SearchId)\r\n .then((response) => {\r\n this.postRetrieveProcessing(response);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.bridgingTypeChanged(ProductTypeEnum.BridgingPurchaseOrRefinance);\r\n }\r\n\r\n // if (window.self == window.top) {\r\n // this.updateGuidanceState();\r\n\r\n // $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n // this.updateGuidanceState();\r\n // });\r\n // }\r\n\r\n this.caseService.updateTubeMap(CaseStatusEnum.Search);\r\n this.buildStageOptions = this.selectListService.GetBuildStageOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.loanCompletionTypeOptions = this.selectListService.GetLoanCompletionOptions();\r\n this.refurbishmentLevelOptions = this.selectListService.GetRefurbishmentLevelOptions();\r\n this.planningOptions = this.selectListService.GetPlanningPermissionTypesOfBridging();\r\n } catch (e) {\r\n console.error(\"Error: \", e);\r\n }\r\n }\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n getBuildCosts() {\r\n var buildCosts =\r\n +this.dealDto.EstimatedSpending + +this.dealDto.PurchasePrice;\r\n if (isNaN(buildCosts) || buildCosts == undefined) {\r\n buildCosts = 0;\r\n }\r\n return buildCosts;\r\n }\r\n\r\n getProfitBeforeCosts() {\r\n this.profitBeforeCosts =\r\n this.dealDto.GDV -\r\n this.dealDto.PurchasePrice -\r\n this.dealDto.EstimatedSpending -\r\n this.dealDto.PurchaseCosts;\r\n if (isNaN(this.profitBeforeCosts)) {\r\n this.profitBeforeCosts = 0;\r\n }\r\n return this.profitBeforeCosts;\r\n }\r\n\r\n /* // updateGuidanceState() {\r\n // this.guidanceCheckbox =\r\n // this.$cookies.get(\"guidance\") === \"on\" ||\r\n // this.$cookies.get(\"guidance\") === undefined;\r\n // // Update tour settings\r\n // }\r\n \r\n // getGuidanceSwitchState() {\r\n // if (!this.$cookies.get(\"guidance\")) {\r\n // this.guidanceCheckbox = true;\r\n // } else if (this.$cookies.get(\"guidance\") === \"on\") {\r\n // this.guidanceCheckbox = true;\r\n // } else if (this.$cookies.get(\"guidance\") === \"off\") {\r\n // this.guidanceCheckbox = false;\r\n // } else {\r\n // this.guidanceCheckbox = true;\r\n // }\r\n // return this.guidanceCheckbox;\r\n // }\r\n \r\n // recordGuidanceCookie() {\r\n // var guidanceSwitchState: string;\r\n // var expiryDate = new Date();\r\n // expiryDate.setDate(expiryDate.getDate() + 365);\r\n // if (this.guidanceCheckbox == true) {\r\n // guidanceSwitchState = \"on\";\r\n // } else {\r\n // guidanceSwitchState = \"off\";\r\n // }\r\n // this.$cookies.put(\"guidance\", guidanceSwitchState, { expires: expiryDate });\r\n // this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n // }\r\n \r\n //getROCE() {\r\n // this.ROCE = (this.dealDto.GDV / this.totalCosts) * 100;\r\n // if (isNaN(this.ROCE)) {\r\n // this.ROCE = 0;\r\n // }\r\n // return this.ROCE.toFixed(2);\r\n //}\r\n \r\n //getPurchasePrice() {\r\n // this.purchasePrice = this.dealDto.PurchasePrice;\r\n // if (isNaN(this.purchasePrice)) {\r\n // this.purchasePrice = 0;\r\n // }\r\n // return this.purchasePrice;\r\n //}\r\n \r\n //getPurchaseCosts() {\r\n // this.purchaseCosts = this.dealDto.PurchaseCosts;\r\n // if (isNaN(this.purchaseCosts)) {\r\n // this.purchaseCosts = 0;\r\n // }\r\n // return this.purchaseCosts;\r\n //}\r\n \r\n //getGDV() {\r\n // if (isNaN(this.dealDto.GDV) || this.dealDto.GDV == undefined) {\r\n // this.dealDto.GDV = 0;\r\n // } else {\r\n // this.dealDto.GDV = this.dealDto.GDV;\r\n // }\r\n // return this.dealDto.GDV;\r\n //}\r\n */\r\n goToSearchResults() {\r\n this.hasError = false;\r\n this.error = null;\r\n this.isSubmitted = true;\r\n this.enterpriseService.setProductFamily(this.dealDto.ProductFamily);\r\n // If enterprise\r\n this.isSearchStarted = true;\r\n if (\r\n !this.isLoggedInUser &&\r\n this.isBorrower &&\r\n (this.$location.path().startsWith(\"/e/bridgingcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ) {\r\n this.saveCriteriaReturnUniqueRef().then((response) => {\r\n if (!this.hasError) {\r\n this.sharedCriteriaService.setIsDataLoading(false);\r\n var response = response as SaveSearchReturnUniqueRefResponse;\r\n if (window.self == window.top)\r\n sessionStorage.removeItem(\"productType\");\r\n\r\n if (response.HasDealClient) {\r\n //The purpose of the route check is to ensure navigation to the correct route when the user lands on the criteria page by clicking 'Change Search' in the side panel.\r\n if (sessionStorage.getItem('previousRoute') == 'referredsearchdeal') {\r\n this.$location.path(`/referredsearchdeal/${response.DealClientUniqueRef}/false`);\r\n sessionStorage.removeItem('previousRoute');\r\n } else {\r\n this.$location.path(`/e/bridgingresults/${response.DealUniqueRef}`);\r\n }\r\n } else {\r\n var leadCaptureUrl = `/e/enterpriseleadcapture/${response.DealUniqueRef}`;\r\n leadCaptureUrl = this.isWidget ? `${leadCaptureUrl}/widget` : leadCaptureUrl;\r\n\r\n this.$location.path(leadCaptureUrl);\r\n }\r\n }\r\n });\r\n } else {\r\n this.saveCriteriaReturnId().then((response) => {\r\n if (!this.hasError) {\r\n var dealId = response as number;\r\n if (window.self == window.top)\r\n sessionStorage.removeItem(\"productType\");\r\n\r\n if (this.isAdmin || this.isBroker) this.dealService.setShowSearchNameAndUserSelectionModal(true);\r\n this.$location.path(\"/bridgingresults/\" + dealId);\r\n }\r\n });\r\n }\r\n }\r\n\r\n getTubeMapValue() {\r\n return this.caseService.getTubeMap();\r\n }\r\n\r\n getNumberOfLenders() {\r\n if (this.dealDto && this.dealDto.ProductType) {\r\n //TODO Bridging JS: replacing ProductTypeEnum.BridgingPreconstruction with this.productType assuming that preconstruction products will not apply to all product types.\r\n this.lenderService\r\n .getTotalLenders(ProductFamilyEnum.Bridging)\r\n .then((response: number) => {\r\n this.totalLenders = Math.floor(response);\r\n });\r\n } else {\r\n //TODO what should it default to?\r\n }\r\n }\r\n\r\n go(path: string): void {\r\n this.$location.path(path);\r\n }\r\n\r\n saveCriteriaReturnId(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.dataSetUpForSave();\r\n\r\n var clientDto = null;\r\n\r\n var request: SaveBridgingSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.isLoggedInUser ? \"\" : this.orgCode,\r\n ClientId:\r\n !this.isLoggedInUser &&\r\n this.clientId &&\r\n !this.user &&\r\n (this.$location.path().startsWith(\"/e/bridgingcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ? Number(this.clientId)\r\n : 0,\r\n EnterpriseClientDto: clientDto,\r\n };\r\n\r\n this.bridgingDealService\r\n .saveBridgingSearchReturnsId(request)\r\n .then((response) => {\r\n this.dealDto.Id = response;\r\n this.isSaving = false;\r\n\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n if (response.status === 500) {\r\n this.error = response.data.message;\r\n } else {\r\n this.error = 'Something went wrong while searching for loans. Please try again.';\r\n }\r\n this.hasError = true;\r\n this.isSearchStarted = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n saveCriteriaReturnUniqueRef(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.sharedCriteriaService.setIsDataLoading(true);\r\n this.dataSetUpForSave();\r\n\r\n var clientDto = null;\r\n\r\n var request: SaveBridgingSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.isLoggedInUser ? \"\" : this.orgCode,\r\n ClientId: !this.isWidget &&\r\n !this.isLoggedInUser &&\r\n this.clientId &&\r\n !this.user &&\r\n (this.$location.path().startsWith(\"/e/bridgingcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ? Number(this.clientId)\r\n : 0,\r\n EnterpriseClientDto: clientDto,\r\n };\r\n\r\n this.bridgingDealService\r\n .saveBridgingSearchReturnsUniqueRef(request)\r\n .then((response) => {\r\n this.dealDto.UniqueRef = response.DealUniqueRef;\r\n this.isSaving = false;\r\n\r\n defer.resolve(response as SaveSearchReturnUniqueRefResponse);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n this.sharedCriteriaService.setIsDataLoading(false);\r\n if (response.status === 500) {\r\n this.error = response.data.message;\r\n } else {\r\n this.error = 'Something went wrong while searching for loans. Please try again.';\r\n }\r\n this.hasError = true;\r\n this.isSearchStarted = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n dataSetUpForSave() {\r\n this.sharedCriteriaService.setNewSearch(this.dealDto, this.snapshotDealDto);\r\n\r\n if (this.dealDto.Id == null) {\r\n this.dealDto.Status = CaseStatusEnum.Search;\r\n }\r\n\r\n if (\r\n this.dealDto.Name == null ||\r\n this.dealDto.Name == \"\" ||\r\n this.dealDto.Name == undefined\r\n ) {\r\n this.dealDto.Name = this.sharedCriteriaService.defaultSearchName(\r\n this.dealDto.ProductType,\r\n this.dealDto.HasIsFamilyInResidence &&\r\n (this.dealDto.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingRefurb),\r\n );\r\n }\r\n\r\n if (\r\n !this.isLoggedInUser &&\r\n (this.$location.path().startsWith(\"/e/bridgingcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\")) &&\r\n this.isBorrower\r\n ) {\r\n this.dealDto.HowManyFlats = this.dealDto.HowManyFlats\r\n ? this.dealDto.HowManyFlats\r\n : 0;\r\n this.dealDto.HowManyHouses = this.dealDto.HowManyHouses\r\n ? this.dealDto.HowManyHouses\r\n : 0;\r\n }\r\n\r\n if (!this.shareDealDto) {\r\n this.shareDealDto = {\r\n DealName: this.sharedCriteriaService.defaultSearchName(\r\n this.dealDto.ProductType,\r\n this.dealDto.HasIsFamilyInResidence &&\r\n (this.dealDto.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingRefurb),\r\n ),\r\n } as ShareDealDTO;\r\n }\r\n }\r\n\r\n getUsersBelongToBrokerOrAdmin() {\r\n this.userService\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n })\r\n .finally(() => { });\r\n }\r\n\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n this.shareDealDto =\r\n this.sharedCriteriaService.attachSelectedClientToShareDealDto(\r\n this.existingUsers,\r\n this.shareDealDto,\r\n userName,\r\n );\r\n this.showClientDetails = true;\r\n }\r\n\r\n onClickOfNext() {\r\n this.showShareSearchtoClientModal = false;\r\n if (this.$location.path().startsWith(\"/allloans\") && (this.isAdmin || this.isBroker)) {\r\n this.dealService.setShowSearchNameAndUserSelectionModal(false);\r\n this.dealService.setClient(this.shareDealDto.ClientDto);\r\n this.dealService.setDealName(this.shareDealDto.DealName);\r\n }\r\n }\r\n\r\n OnClickOfSkip() {\r\n this.showShareSearchtoClientModal = false;\r\n if (this.$location.path().startsWith(\"/allloans\") && (this.isAdmin || this.isBroker)) {\r\n this.dealService.setShowSearchNameAndUserSelectionModal(false);\r\n }\r\n }\r\n\r\n gotoDashboard() {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n goToUserDashboard() {\r\n this.gotoDashboard();\r\n }\r\n\r\n searchDisabledPrecon() {\r\n\r\n var commonFields = [\r\n this.dealDto.OwnOrPurchase,\r\n this.dealDto.Locations,\r\n this.dealDto.IsFamilyInResidence,\r\n this.dealDto.LandOrProperty,\r\n ];\r\n\r\n if (this.progressSection == 1) {\r\n this.progressAmount = \"0%\";\r\n if (this.dealDto.LandOrProperty == LandOrPropertyEnum.Property)\r\n commonFields = [...commonFields, this.dealDto.EndPropertyType];\r\n\r\n if (this.dealDto.hasPostcode && !this.dealDto.PostcodeSearchString) {\r\n return true;\r\n }\r\n\r\n if (!this.dealDto.hasPostcode && !this.dealDto.Locations) {\r\n return true;\r\n }\r\n\r\n if (this.multiPartForm1 && this.multiPartForm1.$invalid) return true;\r\n\r\n if (\r\n this.dealDto.IsFamilyInResidence == 0 ||\r\n this.dealDto.IsFamilyInResidence == YesNoMaybe.Yes\r\n )\r\n return true;\r\n\r\n if (\r\n this.dealDto.PlanningPermissionType == null ||\r\n this.dealDto.PlanningPermissionType < 1\r\n ) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (commonFields[i] == null || commonFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n this.progressAmount = \"50%\";\r\n\r\n }\r\n\r\n if (this.progressSection == 2) {\r\n\r\n this.progressAmount = \"50%\";\r\n\r\n if (!this.dealService.showBasedOnMainResidence(this.dealDto) || this.hasValidNetLoanRequiredValue()) {\r\n return true;\r\n }\r\n\r\n commonFields = [\r\n ...commonFields,\r\n this.dealDto.PurchasePrice,\r\n this.dealDto.LoanTermReq,\r\n ];\r\n\r\n\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n let commonOwnFields = [\r\n this.dealDto.OriginalPurchaseDate,\r\n this.dealDto.Currentvalue,\r\n this.dealDto.LandTotalOtherCosts\r\n ]\r\n for (let i = 0; i < commonOwnFields.length; i++) {\r\n if (commonOwnFields[i] == null) {\r\n return true;\r\n }\r\n }\r\n if (this.dealDto.LandOrProperty == LandOrPropertyEnum.Land && this.dealDto.OwnOrPurchase != OwnOrPurchaseEnum.Own) {\r\n let commonLandFields = [\r\n this.dealDto.PurchaseCosts,\r\n this.dealDto.EstimatedSpending\r\n ]\r\n for (let i = 0; i < commonLandFields.length; i++) {\r\n if (commonLandFields[i] == null) {\r\n return true;\r\n }\r\n }\r\n if (this.dealDto.IsMortgaged) {\r\n if (this.dealDto.MortgageCurrentLender == null || this.dealDto.MortgageCurrentLender == '') {\r\n return true;\r\n }\r\n }\r\n }\r\n else if (this.dealDto.OwnOrPurchase != OwnOrPurchaseEnum.Own) {\r\n let commonPropFields = [\r\n this.dealDto.EndPropertyType\r\n ]\r\n for (let i = 0; i < commonPropFields.length; i++) {\r\n if (commonPropFields[i] == null || commonPropFields[i] == '0') {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing) {\r\n let commonPurchFields = [\r\n this.dealDto.PurchaseCosts\r\n //this.dealDto.EstimatedSpending\r\n ]\r\n for (let i = 0; i < commonPurchFields.length; i++) {\r\n if (commonPurchFields[i] == null) {\r\n return true;\r\n }\r\n }\r\n if (this.dealDto.LandOrProperty == LandOrPropertyEnum.Property) {\r\n let commonPropFields = [\r\n this.dealDto.EndPropertyType\r\n ]\r\n for (let i = 0; i < commonPropFields.length; i++) {\r\n if (commonPropFields[i] == null || commonPropFields[i] == '0') {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (commonFields[i] == null || commonFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n if (this.multiPartForm1 && this.multiPartForm1.$invalid) return true;\r\n\r\n this.progressAmount = \"100%\";\r\n }\r\n\r\n\r\n return false;\r\n }\r\n\r\n\r\n\r\n searchDisabledPurchaseOrRefinance() {\r\n this.progressAmount = \"50%\";\r\n\r\n let commonFields = [\r\n this.dealDto.OwnOrPurchase,\r\n this.dealDto.Locations,\r\n this.dealDto.IsFamilyInResidence,\r\n this.dealDto.LandOrProperty,\r\n this.dealDto.EndPropertyType,\r\n ];\r\n\r\n if (this.progressSection == 1) {\r\n this.progressAmount = \"0%\";\r\n\r\n if (this.dealDto.hasPostcode && !this.dealDto.PostcodeSearchString) {\r\n return true;\r\n }\r\n\r\n if (!this.dealDto.hasPostcode && !this.dealDto.Locations) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (commonFields[i] == null || commonFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n if (this.multiPartForm1 && this.multiPartForm1.$invalid) return true;\r\n\r\n this.progressAmount = \"50%\";\r\n\r\n }\r\n\r\n if (this.progressSection == 2) {\r\n this.progressAmount = \"50%\";\r\n if (!this.dealService.showBasedOnMainResidence(this.dealDto) || this.hasValidNetLoanRequiredValue()) {\r\n return true;\r\n }\r\n\r\n commonFields = [\r\n ...commonFields,\r\n this.dealDto.PurchasePrice,\r\n this.dealDto.LoanTermReq,\r\n ];\r\n\r\n if (this.dealDto.PurchaseCosts == null) {\r\n return true;\r\n }\r\n\r\n if (this.dealDto.IsPropertyImprovementDuringLoanTerm) {\r\n let commonImprovementFields = [\r\n this.dealDto.EstimatedSpending,\r\n this.dealDto.GDV,\r\n ];\r\n for (let i = 0; i < commonImprovementFields.length; i++) {\r\n if (commonImprovementFields[i] == null) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n if (this.dealDto.IsMortgaged) {\r\n if (\r\n this.dealDto.MortgageCurrentLender == null ||\r\n this.dealDto.MortgageCurrentLender == \"\"\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!this.dealDto.MaxLoanRequired) {\r\n if (this.dealDto.NetLoanRequired == null) {\r\n return true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (commonFields[i] == null || commonFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n if (this.multiPartForm1 && this.multiPartForm1.$invalid) return true;\r\n\r\n this.progressAmount = \"100%\";\r\n }\r\n\r\n }\r\n\r\n searchDisabledBridgingDeveloperExit() {\r\n var commonFields = [\r\n this.dealDto.Locations,\r\n this.dealDto.IsFamilyInResidence,\r\n this.dealDto.EndPropertyType,\r\n this.dealDto.RefinancedUnits,\r\n ];\r\n\r\n if (this.progressSection == 1) {\r\n this.progressAmount = \"0%\";\r\n\r\n if (this.dealDto.hasPostcode && !this.dealDto.PostcodeSearchString) {\r\n return true;\r\n }\r\n\r\n if (!this.dealDto.hasPostcode && !this.dealDto.Locations) {\r\n return true;\r\n }\r\n\r\n if (this.multiPartForm1 && this.multiPartForm1.$invalid) return true;\r\n\r\n if (\r\n this.dealDto.IsFamilyInResidence == 0 ||\r\n this.dealDto.IsFamilyInResidence == YesNoMaybe.Yes\r\n )\r\n return true;\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (commonFields[i] == null || commonFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n this.progressAmount = \"50%\";\r\n\r\n }\r\n\r\n if (this.progressSection == 2) {\r\n\r\n this.progressAmount = \"50%\";\r\n\r\n\r\n if (!this.dealService.showBasedOnMainResidence(this.dealDto) || this.hasValidNetLoanRequiredValue()) {\r\n return true;\r\n }\r\n commonFields = [\r\n ...commonFields,\r\n this.dealDto.Currentvalue,\r\n this.dealDto.LoanTermReq,\r\n ];\r\n\r\n if (!this.dealDto.MaxLoanRequired) {\r\n if (this.dealDto.NetLoanRequired == null) {\r\n return true;\r\n }\r\n }\r\n\r\n if (this.multiPartForm1 && this.multiPartForm1.$invalid) return true;\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (commonFields[i] == null || commonFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n this.progressAmount = \"100%\";\r\n\r\n }\r\n\r\n\r\n return false;\r\n }\r\n\r\n searchDisabledRefurb() {\r\n this.progressAmount = \"50%\";\r\n\r\n let commonFields = [\r\n this.dealDto.OwnOrPurchase,\r\n this.dealDto.Locations,\r\n this.dealDto.IsFamilyInResidence,\r\n this.dealDto.LandOrProperty,\r\n this.dealDto.EndPropertyType, // TODO - will \"Current use of building\" be a different property to this one???\r\n this.dealDto.PurchasePrice,\r\n this.dealDto.RefurbishmentLevel,\r\n ];\r\n\r\n if (this.progressSection == 1) {\r\n this.progressAmount = \"0%\";\r\n\r\n if (this.dealDto.hasPostcode && !this.dealDto.PostcodeSearchString) {\r\n return true;\r\n }\r\n\r\n if (!this.dealDto.hasPostcode && !this.dealDto.Locations) {\r\n return true;\r\n }\r\n\r\n if (this.multiPartForm1 && this.multiPartForm1.$invalid) return true;\r\n\r\n\r\n if (this.dealDto.LandOrProperty == LandOrPropertyEnum.Land) {\r\n return true;\r\n }\r\n\r\n if (this.dealDto.PurchaseCosts == null) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (commonFields[i] == null || commonFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n this.progressAmount = \"50%\";\r\n\r\n }\r\n\r\n ////TODO current value when owned\r\n ////TODO purchase price when not owned ??? all the time?\r\n\r\n if (this.progressSection == 2) {\r\n\r\n this.progressAmount = \"50%\";\r\n\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n if (this.dealDto.Currentvalue == null) return true;\r\n if (this.dealDto.OriginalPurchaseDate == null) return true;\r\n }\r\n\r\n\r\n if (!this.dealService.showBasedOnMainResidence(this.dealDto) || this.hasValidNetLoanRequiredValue()) {\r\n return true;\r\n }\r\n\r\n commonFields = [\r\n ...commonFields,\r\n this.dealDto.BuildCosts,\r\n this.dealDto.LoanTermReq,\r\n this.dealDto.GDV,\r\n ];\r\n\r\n if (!this.dealDto.MaxLoanRequired) {\r\n if (this.dealDto.NetLoanRequired == null) {\r\n return true;\r\n }\r\n }\r\n\r\n if (this.multiPartForm1 && this.multiPartForm1.$invalid) return true;\r\n\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (commonFields[i] == null || commonFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n this.progressAmount = \"100%\";\r\n\r\n }\r\n\r\n\r\n return false;\r\n }\r\n\r\n searchDisabled() {\r\n switch (this.dealDto.ProductType) {\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n return this.searchDisabledPrecon();\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n return this.searchDisabledPurchaseOrRefinance();\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n return this.searchDisabledBridgingDeveloperExit();\r\n case ProductTypeEnum.BridgingRefurb:\r\n return this.searchDisabledRefurb();\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n dummysearch() {\r\n let date = new Date();\r\n date.setDate(date.getDate() - 1);\r\n\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n this.dealDto.HasIsFamilyInResidence = false;\r\n\r\n this.dealDto.hasPostcode =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 1\r\n ? true\r\n : false;\r\n\r\n if (this.dealDto.hasPostcode) {\r\n this.dealDto.PostcodeSearchString =\r\n this.sharedCriteriaService.getRandomPostcode();\r\n this.getRegionByPostcode();\r\n } else {\r\n this.dealDto.Locations = LocationEnum.London;\r\n }\r\n\r\n this.dealDto.OwnOrPurchase = OwnOrPurchaseEnum.Own;\r\n this.dealDto.LandOrProperty =\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingRefurb\r\n ? LandOrPropertyEnum.Property\r\n : LandOrPropertyEnum.Land;\r\n\r\n //this.getPlanningOptions();\r\n this.dealDto.PlanningPermissionType =\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction\r\n ? PlanningPermissionTypeEnum.NoPlanning\r\n : PlanningPermissionTypeEnum.None;\r\n\r\n this.dealDto.LoanTermReq = this.sharedCriteriaService.getRandomIntInclusive(\r\n 6,\r\n 18,\r\n );\r\n this.dealDto.MaxLoanRequired =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 1\r\n ? true\r\n : false;\r\n\r\n switch (this.dealDto.ProductType) {\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n this.dealDto.OriginalPurchaseDate = date;\r\n this.dealDto.LandTotalOtherCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(10000, 20000);\r\n this.dealDto.PurchasePrice =\r\n this.sharedCriteriaService.getRandomIntInclusive(5000000, 10000000);\r\n this.dealDto.Currentvalue =\r\n this.dealDto.PurchasePrice +\r\n this.sharedCriteriaService.getRandomIntInclusive(-2000000, 2000000);\r\n this.dealDto.NetLoanRequired = !this.dealDto.MaxLoanRequired\r\n ? this.dealDto.PurchasePrice +\r\n this.dealDto.PurchaseCosts +\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 4000000)\r\n : null;\r\n this.dealDto.PurchaseCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 1000000);\r\n break;\r\n\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n this.dealDto.HasLandOrProperty = true;\r\n this.onLandOrPropertyChange();\r\n this.dealDto.OriginalPurchaseDate = date;\r\n this.dealDto.LandTotalOtherCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(10000, 20000);\r\n this.dealDto.PurchasePrice =\r\n this.sharedCriteriaService.getRandomIntInclusive(5000000, 10000000);\r\n this.dealDto.Currentvalue =\r\n this.dealDto.PurchasePrice +\r\n this.sharedCriteriaService.getRandomIntInclusive(-2000000, 2000000);\r\n this.dealDto.NetLoanRequired = !this.dealDto.MaxLoanRequired\r\n ? this.dealDto.PurchasePrice +\r\n this.dealDto.PurchaseCosts +\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 4000000)\r\n : null;\r\n this.dealDto.PurchaseCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 1000000);\r\n break;\r\n\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n this.dealDto.RefinancedUnits =\r\n this.sharedCriteriaService.getRandomIntInclusive(1, 5);\r\n this.dealDto.LandOrProperty = LandOrPropertyEnum.Property;\r\n this.dealDto.Currentvalue =\r\n this.sharedCriteriaService.getRandomIntInclusive(1000000, 5000000);\r\n this.dealDto.NetLoanRequired =\r\n this.dealDto.Currentvalue +\r\n this.sharedCriteriaService.getRandomIntInclusive(-100000, 100000);\r\n break;\r\n case ProductTypeEnum.BridgingRefurb:\r\n this.dealDto.RefurbishmentLevel = RefurbishmentLevelEnum.Light;\r\n this.dealDto.BuildCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 1000000);\r\n this.dealDto.PurchasePrice =\r\n this.sharedCriteriaService.getRandomIntInclusive(5000000, 10000000);\r\n this.dealDto.OriginalPurchaseDate = date;\r\n this.dealDto.Currentvalue =\r\n this.dealDto.PurchasePrice +\r\n this.sharedCriteriaService.getRandomIntInclusive(-2000000, 2000000);\r\n this.dealDto.PurchaseCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 1000000);\r\n this.dealDto.GDV =\r\n this.dealDto.Currentvalue +\r\n this.sharedCriteriaService.getRandomIntInclusive(2000000, 4000000);\r\n this.dealDto.NetLoanRequired = !this.dealDto.MaxLoanRequired\r\n ? this.dealDto.PurchasePrice +\r\n this.dealDto.PurchaseCosts +\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 4000000)\r\n : null;\r\n }\r\n }\r\n\r\n debugSearch() {\r\n const stringJSON = JSON.stringify(this.dealDto);\r\n navigator.clipboard\r\n .writeText(stringJSON)\r\n .then()\r\n .catch((e) => console.log(e));\r\n }\r\n\r\n //Clears the previously selected existing client data on share search modal\r\n clearInputFields() {\r\n this.shareDealDto =\r\n this.sharedCriteriaService.clearExistingUserOnShareDealDto(\r\n this.shareDealDto,\r\n );\r\n this.showClientDetails = false;\r\n }\r\n\r\n // Setting the dependent data when option are changed\r\n clearSearchdata() {\r\n this.dealDto = this.bridgingDealService.clearSearchdata(this.dealDto);\r\n }\r\n\r\n isFieldEmpty(fieldName, isEnum = false) {\r\n if (this.isSubmitted && this.dealDto) {\r\n const fieldValue = this.dealDto[fieldName];\r\n if (fieldName == \"PlanningPermissionType\") {\r\n if (fieldValue == null || fieldValue < 1) {\r\n return true;\r\n }\r\n }\r\n if (fieldValue == null || (isEnum && fieldValue === \"0\")) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isFieldZero(fieldName) {\r\n if (this.isSubmitted && this.dealDto) {\r\n const fieldValue = this.dealDto[fieldName];\r\n if (fieldValue == null || fieldValue === \"0\" || fieldValue === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnOwnOrPurchaseChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnLandorPropertyChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnLandorPropertyChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnInterestServiceChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnInterestServiceChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnIsTenantedBuildingChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnIsTenantedBuildingChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnEndPropertyTypeChange() {\r\n if (\r\n this.dealDto.EndPropertyType != PropertyTypeEnum.MixedUse &&\r\n this.dealDto.EndPropertyType != PropertyTypeEnum.Residential\r\n ) {\r\n this.classUses = {};\r\n }\r\n this.dealDto = this.bridgingDealService.datasetupOnEndPropertyTypeChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnHasCompletionDateChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnHasCompletionDateChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnMaxLoanRequiredChange() {\r\n this.dealDto = this.dealService.dataSetupOnMaxLoanRequiredChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n\r\n initClassUses() {\r\n let classUses: {} = {};\r\n for (let i = 1; i >= 0; i *= 2) {\r\n if (this.dealDto.ClassUses >= i) {\r\n //number is in enum sum, add it to object\r\n if (this.dealDto.ClassUses & i) {\r\n classUses[i] = true;\r\n }\r\n } else {\r\n this.classUses = classUses;\r\n\r\n //watch and update classuses\r\n this.$scope.$watchCollection(\"ctrl.classUses\", (newVal: {}) => {\r\n let valuesList = Object.keys(newVal);\r\n let total: number = 0;\r\n //tot up all the numeric keys (class use enums)\r\n valuesList.forEach((v, i) => {\r\n let keyToNum = Number(v);\r\n if (newVal[keyToNum]) {\r\n total += keyToNum;\r\n }\r\n });\r\n this.dealDto.ClassUses = total;\r\n });\r\n\r\n return;\r\n }\r\n }\r\n }\r\n\r\n onPurchaseDateChange() {\r\n this.minCompletionDate = this.dealDto.OriginalPurchaseDate;\r\n }\r\n\r\n\r\n getProductRoute(): string {\r\n switch (this.dealDto.ProductType) {\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n return \"\";\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n return \"/PurchaseRefinance\";\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n return \"/DeveloperExit\";\r\n case ProductTypeEnum.BridgingRefurb:\r\n return \"/Refurbishment\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n bridgingTypeChanged(productType: ProductTypeEnum) {\r\n this.progressSection = 1;\r\n this.dealDto = {} as BridgingDealDTO;\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.getOriginatorInfoForUser();\r\n } else {\r\n this.getOriginatorInfoForAnonymousUsers();\r\n }\r\n this.dealDto.MaxLoanRequired = true;\r\n this.dealDto.ProductType = productType;\r\n this.dealDto.ProductFamily = ProductFamilyEnum.Bridging;\r\n this.getLoanInfoText();\r\n this.dealDto.HasIsFamilyInResidence = false;\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n this.dealDto.HasOwnOrPurchase = false;\r\n this.dealDto.OwnOrPurchase = OwnOrPurchaseEnum.Purchasing;\r\n this.dealDto.LandOrProperty =\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction\r\n ? LandOrPropertyEnum.Land\r\n : LandOrPropertyEnum.Property;\r\n this.dealDto.HasLandOrProperty =\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingRefurb\r\n ? true\r\n : false;\r\n //this.getPlanningOptions();\r\n this.dealDto.PlanningPermissionType =\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction\r\n ? PlanningPermissionTypeEnum.DetailedPlanning\r\n : PlanningPermissionTypeEnum.None;\r\n this.dealDto.LoanCompletionType =\r\n LoanCompletionTypeEnum.JustCheckingMyOptions;\r\n this.dealDto.RefurbishmentLevel =\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingRefurb\r\n ? RefurbishmentLevelEnum.Light\r\n : null;\r\n this.dealDto.ShowLenderInfoBrokerOverride = true;\r\n this.dealDto.hasPostcode = true;\r\n this.hasPurchasecostChanged = false;\r\n this.hasLandcostChanged = false;\r\n if (\r\n this.$location.path().startsWith(\"/e/bridgingcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\")\r\n ) {\r\n if (this.$routeParams.linkId && this.$routeParams.linkId != \"0\") {\r\n this.dealDto.OrganisationLinkId = this.$routeParams.linkId;\r\n }\r\n\r\n this.logEvent(\"BRIDGINGCRITERIA-PAGE1\");\r\n }\r\n }\r\n\r\n async getOriginatorInfoForUser() {\r\n if (this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Admin;\r\n this.dealDto.SourceType = DealSourceTypeEnum.Application;\r\n } else if (this.isBroker && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Broker;\r\n } else if (this.isBorrower && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Borrower;\r\n } else if (this.isLender && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Lender;\r\n this.dealDto.SourceType = DealSourceTypeEnum.Application;\r\n }\r\n\r\n if (window.self == window.top) {\r\n\r\n if (this.isLender) {\r\n this.userService.getCurrentUserLender().then((response) => {\r\n this.dealDto.OriginatorLenderId = response;\r\n });\r\n }\r\n\r\n if (this.isBroker || this.isBorrower) {\r\n this.organisationService.getOrganisation().then((org) => {\r\n if (org != null) {\r\n if (org.Id != 0) this.dealDto.OriginatorOrganisationId = org.Id;\r\n this.dealDto.SourceType = org.IsWhiteLabelled\r\n ? DealSourceTypeEnum.WhitelabelApplication\r\n : DealSourceTypeEnum.Application;\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n getOriginatorInfoForAnonymousUsers() {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Borrower;\r\n\r\n if (window.self == window.top) {\r\n this.dealDto.SourceType = DealSourceTypeEnum.Enterprise;\r\n } else {\r\n this.dealDto.SourceType = this.isWidget ? DealSourceTypeEnum.WidgetEnterprise : DealSourceTypeEnum.IFrameEnterprise;\r\n }\r\n\r\n if (this.$routeParams.linkId) {\r\n if (window.self == window.top) {\r\n this.dealDto.SourceType = DealSourceTypeEnum.UniqueLink;\r\n } else {\r\n this.dealDto.SourceType = this.isWidget ? this.$routeParams.linkId == \"0\"? DealSourceTypeEnum.WidgetEnterprise: DealSourceTypeEnum.WidgetUniqueLink : DealSourceTypeEnum.IFrameUniqueLink;\r\n }\r\n }\r\n }\r\n\r\n calculatePurchaseOrLandCost() {\r\n if (this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction) {\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n if (this.dealDto.PurchasePrice && !this.hasLandcostChanged) {\r\n this.dealDto.LandTotalOtherCosts =\r\n (this.dealDto.PurchasePrice * 5) / 100;\r\n }\r\n } else if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing) {\r\n if (this.dealDto.PurchasePrice && !this.hasPurchasecostChanged) {\r\n this.dealDto.PurchaseCosts = (this.dealDto.PurchasePrice * 5) / 100;\r\n }\r\n }\r\n } else if (\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingRefurb\r\n ) {\r\n if (this.dealDto.PurchasePrice && !this.hasPurchasecostChanged) {\r\n this.dealDto.PurchaseCosts = (this.dealDto.PurchasePrice * 5) / 100;\r\n }\r\n }\r\n }\r\n\r\n onPurchaseCostChange() {\r\n var purchaseCost = (this.dealDto.PurchasePrice * 5) / 100;\r\n if (this.dealDto.PurchaseCosts != purchaseCost) {\r\n this.hasPurchasecostChanged = true;\r\n }\r\n }\r\n\r\n onLandCostChange() {\r\n var landCost = (this.dealDto.PurchasePrice * 5) / 100;\r\n if (this.dealDto.PurchaseCosts != landCost) {\r\n this.hasLandcostChanged = true;\r\n }\r\n }\r\n\r\n onOwnOrPurchaseChange(OwnOrPurchase: boolean) {\r\n this.dealDto.OwnOrPurchase = this.dealDto.HasOwnOrPurchase\r\n ? OwnOrPurchaseEnum.Own\r\n : OwnOrPurchaseEnum.Purchasing;\r\n //this.getPlanningOptions();\r\n this.datasetupOnOwnOrPurchaseChange();\r\n }\r\n\r\n onLandOrPropertyChange() {\r\n this.dealDto.LandOrProperty = this.dealDto.HasLandOrProperty\r\n ? LandOrPropertyEnum.Property\r\n : LandOrPropertyEnum.Land;\r\n //this.getPlanningOptions();\r\n this.datasetupOnLandorPropertyChange();\r\n }\r\n\r\n onIsFamilyInResidenceChange() {\r\n this.dealDto.IsFamilyInResidence = this.dealDto.HasIsFamilyInResidence\r\n ? YesNoMaybe.Yes\r\n : YesNoMaybe.No;\r\n }\r\n\r\n initialDataSetupForIsFamilyInResidence() {\r\n if (this.dealDto.HasIsFamilyInResidence) {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.Yes;\r\n this.dealDto.HasIsFamilyInResidence = true;\r\n } else {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n this.dealDto.HasIsFamilyInResidence = false;\r\n }\r\n }\r\n\r\n goToLoanTypeSelectionPage() {\r\n if (this.isLoggedInUser) {\r\n this.$auth.setHasValidStatustoShowShareSearchModal(\r\n true,\r\n );\r\n }\r\n\r\n this.$location.path(\"/allloans\");\r\n\r\n }\r\n\r\n goToDevFinanceCriteria() {\r\n if (this.$location.path().startsWith(\"/allloans\")) {\r\n this.$scope.$emit(\"productFamilySelection\", 1);\r\n }\r\n else if (this.isLoggedInUser) {\r\n this.$location.path(\"/devfinancecriteria\");\r\n } else {\r\n this.$location.path(\"/e/devfinancecriteria\");\r\n }\r\n }\r\n\r\n calculateMonthsSinceOrigPurchase() {\r\n let date1 = new Date(this.dealDto.OriginalPurchaseDate);\r\n let date2 = new Date();\r\n let months;\r\n months = (date2.getFullYear() - date1.getFullYear()) * 12;\r\n months -= date1.getMonth();\r\n months += date2.getMonth();\r\n return months;\r\n }\r\n\r\n async logEvent(identifier: string) {\r\n var orgCode;\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto?.OrganisationLinkId,\r\n this.dealDto.ProductType,\r\n \"\",\r\n this.dealDto.Id,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto?.OrganisationLinkId,\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n } else {\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto.OrganisationLinkId,\r\n this.dealDto.ProductType,\r\n \"\",\r\n this.dealDto.Id,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto.OrganisationLinkId,\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n }\r\n }\r\n\r\n\r\n calcContingencyAmount() {\r\n if (this.dealDto.Contingency && this.dealDto.BuildCosts) {\r\n this.contingencyAmount =\r\n this.dealDto.Contingency * this.dealDto.BuildCosts;\r\n } else {\r\n this.contingencyAmount = null;\r\n }\r\n }\r\n\r\n hasValidNetLoanRequiredValue() {\r\n if (\r\n !this.dealDto.MaxLoanRequired &&\r\n (this.dealDto.NetLoanRequired == null ||\r\n isNaN(this.dealDto.NetLoanRequired) ||\r\n this.dealDto.NetLoanRequired <= 0)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /*getRegionByPostcode() {\r\n if (this.dealDto.PostcodeSearchString && this.dealDto.PostcodeSearchString.replace(\" \", \"\").length >= 2) {\r\n if (this.dealService.isValidPostcodeString(this.dealDto.PostcodeSearchString)) {\r\n this.dataLoading = true;\r\n this.dealService.getRegionByPostcode(this.dealDto.PostcodeSearchString).then((response) => {\r\n if (response.Location != null) {\r\n this.dealDto.Locations = response.Location;\r\n this.showPostcodeErrorMessage = false;\r\n } else {\r\n this.postcodeErrorMsg = response.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n }).finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.postcodeErrorMsg = \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n } else {\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n }*/\r\n\r\n showBasedOnMainResidence() {\r\n return this.dealService.showBasedOnMainResidence(this.dealDto);\r\n }\r\n\r\n\r\n getLoanInfoText() {\r\n switch (this.dealDto.ProductType) {\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n this.loanInfoText =\r\n \"For properties that are at practical completion, but need more time to sell or refinance\";\r\n break;\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n this.loanInfoText =\r\n \"Loans against the property value only. Any improvement works need to be self-funded\";\r\n break;\r\n case ProductTypeEnum.BridgingRefurb:\r\n this.loanInfoText =\r\n \"Loans available against the property and the refurbishment works.\";\r\n break;\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n this.loanInfoText =\r\n \"Loans for gaining planning or to amend existing planning\";\r\n break;\r\n default:\r\n this.loanInfoText = \"\";\r\n break;\r\n }\r\n }\r\n\r\n clickNextButton() {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/bridgingcriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"BRIDGINGCRITERIA-PAGE2\");\r\n }\r\n this.progressSection = 2;\r\n this.progressAmount = \"50%\";\r\n }\r\n\r\n clickBackButton() {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/bridgingcriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"BRIDGINGCRITERIA-PAGE1\");\r\n }\r\n this.progressSection = 1;\r\n }\r\n\r\n async logEventWithoutDealData() {\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n \"BRIDGINGCRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.Bridging,\r\n \"\",\r\n 0,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"BRIDGINGCRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.Bridging,\r\n );\r\n }\r\n } else {\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n \"BRIDGINGCRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.Bridging,\r\n \"\",\r\n 0,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"BRIDGINGCRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.Bridging,\r\n );\r\n }\r\n }\r\n }\r\n\r\n postRetrieveProcessing(response) {\r\n this.dealDto = { ...response };\r\n this.getLoanInfoText();\r\n this.snapshotDealDto = { ...response };\r\n this.isFamilyInResidence =\r\n this.dealDto.IsFamilyInResidence == YesNoMaybe.Yes ? true : false;\r\n this.ownOrPurchase =\r\n this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own\r\n ? true\r\n : false;\r\n this.landOrProperty =\r\n this.dealDto.LandOrProperty == LandOrPropertyEnum.Property\r\n ? true\r\n : false;\r\n //this.initClassUses();\r\n this.calcContingencyAmount();\r\n }\r\n\r\n getRequiredRolesOptions(){\r\n return this.dealService.getRequiredRolesOptions();\r\n }\r\n}\r\n","export const enum LoanRepaymentTypeEnum {\r\n None = 0,\r\n InterestOnly = 1,\r\n Repayment = 2,\r\n}\r\n","import { CriteriaController } from \"@js/controllers/CriteriaController\";\r\nimport { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { SaveCommercialSearchRequest } from \"@js/DTO/Messages/Deal/SaveCommercialSearchMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { DealSourceTypeEnum } from \"@js/models/enum/DealSourceTypeEnum.cs.d\";\r\nimport { LinkTypeEnum } from \"@js/models/enum/LinkTypeEnum.cs.d\";\r\nimport { LoanRepaymentTypeEnum } from \"@js/models/enum/LoanRepaymentTypeEnum.cs.d\";\r\nimport { LocationEnum } from \"@js/models/enum/LocationEnum.cs.d\";\r\nimport { OriginatorRoleTypeEnum } from \"@js/models/enum/OriginatorRoleTypeEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { YesNoMaybe } from \"@js/models/enum/YesNoMaybeEnum.cs.d\";\r\nimport { SaveSearchReturnUniqueRefResponse } from \"@js/models/SaveSearchReturnUniqueRef.cs\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CommercialDealService } from \"@js/services/Deal/CommercialDealService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { SharedCriteriaService } from \"@js/services/Deal/SharedCriteriaService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { EnterpriseService } from \"@js/services/EnterpriseService\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\nexport class CommercialCriteriaController extends CriteriaController {\r\n dealDto: CommercialDealDTO;\r\n tempDealDto: CommercialDealDTO;\r\n snapshotDealDto: CommercialDealDTO;\r\n productType: ProductTypeEnum;\r\n\r\n maxPurchaseDate: Date = new Date();\r\n minPurchaseDate: Date = new Date(\"Jan 01 1900\");\r\n isLoggedInUser: boolean = false;\r\n // dataLoading: boolean = false;\r\n isSearchStarted: boolean = false;\r\n hasError: boolean = false;\r\n mortgageTerm: number = 0;\r\n\r\n multiPartForm1: ng.IFormController;\r\n\r\n //Share a search modal\r\n showShareSearchtoClientModal: boolean = false;\r\n existingUsers: UserSimpleDTO[];\r\n existingborrower: boolean;\r\n\r\n //Message to show when Enterprise url does not have valid lead gen license status or whitelabel add on is not paid or whitelabel setting is not on.\r\n noPermissionErrorMsg: string = \"\";\r\n\r\n //Enterprise user clientId\r\n clientId: string = null;\r\n enterpriseUser: ApplicationUserDTO = null;\r\n\r\n currentUseofBuildingOptions = [];\r\n locationOptions = [];\r\n borrowingEntityTypeOptions = [];\r\n\r\n hasPurchasecostChanged: boolean = false;\r\n\r\n guidanceCheckbox: boolean = true;\r\n shareDealDto: ShareDealDTO = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n //shows the selected existing client data on share modal\r\n showClientDetails: boolean = false;\r\n\r\n isDeal: boolean = true;\r\n\r\n isBorrower: boolean = false;\r\n organisation: OrganisationDTO;\r\n moveContactBrokerBtnInMiddle: boolean = false;\r\n initialRegistrationClient: ClientDTO;\r\n orgCode: string;\r\n\r\n //Postcode properties\r\n //showPostcodeErrorMessage: boolean = false;\r\n //postcodeErrorMsg: string;\r\n //previouslySelectedLocation: LocationEnum;\r\n\r\n isAdmin: boolean = false;\r\n isBroker: boolean = false;\r\n isLender: boolean = false;\r\n\r\n isCommercialOwnerOccupiedActive: boolean = false;\r\n showAutofill: boolean = false;\r\n isSubmitted: boolean = false;\r\n\r\n //enterprise widget journey\r\n isMobileView: boolean = false;\r\n enterpriseLinkLogo: string;\r\n showHelpModal: boolean = false;\r\n loanInfoText: string;\r\n progressAmount: string = \"50%\";\r\n progressSection: number = 1;\r\n totalSections: number = 3;\r\n loanRepaymentTypeOptions = [];\r\n fixedrateTermOptions = [];\r\n loanCompletionTypeOptions = [];\r\n productTypeOptions = [];\r\n timeLeftOnLeaseOptions = [];\r\n\r\n isWidget: boolean = false;\r\n //This propert is used to show only postcode ot location field on critera for mobile view\r\n isCriteria: boolean = true;\r\n\r\n error: string;\r\n showAdjustedAnnualEBITDAHelpertext: boolean = false;\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$q\",\r\n \"UserService\",\r\n \"RoleService\",\r\n \"OrganisationService\",\r\n \"SelectListService\",\r\n \"DevelopmentInputService\",\r\n \"CommercialDealService\",\r\n \"SharedCriteriaService\",\r\n \"EventLogService\",\r\n \"AuthService\",\r\n \"OrganisationLinkService\",\r\n \"DealService\",\r\n \"EnterpriseService\"\r\n ].concat(CriteriaController.$inject);\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n protected $q: ng.IQService,\r\n private userService: UserService,\r\n private roleService: RoleService,\r\n private organisationService: OrganisationService,\r\n private selectListService: SelectListService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private commercialDealService: CommercialDealService,\r\n private sharedCriteriaService: SharedCriteriaService,\r\n private eventLogService: EventLogService,\r\n private $auth: AuthService,\r\n private organisationLinkService: OrganisationLinkService,\r\n dealService: DealService,\r\n private enterpriseService: EnterpriseService\r\n ) {\r\n super(dealService);\r\n try {\r\n\r\n if (this.$routeParams.context == 'widget' && window.self != window.top) {\r\n this.isWidget = true;\r\n } else {\r\n if (window.innerWidth <= 480)\r\n this.isMobileView = true\r\n }\r\n\r\n\r\n this.$auth.isCommercialOwnerOccupiedActive().then((response) => {\r\n this.isCommercialOwnerOccupiedActive = response;\r\n });\r\n\r\n //Initial data setup for a commercial deal\r\n if (this.dealDto == null) {\r\n this.dealDto = {} as CommercialDealDTO;\r\n }\r\n\r\n //Enteprise journey code\r\n if (!$cookies.get(\"access_token\") &&\r\n (this.$location.path().startsWith(\"/e/commercialcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ) {\r\n this.isBorrower = true;\r\n if (this.$location.path().startsWith(\"/e/commercialcriteria\")) {\r\n var imgs = document.getElementsByTagName(\"img\");\r\n this.enterpriseLinkLogo = imgs[0].src;\r\n this.sharedCriteriaService.storeEnterpriseLinkType(LinkTypeEnum.Commercial.toString());\r\n }\r\n\r\n if (this.isWidget) {\r\n //document.getElementById(\"footer\").style.display = \"none\";\r\n this.organisationService.sendDataToParent(\"height\", \"745px\");\r\n }\r\n\r\n if (!this.$routeParams.DealUniqueRef) {\r\n\r\n if (window.self == window.top) {\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n sessionStorage.setItem(\"userRole\", UserRoleEnum.Client.toString());\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.organisationService.sendDataToParent(\"userRole\", UserRoleEnum.Client.toString());\r\n }\r\n\r\n this.logEventWithoutDealData();\r\n }\r\n\r\n this.organisationService\r\n .getOrgByUrlIfOrgHasEnterpriseSearchPermission(\r\n this.orgCode,\r\n ProductFamilyEnum.Commercial,\r\n this.$routeParams.linkId,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.organisation = response;\r\n this.orgCode = response.OrganisationCode;\r\n if (this.$routeParams.linkId) {\r\n if (this.$location.path().startsWith(\"/e/commercialcriteria\")) {\r\n this.organisationLinkService\r\n .getOrganisationLinkLogoByLinkIdAndLogPageLoadEvent(\r\n this.$routeParams.linkId\r\n )\r\n .then((logoUrl) => {\r\n if (logoUrl) this.enterpriseLinkLogo = imgs[0].src = logoUrl;\r\n });\r\n }\r\n }\r\n\r\n } else {\r\n this.logEvent(\"COMMERCIALCRITERIA-NO-PERMISSION-TO-SEARCH\");\r\n this.noPermissionErrorMsg =\r\n \"We are unable to compare loans right now. Please contact your broker.\";\r\n }\r\n });\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.isAdmin = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n if (!this.isAdmin)\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (this.isBroker) {\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.gotoDashboard();\r\n }\r\n }\r\n }\r\n if (\r\n result.filter((x) => x.toLowerCase() == \"lender\").length > 0 &&\r\n !this.isAdmin\r\n ) {\r\n this.isLender = true;\r\n }\r\n\r\n if (\r\n result.filter((x) => x.toLowerCase() == \"client\").length > 0 &&\r\n !this.isAdmin\r\n ) {\r\n this.isBorrower = true;\r\n }\r\n }).finally(() => {\r\n if (\r\n this.$auth.getHasValidStatustoShowShareSearchModal()\r\n ) {\r\n if (sessionStorage.getItem(\"skip\")) {\r\n //This will hide's a share search to client modal\r\n this.showShareSearchtoClientModal = false;\r\n } else {\r\n //getting a previously entered DealName and Client data \r\n if (this.dealService.getShowSearchNameAndUserSelectionModal()) {\r\n this.showShareSearchtoClientModal = true;\r\n this.getUsersBelongToBrokerOrAdmin();\r\n } else {\r\n this.shareDealDto.ClientDto = this.dealService.getClient();\r\n this.shareDealDto.DealName = this.dealService.getDealName();\r\n }\r\n }\r\n }\r\n this.getOriginatorInfoForUser();\r\n });\r\n } else {\r\n if (!this.$routeParams.DealUniqueRef) {\r\n if (window.self == window.top) {\r\n this.clientId = sessionStorage.getItem(\"clientId\");\r\n } else {\r\n Promise.all([\r\n this.organisationService.getData(\"clientId\").then((clientId) => {\r\n if (clientId) {\r\n this.clientId = clientId;\r\n }\r\n }),\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n if (this.$routeParams.DealUniqueRef && this.$routeParams.DealUniqueRef != '0') {\r\n this.dataLoading = true;\r\n this.dealService\r\n .fetchByUniqueRef(this.$routeParams.DealUniqueRef)\r\n .then((response) => {\r\n this.postRetrieveProcessing(response);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n else if (this.$routeParams.SearchId > 0) {\r\n this.dataLoading = true;\r\n this.commercialDealService\r\n .fetch(this.$routeParams.SearchId)\r\n .then((response) => {\r\n this.postRetrieveProcessing(response)\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.dealDto.MaxLoanRequired = true;\r\n this.dealDto.ShowLenderInfoBrokerOverride = true;\r\n this.commercialTypeChanged(ProductTypeEnum.CommercialInvestment);\r\n }\r\n\r\n if (window.self == window.top) {\r\n this.updateGuidanceState();\r\n\r\n $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n this.updateGuidanceState();\r\n });\r\n }\r\n\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.borrowingEntityTypeOptions =\r\n this.selectListService.GetBorrowingEntityTypeOptions(\r\n ProductTypeEnum.CommercialOwnerOccupied,\r\n );\r\n //iFrame agent\r\n this.loanRepaymentTypeOptions =\r\n this.selectListService.GetLoanRepaymentTypeOptions();\r\n this.fixedrateTermOptions =\r\n this.selectListService.GetFixedRateTermOptions();\r\n this.loanCompletionTypeOptions =\r\n this.selectListService.GetLoanCompletionOptions();\r\n this.productTypeOptions = this.selectListService.GetInterestRateType();\r\n this.timeLeftOnLeaseOptions =\r\n this.selectListService.GetTimeLeftOnLeaseOptions();\r\n } catch (e) {\r\n console.error(\"Error: \", e);\r\n }\r\n }\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n updateGuidanceState() {\r\n this.guidanceCheckbox =\r\n this.$cookies.get(\"guidance\") === \"on\" ||\r\n this.$cookies.get(\"guidance\") === undefined;\r\n }\r\n\r\n // Start of Share a modal functions\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n this.shareDealDto =\r\n this.sharedCriteriaService.attachSelectedClientToShareDealDto(\r\n this.existingUsers,\r\n this.shareDealDto,\r\n userName,\r\n );\r\n this.showClientDetails = true;\r\n }\r\n\r\n //Clears the previously selected existing client data on share search modal\r\n clearInputFields() {\r\n this.shareDealDto =\r\n this.sharedCriteriaService.clearExistingUserOnShareDealDto(\r\n this.shareDealDto,\r\n );\r\n this.showClientDetails = false;\r\n }\r\n\r\n getUsersBelongToBrokerOrAdmin() {\r\n this.userService\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n })\r\n .finally(() => { });\r\n }\r\n\r\n gotoDashboard() {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n //new search share modal close btn function\r\n OnClickOfSkip() {\r\n this.showShareSearchtoClientModal = false;\r\n if (this.$location.path().startsWith(\"/allloans\") && (this.isAdmin || this.isBroker)) {\r\n this.dealService.setShowSearchNameAndUserSelectionModal(false);\r\n }\r\n }\r\n\r\n //new search share modal next btn function\r\n onClickOfNext() {\r\n this.showShareSearchtoClientModal = false;\r\n if (this.$location.path().startsWith(\"/allloans\") && (this.isAdmin || this.isBroker)) {\r\n this.dealService.setShowSearchNameAndUserSelectionModal(false);\r\n this.dealService.setClient(this.shareDealDto.ClientDto);\r\n this.dealService.setDealName(this.shareDealDto.DealName);\r\n }\r\n }\r\n\r\n // End of Share a modal functions\r\n\r\n goToLoanSelectionOptions() {\r\n this.$auth.setHasValidStatustoShowShareSearchModal(\r\n true,\r\n );\r\n this.$location.path(\"/allloans\");\r\n }\r\n\r\n calculatePurchaseOrLandCost() {\r\n if (this.dealDto.PurchasePrice && !this.hasPurchasecostChanged) {\r\n this.dealDto.PurchaseCosts = (this.dealDto.PurchasePrice * 5) / 100;\r\n }\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange() {\r\n this.dealDto = this.commercialDealService.datasetupOnOwnOrPurchaseChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnMaxLoanRequiredChange() {\r\n this.dealDto = this.dealService.dataSetupOnMaxLoanRequiredChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n onOwnOrPurchaseChange(OwnOrPurchase: boolean) {\r\n this.dealDto.OwnOrPurchase = this.dealDto.HasOwnOrPurchase\r\n ? OwnOrPurchaseEnum.Own\r\n : OwnOrPurchaseEnum.Purchasing;\r\n this.datasetupOnOwnOrPurchaseChange();\r\n }\r\n\r\n onCurrentUseOfBuilding() {\r\n if (this.dealDto.ProductType == ProductTypeEnum.CommercialInvestment) {\r\n this.dealDto = this.commercialDealService.datasetupOnCurrentUseOfBuilding(\r\n this.dealDto,\r\n );\r\n }\r\n }\r\n\r\n onIsFamilyInResidenceChange() {\r\n this.dealDto.IsFamilyInResidence = this.dealDto.HasIsFamilyInResidence\r\n ? YesNoMaybe.Yes\r\n : YesNoMaybe.No;\r\n }\r\n\r\n initialDataSetupForIsFamilyInResidence() {\r\n if (this.dealDto.HasIsFamilyInResidence) {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.Yes;\r\n this.dealDto.HasIsFamilyInResidence = true;\r\n } else {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n this.dealDto.HasIsFamilyInResidence = false;\r\n }\r\n }\r\n\r\n\r\n async logEvent(identifier: string) {\r\n var orgCode;\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto?.OrganisationLinkId,\r\n this.dealDto.ProductType,\r\n \"\",\r\n this.dealDto.Id,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto?.OrganisationLinkId,\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n } else {\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto.OrganisationLinkId,\r\n this.dealDto.ProductType,\r\n \"\",\r\n this.dealDto.Id,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto.OrganisationLinkId,\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n }\r\n }\r\n\r\n goToSearchResults() {\r\n this.isSubmitted = true;\r\n this.isSearchStarted = true;\r\n this.hasError = false;\r\n this.error = null;\r\n // If enterprise\r\n if (\r\n !this.isLoggedInUser &&\r\n this.isBorrower &&\r\n (this.$location.path().startsWith(\"/e/commercialcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ) {\r\n this.enterpriseService.setProductFamily(this.dealDto.ProductFamily);\r\n\r\n this.saveCriteriaReturnUniqueRef().then((response) => {\r\n if (!this.hasError) {\r\n this.sharedCriteriaService.setIsDataLoading(false);\r\n var uniqueRef = response as SaveSearchReturnUniqueRefResponse;\r\n if (window.self == window.top)\r\n sessionStorage.removeItem(\"productType\");\r\n if (response.HasDealClient) {\r\n //The purpose of the route check is to ensure navigation to the correct route when the user lands on the criteria page by clicking 'Change Search' in the side panel.\r\n if (sessionStorage.getItem('previousRoute') == 'referredsearchdeal') {\r\n this.$location.path(`/referredsearchdeal/${response.DealClientUniqueRef}/false`);\r\n sessionStorage.removeItem('previousRoute');\r\n } else {\r\n this.$location.path(`/e/commercialresults/${response.DealUniqueRef}`);\r\n }\r\n } else {\r\n var leadCaptureUrl = `/e/enterpriseleadcapture/${response.DealUniqueRef}`;\r\n leadCaptureUrl = this.isWidget ? `${leadCaptureUrl}/widget` : leadCaptureUrl;\r\n\r\n this.$location.path(leadCaptureUrl);\r\n }\r\n }\r\n });\r\n } else {\r\n this.saveCriteriaReturnId().then((response) => {\r\n if (!this.hasError) {\r\n var dealId = response as number;\r\n if (window.self == window.top)\r\n sessionStorage.removeItem(\"productType\");\r\n if (this.isAdmin || this.isBroker) this.dealService.setShowSearchNameAndUserSelectionModal(true);\r\n this.$location.path(\"/commercialresults/\" + dealId);\r\n }\r\n });\r\n }\r\n }\r\n\r\n searchDisabled() {\r\n\r\n if (this.progressSection == 1) {\r\n this.progressAmount = \"0%\";\r\n\r\n if (\r\n this.dealDto.IsFamilyInResidence == 1 ||\r\n this.dealDto.Locations == null ||\r\n this.dealDto.Locations <= 0 ||\r\n this.showPostcodeErrorMessage\r\n ) {\r\n return true;\r\n }\r\n\r\n if (this.multiPartForm1.$invalid) {\r\n return true;\r\n }\r\n\r\n this.progressAmount = \"33%\";\r\n }\r\n\r\n\r\n\r\n if (this.progressSection == 2) {\r\n this.progressAmount = \"33%\";\r\n\r\n if (\r\n this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing &&\r\n (this.dealDto.PurchasePrice == null || this.dealDto.PurchasePrice == 0)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own &&\r\n (this.dealDto.Currentvalue == null || this.dealDto.Currentvalue == 0)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (this.dealDto.IsFamilyInResidence == 1 || this.hasValidNetLoanRequiredValue()) {\r\n return true;\r\n }\r\n\r\n if (this.multiPartForm1.$invalid) {\r\n return true;\r\n }\r\n\r\n this.progressAmount = \"66%\";\r\n\r\n }\r\n\r\n\r\n if (this.progressSection == 3) {\r\n this.progressAmount = \"66%\";\r\n\r\n if (this.multiPartForm1.$invalid) {\r\n return true;\r\n }\r\n\r\n this.progressAmount = \"100%\";\r\n }\r\n\r\n return false;\r\n }\r\n\r\n saveCriteriaReturnId(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.dataSetUpForSave();\r\n\r\n var clientDto = null;\r\n /* if (!this.isLoggedInUser && this.enterpriseUser && (this.$location.path().startsWith(\"/e/commercialcriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n clientDto = this.sharedCriteriaService.setClientDtoDataForEnterpriseSearch(this.enterpriseUser, this.brokerageOrg.Id, clientDto);\r\n }*/\r\n\r\n var request: SaveCommercialSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.isLoggedInUser ? \"\" : this.orgCode,\r\n ClientId:\r\n !this.isLoggedInUser &&\r\n this.clientId &&\r\n !this.enterpriseUser &&\r\n (this.$location.path().startsWith(\"/e/commercialcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ? Number(this.clientId)\r\n : 0,\r\n EnterpriseClientDto: clientDto,\r\n };\r\n\r\n this.commercialDealService\r\n .saveCommercialSearchReturnsId(request)\r\n .then((response) => {\r\n this.dealDto.Id = response;\r\n\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n if (response.status === 500) {\r\n this.error = response.data.message;\r\n } else {\r\n this.error = 'Something went wrong while searching for loans. Please try again.';\r\n }\r\n this.hasError = true;\r\n this.isSearchStarted = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n saveCriteriaReturnUniqueRef(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.sharedCriteriaService.setIsDataLoading(true);\r\n\r\n this.dataSetUpForSave();\r\n\r\n var clientDto = null;\r\n /* if (!this.isLoggedInUser && this.enterpriseUser && (this.$location.path().startsWith(\"/e/commercialcriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n clientDto = this.sharedCriteriaService.setClientDtoDataForEnterpriseSearch(this.enterpriseUser, this.brokerageOrg.Id, clientDto);\r\n }*/\r\n\r\n var request: SaveCommercialSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.isLoggedInUser ? \"\" : this.orgCode,\r\n ClientId: !this.isWidget &&\r\n !this.isLoggedInUser &&\r\n this.clientId &&\r\n !this.enterpriseUser &&\r\n (this.$location.path().startsWith(\"/e/commercialcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ? Number(this.clientId)\r\n : 0,\r\n EnterpriseClientDto: clientDto,\r\n };\r\n\r\n this.commercialDealService\r\n .saveCommercialSearchReturnsUniqueRef(request)\r\n .then((response) => {\r\n this.dealDto.UniqueRef = response.DealUniqueRef;\r\n\r\n defer.resolve(response as SaveSearchReturnUniqueRefResponse);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n this.sharedCriteriaService.setIsDataLoading(false);\r\n if (response.status === 500) {\r\n this.error = response.data.message;\r\n } else {\r\n this.error = 'Something went wrong while searching for loans. Please try again.';\r\n }\r\n this.hasError = true;\r\n this.isSearchStarted = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n dataSetUpForSave() {\r\n this.sharedCriteriaService.setNewSearch(this.dealDto, this.snapshotDealDto);\r\n\r\n if (this.dealDto.Id == null) {\r\n this.dealDto.Status = CaseStatusEnum.Search;\r\n }\r\n\r\n if (\r\n this.dealDto.Name == null ||\r\n this.dealDto.Name == \"\" ||\r\n this.dealDto.Name == undefined\r\n ) {\r\n this.dealDto.Name = this.sharedCriteriaService.defaultSearchName(\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n\r\n if (\r\n !this.isLoggedInUser &&\r\n (this.$location.path().startsWith(\"/e/commercialcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\")) &&\r\n this.isBorrower\r\n ) {\r\n this.dealDto.HowManyFlats = this.dealDto.HowManyFlats\r\n ? this.dealDto.HowManyFlats\r\n : 0;\r\n this.dealDto.HowManyHouses = this.dealDto.HowManyHouses\r\n ? this.dealDto.HowManyHouses\r\n : 0;\r\n }\r\n\r\n if (!this.shareDealDto) {\r\n this.shareDealDto = {\r\n DealName: this.sharedCriteriaService.defaultSearchName(\r\n this.dealDto.ProductType,\r\n ),\r\n } as ShareDealDTO;\r\n }\r\n\r\n if (this.dealDto.PurchasePrice == null) {\r\n this.dealDto.PurchasePrice = 0;\r\n }\r\n\r\n if (this.dealDto.PurchaseCosts == null) {\r\n this.dealDto.PurchaseCosts = 0;\r\n }\r\n }\r\n\r\n dummysearch() {\r\n if (this.dealDto.hasPostcode) {\r\n this.dealDto.PostcodeSearchString =\r\n this.sharedCriteriaService.getRandomPostcode();\r\n this.getRegionByPostcode();\r\n } else {\r\n this.dealDto.Locations = LocationEnum.London;\r\n }\r\n\r\n this.mortgageTerm = this.sharedCriteriaService.getRandomIntInclusive(\r\n 10,\r\n 30,\r\n );\r\n this.mortgageTermToLoanTerm();\r\n this.dealDto.MaxLoanRequired =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 1\r\n ? true\r\n : false;\r\n if (!this.dealDto.MaxLoanRequired) {\r\n this.dealDto.NetLoanRequired =\r\n this.sharedCriteriaService.getRandomIntInclusive(400000, 2000000);\r\n }\r\n\r\n if (this.dealDto.ProductType == ProductTypeEnum.CommercialInvestment) {\r\n this.dealDto.GrossMonthlyRentalIncome =\r\n this.sharedCriteriaService.getRandomIntInclusive(10000, 20000);\r\n } else {\r\n this.dealDto.AdjustedAnnualEBITDA =\r\n this.sharedCriteriaService.getRandomIntInclusive(500000, 1000000);\r\n }\r\n\r\n this.dealDto.PurchasePrice =\r\n this.sharedCriteriaService.getRandomIntInclusive(5000000, 10000000);\r\n this.dealDto.PurchaseCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 1000000);\r\n }\r\n\r\n initMortgageTerm() {\r\n this.dealDto.LoanTermReq = this.dealDto.LoanTermReq || 240;\r\n this.mortgageTerm = this.dealDto.LoanTermReq / 12;\r\n }\r\n\r\n mortgageTermToLoanTerm() {\r\n this.dealDto.LoanTermReq = this.mortgageTerm * 12;\r\n }\r\n\r\n onLoanRepaymentTypeChange() {\r\n if (this.dealDto.LoanRepaymentType == LoanRepaymentTypeEnum.Repayment) {\r\n this.mortgageTerm = 20;\r\n } else if (\r\n this.dealDto.LoanRepaymentType == LoanRepaymentTypeEnum.InterestOnly\r\n ) {\r\n this.mortgageTerm = 10;\r\n }\r\n this.mortgageTermToLoanTerm();\r\n }\r\n\r\n hasValidNetLoanRequiredValue() {\r\n if (\r\n !this.dealDto.MaxLoanRequired &&\r\n (this.dealDto.NetLoanRequired == null ||\r\n isNaN(this.dealDto.NetLoanRequired) ||\r\n this.dealDto.NetLoanRequired <= 0)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n getRegionByPostcode() {\r\n if (\r\n this.dealDto.PostcodeSearchString &&\r\n this.dealDto.PostcodeSearchString.replace(\" \", \"\").length >= 2\r\n ) {\r\n if (\r\n this.dealService.isValidPostcodeString(\r\n this.dealDto.PostcodeSearchString,\r\n )\r\n ) {\r\n this.dataLoading = true;\r\n this.dealService\r\n .getRegionByPostcode(this.dealDto.PostcodeSearchString)\r\n .then((response) => {\r\n if (response.Location != null) {\r\n this.dealDto.Locations = response.Location;\r\n this.showPostcodeErrorMessage = false;\r\n } else {\r\n this.postcodeErrorMsg = response.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n } else {\r\n if (this.dealDto.Locations) this.dealDto.Locations = null;\r\n }\r\n }\r\n\r\n onHasPostcodeChange() {\r\n if (!this.dealDto.hasPostcode) {\r\n this.showPostcodeErrorMessage = false;\r\n this.dealDto.PostcodeSearchString = null;\r\n this.dealDto.Locations = this.previouslySelectedLocation;\r\n } else {\r\n this.previouslySelectedLocation = this.dealDto.Locations;\r\n this.dealDto.Locations = null;\r\n }\r\n }\r\n\r\n isCriteriaFormInValid() {\r\n if (\r\n this.isSearchStarted ||\r\n this.multiPartForm1.$invalid ||\r\n this.dealDto.IsFamilyInResidence == 1 ||\r\n this.dealDto.Locations == null ||\r\n this.dealDto.Locations <= 0 ||\r\n this.hasValidNetLoanRequiredValue() ||\r\n this.showPostcodeErrorMessage\r\n ) {\r\n if (this.isSearchStarted) {\r\n this.progressAmount = \"100%\";\r\n } else {\r\n this.progressAmount = \"66%\";\r\n }\r\n return true;\r\n } else {\r\n this.progressAmount = \"100%\";\r\n return false;\r\n }\r\n }\r\n\r\n commercialTypeChanged(productType: ProductTypeEnum) {\r\n this.progressSection = 1;\r\n this.getLoanInfoText(productType);\r\n this.dealDto = {} as CommercialDealDTO;\r\n this.commercialDealService.initialDataSetUp(this.dealDto, productType);\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.getOriginatorInfoForUser();\r\n } else {\r\n this.getOriginatorInfoForAnonymousUsers();\r\n }\r\n this.currentUseofBuildingOptions =\r\n this.selectListService.GetCommercialCurrentUseOfBuildingOptions(\r\n this.dealDto.ProductType,\r\n );\r\n this.onLoanRepaymentTypeChange();\r\n\r\n this.hasPurchasecostChanged = false; \r\n if (!this.isLoggedInUser &&\r\n (this.$location.path().startsWith(\"/e/commercialcriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ) {\r\n if (this.$routeParams.linkId && this.$routeParams.linkId != \"0\") {\r\n this.dealDto.OrganisationLinkId = this.$routeParams.linkId;\r\n }\r\n\r\n this.logEvent(\"COMMERCIALCRITERIA-PAGE1\");\r\n }\r\n }\r\n\r\n showBasedOnMainResidence() {\r\n return this.dealService.showBasedOnMainResidence(this.dealDto);\r\n }\r\n\r\n isFieldEmpty(fieldName, isEnum = false) {\r\n if (this.isSubmitted && this.dealDto) {\r\n const fieldValue = this.dealDto[fieldName];\r\n if (fieldName == \"PlanningPermissionType\") {\r\n if (fieldValue == null || fieldValue < 1) {\r\n return true;\r\n }\r\n }\r\n if (fieldValue == null || (isEnum && fieldValue === \"0\")) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isFieldZero(fieldName) {\r\n if (this.isSubmitted && this.dealDto) {\r\n const fieldValue = this.dealDto[fieldName];\r\n if (fieldValue == null || fieldValue === '0' || fieldValue === 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n clickNextButton() {\r\n if (this.progressSection == 1) {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/commercialcriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"COMMERCIALCRITERIA-PAGE2\");\r\n }\r\n this.progressSection = 2;\r\n } else {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/commercialcriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"COMMERCIALCRITERIA-PAGE3\");\r\n }\r\n this.progressSection = 3;\r\n }\r\n }\r\n\r\n clickBackButton() {\r\n if (this.progressSection == 3) {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/commercialcriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"COMMERCIALCRITERIA-PAGE2\");\r\n }\r\n this.progressSection = 2;\r\n } else {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/commercialcriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"COMMERCIALCRITERIA-PAGE1\");\r\n }\r\n this.progressSection = 1;\r\n }\r\n }\r\n\r\n getLoanInfoText(productType) {\r\n switch (productType) {\r\n case ProductTypeEnum.CommercialInvestment:\r\n this.loanInfoText =\r\n \"For landlords and investors that let to unrelated third parties\";\r\n break;\r\n case ProductTypeEnum.CommercialOwnerOccupied:\r\n this.loanInfoText =\r\n \"For businesses that own and operate out of their own premises\";\r\n break;\r\n default:\r\n this.loanInfoText = \"\";\r\n break;\r\n }\r\n }\r\n async logEventWithoutDealData() {\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n \"COMMERCIALCRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.CommercialAll,\r\n \"\",\r\n this.dealDto.Id,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"COMMERCIALCRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.CommercialAll,\r\n \"\",\r\n this.dealDto.Id,\r\n );\r\n }\r\n } else {\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n \"COMMERCIALCRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.CommercialAll,\r\n \"\",\r\n this.dealDto.Id,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"COMMERCIALCRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.CommercialAll,\r\n \"\",\r\n this.dealDto.Id,\r\n );\r\n }\r\n }\r\n }\r\n\r\n getOriginatorInfoForUser() {\r\n if (this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Admin;\r\n this.dealDto.SourceType = DealSourceTypeEnum.Application;\r\n } else if (this.isBroker && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Broker;\r\n } else if (this.isBorrower && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Borrower;\r\n } else if (this.isLender && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Lender;\r\n this.dealDto.SourceType = DealSourceTypeEnum.Application;\r\n }\r\n\r\n if (window.self == window.top) {\r\n\r\n if (this.isLender) {\r\n this.userService.getCurrentUserLender().then((response) => {\r\n this.dealDto.OriginatorLenderId = response;\r\n });\r\n }\r\n\r\n if (this.isBroker || this.isBorrower) {\r\n this.organisationService.getOrganisation().then((org) => {\r\n if (org != null) {\r\n if (org.Id != 0) this.dealDto.OriginatorOrganisationId = org.Id;\r\n this.dealDto.SourceType = org.IsWhiteLabelled\r\n ? DealSourceTypeEnum.WhitelabelApplication\r\n : DealSourceTypeEnum.Application;\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n getOriginatorInfoForAnonymousUsers() {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Borrower;\r\n\r\n if (window.self == window.top) {\r\n this.dealDto.SourceType = DealSourceTypeEnum.Enterprise;\r\n } else {\r\n this.dealDto.SourceType = this.isWidget ? DealSourceTypeEnum.WidgetEnterprise : DealSourceTypeEnum.IFrameEnterprise;\r\n }\r\n\r\n if (this.$routeParams.linkId) {\r\n if (window.self == window.top) {\r\n this.dealDto.SourceType = DealSourceTypeEnum.UniqueLink;\r\n } else {\r\n this.dealDto.SourceType = this.isWidget ? this.$routeParams.linkId == \"0\"? DealSourceTypeEnum.WidgetEnterprise: DealSourceTypeEnum.WidgetUniqueLink : DealSourceTypeEnum.IFrameUniqueLink;\r\n }\r\n }\r\n }\r\n\r\n postRetrieveProcessing(response) {\r\n this.dealDto = { ...response };\r\n this.getLoanInfoText(this.dealDto.ProductType);\r\n this.currentUseofBuildingOptions =\r\n this.selectListService.GetCommercialCurrentUseOfBuildingOptions(\r\n this.dealDto.ProductType,\r\n );\r\n this.mortgageTerm = this.dealDto.LoanTermReq / 12;\r\n this.snapshotDealDto = { ...response };\r\n }\r\n\r\n getRequiredRolesOptions(){\r\n return this.dealService.getRequiredRolesOptions();\r\n }\r\n}\r\n","export const enum AreaUnitEnum {\r\n SquareMeters = 0,\r\n SquareFeet = 1,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { SaveDevFinanceSearchRequest } from \"@js/DTO/Messages/Deal/SaveDevFinanceSearchMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { AreaUnitEnum } from \"@js/models/enum/AreaUnitEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { DealSourceTypeEnum } from \"@js/models/enum/DealSourceTypeEnum.cs.d\";\r\nimport { LinkTypeEnum } from \"@js/models/enum/LinkTypeEnum.cs.d\";\r\nimport { LocationEnum } from \"@js/models/enum/LocationEnum.cs.d\";\r\nimport { OriginatorRoleTypeEnum } from \"@js/models/enum/OriginatorRoleTypeEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { YesNoMaybe } from \"@js/models/enum/YesNoMaybeEnum.cs.d\";\r\nimport { SaveSearchReturnUniqueRefResponse } from \"@js/models/SaveSearchReturnUniqueRef.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { DevFinanceDealService } from \"@js/services/Deal/DevFinanceDealService\";\r\nimport { SharedCriteriaService } from \"@js/services/Deal/SharedCriteriaService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { CriteriaController } from \"./CriteriaController\";\r\nimport { EnterpriseService } from \"@js/services/EnterpriseService\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\nexport class DevFinanceCriteriaController extends CriteriaController {\r\n dealDto: DevelopmentFinanceDealDTO;\r\n tempDealDto: DevelopmentFinanceDealDTO;\r\n snapshotDealDto: DevelopmentFinanceDealDTO;\r\n productType: ProductTypeEnum;\r\n\r\n maxPurchaseDate: string;\r\n minPurchaseDate: Date = new Date(\"Jan 01 1900\");\r\n isLoggedInUser: boolean = false;\r\n dataLoading: boolean = false;\r\n isSearchStarted: boolean = false;\r\n hasError: boolean = false;\r\n isSubmitted: boolean = false;\r\n error: string;\r\n\r\n multiPartForm1: ng.IFormController;\r\n\r\n //Share a search modal\r\n showShareSearchtoClientModal: boolean = false;\r\n existingUsers: UserSimpleDTO[];\r\n existingborrower: boolean;\r\n\r\n //Message to show when Enterprise url does not have valid lead gen license status or whitelabel add on is not paid or whitelabel setting is not on.\r\n noPermissionErrorMsg: string = \"\";\r\n\r\n //Enterprise user clientId\r\n clientId: string = null;\r\n enterpriseUser: ApplicationUserDTO = null;\r\n\r\n currentUseofBuildingOptions = [];\r\n locationOptions = [];\r\n loanCompletionTypeOptions = [];\r\n\r\n hasPurchaseCostChanged: boolean = false;\r\n\r\n guidanceCheckbox: boolean = true;\r\n shareDealDto: ShareDealDTO = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n //shows the selected existing client data on share modal\r\n showClientDetails: boolean = false;\r\n\r\n isDeal: boolean = true;\r\n\r\n isBorrower: boolean = false;\r\n isAdmin: boolean = false;\r\n isBroker: boolean = false;\r\n isLender: boolean = false;\r\n organisation: OrganisationDTO;\r\n moveContactBrokerBtnInMiddle: boolean = false;\r\n initialRegistrationClient: ClientDTO;\r\n orgCode: string;\r\n buildCostPerSqFt: number;\r\n buildCostPerSqM: number;\r\n buildCostIntermediary: number;\r\n areaConversionFactor: number = 10.7639;\r\n contingencyValue: number;\r\n totalBuildCosts: number;\r\n defaultProfessionalCosts: number = 0.1;\r\n showAutofill: boolean = false;\r\n\r\n //Postcode properties\r\n // showPostcodeErrorMessage: boolean = false;\r\n //postcodeErrorMsg: string;\r\n //previouslySelectedLocation: LocationEnum;\r\n isCaseDashboard: boolean = false;\r\n\r\n isMobileView: boolean = false;\r\n showHelpModal: boolean = false;\r\n loanInfoText: string;\r\n progressAmount: string = \"33%\";\r\n progressSection: number = 1;\r\n totalSections: number = 3;\r\n enterpriseLinkLogo: string;\r\n\r\n isWidget: boolean = false;\r\n //This propert is used to show only postcode ot location field on critera for mobile view\r\n isCriteria: boolean = true;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$q\",\r\n \"UserService\",\r\n \"RoleService\",\r\n \"OrganisationService\",\r\n \"SelectListService\",\r\n \"DevFinanceDealService\",\r\n \"SharedCriteriaService\",\r\n \"EventLogService\",\r\n \"AuthService\",\r\n \"DevelopmentInputService\",\r\n \"DealService\",\r\n \"OrganisationLinkService\",\r\n \"EnterpriseService\"\r\n ].concat(CriteriaController.$inject);\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n protected $q: ng.IQService,\r\n private userService: UserService,\r\n private roleService: RoleService,\r\n private organisationService: OrganisationService,\r\n private selectListService: SelectListService,\r\n private devFinanceDealService: DevFinanceDealService,\r\n private sharedCriteriaService: SharedCriteriaService,\r\n private eventLogService: EventLogService,\r\n private $auth: AuthService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n dealService: DealService,\r\n private organisationLinkService: OrganisationLinkService,\r\n private enterpriseService: EnterpriseService\r\n ) {\r\n super(dealService);\r\n\r\n try {\r\n if (this.$routeParams.context == 'widget' && window.self != window.top) {\r\n this.isWidget = true;\r\n } else {\r\n if (window.innerWidth <= 480)\r\n this.isMobileView = true\r\n }\r\n\r\n\r\n this.maxPurchaseDate = new Date().toISOString().split(\"T\")[0];\r\n\r\n //Initial data setup for a dev finance deal\r\n if (this.dealDto == null) {\r\n this.dealDto = {} as DevelopmentFinanceDealDTO;\r\n this.loanInfoText =\r\n \"For all new-build, conversion or larger refurbishment projects\";\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n this.dealDto = this.devFinanceDealService.initialDataSetUpForDeal(\r\n this.dealDto,\r\n );\r\n this.dealDto.GrossInternalAreaKnown = true;\r\n this.dealDto.AreaUnit = AreaUnitEnum.SquareFeet;\r\n this.dealDto.IncludesContingency = false;\r\n if (this.$routeParams.linkId && this.$routeParams.linkId != \"0\") {\r\n this.dealDto.OrganisationLinkId = this.$routeParams.linkId;\r\n }\r\n }\r\n\r\n //Enteprise journey code\r\n if (!$cookies.get(\"access_token\") &&\r\n (this.$location.path().startsWith(\"/e/devfinancecriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))\r\n ) {\r\n this.isBorrower = true;\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Borrower;\r\n\r\n if (this.$location.path().startsWith(\"/e/devfinancecriteria\")) {\r\n var imgs = document.getElementsByTagName(\"img\");\r\n this.enterpriseLinkLogo = imgs[0].src;\r\n this.sharedCriteriaService.storeEnterpriseLinkType(LinkTypeEnum.Development.toString());\r\n }\r\n\r\n if (this.isWidget) {\r\n //document.getElementById(\"footer\").style.display = \"none\";\r\n this.organisationService.sendDataToParent(\"height\", \"745px\");\r\n }\r\n\r\n if (!this.$routeParams.DealUniqueRef) {\r\n\r\n if (window.self == window.top) {\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n sessionStorage.setItem(\"userRole\", UserRoleEnum.Client.toString());\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.organisationService.sendDataToParent(\"userRole\", UserRoleEnum.Client.toString());\r\n }\r\n\r\n this.logEventWithoutDealData();\r\n this.getOriginatorInfoForAnonymousUsers();\r\n }\r\n\r\n this.dataLoading = true;\r\n this.organisationService\r\n .getOrgByUrlIfOrgHasEnterpriseSearchPermission(\r\n this.orgCode,\r\n ProductFamilyEnum.Development,\r\n this.$routeParams.linkId,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.organisation = response;\r\n this.orgCode = response.OrganisationCode;\r\n this.logEvent(\"DEVFINANCECRITERIA-PAGE1\");\r\n\r\n if (this.$routeParams.linkId) {\r\n if (this.$location.path().startsWith(\"/e/devfinancecriteria\")) {\r\n this.organisationLinkService\r\n .getOrganisationLinkLogoByLinkIdAndLogPageLoadEvent(\r\n this.$routeParams.linkId\r\n )\r\n .then((logoUrl) => {\r\n if (logoUrl) this.enterpriseLinkLogo = imgs[0].src = logoUrl;\r\n });\r\n }\r\n\r\n }\r\n } else {\r\n this.logEvent(\"DEVFINANCECRITERIA-NO-PERMISSION-TO-SEARCH\");\r\n this.noPermissionErrorMsg =\r\n \"We are unable to compare loans right now. Please contact your broker.\";\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.isAdmin = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n if (!this.isAdmin)\r\n // this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Broker;\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (this.isBroker) {\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.gotoDashboard();\r\n }\r\n }\r\n }\r\n if (\r\n result.filter((x) => x.toLowerCase() == \"lender\").length > 0 &&\r\n !this.isAdmin\r\n ) {\r\n this.isLender = true;\r\n }\r\n\r\n if (\r\n result.filter((x) => x.toLowerCase() == \"client\").length > 0 &&\r\n !this.isAdmin\r\n ) {\r\n this.isBorrower = true;\r\n }\r\n\r\n }).finally(() => {\r\n if (\r\n this.$auth.getHasValidStatustoShowShareSearchModal()\r\n ) {\r\n if (sessionStorage.getItem(\"skip\")) {\r\n //This will hide's a share search to client modal\r\n this.showShareSearchtoClientModal = false;\r\n } else {\r\n //getting a previously entered DealName and Client data \r\n if (this.dealService.getShowSearchNameAndUserSelectionModal()) {\r\n this.showShareSearchtoClientModal = true;\r\n this.getUsersBelongToBrokerOrAdmin();\r\n } else {\r\n this.shareDealDto.ClientDto = this.dealService.getClient();\r\n this.shareDealDto.DealName = this.dealService.getDealName();\r\n }\r\n }\r\n this.getOriginatorInfoForUser();\r\n }\r\n });\r\n\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.gotoDashboard();\r\n }\r\n } else {\r\n if (!this.$routeParams.DealUniqueRef) {\r\n if (window.self == window.top) {\r\n this.clientId = sessionStorage.getItem(\"clientId\");\r\n } else {\r\n Promise.all([\r\n this.organisationService.getData(\"clientId\").then((clientId) => {\r\n if (clientId) {\r\n this.clientId = clientId;\r\n }\r\n }),\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n if (this.$routeParams.DealUniqueRef && this.$routeParams.DealUniqueRef != '0') {\r\n this.dataLoading = true;\r\n this.dealService\r\n .fetchByUniqueRef(this.$routeParams.DealUniqueRef)\r\n .then((response) => {\r\n this.dealDto = { ...response };\r\n this.snapshotDealDto = { ...response };\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.updateCalculatedFields();\r\n });\r\n }\r\n else if (this.$routeParams.SearchId > 0) {\r\n this.dataLoading = true;\r\n this.devFinanceDealService\r\n .fetch(this.$routeParams.SearchId)\r\n .then((response) => {\r\n this.dealDto = { ...response };\r\n this.snapshotDealDto = { ...response };\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.updateCalculatedFields();\r\n });\r\n } else {\r\n this.dealDto.MaxLoanRequired = true;\r\n this.dealDto.ShowLenderInfoBrokerOverride = true;\r\n }\r\n\r\n if (window.self == window.top) {\r\n this.updateGuidanceState();\r\n\r\n $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n this.updateGuidanceState();\r\n });\r\n }\r\n\r\n this.currentUseofBuildingOptions = this.selectListService.GetCurrentUseOfBuildingOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.loanCompletionTypeOptions = this.selectListService.GetLoanCompletionOptions();\r\n } catch (e) {\r\n console.error(\"Error: \", e);\r\n }\r\n }\r\n\r\n updateGuidanceState() {\r\n this.guidanceCheckbox =\r\n this.$cookies.get(\"guidance\") === \"on\" ||\r\n this.$cookies.get(\"guidance\") === undefined;\r\n }\r\n\r\n // Start of Share a modal functions\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n this.shareDealDto =\r\n this.sharedCriteriaService.attachSelectedClientToShareDealDto(\r\n this.existingUsers,\r\n this.shareDealDto,\r\n userName,\r\n );\r\n this.showClientDetails = true;\r\n }\r\n\r\n //Clears the previously selected existing client data on share search modal\r\n clearInputFields() {\r\n this.shareDealDto =\r\n this.sharedCriteriaService.clearExistingUserOnShareDealDto(\r\n this.shareDealDto,\r\n );\r\n this.showClientDetails = false;\r\n }\r\n\r\n getUsersBelongToBrokerOrAdmin() {\r\n this.userService\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n })\r\n .finally(() => { });\r\n }\r\n\r\n gotoDashboard() {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n //new search share modal close btn function\r\n OnClickOfSkip() {\r\n this.showShareSearchtoClientModal = false;\r\n if (this.$location.path().startsWith(\"/allloans\") && (this.isAdmin || this.isBroker)) {\r\n this.dealService.setShowSearchNameAndUserSelectionModal(false);\r\n }\r\n }\r\n\r\n //new search share modal next btn function\r\n onClickOfNext() {\r\n this.showShareSearchtoClientModal = false;\r\n if (this.$location.path().startsWith(\"/allloans\") && (this.isAdmin || this.isBroker)) {\r\n this.dealService.setShowSearchNameAndUserSelectionModal(false);\r\n this.dealService.setClient(this.shareDealDto.ClientDto);\r\n this.dealService.setDealName(this.shareDealDto.DealName);\r\n }\r\n }\r\n // End of Share a modal functions\r\n\r\n goToLoanSelectionOptions() {\r\n this.$auth.setHasValidStatustoShowShareSearchModal(\r\n true,\r\n );\r\n this.$location.path(\"/allloans\");\r\n\r\n }\r\n\r\n calculatePurchaseOrLandCost() {\r\n if (this.dealDto.PurchasePrice && !this.hasPurchaseCostChanged) {\r\n this.dealDto.PurchaseCosts = (this.dealDto.PurchasePrice * 5) / 100;\r\n }\r\n }\r\n\r\n onPurchaseCostChange() {\r\n var purchaseCost = (this.dealDto.PurchasePrice * 5) / 100;\r\n if (this.dealDto.PurchaseCosts != purchaseCost) {\r\n this.hasPurchaseCostChanged = true;\r\n }\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange() {\r\n this.dealDto = this.devFinanceDealService.datasetupOnOwnOrPurchaseChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnMaxLoanRequiredChange() {\r\n this.dealDto = this.dealService.dataSetupOnMaxLoanRequiredChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n onOwnOrPurchaseChange(OwnOrPurchase: boolean) {\r\n this.dealDto.OwnOrPurchase = this.dealDto.HasOwnOrPurchase\r\n ? OwnOrPurchaseEnum.Own\r\n : OwnOrPurchaseEnum.Purchasing;\r\n this.datasetupOnOwnOrPurchaseChange();\r\n }\r\n\r\n onCurrentUseOfBuilding() {\r\n this.dealDto = this.devFinanceDealService.datasetupOnCurrentUseOfBuilding(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n onIsFamilyInResidenceChange() {\r\n this.dealDto.IsFamilyInResidence = this.dealDto.HasIsFamilyInResidence\r\n ? YesNoMaybe.Yes\r\n : YesNoMaybe.No;\r\n this.clearSearchdata();\r\n }\r\n\r\n initialDataSetupForIsFamilyInResidence() {\r\n if (this.dealDto.HasIsFamilyInResidence) {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.Yes;\r\n this.dealDto.HasIsFamilyInResidence = true;\r\n } else {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n this.dealDto.HasIsFamilyInResidence = false;\r\n }\r\n }\r\n\r\n clearSearchdata() {\r\n this.dealDto = this.devFinanceDealService.clearSearchdata(this.dealDto);\r\n }\r\n\r\n async logEvent(identifier: string) {\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto.OrganisationLinkId,\r\n ProductTypeEnum.Development,\r\n \"\",\r\n this.dealDto.Id,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto.OrganisationLinkId,\r\n ProductTypeEnum.Development,\r\n \"\",\r\n this.dealDto.Id,\r\n );\r\n }\r\n } else {\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto.OrganisationLinkId,\r\n ProductTypeEnum.Development,\r\n \"\",\r\n this.dealDto.Id,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n identifier,\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.dealDto.OrganisationLinkId,\r\n ProductTypeEnum.Development,\r\n \"\",\r\n this.dealDto.Id,\r\n );\r\n }\r\n }\r\n }\r\n\r\n goToSearchResults() {\r\n this.error = null;\r\n this.isSubmitted = true;\r\n this.isSearchStarted = true;\r\n this.hasError = false;\r\n // If enterprise\r\n if (\r\n !this.isLoggedInUser &&\r\n this.isBorrower &&\r\n (this.$location.path().startsWith(\"/e/devfinancecriteria\") || this.$location.path().startsWith(\"/allloans\"))\r\n ) {\r\n this.enterpriseService.setProductFamily(this.dealDto.ProductFamily);\r\n\r\n this.saveCriteriaReturnUniqueRef().then((response) => {\r\n if (!this.hasError) {\r\n this.sharedCriteriaService.setIsDataLoading(false);\r\n var uniqueRef = response as SaveSearchReturnUniqueRefResponse;\r\n if (window.self == window.top)\r\n sessionStorage.removeItem(\"productType\");\r\n if (response.HasDealClient) {\r\n //The purpose of the route check is to ensure navigation to the correct route when the user lands on the criteria page by clicking 'Change Search' in the side panel.\r\n if (sessionStorage.getItem('previousRoute') == 'referredsearchdeal') {\r\n this.$location.path(`/referredsearchdeal/${response.DealClientUniqueRef}/false`);\r\n sessionStorage.removeItem('previousRoute');\r\n } else {\r\n this.$location.path(`/e/devfinanceresults/${response.DealUniqueRef}`);\r\n }\r\n\r\n } else {\r\n var leadCaptureUrl = `/e/enterpriseleadcapture/${response.DealUniqueRef}`;\r\n leadCaptureUrl = this.isWidget ? `${leadCaptureUrl}/widget` : leadCaptureUrl;\r\n\r\n this.$location.path(leadCaptureUrl);\r\n }\r\n }\r\n });\r\n } else {\r\n this.saveCriteriaReturnId().then((response) => {\r\n if (!this.hasError) {\r\n var dealId = response as number;\r\n if (window.self == window.top)\r\n sessionStorage.removeItem(\"productType\");\r\n if (this.isAdmin || this.isBroker) this.dealService.setShowSearchNameAndUserSelectionModal(true);\r\n this.$location.path(\"/devfinanceresults/\" + dealId);\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n searchDisabled() {\r\n\r\n if (this.progressSection == 1) {\r\n this.progressAmount = \"0%\";\r\n if (\r\n this.dealDto.Locations == null ||\r\n this.dealDto.Locations <= 0 ||\r\n this.showPostcodeErrorMessage\r\n ) {\r\n return true;\r\n }\r\n\r\n if (this.multiPartForm1.$invalid) {\r\n return true;\r\n }\r\n\r\n this.progressAmount = \"33%\";\r\n }\r\n\r\n\r\n\r\n if (this.progressSection == 2) {\r\n\r\n this.progressAmount = \"33%\";\r\n\r\n if (this.multiPartForm1.$invalid) {\r\n return true;\r\n }\r\n\r\n this.progressAmount = \"66%\";\r\n }\r\n\r\n\r\n\r\n if (this.progressSection == 3) {\r\n this.progressAmount = \"66%\";\r\n\r\n if (this.multiPartForm1.$invalid) {\r\n return true;\r\n }\r\n this.progressAmount = \"100%\";\r\n }\r\n\r\n return false;\r\n }\r\n\r\n saveCriteriaReturnId(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.dataSetUpForSave();\r\n\r\n var clientDto = null;\r\n /* if (\r\n !this.isLoggedInUser &&\r\n this.enterpriseUser &&\r\n this.$location.path().startsWith(\"/e/devfinancecriteria\")\r\n ) {\r\n clientDto =\r\n this.sharedCriteriaService.setClientDtoDataForEnterpriseSearch(\r\n this.enterpriseUser,\r\n this.organisation.Id,\r\n clientDto,\r\n );\r\n }*/\r\n\r\n var request: SaveDevFinanceSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.isLoggedInUser ? \"\" : this.orgCode,\r\n ClientId:\r\n !this.isLoggedInUser &&\r\n this.clientId &&\r\n !this.enterpriseUser &&\r\n this.$location.path().startsWith(\"/e/devfinancecriteria\")\r\n ? Number(this.clientId)\r\n : 0,\r\n EnterpriseClientDto: clientDto,\r\n };\r\n\r\n this.devFinanceDealService\r\n .saveDevFinanceSearchReturnsId(request)\r\n .then((response) => {\r\n this.dealDto.Id = response;\r\n\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n if (response.status === 500) {\r\n this.error = response.data.message;\r\n } else {\r\n this.error = 'Something went wrong while searching for loans. Please try again.';\r\n }\r\n this.hasError = true;\r\n this.isSearchStarted = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n saveCriteriaReturnUniqueRef(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.sharedCriteriaService.setIsDataLoading(true);\r\n this.dataSetUpForSave();\r\n\r\n var clientDto = null;\r\n /* if (!this.isLoggedInUser && this.enterpriseUser && this.$location.path().startsWith(\"/e/devfinancecriteria\")) {\r\n clientDto = this.sharedCriteriaService.setClientDtoDataForEnterpriseSearch(this.enterpriseUser, this.brokerageOrg.Id, clientDto);\r\n }*/\r\n\r\n var request: SaveDevFinanceSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.isLoggedInUser ? \"\" : this.orgCode,\r\n ClientId: !this.isWidget &&\r\n !this.isLoggedInUser &&\r\n this.clientId &&\r\n !this.enterpriseUser &&\r\n this.$location.path().startsWith(\"/e/devfinancecriteria\")\r\n ? Number(this.clientId)\r\n : 0,\r\n EnterpriseClientDto: clientDto,\r\n };\r\n\r\n this.devFinanceDealService\r\n .saveDevFinanceSearchReturnsUniqueRef(request)\r\n .then((response) => {\r\n this.dealDto.UniqueRef = response.DealUniqueRef;\r\n\r\n defer.resolve(response as SaveSearchReturnUniqueRefResponse);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n this.sharedCriteriaService.setIsDataLoading(false);\r\n if (response.status === 500) {\r\n this.error = response.data.message;\r\n } else {\r\n this.error = 'Something went wrong while searching for loans. Please try again.';\r\n }\r\n this.hasError = true;\r\n this.isSearchStarted = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n dataSetUpForSave() {\r\n this.sharedCriteriaService.setNewSearch(this.dealDto, this.snapshotDealDto);\r\n\r\n if (this.dealDto.Id == null) {\r\n this.dealDto.Status = CaseStatusEnum.Search;\r\n }\r\n\r\n if (\r\n this.dealDto.Name == null ||\r\n this.dealDto.Name == \"\" ||\r\n this.dealDto.Name == undefined\r\n ) {\r\n this.dealDto.Name = this.sharedCriteriaService.defaultSearchName(\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n\r\n if (\r\n !this.isLoggedInUser &&\r\n this.$location.path().startsWith(\"/e/devfinancecriteria\") &&\r\n this.isBorrower\r\n ) {\r\n this.dealDto.HowManyFlats = this.dealDto.HowManyFlats\r\n ? this.dealDto.HowManyFlats\r\n : 0;\r\n this.dealDto.HowManyHouses = this.dealDto.HowManyHouses\r\n ? this.dealDto.HowManyHouses\r\n : 0;\r\n }\r\n\r\n if (!this.shareDealDto) {\r\n this.shareDealDto = {\r\n DealName: this.sharedCriteriaService.defaultSearchName(\r\n this.dealDto.ProductType,\r\n ),\r\n } as ShareDealDTO;\r\n }\r\n }\r\n\r\n dummysearch() {\r\n this.dealDto.hasPostcode =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 1\r\n ? true\r\n : false;\r\n\r\n if (this.dealDto.hasPostcode) {\r\n this.dealDto.PostcodeSearchString =\r\n this.sharedCriteriaService.getRandomPostcode();\r\n this.getRegionByPostcode();\r\n } else {\r\n this.dealDto.Locations = LocationEnum.London;\r\n }\r\n\r\n this.dealDto.OwnOrPurchase =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 0\r\n ? OwnOrPurchaseEnum.Own\r\n : OwnOrPurchaseEnum.Purchasing;\r\n\r\n this.dealDto.PurchasePrice =\r\n this.sharedCriteriaService.getRandomIntInclusive(5000000, 10000000);\r\n\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n this.dealDto.HasOwnOrPurchase = true;\r\n\r\n let date = new Date();\r\n date.setDate(\r\n date.getDate() -\r\n this.sharedCriteriaService.getRandomIntInclusive(1, 1000),\r\n );\r\n\r\n this.dealDto.OriginalPurchaseDate = date;\r\n this.dealDto.LandTotalOtherCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(10000, 100000);\r\n this.dealDto.Currentvalue =\r\n this.dealDto.PurchasePrice +\r\n this.sharedCriteriaService.getRandomIntInclusive(-10000, 5000000);\r\n } else {\r\n this.dealDto.HasOwnOrPurchase = false;\r\n this.dealDto.PurchaseCosts =\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 1000000);\r\n }\r\n\r\n this.dealDto.EndPropertyType =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 0\r\n ? PropertyTypeEnum.Residential\r\n : PropertyTypeEnum.MixedUse;\r\n\r\n if (this.dealDto.EndPropertyType == PropertyTypeEnum.MixedUse) {\r\n this.dealDto.CommercialGDV =\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 10000000);\r\n }\r\n\r\n this.dealDto.GrossInternalAreaKnown =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 0;\r\n\r\n if (this.dealDto.GrossInternalAreaKnown) {\r\n this.dealDto.AreaUnit =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 0\r\n ? AreaUnitEnum.SquareFeet\r\n : AreaUnitEnum.SquareMeters;\r\n var areaMultiplier =\r\n this.dealDto.AreaUnit == AreaUnitEnum.SquareMeters\r\n ? 1\r\n : this.areaConversionFactor;\r\n this.dealDto.AreaAcquisition =\r\n this.sharedCriteriaService.getRandomIntInclusive(\r\n 100 * areaMultiplier,\r\n 10000 * areaMultiplier,\r\n );\r\n this.dealDto.BuildCostPerArea =\r\n this.sharedCriteriaService.getRandomIntInclusive(\r\n 1000 / areaMultiplier,\r\n 10000 / areaMultiplier,\r\n );\r\n\r\n if (this.dealDto.AreaUnit == AreaUnitEnum.SquareFeet) {\r\n this.buildCostPerSqFt = this.dealDto.BuildCostPerArea;\r\n } else {\r\n this.buildCostPerSqM = this.dealDto.BuildCostPerArea;\r\n }\r\n\r\n this.updateBuildArea();\r\n } else {\r\n this.buildCostIntermediary =\r\n this.sharedCriteriaService.getRandomIntInclusive(100000, 100000000);\r\n }\r\n\r\n this.dealDto.IncludesContingency =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 0;\r\n this.dealDto.Contingency =\r\n this.sharedCriteriaService.getRandomIntInclusive(1, 30) / 100;\r\n this.updateContingency();\r\n\r\n this.dealDto.LoanTermReq = this.sharedCriteriaService.getRandomIntInclusive(\r\n 24,\r\n 100,\r\n );\r\n this.dealDto.GDV =\r\n this.dealDto.PurchasePrice +\r\n this.sharedCriteriaService.getRandomIntInclusive(-10000, 100000000);\r\n this.dealDto.MaxLoanRequired =\r\n this.sharedCriteriaService.getRandomIntInclusive(0, 1) == 0;\r\n\r\n if (this.dealDto.MaxLoanRequired == false) {\r\n this.dealDto.NetLoanRequired =\r\n this.sharedCriteriaService.getRandomIntInclusive(10000, 5000000);\r\n }\r\n }\r\n\r\n hasValidNetLoanRequiredValue() {\r\n if (\r\n !this.dealDto.MaxLoanRequired &&\r\n (this.dealDto.NetLoanRequired == null ||\r\n isNaN(this.dealDto.NetLoanRequired) ||\r\n this.dealDto.NetLoanRequired <= 0)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /*getRegionByPostcode() {\r\n if (\r\n /[a-zA-Z]/.test(this.dealDto.PostcodeSearchString) &&\r\n /[0-9]/.test(this.dealDto.PostcodeSearchString)\r\n ) {\r\n if (this.dealDto.PostcodeSearchString.replace(\" \", \"\").length <= 7) {\r\n this.dataLoading = true;\r\n this.dealService\r\n .getRegionByPostcode(this.dealDto.PostcodeSearchString)\r\n .then((response) => {\r\n if (response.Location != null) {\r\n this.dealDto.Locations = response.Location;\r\n this.showPostcodeErrorMessage = false;\r\n } else {\r\n this.postcodeErrorMsg = response.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n this.dealDto.Locations = null;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"Please enter a more specific postcode to identify the location\";\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n }*/\r\n\r\n updateBuildArea(initial: boolean = false) {\r\n if (this.dealDto.AreaUnit == AreaUnitEnum.SquareFeet) {\r\n this.dealDto.BuildCostPerArea = this.buildCostPerSqFt;\r\n this.buildCostPerSqM = this.convertSqFtToSqM(this.buildCostPerSqFt);\r\n } else {\r\n this.dealDto.BuildCostPerArea = this.buildCostPerSqM;\r\n this.buildCostPerSqFt = this.convertSqMToSqFt(this.buildCostPerSqM);\r\n }\r\n\r\n if (!initial) {\r\n this.calculateBuildCostIntermediary();\r\n }\r\n }\r\n\r\n convertSqMToSqFt(costPerSqM: number): number {\r\n return costPerSqM / this.areaConversionFactor;\r\n }\r\n\r\n convertSqFtToSqM(costPerSqFt: number): number {\r\n return costPerSqFt * this.areaConversionFactor;\r\n }\r\n\r\n calculateBuildCostIntermediary() {\r\n if (\r\n this.dealDto.GrossInternalAreaKnown &&\r\n this.dealDto.BuildCostPerArea > 0 &&\r\n this.dealDto.AreaAcquisition > 0\r\n ) {\r\n this.buildCostIntermediary =\r\n this.dealDto.AreaAcquisition * this.dealDto.BuildCostPerArea;\r\n }\r\n this.calculateContingency();\r\n }\r\n\r\n calculateContingency() {\r\n if (this.dealDto.IncludesContingency) {\r\n this.contingencyValue =\r\n this.buildCostIntermediary -\r\n this.buildCostIntermediary / (1 + Number(this.dealDto.Contingency));\r\n } else {\r\n this.contingencyValue =\r\n this.buildCostIntermediary * this.dealDto.Contingency;\r\n }\r\n this.calculateTotalBuildCost();\r\n }\r\n\r\n calculateTotalBuildCost() {\r\n if (this.dealDto.IncludesContingency) {\r\n this.totalBuildCosts = this.buildCostIntermediary;\r\n this.dealDto.BuildCosts =\r\n Number(this.buildCostIntermediary) - this.contingencyValue;\r\n } else {\r\n this.totalBuildCosts =\r\n Number(this.buildCostIntermediary) + this.contingencyValue;\r\n this.dealDto.BuildCosts = Number(this.buildCostIntermediary);\r\n }\r\n\r\n this.calculateProfessionalCosts();\r\n }\r\n\r\n calculateProfessionalCosts() {\r\n if (this.multiPartForm1?.professionalCosts?.$dirty == false) {\r\n this.dealDto.AdditionalOngoingCosts =\r\n this.totalBuildCosts * this.defaultProfessionalCosts;\r\n }\r\n\r\n this.calculateTotalProjectCosts();\r\n }\r\n\r\n calculateTotalProjectCosts() {\r\n var totalCosts = 0;\r\n\r\n if (isNaN(Number(this.dealDto.AdditionalOngoingCosts)) == false) {\r\n totalCosts += Number(this.dealDto.AdditionalOngoingCosts);\r\n }\r\n\r\n if (isNaN(Number(this.totalBuildCosts)) == false) {\r\n totalCosts += Number(this.totalBuildCosts);\r\n }\r\n\r\n if (\r\n this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own &&\r\n isNaN(Number(this.dealDto.LandTotalOtherCosts)) == false\r\n ) {\r\n totalCosts += Number(this.dealDto.LandTotalOtherCosts);\r\n }\r\n\r\n if (isNaN(Number(this.dealDto.PurchasePrice)) == false) {\r\n totalCosts += Number(this.dealDto.PurchasePrice);\r\n }\r\n\r\n if (\r\n this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing &&\r\n isNaN(Number(this.dealDto.PurchaseCosts)) == false\r\n ) {\r\n totalCosts += Number(this.dealDto.PurchaseCosts);\r\n }\r\n\r\n this.dealDto.TotalProjectCosts = totalCosts;\r\n }\r\n\r\n updateGIA() {\r\n this.calculateBuildCostIntermediary();\r\n }\r\n\r\n updateContingency() {\r\n this.calculateContingency();\r\n }\r\n\r\n toggleKnowsGIA() {\r\n this.dealDto.GrossInternalAreaKnown = !this.dealDto.GrossInternalAreaKnown;\r\n if (this.dealDto.GrossInternalAreaKnown == true) {\r\n this.dealDto.AreaUnit = AreaUnitEnum.SquareFeet;\r\n } else {\r\n this.dealDto.AreaAcquisition = null;\r\n this.dealDto.AreaUnit = null;\r\n this.buildCostPerSqFt = null;\r\n this.buildCostPerSqM = null;\r\n this.dealDto.BuildCostPerArea = null;\r\n }\r\n\r\n this.buildCostIntermediary = null;\r\n this.multiPartForm1.buildCostIntermediary.$setUntouched();\r\n this.updateContingency();\r\n }\r\n\r\n updateCalculatedFields() {\r\n this.reverseBuildCost();\r\n this.reverseBuildCostPerArea();\r\n this.updateBuildArea(true);\r\n this.updateContingency();\r\n }\r\n\r\n reverseBuildCostPerArea() {\r\n if (this.dealDto.AreaUnit == AreaUnitEnum.SquareFeet) {\r\n this.buildCostPerSqFt = this.dealDto.BuildCostPerArea;\r\n } else {\r\n this.buildCostPerSqM = this.dealDto.BuildCostPerArea;\r\n }\r\n }\r\n\r\n reverseBuildCost() {\r\n if (this.dealDto.IncludesContingency == true) {\r\n this.buildCostIntermediary =\r\n Math.round(\r\n this.dealDto.BuildCosts * (1 + this.dealDto.Contingency) * 100,\r\n ) / 100;\r\n } else {\r\n this.buildCostIntermediary = this.dealDto.BuildCosts;\r\n }\r\n }\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n /*onHasPostcodeChange() {\r\n if (!this.dealDto.hasPostcode) {\r\n this.showPostcodeErrorMessage = false;\r\n this.dealDto.PostcodeSearchString = null;\r\n this.dealDto.Locations = this.previouslySelectedLocation;\r\n } else {\r\n this.previouslySelectedLocation = this.dealDto.Locations;\r\n this.dealDto.Locations = null;\r\n }\r\n }*/\r\n\r\n isFieldEmpty(fieldName, isEnum = false) {\r\n if (this.isSubmitted && this.dealDto) {\r\n const fieldValue = this.dealDto[fieldName];\r\n if (fieldName == \"PlanningPermissionType\") {\r\n if (fieldValue == null || fieldValue < 1) {\r\n return true;\r\n }\r\n }\r\n if (fieldValue == null || (isEnum && fieldValue === \"0\")) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isFieldZero(fieldName) {\r\n if (this.isSubmitted && this.dealDto) {\r\n const fieldValue = this.dealDto[fieldName];\r\n if (fieldValue == null || fieldValue === \"0\" || fieldValue === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n showBasedOnMainResidence() {\r\n return this.dealService.showBasedOnMainResidence(this.dealDto);\r\n }\r\n\r\n clickNextButton() {\r\n if (this.progressSection == 1) {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/devfinancecriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"DEVFINANCECRITERIA-PAGE2\");\r\n }\r\n this.progressSection = 2;\r\n } else {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/devfinancecriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"DEVFINANCECRITERIA-PAGE3\");\r\n }\r\n this.progressSection = 3;\r\n }\r\n }\r\n\r\n clickBackButton() {\r\n if (this.progressSection == 3) {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/devfinancecriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"DEVFINANCECRITERIA-PAGE2\");\r\n }\r\n this.progressSection = 2;\r\n } else {\r\n if (!this.isLoggedInUser && (this.$location.path().startsWith(\"/e/devfinancecriteria\") || this.$location.path().startsWith(\"/allloans\"))) {\r\n this.logEvent(\"DEVFINANCECRITERIA-PAGE1\");\r\n }\r\n this.progressSection = 1;\r\n }\r\n }\r\n\r\n isCriteriaFormInValid() {\r\n if (\r\n this.isSearchStarted ||\r\n this.multiPartForm1.$invalid ||\r\n this.dealDto.Locations == null ||\r\n this.dealDto.Locations <= 0 ||\r\n this.hasValidNetLoanRequiredValue() ||\r\n this.showPostcodeErrorMessage ||\r\n this.dealDto.GDV == null ||\r\n this.dealDto.GDV == 0\r\n ) {\r\n if (this.isSearchStarted) {\r\n this.progressAmount = \"100%\";\r\n } else {\r\n this.progressAmount = \"66%\";\r\n }\r\n return true;\r\n } else {\r\n this.progressAmount = \"100%\";\r\n return false;\r\n }\r\n }\r\n\r\n async logEventWithoutDealData() {\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n \"DEVFINANCECRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.Development,\r\n \"\",\r\n 0,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"DEVFINANCECRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.Development,\r\n );\r\n }\r\n } else {\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n \"DEVFINANCECRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.Development,\r\n \"\",\r\n 0,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"DEVFINANCECRITERIA\",\r\n this.orgCode,\r\n \"\",\r\n \"Client\",\r\n this.$routeParams.linkId ? this.$routeParams.linkId : null,\r\n ProductTypeEnum.Development,\r\n );\r\n }\r\n }\r\n }\r\n\r\n getOriginatorInfoForUser() {\r\n if (this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Admin;\r\n this.dealDto.SourceType = DealSourceTypeEnum.Application;\r\n } else if (this.isBroker && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Broker;\r\n } else if (this.isBorrower && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Borrower;\r\n } else if (this.isLender && !this.isAdmin) {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Lender;\r\n this.dealDto.SourceType = DealSourceTypeEnum.Application;\r\n }\r\n\r\n if (window.self == window.top) {\r\n\r\n if (this.isLender) {\r\n this.userService.getCurrentUserLender().then((response) => {\r\n this.dealDto.OriginatorLenderId = response;\r\n });\r\n }\r\n\r\n if (this.isBroker || this.isBorrower) {\r\n this.organisationService.getOrganisation().then((org) => {\r\n if (org != null) {\r\n if (org.Id != 0) this.dealDto.OriginatorOrganisationId = org.Id;\r\n this.dealDto.SourceType = org.IsWhiteLabelled\r\n ? DealSourceTypeEnum.WhitelabelApplication\r\n : DealSourceTypeEnum.Application;\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n getOriginatorInfoForAnonymousUsers() {\r\n this.dealDto.OriginatorRoleType = OriginatorRoleTypeEnum.Borrower;\r\n\r\n if (window.self == window.top) {\r\n this.dealDto.SourceType = DealSourceTypeEnum.Enterprise;\r\n } else {\r\n this.dealDto.SourceType = this.isWidget ? DealSourceTypeEnum.WidgetEnterprise : DealSourceTypeEnum.IFrameEnterprise;\r\n }\r\n\r\n if (this.$routeParams.linkId) {\r\n if (window.self == window.top) {\r\n this.dealDto.SourceType = DealSourceTypeEnum.UniqueLink;\r\n } else {\r\n this.dealDto.SourceType = this.isWidget ? this.$routeParams.linkId == \"0\"? DealSourceTypeEnum.WidgetEnterprise: DealSourceTypeEnum.WidgetUniqueLink : DealSourceTypeEnum.IFrameUniqueLink;\r\n }\r\n }\r\n }\r\n\r\n getRequiredRolesOptions(){\r\n return this.dealService.getRequiredRolesOptions();\r\n }\r\n}\r\n","import { AssistanceSliderComponentController } from \"../components/assistance-slider/assistance-slider\";\r\nimport { BreadcrumbTabsComponentController } from \"../components/breadcrumb-tabs/breadcrumb-tabs\";\r\nimport { CarouselComponentController } from \"../components/carousel/carousel\";\r\nimport { ModalPopupComponentController } from \"../components/modal-popup/modal-popup\";\r\nimport { PaymentToggleController } from \"../components/payment-toggle/payment-toggle\";\r\nimport { RegInfoPanelController } from \"../components/registration-info-panel/reg-info-panel\";\r\nimport { SpinnerController } from \"../components/spinner/spinner\";\r\nimport { TourPopupComponentController } from \"../components/tour-popup/tour-popup\";\r\nimport { VerticalProgressBarController } from \"../components/vertical-progress-bar/vertical-progress-bar\";\r\nimport { BridgingCriteriaController } from \"./controllers/BridgingCriteriaController\";\r\nimport { CommercialCriteriaController } from \"./controllers/CommercialCriteriaController\";\r\nimport { DevFinanceCriteriaController } from \"./controllers/DevFinanceCriteriaController\";\r\n\r\nexport function registerComponents() {\r\n angular\r\n .module(\"ccqapp\")\r\n .component(\"assistanceSlider\", {\r\n bindings: {},\r\n controller: [\r\n \"$location\",\r\n \"LenderService\",\r\n AssistanceSliderComponentController,\r\n ],\r\n templateUrl: \"components/assistance-slider/assistance-slider.html\",\r\n transclude: true,\r\n })\r\n .component(\"breadcrumbTabs\", {\r\n bindings: {\r\n toggleModal: \"=\",\r\n loading: \"=\",\r\n },\r\n controller: [\"$window\", BreadcrumbTabsComponentController],\r\n templateUrl: \"components/breadcrumb-tabs/breadcrumb-tabs.html\",\r\n transclude: true,\r\n })\r\n .component(\"carousel\", {\r\n bindings: {\r\n carouselData: \"<\",\r\n carouselStep: \"<\",\r\n },\r\n controller: [\"$interval\", CarouselComponentController],\r\n templateUrl: \"components/carousel/carousel.html\",\r\n transclude: true,\r\n })\r\n .component(\"modalPopup\", {\r\n bindings: {\r\n toggleModal: \"=\",\r\n loading: \"=\",\r\n formSectionNames: \"<\",\r\n step: \"=\",\r\n closeOnBlur: \"=\",\r\n },\r\n controller: [\"$element\", \"$scope\", ModalPopupComponentController],\r\n templateUrl: \"components/modal-popup/modal-popup.html\",\r\n transclude: true,\r\n })\r\n .component(\"paymentToggle\", {\r\n bindings: {\r\n ngModel: \"=\",\r\n ngChange: \"&\",\r\n },\r\n controller: [\"$rootScope\", \"$element\", PaymentToggleController],\r\n templateUrl: \"components/payment-toggle/payment-toggle.html\",\r\n transclude: true,\r\n })\r\n .component(\"regInfoPanel\", {\r\n bindings: {\r\n heading: \"@\",\r\n subheading: \"@\",\r\n mainheading: \"@\",\r\n },\r\n controller: [\"$rootScope\", \"$element\", RegInfoPanelController],\r\n templateUrl: \"components/registration-info-panel/reg-info-panel.html\",\r\n transclude: true,\r\n })\r\n .component(\"spinner\", {\r\n bindings: {\r\n minValue: \"@\",\r\n maxValue: \"@\",\r\n value: \"=\",\r\n },\r\n controller: [\"$rootScope\", \"$element\", SpinnerController],\r\n templateUrl: \"components/spinner/spinner.html\",\r\n transclude: true,\r\n })\r\n .component(\"tourPopup\", {\r\n bindings: {\r\n tourOrder: \"@\",\r\n tourState: \"<\",\r\n stepEnabled: \"<\",\r\n },\r\n controller: [\"$rootScope\", \"$element\", TourPopupComponentController],\r\n templateUrl: \"components/tour-popup/tour-popup.html\",\r\n transclude: true,\r\n })\r\n .component(\"verticalProgressBar\", {\r\n bindings: {\r\n nodes: \"=\",\r\n currentStep: \"@\",\r\n },\r\n controller: [\"$rootScope\", \"$element\", VerticalProgressBarController],\r\n templateUrl:\r\n \"components/vertical-progress-bar/vertical-progress-bar.html\",\r\n transclude: true,\r\n })\r\n .component(\"bridgingCriteria\", {\r\n controller: BridgingCriteriaController,\r\n templateUrl: \"components/bridging-criteria/bridging-criteria.html\",\r\n transclude: true,\r\n controllerAs: \"ctrl\",\r\n })\r\n .component(\"commercialCriteria\", {\r\n controller: CommercialCriteriaController,\r\n templateUrl: \"components/commercial-criteria/commercial-criteria.html\",\r\n transclude: true,\r\n controllerAs: \"ctrl\",\r\n })\r\n .component(\"devfinanceCriteria\", {\r\n controller: DevFinanceCriteriaController,\r\n templateUrl: \"components/devfinance-criteria/devfinance-criteria.html\",\r\n transclude: true,\r\n controllerAs: \"ctrl\",\r\n });\r\n}\r\n","import { AccountDTO } from \"@js/DTO/AccountDTO.cs.d\";\r\nimport { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AccountService } from \"@js/services/AccountService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\n\r\nexport class AccountsController {\r\n user: ApplicationUserDTO;\r\n performingAction: boolean;\r\n selectedAccount: AccountDTO;\r\n accounts: AccountDTO[];\r\n account: AccountDTO;\r\n photoUploadProgress: number;\r\n import1Message: string = null;\r\n import2Message: string = null;\r\n uploadingPhoto: boolean;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"AuthService\",\r\n \"AccountService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $auth: AuthService,\r\n private $account: AccountService,\r\n ) {\r\n this.performingAction = false;\r\n\r\n this.selectedAccount = null;\r\n\r\n //get all the accounts back\r\n this.FetchAccounts();\r\n }\r\n selectAccount(account: AccountDTO) {\r\n this.selectedAccount = account;\r\n }\r\n\r\n createAccount(): void {\r\n this.selectedAccount = { AccountName: \"New Account\" };\r\n }\r\n\r\n FetchAccounts(): void {\r\n this.performingAction = true;\r\n this.$account\r\n .fetchAll()\r\n .then((response) => {\r\n this.accounts = response;\r\n this.performingAction = false;\r\n })\r\n .catch((response) => {\r\n this.performingAction = false;\r\n });\r\n }\r\n\r\n deleteAccount(): void {\r\n this.$account.delete(this.selectedAccount.Id).then((result: boolean) => {\r\n this.accounts.splice(this.accounts.indexOf(this.selectedAccount), 1);\r\n // this.$toaster.pop('success', \"Deleted account!\", \"The account has been removed from the system.\");\r\n delete this.selectedAccount;\r\n });\r\n }\r\n\r\n updateAccount(): void {\r\n this.performingAction = true;\r\n\r\n this.$account\r\n .addUpdatereturnonlyid(this.selectedAccount)\r\n .then((recID: number) => {\r\n this.performingAction = false;\r\n this.selectedAccount.Id = recID;\r\n if (this.selectedAccount.Id === undefined) {\r\n this.accounts.push(this.selectedAccount);\r\n // this.$toaster.pop('success', \"Created new account!\", this.selectedAccount.AccountName + \" has been added to the system.\");\r\n } else {\r\n // this.$toaster.pop('success', \"Updated account!\", this.selectedAccount.AccountName + \" has been updated.\");\r\n }\r\n });\r\n }\r\n}\r\n","export const enum BillingFrequencyEnum {\r\n Monthly = 1,\r\n Yearly = 2,\r\n OneOff = 3,\r\n None = 4,\r\n}\r\n","export const enum ContractLengthEnum {\r\n None = 0,\r\n Yearly = 1,\r\n TwoYearly = 2,\r\n}\r\n","export const enum PricingFrequencyEnum {\r\n Monthly = 1,\r\n Yearly = 2,\r\n OneOff = 3,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { LicenseAppPackageDTO } from \"@js/DTO/LicenseAppPackageDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { BillingFrequencyEnum } from \"@js/models/enum/BillingFrequencyEnum.cs.d\";\r\nimport { ContractLengthEnum } from \"@js/models/enum/ContractLengthEnum.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { PricingFrequencyEnum } from \"@js/models/enum/PricingFrequencyEnum.cs.d\";\r\nimport { TeamSizeEnum } from \"@js/models/enum/TeamSizeEnum.cs.d\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\nimport { AccountSettingService } from \"@js/services/AccountSettingsService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class AccountSettingsController {\r\n selectedTab: string;\r\n noMoreMails: boolean;\r\n\r\n //Brokers\r\n organisationAdminId: string;\r\n organisationAdmin: ApplicationUserDTO;\r\n organisationAdminUsername: string;\r\n organisationUsers: ApplicationUserDTO[];\r\n organisationUsersExceptAdmin: ApplicationUserDTO[] = [];\r\n userOrganisation: OrganisationDTO;\r\n selectedBroker: ApplicationUserDTO;\r\n currentPassword: string;\r\n newPassword: string;\r\n repeatPassword: string;\r\n\r\n newEmail: string;\r\n repeatEmail: string;\r\n\r\n passwordUpdated: boolean;\r\n emailUpdated: boolean;\r\n allActiveAppPackagePrices: AppPackagePricingDTO[];\r\n allActiveAppPackagePricesForFrequency: AppPackagePricingDTO[];\r\n selectedLicenseAppPackagePrice: LicenseAppPackageDTO;\r\n selectedProduct: AppPackagePricingDTO = null;\r\n\r\n assignedLicense: AppPackagePricingDTO = null;\r\n\r\n isBroker: boolean;\r\n message: string;\r\n showMsgModal: boolean = false;\r\n showBrokerUsers: boolean = false;\r\n addBrokerUsers: boolean = false;\r\n addCustomPrice: boolean = false;\r\n changeInQuantity: boolean = false;\r\n isSelected: boolean = false;\r\n showAssignLicense: boolean = false;\r\n numberOfAssignedLicenses: number = 1;\r\n selectedPricingFrequency: boolean = false;\r\n selectedPricingFrequencyEnum: PricingFrequencyEnum =\r\n PricingFrequencyEnum.Monthly;\r\n showAlertmsg: boolean = false;\r\n showCancelModel: boolean = false;\r\n newBrokerUser: ApplicationUserDTO = {\r\n Id: \"\",\r\n Roles: [\"Introducer\", \"Broker\"],\r\n } as ApplicationUserDTO;\r\n assignLicenseForm: ng.IFormController;\r\n assignCustompriceForm: ng.IFormController;\r\n remaningLicense: number = 0;\r\n dataLoading: boolean = false;\r\n isUpdateClicked: boolean = false;\r\n isSignUpClicked: boolean = false;\r\n selectedUserRole: UserRoleEnum = UserRoleEnum.None;\r\n isAdmin: boolean = false;\r\n selectedOrganisationId: number;\r\n selectedUser: ApplicationUserDTO;\r\n selectedUserName: string = \"\";\r\n currentUser: ApplicationUserDTO;\r\n\r\n //Additional info\r\n additionalInfoText: string;\r\n CurrentTotalAmountToPay: number = 0;\r\n totalAmountToPay: number = 0;\r\n showIncreasingQuantityModal: boolean = false;\r\n showdescringQuantityModal: boolean = false;\r\n customePrice: string;\r\n numberOfLicense: number = 0;\r\n showCustomePricesuccessModal: boolean = false;\r\n newAmountInfoText: string;\r\n showNewAmount: boolean = false;\r\n isCustomPriceApplied: boolean = false;\r\n orderButtonText: string = \"Update\";\r\n orderButtonDisabled: boolean = false;\r\n showOrderButton: boolean = false;\r\n showCancelButton: boolean = false;\r\n billingCycle: PricingFrequencyEnum.Monthly;\r\n\r\n billingFrequencyOptions = [];\r\n teamSizeOptions = [];\r\n leadGenPackage: LicenseAppPackageDTO;\r\n selectedleadGenPackage: LicenseAppPackageDTO;\r\n isAddOnPaid: boolean = false;\r\n isContractChanged: boolean = false;\r\n alertMsg: string;\r\n isAddOnSelected: boolean = false;\r\n whitelabelPrice: number = 0;\r\n showWhiteLabelModal: boolean = false;\r\n newTotalPayment: number = 0;\r\n isSettingPage: boolean = true;\r\n endDate: Date;\r\n\r\n showLeadGenUrlModal: boolean = false;\r\n showLeadGenCancellationModal: boolean = false;\r\n leadGeneratorName: string;\r\n isLegacyLicense: boolean = false;\r\n licenseStatusText: string;\r\n reloadPage: boolean = false;\r\n whiteLabelledUrl: string = \"\";\r\n isMonthlySubscription: boolean = true;\r\n isPageReloadAfterCustomePrice: boolean = false;\r\n\r\n copyPaymentlink: boolean = false;\r\n companyEmailAddress: string;\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"PaymentService\",\r\n \"AccountSettingService\",\r\n \"UserService\",\r\n \"OrganisationService\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"SelectListService\",\r\n ];\r\n\r\n constructor(\r\n private $http: ng.IHttpService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $auth: AuthService,\r\n private $roleService: RoleService,\r\n private $paymentService: PaymentService,\r\n private $accountSettingService: AccountSettingService,\r\n private userService: UserService,\r\n private $organisationService: OrganisationService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private selectListService: SelectListService,\r\n ) {\r\n this.billingFrequencyOptions =\r\n this.selectListService.GetBillingFrequencyOptions();\r\n this.teamSizeOptions = this.selectListService.GetTeamSizeOptions();\r\n this.getWhiteLabelledUrl();\r\n\r\n this.$auth.getCompanyContactUsEmailAddresss().then((response) => {\r\n this.companyEmailAddress = response;\r\n });\r\n\r\n this.$roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n\r\n if (this.$routeParams.userId && this.isAdmin) {\r\n this.userService\r\n .getUserByUserId(this.$routeParams.userId)\r\n .then((response) => {\r\n this.selectedUser = response;\r\n this.selectedUserName = this.selectedUser.UserName;\r\n this.getSelectedPackagesForCurrentuser(this.selectedUserName);\r\n\r\n if (this.selectedUser.IsOrganisationAdmin) {\r\n this.selectedOrganisationId = this.selectedUser.OrganisationId;\r\n this.organisationAdminUsername = this.selectedUser.UserName;\r\n this.$organisationService\r\n .fetch(this.selectedUser.OrganisationId)\r\n .then((organisation) => {\r\n this.userOrganisation = organisation;\r\n this.isAddOnSelected\r\n ? (this.isAddOnPaid = organisation.HasWhiteLabelAddOnPaid)\r\n : (this.isAddOnPaid = this.isAddOnSelected =\r\n organisation.HasWhiteLabelAddOnPaid);\r\n })\r\n .then(() => {\r\n this.getLicenseStatusText();\r\n this.getBrokerUsers(this.selectedOrganisationId);\r\n });\r\n\r\n this.selectedUserRole = UserRoleEnum.Broker;\r\n } else {\r\n this.selectedUserRole = UserRoleEnum.Client;\r\n }\r\n });\r\n } else {\r\n this.$auth.getUpdatedProfile().then((response) => {\r\n this.currentUser = this.selectedUser = response;\r\n this.selectedUserName = this.currentUser.UserName;\r\n this.getSelectedPackagesForCurrentuser(this.currentUser.UserName);\r\n this.getCurrentOrganisation();\r\n });\r\n }\r\n });\r\n\r\n this.selectedTab = this.$routeParams.selectedTab\r\n ? this.$routeParams.selectedTab\r\n : \"license\";\r\n this.leadGeneratorName = this.$cookies.get(\"leadgeneratorname\");\r\n }\r\n\r\n getCurrentOrganisation() {\r\n this.$organisationService.getOrganisation().then((response) => {\r\n this.userOrganisation = response;\r\n this.isAddOnSelected\r\n ? (this.isAddOnPaid = response.HasWhiteLabelAddOnPaid)\r\n : (this.isAddOnPaid = this.isAddOnSelected =\r\n response.HasWhiteLabelAddOnPaid);\r\n this.selectedOrganisationId = this.userOrganisation.Id;\r\n this.getBrokerUsers(this.selectedOrganisationId);\r\n });\r\n }\r\n\r\n getBrokerUsers(orgId): void {\r\n this.userService.getAllOrganisationMembers(orgId).then((response) => {\r\n this.organisationUsers = response;\r\n this.numberOfAssignedLicenses = this.organisationUsers.filter(\r\n (e) => e.SubscriptionStatus > 0,\r\n ).length;\r\n if (\r\n this.selectedLicenseAppPackagePrice &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.PreSubscription &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.None\r\n )\r\n this.remaningLicense =\r\n this.selectedLicenseAppPackagePrice.TotalQuantity -\r\n this.numberOfAssignedLicenses;\r\n });\r\n this.userService.getOrganisationNonAdminUsers(orgId).then((response) => {\r\n this.organisationUsersExceptAdmin = response;\r\n });\r\n }\r\n\r\n applyEmailChange() {\r\n if (\r\n this.newEmail &&\r\n this.repeatEmail &&\r\n this.newEmail === this.repeatEmail\r\n ) {\r\n this.$auth.changeEmail(this.newEmail).then((response) => {\r\n delete this.newEmail;\r\n delete this.repeatEmail;\r\n this.emailUpdated = true;\r\n this.$roleService.goHomeBasedOnUser();\r\n });\r\n }\r\n }\r\n applyPasswordChange() {\r\n if (\r\n this.newPassword &&\r\n this.repeatPassword &&\r\n this.newPassword === this.repeatPassword\r\n ) {\r\n this.$auth\r\n .changePassword(this.currentPassword, this.newPassword)\r\n .then((response) => {\r\n delete this.currentPassword;\r\n delete this.newPassword;\r\n delete this.repeatPassword;\r\n this.passwordUpdated = true;\r\n this.$roleService.goHomeBasedOnUser();\r\n });\r\n }\r\n }\r\n\r\n getAssignedPackage(userName) {\r\n this.$paymentService\r\n .getAllActivePackagePrices(userName)\r\n .then((response) => {\r\n this.allActiveAppPackagePrices = response;\r\n if (\r\n this.selectedLicenseAppPackagePrice &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.PreSubscription &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.None\r\n ) {\r\n var selectedProduct = this.allActiveAppPackagePrices.filter(\r\n (o1) =>\r\n o1.AppPackageId ===\r\n this.selectedLicenseAppPackagePrice.AppPackageId &&\r\n o1.PricingFrequency ===\r\n this.selectedLicenseAppPackagePrice.BillingFrequency &&\r\n o1.ContractLength ==\r\n this.selectedLicenseAppPackagePrice.ContractLength,\r\n );\r\n if (selectedProduct.length > 0) {\r\n this.selectedProduct = selectedProduct.map(\r\n (e) => ((e.Quantity = this.quantity(e.AppPackageId)), e),\r\n )[0];\r\n\r\n this.isMonthlySubscription =\r\n this.selectedProduct.PricingFrequency ==\r\n PricingFrequencyEnum.Monthly\r\n ? true\r\n : false;\r\n\r\n if (this.hasLegacyLicense()) {\r\n this.selectedProduct.PriceAmount =\r\n this.selectedProduct.PricingFrequency ==\r\n PricingFrequencyEnum.Monthly\r\n ? 35\r\n : 350;\r\n this.isLegacyLicense = true;\r\n }\r\n\r\n this.getAddOnPrice(this.selectedProduct.PricingFrequency);\r\n this.getEndDate(this.selectedLicenseAppPackagePrice.ActiveFromDate);\r\n\r\n if (\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaidUp ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PreCancel\r\n ) {\r\n this.assignedLicense = JSON.parse(\r\n JSON.stringify(this.selectedProduct),\r\n );\r\n }\r\n }\r\n } else {\r\n this.selectedProduct = this.allActiveAppPackagePrices[0];\r\n }\r\n });\r\n }\r\n\r\n getSelectedPackagesForCurrentuser(userName: string = \"\") {\r\n this.$accountSettingService\r\n .getSelectedPackagesForCurrentuser(userName)\r\n .then((response) => {\r\n if (response != null) {\r\n this.selectedLicenseAppPackagePrice = response.find(\r\n (p) => !p.AppPackageDto.IsLeadGenerator,\r\n );\r\n this.selectedleadGenPackage = response.find(\r\n (p) => p.AppPackageDto.IsLeadGenerator,\r\n );\r\n }\r\n //Code Review\r\n if (\r\n this.selectedLicenseAppPackagePrice != null &&\r\n this.selectedLicenseAppPackagePrice.PricePerLicense != 0 &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.None\r\n ) {\r\n if (\r\n this.selectedLicenseAppPackagePrice.TotalPricePerCycle >\r\n this.selectedLicenseAppPackagePrice.PricePerLicense *\r\n this.selectedLicenseAppPackagePrice.TotalQuantity\r\n ) {\r\n this.isAddOnSelected = true;\r\n }\r\n }\r\n\r\n this.getAssignedPackage(userName);\r\n var pricingFrequency = this.selectedLicenseAppPackagePrice\r\n ? this.selectedLicenseAppPackagePrice.BillingFrequency\r\n : PricingFrequencyEnum.Monthly;\r\n\r\n if (this.selectedLicenseAppPackagePrice != null) {\r\n this.selectedPricingFrequency =\r\n this.selectedLicenseAppPackagePrice &&\r\n this.selectedLicenseAppPackagePrice?.BillingFrequency ==\r\n BillingFrequencyEnum.Monthly\r\n ? false\r\n : true;\r\n if (this.selectedLicenseAppPackagePrice.IsCustomPriceApplied) {\r\n this.isCustomPriceApplied = true;\r\n }\r\n }\r\n\r\n this.getActivePackagePricesForFrequency(pricingFrequency);\r\n });\r\n }\r\n\r\n getActivePackagePricesForFrequency(pricingFrequency) {\r\n this.$paymentService\r\n .getActivePackagePricesForFrequency(\r\n pricingFrequency,\r\n this.selectedUserRole,\r\n )\r\n .then((response) => {\r\n if (\r\n this.selectedLicenseAppPackagePrice &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.None &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.PreSubscription &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.Cancelled\r\n ) {\r\n this.allActiveAppPackagePricesForFrequency = response.filter(\r\n (al) =>\r\n this.returnContractLength(al.ContractLength) >=\r\n this.returnContractLength(\r\n this.selectedLicenseAppPackagePrice.ContractLength,\r\n ),\r\n );\r\n this.getAddOnPrice(pricingFrequency);\r\n } else {\r\n this.allActiveAppPackagePricesForFrequency = response;\r\n this.getAddOnPrice(\r\n this.selectedPricingFrequency == false\r\n ? PricingFrequencyEnum.Monthly\r\n : PricingFrequencyEnum.Yearly,\r\n );\r\n }\r\n });\r\n }\r\n\r\n callGetActivePackagePricesForFrequency() {\r\n var pricingFrequency: PricingFrequencyEnum =\r\n this.selectedPricingFrequency == false\r\n ? PricingFrequencyEnum.Monthly\r\n : PricingFrequencyEnum.Yearly;\r\n this.getActivePackagePricesForFrequency(pricingFrequency);\r\n }\r\n\r\n quantity(packageId) {\r\n var found = this.selectedLicenseAppPackagePrice.AppPackageId == packageId;\r\n\r\n if (found) {\r\n return this.selectedLicenseAppPackagePrice.TotalQuantity;\r\n } else {\r\n return 1;\r\n }\r\n }\r\n\r\n convertEnumToString(value) {\r\n switch (value) {\r\n case PricingFrequencyEnum.Monthly:\r\n return \"month\";\r\n case PricingFrequencyEnum.Yearly:\r\n return \"year\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n returnSubscriptionStatus(value) {\r\n switch (value) {\r\n case LicenseMasterStatusEnum.PaidUp:\r\n case LicenseMasterStatusEnum.PreCancel:\r\n return \"Paid Up\";\r\n case LicenseMasterStatusEnum.PayFailure:\r\n return \"Pay Failure\";\r\n case LicenseMasterStatusEnum.Cancelled:\r\n return \"Cancelled\";\r\n case LicenseMasterStatusEnum.Unpaid:\r\n return \"Unpaid\";\r\n case LicenseMasterStatusEnum.PaymentProcessing:\r\n return \"Payment Processing\";\r\n case LicenseMasterStatusEnum.Trial:\r\n return \"Trial\";\r\n default:\r\n return \"Unsubscribed\";\r\n }\r\n }\r\n\r\n /*isUpdateRequired() {\r\n if (this.isBroker) {\r\n if (this.selectedProduct && this.oldProduct) {\r\n if (this.selectedProduct != this.oldProduct) {\r\n return this.changeInProduct(true);\r\n } else {\r\n if (this.selectedProduct[0].AppPackageId != this.oldProduct[0].AppPackageId) {\r\n return true;\r\n } else {\r\n if (this.selectedProduct[0].Quantity != this.oldProduct[0].Quantity) {\r\n return this.changeInProduct(true);\r\n } else {\r\n return this.changeInProduct(false);\r\n }\r\n }\r\n\r\n }\r\n } else if (this.selectedProduct != this.oldProduct) {\r\n return this.changeInProduct(true);\r\n }\r\n }\r\n }*/\r\n\r\n managePayment() {\r\n this.$paymentService.createPortalSession().then((response) => {\r\n window.open(response);\r\n });\r\n }\r\n\r\n onClickOfCancel() {\r\n if (\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !this.isDirectDebitActive(\r\n this.selectedLicenseAppPackagePrice.ActiveFromDate,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n this.$paymentService\r\n .isSubscriptionCancelable(\r\n this.selectedLicenseAppPackagePrice.ExternalSubscriptionRef,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.showCancelModel = true;\r\n } else {\r\n this.showAlertmsg = true;\r\n this.alertMsg =\r\n \"Sorry, you can not cancel your subscription at this time since you have committed to a \" +\r\n this.getContractLengthText(\r\n this.assignedLicense.PricingFrequency,\r\n this.assignedLicense.ContractLength,\r\n );\r\n }\r\n });\r\n }\r\n\r\n cancelSubscription(subscriptionId, isLeadGeneratorLicense = false) {\r\n this.dataLoading = true;\r\n this.showCancelModel = false;\r\n this.showLeadGenCancellationModal = false;\r\n this.$paymentService\r\n .cancelSubscription(subscriptionId)\r\n .then((response) => {\r\n this.message = `Your subscription has been successfully cancelled however, you can continue to enjoy using the application until ${response}`;\r\n if (isLeadGeneratorLicense) {\r\n this.selectedleadGenPackage.Status =\r\n LicenseMasterStatusEnum.PreCancel;\r\n } else {\r\n this.selectedLicenseAppPackagePrice.Status =\r\n LicenseMasterStatusEnum.PreCancel;\r\n }\r\n })\r\n .catch(() => {\r\n this.message =\r\n \"There is problem cancelling the subscription, Please try later.\";\r\n })\r\n .finally(() => {\r\n this.showMsgModal = true;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n unCancelSubscription(subscriptionId, isLeadGeneratorLicense = false) {\r\n this.dataLoading = true;\r\n this.$paymentService\r\n .unCancelSubscription(subscriptionId)\r\n .then((response) => {\r\n this.message = `You have successfully renewed your subscription.`;\r\n if (isLeadGeneratorLicense) {\r\n this.selectedleadGenPackage.Status = LicenseMasterStatusEnum.PaidUp;\r\n } else {\r\n this.selectedLicenseAppPackagePrice.Status =\r\n LicenseMasterStatusEnum.PaidUp;\r\n }\r\n })\r\n .catch(() => {\r\n this.message =\r\n \"There is problem renewing your subscription, Please try later.\";\r\n })\r\n .finally(() => {\r\n this.showMsgModal = true;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /*getLicense(selectedUserName) {\r\n this.$paymentService.getLicense(selectedUserName).then((response) => {\r\n this.licenseData = response;\r\n });\r\n }*/\r\n\r\n isPackageSelected(selectedProduct) {\r\n if (selectedProduct && this.selectedProduct) {\r\n var found = this.selectedProduct.Id == selectedProduct.Id;\r\n\r\n if (found) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n isAssignedproduct(product) {\r\n if (product && this.assignedLicense) {\r\n var found = this.assignedLicense.Id == product.Id;\r\n\r\n if (found) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n confirmUpdateSubscription() {\r\n this.message = ``;\r\n if (this.isAddOnPaid && !this.isAddOnSelected) {\r\n if (this.assignedLicense.Quantity == this.selectedProduct.Quantity) {\r\n this.onClickOfAddOnRemove();\r\n return;\r\n } else {\r\n this.message += `You are removing whitelabelling from your subscription. `;\r\n }\r\n } else if (!this.isAddOnPaid && this.isAddOnSelected) {\r\n this.message += `You are adding whitelabelling to your subscription. `;\r\n }\r\n if (this.assignedLicense.Quantity < this.selectedProduct.Quantity) {\r\n this.message += `You are increasing the number of licenses from ${\r\n this.assignedLicense.Quantity\r\n } to ${this.selectedProduct.Quantity} and your ${\r\n this.selectedProduct.PricingFrequency == PricingFrequencyEnum.Monthly\r\n ? \"Monthly\"\r\n : \"Yearly\"\r\n } payment will increase from £${\r\n this.assignedLicense.Quantity * this.assignedLicense.PriceAmount\r\n } to £${\r\n this.selectedProduct.Quantity * this.selectedProduct.PriceAmount\r\n }. Click Proceed to apply this change.`;\r\n this.showIncreasingQuantityModal = true;\r\n } else if (this.assignedLicense.Quantity > this.selectedProduct.Quantity) {\r\n this.message += `You are decreasing the number of licenses from ${this.assignedLicense.Quantity} to ${this.selectedProduct.Quantity}. Are you sure you wish to continue?`;\r\n this.showdescringQuantityModal = true;\r\n } else {\r\n this.showIncreasingQuantityModal = true;\r\n }\r\n }\r\n\r\n updateSubscription() {\r\n this.dataLoading = true;\r\n this.isUpdateClicked = true;\r\n\r\n const updateSubscriptionPromise =\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PreCancel\r\n ? this.$accountSettingService.updatePreCancelSubscription(\r\n [this.selectedProduct],\r\n this.selectedUserName,\r\n this.isAddOnSelected,\r\n true,\r\n )\r\n : this.$accountSettingService.updateSubscription(\r\n [this.selectedProduct],\r\n this.selectedUserName,\r\n this.isAddOnSelected,\r\n );\r\n\r\n updateSubscriptionPromise\r\n .then((response) => {\r\n this.assignedLicense = JSON.parse(JSON.stringify(this.selectedProduct));\r\n if (this.isLegacyLicense) {\r\n if (this.assignedLicense.ContractLength != ContractLengthEnum.None) {\r\n this.isLegacyLicense = false;\r\n }\r\n }\r\n this.numberOfLicense = this.assignedLicense.Quantity;\r\n this.remaningLicense =\r\n this.assignedLicense.Quantity - this.numberOfAssignedLicenses;\r\n // this.getLicense(this.selectedUserName);\r\n this.message = \"Your subscription has been updated successfully.\";\r\n this.isUpdateClicked = false;\r\n this.getEndDate(this.selectedLicenseAppPackagePrice.ActiveFromDate);\r\n this.selectedLicenseAppPackagePrice.ContractLength =\r\n this.selectedProduct.ContractLength;\r\n })\r\n .catch(() => {\r\n this.message =\r\n \"There is problem updating the subscription, Please try later.\";\r\n this.isUpdateClicked = false;\r\n if (this.selectedUserName.length > 0) {\r\n this.getSelectedPackagesForCurrentuser(this.selectedUserName);\r\n } else {\r\n this.getSelectedPackagesForCurrentuser(this.currentUser.UserName);\r\n }\r\n })\r\n .then(() => {\r\n //Check whether addOn needs to be added or removed\r\n /* if (this.isAddOnSelected && !this.isAddOnPaid) {\r\n this.addAddOnToLicense();\r\n } else if (!this.isAddOnSelected && this.isAddOnPaid) {\r\n this.removeAddOnFromLicense();\r\n }*/\r\n })\r\n .finally(() => {\r\n this.callGetActivePackagePricesForFrequency();\r\n this.showMsgModal = true;\r\n this.dataLoading = false;\r\n this.showIncreasingQuantityModal = false;\r\n this.showdescringQuantityModal = false;\r\n this.showWhiteLabelModal = false;\r\n this.showNewAmount = false;\r\n this.isContractChanged = false;\r\n this.changeInProduct(false);\r\n this.isAddOnSelected\r\n ? (this.isAddOnPaid = this.isAddOnSelected = true)\r\n : (this.isAddOnPaid = this.isAddOnSelected = false);\r\n });\r\n }\r\n\r\n closeModal() {\r\n this.showMsgModal = false;\r\n this.message = null;\r\n if (\r\n this.reloadPage ||\r\n this.selectedLicenseAppPackagePrice == null ||\r\n this.isPageReloadAfterCustomePrice\r\n ) {\r\n if (\r\n this.$routeParams.selectedTab ||\r\n this.selectedLicenseAppPackagePrice == null ||\r\n this.isPageReloadAfterCustomePrice\r\n ) {\r\n window.location.reload();\r\n } else {\r\n this.$location.path(\r\n \"/settings/\" + this.$routeParams.userId + \"/leadgenerator\",\r\n );\r\n }\r\n }\r\n }\r\n\r\n createCheckoutSession() {\r\n this.isSignUpClicked = true;\r\n this.$paymentService\r\n .createCheckoutSession(\r\n this.selectedProduct,\r\n this.isAddOnSelected,\r\n this.selectedUserName,\r\n null,\r\n )\r\n .then((response) => {\r\n window.location.assign(response.SessionUrl);\r\n })\r\n .catch(() => {\r\n this.message = \"There is problem signing up, Please try later.\";\r\n this.isSignUpClicked = false;\r\n this.showMsgModal = true;\r\n })\r\n .finally(() => {\r\n this.isSignUpClicked = false;\r\n });\r\n }\r\n\r\n assignLicense(broker) {\r\n this.dataLoading = true;\r\n this.selectedBroker = broker;\r\n this.$accountSettingService\r\n .assignLicense(this.selectedBroker.Id, this.selectedBroker.OrganisationId)\r\n .then((response) => {\r\n if (response) {\r\n this.selectedBroker.SubscriptionStatus =\r\n LicenseMasterStatusEnum.PaidUp;\r\n this.numberOfAssignedLicenses += 1;\r\n this.remaningLicense =\r\n this.assignedLicense.Quantity - this.numberOfAssignedLicenses;\r\n this.message = `Subscription is successfully assigned to ${this.selectedBroker.FullName}.`;\r\n this.showMsgModal = true;\r\n } else {\r\n this.message =\r\n \"There is problem assigning the subscription, Please try later.\";\r\n this.showMsgModal = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.showAlertmsg = false;\r\n });\r\n }\r\n\r\n unAssignLicense(broker) {\r\n this.dataLoading = true;\r\n this.$accountSettingService\r\n .unAssignLicense(broker.Id)\r\n .then((response) => {\r\n if (response) {\r\n broker.SubscriptionStatus = null;\r\n this.numberOfAssignedLicenses -= 1;\r\n this.remaningLicense =\r\n this.assignedLicense.Quantity - this.numberOfAssignedLicenses;\r\n this.message = `Subscription is successfully unassigned to ${broker.FullName}.`;\r\n this.showMsgModal = true;\r\n } else {\r\n this.message =\r\n \"There is problem unassigning the subscription, Please try later.\";\r\n this.showMsgModal = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.showAlertmsg = false;\r\n });\r\n }\r\n\r\n onUpdatingLiceseQuantity() {\r\n if (\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !this.isDirectDebitActive(\r\n this.selectedLicenseAppPackagePrice.ActiveFromDate,\r\n )\r\n ) {\r\n this.selectedProduct.Quantity =\r\n this.selectedLicenseAppPackagePrice.TotalQuantity;\r\n return;\r\n }\r\n\r\n if (\r\n this.selectedProduct.Quantity > this.assignedLicense?.Quantity ||\r\n this.selectedProduct.Quantity < this.assignedLicense?.Quantity ||\r\n this.selectedProduct.Id != this.assignedLicense?.Id\r\n ) {\r\n if (this.numberOfAssignedLicenses > this.selectedProduct.Quantity) {\r\n this.showAlertmsg = true;\r\n this.alertMsg = `You are attempting to downgrade your total number of licences when they are already in use. In order to downgrade, please first unassign licenses via the \"Company broker users\" menu. You can then reduce your total number of licenses and update your subscription.`;\r\n this.selectedProduct.Quantity = this.numberOfAssignedLicenses;\r\n } else {\r\n this.showNewAmount = true;\r\n this.changeInProduct(true);\r\n this.changeInQuantity = true;\r\n this.showAlertmsg = false;\r\n this.alertMsg = null;\r\n this.setTotalAmount();\r\n }\r\n } else if (\r\n this.selectedProduct.Quantity == this.assignedLicense?.Quantity\r\n ) {\r\n this.setTotalAmount();\r\n this.showOrderButton = false;\r\n this.changeInQuantity = false;\r\n this.changeInProduct(false);\r\n this.showAlertmsg = false;\r\n this.alertMsg = null;\r\n }\r\n }\r\n\r\n assignLicenses() {\r\n var assignedLicenseusers = [];\r\n assignedLicenseusers.push(this.newBrokerUser);\r\n this.dataLoading = true;\r\n\r\n this.userService\r\n .registerBrokerUsers(assignedLicenseusers, this.selectedUserName)\r\n .then((response: string) => {\r\n if (response.length == 0) {\r\n this.message = `Successfully added and assigned a license to ${assignedLicenseusers[0].FirstName} ${assignedLicenseusers[0].LastName}`;\r\n this.showMsgModal = true;\r\n this.newBrokerUser = {\r\n Id: \"\",\r\n Roles: [\"Introducer\", \"Broker\"],\r\n } as ApplicationUserDTO;\r\n this.assignLicenseForm.$setPristine();\r\n this.assignLicenseForm.$setUntouched();\r\n this.getBrokerUsers(this.selectedOrganisationId);\r\n } else {\r\n this.message = response;\r\n this.showMsgModal = true;\r\n this.newBrokerUser = {\r\n Id: \"\",\r\n Roles: [\"Introducer\", \"Broker\"],\r\n } as ApplicationUserDTO;\r\n this.assignLicenseForm.$setPristine();\r\n this.assignLicenseForm.$setUntouched();\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n cancelChanges() {\r\n this.changeInProduct(false);\r\n this.selectedProduct = JSON.parse(JSON.stringify(this.assignedLicense));\r\n if (this.hasLegacyLicense()) {\r\n this.selectedProduct.PriceAmount =\r\n this.selectedProduct.PricingFrequency == PricingFrequencyEnum.Monthly\r\n ? 35\r\n : 350;\r\n this.isLegacyLicense = true;\r\n this.whitelabelPrice = 0;\r\n }\r\n this.isAddOnSelected = this.isAddOnPaid;\r\n this.showAlertmsg = false;\r\n this.showdescringQuantityModal = false;\r\n this.showIncreasingQuantityModal = false;\r\n this.showWhiteLabelModal = false;\r\n this.showNewAmount = false;\r\n this.isContractChanged = false;\r\n }\r\n\r\n setTotalAmount() {\r\n this.newTotalPayment =\r\n this.selectedProduct.PriceAmount * this.selectedProduct.Quantity;\r\n }\r\n\r\n goToCompanySettings() {\r\n this.$location.path(\"/Organisations\");\r\n }\r\n\r\n assignCustomPrice() {\r\n this.dataLoading = true;\r\n this.isCustomPriceApplied = true;\r\n\r\n if (\r\n this.selectedLicenseAppPackagePrice != null &&\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PayFailure\r\n ) {\r\n this.message = `Custom price can't be applied for license with status 'Incomplete'.`;\r\n this.dataLoading = false;\r\n this.showMsgModal = true;\r\n return;\r\n }\r\n\r\n const customPricePromise =\r\n this.selectedLicenseAppPackagePrice != null &&\r\n (this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaidUp ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PreCancel ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.Unpaid)\r\n ? this.$accountSettingService.assignCustomePrice(\r\n this.customePrice,\r\n this.selectedProduct.Quantity,\r\n this.selectedUser.OrganisationId,\r\n this.isAddOnSelected,\r\n this.isMonthlySubscription,\r\n )\r\n : this.$accountSettingService.offerCustomPrice(\r\n this.customePrice,\r\n this.selectedProduct.Quantity,\r\n this.selectedUser.OrganisationId,\r\n this.isAddOnSelected,\r\n this.isMonthlySubscription,\r\n );\r\n\r\n customPricePromise\r\n .then((response) => {\r\n if (response) {\r\n this.message = `Custom price has been applied successfully.`;\r\n this.showMsgModal = true;\r\n this.selectedLicenseAppPackagePrice.TotalPricePerCycle = Number(\r\n this.customePrice,\r\n );\r\n } else {\r\n this.message =\r\n \"There is problem assigning the custom price, Please try later.\";\r\n this.showMsgModal = true;\r\n this.isCustomPriceApplied = false;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.customePrice = null;\r\n this.assignCustompriceForm.$setPristine();\r\n this.assignCustompriceForm.$setUntouched();\r\n this.isPageReloadAfterCustomePrice = true;\r\n });\r\n }\r\n\r\n assignStandardPrice() {\r\n this.dataLoading = true;\r\n this.$accountSettingService\r\n .assignStandardPrice(this.selectedUser.OrganisationId)\r\n .then((response) => {\r\n if (response) {\r\n this.message = `Standard price has been applied successfully.`;\r\n this.showMsgModal = true;\r\n this.isCustomPriceApplied = false;\r\n } else {\r\n this.message =\r\n \"There is problem assigning the standard price, Please try later.\";\r\n this.showMsgModal = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n changeInProduct(value) {\r\n if (\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaidUp ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PreCancel ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing\r\n ) {\r\n this.showOrderButton = value;\r\n this.showCancelButton = value;\r\n }\r\n }\r\n\r\n orderButton() {\r\n if (this.isContractChanged) {\r\n this.confirmContractLengthChange();\r\n } else {\r\n this.confirmUpdateSubscription();\r\n }\r\n }\r\n\r\n cancelButton() {\r\n this.cancelChanges();\r\n }\r\n\r\n offerLeadGeneratorLicense() {\r\n this.dataLoading = true;\r\n if (this.userOrganisation != null) {\r\n this.leadGenPackage.LicenseMasterId =\r\n this.userOrganisation.LicenseMasterId;\r\n }\r\n this.$accountSettingService\r\n .offerLeadGeneratorLicense(this.leadGenPackage)\r\n .then((response) => {\r\n if (response) {\r\n this.message =\r\n this.leadGeneratorName +\r\n ` license offer email has been sent to ${this.userOrganisation.Name} admin.`;\r\n this.showMsgModal = true;\r\n this.reloadPage = true;\r\n } else {\r\n this.message =\r\n \"There is problem assigning the offer for \" +\r\n this.leadGeneratorName +\r\n \". Please contact Brickflow.\";\r\n this.showMsgModal = true;\r\n }\r\n })\r\n .then(() => {\r\n return this.$organisationService.saveOrganisation(\r\n this.userOrganisation,\r\n );\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n onSelectingAddon(selected: boolean) {\r\n if (\r\n this.selectedLicenseAppPackagePrice != null &&\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !this.isDirectDebitActive(\r\n this.selectedLicenseAppPackagePrice.ActiveFromDate,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n this.isAddOnSelected = selected;\r\n this.changeInProduct(\r\n this.isAddOnPaid != this.isAddOnSelected ||\r\n this.assignedLicense.Quantity != this.selectedProduct.Quantity,\r\n );\r\n }\r\n\r\n onClickOfAddOnRemove() {\r\n if (\r\n this.selectedLicenseAppPackagePrice != null &&\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !this.isDirectDebitActive(\r\n this.selectedLicenseAppPackagePrice.ActiveFromDate,\r\n )\r\n ) {\r\n return;\r\n }\r\n this.showWhiteLabelModal = true;\r\n }\r\n\r\n /* addAddOnToLicense() {\r\n if ((this.selectedLicenseAppPackagePrice == null) || (this.selectedLicenseAppPackagePrice != null && (this.selectedLicenseAppPackagePrice.Status == LicenseMasterStatusEnum.PreSubscription || this.selectedLicenseAppPackagePrice.Status == LicenseMasterStatusEnum.None || this.selectedLicenseAppPackagePrice.Status == LicenseMasterStatusEnum.Cancelled))) {\r\n this.isAddOnSelected = true;\r\n } else if (this.selectedLicenseAppPackagePrice.Status == LicenseMasterStatusEnum.PayFailure) {\r\n this.alertMsg = \"Please pay your pending payment to update subscription.\"\r\n this.showAlertmsg = true;\r\n this.changeInQuantity = false;\r\n this.isContractChanged = true;\r\n }\r\n else {\r\n this.dataLoading = true;\r\n this.$accountSettingService.addAddOnToLicense(this.userOrganisation.Id).then((response) => {\r\n if (response) {\r\n this.isAddOnPaid = this.isAddOnSelected = true;\r\n } else {\r\n this.message += \"\\nThere is problem adding Add-on, Please try later.\"\r\n }\r\n }).finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n removeAddOnFromLicense() {\r\n if ((this.selectedLicenseAppPackagePrice == null) || (this.selectedLicenseAppPackagePrice != null && (this.selectedLicenseAppPackagePrice.Status == LicenseMasterStatusEnum.PreSubscription || this.selectedLicenseAppPackagePrice.Status == LicenseMasterStatusEnum.None || this.selectedLicenseAppPackagePrice.Status == LicenseMasterStatusEnum.Cancelled ))) {\r\n this.isAddOnSelected = false;\r\n this.showWhiteLabelModal = false;\r\n } else if (this.selectedLicenseAppPackagePrice.Status == LicenseMasterStatusEnum.PayFailure) {\r\n this.alertMsg = \"Please pay your pending payment to update subscription.\"\r\n this.showAlertmsg = true;\r\n this.changeInQuantity = false;\r\n this.isContractChanged = true;\r\n }\r\n else {\r\n this.dataLoading = true;\r\n this.$accountSettingService.removeAddOnFromLicense(this.userOrganisation.Id).then((response) => {\r\n if (response) {\r\n this.isAddOnPaid = this.isAddOnSelected = false;\r\n } else {\r\n this.message += \"\\nThere is problem removing a Add-on, Please try later.\"\r\n this.showMsgModal = true;\r\n }\r\n }).finally(() => {\r\n this.dataLoading = false;\r\n this.showWhiteLabelModal = false;\r\n });\r\n }\r\n }*/\r\n\r\n onSelectingPackage(product: AppPackagePricingDTO) {\r\n if (\r\n this.selectedLicenseAppPackagePrice != null &&\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !this.isDirectDebitActive(\r\n this.selectedLicenseAppPackagePrice.ActiveFromDate,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n this.selectedLicenseAppPackagePrice == null ||\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.PayFailure\r\n ) {\r\n this.selectedProduct = product;\r\n if (this.assignedLicense)\r\n this.selectedProduct.Quantity = this.assignedLicense.Quantity;\r\n if (\r\n !this.assignedLicense ||\r\n this.selectedProduct.Id != this.assignedLicense.Id\r\n ) {\r\n if (\r\n this.selectedProduct.Id != this.assignedLicense.Id &&\r\n this.isLegacyLicense\r\n ) {\r\n this.getAddOnPrice(this.selectedProduct.PricingFrequency);\r\n }\r\n this.isContractChanged = true;\r\n this.changeInProduct(true);\r\n this.showAlertmsg = false;\r\n this.alertMsg = null;\r\n } else {\r\n this.isContractChanged = false;\r\n if (this.hasLegacyLicense()) {\r\n this.selectedProduct.PriceAmount =\r\n this.selectedProduct.PricingFrequency ==\r\n PricingFrequencyEnum.Monthly\r\n ? 35\r\n : 350;\r\n this.whitelabelPrice = 0;\r\n this.isLegacyLicense = true;\r\n this.isAddOnSelected = true;\r\n }\r\n this.changeInProduct(false);\r\n this.showAlertmsg = false;\r\n this.alertMsg = null;\r\n }\r\n } else {\r\n this.alertMsg = \"Please pay your pending payment to change the contract.\";\r\n this.showAlertmsg = true;\r\n this.changeInQuantity = false;\r\n this.isContractChanged = true;\r\n }\r\n }\r\n\r\n confirmContractLengthChange() {\r\n this.message = `Are you sure you wish to continue?`;\r\n this.showMsgModal = true;\r\n }\r\n\r\n returnContractLength(value) {\r\n switch (value) {\r\n case ContractLengthEnum.TwoYearly:\r\n return 2;\r\n case ContractLengthEnum.Yearly:\r\n return 1;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n getAddOnPrice(frequency: PricingFrequencyEnum) {\r\n if (this.hasLegacyLicense()) {\r\n this.whitelabelPrice = 0;\r\n } else {\r\n this.$paymentService.getWhitelabelPrice(frequency).then((response) => {\r\n this.whitelabelPrice = response;\r\n });\r\n }\r\n }\r\n\r\n convertEnumToStringForLeadGenerator(value) {\r\n switch (value) {\r\n case PricingFrequencyEnum.Monthly:\r\n return \"Monthly\";\r\n case PricingFrequencyEnum.Monthly:\r\n return \"Monthly\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n calculateTotal(\r\n product: AppPackagePricingDTO,\r\n isUpdated: boolean = false,\r\n ): number {\r\n var total = Number(product ? product?.Quantity * product?.PriceAmount : 0);\r\n\r\n if (!isUpdated) {\r\n if (!this.isLegacyLicense) {\r\n total += Number(this.isAddOnPaid ? this.whitelabelPrice : 0);\r\n }\r\n }\r\n\r\n if (isUpdated) {\r\n total += Number(this.isAddOnSelected ? this.whitelabelPrice : 0);\r\n }\r\n\r\n return total;\r\n }\r\n\r\n showLeadeGeneratorForm() {\r\n if (\r\n this.selectedleadGenPackage &&\r\n this.selectedleadGenPackage.Status == LicenseMasterStatusEnum.Offered\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n showLeadeGeneratorPackage() {\r\n if (\r\n this.selectedleadGenPackage &&\r\n this.selectedleadGenPackage.Status != LicenseMasterStatusEnum.Offered\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n acceptLeadGenLicense() {\r\n this.dataLoading = true;\r\n this.$paymentService\r\n .createCheckoutSessionForLeadGen(this.selectedleadGenPackage)\r\n .then((response) => {\r\n window.location.assign(response.SessionUrl);\r\n })\r\n .catch(() => {\r\n this.message = \"There is problem signing up, Please try later.\";\r\n this.showMsgModal = true;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n createCheckoutForCustomPrice() {\r\n this.dataLoading = true;\r\n this.isSignUpClicked = true;\r\n this.$paymentService\r\n .createCheckoutSessionForCustomPrice(\r\n this.selectedLicenseAppPackagePrice,\r\n this.isAddOnSelected,\r\n this.selectedUserName,\r\n null,\r\n )\r\n .then((response) => {\r\n if (this.copyPaymentlink) {\r\n navigator.clipboard.writeText(response.SessionUrl);\r\n this.message = \"Code has been copied to the clipboard\";\r\n this.showMsgModal = true;\r\n this.copyPaymentlink = false;\r\n } else {\r\n window.location.assign(response.SessionUrl);\r\n }\r\n })\r\n .catch(() => {\r\n this.message = \"There is problem signing up, Please try later.\";\r\n this.isSignUpClicked = false;\r\n this.showMsgModal = true;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.isSignUpClicked = false;\r\n });\r\n }\r\n\r\n cancelLeadGeneratorOffer() {\r\n this.$accountSettingService\r\n .cancelLeadGeneratorOffer(this.selectedleadGenPackage.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.message = this.leadGeneratorName + ` offer has been cancelled.`;\r\n this.showMsgModal = true;\r\n this.leadGenPackage = null;\r\n this.reloadPage = true;\r\n } else {\r\n this.message =\r\n \"There is problem canceling the offer, Please try later.\";\r\n this.showMsgModal = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n showAssignLicenseSection() {\r\n if (\r\n (this.remaningLicense >= 1 &&\r\n this.selectedLicenseAppPackagePrice &&\r\n (this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaidUp ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PreCancel ||\r\n this.selectedLicenseAppPackagePrice.Status ==\r\n LicenseMasterStatusEnum.PaymentProcessing)) ||\r\n this.userOrganisation?.IsOnFreeTrial\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n getContractLengthText(\r\n frequency: PricingFrequencyEnum,\r\n contractLength: number,\r\n ) {\r\n if (contractLength == 1) {\r\n return \"1 Year Plan\";\r\n } else if (contractLength == 2) {\r\n return \"2 Year Plan\";\r\n } else {\r\n return frequency == PricingFrequencyEnum.Monthly\r\n ? \"Monthly Plan\"\r\n : \"Annual Plan\";\r\n }\r\n }\r\n\r\n returnNumberOfLicenseText(product) {\r\n return this.selectedProduct.Quantity > 1\r\n ? `${this.selectedProduct.Quantity} licenses`\r\n : `${this.selectedProduct.Quantity} license`;\r\n }\r\n\r\n isDirectDebitActive(activeFromDate) {\r\n var currentDate = new Date();\r\n var newDate = new Date(\r\n activeFromDate.getFullYear(),\r\n activeFromDate.getMonth(),\r\n activeFromDate.getDate() + 7,\r\n );\r\n\r\n return currentDate > newDate;\r\n }\r\n\r\n getTeamSizeDescription(teamSizeEnum: TeamSizeEnum) {\r\n var teamSizeOptions = this.selectListService.GetTeamSizeOptions();\r\n\r\n var teamSizeInfo = teamSizeOptions.find(\r\n (option) => option.key == teamSizeEnum,\r\n );\r\n if (teamSizeInfo) {\r\n return teamSizeInfo.displayName;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n generateButtonCode() {\r\n if (\r\n this.$organisationService.hasValidWhitelabelProperties(\r\n this.userOrganisation,\r\n )\r\n ) {\r\n this.message = `${this.whiteLabelledUrl}${this.userOrganisation.OrganisationCode}#!/e/devfinancecriteria/`;\r\n this.showLeadGenUrlModal = true;\r\n } else {\r\n this.message =\r\n \"To access your \" +\r\n this.leadGeneratorName +\r\n \" URL please ensure you have an active White Label add-on and you have completed the URL Company Code in your company settings (under White Label)\";\r\n this.showMsgModal = true;\r\n }\r\n }\r\n\r\n generateButtonAllLoanCode() {\r\n if (\r\n this.$organisationService.hasValidWhitelabelProperties(\r\n this.userOrganisation,\r\n )\r\n ) {\r\n this.message = `${this.whiteLabelledUrl}${this.userOrganisation.OrganisationCode}#!/allloans`;\r\n this.showLeadGenUrlModal = true;\r\n } else {\r\n this.showMsgModal = true;\r\n this.message =\r\n \"To access your \" +\r\n this.leadGeneratorName +\r\n \" URL please ensure you have an active White Label add-on and you have completed the URL Company Code in your company settings (under White Label)\";\r\n }\r\n }\r\n\r\n generateButtonBridgingLoanCode() {\r\n if (\r\n this.$organisationService.hasValidWhitelabelProperties(\r\n this.userOrganisation,\r\n )\r\n ) {\r\n this.message = `${this.whiteLabelledUrl}${this.userOrganisation.OrganisationCode}#!/e/bridgingcriteria`;\r\n this.showLeadGenUrlModal = true;\r\n } else {\r\n this.showMsgModal = true;\r\n this.message =\r\n \"To access your \" +\r\n this.leadGeneratorName +\r\n \" URL please ensure you have an active White Label add-on and you have completed the URL Company Code in your company settings (under White Label)\";\r\n }\r\n }\r\n\r\n generateButtonCommercialLoanCode() {\r\n if (\r\n this.$organisationService.hasValidWhitelabelProperties(\r\n this.userOrganisation,\r\n )\r\n ) {\r\n this.message = `${this.whiteLabelledUrl}${this.userOrganisation.OrganisationCode}#!/e/commercialcriteria`;\r\n this.showLeadGenUrlModal = true;\r\n } else {\r\n this.showMsgModal = true;\r\n this.message =\r\n \"To access your \" +\r\n this.leadGeneratorName +\r\n \" URL please ensure you have an active White Label add-on and you have completed the URL Company Code in your company settings (under White Label)\";\r\n }\r\n }\r\n\r\n copyButtonCodeToClipBoard() {\r\n this.showLeadGenUrlModal = false;\r\n navigator.clipboard.writeText(this.message);\r\n this.message = \"Code has been copied to the clipboard\";\r\n this.showMsgModal = true;\r\n }\r\n\r\n getEndDate(startDate: Date) {\r\n const startDateCopy: Date = new Date(startDate.getTime());\r\n\r\n switch (this.selectedProduct.ContractLength) {\r\n case ContractLengthEnum.Yearly:\r\n startDateCopy.setFullYear(startDateCopy.getFullYear() + 1);\r\n this.endDate = startDateCopy;\r\n break;\r\n case ContractLengthEnum.TwoYearly:\r\n startDateCopy.setFullYear(startDateCopy.getFullYear() + 2);\r\n this.endDate = startDateCopy;\r\n break;\r\n default:\r\n this.endDate = null;\r\n break;\r\n }\r\n }\r\n\r\n showPaymentDetailsButton() {\r\n if (\r\n (this.selectedLicenseAppPackagePrice != null &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.PreSubscription &&\r\n this.selectedLicenseAppPackagePrice.Status !=\r\n LicenseMasterStatusEnum.None) ||\r\n (this.selectedleadGenPackage != null &&\r\n this.selectedleadGenPackage.Status !=\r\n LicenseMasterStatusEnum.PreSubscription &&\r\n this.selectedleadGenPackage.Status != LicenseMasterStatusEnum.None &&\r\n this.selectedleadGenPackage.Status != LicenseMasterStatusEnum.Offered)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n bookCall() {\r\n window.open(\r\n \"https://brickflow.com/brokers/brickflow-enterprise/book-a-demo\",\r\n );\r\n }\r\n\r\n hasLegacyLicense() {\r\n if (\r\n (this.isLegacyLicense &&\r\n this.selectedProduct &&\r\n this.selectedProduct.ContractLength == ContractLengthEnum.None) ||\r\n (this.userOrganisation &&\r\n this.selectedLicenseAppPackagePrice &&\r\n this.userOrganisation.IsLegacyLicense &&\r\n this.selectedLicenseAppPackagePrice.ContractLength ==\r\n ContractLengthEnum.None &&\r\n (!this.assignedLicense ||\r\n this.selectedProduct.Id == this.assignedLicense.Id))\r\n ) {\r\n return true;\r\n } else {\r\n false;\r\n }\r\n }\r\n\r\n getLicenseStatusText() {\r\n this.allActiveAppPackagePrices = [];\r\n this.userService\r\n .getLicenseStatusText(this.organisationAdminUsername)\r\n .then((response) => {\r\n this.licenseStatusText = response;\r\n });\r\n }\r\n\r\n getWhiteLabelledUrl() {\r\n this.$auth.getWhiteLabelledUrl().then((response) => {\r\n this.whiteLabelledUrl = response;\r\n });\r\n }\r\n\r\n gotoBrickflowPricingPrice() {\r\n window.open(\"https://brickflow.com/pricing\");\r\n }\r\n}\r\n","import { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\n\r\nexport class AgentLandingController {\r\n caseId: number;\r\n case: CaseDTO;\r\n disablepayment: boolean = false;\r\n message: string = \"\";\r\n modal: boolean = false;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$scope\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"RoleService\",\r\n \"$window\",\r\n ];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private roleService: RoleService,\r\n private $window: ng.IWindowService,\r\n ) {\r\n //Check if the user is logged in\r\n if (\r\n this.$cookies.get(\"access_token\") != null ||\r\n this.$cookies.get(\"access_token\") != undefined\r\n ) {\r\n if (this.roleService.isAdminUser) {\r\n this.$location.path(\"/dashboard\");\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n }\r\n }\r\n\r\n goToRegistrationPage() {\r\n this.$location.path(\"/registerintroducer\");\r\n }\r\n\r\n goToCriteriaPage() {\r\n this.$location.path(\"/criteria/0/0/1\");\r\n }\r\n\r\n goToLoginPage() {\r\n this.$location.path(\"/login\");\r\n }\r\n\r\n mailForMarketing() {\r\n this.$window.location.assign(\"mailto:john@brickflow.com\");\r\n }\r\n}\r\n","import { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { OrganisationLinkDTO } from \"@js/DTO/OrgnisationLinkDTO.cs.d\";\r\nimport { LinkTypeEnum } from \"@js/models/enum/LinkTypeEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { SharedCriteriaService } from \"@js/services/Deal/SharedCriteriaService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\n\r\nexport class AllLoansLandingController {\r\n isLoggedInUser: boolean = false;\r\n totalLenders: number = 0;\r\n isBorrower: boolean = false;\r\n orgCode: string;\r\n organisationLink: OrganisationLinkDTO;\r\n previewContent: boolean = false;\r\n organisation: OrganisationDTO;\r\n\r\n //error message to enterprise client when organisation does not have a valid permission\r\n noPermissionErrorMsg: string = \"\";\r\n dataLoading: boolean = false;\r\n\r\n isCommercialOwnerOccupiedActive: boolean = false;\r\n\r\n showHelpModal: boolean = false;\r\n headerProductFamily: ProductFamilyEnum = ProductFamilyEnum.None;\r\n enterpriseLinkLogo: string;\r\n showBridgingOption: boolean = false;\r\n showCommercialOption: boolean = false;\r\n showDevFinaceOption: boolean = true;\r\n isBridgingDisabled: boolean = false;\r\n isCommercialDisabled: boolean = false;\r\n\r\n isWidget: boolean = false;\r\n showCriteriaSection: boolean = false;\r\n isMobileView: boolean = false;\r\n\r\n productFamilyType = ProductFamilyEnum.None;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$q\",\r\n \"AuthService\",\r\n \"OrganisationService\",\r\n \"LenderService\",\r\n \"EventLogService\",\r\n \"OrganisationLinkService\",\r\n \"SharedCriteriaService\",\r\n \"UserService\",\r\n \"$rootScope\",\r\n \"RoleService\"\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n protected $q: ng.IQService,\r\n private $auth: AuthService,\r\n private organisationService: OrganisationService,\r\n private lenderService: LenderService,\r\n private eventLogService: EventLogService,\r\n private organisationLinkService: OrganisationLinkService,\r\n private sharedCriteriaService: SharedCriteriaService,\r\n private userService: UserService,\r\n public $rootScope: ng.IRootScopeService,\r\n public roleService: RoleService\r\n ) {\r\n\r\n if (window.self == window.top) {\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n }\r\n\r\n if ($cookies.get(\"access_token\")) {\r\n this.roleService.isClientUser().then((isClient: boolean) => {\r\n if (isClient && this.orgCode && this.orgCode != 'undefined' && this.orgCode != '') {\r\n this.userService.GetDefaultBrokerOrganisation().then((userDefaultBrokerOrg: OrganisationDTO) => {\r\n if (userDefaultBrokerOrg && userDefaultBrokerOrg.OrganisationCode != this.orgCode) {\r\n let broadcastResult = this.$rootScope.$broadcast(\"logout\");\r\n\r\n if (broadcastResult.defaultPrevented) return;\r\n\r\n this.$auth.logout(false);\r\n window.location.reload();\r\n }\r\n });\r\n }\r\n })\r\n\r\n }\r\n\r\n if (!$cookies.get(\"access_token\") && this.$routeParams.linkType)\r\n this.productFamilyType = this.getProductFamilyByLinkType();\r\n\r\n\r\n if (this.productFamilyType == ProductFamilyEnum.None || this.productFamilyType == ProductFamilyEnum.Commercial) {\r\n this.$auth.isCommercialOwnerOccupiedActive().then((response) => {\r\n this.isCommercialOwnerOccupiedActive = response;\r\n });\r\n }\r\n\r\n if (this.$routeParams.context == 'widget' && window.self != window.top) {\r\n if (!(this.$rootScope as any).previousRoute.startsWith(\"/e/enterpriseleadcapture\")) {\r\n this.organisationService.sendDataToParent(\"height\", \"170px\");\r\n }\r\n this.isWidget = true;\r\n } else if (window.innerWidth <= 480 && window.self == window.top) {\r\n this.isMobileView = true;\r\n }\r\n\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n this.setProductButtonStateAndVisibility();\r\n\r\n } else if (this.$location.path().startsWith(\"/allloans\") && !$cookies.get(\"access_token\")) {\r\n this.sharedCriteriaService.storeEnterpriseLinkType(this.$routeParams.linkType ? this.$routeParams.linkType.toString() : LinkTypeEnum.AllLoans.toString());\r\n\r\n\r\n this.organisationService\r\n .getOrgByUrlIfOrgHasEnterpriseSearchPermission(\r\n this.orgCode,\r\n this.productFamilyType,\r\n this.$routeParams.linkId,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.organisation = response;\r\n this.getNumberOfLenders(this.organisation.Id);\r\n this.orgCode = response.OrganisationCode;\r\n this.showBridgingOption = response.HasBridging;\r\n this.showCommercialOption = response.HasCommercialMortgage;\r\n\r\n if ((this.isWidget && this.organisation.HasWidget) || !this.isWidget) {\r\n if (!this.isWidget || ((this.$rootScope as any).previousRoute.startsWith(\"/e/enterpriseleadcapture\") && this.isWidget)) this.selectDefaultProductFamily();\r\n this.logEvent();\r\n var imgs = document.getElementsByTagName(\"img\");\r\n\r\n if (this.$routeParams.linkId && this.$routeParams.linkId != \"0\") {\r\n this.organisationLinkService\r\n .getOrganisationLinkLogoByLinkIdAndLogPageLoadEvent(\r\n this.$routeParams.linkId\r\n )\r\n .then((logoUrl) => {\r\n if (logoUrl) imgs[0].src = this.enterpriseLinkLogo = logoUrl;\r\n });\r\n } else {\r\n this.enterpriseLinkLogo = imgs[0].src;\r\n }\r\n } else {\r\n this.organisationService.getOrganisationAdminByOrgCode(this.orgCode).then((admin) => {\r\n this.noPermissionErrorMsg = admin ? `We are unable to compare loans right now. Please contact your broker: ${admin.Email}.` :\r\n \"We are unable to compare loans right now. Please contact your broker.\";\r\n })\r\n }\r\n } else {\r\n this.noPermissionErrorMsg =\r\n \"We are unable to compare loans right now. Please contact your broker.\";\r\n }\r\n });\r\n }\r\n\r\n //This event is added to navigate user to devfinance critera on click of devfinance link from helper text, when user is on Bare Land path for purchase/refinance search.\r\n let productFamilySelectionUnregister = $scope.$on(\"productFamilySelection\", (event: ng.IAngularEvent, newValue) => {\r\n this.updateProdcutFamilyOption(newValue);\r\n });\r\n\r\n $scope.$on(\"$destroy\", productFamilySelectionUnregister);\r\n }\r\n\r\n getNumberOfLenders(orgId) {\r\n this.lenderService\r\n .getTotalLenders(ProductFamilyEnum.None, orgId)\r\n .then((totalLenders: number) => {\r\n this.totalLenders = Math.floor(totalLenders / 5) * 5;\r\n });\r\n }\r\n\r\n updateProdcutFamilyOption(val) {\r\n this.headerProductFamily = val;\r\n }\r\n\r\n\r\n async initialRegisterEventLog(orgCode, organisationLinkId = null) {\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n \"ALLLOANS\",\r\n orgCode,\r\n \"\",\r\n \"Client\",\r\n organisationLinkId,\r\n ProductTypeEnum.None,\r\n undefined,\r\n undefined,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"ALLLOANS\",\r\n orgCode,\r\n \"\",\r\n \"Client\",\r\n organisationLinkId,\r\n ProductTypeEnum.None,\r\n );\r\n }\r\n } else {\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n this.productFamilyType == ProductFamilyEnum.None ? \"ALLLOANS\" : `${this.getProducFamilyText().toUpperCase()}ALLLOANS`,\r\n orgCode,\r\n \"\",\r\n \"Client\",\r\n organisationLinkId,\r\n ProductTypeEnum.None,\r\n undefined,\r\n undefined,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n this.productFamilyType == ProductFamilyEnum.None ? \"ALLLOANS\" : `${this.getProducFamilyText().toUpperCase()}ALLLOANS`,\r\n orgCode,\r\n \"\",\r\n \"Client\",\r\n organisationLinkId,\r\n ProductTypeEnum.None,\r\n );\r\n }\r\n }\r\n }\r\n\r\n logEvent() {\r\n if (this.$routeParams.linkId) {\r\n if (this.orgCode) {\r\n this.initialRegisterEventLog(\r\n this.orgCode,\r\n Number(this.$routeParams.linkId),\r\n );\r\n } else {\r\n this.initialRegisterEventLog(\"\", Number(this.$routeParams.linkId));\r\n }\r\n } else {\r\n if (this.orgCode) {\r\n this.initialRegisterEventLog(this.orgCode);\r\n } else {\r\n this.initialRegisterEventLog(\"\");\r\n }\r\n }\r\n }\r\n\r\n\r\n onClickShowHelpModal() {\r\n this.showHelpModal = true;\r\n if (this.isWidget && !this.showCriteriaSection)\r\n this.organisationService.sendDataToParent(\"height\", \"745px\");\r\n }\r\n\r\n closeHelpModal() {\r\n if (this.isWidget && !this.showCriteriaSection)\r\n this.organisationService.sendDataToParent(\"height\", \"170px\");\r\n this.showHelpModal = false;\r\n }\r\n\r\n selectDefaultProductFamily() {\r\n if (this.showBridgingOption && !this.isBridgingDisabled && (this.productFamilyType == ProductFamilyEnum.None || this.productFamilyType == ProductFamilyEnum.Bridging)) {\r\n this.headerProductFamily = ProductFamilyEnum.Bridging;\r\n } else if (this.showCommercialOption && !this.isCommercialDisabled && (this.productFamilyType == ProductFamilyEnum.None || this.productFamilyType == ProductFamilyEnum.Commercial)) {\r\n this.headerProductFamily = ProductFamilyEnum.Commercial;\r\n } else {\r\n this.headerProductFamily = ProductFamilyEnum.Development;\r\n }\r\n this.showCriteriaSection = true;\r\n }\r\n\r\n setProductButtonStateAndVisibility() {\r\n this.userService\r\n .getCurrentUserPermissionForProductSearch(\r\n )\r\n .then((response) => {\r\n if (response) {\r\n if (response.IsLender) {\r\n this.showBridgingOption = response.HasBridgingSearchPermission;\r\n this.showDevFinaceOption = response.HasDevFinanceSearchPermission;\r\n this.showCommercialOption = response.HasCommercialSearchPermission;\r\n } else {\r\n this.isBridgingDisabled = !response.HasBridgingSearchPermission;\r\n this.isCommercialDisabled = !response.HasCommercialSearchPermission;\r\n this.showBridgingOption = true;\r\n this.showDevFinaceOption = true;\r\n this.showCommercialOption = true;\r\n }\r\n this.getNumberOfLenders(response.OrgId);\r\n this.selectDefaultProductFamily();\r\n\r\n } else {\r\n //This is to navigate a user to userdashboard when they try to access path directly\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n });\r\n\r\n }\r\n\r\n\r\n showorHideCriteriaSection() {\r\n if (this.showCriteriaSection) {\r\n this.organisationService.sendDataToParent(\"height\", \"170px\");\r\n }\r\n this.showCriteriaSection = !this.showCriteriaSection;\r\n }\r\n\r\n footerSignInClicked() {\r\n var baseUrl = window.location.href.split(\"#!\")[0] + '#!';\r\n var newUrl = `${baseUrl}/login`;\r\n window.open(newUrl, \"_blank\");\r\n }\r\n\r\n getProductFamilyByLinkType() {\r\n var productFamilyType = ProductFamilyEnum.None;\r\n switch (Number(this.$routeParams.linkType)) {\r\n case LinkTypeEnum.Development:\r\n productFamilyType = ProductFamilyEnum.Development;\r\n break;\r\n case LinkTypeEnum.Bridging:\r\n productFamilyType = ProductFamilyEnum.Bridging;\r\n break;\r\n case LinkTypeEnum.Commercial:\r\n productFamilyType = ProductFamilyEnum.Commercial;\r\n break;\r\n default:\r\n break;\r\n }\r\n return productFamilyType;\r\n }\r\n\r\n\r\n onStartSearchButtonClick() {\r\n switch (this.productFamilyType) {\r\n case ProductFamilyEnum.Development:\r\n this.headerProductFamily = ProductFamilyEnum.Development;\r\n break;\r\n case ProductFamilyEnum.Bridging:\r\n this.headerProductFamily = ProductFamilyEnum.Bridging;\r\n break;\r\n case ProductFamilyEnum.Commercial:\r\n this.headerProductFamily = ProductFamilyEnum.Commercial;\r\n break;\r\n default:\r\n break;\r\n }\r\n this.showCriteriaSection = true;\r\n }\r\n\r\n getProducFamilyText() {\r\n switch (this.productFamilyType) {\r\n case ProductFamilyEnum.Development:\r\n return \"Development\";\r\n case ProductFamilyEnum.Bridging:\r\n return \"Bridging\";\r\n case ProductFamilyEnum.Commercial:\r\n return \"Commercial\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n}\r\n","import { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { ApplicantService } from \"@js/services/ApplicantService\";\r\n\r\nexport class ApplicantController {\r\n selectedSection: string;\r\n\r\n objects: CaseMemberDTO[];\r\n selectedObject: CaseMemberDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n applicantForm: ng.IFormController;\r\n //subapplicantForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"ApplicantService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $applicantservice: ApplicantService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$applicantservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: CaseMemberDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as CaseMemberDTO;\r\n }\r\n\r\n save() {\r\n this.$applicantservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: CaseMemberDTO[] = this.objects.filter((value, index) => {\r\n return value.Id == response;\r\n });\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.applicantForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$applicantservice.delete(this.selectedObject.Id).then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.applicantForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n}\r\n","export const enum ALItemTypeEnum {\r\n Other = 0,\r\n ResidentialProperty = 1,\r\n BTLProperty = 2,\r\n CommercialProperty = 3,\r\n OverseasProperty = 4,\r\n CashDeposits = 5,\r\n StocksShares = 6,\r\n VehicleBoat = 7,\r\n BusinessEquipment = 8,\r\n ArtJewellryAntique = 9,\r\n ResidentialPropertyLoan = 30,\r\n BTLPropertyLoan = 31,\r\n CommercialPropertyLoan = 32,\r\n OverseasPropertyLoan = 33,\r\n HPLease = 34,\r\n Overdraft = 35,\r\n OtherLoan = 36,\r\n PersonalGuarantee = 60,\r\n}\r\n","export const enum ALTypeEnum {\r\n Asset = 0,\r\n Liability = 1,\r\n PersonalGuarantee = 2,\r\n}\r\n","import { AddressHistoryDTO } from \"@js/DTO/AddressHistoryDTO.cs.d\";\r\nimport { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { AssetLiabilityItemDTO } from \"@js/DTO/AssetLiabilityItemDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { ProjectOwnershipDTO } from \"@js/DTO/DevelopmentFinance/ProjectOwnershipDTO.cs.d\";\r\nimport { QualificationsDTO } from \"@js/DTO/QualificationsDTO.cs.d\";\r\nimport { ALItemTypeEnum } from \"@js/models/enum/ALItemTypeEnum.cs.d\";\r\nimport { ALTypeEnum } from \"@js/models/enum/ALTypeEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { ApplicantService } from \"@js/services/ApplicantService\";\r\nimport { AssetLiabilityItemService } from \"@js/services/AssetLiabilityItemService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DevelopmentTrackRecordService } from \"@js/services/DevelopmentTrackRecordService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { QualificationsService } from \"@js/services/QualificationsService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { StreetAddressService } from \"@js/services/StreetAddressService\";\r\n\r\nexport class ApplicantDetailsController {\r\n //navigate for pages\r\n step: number = 1;\r\n applicantNo: number = 0;\r\n devexperienceId: number;\r\n\r\n //current case\r\n case: CaseDTO;\r\n caseTitle: string;\r\n\r\n //current shareholder\r\n currentShareholder: CaseMemberDTO;\r\n\r\n //case id\r\n caseid: number;\r\n\r\n development: ProjectOwnershipDTO;\r\n developmentTrackRecordType: {}[] = [];\r\n\r\n //qualifications\r\n newQualification: string[] = [];\r\n newSkill: string[] = [];\r\n duplicate: number[] = [];\r\n\r\n //address\r\n previousAddressSearchTerm: string;\r\n searchingForPreviousAddress: boolean = false;\r\n previousAddressPostCodeOptions: PostalAddress[] = [];\r\n showAddHistoryConfirmDelete: boolean = false;\r\n addressHistoryIdToDelete: number;\r\n showAddressHistoryModal: boolean = false;\r\n shareholderAddressHistory: AddressHistoryDTO[] = [];\r\n addressHistoryItem: AddressHistoryDTO;\r\n previousAddressSearchResults: string[];\r\n searchpostcode: string[];\r\n searchterm: string[];\r\n searchresults: string[];\r\n PostCodeOptions: PostalAddress[][] = [];\r\n searchingForAddress: boolean = false;\r\n\r\n error: boolean = false;\r\n saving: boolean = false;\r\n dataLoading: boolean = false;\r\n saved: boolean = false;\r\n\r\n //modal\r\n message: string = \"\";\r\n modal: boolean = false;\r\n openModal: boolean = false;\r\n\r\n //to edit input on A&L\r\n newDescription: string;\r\n newValue: number;\r\n newStartDate: Date;\r\n newEndDate: Date;\r\n ALItemType: ALItemTypeEnum;\r\n item: AssetLiabilityItemDTO;\r\n applicant: CaseMemberDTO;\r\n renamingItem: AssetLiabilityItemDTO;\r\n confirmationDelete: boolean = false;\r\n\r\n //validation dates\r\n maxDateOfBirth: Date = new Date();\r\n minDateOfBirth: Date = new Date(\"Jan 01 1900\");\r\n maxDateForDateField: Date = new Date(\"Jan 01 3000\");\r\n isAddFormInvalid: boolean = true;\r\n isEditFormInvalid: boolean = true;\r\n\r\n //forms\r\n multiPartForm1: ng.IFormController;\r\n multiPartForm2: ng.IFormController;\r\n multiPartForm3: ng.IFormController;\r\n multiPartForm4: ng.IFormController;\r\n multiPartForm7: ng.IFormController;\r\n\r\n formattedAcquisitionDate: any[] = [];\r\n\r\n YearsWorkedInProfessionsListArchitectCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListBuilderCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListCarpenterCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListElectricianCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListEstateAgencyCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListPlannerCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListProjectManagerCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListPropertySurveyorCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListQuantitySurveyorCheckbox: boolean[] = [];\r\n YearsWorkedInProfessionsListStructuralEngineerCheckbox: boolean[] = [];\r\n\r\n professionsList: string[] = [\r\n \"Architect\",\r\n \"Builder\",\r\n \"Carpenter\",\r\n \"Electrician\",\r\n \"EstateAgency\",\r\n \"Planner\",\r\n \"ProjectManager\",\r\n \"PropertySurveyor\",\r\n \"QuantitySurveyor\",\r\n \"StructuralEngineer\",\r\n ];\r\n\r\n applicantDetailsFormSectionNames = [\r\n {\r\n label: \"Applicant Details\",\r\n visible: true,\r\n },\r\n ];\r\n\r\n asset = {};\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$q\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"ApplicantService\",\r\n \"RoleService\",\r\n \"CaseMemberService\",\r\n \"AssetLiabilityItemService\",\r\n \"CaseService\",\r\n \"FileAttachmentService\",\r\n \"DevelopmentTrackRecordService\",\r\n \"StreetAddressService\",\r\n \"QualificationsService\",\r\n \"AuthService\",\r\n ];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n protected $q: ng.IQService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $applicantservice: ApplicantService,\r\n private roleService: RoleService,\r\n private caseMemberService: CaseMemberService,\r\n private assetLiabilityItemService: AssetLiabilityItemService,\r\n private caseService: CaseService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private developmenttrackrecordservice: DevelopmentTrackRecordService,\r\n private streetAddressService: StreetAddressService,\r\n private qualificationsService: QualificationsService,\r\n private authService: AuthService,\r\n ) {\r\n this.onInit();\r\n }\r\n\r\n onInit() {\r\n //Get step number\r\n if (this.$routeParams.StepNumber) {\r\n this.step =\r\n this.$routeParams.StepNumber > 8 || this.$routeParams.StepNumber < 1\r\n ? 1\r\n : this.$routeParams.StepNumber;\r\n }\r\n\r\n if (this.$routeParams.CaseId) {\r\n this.caseid = this.$routeParams.CaseId;\r\n\r\n this.caseService.fetch(this.caseid).then((result) => {\r\n this.case = result;\r\n this.caseTitle = result.DevelopmentInput.SearchName;\r\n });\r\n }\r\n\r\n if (this.$routeParams.shareholderId) {\r\n this.applicantNo = this.$routeParams.shareholderId;\r\n\r\n this.$applicantservice.fetch(this.applicantNo).then((result) => {\r\n this.currentShareholder = result;\r\n if (\r\n this.currentShareholder.AddressHistory &&\r\n this.currentShareholder.AddressHistory.length > 0\r\n ) {\r\n this.parseAddressHistory(this.currentShareholder.AddressHistory);\r\n }\r\n });\r\n }\r\n\r\n if (this.$routeParams.Id && this.$routeParams.Id > 0) {\r\n this.devexperienceId = this.$routeParams.Id;\r\n }\r\n }\r\n\r\n goToCaseDashboard(blockSave?: boolean): void {\r\n if (this.roleService.IsLender == true) {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n } else {\r\n if (blockSave) {\r\n this.save(true).then((response) => {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n (this.$rootScope as any).formSaved = true;\r\n });\r\n } else {\r\n this.save(false).then(() => {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n });\r\n }\r\n }\r\n }\r\n\r\n goToShareholders(blockSave?: boolean): void {\r\n if (this.roleService.IsLender == true) {\r\n this.$location.path(\r\n \"/devexperience/\" + this.caseid + \"/\" + this.devexperienceId + \"/2\",\r\n );\r\n } else {\r\n if (blockSave) {\r\n this.save(true).then((response) => {\r\n this.$location.path(\r\n \"/devexperience/\" + this.caseid + \"/\" + this.devexperienceId + \"/2\",\r\n );\r\n (this.$rootScope as any).formSaved = true;\r\n });\r\n } else {\r\n this.save(false).then(() => {\r\n this.$location.path(\r\n \"/devexperience/\" + this.caseid + \"/\" + this.devexperienceId + \"/2\",\r\n );\r\n });\r\n }\r\n }\r\n }\r\n\r\n //save\r\n save(isFormComplete: boolean): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.saving = true;\r\n\r\n this.caseMemberService\r\n .addUpdatereturnonlyid(this.currentShareholder)\r\n .then((response) => {\r\n this.setAllFormsPristine();\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n //resent forms\r\n setAllFormsPristine(): void {\r\n if (this.multiPartForm1) {\r\n this.multiPartForm1.$setPristine();\r\n }\r\n if (this.multiPartForm2) {\r\n this.multiPartForm2.$setPristine();\r\n }\r\n if (this.multiPartForm3) {\r\n this.multiPartForm3.$setPristine();\r\n }\r\n if (this.multiPartForm4) {\r\n this.multiPartForm4.$setPristine();\r\n }\r\n if (this.multiPartForm7) {\r\n this.multiPartForm7.$setPristine();\r\n }\r\n }\r\n\r\n //Navigate for tabs\r\n\r\n navigateTabs(index: number) {\r\n this.profileGo(\r\n \"/applicantdetails/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.devexperienceId +\r\n \"/\" +\r\n this.applicantNo +\r\n \"/\" +\r\n this.sum(index, 1),\r\n );\r\n (this.$rootScope as any).formSaved = true;\r\n }\r\n\r\n sum(a: number, b: number): number {\r\n return a + b;\r\n }\r\n\r\n go(path): void {\r\n // Only need to save if user is NOT a lender (everything is in read-only mode for lender)\r\n if (this.roleService.IsLender == true) {\r\n this.$location.path(path);\r\n } else {\r\n this.save(false).then((response) => {\r\n this.devexperienceId = response;\r\n this.$location.path(path);\r\n });\r\n }\r\n }\r\n\r\n profileGo(path): void {\r\n if (this.roleService.IsLender == true) {\r\n this.$location.path(path);\r\n } else {\r\n this.save(false).then((response) => {\r\n this.$location.path(path);\r\n });\r\n }\r\n }\r\n\r\n next(): void {\r\n if (this.step == 1 && this.step < 2) {\r\n this.step++;\r\n this.profileGo(\r\n \"/applicantdetails/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.devexperienceId +\r\n \"/\" +\r\n this.$routeParams.shareholderId +\r\n \"/\" +\r\n this.step,\r\n );\r\n (this.$rootScope as any).formSaved = true;\r\n }\r\n }\r\n\r\n backApplicantDetails(): void {\r\n if (this.step >= 1 && this.step < 3) {\r\n this.step--;\r\n this.profileGo(\r\n \"/applicantdetails/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.devexperienceId +\r\n \"/\" +\r\n this.$routeParams.shareholderId +\r\n \"/\" +\r\n this.step,\r\n );\r\n (this.$rootScope as any).formSaved = true;\r\n }\r\n }\r\n\r\n updateProfessionsCheckboxes(\r\n applicant: CaseMemberDTO,\r\n index: number,\r\n ): boolean {\r\n if (applicant) {\r\n this.professionsList.forEach((p) => {\r\n if (applicant[\"YearsWorkedInProfessionsList\" + p] > 0) {\r\n this[\"YearsWorkedInProfessionsList\" + p + \"Checkbox\"][index] = true;\r\n }\r\n });\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n finish(): void {\r\n this.$location.path(\r\n \"/devexperience/\" + this.caseid + \"/\" + this.devexperienceId + \"/2\",\r\n );\r\n (this.$rootScope as any).formSaved = true;\r\n }\r\n\r\n addAssetLiabilityItem(\r\n currentApplicant: CaseMemberDTO,\r\n ALTtype,\r\n AlTItem,\r\n description,\r\n value,\r\n startDate = null,\r\n endDate = null,\r\n ) {\r\n if (value === null || value === undefined) {\r\n value = 0;\r\n }\r\n\r\n var newAssetLiabilityItem: AssetLiabilityItemDTO = {\r\n ALType: ALTtype,\r\n ALItemType: AlTItem,\r\n Description: description,\r\n Value: value,\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n CaseMemberId: currentApplicant.Id,\r\n Id: 0,\r\n IsDeleted: false,\r\n CreatedDateTime: null,\r\n LastUpdatedDateTime: null,\r\n } as AssetLiabilityItemDTO;\r\n currentApplicant.AssetLiabilityItems.push(newAssetLiabilityItem);\r\n this.assetLiabilityItemService\r\n .addUpdatelistreturnonlyids(currentApplicant.AssetLiabilityItems)\r\n .then((response) => {\r\n //update IDs\r\n currentApplicant.AssetLiabilityItems.forEach((x, index) => {\r\n x.Id = response[index];\r\n });\r\n this.asset = {};\r\n })\r\n .catch((error) => {\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n delete this.asset;\r\n });\r\n }\r\n\r\n //Calculations\r\n\r\n CalculateTotalAssets(currentApplicant: CaseMemberDTO): number {\r\n var totalAssets: number = 0;\r\n if (currentApplicant && currentApplicant.AssetLiabilityItems) {\r\n for (let i = 0; i < currentApplicant.AssetLiabilityItems.length; i++) {\r\n if (\r\n currentApplicant.AssetLiabilityItems[i].ALType === ALTypeEnum.Asset\r\n ) {\r\n totalAssets += Number(currentApplicant.AssetLiabilityItems[i].Value);\r\n }\r\n }\r\n }\r\n return totalAssets;\r\n }\r\n\r\n CalculateTotalLiabilities(currentApplicant: CaseMemberDTO): number {\r\n var totalLiabilities: number = 0;\r\n if (currentApplicant && currentApplicant.AssetLiabilityItems) {\r\n for (let i = 0; i < currentApplicant.AssetLiabilityItems.length; i++) {\r\n if (\r\n currentApplicant.AssetLiabilityItems[i].ALType ===\r\n ALTypeEnum.Liability\r\n ) {\r\n totalLiabilities += Number(\r\n currentApplicant.AssetLiabilityItems[i].Value,\r\n );\r\n }\r\n }\r\n }\r\n return totalLiabilities;\r\n }\r\n\r\n CalculateTotalOutstandingPersonalGuarantees(\r\n currentApplicant: CaseMemberDTO,\r\n ): number {\r\n var totalPersonalGuarantees: number = 0;\r\n if (currentApplicant && currentApplicant.AssetLiabilityItems) {\r\n for (let i = 0; i < currentApplicant.AssetLiabilityItems.length; i++) {\r\n if (\r\n currentApplicant.AssetLiabilityItems[i].ALType ===\r\n ALTypeEnum.PersonalGuarantee\r\n ) {\r\n totalPersonalGuarantees += Number(\r\n currentApplicant.AssetLiabilityItems[i].Value,\r\n );\r\n }\r\n }\r\n }\r\n return totalPersonalGuarantees;\r\n }\r\n\r\n CalculateTotalNetAssets(currentApplicant: CaseMemberDTO): number {\r\n var totalNetAssets: number;\r\n\r\n if (currentApplicant && currentApplicant.AssetLiabilityItems) {\r\n totalNetAssets =\r\n this.CalculateTotalAssets(currentApplicant) -\r\n this.CalculateTotalLiabilities(currentApplicant);\r\n }\r\n return totalNetAssets;\r\n }\r\n\r\n cancelDelete() {\r\n this.confirmationDelete = false;\r\n }\r\n\r\n deleteConfirmationMessage(\r\n applicant: CaseMemberDTO,\r\n item: AssetLiabilityItemDTO,\r\n ) {\r\n this.item = item;\r\n this.applicant = applicant;\r\n this.confirmationDelete = true;\r\n }\r\n\r\n removeAssetLiabilityItem() {\r\n this.confirmationDelete = false;\r\n let index = this.applicant.AssetLiabilityItems.indexOf(this.item);\r\n this.applicant.AssetLiabilityItems.splice(index, 1);\r\n }\r\n\r\n renameItem(item: AssetLiabilityItemDTO) {\r\n this.ALItemType = item.ALItemType;\r\n this.newDescription = item.Description;\r\n this.newValue = item.Value;\r\n this.newStartDate = item.StartDate;\r\n this.newEndDate = item.EndDate;\r\n\r\n if (this.renamingItem === undefined) {\r\n this.renamingItem = item;\r\n } else {\r\n delete this.renamingItem;\r\n }\r\n }\r\n\r\n renamingItemComplete(\r\n currentApplicant: CaseMemberDTO,\r\n item: AssetLiabilityItemDTO,\r\n index: number,\r\n ) {\r\n this.assetLiabilityItemService\r\n .addUpdatelistreturnonlyids(currentApplicant.AssetLiabilityItems)\r\n .then((response) => {\r\n //update IDs\r\n currentApplicant.AssetLiabilityItems.forEach((x, index) => {\r\n x.Id = response[index];\r\n });\r\n this.asset = {};\r\n })\r\n .catch((error) => {\r\n this.error = true;\r\n })\r\n .finally(() => {});\r\n\r\n delete this.renamingItem;\r\n }\r\n\r\n cancelSaveItem(item: AssetLiabilityItemDTO, index: number) {\r\n item.ALItemType = this.ALItemType;\r\n item.Description = this.newDescription;\r\n item.Value = this.newValue;\r\n item.StartDate = this.newStartDate;\r\n item.EndDate = this.newEndDate;\r\n delete this.renamingItem;\r\n }\r\n\r\n showprofession(enumVal: number) {\r\n if (this.currentShareholder) {\r\n return (\r\n this.currentShareholder.DevelopedPropertyBefore &&\r\n (this.currentShareholder.ProfessionsWorkedIn & enumVal) == enumVal\r\n );\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n resetDuplicateMessage(index: number) {\r\n this.duplicate[index] = 0;\r\n }\r\n\r\n addQualification(\r\n currentApplicant: CaseMemberDTO,\r\n index,\r\n isQualification,\r\n qualificationOrSkill,\r\n ) {\r\n this.saving = true;\r\n if (\r\n currentApplicant.Qualifications === null ||\r\n !currentApplicant.Qualifications\r\n ) {\r\n currentApplicant.Qualifications = [];\r\n }\r\n if (\r\n !currentApplicant.Qualifications.find(\r\n (x) =>\r\n x.QualificationOrSkill === qualificationOrSkill ||\r\n x.QualificationOrSkill === qualificationOrSkill,\r\n )\r\n ) {\r\n var qual = {\r\n CaseMemberId: currentApplicant.Id,\r\n QualificationOrSkill: qualificationOrSkill,\r\n IsQualification: isQualification,\r\n Id: 0,\r\n IsDeleted: false,\r\n } as QualificationsDTO;\r\n currentApplicant.Qualifications.push(qual);\r\n\r\n this.qualificationsService\r\n .addUpdatelistreturnonlyids(currentApplicant.Qualifications)\r\n .then((response) => {\r\n //update IDs\r\n currentApplicant.Qualifications.forEach((x, index) => {\r\n x.Id = response[index];\r\n });\r\n })\r\n .catch((error) => {\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n delete this.newQualification[index];\r\n delete this.newSkill[index];\r\n this.saving = false;\r\n });\r\n } else {\r\n //Qualification already present\r\n if (isQualification) {\r\n //Qual entered already on list\r\n this.duplicate[index] = 1;\r\n } else {\r\n //Skill entered already on list\r\n this.duplicate[index] = 2;\r\n }\r\n this.saving = false;\r\n delete this.newQualification[index];\r\n delete this.newSkill[index];\r\n }\r\n }\r\n\r\n removeSkillOrQualification(\r\n currentApplicant: CaseMemberDTO,\r\n item: QualificationsDTO,\r\n ) {\r\n let index = currentApplicant.Qualifications.indexOf(item);\r\n currentApplicant.Qualifications.splice(index, 1);\r\n }\r\n\r\n getALItemType(ALItemType) {\r\n ALItemType = parseInt(ALItemType);\r\n var ALItemTypeValue = \"\";\r\n switch (ALItemType) {\r\n case ALItemTypeEnum.Other: {\r\n ALItemTypeValue = \"Other\";\r\n break;\r\n }\r\n case ALItemTypeEnum.ResidentialProperty: {\r\n ALItemTypeValue = \"Residential Property\";\r\n break;\r\n }\r\n case ALItemTypeEnum.OverseasProperty: {\r\n ALItemTypeValue = \"Overseas Property\";\r\n break;\r\n }\r\n case ALItemTypeEnum.BTLProperty: {\r\n ALItemTypeValue = \"BTL Property\";\r\n break;\r\n }\r\n case ALItemTypeEnum.CommercialProperty: {\r\n ALItemTypeValue = \"Commercial Property\";\r\n break;\r\n }\r\n case ALItemTypeEnum.ArtJewellryAntique: {\r\n ALItemTypeValue = \"Art Jewellry Antique\";\r\n break;\r\n }\r\n case ALItemTypeEnum.CashDeposits: {\r\n ALItemTypeValue = \"Cash / Deposits\";\r\n break;\r\n }\r\n case ALItemTypeEnum.StocksShares: {\r\n ALItemTypeValue = \"Stocks & Shares\";\r\n break;\r\n }\r\n case ALItemTypeEnum.VehicleBoat: {\r\n ALItemTypeValue = \"Vehicle / Boats\";\r\n break;\r\n }\r\n case 8: {\r\n ALItemTypeValue = \"Business Equipment / Plant & Machinery\";\r\n break;\r\n }\r\n case 9: {\r\n ALItemTypeValue = \"Art / Jewellery / Antiques\";\r\n break;\r\n }\r\n case ALItemTypeEnum.ResidentialPropertyLoan: {\r\n ALItemTypeValue = \"Residential Property Loan\";\r\n break;\r\n }\r\n case ALItemTypeEnum.OverseasPropertyLoan: {\r\n ALItemTypeValue = \"Overseas Property Loan\";\r\n break;\r\n }\r\n case ALItemTypeEnum.BTLPropertyLoan: {\r\n ALItemTypeValue = \"BTL Property Loan\";\r\n break;\r\n }\r\n case ALItemTypeEnum.CommercialPropertyLoan: {\r\n ALItemTypeValue = \"Commercial Property Loan\";\r\n break;\r\n }\r\n case ALItemTypeEnum.Overdraft: {\r\n ALItemTypeValue = \"Overdraft\";\r\n break;\r\n }\r\n case ALItemTypeEnum.HPLease: {\r\n ALItemTypeValue = \"HP / Leasing\";\r\n break;\r\n }\r\n case ALItemTypeEnum.Overdraft: {\r\n ALItemTypeValue = \"HP / Leasing\";\r\n break;\r\n }\r\n case 35: {\r\n ALItemTypeValue = \"Overdraft\";\r\n break;\r\n }\r\n case 36: {\r\n ALItemTypeValue = \"Other Bank / Finance Loans\";\r\n break;\r\n }\r\n case ALItemTypeEnum.PersonalGuarantee: {\r\n ALItemTypeValue = \"Outstanding Personal Guarantee\";\r\n break;\r\n }\r\n\r\n default: {\r\n ALItemTypeValue = \"Unknown\";\r\n break;\r\n }\r\n }\r\n return ALItemTypeValue;\r\n }\r\n\r\n proprtyTypeFilter(property) {\r\n if (property.ALType == ALTypeEnum.Asset) {\r\n return (\r\n property.ALItemType == ALItemTypeEnum.ResidentialProperty ||\r\n property.ALItemType == ALItemTypeEnum.OverseasProperty ||\r\n property.ALItemType == ALItemTypeEnum.BTLProperty ||\r\n property.ALItemType == ALItemTypeEnum.CommercialProperty\r\n );\r\n }\r\n }\r\n\r\n otherProprtyTypeFilter(property) {\r\n if (property.ALType == ALTypeEnum.Asset) {\r\n return (\r\n property.ALItemType == ALItemTypeEnum.CashDeposits ||\r\n property.ALItemType == ALItemTypeEnum.StocksShares ||\r\n property.ALItemType == ALItemTypeEnum.VehicleBoat ||\r\n property.ALItemType == ALItemTypeEnum.BusinessEquipment ||\r\n property.ALItemType == ALItemTypeEnum.ArtJewellryAntique ||\r\n property.ALItemType == ALItemTypeEnum.Other\r\n );\r\n }\r\n }\r\n\r\n liabilitiesFilter(property) {\r\n if (property.ALType == ALTypeEnum.Liability) {\r\n return (\r\n property.ALItemType == ALItemTypeEnum.ResidentialPropertyLoan ||\r\n property.ALItemType == ALItemTypeEnum.OverseasPropertyLoan ||\r\n property.ALItemType == ALItemTypeEnum.BTLPropertyLoan ||\r\n property.ALItemType == ALItemTypeEnum.CommercialPropertyLoan\r\n );\r\n }\r\n }\r\n\r\n otherliabilitiesFilter(property) {\r\n if (property.ALType == ALTypeEnum.Liability) {\r\n return (\r\n property.ALItemType == ALItemTypeEnum.HPLease ||\r\n property.ALItemType == ALItemTypeEnum.Overdraft ||\r\n property.ALItemType == ALItemTypeEnum.OtherLoan ||\r\n property.ALItemType == ALItemTypeEnum.Other\r\n );\r\n }\r\n }\r\n\r\n isInvalidForm(\r\n description: string,\r\n value: number,\r\n startDate: Date,\r\n endDate: Date,\r\n prefix: string,\r\n ) {\r\n if (!description || !value) {\r\n return true;\r\n }\r\n\r\n var validStartDate = document\r\n .getElementById(prefix + \"-startDate\")\r\n .className.search(\"ng-valid\");\r\n var validEndDate = document\r\n .getElementById(prefix + \"-endDate\")\r\n .className.search(\"ng-valid\");\r\n\r\n if (validStartDate < 0 || validEndDate < 0) {\r\n return true;\r\n }\r\n\r\n if (startDate && !this.isValidDate(startDate)) {\r\n return true;\r\n }\r\n\r\n if (endDate && !this.isValidDate(endDate)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isAddFormValid(\r\n description: string,\r\n value: number,\r\n startDate: Date,\r\n endDate: Date,\r\n ) {\r\n this.isAddFormInvalid = this.isInvalidForm(\r\n description,\r\n value,\r\n startDate,\r\n endDate,\r\n \"add\",\r\n );\r\n }\r\n\r\n isEditFormValid(\r\n description: string,\r\n value: number,\r\n startDate: Date,\r\n endDate: Date,\r\n ) {\r\n this.isEditFormInvalid = this.isInvalidForm(\r\n description,\r\n value,\r\n startDate,\r\n endDate,\r\n \"edit\",\r\n );\r\n }\r\n\r\n isValidDate(date: Date) {\r\n if (date.getFullYear() > 1900 && date.getFullYear() < 2900) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Save a new PostAddress history item\r\n * @param shareholder\r\n */\r\n saveAddressHistory(shareholder: CaseMemberDTO) {\r\n var id: number = 0;\r\n\r\n if (!this.shareholderAddressHistory) {\r\n this.shareholderAddressHistory = [];\r\n }\r\n\r\n // If the Id hasn't been set then this is a new previous address\r\n if (this.addressHistoryItem.Id == null) {\r\n id = this.getNextAddressHistoryId();\r\n this.addressHistoryItem.Id = id;\r\n this.shareholderAddressHistory.push(this.addressHistoryItem);\r\n } else {\r\n var foundIndex = this.shareholderAddressHistory\r\n .map(function (a) {\r\n return a.Id;\r\n })\r\n .indexOf(this.addressHistoryItem.Id);\r\n if (foundIndex > -1) {\r\n this.shareholderAddressHistory.splice(\r\n foundIndex,\r\n 1,\r\n this.addressHistoryItem,\r\n ); // removed previous entry and adds the updated one in its place\r\n }\r\n }\r\n\r\n this.caseMemberService\r\n .saveAddressHistory(\r\n shareholder.Id,\r\n JSON.stringify(this.shareholderAddressHistory),\r\n )\r\n .then((addressHistory: string) => {\r\n shareholder.AddressHistory = addressHistory;\r\n this.parseAddressHistory(addressHistory);\r\n this.showAddressHistoryModal = false;\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem saving the address history. Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.showAddressHistoryModal = false;\r\n });\r\n }\r\n\r\n getNextAddressHistoryId(): number {\r\n if (this.shareholderAddressHistory.length == 0) {\r\n return 1;\r\n } else {\r\n // Get the current maximum Id and add one to it for the next ID\r\n var id = Math.max.apply(\r\n Math,\r\n this.shareholderAddressHistory.map(function (a) {\r\n return a.Id;\r\n }),\r\n );\r\n id++;\r\n return id;\r\n }\r\n }\r\n\r\n /**\r\n * Convert addres history JSON back to an array of PostalAddress objects\r\n * @param addressHistoryJson\r\n */\r\n parseAddressHistory(addressHistoryJson: string) {\r\n // JSON doesn't understand date types so therefore user the reviver function to manually convert them back to dates as opposed to strings\r\n this.shareholderAddressHistory = JSON.parse(\r\n addressHistoryJson,\r\n this.reviver,\r\n );\r\n\r\n // Order the address histories by the from date (ascending)\r\n this.shareholderAddressHistory.sort(\r\n (a: AddressHistoryDTO, b: AddressHistoryDTO) => {\r\n return this.getTime(a.FromDate) - this.getTime(b.FromDate);\r\n },\r\n );\r\n }\r\n\r\n getTime(date?: Date) {\r\n return date != null ? date.getTime() : 0;\r\n }\r\n\r\n /**\r\n * Tests whether a string is a date and converts it if so - used in JSON.parse\r\n * @param key\r\n * @param value\r\n */\r\n reviver(key, value) {\r\n var a;\r\n if ((typeof value === \"string\" && key == \"ToDate\") || key == \"FromDate\") {\r\n a = Date.parse(value);\r\n if (a) {\r\n return new Date(a);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n getAddressAsString(address: PostalAddress) {\r\n var addressAsString: string = \"\";\r\n\r\n addressAsString = this.concatenateAddressLine(\r\n address.AddressLine1,\r\n addressAsString,\r\n );\r\n addressAsString = this.concatenateAddressLine(\r\n address.AddressLine2,\r\n addressAsString,\r\n );\r\n addressAsString = this.concatenateAddressLine(\r\n address.AddressLine3,\r\n addressAsString,\r\n );\r\n addressAsString = this.concatenateAddressLine(\r\n address.AddressLine4,\r\n addressAsString,\r\n );\r\n\r\n return addressAsString;\r\n }\r\n\r\n concatenateAddressLine(addressLine: string, concatenatedAddress: string) {\r\n if (addressLine != null && addressLine.length > 0) {\r\n if (concatenatedAddress.length > 0) {\r\n concatenatedAddress = concatenatedAddress.concat(\", \", addressLine);\r\n } else {\r\n concatenatedAddress = concatenatedAddress.concat(addressLine);\r\n }\r\n }\r\n\r\n return concatenatedAddress;\r\n }\r\n\r\n openAddressHistoryModal(addressHistory: AddressHistoryDTO = null) {\r\n this.previousAddressSearchResults = [];\r\n this.previousAddressPostCodeOptions = [];\r\n\r\n if (addressHistory) {\r\n this.addressHistoryItem = addressHistory;\r\n } else {\r\n this.addressHistoryItem = null;\r\n }\r\n\r\n this.showAddressHistoryModal = true;\r\n }\r\n\r\n showConfirmAddressDelete(addressHistoryId: number) {\r\n this.showAddHistoryConfirmDelete = true;\r\n this.addressHistoryIdToDelete = addressHistoryId;\r\n }\r\n\r\n deleteAddressHistory() {\r\n this.showAddHistoryConfirmDelete = false;\r\n\r\n var foundIndex = this.shareholderAddressHistory\r\n .map(function (a) {\r\n return a.Id;\r\n })\r\n .indexOf(this.addressHistoryIdToDelete);\r\n\r\n if (foundIndex > -1) {\r\n this.shareholderAddressHistory.splice(foundIndex, 1);\r\n\r\n this.caseMemberService\r\n .saveAddressHistory(\r\n this.currentShareholder.Id,\r\n JSON.stringify(this.shareholderAddressHistory),\r\n )\r\n .then((addressHistory: string) => {\r\n this.currentShareholder.AddressHistory = addressHistory;\r\n this.parseAddressHistory(addressHistory);\r\n this.showAddressHistoryModal = false;\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem deleting the address history item. Please try again later.\";\r\n });\r\n }\r\n }\r\n\r\n formatDate(unformattedDate) {\r\n if (unformattedDate) {\r\n var formattedDate = new Date(\r\n unformattedDate.getTime() - unformattedDate.getTimezoneOffset() * 60000,\r\n )\r\n .toISOString()\r\n .split(\"T\")[0];\r\n\r\n return formattedDate;\r\n }\r\n }\r\n\r\n getAddressList(app: CaseMemberDTO, index: number, searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions[index] &&\r\n this.PostCodeOptions[index].length > 0\r\n ) {\r\n let addressLookup = this.PostCodeOptions[index].find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n this.currentShareholder.StreetAddress = address;\r\n this.searchterm[index] = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.currentShareholder.StreetAddress.AddressLine1 =\r\n addressLookup.AddressLine2;\r\n this.currentShareholder.StreetAddress.AddressLine2 =\r\n addressLookup.AddressLine3;\r\n this.currentShareholder.StreetAddress.AddressLine3 =\r\n addressLookup.AddressLine4;\r\n this.currentShareholder.StreetAddress.AddressLine4 =\r\n addressLookup.PostCode;\r\n this.currentShareholder.StreetAddress.PostCode =\r\n addressLookup.AddressLine1;\r\n this.searchterm[index] = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.PostCodeOptions[index] = [];\r\n\r\n this.streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions[index] = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n getAddressListArray(app: CaseMemberDTO, index: number, searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions[index] &&\r\n this.PostCodeOptions[index].length > 0\r\n ) {\r\n let addressLookup = this.PostCodeOptions[index].find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n app.StreetAddress = address;\r\n this.searchterm[index] = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].StreetAddress.AddressLine1 = addressLookup.AddressLine2;\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].StreetAddress.AddressLine2 = addressLookup.AddressLine3;\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].StreetAddress.AddressLine3 = addressLookup.AddressLine4;\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].StreetAddress.AddressLine4 = addressLookup.PostCode;\r\n this.development.DevelopmentTrackRecords[index].StreetAddress.PostCode =\r\n addressLookup.AddressLine1;\r\n this.searchterm[index] = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.PostCodeOptions[index] = [];\r\n\r\n this.streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions[index] = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n lookupPreviousAddress(searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.previousAddressPostCodeOptions &&\r\n this.previousAddressPostCodeOptions &&\r\n this.previousAddressPostCodeOptions.length > 0\r\n ) {\r\n let addressLookup = this.previousAddressPostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n this.addressHistoryItem = {\r\n AddressLine1: address.AddressLine1,\r\n AddressLine2: address.AddressLine2,\r\n AddressLine3: address.AddressLine3,\r\n AddressLine4: address.AddressLine4,\r\n PostCode: address.PostCode,\r\n };\r\n\r\n this.previousAddressSearchTerm = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.addressHistoryItem = {\r\n AddressLine1: addressLookup.AddressLine2,\r\n AddressLine2: addressLookup.AddressLine3,\r\n AddressLine3: addressLookup.AddressLine4,\r\n AddressLine4: addressLookup.PostCode,\r\n PostCode: addressLookup.AddressLine1,\r\n };\r\n\r\n this.previousAddressSearchTerm = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.previousAddressPostCodeOptions = [];\r\n\r\n this.streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.previousAddressPostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n autofillShareholderInfo() {\r\n this.currentShareholder.DevelopedPropertyBefore = true;\r\n this.currentShareholder.LengthOfTimeBeenDeveloper = 10;\r\n this.currentShareholder.DevelopedPropertyBeforeNumber = 7;\r\n this.currentShareholder.DevelopedResidentialPropertyCompletedNumber = 7;\r\n // this.YearsWorkedInProfessionsListProjectManagerCheckbox[1] = true;\r\n this.currentShareholder.YearsWorkedInProfessionsListProjectManager = 7;\r\n this.addAssetLiabilityItem(\r\n this.currentShareholder,\r\n ALTypeEnum.Asset,\r\n ALItemTypeEnum.ResidentialProperty,\r\n \"32 Brookside Road\",\r\n 900000,\r\n null,\r\n null,\r\n );\r\n this.addAssetLiabilityItem(\r\n this.currentShareholder,\r\n ALTypeEnum.Asset,\r\n ALItemTypeEnum.BTLProperty,\r\n \"10 Brookside Road\",\r\n 100000,\r\n null,\r\n null,\r\n );\r\n this.addAssetLiabilityItem(\r\n this.currentShareholder,\r\n ALTypeEnum.Asset,\r\n ALItemTypeEnum.CommercialProperty,\r\n \"King Street, York\",\r\n 2300000,\r\n null,\r\n null,\r\n );\r\n this.addAssetLiabilityItem(\r\n this.currentShareholder,\r\n ALTypeEnum.Asset,\r\n ALItemTypeEnum.CashDeposits,\r\n \"Savings\",\r\n 1000000,\r\n null,\r\n null,\r\n );\r\n this.addAssetLiabilityItem(\r\n this.currentShareholder,\r\n ALTypeEnum.Asset,\r\n ALItemTypeEnum.StocksShares,\r\n \"Barclays Bank\",\r\n 450000,\r\n null,\r\n null,\r\n );\r\n this.addAssetLiabilityItem(\r\n this.currentShareholder,\r\n ALTypeEnum.Liability,\r\n ALItemTypeEnum.ResidentialPropertyLoan,\r\n \"32 Brookside\",\r\n 450000,\r\n null,\r\n null,\r\n );\r\n const maxDate = Date.now();\r\n const timestamp = Math.floor(Math.random() * maxDate);\r\n const timestamp2 = timestamp + 20;\r\n this.addAssetLiabilityItem(\r\n this.currentShareholder,\r\n 2,\r\n 60,\r\n \"Example lender\",\r\n 400000,\r\n new Date(timestamp),\r\n new Date(timestamp2),\r\n );\r\n }\r\n}\r\n","import { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { ContactDetailsDTO } from \"@js/DTO/ContactDetailsDTO.cs.d\";\r\nimport { DealDTO } from \"@js/DTO/Deal/DealDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { StreetAddressService } from \"@js/services/StreetAddressService\";\r\n\r\nexport class ApplicationDetailsController {\r\n //Search address\r\n searchresults: string;\r\n PostCodeOptions: PostalAddress[] = [];\r\n searchterm: string;\r\n searchingForAddress: boolean = false;\r\n\r\n //Case info\r\n loanCriteria: DevelopmentInputDTO;\r\n case: CaseDTO;\r\n deal: DealDTO;\r\n siteDetails: ContactDetailsDTO;\r\n accountantDetails: ContactDetailsDTO;\r\n solicitorDetails: ContactDetailsDTO;\r\n\r\n //Sections\r\n site: boolean = false;\r\n accountant: boolean = false;\r\n solicitors: boolean = false;\r\n\r\n isDeal: boolean = false;\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"CaseService\",\r\n \"$location\",\r\n \"StreetAddressService\",\r\n \"$q\",\r\n \"RoleService\",\r\n \"DealService\",\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private caseService: CaseService,\r\n private $location: ng.ILocationService,\r\n private $streetAddressService: StreetAddressService,\r\n protected $q: ng.IQService,\r\n private roleService: RoleService,\r\n private dealService: DealService,\r\n ) {\r\n if (this.$routeParams.DealId) {\r\n this.isDeal = true;\r\n }\r\n\r\n if (this.isDeal) {\r\n this.dealService.fetch(this.$routeParams.DealId).then((result) => {\r\n this.deal = result;\r\n this.siteDetails = this.parseContactDetails(this.deal.SiteDetails);\r\n this.accountantDetails = this.parseContactDetails(\r\n this.deal.AccountantDetails,\r\n );\r\n this.solicitorDetails = this.parseContactDetails(\r\n this.deal.SolicitorDetails,\r\n );\r\n });\r\n } else {\r\n this.caseService.fetch(this.$routeParams.CaseId).then((result) => {\r\n this.case = result;\r\n this.siteDetails = this.parseContactDetails(this.case.SiteDetails);\r\n this.accountantDetails = this.parseContactDetails(\r\n this.case.AccountantDetails,\r\n );\r\n this.solicitorDetails = this.parseContactDetails(\r\n this.case.SolicitorDetails,\r\n );\r\n });\r\n }\r\n }\r\n\r\n goToCaseDashboard(saveChanges: boolean): void {\r\n if (saveChanges && !this.roleService.IsLender) {\r\n this.save().then((response) => {\r\n (this.$rootScope as any).formSaved = true;\r\n this.dealService.goToCaseDashboard(\r\n this.deal.Id,\r\n this.deal.ProductFamily,\r\n );\r\n });\r\n } else {\r\n this.dealService.goToCaseDashboard(this.deal.Id, this.deal.ProductFamily);\r\n }\r\n }\r\n\r\n goToDealForum(saveChanges: boolean): void {\r\n if (saveChanges && !this.roleService.IsLender) {\r\n this.save().then((response) => {\r\n (this.$rootScope as any).formSaved = true;\r\n this.isDeal\r\n ? this.$location.path(\"/dealforum/\" + this.deal.Id)\r\n : this.$location.path(\"/lending/\" + this.case.Id);\r\n });\r\n } else {\r\n this.isDeal\r\n ? this.$location.path(\"/dealforum/\" + this.deal.Id)\r\n : this.$location.path(\"/lending/\" + this.case.Id);\r\n }\r\n }\r\n\r\n expandOrCollapse(value: boolean) {\r\n this.site = value;\r\n this.accountant = value;\r\n this.solicitors = value;\r\n return value;\r\n }\r\n\r\n save(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n if (this.isDeal) {\r\n this.deal.SiteDetails = JSON.stringify(this.siteDetails);\r\n this.deal.AccountantDetails = JSON.stringify(this.accountantDetails);\r\n this.deal.SolicitorDetails = JSON.stringify(this.solicitorDetails);\r\n\r\n this.dealService\r\n .addUpdatereturnonlyid(this.deal)\r\n .then((response) => {\r\n defer.resolve(response as number);\r\n if (\r\n this.siteDetails.FirstName != null &&\r\n this.siteDetails.Email != null &&\r\n this.siteDetails.Role != null &&\r\n this.siteDetails.LastName != null &&\r\n this.solicitorDetails.FirstName != null &&\r\n this.solicitorDetails.LastName != null &&\r\n this.solicitorDetails.Email != null &&\r\n this.accountantDetails.FirstName != null &&\r\n this.accountantDetails.LastName != null &&\r\n this.accountantDetails.Email != null\r\n ) {\r\n this.dealService.setIsSupplimentInfoFilled(true);\r\n } else {\r\n this.dealService.setIsSupplimentInfoFilled(false);\r\n }\r\n this.goToDealForum(false);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n } else {\r\n this.case.SiteDetails = JSON.stringify(this.siteDetails);\r\n this.case.AccountantDetails = JSON.stringify(this.accountantDetails);\r\n this.case.SolicitorDetails = JSON.stringify(this.solicitorDetails);\r\n\r\n this.caseService\r\n .addUpdatereturnonlyid(this.case)\r\n .then((response) => {\r\n defer.resolve(response as number);\r\n if (\r\n this.siteDetails.FirstName != null &&\r\n this.siteDetails.Email != null &&\r\n this.siteDetails.Role != null &&\r\n this.siteDetails.LastName != null &&\r\n this.solicitorDetails.FirstName != null &&\r\n this.solicitorDetails.LastName != null &&\r\n this.solicitorDetails.Email != null &&\r\n this.accountantDetails.FirstName != null &&\r\n this.accountantDetails.LastName != null &&\r\n this.accountantDetails.Email != null\r\n ) {\r\n this.caseService.setIsSupplimentInfoFilled(true);\r\n } else {\r\n this.caseService.setIsSupplimentInfoFilled(false);\r\n }\r\n this.goToDealForum(false);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n getAddressList(searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions.length > 0\r\n ) {\r\n let addressLookup = this.PostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n this.siteDetails.AddressLine1 = address.AddressLine1;\r\n this.siteDetails.AddressLine2 = address.AddressLine2;\r\n this.siteDetails.AddressLine3 = address.AddressLine3;\r\n this.siteDetails.AddressLine4 = address.AddressLine4;\r\n this.siteDetails.PostCode = address.PostCode;\r\n\r\n this.searchterm = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n\r\n this.siteDetails.AddressLine1 = addressLookup.AddressLine1;\r\n this.siteDetails.AddressLine2 = addressLookup.AddressLine2;\r\n this.siteDetails.AddressLine3 = addressLookup.AddressLine3;\r\n this.siteDetails.AddressLine4 = addressLookup.AddressLine4;\r\n this.siteDetails.PostCode = addressLookup.PostCode;\r\n this.searchterm = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.PostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n parseContactDetails(contactHistoryJson: string): ContactDetailsDTO {\r\n return JSON.parse(contactHistoryJson);\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { LicenseAppPackageDTO } from \"@js/DTO/LicenseAppPackageDTO.cs.d\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class AssignLicensesController {\r\n step: number = 4;\r\n licenseData: LicenseAppPackageDTO;\r\n totalNoOfLicense: number = 0;\r\n unassignedLicenses: number = 0;\r\n load: boolean = false;\r\n user: ApplicationUserDTO[] = [];\r\n isUserDisabled: boolean[] = [];\r\n error: string = \"\";\r\n assignLicenseForm: ng.IFormController;\r\n progressBar: {\r\n step: number;\r\n label: string;\r\n active: boolean;\r\n complete: boolean;\r\n }[] = [\r\n { step: 1, label: \"About you\", active: false, complete: true },\r\n { step: 2, label: \"About your business\", active: false, complete: true },\r\n {\r\n step: 3,\r\n label: \"More about your business\",\r\n active: false,\r\n complete: true,\r\n },\r\n { step: 4, label: \"Assign licenses\", active: false, complete: false },\r\n ];\r\n displayMsg: string = \"\";\r\n showMsg: boolean = false;\r\n assignLaterClicked: boolean = false;\r\n\r\n static $inject = [\r\n \"$location\",\r\n \"PaymentService\",\r\n \"UserService\",\r\n \"OrganisationService\",\r\n ];\r\n\r\n constructor(\r\n private $location: ng.ILocationService,\r\n private $paymentService: PaymentService,\r\n private userService: UserService,\r\n private organisationService: OrganisationService,\r\n ) {\r\n this.getLicense();\r\n }\r\n getLicense() {\r\n this.$paymentService.getLicense().then((response) => {\r\n this.licenseData = response;\r\n this.totalNoOfLicense = this.licenseData.TotalQuantity;\r\n if (this.totalNoOfLicense - 1 > 0) {\r\n this.$paymentService.getTotalUnassignedLicenses().then((response) => {\r\n this.unassignedLicenses = response;\r\n for (let i = 1; i <= this.unassignedLicenses; i++) {\r\n var newUser: ApplicationUserDTO = {\r\n Id: \"\",\r\n Roles: [\"Introducer\", \"Broker\"],\r\n } as ApplicationUserDTO;\r\n this.user.push(newUser);\r\n this.isUserDisabled.push(false);\r\n }\r\n });\r\n } else {\r\n this.progressBar[3].complete = true;\r\n }\r\n\r\n this.load = true;\r\n });\r\n }\r\n\r\n getNumber = function (num) {\r\n return new Array(num);\r\n };\r\n\r\n assignLicenses(user: ApplicationUserDTO, index: number) {\r\n var assignedLicenseusers = [];\r\n user.Roles = [\"Introducer\", \"Broker\"];\r\n assignedLicenseusers.push(user);\r\n this.userService\r\n .registerBrokerUsers(assignedLicenseusers)\r\n .then((response: string) => {\r\n if (response.length == 0) {\r\n this.displayMsg = `Successfully assigned a license to ${assignedLicenseusers[0].FirstName} ${assignedLicenseusers[0].LastName}`;\r\n this.isUserDisabled[index] = true;\r\n this.showMsg = true;\r\n this.unassignedLicenses -= 1;\r\n } else {\r\n this.displayMsg = response;\r\n this.showMsg = true;\r\n }\r\n });\r\n }\r\n\r\n goToUserDashboard() {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n isFormValid() {\r\n if (this.unassignedLicenses > 0) {\r\n if (!this.assignLicenseForm.$invalid) {\r\n this.progressBar[3].complete = true;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n this.progressBar[3].complete = true;\r\n return true;\r\n }\r\n }\r\n\r\n assignLater() {\r\n if (this.unassignedLicenses > 0 && this.assignLaterClicked) {\r\n this.organisationService.brokerSignUpJourneyG5Email().then((response) => {\r\n this.$location.path(\"/userdashboard\");\r\n this.user = [];\r\n });\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n this.user = [];\r\n }\r\n }\r\n}\r\n","export class BorrowerTermsController {\r\n static $inject = [\"$routeParams\", \"$scope\", \"$location\"];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n private $location: ng.ILocationService,\r\n ) {}\r\n}\r\n","export const enum CaseAccessLevelEnum {\r\n Hidden = 0,\r\n ReadOnly = 1,\r\n FullAccess = 10,\r\n}\r\n","export const enum CaseLenderStateEnum {\r\n Shortlisted = 0,\r\n Received = 1,\r\n Offered = 2,\r\n Rejected = 3,\r\n Withdrawn = 4,\r\n Cancelled = 5,\r\n Applied = 10,\r\n SentToPackager = 11\r\n}\r\n","export const enum ExistingPlanningChangeTypeEnum {\r\n None = 0,\r\n EnhancedPlanningOnExistingBuilding = 1,\r\n PermittedDevelopmentOnExistingBuilding = 2,\r\n BrandNewPlanningApplication = 3,\r\n}\r\n","export const enum ExitStrategyEnum {\r\n None = 0,\r\n Sale = 1,\r\n Refinance = 2,\r\n PartSalePartRefinance = 8,\r\n SaleOfAlternativeAsset = 16,\r\n Other = 4,\r\n}\r\n","export const enum LenderProductTypeEnum {\r\n None = 0,\r\n All = 1,\r\n DevelopmentFinance = 2,\r\n BridgingFinance = 4,\r\n CommercialMortgages = 8,\r\n}\r\n","export const enum LoanPurposeEnum {\r\n Speed = 1,\r\n DepositForAnotherPurchase = 2,\r\n Rebridge = 3,\r\n Other = 4,\r\n ChainBreak = 5,\r\n AuctionPurchase = 6,\r\n Refurbishment = 7,\r\n AnyOtherLegalPurpose = 8,\r\n}\r\n","export const enum ModuleEnum {\r\n CaseOverview = 0,\r\n DeveloperProfile = 1,\r\n DevelopmentAppraisal = 2,\r\n DevelopmentSchedule = 3,\r\n Planning = 4,\r\n ProfessionalTeam = 5,\r\n ComparableProperties = 6,\r\n Case = 7,\r\n Track = 8,\r\n AssetsLiabilities = 9,\r\n ProofOfIncome = 10,\r\n ApplicantDetails = 11,\r\n Images = 12,\r\n DIP = 13,\r\n Property = 14,\r\n BuildCosts = 15,\r\n}\r\n","export const enum OwnNewDevelopmentEnum {\r\n UKLimitedCompany = 1,\r\n UKLimitedLiabilityPartnership = 2,\r\n PersonalNames = 3,\r\n OverseasLimitedCompany = 4,\r\n PensionFund = 5,\r\n Other = 6,\r\n}\r\n","export const enum PropertyTypeDetailEnum {\r\n None = 0,\r\n Houses = 1,\r\n Flats = 2,\r\n HousesAndFlats = 4,\r\n}\r\n","export const enum TenureEnum {\r\n Freehold = 0,\r\n Leasehold = 1,\r\n Other = 2,\r\n ShareOfFreehold = 3,\r\n CommonholdOwnership = 4,\r\n JointOwnershipJointTenants = 5,\r\n JointOwnershipTenantsInCommon = 6,\r\n}\r\n","export const enum TitleEnum {\r\n None = 0,\r\n Mr = 1,\r\n Mrs = 2,\r\n Miss = 3,\r\n Ms = 4,\r\n Other = 5,\r\n}\r\n","export const enum EventLogEnum {\r\n None = 0,\r\n PageLoad = 1,\r\n Save = 2,\r\n Shortlisting = 3,\r\n Export = 4,\r\n LenderReferral = 5,\r\n EnterpriseUserRegistration = 6,\r\n EnterpriseUserLogin = 7,\r\n}\r\n","import { AddressHistoryDTO } from \"@js/DTO/AddressHistoryDTO.cs.d\";\r\nimport { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseChangedMessageDTO } from \"@js/DTO/CaseChangedMessageDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { DealClientDTO } from \"@js/DTO/Deal/DealClientDTO.cs.d\";\r\nimport { DealDTO } from \"@js/DTO/Deal/DealDTO.cs.d\";\r\nimport { DealFileAttachmentDTO } from \"@js/DTO/Deal/DealFileAttachmentDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { DealNoteDTO } from \"@js/DTO/Deal/DealNoteDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { ExternalLinksDTO } from \"@js/DTO/ExternalLinksDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { LenderDTO } from \"@js/DTO/LenderDTO.cs.d\";\r\nimport { InvitedUserResponse } from \"@js/DTO/Messages/Deal/InvitedUserMessage.cs.d\";\r\nimport { LenderInfo } from \"@js/DTO/Messages/Deal/LendersInfoForSubmitToLenderMessage.cs.d\";\r\nimport { PromoteSearchToCaseResponse } from \"@js/DTO/Messages/Deal/PromoteSearchToCaseMessage.cs.d\";\r\nimport { SaveBridgingSearchRequest } from \"@js/DTO/Messages/Deal/SaveBridgingSearchMessage.cs.d\";\r\nimport { ShareModuleRequest } from \"@js/DTO/Messages/Deal/ShareModuleMessage.cs.d\";\r\nimport { SubmitToLendersRequest } from \"@js/DTO/Messages/Deal/SubmitToLendersMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { AppraisalModuleEnum } from \"@js/models/enum/AppraisalModuleEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { ExistingPlanningChangeTypeEnum } from \"@js/models/enum/ExistingPlanningChangeTypeEnum.cs.d\";\r\nimport { ExitStrategyEnum } from \"@js/models/enum/ExitStrategyEnum.cs.d\";\r\nimport { LandOrPropertyEnum } from \"@js/models/enum/LandOrPropertyEnum.cs.d\";\r\nimport { LenderProductTypeEnum } from \"@js/models/enum/LenderProductTypeEnum.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { LoanPurposeEnum } from \"@js/models/enum/LoanPurposeEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { OwnNewDevelopmentEnum } from \"@js/models/enum/OwnNewDevelopmentEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeDetailEnum } from \"@js/models/enum/PropertyTypeDetailEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { TenureEnum } from \"@js/models/enum/TenureEnum.cs.d\";\r\nimport { TitleEnum } from \"@js/models/enum/TitleEnum.cs.d\";\r\nimport { YesNoMaybe } from \"@js/models/enum/YesNoMaybeEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { AccountService } from \"@js/services/AccountService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { BridgingDealService } from \"@js/services/Deal/BridgingDealService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealNoteService } from \"@js/services/Deal/DealNoteService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { SharedDealService } from \"@js/services/Deal/SharedDealService\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\nimport { DealFileAttachmentService } from \"@js/services/DealFileAttachmentService\";\r\nimport { ExternalLinksService } from \"@js/services/ExternalLinksService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { StreetAddressService } from \"@js/services/StreetAddressService\";\r\nimport angular from \"angular\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\n\r\nexport class BridgingCaseController {\r\n isCaseDashboard: boolean = true;\r\n\r\n dataLoading: boolean;\r\n currentUser: ApplicationUserDTO;\r\n dealId: number;\r\n dealDto: BridgingDealDTO;\r\n tempDealDto: BridgingDealDTO;\r\n orgName: string;\r\n orgId: number;\r\n org: OrganisationDTO;\r\n fileNamePrefix: string = \"Brickflow\";\r\n newNote: DealNoteDTO = {} as DealNoteDTO;\r\n\r\n BridgingCaseDashboardTypeEnum = {\r\n Overview: 0,\r\n Borrower: 1,\r\n Property: 2,\r\n Loan: 3,\r\n };\r\n\r\n CountryList = [];\r\n NationalityList = [];\r\n\r\n selectedNavMenu: number = 0;\r\n\r\n dealForm: ng.IFormController;\r\n ownershipForm: ng.IFormController;\r\n companyDetailsForm: ng.IFormController;\r\n propertyDetailsForm: ng.IFormController;\r\n loanDetailsForm: ng.IFormController;\r\n lenderDetailsForm: ng.IFormController;\r\n\r\n personalDetailsForm: ng.IFormController;\r\n contactForm: ng.IFormController;\r\n occupationForm: ng.IFormController;\r\n creditForm: ng.IFormController;\r\n\r\n qualificationComplete: boolean = false;\r\n showAddressHistoryModal: boolean = false;\r\n\r\n tabs = {\r\n tabOpen: false,\r\n ownership: false,\r\n companyDetails: false,\r\n personalDetails: false,\r\n contactDetails: false,\r\n occupation: false,\r\n credit: false,\r\n };\r\n\r\n purchaseSelected: boolean = false;\r\n ownershipType: string = \"\";\r\n\r\n currentApplicant: DealClientDTO;\r\n tempApplicant: DealClientDTO;\r\n applicantList: DealClientDTO[] = [];\r\n appName: string;\r\n\r\n deal: DealDTO;\r\n\r\n searchterm: string;\r\n previousAddressSearchTerm: string;\r\n PostCodeOptions: PostalAddress[] = [];\r\n previousAddressPostCodeOptions: PostalAddress[] = [];\r\n address: PostalAddress;\r\n searchingForAddress: boolean = false;\r\n searchingForPreviousAddress: boolean = false;\r\n searchresults: string = \"\";\r\n previousAddressSearchResults: string[];\r\n addressHistoryItem: AddressHistoryDTO;\r\n applicantAddressHistory: AddressHistoryDTO[] = [];\r\n\r\n propertyTypeOptions = [];\r\n exitStrategyOptions = [];\r\n interestServiceOrRoll = [];\r\n tenureTypes = [];\r\n maritalStatusOptions = [];\r\n ownOrPurchaseOptions = [];\r\n chargeTypeOptions = [];\r\n ownNewDevelopmentOptions = [];\r\n yesNoOptions = [];\r\n siteTypeOptions = [];\r\n buildingConditionOptions = [];\r\n sourceOfIncomeOptions = [];\r\n loanPurposeOptions = [];\r\n projectCompletionOptions = [];\r\n planningStatusAtStartOfDevOptions = [];\r\n planningStatusAtEndOfDevOptions = [];\r\n planningOptions = [];\r\n titleOptions = [];\r\n existingPlanningChangeTypeOptions = [];\r\n buildStageOptions = [];\r\n ownershipRoleOptions = [];\r\n\r\n countryList = [];\r\n nationalityList = [];\r\n\r\n countryOfBirthList = [];\r\n countryOfResidenceList = [];\r\n loanCompletionTypeOptions = [];\r\n refurbishmentLevelOptions = [];\r\n locationOptions = [];\r\n\r\n //modal\r\n message: string = \"\";\r\n modal: boolean = false;\r\n showErrorMessage: boolean = false;\r\n\r\n uploadingFiles: FileUploadProgressDTO[];\r\n fileUpload: DealFileAttachmentDTO[];\r\n total: number = 0;\r\n renamingFile: DealFileAttachmentDTO;\r\n\r\n // Number of note shown on the casedashboard\r\n maxNotes: number = 4;\r\n\r\n // Controls showing Ts & Cs when a borrower/broker submits to lenders\r\n showTsAndCs: boolean = false;\r\n showApplyTsAndCs: boolean = false;\r\n showRequestEmailForm: boolean = false;\r\n requestMessageReason: string = \"\";\r\n showTsAndCsForm: boolean = false;\r\n sendingMessage: boolean = false;\r\n messagebool: boolean = false;\r\n invalidEmail: boolean = false;\r\n\r\n isBroker: boolean = false;\r\n isAdmin: boolean = false;\r\n isLender: boolean = false;\r\n isClient: boolean = false;\r\n isSubmitted: boolean = false;\r\n\r\n isSubmittedToLenders: boolean = false;\r\n messageContent: string;\r\n dealLender: DealLenderDTO;\r\n\r\n //Boolean to enable a re-submit button\r\n hasShortlistedDealLenders: boolean = false;\r\n\r\n caseStatusOptions = [];\r\n caseStatusText: string = \"\";\r\n caseOverview: string;\r\n\r\n selectedLendersName: string = \"\";\r\n shortlistedLendersName: string = \"\";\r\n\r\n //Sharing case\r\n shareContext: AppraisalModuleEnum = null;\r\n caseMembersWithAccess: ClientDTO[];\r\n showShare: boolean = false;\r\n selectedClientToShareWith: ClientDTO;\r\n shareNote: string;\r\n showModuleShareConfirmation: boolean;\r\n\r\n //show profile view\r\n showAppraisalPermission: boolean = false;\r\n\r\n //profile\r\n newApplicant: DealClientDTO;\r\n\r\n maxDateOfBirth: Date = new Date();\r\n minDateOfBirth: Date = new Date(\"Jan 01 1900\");\r\n maxDateForDateField: Date = new Date(\"Jan 01 3000\");\r\n showAddorEdit: boolean = false;\r\n disableQuickEditSave: boolean = false;\r\n applicantForm: ng.IFormController;\r\n isAddShareholder: boolean;\r\n showDelete: boolean = false;\r\n confirmDeleteApplicant: DealClientDTO;\r\n\r\n showExport: boolean = false;\r\n updatingName: boolean = false;\r\n orginalDealName: string;\r\n\r\n showAddHistoryConfirmDelete: boolean = false;\r\n addressHistoryIdToDelete: number;\r\n\r\n isLoggedInUser: boolean = false;\r\n\r\n showDeal: boolean = true;\r\n classUses: {} = {};\r\n\r\n tinymceOptions: any;\r\n tinymceReadonlyOptions: any;\r\n missingAddressGaps: string[];\r\n\r\n ownOrPurchase: boolean;\r\n landOrProperty: boolean;\r\n isFamilyInResidence: boolean;\r\n totalCosts: number = 0;\r\n\r\n dateProperties = [\"ExpiryDate\"];\r\n\r\n profileDateProperties = [\r\n \"DateOfBirth\",\r\n \"CurrentAddressFrom\",\r\n \"UkResidenceIssueDate\",\r\n \"CurrentEmploymentStartDate\",\r\n \"AddressStartDate\",\r\n ];\r\n\r\n dealDateProperties = [\"OriginalPurchaseDate\", \"CompletionDate\"];\r\n\r\n clientDateProperties = [\"DateOfBirth\"];\r\n\r\n maxPurchaseDate: Date = new Date();\r\n minPurchaseDate: Date = new Date(\"Jan 01 1900\");\r\n\r\n minCompletionDate: Date;\r\n dealProductTypeDisplayText: string;\r\n isInActiveLender: boolean = false;\r\n\r\n contingencyAmount: number = null;\r\n lendersDetailsForSubmittoLenders: LenderInfo[];\r\n shortListedLendersId: Number[];\r\n //SubmitToLender modal\r\n brokerPreferredContact: string;\r\n isBrokerPhoneNumberUpdated: boolean = false;\r\n brokerCommission: number;\r\n dealBrokerUser: ApplicationUserDTO;\r\n totalUnreadDealLenderMessages: number = null;\r\n\r\n //Lender Portal Links\r\n dealLenders: DealLenderDTO[];\r\n dealLendersWithPortalLinkEnabled: DealLenderDTO[];\r\n lendersWithPortalLinkEnabled: LenderDTO[];\r\n showLenderPortalLinks: boolean = false;\r\n portalLinks: {} = {};\r\n borrowerDetails: UserSimpleDTO;\r\n applicationForm: ng.IFormController;\r\n portalLinkDetailsAdded: {} = {};\r\n showMaximumApplicantsMessage: boolean = false;\r\n //property for roles directive to handle referred readonly view for broker/connect broker\r\n isReadOnlyDeal: boolean = true;\r\n hasFirstLoadOccurred: boolean = false;\r\n\r\n referredPackagerText: string;\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"AccountService\",\r\n \"StreetAddressService\",\r\n \"BridgingDealService\",\r\n \"DealNoteService\",\r\n \"AuthService\",\r\n \"SelectListService\",\r\n \"RoleService\",\r\n \"LenderService\",\r\n \"CaseService\",\r\n \"DealLenderService\",\r\n \"DealFileAttachmentService\",\r\n \"$window\",\r\n \"ExternalLinksService\",\r\n \"DealClientService\",\r\n \"OrganisationService\",\r\n \"$scope\",\r\n \"$sce\",\r\n \"ProductService\",\r\n \"DealService\",\r\n \"SharedDealService\",\r\n \"EventLogService\"\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $accountservice: AccountService,\r\n private $streetAddressService: StreetAddressService,\r\n private bridgingDealService: BridgingDealService,\r\n private dealNoteService: DealNoteService,\r\n private authService: AuthService,\r\n private selectListService: SelectListService,\r\n private roleService: RoleService,\r\n private $lenderService: LenderService,\r\n private caseService: CaseService,\r\n private dealLenderService: DealLenderService,\r\n private dealFileAttachmentService: DealFileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private $externalLinksService: ExternalLinksService,\r\n private dealClientService: DealClientService,\r\n private organisationService: OrganisationService,\r\n private $scope: ng.IScope,\r\n private $sce: ng.ISCEService,\r\n private productService: ProductService,\r\n private dealService: DealService,\r\n private sharedDealService: SharedDealService,\r\n private eventLogService: EventLogService\r\n ) {\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n }\r\n\r\n this.tinymceOptions = this.sharedDealService.tinymceOptions;\r\n this.tinymceReadonlyOptions = angular.copy(this.tinymceOptions);\r\n this.tinymceReadonlyOptions.readonly = 1;\r\n\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"client\").length > 0) {\r\n this.isClient = true;\r\n } else {\r\n this.isClient = false;\r\n }\r\n });\r\n\r\n if (this.$routeParams.DealId) {\r\n this.dataLoading = true;\r\n\r\n this.dealId = this.$routeParams.DealId;\r\n if (\r\n this.$routeParams.Promote &&\r\n this.$routeParams.Promote != \"null\" &&\r\n !this.dealDto\r\n ) {\r\n var promote = this.$routeParams.Promote as boolean;\r\n this.isReadOnlyDeal = false;\r\n this.hasFirstLoadOccurred = true;\r\n if (promote) {\r\n this.promoteSearchToCase();\r\n }\r\n } else {\r\n this.dealService.fetchByDealId(this.$routeParams.DealId, ProductFamilyEnum.Bridging, true)\r\n .then((response) => {\r\n // The case was a pre-existing case when the broker org became a member of Connect and therefore was archived.\r\n if (response.BridgingDealDto.IsPreConnectArchived) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n\r\n //Below properties are very imp for view roles directive \r\n this.isReadOnlyDeal = response.IsReadOnlyDealForBroker;\r\n this.referredPackagerText = response.ReferredPackagerText;\r\n this.hasFirstLoadOccurred = true;\r\n if (response.HideBridgingDeal) {\r\n this.showDeal = false;\r\n } else {\r\n this.dealDto = response.BridgingDealDto;\r\n this.shortlistedLendersName = response.ShortlistedLendersName;\r\n this.selectedLendersName = response.SelectedLendersName;\r\n this.shortListedLendersId = response.ShortlistedLendersId;\r\n if (this.dealDto) {\r\n this.orgId = this.dealDto.BrokerOrganisationId;\r\n if (this.dealDto.ProjectDescription) {\r\n this.caseOverview = this.dealDto.ProjectDescription;\r\n }\r\n this.totalUnreadDealLenderMessages =\r\n response.TotalUnreadDealLenderMessages;\r\n this.postRetrieveProcessing();\r\n\r\n var newShortlist = this.$routeParams.NewShortlist as boolean;\r\n if (newShortlist) this.getLenderPortalLinks();\r\n } else {\r\n // If no case is returned, this could be that the logged in user has been removed from the case\r\n // - only do this if there is a logged in user, otherwise let the routing sort out where the redirect should go\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n this.countryOfBirthList = this.countryOfResidenceList =\r\n this.selectListService.GetCountries();\r\n\r\n this.nationalityList = this.selectListService.GetNationalities();\r\n\r\n this.chargeTypeOptions = this.selectListService.GetChargeType();\r\n this.ownOrPurchaseOptions = this.selectListService.GetOwnOrPurchase();\r\n this.maritalStatusOptions =\r\n this.selectListService.GetMaritalStatusOptions();\r\n this.propertyTypeOptions = this.selectListService.GetPropertyType();\r\n this.exitStrategyOptions = this.selectListService.GetExitStrategy(false);\r\n this.interestServiceOrRoll =\r\n this.selectListService.GetInterestServiceOrRoll();\r\n this.ownNewDevelopmentOptions =\r\n this.selectListService.GetOwnNewDevelopmentOptions();\r\n\r\n this.yesNoOptions = this.selectListService.GetYesNoForBridging();\r\n this.siteTypeOptions = this.selectListService.GetSiteType();\r\n this.buildingConditionOptions =\r\n this.selectListService.GetBuildingConditionType();\r\n this.sourceOfIncomeOptions =\r\n this.selectListService.GetSourceOfIncomeOptions();\r\n this.projectCompletionOptions =\r\n this.selectListService.GetCompletionOptions();\r\n this.planningStatusAtStartOfDevOptions =\r\n this.selectListService.GetPlanningStatusAtStartOfDevelopmentOptions();\r\n this.planningStatusAtEndOfDevOptions =\r\n this.selectListService.GetPlanningStatusAtEndOfDevelopmentOptions();\r\n this.titleOptions = this.selectListService.GetTitleOptions();\r\n this.existingPlanningChangeTypeOptions =\r\n this.selectListService.GetExistingPlanningChangeTypeOptions();\r\n this.loanCompletionTypeOptions =\r\n this.selectListService.GetLoanCompletionOptions();\r\n this.buildStageOptions = this.selectListService.GetBuildStageOptions();\r\n this.ownershipRoleOptions =\r\n this.selectListService.GetOwnershipRoleOptions();\r\n this.refurbishmentLevelOptions =\r\n this.selectListService.GetRefurbishmentLevelOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n\r\n this.getAppName();\r\n }\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) {\r\n if (this.isReadOnlyDeal) {\r\n return `['Admin', 'Client']`;\r\n } else {\r\n return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n }\r\n }\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n editDealName() {\r\n var name = this.dealDto.Name;\r\n this.orginalDealName = name;\r\n this.updatingName = true;\r\n }\r\n cancelEditDealName() {\r\n this.updatingName = false;\r\n this.dealDto.Name = this.orginalDealName;\r\n }\r\n\r\n /**Gets the Case Status display text */\r\n getCaseStatusDisplayText() {\r\n var statusItem = null;\r\n\r\n if (this.isLender) {\r\n statusItem = this.caseStatusOptions.find(\r\n (statusOption) => this.dealLender.Status == statusOption.key,\r\n );\r\n } else {\r\n statusItem = this.caseStatusOptions.find(\r\n (statusOption) => this.dealDto.Status == statusOption.key,\r\n );\r\n }\r\n\r\n this.caseStatusText = statusItem.displayName;\r\n }\r\n\r\n postRetrieveProcessing() {\r\n if (this.$routeParams.selectedNavMenu) {\r\n this.selectedNavMenu = this.$routeParams.selectedNavMenu;\r\n }\r\n\r\n this.dealLenderService\r\n .fetchByDealId(this.$routeParams.DealId)\r\n .then((dls: DealLenderDTO[]) => {\r\n this.hasShortlistedDealLenders = dls.some(\r\n (dl) => dl.Status == CaseLenderStateEnum.Shortlisted,\r\n );\r\n });\r\n\r\n //These are used for directive.\r\n (this.$rootScope as any).statusRequirementId = this.dealDto.Id;\r\n this.caseService.updateCaseState(this.dealDto.Id, this.dealDto.Status);\r\n this.getCurrentUserAndRoles();\r\n this.fileUpload = this.dealDto.Attachments;\r\n this.applicantList = this.dealDto.DealClients;\r\n this.loanPurposeOptions = this.selectListService.GetLoanPurposeOptions(\r\n this.isRegulatedBridging(),\r\n );\r\n this.getPlanningOptions();\r\n this.updateClassUses();\r\n this.tenureTypes = this.selectListService.GetTenureTypes(\r\n this.dealDto.ProductType,\r\n );\r\n this.dealProductTypeDisplayText =\r\n this.productService.getProductTypeDisplayText(\r\n this.dealDto.ProductType,\r\n this.isRegulatedBridging(),\r\n );\r\n\r\n this.calcContingencyAmount();\r\n\r\n if (this.dealDto.BrokerOrganisationId) {\r\n this.getOrganisationbyDealId();\r\n }\r\n }\r\n\r\n keyPressEvent(event) {\r\n if (event.key === \"Enter\") {\r\n this.updatingName = false;\r\n this.submitForm(this.dealForm);\r\n }\r\n if (event.key === \"Escape\") {\r\n this.updatingName = false;\r\n }\r\n }\r\n\r\n submitForm(form: ng.IFormController) {\r\n this.dataLoading = true;\r\n\r\n var request: SaveBridgingSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: null,\r\n OrgCode: \"\",\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n this.bridgingDealService\r\n .saveBridgingSearchReturnsId(request)\r\n .then((response) => {\r\n if (response != null) {\r\n this.closeTabs();\r\n form.$setPristine();\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n closeModalAndGoToDasboard() {\r\n this.showTsAndCs = false;\r\n this.authService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n closeModalAndGoToDealForum() {\r\n this.showTsAndCs = false;\r\n this.$location.path(\"/dealforum/\" + this.dealDto.Id);\r\n }\r\n\r\n closeModal(test: number) {\r\n this.messagebool = false;\r\n }\r\n\r\n closeTabs(currentTab: string = \"\") {\r\n for (let key in this.tabs) {\r\n if (currentTab.length == 0 || currentTab != key) {\r\n this.tabs[key] = false;\r\n }\r\n }\r\n }\r\n\r\n discardOwnership() {\r\n this.dealDto.HowWillYouOwnNewDevelopment = null;\r\n //this.companyDetails.temp = null;\r\n this.dealDto.ExcludedLenders = null;\r\n this.dealDto.HasTheCompanyOrPensionBeenFormedYet = null;\r\n }\r\n\r\n gotoApplicant(applicant?: DealClientDTO) {\r\n this.currentApplicant = applicant || null;\r\n this.PostCodeOptions = null;\r\n\r\n if (\r\n this.currentApplicant &&\r\n this.currentApplicant.Profile &&\r\n this.currentApplicant.Profile.AddressHistory &&\r\n this.currentApplicant.Profile.AddressHistory.length > 0\r\n ) {\r\n this.parseAddressHistory(this.currentApplicant.Profile.AddressHistory);\r\n } else {\r\n this.applicantAddressHistory = [];\r\n }\r\n\r\n this.selectedNavMenu = 4;\r\n this.closeTabs();\r\n }\r\n\r\n getOwnershipTypeText(): string {\r\n var ownershipTypeText;\r\n\r\n if (this.dealDto && this.dealDto.HowWillYouOwnNewDevelopment) {\r\n switch (this.dealDto.HowWillYouOwnNewDevelopment) {\r\n case OwnNewDevelopmentEnum.UKLimitedCompany:\r\n this.ownershipType = ownershipTypeText = \"Company\";\r\n break;\r\n case OwnNewDevelopmentEnum.OverseasLimitedCompany:\r\n this.ownershipType = ownershipTypeText = \"Overseas Company\";\r\n break;\r\n case OwnNewDevelopmentEnum.PensionFund:\r\n this.ownershipType = ownershipTypeText = \"Pension Fund\";\r\n break;\r\n case OwnNewDevelopmentEnum.UKLimitedLiabilityPartnership:\r\n ownershipTypeText = \"Limited Liability Partnership\";\r\n this.ownershipType = \"Partnership\";\r\n break;\r\n default:\r\n ownershipTypeText = \"\";\r\n }\r\n return ownershipTypeText;\r\n }\r\n return \"\";\r\n }\r\n\r\n openAddressHistoryModal(addressHistory: AddressHistoryDTO = null) {\r\n this.previousAddressSearchResults = [];\r\n this.previousAddressPostCodeOptions = [];\r\n\r\n if (addressHistory) {\r\n this.addressHistoryItem = addressHistory;\r\n } else {\r\n this.addressHistoryItem = null;\r\n }\r\n\r\n this.showAddressHistoryModal = true;\r\n }\r\n\r\n addressHistoryComplete() {\r\n return this.sharedDealService.addressHistoryComplete(\r\n this.currentApplicant,\r\n this.applicantAddressHistory,\r\n this.missingAddressGaps,\r\n );\r\n }\r\n\r\n getAddressList(searchTerm: string, postalAddress: PostalAddress) {\r\n let foundMatch = false;\r\n\r\n if (this.PostCodeOptions && this.PostCodeOptions.length > 0) {\r\n let addressLookup = this.PostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n for (let prop in address) {\r\n if (address.hasOwnProperty(prop)) {\r\n postalAddress[prop] = address[prop];\r\n }\r\n }\r\n this.searchterm = \"\";\r\n this.searchresults = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n postalAddress.AddressLine1 = addressLookup.AddressLine2.replace(\r\n addressLookup.AddressLine2.substring(\r\n addressLookup.AddressLine2.indexOf(\"-\") - 1,\r\n ),\r\n \"\",\r\n );\r\n postalAddress.AddressLine2 = addressLookup.AddressLine3;\r\n postalAddress.PostCode = addressLookup.AddressLine1;\r\n this.searchterm = \"\";\r\n this.searchresults = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n this.PostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n lookupPreviousAddress(searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.previousAddressPostCodeOptions &&\r\n this.previousAddressPostCodeOptions &&\r\n this.previousAddressPostCodeOptions.length > 0\r\n ) {\r\n let addressLookup = this.previousAddressPostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n this.addressHistoryItem = {\r\n AddressLine1: address.AddressLine1,\r\n AddressLine2: address.AddressLine2,\r\n AddressLine3: address.AddressLine3,\r\n AddressLine4: address.AddressLine4,\r\n PostCode: address.PostCode,\r\n };\r\n\r\n this.previousAddressSearchTerm = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.addressHistoryItem = {\r\n AddressLine1: addressLookup.AddressLine2,\r\n AddressLine2: addressLookup.AddressLine3,\r\n AddressLine3: addressLookup.AddressLine4,\r\n AddressLine4: addressLookup.PostCode,\r\n PostCode: addressLookup.AddressLine1,\r\n };\r\n\r\n this.previousAddressSearchTerm = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.previousAddressPostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.previousAddressPostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n saveAddressHistory(selectedApplicant: DealClientDTO) {\r\n var id: number = 0;\r\n\r\n if (!this.applicantAddressHistory) {\r\n this.applicantAddressHistory = [];\r\n }\r\n\r\n // If the Id hasn't been set then this is a new previous address\r\n if (this.addressHistoryItem.Id == null) {\r\n id = this.getNextAddressHistoryId();\r\n this.addressHistoryItem.Id = id;\r\n this.applicantAddressHistory.push(this.addressHistoryItem);\r\n } else {\r\n var foundIndex = this.applicantAddressHistory\r\n .map(function (a) {\r\n return a.Id;\r\n })\r\n .indexOf(this.addressHistoryItem.Id);\r\n if (foundIndex > -1) {\r\n this.applicantAddressHistory.splice(\r\n foundIndex,\r\n 1,\r\n this.addressHistoryItem,\r\n ); // removed previous entry and adds the updated one in its place\r\n }\r\n }\r\n\r\n this.dealClientService\r\n .saveAddressHistory(\r\n selectedApplicant.Id,\r\n JSON.stringify(this.applicantAddressHistory),\r\n )\r\n .then((addressHistory: string) => {\r\n selectedApplicant.Profile.AddressHistory = addressHistory;\r\n this.parseAddressHistory(addressHistory);\r\n this.showAddressHistoryModal = false;\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem saving the address history. Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.showAddressHistoryModal = false;\r\n });\r\n }\r\n\r\n /**\r\n * Convert addres history JSON back to an array of PostalAddress objects\r\n * @param addressHistoryJson\r\n */\r\n parseAddressHistory(addressHistoryJson: string) {\r\n // JSON doesn't understand date types so therefore user the reviver function to manually convert them back to dates as opposed to strings\r\n this.applicantAddressHistory = JSON.parse(addressHistoryJson, this.sharedDealService.reviver);\r\n\r\n // Order the address histories by the from date (ascending)\r\n this.applicantAddressHistory.sort(\r\n (a: AddressHistoryDTO, b: AddressHistoryDTO) => {\r\n return this.sharedDealService.getTime(a.FromDate) - this.sharedDealService.getTime(b.FromDate);\r\n },\r\n );\r\n }\r\n\r\n getAddressAsString(address: PostalAddress) {\r\n return this.sharedDealService.getAddressAsString(address);\r\n }\r\n\r\n concatenateAddressLine(addressLine: string, concatenatedAddress: string) {\r\n if (addressLine != null && addressLine.length > 0) {\r\n if (concatenatedAddress.length > 0) {\r\n concatenatedAddress = concatenatedAddress.concat(\", \", addressLine);\r\n } else {\r\n concatenatedAddress = concatenatedAddress.concat(addressLine);\r\n }\r\n }\r\n\r\n return concatenatedAddress;\r\n }\r\n\r\n showConfirmAddressDelete(addressHistoryId: number) {\r\n this.showAddHistoryConfirmDelete = true;\r\n this.addressHistoryIdToDelete = addressHistoryId;\r\n }\r\n\r\n deleteAddressHistory() {\r\n this.showAddHistoryConfirmDelete = false;\r\n\r\n var foundIndex = this.applicantAddressHistory\r\n .map(function (a) {\r\n return a.Id;\r\n })\r\n .indexOf(this.addressHistoryIdToDelete);\r\n\r\n if (foundIndex > -1) {\r\n this.applicantAddressHistory.splice(foundIndex, 1);\r\n\r\n this.dealClientService\r\n .saveAddressHistory(\r\n this.currentApplicant.Id,\r\n JSON.stringify(this.applicantAddressHistory),\r\n )\r\n .then((addressHistory: string) => {\r\n this.currentApplicant.Profile.AddressHistory = addressHistory;\r\n this.parseAddressHistory(addressHistory);\r\n this.showAddressHistoryModal = false;\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem deleting the address history item. Please try again later.\";\r\n });\r\n }\r\n }\r\n\r\n getNextAddressHistoryId(): number {\r\n return this.sharedDealService.getNextAddressHistoryId(\r\n this.applicantAddressHistory,\r\n );\r\n }\r\n\r\n /** Promotes/converts a search to a case */\r\n promoteSearchToCase() {\r\n this.dealService\r\n .promoteSearchToCase(this.dealId, ProductFamilyEnum.Bridging)\r\n .then((response: PromoteSearchToCaseResponse) => {\r\n if (response != null && response.BridgingDealDto != null) {\r\n this.dealDto = response.BridgingDealDto;\r\n this.shortlistedLendersName = response.ShortlistedLendersName;\r\n this.selectedLendersName = response.SelectedLendersName;\r\n this.shortListedLendersId = response.ShortlistedLendersId;\r\n this.postRetrieveProcessing();\r\n this.getCurrentUserAndRoles();\r\n } else {\r\n this.message =\r\n \"Problem while promoting a search to case, please try after some time.\";\r\n this.showErrorMessage = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.getLenderPortalLinks();\r\n });\r\n }\r\n\r\n getLenderPortalLinks() {\r\n this.dealLenderService\r\n .fetchByDealId(this.$routeParams.DealId)\r\n .then((dls: DealLenderDTO[]) => {\r\n this.dealLenders = dls;\r\n var searchChanged = this.$routeParams.SearchChanged;\r\n const lenderIds = dls\r\n .filter(\r\n (dl) =>\r\n !dl.HasAppliedInLenderPortal &&\r\n (dl.Status === CaseLenderStateEnum.Shortlisted ||\r\n searchChanged == \"true\"),\r\n )\r\n .map((dl) => dl.LenderId);\r\n return this.$lenderService.getLenderPortalLinks(lenderIds);\r\n })\r\n .then((links) => {\r\n this.portalLinks = links;\r\n })\r\n .catch((error) => {\r\n this.message = \"Error fetching lender portal links: \" + error;\r\n this.portalLinks = null;\r\n })\r\n .finally(() => {\r\n this.showLenderPortalLinks = Object.keys(this.portalLinks).length > 0;\r\n });\r\n }\r\n\r\n openPortalLink(dealLenderId: number, url: string) {\r\n if (!this.portalLinkDetailsAdded[dealLenderId]) {\r\n this.dealLenderService\r\n .addLenderPortalLinkDetails(dealLenderId, this.borrowerDetails)\r\n .then(() => {\r\n this.portalLinkDetailsAdded[dealLenderId] = true;\r\n this.openUrl(url);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error adding lender portal link details:\", error);\r\n });\r\n } else {\r\n this.openUrl(url);\r\n }\r\n }\r\n\r\n private openUrl(url: string) {\r\n if (!/^https?:\\/\\//i.test(url)) {\r\n url = \"http://\" + url;\r\n }\r\n window.open(url, \"_blank\");\r\n }\r\n\r\n saveNote(): void {\r\n this.newNote.DealId = this.dealDto.Id;\r\n this.newNote.UserId = this.currentUser.Id;\r\n\r\n this.dataLoading = true;\r\n this.dealNoteService\r\n .addUpdate(this.newNote)\r\n .then((response) => {\r\n this.dealDto.DealNotes.push(response);\r\n this.newNote = {\r\n DealId: this.dealDto.Id,\r\n UserId: this.currentUser.Id,\r\n } as DealNoteDTO;\r\n this.dealForm.$setPristine();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n saveOverview(): void {\r\n this.dealDto.ProjectDescription = this.caseOverview;\r\n this.submitForm(this.dealForm);\r\n }\r\n\r\n gotoResultpage() {\r\n this.showErrorMessage = false;\r\n this.$location.path(\"/bridgingresults/\" + this.dealId);\r\n }\r\n\r\n onFileSelect(files) {\r\n var module = ModuleEnum.Case;\r\n\r\n this.dealFileAttachmentService\r\n .UploadFileListInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.dealDto.Id,\r\n this.fileUpload,\r\n module,\r\n )\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n calculateTotalFilesRemoving(filter: number) {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module != filter,\r\n ).length;\r\n }\r\n return this.total;\r\n }\r\n\r\n EnumToString(item: ModuleEnum) {\r\n switch (item) {\r\n case 0:\r\n return \"Case Overview\";\r\n case 1:\r\n return \"Developer Profile\";\r\n case 2:\r\n return \"Development Appraisal\";\r\n case 3:\r\n return \"Development Schedule\";\r\n case 4:\r\n return \"Planning\";\r\n case 5:\r\n return \"Professional Team\";\r\n case 6:\r\n return \"Comparable Properties\";\r\n case 7:\r\n return \"General\";\r\n case 8:\r\n return \"Track Record\";\r\n case 9:\r\n return \"Assets & Liabilities\";\r\n case 10:\r\n return \"Proof Of Income\";\r\n case 11:\r\n return \"Applicant Details\";\r\n case 12:\r\n return \"Pictures\";\r\n default:\r\n return \"General\";\r\n }\r\n }\r\n\r\n downloadFile(file: DealFileAttachmentDTO, downloadFile: boolean = false) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n if (downloadFile) {\r\n this.sharedDealService.downloadFile(uri, file.FileName);\r\n } else {\r\n this.$window.open(uri);\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n renameFile(file: DealFileAttachmentDTO) {\r\n if (this.renamingFile === undefined) {\r\n // if renaming this file will dirty the case, we'll want to set it back to pristine when we're done.\r\n // this.renamingFileDirties = !$scope.caseForm.$dirty;\r\n this.renamingFile = file;\r\n } else {\r\n delete this.renamingFile;\r\n }\r\n }\r\n renamingFileComplete(file: DealFileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .renameFile(file)\r\n .then((response) => {\r\n file.TempURL = response.TempURL;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n renamingLinkCompleted(link: ExternalLinksDTO) {\r\n this.dataLoading = true;\r\n this.$externalLinksService\r\n .addUpdate(link)\r\n .then((response) => {\r\n link.Link = response.Link;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n deleteFile(file: DealFileAttachmentDTO) {\r\n this.dealDto.Attachments.splice(this.dealDto.Attachments.indexOf(file), 1);\r\n this.dealFileAttachmentService.markasdeleted(file.Id).then((result) => { }); //remove on the server\r\n }\r\n\r\n markSectionAsComplete(propertyName: string) {\r\n if (this.dataLoading == false) {\r\n this.dataLoading = true;\r\n\r\n this.dealDto.IsLoanSectionComplete;\r\n\r\n this.dealService\r\n .markSectionAsComplete(\r\n this.dealDto.Id,\r\n propertyName,\r\n ProductFamilyEnum.Bridging,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.dealDto.DealNotes.push(response.NewDealNote);\r\n this.dealDto = response.BridgingDealDto;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n allFormsComplete(): boolean {\r\n if (this.dealDto) {\r\n if (\r\n this.dealDto.IsBorrowerSectionComplete &&\r\n this.dealDto.IsPropertySectionComplete &&\r\n this.dealDto.IsLoanSectionComplete\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n /** Opens the Terms and Conditions popup when the Submit to Lenders button is clicked*/\r\n showTermsAndConditionsForBorrower() {\r\n this.showApplyTsAndCs = true;\r\n this.requestMessageReason = \"a review\";\r\n this.showTsAndCs = true;\r\n }\r\n\r\n /** Opens the Terms and Conditions popup when the Submit to Lenders HoT button is clicked (borrower/broker) */\r\n showTermsAndConditions() {\r\n this.$lenderService\r\n .getShortlistedLendersInfoForSubmitToLenders(\r\n this.shortListedLendersId,\r\n LenderProductTypeEnum.BridgingFinance,\r\n )\r\n .then((response) => {\r\n this.lendersDetailsForSubmittoLenders = response;\r\n })\r\n .finally(() => {\r\n this.showTsAndCs = true;\r\n this.showTsAndCsForm = true;\r\n this.dealDto.SubmitTsAndCs = false;\r\n this.invalidEmail = false;\r\n });\r\n }\r\n\r\n gotoLendingPage() {\r\n (this.$rootScope as any).isLender = false;\r\n this.$location.path(\"/dealforum/\" + this.dealDto.Id);\r\n }\r\n\r\n checkBrokerDeal() {\r\n return this.dealDto?.BrokerUserId != null && this.isClient ? true : false;\r\n }\r\n\r\n /** Submits a case to lenders */\r\n submitCaseToLenders() {\r\n this.showTsAndCsForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n var isResubmitting = false;\r\n\r\n if (this.dealDto.Status == CaseStatusEnum.ReadyToReSubmit) {\r\n isResubmitting = true;\r\n }\r\n\r\n var request = {\r\n DealId: this.dealId,\r\n ProductType: this.dealDto.ProductType,\r\n ResubmitToLenders: isResubmitting,\r\n BrokerCommission: Number(this.brokerCommission),\r\n LendersInfo: this.lendersDetailsForSubmittoLenders,\r\n BrokerPhoneNumber: this.brokerPreferredContact,\r\n IsBrokerPhoneNumberUpdated: this.isBrokerPhoneNumberUpdated,\r\n } as SubmitToLendersRequest;\r\n\r\n this.dealService\r\n .submitToLenders(request)\r\n .then((response: CaseChangedMessageDTO) => {\r\n this.dealDto.Status = response.CaseState;\r\n this.caseService.updateCaseState(this.dealDto.Id, response.CaseState);\r\n this.showMessage(\r\n \"You have requested a Decision in Principle from each lender.\",\r\n );\r\n this.isSubmittedToLenders = true;\r\n })\r\n .catch((error) => {\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n validateEmails() {\r\n this.invalidEmail = false;\r\n\r\n angular.forEach(\r\n this.lendersDetailsForSubmittoLenders,\r\n (lenderdetails, index) => {\r\n var emailField = this.lenderDetailsForm[\"email\" + index];\r\n\r\n if (emailField && emailField.$invalid) {\r\n this.invalidEmail = true;\r\n }\r\n },\r\n );\r\n }\r\n\r\n showMessage(message: string) {\r\n this.messageContent = message;\r\n }\r\n\r\n requestEmail(reason): void {\r\n this.showRequestEmailForm = true;\r\n this.requestMessageReason = reason;\r\n this.messagebool = true;\r\n this.messageContent = \"\";\r\n }\r\n\r\n sendRequestEmail() {\r\n this.showRequestEmailForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n this.$accountservice\r\n .RequestAssistanceReview(\r\n this.requestMessageReason,\r\n this.dealDto.Id,\r\n this.dealDto.ProductFamily,\r\n )\r\n .then((response) => {\r\n this.showMessage(\r\n `${this.appName} have been notified that you require assistance and will be in touch shortly to help.`,\r\n );\r\n\r\n let dealNote = {\r\n DealId: this.dealDto.Id,\r\n UserId: this.currentUser.Id,\r\n NoteText: \"You have requested \" + this.requestMessageReason + \".\",\r\n /*ExpandNote: false*/\r\n } as DealNoteDTO;\r\n this.dealNoteService.addUpdate(dealNote).then((caseNoteResponse) => {\r\n this.dealDto.DealNotes.push(caseNoteResponse);\r\n });\r\n })\r\n .catch((error) => {\r\n this.showMessage(\r\n \"Sorry, something went wrong while sending your email. Please try again.\",\r\n );\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getAppName() {\r\n let lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n this.appName = lsd;\r\n } else {\r\n this.appName = \"Brickflow\";\r\n }\r\n }\r\n\r\n closeConfirmationModal() {\r\n if (this.isSubmittedToLenders) {\r\n if (this.$routeParams.Promote) {\r\n this.$location.path(\"/bridgingcasedashboard/\" + this.dealDto.Id);\r\n } else {\r\n window.location.reload();\r\n }\r\n }\r\n this.showTsAndCs = false;\r\n }\r\n\r\n viewResults(loanCriteria: DevelopmentInputDTO) {\r\n this.$location.path(\"/bridgingresults/\" + this.dealDto.Id);\r\n }\r\n\r\n /** Process the Heads of Terms button being clicked */\r\n headsOfTermsClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"terms\");\r\n this.$location.path(\r\n \"/bridgingheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n /** Lender rejects the case*/\r\n rejectButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"reject\");\r\n this.$location.path(\r\n \"/bridgingheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n withDrawButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"withdraw\");\r\n this.$location.path(\r\n \"/bridgingheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n feedbackButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"feedback\");\r\n this.$location.path(\r\n \"/bridgingheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n getCurrentUserAndRoles() {\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.isAdmin = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"client\").length > 0) {\r\n this.isClient = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"lender\").length > 0) {\r\n this.isLender = true;\r\n\r\n this.dealLenderService\r\n .fetchDealLender(this.dealDto.Id)\r\n .then((response) => {\r\n this.dealLender = response;\r\n this.isInActiveLender = response.IsLenderInActive;\r\n this.generateCaseStatusText();\r\n });\r\n }\r\n\r\n this.authService\r\n .getUpdatedProfile()\r\n .then((prof) => {\r\n this.currentUser = prof;\r\n })\r\n .then(() => {\r\n this.checkIfUserIsInvited();\r\n this.updateRequestAssitanceDealNoteMessage();\r\n if (!this.isLender) this.generateCaseStatusText();\r\n });\r\n\r\n /* this.$lenderService\r\n .getSelectedDealLenderNames(this.dealDto.Id)\r\n .then((response) => {\r\n this.selectedLendersText = response.LendersName;\r\n if (this.dealDto.Status == CaseStatusEnum.NewCase) {\r\n this.shortListedLendersId = response.LendersId;\r\n }\r\n });\r\n \r\n this.$lenderService\r\n .getShortlistedDealLenderNames(this.dealDto.Id)\r\n .then((response) => {\r\n this.shortlistedLendersText = response.LendersName;\r\n if (this.dealDto.Status != CaseStatusEnum.NewCase) {\r\n this.shortListedLendersId = response.LendersId;\r\n }\r\n });*/\r\n });\r\n }\r\n\r\n //Share module functions\r\n openShareModuleModal(contextToShare: AppraisalModuleEnum) {\r\n this.shareContext = contextToShare;\r\n this.constructShareNoteMessage();\r\n\r\n this.dealClientService\r\n .fetchDealMembersWithAccess(this.dealDto.Id)\r\n .then((response: ClientDTO[]) => {\r\n this.caseMembersWithAccess = response;\r\n\r\n this.showShare = true;\r\n });\r\n }\r\n\r\n constructShareNoteMessage() {\r\n this.shareNote = this.sharedDealService.constructShareNoteMessage(\r\n this.shareContext,\r\n this.currentUser,\r\n );\r\n }\r\n\r\n sendToBorrower() {\r\n this.dataLoading = true;\r\n\r\n var request = {\r\n ClientFirstName: this.selectedClientToShareWith.FirstName,\r\n ClientLastName: this.selectedClientToShareWith.LastName,\r\n ClientEmail: this.selectedClientToShareWith.Email,\r\n Note: this.shareNote,\r\n DealId: this.dealDto.Id,\r\n Section: this.shareContext,\r\n ProductFamily: ProductFamilyEnum.Bridging,\r\n } as ShareModuleRequest;\r\n\r\n this.dealService.shareModuleToBorrower(request).then((success) => {\r\n if (success) {\r\n this.showShare = false;\r\n this.dataLoading = false;\r\n this.showModuleShareConfirmation = true;\r\n this.selectedClientToShareWith = null;\r\n } else {\r\n this.showShare = false;\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n }\r\n });\r\n }\r\n\r\n isShareNoteFormComplete(): boolean {\r\n return this.selectedClientToShareWith &&\r\n this.shareNote &&\r\n this.shareNote.length > 0\r\n ? true\r\n : false;\r\n }\r\n\r\n //End of Share module functions\r\n\r\n // Profile view functions\r\n\r\n /**\r\n * Show the Add/Edit permissions profile modal\r\n * @param applicant\r\n */\r\n showPermissionsProfileModal(\r\n profile: DealClientDTO = null,\r\n isEdit: boolean = false,\r\n ): void {\r\n this.showMaximumApplicantsMessage = false;\r\n if (isEdit) {\r\n this.dealClientService.fetch(profile.Id).then((response) => {\r\n this.newApplicant = response;\r\n this.isAddShareholder = false;\r\n this.showAddorEdit = true;\r\n\r\n })\r\n\r\n } else {\r\n this.newApplicant = {} as DealClientDTO;\r\n this.isAddShareholder = true;\r\n this.newApplicant.AccessLevel = CaseAccessLevelEnum.Hidden;\r\n this.showAddorEdit = true;\r\n }\r\n }\r\n\r\n resetApplicant() {\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n this.newApplicant = {} as DealClientDTO;\r\n this.showAddorEdit = false;\r\n }\r\n\r\n /**\r\n * Saves the applicant being added/edited\r\n */\r\n saveApplicant(formController, currentTab: string = \"\") {\r\n this.dataLoading = true;\r\n\r\n if (!(this.currentApplicant.Id > 0)) {\r\n this.currentApplicant.IsApplicant = true;\r\n this.currentApplicant.DealId = this.dealDto.Id;\r\n this.currentApplicant.AccessLevel = CaseAccessLevelEnum.Hidden;\r\n }\r\n\r\n this.saveUpdatedApplicant(\r\n this.currentApplicant,\r\n false,\r\n formController,\r\n currentTab,\r\n );\r\n }\r\n\r\n /**\r\n * Add or update a applicant\r\n * @param applicant\r\n */\r\n saveUpdatedApplicant(\r\n applicant: DealClientDTO,\r\n isPermissionsProfile: boolean = false,\r\n formController = null,\r\n currentTab: string = \"\",\r\n ): void {\r\n this.dataLoading = true;\r\n\r\n this.disableQuickEditSave = true; // this is just because sometimes the save takes a little while and the user could click the save button again\r\n applicant.DealId = this.dealDto.Id;\r\n\r\n if (applicant) {\r\n this.dateProperties.forEach((property) => {\r\n let val = applicant[property];\r\n if (val) {\r\n applicant[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (applicant.Profile) {\r\n this.profileDateProperties.forEach((property) => {\r\n let val = applicant.Profile[property];\r\n if (val) {\r\n applicant.Profile[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (applicant.Client) {\r\n this.clientDateProperties.forEach((property) => {\r\n let val = applicant.Client[property];\r\n if (val) {\r\n applicant.Client[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (!applicant.Client.PostalAddress && isPermissionsProfile) {\r\n applicant.Client.PostalAddress = {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress;\r\n }\r\n\r\n this.dealClientService\r\n .addorUpdateApplicant(applicant, this.isAddShareholder)\r\n .then((response) => {\r\n this.dataLoading = true;\r\n\r\n if (response) {\r\n this.dateProperties.forEach((property) => {\r\n let val = response[property];\r\n if (val) {\r\n response[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n if (response.Profile) {\r\n this.profileDateProperties.forEach((property) => {\r\n let val = response.Profile[property];\r\n if (val) {\r\n response.Profile[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n if (response.Client) {\r\n this.clientDateProperties.forEach((property) => {\r\n let val = response.Client[property];\r\n if (val) {\r\n response.Client[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n const existingShareholder = this.applicantList.find(\r\n (s) => s.Id == response.Id,\r\n );\r\n\r\n // If found then we're updating\r\n if (existingShareholder) {\r\n this.applicantList = this.applicantList.filter(\r\n (member) => member.Id != applicant.Id,\r\n );\r\n this.applicantList.push(response);\r\n } else {\r\n this.applicantList.push(response);\r\n }\r\n if (!isPermissionsProfile) {\r\n this.currentApplicant = response;\r\n //This closes all the tab\r\n //this.closeTabs(currentTab);\r\n formController.$setPristine();\r\n }\r\n })\r\n .finally(() => {\r\n delete this.newApplicant;\r\n this.showAddorEdit = false;\r\n this.disableQuickEditSave = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n cancelUpdateApplicant() {\r\n this.showAddorEdit = false;\r\n this.applicantList = this.applicantList.filter(\r\n (applicant) => applicant.Id != this.newApplicant?.Id,\r\n );\r\n this.applicantList.push(this.newApplicant); // Resets anything that is changed using the original data object\r\n }\r\n\r\n deleteApplicant(): void {\r\n this.dataLoading = true;\r\n this.dealClientService\r\n .markAsDeleteAndSetNextApplicantAsPrimary(\r\n this.dealDto.Id,\r\n this.confirmDeleteApplicant.Id,\r\n )\r\n .then((response) => {\r\n this.applicantList = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.confirmDeleteApplicant = {} as DealClientDTO;\r\n this.showDelete = false;\r\n });\r\n }\r\n\r\n deleteConfirmApplicant(applicant: DealClientDTO) {\r\n this.showDelete = true;\r\n this.confirmDeleteApplicant = { ...applicant };\r\n }\r\n\r\n nonUkWarningVisible(): boolean {\r\n return this.sharedDealService.nonUkWarningVisible(this.currentApplicant);\r\n }\r\n\r\n showInviteButton(shareholder: DealClientDTO) {\r\n return this.sharedDealService.showInviteButton(shareholder);\r\n }\r\n\r\n invite(applicant: DealClientDTO) {\r\n this.dataLoading = true;\r\n\r\n this.dealClientService\r\n .inviteApplicant(applicant.UniqueRef)\r\n .then((i) => {\r\n this.modal = true;\r\n this.message =\r\n \"A request has been sent to \" +\r\n applicant.Client.FirstName +\r\n \" \" +\r\n applicant.Client.LastName +\r\n \" complete their shareholder profile.\";\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem sending the invite request to \" +\r\n applicant.Client.FirstName +\r\n \" \" +\r\n applicant.Client.LastName +\r\n \". Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n //End of Profile view functions\r\n\r\n /** Show and hide the export menu */\r\n showAndHideExport() {\r\n this.showExport = !this.showExport;\r\n }\r\n\r\n /**Get planning options based on Own/Purchase and land/property selections */\r\n getPlanningOptions() {\r\n if (\r\n this.dealDto.OwnOrPurchase == null ||\r\n this.dealDto.LandOrProperty == null\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing &&\r\n this.dealDto.LandOrProperty == LandOrPropertyEnum.Property\r\n ) {\r\n this.planningOptions =\r\n this.selectListService.GetPurchasingExistingBuildingPlanningTypeOptions(\r\n this.dealDto.LandOrProperty == LandOrPropertyEnum.Property,\r\n );\r\n } else {\r\n this.planningOptions = this.selectListService.GetPlanningOptions(\r\n this.dealDto.OwnOrPurchase,\r\n this.dealDto.LandOrProperty,\r\n this.dealDto.LandOrProperty == LandOrPropertyEnum.Property,\r\n );\r\n }\r\n //this.planningOptions = this.selectListService.GetPlanningOptions(this.dealDto.OwnOrPurchase, this.dealDto.LandOrProperty);\r\n }\r\n\r\n propertySaveDisabled() {\r\n var commonFields = [\r\n this.dealDto.OwnOrPurchase,\r\n this.dealDto.Locations,\r\n this.dealDto.IsFamilyInResidence,\r\n this.dealDto.LandOrProperty,\r\n this.dealDto.PropertyAddress.AddressLine1,\r\n this.dealDto.PropertyAddress.PostCode,\r\n ];\r\n\r\n if (\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance\r\n ) {\r\n let purchaseOrRefinanceFields = [\r\n this.dealDto.PurchasePrice,\r\n this.dealDto.PurchaseCosts,\r\n ];\r\n\r\n commonFields.push(...purchaseOrRefinanceFields);\r\n } else if (\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingDeveloperExit\r\n ) {\r\n let developerExitFields = [this.dealDto.BuildingCostTodate];\r\n\r\n commonFields.push(...developerExitFields);\r\n } else {\r\n let preConstructionFields = [\r\n this.dealDto.PurchasePrice,\r\n this.dealDto.GDV,\r\n this.dealDto.LoanTermReq,\r\n ];\r\n\r\n commonFields.push(...preConstructionFields);\r\n }\r\n\r\n if (this.propertyDetailsForm && this.propertyDetailsForm.$invalid)\r\n return true;\r\n\r\n //TODO: Not sure why this is used\r\n if (this.dealForm && this.dealForm.$invalid) return true;\r\n\r\n if (\r\n this.dealDto.IsFamilyInResidence == 0 ||\r\n (this.dealDto.IsFamilyInResidence == YesNoMaybe.Yes &&\r\n this.dealDto.ProductType !=\r\n ProductTypeEnum.BridgingPurchaseOrRefinance &&\r\n this.dealDto.ProductType != ProductTypeEnum.BridgingRefurb)\r\n )\r\n return true;\r\n\r\n if (\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction &&\r\n (this.dealDto.PlanningPermissionType == null ||\r\n this.dealDto.PlanningPermissionType < 1)\r\n ) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (\r\n commonFields[i] == null ||\r\n commonFields[i] == \"0\" ||\r\n commonFields[i] == \"\"\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n if (this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction) {\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n let commonOwnFields = [\r\n this.dealDto.OriginalPurchaseDate,\r\n this.dealDto.Currentvalue,\r\n this.dealDto.LandTotalOtherCosts,\r\n ];\r\n for (let i = 0; i < commonOwnFields.length; i++) {\r\n if (commonOwnFields[i] == null) {\r\n return true;\r\n }\r\n }\r\n if (this.dealDto.LandOrProperty == LandOrPropertyEnum.Land) {\r\n let commonLandFields = [\r\n this.dealDto.PurchaseCosts,\r\n this.dealDto.EstimatedSpending,\r\n ];\r\n for (let i = 0; i < commonLandFields.length; i++) {\r\n if (commonLandFields[i] == null) {\r\n return true;\r\n }\r\n }\r\n if (this.dealDto.IsMortgaged) {\r\n if (\r\n this.dealDto.MortgageCurrentLender == null ||\r\n this.dealDto.MortgageCurrentLender == \"\"\r\n ) {\r\n return true;\r\n }\r\n }\r\n } else {\r\n let commonPropFields = [\r\n this.dealDto.EndPropertyType,\r\n this.dealDto.BuildingCondition,\r\n ];\r\n for (let i = 0; i < commonPropFields.length; i++) {\r\n if (commonPropFields[i] == null || commonPropFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n if (this.dealDto.EndPropertyType == PropertyTypeEnum.Residential) {\r\n if (\r\n this.dealDto.PropertyTypeDetail == null ||\r\n this.dealDto.PropertyTypeDetail == 0\r\n ) {\r\n return true;\r\n } else if (\r\n this.dealDto.PropertyTypeDetail ==\r\n PropertyTypeDetailEnum.Houses &&\r\n this.dealDto.HowManyHouses == null\r\n ) {\r\n return true;\r\n } else if (\r\n this.dealDto.PropertyTypeDetail == PropertyTypeDetailEnum.Flats &&\r\n this.dealDto.HowManyFlats == null\r\n ) {\r\n return true;\r\n } else if (\r\n this.dealDto.PropertyTypeDetail ==\r\n PropertyTypeDetailEnum.HousesAndFlats &&\r\n (this.dealDto.HowManyHouses == null ||\r\n this.dealDto.HowManyFlats == null)\r\n ) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing) {\r\n let commonPurchFields = [\r\n this.dealDto.PurchaseCosts,\r\n this.dealDto.EstimatedSpending,\r\n ];\r\n for (let i = 0; i < commonPurchFields.length; i++) {\r\n if (commonPurchFields[i] == null) {\r\n return true;\r\n }\r\n }\r\n if (this.dealDto.LandOrProperty == LandOrPropertyEnum.Property) {\r\n let commonPropFields = [\r\n this.dealDto.EndPropertyType,\r\n this.dealDto.BuildingCondition,\r\n ];\r\n for (let i = 0; i < commonPropFields.length; i++) {\r\n if (commonPropFields[i] == null || commonPropFields[i] == \"0\") {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance\r\n ) {\r\n if (this.dealDto.LandOrProperty == LandOrPropertyEnum.Land) {\r\n return true;\r\n } else {\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n if (\r\n this.dealDto.BuildingCostTodate == null ||\r\n this.dealDto.BuildingCostTodate == 0\r\n )\r\n return true;\r\n }\r\n\r\n if (\r\n this.dealDto.IsPropertyImprovementDuringLoanTerm &&\r\n this.dealDto.IsExistingPlanChange\r\n ) {\r\n if (\r\n this.dealDto.ExistingPlanningChangeType == null ||\r\n this.dealDto.ExistingPlanningChangeType == 0\r\n )\r\n return true;\r\n }\r\n\r\n if (\r\n this.dealDto.EndPropertyType == null ||\r\n this.dealDto.EndPropertyType == \"0\"\r\n )\r\n return true;\r\n\r\n if (this.dealDto.PropertyTenure == null) return true;\r\n\r\n if (\r\n this.dealDto.IsTenantedBuilding != null &&\r\n this.dealDto.IsTenantedBuilding\r\n ) {\r\n if (\r\n this.dealDto.BuildingCondition == null ||\r\n this.dealDto.BuildingCondition == \"0\"\r\n )\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n if (this.dealDto.ProductType == ProductTypeEnum.BridgingDeveloperExit) {\r\n if (this.dealDto.PropertyTenure == null) return true;\r\n }\r\n\r\n if (\r\n (this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction ||\r\n this.dealDto.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance) &&\r\n this.dealDto.PropertyTenure == TenureEnum.Leasehold\r\n ) {\r\n if (\r\n this.dealDto.YearsLeftOnLease < 0 ||\r\n this.dealDto.YearsLeftOnLease == null\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n loanSaveDisabled() {\r\n var selectFields = [];\r\n if (\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance\r\n ) {\r\n selectFields = [\r\n this.dealDto.AdditionalSecurity,\r\n this.dealDto.ExitStrategy,\r\n this.dealDto.InterestService,\r\n this.dealDto.LoanTermReq,\r\n this.dealDto.LoanPurpose,\r\n ];\r\n } else {\r\n selectFields = [\r\n this.dealDto.AdditionalSecurity,\r\n this.dealDto.ExitStrategy,\r\n this.dealDto.InterestService,\r\n this.dealDto.SourceOfIncome,\r\n this.dealDto.LoanPurpose,\r\n this.dealDto.PlanningStatusAtStartOfLoan,\r\n this.dealDto.PlanningStatusAtEndOfLoan,\r\n ];\r\n }\r\n\r\n if (this.loanDetailsForm.$invalid) return true;\r\n\r\n if (\r\n this.dealDto.LoanPurpose &&\r\n this.dealDto.LoanPurpose == LoanPurposeEnum.Other &&\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction\r\n ) {\r\n if (\r\n !this.dealDto.LoanPurposeDescription ||\r\n this.dealDto.LoanPurposeDescription.length == 0\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < selectFields.length; i++) {\r\n if (selectFields[i] === 0 || selectFields[i] === \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n checkIfUserIsInvited() {\r\n //added to scope for directive\r\n this.dealService\r\n .checkIfUserIsInvited(this.currentUser.Id, this.dealId)\r\n .then((response: InvitedUserResponse) => {\r\n // if user has no active subscription (and are not a lender or admin) then they should be redirected back to the dashboard\r\n if (\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PaidUp &&\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PreCancel &&\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !response.IsInvited &&\r\n !this.isAdmin &&\r\n !this.isLender\r\n ) {\r\n this.$location.path(\"/dashboard\");\r\n return;\r\n }\r\n\r\n (this.$rootScope as any).isInvitedToCase = response.IsInvited;\r\n\r\n if (response.IsInvited) {\r\n if (response.DealAccessLevel == CaseAccessLevelEnum.ReadOnly) {\r\n (this.$rootScope as any).isInvitedAndHasReadonlyAccess = true;\r\n }\r\n }\r\n\r\n this.$rootScope.$broadcast(\"invitedStatusChange\");\r\n });\r\n }\r\n\r\n modifyDateForBackend(property: Date) {\r\n return this.sharedDealService.modifyDateForBackend(property);\r\n }\r\n\r\n modifyDateForFrontend(property: Date) {\r\n return this.sharedDealService.modifyDateForFrontend(property);\r\n }\r\n\r\n disablePersonalDetails() {\r\n return this.sharedDealService.disablePersonalDetails(\r\n this.currentApplicant,\r\n this.personalDetailsForm,\r\n );\r\n }\r\n\r\n goToUserDashboard() {\r\n this.authService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n // Setting the dependent data when option are changed\r\n clearSearchdata() {\r\n this.dealDto = this.bridgingDealService.clearSearchdata(this.dealDto);\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnOwnOrPurchaseChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnLandorPropertyChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnLandorPropertyChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnInterestServiceChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnInterestServiceChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnIsTenantedBuildingChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnIsTenantedBuildingChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnEndPropertyTypeChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnEndPropertyTypeChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnHasCompletionDateChange() {\r\n this.dealDto = this.bridgingDealService.datasetupOnHasCompletionDateChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnMaxLoanRequiredChange() {\r\n this.dealDto = this.dealService.dataSetupOnMaxLoanRequiredChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n updateClassUses() {\r\n if (this.dealDto.ClassUses > 0) {\r\n for (let i = 1; i < this.dealDto.ClassUses; i *= 2) {\r\n if (this.dealDto.ClassUses >= i) {\r\n //number is in enum sum, add it to object\r\n if (this.dealDto.ClassUses & i) {\r\n this.classUses[i] = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n //watch and update classuses\r\n this.$scope.$watchCollection(\"ctrl.classUses\", (newVal: {}) => {\r\n let valuesList = Object.keys(newVal);\r\n let total: number = 0;\r\n //tot up all the numeric keys (class use enums)\r\n valuesList.forEach((v, i) => {\r\n let keyToNum = Number(v);\r\n if (newVal[keyToNum]) {\r\n total += keyToNum;\r\n }\r\n });\r\n this.dealDto.ClassUses = total;\r\n });\r\n }\r\n\r\n onPropertyTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.BridgingCaseDashboardTypeEnum.Property;\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n discardDealData(form: ng.IFormController = null) {\r\n event.stopPropagation();\r\n if (form == this.propertyDetailsForm) {\r\n this.dealDto = JSON.parse(JSON.stringify(this.tempDealDto));\r\n this.PostCodeOptions = [];\r\n this.searchterm = null;\r\n } else {\r\n this.dealDto = JSON.parse(JSON.stringify(this.tempDealDto));\r\n }\r\n\r\n if (form) {\r\n form.$setPristine();\r\n form.$setUntouched();\r\n }\r\n }\r\n\r\n onLoanTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.BridgingCaseDashboardTypeEnum.Loan;\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n onTabSelection() {\r\n this.tempDealDto = JSON.parse(JSON.stringify(this.dealDto));\r\n }\r\n\r\n discardApplicantData(form: ng.IFormController) {\r\n event.stopPropagation();\r\n this.currentApplicant = JSON.parse(JSON.stringify(this.tempApplicant));\r\n form.$setPristine();\r\n form.$setUntouched();\r\n }\r\n\r\n onApplicantTabSelection(tab) {\r\n const str = tab;\r\n this.tabs[str] = !this.tabs[str];\r\n\r\n this.tempApplicant = JSON.parse(JSON.stringify(this.currentApplicant));\r\n }\r\n\r\n carriageReturnCheck(event) {\r\n if (event.key === \"Enter\") {\r\n let position = event.target.selectionStart;\r\n if (this.newNote.NoteText) {\r\n this.newNote.NoteText = [\r\n this.newNote.NoteText.slice(0, position),\r\n \"\\n\",\r\n this.newNote.NoteText.slice(position),\r\n ].join(\"\");\r\n\r\n setTimeout(() => {\r\n event.target.setSelectionRange(position + 1, position + 1);\r\n }, 0);\r\n } else {\r\n this.newNote.NoteText = \"\\n\";\r\n }\r\n }\r\n }\r\n\r\n trustedHtml(plainText) {\r\n if (this.isClient && plainText.startsWith(\"Project submitted to lenders\")) {\r\n return this.$sce.trustAsHtml(\"Project submitted to lenders\");\r\n } else {\r\n return this.$sce.trustAsHtml(plainText);\r\n }\r\n }\r\n\r\n initialiseTitleAndTitleOption() {\r\n if (this.currentApplicant?.Profile) {\r\n const { Title, TitleOption } = this.currentApplicant.Profile;\r\n\r\n // If TitleOption has a value greater than 0, set Title to null\r\n if (\r\n (TitleOption > TitleEnum.None && TitleOption != TitleEnum.Other) ||\r\n Title == null\r\n ) {\r\n this.currentApplicant.Profile.Title = \"\";\r\n }\r\n // If Title exists and TitleOption is not set, set TitleOption to Other\r\n else if (Title && !TitleOption) {\r\n this.currentApplicant.Profile.TitleOption = TitleEnum.Other;\r\n }\r\n }\r\n }\r\n\r\n onTitleOptionChange() {\r\n const { TitleOption } = this.currentApplicant.Profile;\r\n\r\n if (TitleOption > 0 && TitleOption != TitleEnum.Other) {\r\n this.currentApplicant.Profile.Title = \"\";\r\n }\r\n }\r\n\r\n getTotalCosts() {\r\n this.totalCosts =\r\n Number(this.dealDto.PurchasePrice) +\r\n Number(this.dealDto.PurchaseCosts) +\r\n Number(this.dealDto.EstimatedSpending);\r\n if (isNaN(this.totalCosts)) {\r\n this.totalCosts = 0;\r\n }\r\n return this.totalCosts;\r\n }\r\n\r\n totalWarningVisible(): boolean {\r\n if (!this.dealDto.GDV) return false;\r\n this.getTotalCosts();\r\n\r\n return this.totalCosts > this.dealDto.GDV;\r\n }\r\n\r\n onPurchaseDateChange() {\r\n this.minCompletionDate = this.dealDto.OriginalPurchaseDate;\r\n }\r\n\r\n getProductRoute(): string {\r\n switch (this.dealDto.ProductType) {\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n return \"\";\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n return \"/PurchaseRefinance\";\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n return \"/DeveloperExit\";\r\n case ProductTypeEnum.BridgingRefurb:\r\n return \"/Refurbishment\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n onOwnOrPurchaseChange(OwnOrPurchase: boolean) {\r\n this.dealDto.OwnOrPurchase = this.dealDto.HasOwnOrPurchase\r\n ? OwnOrPurchaseEnum.Own\r\n : OwnOrPurchaseEnum.Purchasing;\r\n this.getPlanningOptions();\r\n this.datasetupOnOwnOrPurchaseChange();\r\n }\r\n\r\n onLandOrPropertyChange() {\r\n this.dealDto.LandOrProperty = this.dealDto.HasLandOrProperty\r\n ? LandOrPropertyEnum.Property\r\n : LandOrPropertyEnum.Land;\r\n this.getPlanningOptions();\r\n this.datasetupOnLandorPropertyChange();\r\n }\r\n\r\n onIsFamilyInResidenceChange() {\r\n this.dealDto.IsFamilyInResidence = this.dealDto.HasIsFamilyInResidence\r\n ? YesNoMaybe.Yes\r\n : YesNoMaybe.No;\r\n if (this.isRegulatedBridging()) {\r\n this.loanPurposeOptions =\r\n this.selectListService.GetLoanPurposeOptions(true);\r\n }\r\n }\r\n\r\n initialDataSetupForIsFamilyInResidence() {\r\n if (this.dealDto.HasIsFamilyInResidence) {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.Yes;\r\n this.dealDto.HasIsFamilyInResidence = true;\r\n } else {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n this.dealDto.HasIsFamilyInResidence = false;\r\n }\r\n }\r\n\r\n onExistingPlanChange() {\r\n if (!this.dealDto.IsExistingPlanChange) {\r\n this.dealDto.ExistingPlanningChangeType =\r\n ExistingPlanningChangeTypeEnum.None;\r\n }\r\n }\r\n\r\n onPropertyImprovementDuringLoanTermChange() {\r\n if (!this.dealDto.IsPropertyImprovementDuringLoanTerm) {\r\n this.dealDto.IsExistingPlanChange = false;\r\n this.dealDto.ExistingPlanningChangeType =\r\n ExistingPlanningChangeTypeEnum.None;\r\n }\r\n }\r\n\r\n onLoanPurposeChange() {\r\n if (this.dealDto.LoanPurpose != LoanPurposeEnum.Other) {\r\n this.dealDto.LoanPurposeDescription = null;\r\n }\r\n }\r\n\r\n onExitStrategyChange() {\r\n if (this.dealDto.ExitStrategy != ExitStrategyEnum.Other) {\r\n this.dealDto.ExitStrategyOther = null;\r\n }\r\n }\r\n\r\n onAdditionalSecurityChange() {\r\n if (!this.dealDto.AdditionalSecurity) {\r\n this.dealDto.AdditionalSecurityInfo = null;\r\n }\r\n }\r\n\r\n onIsMortgagedChange() {\r\n if (!this.dealDto.IsMortgaged) {\r\n this.dealDto.MortgageCurrentLender = null;\r\n this.dealDto.MortgageCurrentBalance = 0;\r\n }\r\n }\r\n\r\n onExistingPlanningChangeType() {\r\n if (\r\n this.dealDto.ExistingPlanningChangeType ==\r\n ExistingPlanningChangeTypeEnum.BrandNewPlanningApplication\r\n ) {\r\n this.dealDto.PurchasePrice = 0;\r\n this.dealDto.PurchaseCosts = 0;\r\n this.dealDto.HasCompletionDate = YesNoMaybe.No;\r\n this.dealDto.CompletionDate = null;\r\n this.dealDto.Currentvalue = 0;\r\n }\r\n }\r\n\r\n goToLoanTypeSelectionPage() {\r\n if (this.isLoggedInUser) {\r\n this.authService.setHasValidStatustoShowShareSearchModal(\r\n true,\r\n );\r\n }\r\n this.$location.path(\"/allloans\");\r\n }\r\n\r\n goToDevFinanceCriteria() {\r\n if (this.isLoggedInUser) {\r\n this.$location.path(\"/devfinancecriteria\");\r\n } else {\r\n this.$location.path(\"/e/devfinancecriteria\");\r\n }\r\n }\r\n\r\n calcContingencyAmount() {\r\n if (this.dealDto.Contingency && this.dealDto.BuildCosts) {\r\n this.contingencyAmount =\r\n this.dealDto.Contingency * this.dealDto.BuildCosts;\r\n } else {\r\n this.contingencyAmount = null;\r\n }\r\n }\r\n\r\n calculateTotalShareholding(currentapplicant: DealClientDTO) {\r\n return this.sharedDealService.calculateTotalShareholding(\r\n currentapplicant,\r\n this.applicantList,\r\n );\r\n }\r\n\r\n getOrganisationbyDealId() {\r\n this.organisationService\r\n .getOrganisationAndBrokerByDealId(this.dealDto.Id)\r\n .then((response) => {\r\n this.org = response.Organisation;\r\n this.dealBrokerUser = response.Broker;\r\n this.brokerCommission =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? this.org?.CommissionPercent\r\n : this.dealDto.BrokerCommissionPercent;\r\n this.brokerPreferredContact =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? response.Broker.PhoneNumber\r\n : this.dealDto.BrokerPhoneNumber;\r\n if (this.org.IsWhiteLabelled) {\r\n this.fileNamePrefix = this.org.Name.replace(/ /g, \"_\");\r\n } else {\r\n this.fileNamePrefix = \"Brickflow\";\r\n }\r\n });\r\n }\r\n\r\n updateRequestAssitanceDealNoteMessage() {\r\n if (this.dealDto?.DealNotes != null && this.currentUser != null) {\r\n this.dealDto.DealNotes = this.dealDto.DealNotes.map((d) => {\r\n if (\r\n d.UserId != this.currentUser.Id &&\r\n (d.NoteText == \"Your have requested for assistance.\" ||\r\n d.NoteText == \"You have requested assistance.\")\r\n ) {\r\n return { ...d, NoteText: `${d.UserFullName} requested assistance.` };\r\n }\r\n\r\n return d;\r\n });\r\n }\r\n }\r\n\r\n getOwnershipPercentageText() {\r\n if (this.dealDto != null) {\r\n return this.sharedDealService.getOwnershipPercentageText(\r\n this.currentApplicant,\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n return \"Shareholding\";\r\n }\r\n\r\n closeSubmitToLenderModal() {\r\n this.showTsAndCs = false;\r\n this.brokerCommission =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? this.org?.CommissionPercent\r\n : this.dealDto.BrokerCommissionPercent;\r\n this.brokerPreferredContact =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? this.dealBrokerUser?.PhoneNumber\r\n : this.dealDto.BrokerPhoneNumber;\r\n this.isBrokerPhoneNumberUpdated = false;\r\n }\r\n\r\n showBasedOnMainResidence() {\r\n return this.dealService.showBasedOnMainResidence(this.dealDto);\r\n }\r\n\r\n isRegulatedBridging() {\r\n if (\r\n this.dealDto.IsFamilyInResidence == YesNoMaybe.Yes &&\r\n (this.dealDto.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n this.dealDto.ProductType == ProductTypeEnum.BridgingRefurb)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isCompanyAndOwnershipSaveDisabled() {\r\n if (this.isRegulatedBridging()) {\r\n return false;\r\n } else {\r\n return this.dealDto.HowWillYouOwnNewDevelopment == null ||\r\n this.dealDto.HowWillYouOwnNewDevelopment <= 0\r\n ? true\r\n : false;\r\n }\r\n }\r\n\r\n hasMaximumApplicants() {\r\n\r\n return this.applicantList.filter(a => a.IsApplicant).length >= 4 ? true : false;;\r\n }\r\n\r\n getRequiredRolesOptions() {\r\n return this.dealService.getRequiredRolesOptions(true, this.isReadOnlyDeal);\r\n }\r\n\r\n generateCaseStatusText() {\r\n if (this.isLender) {\r\n this.caseStatusOptions = this.selectListService.GetCaseLenderStateOptionsForLenders();\r\n }\r\n else {\r\n this.caseStatusOptions = this.selectListService.GetCaseStatusOptions(this.currentUser && this.currentUser.IsConnectUser);\r\n }\r\n this.getCaseStatusDisplayText();\r\n\r\n }\r\n\r\n showEditDealNameButton() {\r\n if (!this.isReadOnlyDeal && (!this.currentUser?.IsConnectUser || (this.currentUser?.IsConnectUser && !this.dealDto.IsReferredToConnect))) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n logExportDownload(eventName) {\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n this.dealDto.ProductType,\r\n this.dealDto.Id,\r\n );\r\n }\r\n\r\n getTinymceOptions = function () {\r\n return this.isLender || this.isReadOnlyDeal ? this.tinymceReadonlyOptions : this.tinymceOptions;\r\n };\r\n}\r\n","export const enum InterestRateBasis {\r\n None = 0,\r\n BaseRate = 1,\r\n LendersOwnSVR = 2,\r\n Sonia = 3,\r\n}\r\n","export const enum InterestRateTypeEnum {\r\n None = 0,\r\n Fixed = 1,\r\n Variable = 2,\r\n}\r\n","export const enum MessageRoleEnum {\r\n None = 0,\r\n Admin = 1,\r\n Broker = 2,\r\n Lender = 4,\r\n Client = 8,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { DealFileAttachmentDTO } from \"@js/DTO/Deal/DealFileAttachmentDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { DealLenderMessageDTO } from \"@js/DTO/Deal/DealLenderMessageDTO.cs.d\";\r\nimport { FeedBackDTO } from \"@js/DTO/FeedBackDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { BridgingSubmitOfferRequest } from \"@js/DTO/Messages/Deal/BridgingSubmitOfferMessage.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { InterestRateBasis } from \"@js/models/enum/InterestRateBasisEnum.cs.d\";\r\nimport { InterestRateTypeEnum } from \"@js/models/enum/InterestRateTypeEnum.cs.d\";\r\nimport { MessageRoleEnum } from \"@js/models/enum/MessageRoleEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { BridgingDealService } from \"@js/services/Deal/BridgingDealService\";\r\nimport { DealLenderMessageService } from \"@js/services/Deal/DealLenderMessageService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealFileAttachmentService } from \"@js/services/DealFileAttachmentService\";\r\nimport { FeedBackService } from \"@js/services/FeedBackService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { SharedHeadsOfTermsService } from \"@js/services/Deal/SharedHeadsOfTermsService\";\r\n\r\nexport class BridgingHeadsOfTermsController {\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"LenderService\",\r\n \"RoleService\",\r\n \"DealLenderMessageService\",\r\n \"DealFileAttachmentService\",\r\n \"$window\",\r\n \"BridgingDealService\",\r\n \"DealLenderService\",\r\n \"SelectListService\",\r\n \"FeedBackService\",\r\n \"OrganisationService\",\r\n \"UserService\",\r\n \"AuthService\",\r\n \"ProductService\",\r\n \"SharedHeadsOfTermsService\"\r\n ];\r\n\r\n dataLoading: boolean = false; // Controls showing the data loading \"spinner\"\r\n dealLenders: DealLenderDTO[];\r\n showInformationMessage: boolean = false;\r\n messageContent: string;\r\n feedbackMessageToLender: string;\r\n\r\n showDirection: boolean = false;\r\n\r\n toggleFeedbackSection: boolean = false;\r\n toggleHoTDetailSection: boolean = false;\r\n toggleRejectSection: boolean = false;\r\n toggleWithdrawSection: boolean = false;\r\n\r\n isLender: boolean = false;\r\n isBroker: boolean = false;\r\n isAdmin: boolean = false;\r\n isClient: boolean = false;\r\n\r\n // show different sections to Lender based on which button clicked on Case Dashboard\r\n showFeedbackSectionLender: boolean = false;\r\n showHoTDetailSectionLender: boolean = false;\r\n showRejectSectionLender: boolean = false;\r\n showWithdrawSectionLender: boolean = false;\r\n\r\n showTsAndCsModal: boolean = false;\r\n showTsAndCsForm: boolean = false;\r\n sendingMessage: boolean = false;\r\n goToUserDashboard: boolean = false;\r\n\r\n currentDeal: BridgingDealDTO;\r\n currentCaseLender: DealLenderDTO;\r\n grossLoanCalcVal: number = 0;\r\n builLoanCalcVal: number = 0;\r\n landLoanCalcVal: number = 0;\r\n monetaryLAFee: number = 0;\r\n monetaryLEFee: number = 0;\r\n lenderTask: string = \"\";\r\n\r\n isRejectClicked: boolean = false;\r\n isWithdrawClicked: boolean = false;\r\n isConfirmClicked: boolean = false;\r\n isSubmitClicked: boolean = false;\r\n\r\n //Lender Message\r\n newChatMessage: string = \"\";\r\n showFullMessageId: number;\r\n\r\n //files\r\n fileUpload: DealFileAttachmentDTO[];\r\n uploadingFiles: FileUploadProgressDTO[];\r\n openModal: boolean = false;\r\n module = ModuleEnum.DIP;\r\n\r\n showFullLenderMessage = false;\r\n showFullBorrowerMessage = false;\r\n monthlyInterestRate: number = 0;\r\n\r\n isBridging: boolean = true;\r\n BasisOfInterestRateOptions = [];\r\n InterestRateTypeOptions = [];\r\n\r\n showLenderFeedBackModal: boolean = false;\r\n showBrokerFeedBackModal: boolean = false;\r\n feedBackDTO: FeedBackDTO;\r\n prevPath: string;\r\n showAutofill: boolean = false;\r\n\r\n brokerName: string;\r\n brokerOrganisationName: string;\r\n lendingForm: ng.IFormController;\r\n\r\n //Deleteing a chat message\r\n selectedDealLenderMessageDto: DealLenderMessageDTO;\r\n showdeleteChatMessageModal: boolean = false;\r\n showConfirmDeleteButton: boolean = false;\r\n\r\n currentUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n productTypeText: string = null;\r\n noLenderOrMoreLenderError:boolean = false;\r\n \r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private lenderService: LenderService,\r\n private roleService: RoleService,\r\n private dealLenderMessageService: DealLenderMessageService,\r\n private dealFileAttachmentService: DealFileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private bridgingDealService: BridgingDealService,\r\n private dealLenderService: DealLenderService,\r\n private selectListService: SelectListService,\r\n private feedBackService: FeedBackService,\r\n private organisationService: OrganisationService,\r\n private userService: UserService,\r\n private $auth: AuthService,\r\n private productService: ProductService,\r\n private sharedHeadsOfTermsService :SharedHeadsOfTermsService\r\n ) {\r\n this.feedBackDTO = {} as FeedBackDTO;\r\n if (\r\n this.$routeParams.openModule &&\r\n this.$routeParams.openModule == \"withdraw\"\r\n ) {\r\n this.toggleWithdrawSection = true;\r\n } else if (\r\n this.$routeParams.openModule &&\r\n this.$routeParams.openModule == \"reject\"\r\n ) {\r\n this.toggleRejectSection = true;\r\n } else if (this.$routeParams.openModule) {\r\n this.toggleFeedbackSection = true;\r\n }\r\n\r\n /*this.userService.getUserAutofill().then(response => {\r\n this.showAutofill = response;\r\n });*/\r\n\r\n if (this.$routeParams.DealId && this.$routeParams.DealLenderId) {\r\n this.dataLoading = true;\r\n\r\n this.bridgingDealService\r\n .fetch(this.$routeParams.DealId)\r\n .then((response) => {\r\n this.currentDeal = response;\r\n if (this.currentDeal) {\r\n this.dealLenderService\r\n .fetchByDealId(\r\n this.$routeParams.DealId,\r\n this.roleService.getIsLenderVisible(),\r\n this.$routeParams.DealLenderId,\r\n )\r\n .then((response) => {\r\n this.dealLenders = response;\r\n if (this.$routeParams.DealLenderId) {\r\n if (this.dealLenders.length != 1) {\r\n this.noLenderOrMoreLenderError = true;\r\n return;\r\n }\r\n this.currentCaseLender = this.dealLenders[0];\r\n this.fileUpload = this.currentDeal.Attachments.filter((f) => {\r\n return f.DealLenderId == this.$routeParams.DealLenderId;\r\n });\r\n this.calculateGrossLoanValVal();\r\n this.calculateBuildLoadCalcVal();\r\n this.calculateMonthlyInterestRate();\r\n this.calculateGrossLandLoanCalcVal();\r\n }\r\n }).finally(() => {\r\n this.populateLenderInformation(this.currentUser)\r\n });\r\n // this.caseService.updateCaseState(this.currentDeal.Id, this.currentDeal.Status);\r\n this.lenderTask = sessionStorage.getItem(\"lenderTask\");\r\n if (this.lenderTask != null && this.lenderTask.length > 0) {\r\n switch (this.lenderTask) {\r\n case \"reject\":\r\n this.showRejectSectionLender = true;\r\n break;\r\n case \"withdraw\":\r\n this.showWithdrawSectionLender = true;\r\n break;\r\n case \"feedback\":\r\n this.showFeedbackSectionLender = true;\r\n this.updateCaseLenderMessageReadDatetime();\r\n break;\r\n case \"terms\":\r\n this.showHoTDetailSectionLender = true;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.productTypeText = this.productService.getProductTypeFullName(\r\n this.currentDeal.ProductType,\r\n );\r\n } else {\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.getCurrentUserAndRoles();\r\n });\r\n }\r\n\r\n this.BasisOfInterestRateOptions =\r\n this.selectListService.GetInterestRateBasis();\r\n this.InterestRateTypeOptions = this.selectListService.GetInterestRateType();\r\n }\r\n\r\n checkingIfUserIsLender() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isLenderUser()\r\n .then((response) => {\r\n this.isLender = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsBroker() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isBroker()\r\n .then((response) => {\r\n this.isBroker = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsAdmin() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isAdminUser()\r\n .then((response) => {\r\n this.isAdmin = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsClient() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isClientUser()\r\n .then((response) => {\r\n this.isClient = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /** Redirects to the case dashboard */\r\n goToCaseDashboard() {\r\n this.showFeedbackSectionLender = false;\r\n this.showHoTDetailSectionLender = false;\r\n this.showRejectSectionLender = false;\r\n this.showWithdrawSectionLender = false;\r\n if (\r\n this.isBroker && this.currentCaseLender && \r\n !this.currentCaseLender.IsLenderReviewComplete &&\r\n (this.currentCaseLender.Status == CaseLenderStateEnum.Offered ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Rejected ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)\r\n ) {\r\n this.prevPath = \"bridgingcasedashboard\";\r\n this.feedBackDTO.IsLenderFeedback = true;\r\n this.showLenderFeedBackModal = true;\r\n } else {\r\n this.$location.path(\"/bridgingcasedashboard/\" + this.currentDeal.Id);\r\n }\r\n }\r\n\r\n /** Close modal after send feedback */\r\n closeModal() {\r\n this.showDirection = false;\r\n this.showTsAndCsModal = false;\r\n this.showInformationMessage = false;\r\n this.isConfirmClicked = false;\r\n this.showdeleteChatMessageModal = false;\r\n if (this.goToUserDashboard) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n this.goToUserDashboard = false;\r\n this.showFeedbackSectionLender = false;\r\n this.showHoTDetailSectionLender = false;\r\n this.showRejectSectionLender = false;\r\n this.showWithdrawSectionLender = false;\r\n }\r\n\r\n if (this.prevPath) {\r\n if (this.isLender) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(`/${this.prevPath}/${this.currentDeal.Id}`);\r\n }\r\n }\r\n }\r\n\r\n goToLending() {\r\n if (\r\n this.isBroker && this.currentCaseLender && \r\n !this.currentCaseLender.IsLenderReviewComplete &&\r\n (this.currentCaseLender.Status == CaseLenderStateEnum.Offered ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Rejected ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)\r\n ) {\r\n this.prevPath = \"dealforum\";\r\n this.feedBackDTO.IsLenderFeedback = true;\r\n this.showLenderFeedBackModal = true;\r\n } else {\r\n this.$location.path(\"/dealforum/\" + this.currentDeal.Id);\r\n }\r\n }\r\n\r\n saveUpdatedCaseLender(): void {\r\n this.dealLenderService\r\n .addUpdate(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender = response;\r\n this.messageContent = \"Your changes have been saved.\";\r\n this.showInformationMessage = true;\r\n });\r\n }\r\n\r\n dummyDIP() {\r\n this.dealLenderService.dummyDIP(this);\r\n }\r\n\r\n /** Process the Lender button being clicked*/\r\n lenderClicked() {\r\n (this.$rootScope as any).isLender = false; // TODO JLH why is this being set to false? What if the user is a lender?\r\n this.$location.path(\"/lending/\" + this.currentDeal.Id);\r\n }\r\n\r\n /** Process the Reject button being clicked*/\r\n rejectClicked(): void {\r\n this.isRejectClicked = true;\r\n this.dealLenderService\r\n .rejectCase(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"The borrower has been notified you have rejected their application.\";\r\n })\r\n .catch((error) => {\r\n this.messageContent = \"Sorry, something went wrong. Please try again.\";\r\n this.isRejectClicked = false;\r\n })\r\n .finally(() => {\r\n this.goToUserDashboard = true;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n ///**Process the Withdraw button being clicked */\r\n withdrawClicked(): void {\r\n this.isWithdrawClicked = true;\r\n this.dealLenderService\r\n .withdrawHoT(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"The borrower has been notified you have withdrawn terms for their application.\";\r\n })\r\n .catch((error) => {\r\n this.messageContent = \"Sorry, something went wrong. Please try again.\";\r\n this.isWithdrawClicked = false;\r\n })\r\n .finally(() => {\r\n this.goToUserDashboard = true;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n ///**Process the Submit button being clicked */\r\n submitClicked() {\r\n this.isConfirmClicked = true;\r\n this.showTsAndCsModal = true;\r\n }\r\n\r\n ///**Heads of Terms Submit button clicked event */\r\n submitHoTClicked() {\r\n // Close the Heads of Terms' Terms and Conditions modal\r\n this.showTsAndCsModal = false;\r\n this.sendingMessage = true;\r\n\r\n var request = {\r\n dealLender: this.currentCaseLender,\r\n dealLenderStatus: this.currentCaseLender.Status,\r\n } as BridgingSubmitOfferRequest;\r\n\r\n // Submit the Heads of Terms\r\n this.dealLenderService\r\n .submitOffer(request)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.dealLenderStatus;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"Thank you for submitting a Decision in Principle.\";\r\n this.goToUserDashboard = true;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while submitting your Decision in Principle. Please try again.\";\r\n this.isConfirmClicked = false;\r\n })\r\n .finally(() => {\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n this.sendingMessage = false;\r\n });\r\n }\r\n\r\n showBrokerFeedBack() {\r\n this.feedBackDTO.IsBrokerFeedback = true;\r\n this.showBrokerFeedBackModal = true;\r\n }\r\n\r\n /**\r\n * Process the Send Feedback button being clicked\r\n * @param message\r\n */\r\n sendChatMessage() {\r\n this.dataLoading = true;\r\n\r\n let DealChatMessage = {\r\n Message: this.newChatMessage,\r\n DealId: this.$routeParams.DealId,\r\n DealLenderId: this.$routeParams.DealLenderId,\r\n SenderRole: this.getSenderMessageRole(),\r\n RecipientRoles: this.isLender ? 10 : 4,\r\n } as DealLenderMessageDTO;\r\n\r\n this.dealLenderMessageService\r\n .addUpdate(DealChatMessage)\r\n .then((dealChatMessageResponse) => {\r\n this.currentCaseLender.DealLenderMessage.push(dealChatMessageResponse);\r\n this.newChatMessage = null;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while sending feedback. Please try again.\";\r\n }).finally(() =>{\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n showFullChatMessage(index) {\r\n this.showFullMessageId = index;\r\n }\r\n\r\n updateCaseLenderMessageReadDatetime() {\r\n this.dealLenderMessageService\r\n .updateDealLenderMessageReadDatetime(this.$routeParams.DealLenderId)\r\n .then((caseLenderMessageResponse) => { });\r\n }\r\n\r\n onFileSelect(files: FileAttachmentDTO[], module: ModuleEnum) {\r\n if (files.length > 0) {\r\n this.dealFileAttachmentService\r\n .UploadFileListInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.$routeParams.DealId,\r\n this.fileUpload,\r\n module,\r\n this.$routeParams.DealLenderId,\r\n )\r\n .then((result) => {\r\n this.openModal = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: DealFileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n deleteFile(file: DealFileAttachmentDTO) {\r\n this.fileUpload.splice(this.fileUpload.indexOf(file), 1);\r\n this.dealFileAttachmentService.markasdeleted(file.Id).then((result) => { }); //remove on the server\r\n }\r\n\r\n showActionButtons() {\r\n if (this.currentCaseLender && (this.currentCaseLender.Status == CaseLenderStateEnum.Received || this.currentCaseLender.Status == CaseLenderStateEnum.Rejected || this.currentCaseLender.Status == CaseLenderStateEnum.Offered || this.currentCaseLender.Status == CaseLenderStateEnum.Cancelled || this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n calculateGrossLoanValVal() {\r\n\r\n var value = 0;\r\n\r\n // for dev exit there is no GDV therefore use either current value or purchase price depending on whether it's owned or being purchased\r\n if (this.currentDeal.ProductType == ProductTypeEnum.BridgingDeveloperExit) {\r\n value = this.currentDeal.Currentvalue;\r\n } else {\r\n value = this.currentDeal.GDV;\r\n }\r\n\r\n if (\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan >= 0 &&\r\n value != null &&\r\n value >= 0\r\n ) {\r\n this.grossLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.TotalGrossLoan / value) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n\r\n\r\n if (\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n if (\r\n this.currentCaseLender.LenderArrangementFeePercent != null &&\r\n this.currentCaseLender.LenderArrangementFeePercent > 0\r\n ) {\r\n this.calculatemonetaryLAFee();\r\n } else {\r\n if (\r\n this.currentCaseLender.LenderArrangementFee != null &&\r\n this.currentCaseLender.LenderArrangementFee > 0\r\n ) {\r\n this.calculatemonetaryLAPercent();\r\n }\r\n }\r\n\r\n if (\r\n this.currentCaseLender.LenderExitFeePercent != null &&\r\n this.currentCaseLender.LenderExitFeePercent > 0\r\n ) {\r\n this.calculatemonetaryLEFee();\r\n } else {\r\n if (\r\n this.currentCaseLender.LenderExitFee != null &&\r\n this.currentCaseLender.LenderExitFee > 0\r\n ) {\r\n this.calculatemonetaryLEPercent();\r\n }\r\n }\r\n }\r\n }\r\n\r\n calculatemonetaryLAFee() {\r\n if (\r\n this.currentCaseLender.LenderArrangementFeePercent != null &&\r\n this.currentCaseLender.LenderArrangementFeePercent > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderArrangementFee =\r\n Math.round(\r\n this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderArrangementFeePercent *\r\n 100,\r\n ) / 100;\r\n }\r\n }\r\n\r\n calculatemonetaryLAPercent() {\r\n if (\r\n this.currentCaseLender.LenderArrangementFee != null &&\r\n this.currentCaseLender.LenderArrangementFee > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderArrangementFeePercent =\r\n this.currentCaseLender.LenderArrangementFee /\r\n this.currentCaseLender.TotalGrossLoan;\r\n\r\n this.currentCaseLender.LenderArrangementFeePercent = parseFloat(\r\n this.currentCaseLender.LenderArrangementFeePercent.toFixed(4),\r\n );\r\n }\r\n }\r\n\r\n calculatemonetaryLEFee() {\r\n if (\r\n this.currentCaseLender.LenderExitFeePercent != null &&\r\n this.currentCaseLender.LenderExitFeePercent > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderExitFee =\r\n Math.round(\r\n this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderExitFeePercent *\r\n 100,\r\n ) / 100;\r\n }\r\n }\r\n\r\n calculatemonetaryLEPercent() {\r\n if (\r\n this.currentCaseLender.LenderExitFee != null &&\r\n this.currentCaseLender.LenderExitFee > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderExitFeePercent =\r\n this.currentCaseLender.LenderExitFee /\r\n this.currentCaseLender.TotalGrossLoan;\r\n this.currentCaseLender.LenderExitFeePercent = parseFloat(\r\n this.currentCaseLender.LenderExitFeePercent.toFixed(4),\r\n );\r\n }\r\n }\r\n\r\n /**Calculate borrower equity\r\n */\r\n calculateBorrowerEquity() {\r\n var borrowerEquity: number = 0;\r\n\r\n if (this.currentDeal && this.currentCaseLender) {\r\n if (\r\n this.currentDeal.ProductType == ProductTypeEnum.BridgingPreconstruction\r\n ) {\r\n borrowerEquity =\r\n this.currentDeal.PropertyValue - this.currentCaseLender.TotalNetLoan;\r\n } else if (\r\n this.currentDeal.ProductType == ProductTypeEnum.BridgingDeveloperExit\r\n ) {\r\n borrowerEquity =\r\n this.currentDeal.PropertyValue -\r\n this.currentCaseLender.TotalGrossLoan;\r\n } else if (\r\n this.currentDeal.ProductType == ProductTypeEnum.BridgingRefurb\r\n ) {\r\n borrowerEquity =\r\n this.currentDeal.PropertyValue - this.currentCaseLender.LandLoan;\r\n } else if (\r\n this.currentDeal.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance\r\n ) {\r\n borrowerEquity =\r\n this.currentDeal.PropertyValue -\r\n this.currentCaseLender.TotalGrossLoan;\r\n } else {\r\n borrowerEquity =\r\n this.currentDeal.PropertyValue -\r\n this.currentCaseLender.TotalGrossLoan;\r\n }\r\n }\r\n return Number(borrowerEquity);\r\n }\r\n\r\n /**Calculate true cost */\r\n calculateTrueCost(): number {\r\n if (this.currentCaseLender) {\r\n var trueCost: number =\r\n +this.currentCaseLender.InterestRate / 12 +\r\n (+this.currentCaseLender.LenderArrangementFeePercent +\r\n +this.currentCaseLender.LenderExitFeePercent) /\r\n +this.currentDeal.LoanTermReq;\r\n return trueCost;\r\n }\r\n }\r\n\r\n calculatInterestRate() {\r\n if (this.monthlyInterestRate) {\r\n this.currentCaseLender.InterestRate = this.monthlyInterestRate * 12;\r\n }\r\n }\r\n\r\n calculateMonthlyInterestRate() {\r\n if (this.currentCaseLender.InterestRate) {\r\n this.monthlyInterestRate = parseFloat(\r\n (this.currentCaseLender.InterestRate / 12).toFixed(4),\r\n );\r\n }\r\n }\r\n\r\n calculateAnnualInterestRate() {\r\n if (this.monthlyInterestRate) {\r\n this.currentCaseLender.InterestRate = parseFloat(\r\n (this.monthlyInterestRate * 12).toFixed(4),\r\n );\r\n }\r\n }\r\n\r\n calculateGrossLandLoanCalcVal() {\r\n if (\r\n this.currentCaseLender.LandLoan != null &&\r\n this.currentCaseLender.LandLoan >= 0\r\n ) {\r\n this.landLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.LandLoan / this.currentDeal.PurchasePrice) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n }\r\n\r\n calculateBuildLoadCalcVal() {\r\n if (\r\n this.currentCaseLender.BuildLoan != null &&\r\n this.currentCaseLender.BuildLoan >= 0\r\n ) {\r\n this.builLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.BuildLoan / this.currentDeal.BuildCosts) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n }\r\n\r\n /**Calculate the Total Net Loan */\r\n calculateTotalNetLoan() {\r\n var totalNetLoan: number = 0;\r\n if (\r\n this.currentCaseLender &&\r\n this.currentCaseLender.BuildLoan &&\r\n this.currentCaseLender.LandLoan\r\n ) {\r\n totalNetLoan =\r\n +this.currentCaseLender.BuildLoan + +this.currentCaseLender.LandLoan;\r\n totalNetLoan = Math.round(totalNetLoan * 100) / 100;\r\n }\r\n return totalNetLoan;\r\n }\r\n\r\n getRateTypeText(e: InterestRateTypeEnum) {\r\n switch (e) {\r\n case InterestRateTypeEnum.Fixed:\r\n return \"Fixed\";\r\n case InterestRateTypeEnum.Variable:\r\n return \"Variable\";\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n getBasisInterestRateText(e: InterestRateBasis) {\r\n switch (e) {\r\n case InterestRateBasis.BaseRate:\r\n return \"Base rate\";\r\n case InterestRateBasis.LendersOwnSVR:\r\n return \"own SVR\";\r\n case InterestRateBasis.Sonia:\r\n return \"Sonia\";\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n addClass(star: number, id: string) {\r\n this.feedBackService.addClass(star, id);\r\n }\r\n\r\n removeClass(star: number, id: string, rating) {\r\n this.feedBackService.removeClass(star, id, rating);\r\n }\r\n\r\n isFeedBackFormDisabled() {\r\n return this.feedBackService.isFeedBackFormDisabled(\r\n this.isLender,\r\n this.feedBackDTO,\r\n );\r\n }\r\n\r\n updateRating(star, rating) {\r\n this.feedBackDTO = this.feedBackService.updateRating(\r\n star,\r\n rating,\r\n this.feedBackDTO,\r\n );\r\n }\r\n\r\n submitFeedBack() {\r\n if (this.isLender) {\r\n this.feedBackDTO.OrganisationId = this.currentDeal.BrokerOrganisationId;\r\n this.feedBackDTO.BrokerUserId = this.currentDeal.BrokerUserId;\r\n } else {\r\n this.feedBackDTO.LenderId = this.currentCaseLender.LenderId;\r\n }\r\n\r\n this.feedBackService\r\n .addFeedBack(this.feedBackDTO, this.currentCaseLender.Id, true)\r\n .then((response) => {\r\n if (this.isLender) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(`/${this.prevPath}/${this.currentDeal.Id}`);\r\n }\r\n });\r\n }\r\n\r\n onClickDeleteMessageButton(message: DealLenderMessageDTO) {\r\n this.showdeleteChatMessageModal = true;\r\n this.messageContent = \"Are you sure you want to delete a selected message?\";\r\n this.selectedDealLenderMessageDto = message;\r\n this.showConfirmDeleteButton = true;\r\n }\r\n\r\n deleteChatMessage() {\r\n this.dataLoading = true;\r\n this.dealLenderMessageService\r\n .markasdeleted(this.selectedDealLenderMessageDto.Id)\r\n .then((response) => {\r\n this.currentCaseLender.DealLenderMessage =\r\n this.currentCaseLender.DealLenderMessage.filter(\r\n (x) => x.Id != this.selectedDealLenderMessageDto.Id,\r\n );\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while deleting message. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.showdeleteChatMessageModal = false;\r\n delete this.selectedDealLenderMessageDto;\r\n this.showConfirmDeleteButton = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getSenderMessageRole() {\r\n if (this.isLender) {\r\n return MessageRoleEnum.Lender;\r\n } else if (this.isBroker) {\r\n return MessageRoleEnum.Broker;\r\n } else if (this.isAdmin) {\r\n return MessageRoleEnum.Admin;\r\n } else if (this.isClient) {\r\n return MessageRoleEnum.Client;\r\n }\r\n }\r\n\r\n getCurrentUserAndRoles() {\r\n this.dataLoading = true;\r\n this.userService\r\n .getcurentuserrecord()\r\n .then((result) => {\r\n this.currentUser = result;\r\n\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n });\r\n\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n });\r\n\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n });\r\n\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n if (!this.isLender) {\r\n this.toggleFeedbackSection = true;\r\n this.updateCaseLenderMessageReadDatetime();\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n populateLenderInformation(user: ApplicationUserDTO) {\r\n if (this.isLender) {\r\n this.currentCaseLender.ContactName = user.FullName;\r\n this.currentCaseLender.ContactEmail = user.Email;\r\n this.currentCaseLender.ContactMobilePhoneNumber = user.PhoneNumber;\r\n }\r\n }\r\n\r\n isCurrentUserAllowedToSendChat(){\r\n if(this.currentUser && this.currentDeal && (this.toggleFeedbackSection||this.showFeedbackSectionLender)){\r\n return this.sharedHeadsOfTermsService.isCurrentUserAllowedToSendChat(this.isBroker,this.currentDeal.Status,this.currentDeal.IsReferredToConnect, this.currentUser)\r\n }\r\n return false;\r\n }\r\n}\r\n","export const enum BridgingPersonalGuaranteeLevelEnum {\r\n None = 0,\r\n OneToTwentyFivePercent = 1,\r\n TwentySixToFiftyPercent = 2,\r\n FiftyOneToOneHundredPercent = 3,\r\n}\r\n","export const enum MaxFlatUnitPriceEnum {\r\n None,\r\n NoMax = 0,\r\n UpTo1Million = 1,\r\n UpTo2Million = 2,\r\n UpTo3Million = 3,\r\n}\r\n","export const enum MaxHouseSalePriceEnum {\r\n None,\r\n NoMax = 0,\r\n UpTo1Million = 1,\r\n UpTo2Million = 2,\r\n UpTo5Million = 3,\r\n}\r\n","export const enum MaxSqFtSalePriceEnum {\r\n None = 0,\r\n UpTo850 = 1,\r\n UpTo1000 = 2,\r\n UpTo1500 = 3,\r\n NoMax = 4,\r\n}\r\n","export const enum PreviousDevelopmentsEnum {\r\n None = 0,\r\n One = 1,\r\n Two = 2,\r\n Three = 3,\r\n FourOrMore = 4,\r\n OneOrTwo = 5,\r\n ThreeOrMore = 6,\r\n}\r\n","export const enum SortByEnum {\r\n None = 0,\r\n ROCE = 1,\r\n TrueMonthlyCost = 2,\r\n NetLoanSize = 3,\r\n LenderCosts = 4,\r\n LenderName = 5,\r\n InterestRate = 6,\r\n ArrangementFee = 7,\r\n MonthlyPayment = 8,\r\n DepositEquity = 9,\r\n LTGDV = 10,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseLenderDTO } from \"@js/DTO/CaseLenderDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { LenderResultDTO } from \"@js/DTO/DevelopmentFinance/LenderResultDTO.cs.d\";\r\nimport { LenderProductPairDTO } from \"@js/DTO/LenderProductPairDTO.cs\";\r\nimport { LenderResultMinimalDTO } from \"@js/DTO/DevelopmentFinance/LenderResultMinimalDTO.cs.d\";\r\nimport { BridgingSearchResultsResponse } from \"@js/DTO/Messages/BridgingSearchResultMessage.cs.d\";\r\nimport { SaveAsSearchRequest } from \"@js/DTO/Messages/Deal/SaveAsSearchMessage.cs.d\";\r\nimport { SaveBridgingSearchRequest } from \"@js/DTO/Messages/Deal/SaveBridgingSearchMessage.cs.d\";\r\nimport { UpdateBridgingSearchGetResultResponse } from \"@js/DTO/Messages/Deal/UpdateBridgingSearchGetResultMessage.cs.d\";\r\nimport { MakeReferralMessageRequest } from \"@js/DTO/Messages/MakeReferralMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { BridgingLenderResultSummaryDTO } from \"@js/DTO/SearchResults/BridgingLenderResultSummaryDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { BridgingPersonalGuaranteeLevelEnum } from \"@js/models/enum/BridgingPersonalGuaranteeLevelEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\nimport { MaxFlatUnitPriceEnum } from \"@js/models/enum/MaxFlatUnitPriceEnum.cs.d\";\r\nimport { MaxHouseSalePriceEnum } from \"@js/models/enum/MaxHouseSalePriceEnum.cs.d\";\r\nimport { MaxPercCommercialForMixedUseEnum } from \"@js/models/enum/MaxPercCommercialForMixedUseEnum.cs.d\";\r\nimport { MaxSqFtSalePriceEnum } from \"@js/models/enum/MaxSqFtSalePriceEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { PreviousDevelopmentsEnum } from \"@js/models/enum/PreviousDevelopmentsEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { SortByEnum } from \"@js/models/enum/SortByEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { BridgingSearchService } from \"@js/services/BridgingSearchService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { BridgingDealService } from \"@js/services/Deal/BridgingDealService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { SharedSearchResultsService } from \"@js/services/Deal/SharedSearchResultsService\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { SharedDataService } from \"@js/services/SharedDataService\";\r\n\r\ndeclare const window: Window & { dataLayer: any[] };\r\n\r\nexport class BridgingLenderResultScreenController {\r\n loadingData: boolean = false;\r\n searchPanelForm: ng.IFormController;\r\n\r\n // tourState: any = {\r\n // tourStep: 1,\r\n // tourTotalSteps: 0,\r\n // };\r\n guidanceCheckbox: boolean = true;\r\n // tourEnabled: boolean = false;\r\n\r\n totalLender: number = 0;\r\n isSearch: boolean = true;\r\n\r\n debug1: boolean = false;\r\n\r\n loanCriteria: BridgingDealDTO;\r\n summarySearchResults: BridgingLenderResultSummaryDTO[];\r\n initialSummarySearchResults: BridgingLenderResultSummaryDTO[];\r\n productLastVerifiedDates = {};\r\n deletedDealLenders: LenderProductPairDTO[];\r\n offer: BridgingLenderResultSummaryDTO;\r\n comparisonList: BridgingLenderResultSummaryDTO[] = [];\r\n\r\n selectedResult: LenderResultDTO;\r\n\r\n selectedUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n searchid: number = null;\r\n dealClientUniqueRef: string = null;\r\n dealUniqueRef: string = null;\r\n hideCaseCreation: boolean = false;\r\n\r\n loanLabel: string;\r\n showSaveResults: number;\r\n warningOff: boolean = false;\r\n currentCase: CaseDTO;\r\n productResultList: number;\r\n productId: number;\r\n caseLenders: CaseLenderDTO[];\r\n dealLenders: DealLenderDTO[];\r\n caseLendersNotInResults: DealLenderDTO[];\r\n filterLenderNames: string[] = [];\r\n\r\n sliderShown: boolean;\r\n searchNameCache: string;\r\n\r\n notifyBorrower: boolean = true;\r\n\r\n showProductNote: boolean = false;\r\n productNote: string;\r\n\r\n savePressed: boolean = false;\r\n\r\n //Capture name and email address & send results to unregistered searcher\r\n newUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n error: string = \"\";\r\n\r\n // Flag to disable or enable the Save as button depending on the click.\r\n isClicked: boolean = false;\r\n showContactBrokerModal: boolean = false;\r\n\r\n //For admins accessing client accounts\r\n //clientUsernameBeingAccessed: string;\r\n toggleEditSearchName: boolean = false;\r\n // isBlankSearch: boolean = false;\r\n isAdmin: boolean = false;\r\n showActionPanel: boolean = false;\r\n\r\n isLoggedInUser: boolean = false;\r\n isLegacyUser: boolean = false;\r\n tempSearchName: string = null;\r\n isLoggingOut: boolean = false;\r\n\r\n //These are added for new search functinality\r\n existingUsers: UserSimpleDTO[];\r\n newSearch: boolean = false;\r\n existingborrower: boolean;\r\n showClientDetails: boolean = false;\r\n\r\n clientId: string = null;\r\n isIntroducer: boolean = false;\r\n isIntroduceronly: boolean = false;\r\n isLender: boolean = false;\r\n isBroker: boolean = false;\r\n appName: string;\r\n isSaveorSaveAsClicked: boolean = false;\r\n noOfShortlistAllowed: number = 5;\r\n displayMsg: string = null;\r\n showMsg: boolean = false;\r\n showMsgToAdminOrBroker: boolean = false;\r\n ShowdeleteSearch: boolean = false;\r\n isProceedClicked: boolean = false;\r\n\r\n isResultScreen: boolean = true;\r\n selecteduserName: string;\r\n isClient: boolean = false;\r\n tempLoanCriteria = null;\r\n showFilters: boolean = false;\r\n isFilterUpdate: boolean = false;\r\n isShortlistingMore: boolean = false;\r\n showSortBy: boolean = false;\r\n\r\n showContactLender: boolean = false;\r\n shareForm: ng.IFormController;\r\n\r\n lenderEmail: string;\r\n shareEmailSubject: string;\r\n sharedSearch: boolean = false;\r\n dataLoading: boolean = false;\r\n\r\n orgCode: string;\r\n orgName: string;\r\n orgNameUnderscore: string;\r\n brokerDetail: string = \"\";\r\n brokerageOrg: OrganisationDTO;\r\n brokerageOrgFilename: string = \"Brickflow\";\r\n showMessageToborrower: boolean = false;\r\n borrowerMessage: string = \"\";\r\n user: ApplicationUserDTO;\r\n moveContactBrokerBtnInMiddle: boolean = false;\r\n clientOrganisationPhoneNumber: string;\r\n isBridging: boolean = true;\r\n isMaximumLoanRequired: boolean = false;\r\n userLenderId: number = null;\r\n\r\n carouselData: string[] = [];\r\n numberOfPreviousDevelopmentsOptions = [];\r\n\r\n personalGuaranteeLevelOptions = [];\r\n maxHouseSalePriceOptions = [];\r\n maxFlatUnitPriceOptions = [];\r\n maxSqFtSalePriceOptions = [];\r\n maxPercCommercialForMixedUseOptions = [];\r\n locationOptions = [];\r\n valuationMethodOptions = [];\r\n maxCommercialFloorspaceOptions = [];\r\n\r\n personalGuaranteeLevel = null;\r\n maxHouseSalesPrice = null;\r\n maxFlatUnitPrice = null;\r\n maxSqFtSalePrice = null;\r\n maxPercCommercialForMixedUse = null;\r\n maxSqFtSalePriceFlats = null;\r\n previousDevelopments = null;\r\n\r\n shareDealDto: ShareDealDTO = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n hasSearchChanged: boolean = false;\r\n inActiveDealLender: number = 0;\r\n hasAccessToDeal: boolean = true;\r\n tempLoanRequired: number = null;\r\n\r\n showEligibility: boolean = false;\r\n showLenderSnapshot: boolean = false;\r\n showLenderNamesAndLogosOverride: boolean = false;\r\n isAssigned = false;\r\n userRole: string = null;\r\n\r\n dealProductTypeDisplayText: string;\r\n\r\n showEnterpriseRegistrationModal: boolean = false;\r\n projectName: string = \"\";\r\n registrationForm: ng.IFormController;\r\n emailExistsError: boolean = false;\r\n\r\n snapshotNewSearch: boolean = false;\r\n showPostcodeErrorMessage: boolean = false;\r\n postcodeErrorMsg: string;\r\n isPostcodeChange: boolean = false;\r\n\r\n noAccessToDealMsg: string;\r\n\r\n //This boolean is used in the shareedmodal.html for all the deals\r\n isDeal: boolean = true;\r\n\r\n //LenderReferralSearch\r\n lenderReferralData: MakeReferralMessageRequest = {} as MakeReferralMessageRequest;\r\n isLenderReferredSearch: boolean = false;\r\n isLenderReferringSearch: boolean = false;\r\n\r\n hasResultsProcessed: boolean = false;\r\n\r\n //SaveAs functionality\r\n isSaveAsClicked: boolean = false;\r\n saveAsSearchName: string;\r\n reloadSearch: boolean = false;\r\n\r\n //Enterprise journey\r\n showRegisterModal: boolean = false;\r\n showLoginSection: boolean = false;\r\n enterpriseClient: ApplicationUserDTO = {\r\n Id: \"\",\r\n AgreedToTermsAndPP: true,\r\n Roles: [\"Client\"],\r\n } as ApplicationUserDTO;\r\n\r\n // Previously shortlisted/submitted lenders which are not visible on current results because of criteria change\r\n HiddenDealLenderList: DealLenderDTO[] = [];\r\n showExportOptions: boolean = false;\r\n\r\n hasLiveSearch: boolean = true;\r\n\r\n\r\n //Confirm phone number for new client, when they register through enterprise journey from results page\r\n showClientPhoneNumberConfirmationModal: boolean = false;\r\n clientUpdatedContact: string;\r\n confirmClientPhoneNumberForm: ng.IFormController;\r\n clientUpdatedContactErrorMessage: string;\r\n\r\n // Logging in/resetting password\r\n isLoginError: boolean = false;\r\n isResetPasswordSubmitted: boolean = false;\r\n registrationLoginError: string = null;\r\n \r\n filterProperties = [\r\n \"F_IsFirstTimeDeveloper\",\r\n \"F_NumberOfPreviousDevelopments\",\r\n \"F_IsPersonalName\",\r\n \"F_IsOffshoreCompany\",\r\n \"F_IsMainShareholderOverseas\",\r\n \"F_PersonalGuaranteeMax\",\r\n \"F_HasAdverseCredit\",\r\n \"F_IsBelowMarketValue\",\r\n \"F_IsAutomatedValuationModel\",\r\n \"F_IsAuctionPurchase\",\r\n \"F_ValuationMethod\",\r\n \"F_MaxCommercialFloorspace\",\r\n \"F_IsShariaLoan\",\r\n \"F_IsGradeOneListed\",\r\n \"F_IsGradeTwoListed\",\r\n \"F_MaxHouseSalesPrice\",\r\n \"F_MaxFlatUnitPrice\",\r\n \"F_MaxNumberOfUnits\",\r\n \"F_MaxSqFtSalePrice\",\r\n \"F_MaxSqFtSalePriceFlats\",\r\n \"F_IsChargeOnAdditionalProperty\",\r\n \"F_IsFixedRate\",\r\n \"F_IsReBridge\",\r\n \"F_IsServicedInterest\",\r\n \"F_IsTitleInsurance\",\r\n \"F_IsIndemnityInsurance\",\r\n \"F_IsRetypedValuation\",\r\n \"F_IsTimberFrameConstruction\",\r\n \"F_IsConcreteConstruction\",\r\n ];\r\n\r\n static $inject = [\r\n \"$route\",\r\n \"$routeParams\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"UserService\",\r\n \"CaseService\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"LenderService\",\r\n \"OrganisationService\",\r\n \"SelectListService\",\r\n \"UserService\",\r\n \"BridgingSearchService\",\r\n \"BridgingDealService\",\r\n \"DealService\",\r\n \"DealLenderService\",\r\n \"ProductService\",\r\n \"EventLogService\",\r\n \"SharedSearchResultsService\",\r\n \"DealClientService\",\r\n 'OrganisationLinkService',\r\n 'SharedDataService'\r\n ];\r\n\r\n constructor(\r\n private $route: ng.route.IRouteService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n public $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $user: UserService,\r\n private $CaseService: CaseService,\r\n private $auth: AuthService,\r\n private roleService: RoleService,\r\n private lenderService: LenderService,\r\n private organisationService: OrganisationService,\r\n private selectListService: SelectListService,\r\n private userService: UserService,\r\n private bridgingSearchService: BridgingSearchService,\r\n private bridgingDealService: BridgingDealService,\r\n private dealService: DealService,\r\n private dealLenderService: DealLenderService,\r\n private productService: ProductService,\r\n private eventLogService: EventLogService,\r\n private sharedSearchResultsService: SharedSearchResultsService,\r\n private dealClientService: DealClientService,\r\n private organisationLinkService: OrganisationLinkService,\r\n private sharedDataService: SharedDataService\r\n ) {\r\n this.$auth.getShowBridgingEligibility().then((response) => {\r\n this.showEligibility = response;\r\n });\r\n\r\n this.$auth.getShowBridgingLenderSnapshot().then((response) => {\r\n this.showLenderSnapshot = response;\r\n });\r\n\r\n if (this.$location.path().startsWith(\"/bridgingshortlistmore\")) {\r\n this.isShortlistingMore = true;\r\n }\r\n\r\n\r\n if (this.$routeParams.SearchId) {\r\n if (/^\\d+$/.test(this.$routeParams.SearchId)) {\r\n // Treat the reference as an ID (e.g., fetch data using the ID)\r\n this.searchid = Number(this.$routeParams.SearchId);\r\n } else {\r\n // Treat the reference as a unique string (e.g., fetch data using the string)\r\n this.dealUniqueRef = this.$routeParams.SearchId;\r\n }\r\n } /*else {\r\n this.$CaseService.updateTubeMap(null);\r\n }*/\r\n\r\n if (this.$routeParams.dealclientuniqueref) {\r\n this.dealClientUniqueRef = this.$routeParams.dealclientuniqueref;\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n this.isLoggedInUser = true;\r\n this.loadingData = true;\r\n this.organisationService\r\n .getOrganisation()\r\n .then((organisation) => {\r\n if (organisation) {\r\n if (!organisation.IsBrickflow) {\r\n //Getting organisation phone number to display on the screen with other text, when there are no results.\r\n this.clientOrganisationPhoneNumber = organisation.PhoneNumber;\r\n }\r\n this.orgCode = organisation.IsWhiteLabelled\r\n ? organisation.OrganisationCode\r\n : \"\";\r\n this.showLenderNamesAndLogosOverride =\r\n organisation.ShowLenderNames ?? false;\r\n\r\n if (organisation.IsWhiteLabelled) {\r\n this.orgName = organisation.Name.replace(/ /g, \"_\");\r\n } else {\r\n this.orgName = \"Brickflow\";\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n this.loadingData = false;\r\n })\r\n .finally(() => {\r\n //this.loadingData = false;\r\n });\r\n } else {\r\n if (window.self == window.top) {\r\n //this.userRole = sessionStorage.getItem('userRole');\r\n this.isClient = this.userRole == \"borrower\";\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n //this.clientId = sessionStorage.getItem('clientId');\r\n this.getSearchCriteriaAndResults();\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.guidanceCheckbox = false;\r\n Promise.all([\r\n this.organisationService.getData(\"userRole\").then((userRole) => {\r\n if (userRole) {\r\n this.userRole = userRole;\r\n this.isClient = this.userRole == \"borrower\";\r\n }\r\n }) /*,\r\n this.organisationService.getData('clientId').then(clientId => {\r\n if (clientId) {\r\n this.clientId = clientId;\r\n }\r\n })*/,\r\n //Try get session storage if running in iframe before getting results\r\n this.organisationService.getData(\"newSearch\").then((newSearch) => {\r\n if (newSearch) {\r\n this.snapshotNewSearch = newSearch == \"true\";\r\n }\r\n }),\r\n ])\r\n .then(() => {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.organisationService.sendDataToParent(\"newSearch\", \"false\");\r\n this.getSearchCriteriaAndResults();\r\n })\r\n .catch((error) => {\r\n // One or both of the promises were rejected, handle the error\r\n console.error(\"Failed to get user data: \", error);\r\n });\r\n }\r\n }\r\n\r\n if (window.self == window.top) {\r\n // let cookieTourStep = this.$cookies.get(\"tourStep\");\r\n // if (cookieTourStep) {\r\n // this.tourState.tourStep = cookieTourStep;\r\n // }\r\n\r\n //if user is logged in, get profile\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.$user.getcurentuserrecord().then((result) => {\r\n this.selectedUser = result;\r\n this.isLegacyUser = this.selectedUser.IsLegacyUser;\r\n\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n\r\n if (this.clientOrganisationPhoneNumber && !this.isClient) {\r\n this.clientOrganisationPhoneNumber = null;\r\n }\r\n });\r\n\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n if (this.isAdmin) {\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n });\r\n\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n if (this.isBroker) {\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n });\r\n\r\n this.roleService.isIntroducer().then((response) => {\r\n this.isIntroducer = response;\r\n });\r\n\r\n this.roleService.isIntroducerOnly().then((response) => {\r\n this.isIntroduceronly = response;\r\n });\r\n\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n if (this.isLender) {\r\n this.hasLiveSearch = false;\r\n this.lenderService.getUserLenderDetails().then((lender) => {\r\n if (lender.HasLiveMarketSearch) {\r\n this.hasLiveSearch = true;\r\n }\r\n });\r\n\r\n //Lender referred search\r\n if (sessionStorage.getItem(\"lenderReferralClient\")) {\r\n this.lenderReferralData.ClientDTO = JSON.parse(\r\n sessionStorage.getItem(\"lenderReferralClient\"),\r\n );\r\n this.isLenderReferringSearch = true;\r\n }\r\n this.userService.getCurrentUserLender().then((response) => {\r\n this.userLenderId = response;\r\n });\r\n }\r\n });\r\n if (this.isShortlistingMore) {\r\n this.lenderService.getDealDeletedLenderIds(this.searchid).then(response => {\r\n this.deletedDealLenders = response;\r\n }).finally(() => {\r\n this.getSearchCriteriaAndResults();\r\n });\r\n } else {\r\n this.getSearchCriteriaAndResults();\r\n }\r\n });\r\n } else {\r\n this.isClient = true; // if the user isn't logged in then this is the enterprise journey and should be treated as a borrower/client\r\n }\r\n\r\n // this.updateGuidanceState();\r\n\r\n // $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n // this.updateGuidanceState();\r\n // });\r\n\r\n let logoutUnregister = $rootScope.$on(\r\n \"logout\",\r\n (event: ng.IAngularEvent) => {\r\n this.isLoggingOut = true;\r\n },\r\n );\r\n\r\n $scope.$on(\"$destroy\", logoutUnregister);\r\n\r\n // $rootScope.$on(\"nextTour\", (event: ng.IAngularEvent) => {\r\n // this.tourNext();\r\n // });\r\n // $rootScope.$on(\"backTour\", (event: ng.IAngularEvent) => {\r\n // this.tourBack();\r\n // });\r\n // $rootScope.$on(\"skipTour\", (event: ng.IAngularEvent) => {\r\n // this.tourSkip();\r\n // });\r\n }\r\n\r\n this.getAppName();\r\n\r\n this.numberOfPreviousDevelopmentsOptions =\r\n this.selectListService.GetNumberOfPreviousDevelopmentsForBridging();\r\n this.personalGuaranteeLevelOptions =\r\n this.selectListService.GetBridgingPersonalGuaranteeLevels();\r\n this.maxHouseSalePriceOptions =\r\n this.selectListService.GetMaxHouseSalePrices();\r\n this.maxFlatUnitPriceOptions =\r\n this.selectListService.GetMaxFlatUnitPrices();\r\n this.maxSqFtSalePriceOptions =\r\n this.selectListService.GetMaxSqFtSalePrices();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.valuationMethodOptions = this.selectListService.GetValuationMethodOptions();\r\n this.maxCommercialFloorspaceOptions = this.selectListService.GetMaxCommercialFloorspaceOptions();\r\n }\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n onPersonalGuaranteeLevelOptionsChange(e: BridgingPersonalGuaranteeLevelEnum) {\r\n switch (e) {\r\n case BridgingPersonalGuaranteeLevelEnum.None:\r\n this.loanCriteria.F_PersonalGuaranteeMin = 0.0;\r\n this.loanCriteria.F_PersonalGuaranteeMax = 0.0;\r\n break;\r\n case BridgingPersonalGuaranteeLevelEnum.OneToTwentyFivePercent:\r\n this.loanCriteria.F_PersonalGuaranteeMin = 0.01;\r\n this.loanCriteria.F_PersonalGuaranteeMax = 0.25;\r\n break;\r\n case BridgingPersonalGuaranteeLevelEnum.TwentySixToFiftyPercent:\r\n this.loanCriteria.F_PersonalGuaranteeMin = 0.26;\r\n this.loanCriteria.F_PersonalGuaranteeMax = 0.5;\r\n break;\r\n case BridgingPersonalGuaranteeLevelEnum.FiftyOneToOneHundredPercent:\r\n this.loanCriteria.F_PersonalGuaranteeMin = 0.51;\r\n this.loanCriteria.F_PersonalGuaranteeMax = 1.0;\r\n break;\r\n default:\r\n this.loanCriteria.F_PersonalGuaranteeMin = null;\r\n this.loanCriteria.F_PersonalGuaranteeMax = null;\r\n break;\r\n }\r\n }\r\n\r\n getPersonalGuaranteeLevelOptions() {\r\n return this.sharedSearchResultsService.getPersonalGuaranteeLevelOptions(\r\n this.tempLoanCriteria.F_PersonalGuaranteeMax,\r\n );\r\n }\r\n\r\n getPreviousDevelopments() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_NumberOfPreviousDevelopments) {\r\n case 0:\r\n value = PreviousDevelopmentsEnum.None;\r\n break;\r\n case 5:\r\n value = PreviousDevelopmentsEnum.OneOrTwo;\r\n break;\r\n case 6:\r\n value = PreviousDevelopmentsEnum.ThreeOrMore;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onMaxHouseSalesPriceChange(e: MaxHouseSalePriceEnum) {\r\n switch (e) {\r\n case MaxHouseSalePriceEnum.UpTo1Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 1000000;\r\n break;\r\n case MaxHouseSalePriceEnum.UpTo2Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 2000000;\r\n break;\r\n case MaxHouseSalePriceEnum.UpTo5Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 5000000;\r\n break;\r\n case MaxHouseSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxHouseSalesPrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxHouseSalesPrice = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxHouseSalesPrice() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxHouseSalesPrice) {\r\n case 1000000:\r\n value = MaxHouseSalePriceEnum.UpTo1Million;\r\n break;\r\n case 2000000:\r\n value = MaxHouseSalePriceEnum.UpTo2Million;\r\n break;\r\n case 5000000:\r\n value = MaxHouseSalePriceEnum.UpTo5Million;\r\n break;\r\n case -999:\r\n value = MaxHouseSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onMaxFlatUnitPriceChange(e: MaxFlatUnitPriceEnum) {\r\n switch (e) {\r\n case MaxFlatUnitPriceEnum.UpTo1Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 1000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.UpTo2Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 2000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.UpTo3Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 3000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.NoMax:\r\n this.loanCriteria.F_MaxFlatUnitPrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxFlatUnitPrice = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxFlatUnitPrice() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxFlatUnitPrice) {\r\n case 1000000:\r\n value = MaxFlatUnitPriceEnum.UpTo1Million;\r\n break;\r\n case 2000000:\r\n value = MaxFlatUnitPriceEnum.UpTo2Million;\r\n break;\r\n case 3000000:\r\n value = MaxFlatUnitPriceEnum.UpTo3Million;\r\n break;\r\n case -999:\r\n value = MaxFlatUnitPriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onMaxSqFtSalePriceChange(e: MaxSqFtSalePriceEnum) {\r\n switch (e) {\r\n case MaxSqFtSalePriceEnum.UpTo850:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 850;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1000:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 1000;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1500:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 1500;\r\n break;\r\n case MaxSqFtSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxSqFtSalePrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxSqFtSalePrice = null;\r\n break;\r\n }\r\n }\r\n\r\n onMaxSqFtFlatsSalePriceChange(e: MaxSqFtSalePriceEnum) {\r\n switch (e) {\r\n case MaxSqFtSalePriceEnum.UpTo850:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 850;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1000:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 1000;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1500:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 1500;\r\n break;\r\n case MaxSqFtSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxSqFtSalePrice() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxSqFtSalePrice) {\r\n case 850:\r\n value = MaxSqFtSalePriceEnum.UpTo850;\r\n break;\r\n case 1000:\r\n value = MaxSqFtSalePriceEnum.UpTo1000;\r\n break;\r\n case 1500:\r\n value = MaxSqFtSalePriceEnum.UpTo1500;\r\n break;\r\n case -999:\r\n value = MaxSqFtSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getMaxSqFtSalePriceFlats() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxSqFtSalePriceFlats) {\r\n case 850:\r\n value = MaxSqFtSalePriceEnum.UpTo850;\r\n break;\r\n case 1000:\r\n value = MaxSqFtSalePriceEnum.UpTo1000;\r\n break;\r\n case 1500:\r\n value = MaxSqFtSalePriceEnum.UpTo1500;\r\n break;\r\n case -999:\r\n value = MaxSqFtSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n clearSelected() {\r\n if (this.isShortlistingMore) {\r\n this.comparisonList = this.comparisonList.filter(item =>\r\n this.summarySearchResults.some(result => result.ProductID == item.ProductID)\r\n );\r\n\r\n const dealLenders = this.initialSummarySearchResults.filter(result =>\r\n result.IsDealLender && !result.IsDeleted\r\n );\r\n\r\n dealLenders.forEach(dealLender => {\r\n if (!this.comparisonList.some(item => item.ProductID === dealLender.ProductID)) {\r\n this.comparisonList.push(dealLender);\r\n }\r\n });\r\n } else {\r\n this.comparisonList = this.comparisonList.filter(item =>\r\n this.summarySearchResults.some(result => result.ProductID == item.ProductID)\r\n );\r\n }\r\n }\r\n\r\n applyFilters() {\r\n this.loadingData = true;\r\n this.showFilters = false;\r\n this.isFilterUpdate = true;\r\n\r\n if (this.loanCriteria.F_IsFirstTimeDeveloper) {\r\n this.loanCriteria.F_NumberOfPreviousDevelopments = null;\r\n }\r\n\r\n this.updateCriteriaAndGetResults(false);\r\n }\r\n\r\n clearClientFilters() {\r\n event.stopPropagation();\r\n this.loanCriteria.F_IsFirstTimeDeveloper = null;\r\n this.loanCriteria.F_NumberOfPreviousDevelopments = null;\r\n this.loanCriteria.F_IsPersonalName = null;\r\n this.loanCriteria.F_IsOffshoreCompany = null;\r\n this.loanCriteria.F_IsMainShareholderOverseas = null;\r\n\r\n this.loanCriteria.F_PersonalGuaranteeLevel = null;\r\n this.personalGuaranteeLevel = null;\r\n this.previousDevelopments = null;\r\n\r\n this.loanCriteria.F_PersonalGuaranteeMin = null;\r\n this.loanCriteria.F_PersonalGuaranteeMax = null;\r\n this.loanCriteria.F_HasAdverseCredit = null;\r\n this.loanCriteria.F_IsBelowMarketValue = null;\r\n this.loanCriteria.F_IsAutomatedValuationModel = null;\r\n this.loanCriteria.F_IsAuctionPurchase = null;\r\n this.loanCriteria.F_ValuationMethod = null;\r\n }\r\n\r\n showClearForClientFilters() {\r\n if (\r\n this.loanCriteria.F_IsFirstTimeDeveloper != null ||\r\n this.loanCriteria.F_NumberOfPreviousDevelopments != null ||\r\n this.loanCriteria.F_IsPersonalName != null ||\r\n this.loanCriteria.F_IsOffshoreCompany != null ||\r\n this.loanCriteria.F_IsMainShareholderOverseas != null ||\r\n this.loanCriteria.F_PersonalGuaranteeLevel != null ||\r\n this.loanCriteria.F_PersonalGuaranteeMin != null ||\r\n this.loanCriteria.F_PersonalGuaranteeMax != null ||\r\n this.loanCriteria.F_HasAdverseCredit != null ||\r\n this.loanCriteria.F_IsBelowMarketValue != null ||\r\n this.loanCriteria.F_IsAutomatedValuationModel != null ||\r\n this.loanCriteria.F_IsAuctionPurchase != null ||\r\n this.loanCriteria.F_ValuationMethod != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n toggleCheckbox(variableName) {\r\n if (\r\n this.loanCriteria[variableName] === null ||\r\n this.loanCriteria[variableName] === false\r\n ) {\r\n this.loanCriteria[variableName] = true;\r\n } else {\r\n this.loanCriteria[variableName] = null;\r\n }\r\n }\r\n\r\n clearPropertyFilters() {\r\n event.stopPropagation();\r\n //this.loanCriteria.F_IsAirRights = null;\r\n //this.loanCriteria.F_IsModular = null;\r\n //this.loanCriteria.F_IsPermittedDevelopmentScheme = null;\r\n this.loanCriteria.F_IsGradeOneListed = null;\r\n this.loanCriteria.F_IsGradeTwoListed = null;\r\n this.loanCriteria.F_MaxHouseSalesPrice = null;\r\n this.loanCriteria.F_MaxFlatUnitPrice = null;\r\n this.loanCriteria.F_MaxNumberOfUnits = null;\r\n this.loanCriteria.F_MaxPercCommercialForMixedUse = null;\r\n this.loanCriteria.F_MaxSqFtSalePrice = null;\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = null;\r\n\r\n //this.loanCriteria.F_IsWorkStarted = null;\r\n this.maxHouseSalesPrice = null;\r\n this.maxFlatUnitPrice = null;\r\n this.maxSqFtSalePrice = null;\r\n this.maxSqFtSalePriceFlats = null;\r\n this.loanCriteria.F_IsTimberFrameConstruction = null;\r\n this.loanCriteria.F_IsConcreteConstruction = null;\r\n this.loanCriteria.F_MaxCommercialFloorspace = null;\r\n }\r\n\r\n showClearForPropertyFilters() {\r\n if (\r\n this.loanCriteria.F_IsGradeOneListed != null ||\r\n this.loanCriteria.F_IsGradeTwoListed != null ||\r\n this.loanCriteria.F_MaxHouseSalesPrice != null ||\r\n this.loanCriteria.F_MaxFlatUnitPrice != null ||\r\n this.loanCriteria.F_MaxNumberOfUnits != null ||\r\n this.loanCriteria.F_MaxSqFtSalePrice != null ||\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats != null ||\r\n this.loanCriteria.F_IsTimberFrameConstruction != null ||\r\n this.loanCriteria.F_IsConcreteConstruction != null ||\r\n this.loanCriteria.F_MaxCommercialFloorspace != null\r\n\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearFinanceFilters() {\r\n event.stopPropagation();\r\n this.loanCriteria.F_IsChargeOnAdditionalProperty = null;\r\n this.loanCriteria.F_IsFixedRate = null;\r\n this.loanCriteria.F_IsShariaLoan = null;\r\n this.loanCriteria.F_IsRetypedValuation = null;\r\n this.loanCriteria.F_IsIndemnityInsurance = null;\r\n this.loanCriteria.F_IsTitleInsurance = null;\r\n this.loanCriteria.F_IsServicedInterest = null;\r\n this.loanCriteria.F_IsReBridge = null;\r\n }\r\n\r\n showClearForFinanceFilters() {\r\n if (\r\n this.loanCriteria.F_IsChargeOnAdditionalProperty != null ||\r\n this.loanCriteria.F_IsFixedRate != null ||\r\n this.loanCriteria.F_IsRetypedValuation != null ||\r\n this.loanCriteria.F_IsIndemnityInsurance != null ||\r\n this.loanCriteria.F_IsTitleInsurance != null ||\r\n this.loanCriteria.F_IsServicedInterest != null ||\r\n this.loanCriteria.F_IsReBridge != null ||\r\n this.loanCriteria.F_IsShariaLoan != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearAllFilters() {\r\n this.clearClientFilters();\r\n this.clearPropertyFilters();\r\n this.clearFinanceFilters();\r\n }\r\n\r\n debugSearch() {\r\n const stringJSON = JSON.stringify(this.loanCriteria);\r\n navigator.clipboard\r\n .writeText(stringJSON)\r\n .then()\r\n .catch((e) => console.log(e));\r\n }\r\n\r\n onClickFilterCancel() {\r\n this.filterProperties.forEach(\r\n (e) => (this.loanCriteria[e] = this.tempLoanCriteria[e]),\r\n );\r\n\r\n this.personalGuaranteeLevel = null;\r\n this.maxHouseSalesPrice = null;\r\n this.maxFlatUnitPrice = null;\r\n }\r\n\r\n filterPropertyToText(property: string) {\r\n let value = this.tempLoanCriteria[property];\r\n if (typeof value == \"boolean\" && value == true) {\r\n return;\r\n } else if (value != null && typeof value != \"boolean\") {\r\n return `: ${this.getPropertyValue(property)}`;\r\n } else if (value == null) {\r\n return;\r\n }\r\n return false;\r\n }\r\n\r\n checkFilterSelected(property: string) {\r\n return this.sharedSearchResultsService.checkFilterSelected(\r\n property,\r\n this.tempLoanCriteria,\r\n );\r\n }\r\n\r\n getPropertyValue(property) {\r\n let propertyValue = this.tempLoanCriteria[property];\r\n switch (property) {\r\n case \"F_PersonalGuaranteeMax\":\r\n return this.selectListService\r\n .GetBridgingPersonalGuaranteeLevels()\r\n .find((item) => item.key === this.getPersonalGuaranteeLevelOptions())\r\n ?.displayName;\r\n case \"F_MaxHouseSalesPrice\":\r\n return this.selectListService\r\n .GetMaxHouseSalePrices()\r\n .find((item) => item.key === this.getMaxHouseSalesPrice())\r\n ?.displayName;\r\n case \"F_MaxFlatUnitPrice\":\r\n return this.selectListService\r\n .GetMaxFlatUnitPrices()\r\n .find((item) => item.key === this.getMaxFlatUnitPrice())?.displayName;\r\n case \"F_MaxSqFtSalePrice\":\r\n return this.selectListService\r\n .GetMaxSqFtSalePrices()\r\n .find((item) => item.key === this.getMaxSqFtSalePrice())?.displayName;\r\n case \"F_MaxSqFtSalePriceFlats\":\r\n return this.selectListService\r\n .GetMaxSqFtSalePrices()\r\n .find((item) => item.key === this.getMaxSqFtSalePriceFlats())\r\n ?.displayName;\r\n case \"F_NumberOfPreviousDevelopments\":\r\n return this.selectListService\r\n .GetNumberOfPreviousDevelopmentsForBridging()\r\n .find((item) => item.key === this.getPreviousDevelopments())\r\n ?.displayName;\r\n case \"F_MaxNumberOfUnits\":\r\n return propertyValue;\r\n case \"F_ValuationMethod\":\r\n return this.selectListService\r\n .GetValuationMethodOptions()\r\n .find((item) => item.key === this.tempLoanCriteria.F_ValuationMethod)\r\n ?.displayName;\r\n case \"F_MaxCommercialFloorspace\":\r\n return this.selectListService\r\n .GetMaxCommercialFloorspaceOptions()\r\n .find((item) => item.key === this.tempLoanCriteria.F_MaxCommercialFloorspace)\r\n ?.displayName;\r\n default:\r\n return propertyValue;\r\n }\r\n }\r\n\r\n countFiltersSelected() {\r\n let count = 0;\r\n count = this.sharedSearchResultsService.countFiltersSelected(\r\n this.tempLoanCriteria,\r\n this.filterProperties,\r\n );\r\n return count;\r\n }\r\n\r\n getDisplayTextForProperty(property) {\r\n return this.sharedSearchResultsService.getDisplayTextForProperty(property);\r\n }\r\n\r\n splitCamelCase(str) {\r\n return str\r\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\r\n .replace(/([A-Z])([A-Z][a-z])/g, \"$1 $2\");\r\n }\r\n\r\n updateCriteriaAndGetResults(\r\n criteriaChanged: boolean,\r\n updateLoanLabels: boolean = false,\r\n ) {\r\n this.bridgingDealService\r\n .updateSearchCriteriaAndGetResults(\r\n this.loanCriteria,\r\n criteriaChanged,\r\n this.debug1,\r\n this.isPostcodeChange,\r\n this.isShortlistingMore\r\n )\r\n .then((results: UpdateBridgingSearchGetResultResponse) => {\r\n if (this.isPostcodeChange) {\r\n if (results.CriteriaLocation != null) {\r\n this.loanCriteria.Locations = results.CriteriaLocation;\r\n this.summarySearchResults = results.Results;\r\n } else {\r\n this.postcodeErrorMsg = results.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n } else {\r\n this.summarySearchResults = results.Results;\r\n this.sortSummaryResults();\r\n }\r\n })\r\n .catch((error) => { })\r\n .finally(() => {\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.clearSelected();\r\n this.isPostcodeChange = false;\r\n\r\n if (updateLoanLabels) {\r\n this.updateLoanLabels();\r\n }\r\n\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n /**Update the loan label in the comparison results based on the loan label returned in the results\r\n * Primary purpose is to update the loan label when the show lender names button is toggled\r\n * */\r\n updateLoanLabels() {\r\n for (var i = 0; i < this.comparisonList.length; i++) {\r\n let resultIndex = this.summarySearchResults.findIndex(\r\n (item) => item.ProductID == this.comparisonList[i].ProductID,\r\n );\r\n\r\n if (resultIndex > -1) {\r\n this.comparisonList[i].LoanLabel =\r\n this.summarySearchResults[resultIndex].LoanLabel;\r\n }\r\n }\r\n\r\n //This is used in shortlisting pdf\r\n this.prepareDataForShortlistPdf();\r\n }\r\n\r\n changeSearch() {\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n this.warningOff = true;\r\n sessionStorage.setItem(\"skip\", \"true\");\r\n if (!this.isLoggedInUser && (this.dealUniqueRef || this.dealClientUniqueRef)) {\r\n if (this.dealClientUniqueRef) sessionStorage.setItem('previousRoute', 'referredsearchdeal')\r\n var url = `/e/bridgingcriteria/${this.loanCriteria.UniqueRef}`;\r\n if (this.loanCriteria.OrganisationLinkId > 0) {\r\n url = `${url}/${this.loanCriteria.OrganisationLinkId}`;\r\n }\r\n this.go(url);\r\n }\r\n else if (this.searchid) {\r\n this.go(\"/bridgingcriteria/\" + this.searchid);\r\n } else {\r\n this.go(\"/bridgingcriteria\");\r\n }\r\n }\r\n\r\n newloan() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/bridgingcriteria/0\");\r\n }\r\n\r\n getSearchResultCount() {\r\n return this.sharedSearchResultsService.getSearchResultCount(\r\n this.summarySearchResults,\r\n );\r\n }\r\n\r\n checkDeletedLender(lenderId: string, productId: string): boolean {\r\n if (this.isShortlistingMore && this.deletedDealLenders) {\r\n const deletedLender = this.deletedDealLenders.find(deletedLender => deletedLender.LenderId === String(lenderId));\r\n\r\n if (deletedLender) {\r\n return deletedLender.ProductId === String(productId);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n getSearchLenderCount() {\r\n this.lenderService\r\n .getTotalLenders(ProductFamilyEnum.Bridging, this.loanCriteria.BrokerOrganisationId)\r\n .then((result: number) => {\r\n this.totalLender = result;\r\n });\r\n }\r\n\r\n getUsersBelongToBrokerOrAdmin() {\r\n this.loadingData = true;\r\n this.$user\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n });\r\n }\r\n\r\n // updateGuidanceState() {\r\n // this.tourEnabled = this.sharedSearchResultsService.updateGuidanceState(\r\n // this.guidanceCheckbox,\r\n // );\r\n // }\r\n\r\n // getGuidanceSwitchState() {\r\n // return this.sharedSearchResultsService.getGuidanceSwitchState();\r\n // }\r\n\r\n // recordGuidanceCookie() {\r\n // this.sharedSearchResultsService.recordGuidanceCookie(this.guidanceCheckbox);\r\n // this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n // }\r\n\r\n // tourNext(): void {\r\n // this.tourState.tourStep++;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // }\r\n\r\n // tourBack(): void {\r\n // this.tourState.tourStep--;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // }\r\n\r\n // tourSkip(): void {\r\n // this.tourEnabled = false;\r\n // this.$cookies.put(\"tourEnabled\", \"false\");\r\n // this.$cookies.remove(\"tourStep\");\r\n // }\r\n\r\n // startTour(): void {\r\n // this.tourState.tourStep = 1;\r\n // this.tourState.tourTotalSteps = 0;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // this.tourEnabled = true;\r\n // this.$cookies.put(\"tourEnabled\", \"true\");\r\n // }\r\n\r\n /**\r\n * Saves the new search name on the edit.\r\n * @param none\r\n */\r\n doRenameSearch() {\r\n var request: SaveBridgingSearchRequest = {\r\n DealDto: this.loanCriteria,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.orgCode,\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n if (this.searchid) {\r\n this.bridgingDealService\r\n .saveBridgingSearchReturnsId(request)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n } else if (this.dealUniqueRef) {\r\n if (this.isLoggedInUser) {\r\n this.bridgingDealService.saveBridgingSearchReturnsUniqueRef(request)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n } else {\r\n this.dealService.renameDeal(this.dealUniqueRef, this.loanCriteria.Name)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n }\r\n }\r\n else {\r\n this.toggleEditSearchName = false;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the search results and criteria for selected search\r\n * @param none\r\n */\r\n getSearchCriteriaAndResults() {\r\n if (window.self == window.top) {\r\n this.snapshotNewSearch = sessionStorage.getItem(\"newSearch\") == \"true\";\r\n sessionStorage.setItem(\"newSearch\", \"false\");\r\n }\r\n\r\n if (this.searchid) {\r\n this.loadingData = true;\r\n this.bridgingSearchService\r\n .getSearchCriteriaAndResultsByDealId(\r\n this.searchid,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n if (this.summarySearchResults != null) {\r\n const productIds = this.summarySearchResults.map((product) => product.ProductID);\r\n this.getProductLastVerifiedDates(productIds);\r\n }\r\n })\r\n .then(() => {\r\n this.getSearchLenderCount();\r\n if (this.isLoggedInUser) this.getSelectedProducts();\r\n this.updateLoanLabels();\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n .finally(() => {\r\n if (this.loanCriteria) {\r\n this.isMaximumLoanRequired = this.loanCriteria.MaxLoanRequired;\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.$CaseService.updateTubeMap(this.loanCriteria.Status);\r\n this.loadingData = false;\r\n this.hasResultsProcessed = true;\r\n }\r\n });\r\n } else if (this.dealUniqueRef) {\r\n this.loadingData = true;\r\n this.bridgingSearchService\r\n .getSearchCriteriaAndResultsByDealUniqueRef(\r\n this.dealUniqueRef,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n if (this.summarySearchResults != null) {\r\n const productIds = this.summarySearchResults.map((product) => product.ProductID);\r\n this.getProductLastVerifiedDates(productIds);\r\n }\r\n })\r\n .then(() => {\r\n this.getSearchLenderCount();\r\n if (this.loanCriteria) this.getSelectedProducts();\r\n this.updateLoanLabels();\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n .finally(() => {\r\n if (this.loanCriteria) {\r\n this.isMaximumLoanRequired = this.loanCriteria.MaxLoanRequired;\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n //this.$CaseService.updateTubeMap(this.loanCriteria.Status);\r\n this.loadingData = false;\r\n this.hasResultsProcessed = true;\r\n }\r\n });\r\n } else if (this.dealClientUniqueRef) {\r\n this.loadingData = true;\r\n this.bridgingSearchService\r\n .getSearchCriteriaAndResultsByDealClientUniqueRef(\r\n this.dealClientUniqueRef,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n if (this.loanCriteria) this.getSelectedProducts();\r\n this.getSearchLenderCount();\r\n if (\r\n sessionStorage.getItem(\"LoanCriteria\") &&\r\n (this.$rootScope as any).previousRoute.startsWith(\"/compare\")\r\n ) {\r\n this.comparisonList = JSON.parse(\r\n sessionStorage.getItem(\"ComparisonList\"),\r\n );\r\n //Removing lsd data saved for compare view.\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n }\r\n })\r\n .finally(() => {\r\n this.isMaximumLoanRequired = this.loanCriteria.MaxLoanRequired;\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n //this.$CaseService.updateTubeMap(this.loanCriteria.Status);\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.loadingData = false;\r\n this.hasResultsProcessed = true;\r\n });\r\n }\r\n }\r\n\r\n postResultsProcessing(results: BridgingSearchResultsResponse) {\r\n if (results.HideDeal || results.HasNoAccessToDeal) {\r\n if (results.HasNoAccessToDeal) {\r\n if (this.isClient) {\r\n this.noAccessToDealMsg =\r\n \"Please contact your broker in order to access this case.\";\r\n } else {\r\n this.noAccessToDealMsg = \"Error retrieving deal.\";\r\n }\r\n }\r\n\r\n if (results.HideDeal) {\r\n this.noAccessToDealMsg =\r\n \"You cannot access Bridging search results. Please contact your admin for more details.\";\r\n }\r\n\r\n this.hasAccessToDeal = false;\r\n } else {\r\n this.summarySearchResults = this.initialSummarySearchResults = results.Results;\r\n this.loanCriteria = results.CriteriaDto;\r\n \r\n if(this.isLoggedInUser ){\r\n this.validateAccessAndRedirect();\r\n }\r\n \r\n this.sortSummaryResults();\r\n\r\n if (this.isLoggedInUser) {\r\n if (this.dealClientUniqueRef) {\r\n if (this.isClient) {\r\n this.eventLogService.logPageLoad(\r\n \"AFTER-ENTERPRISE-LEAD-REGISTRATION-USING-EMAIL-LINK\",\r\n this.orgCode,\r\n this.selectedUser.UserName,\r\n \"Client\",\r\n this.loanCriteria?.OrganisationLinkId,\r\n this.loanCriteria.ProductType,\r\n \"\",\r\n this.loanCriteria?.Id,\r\n );\r\n }\r\n } else {\r\n if (this.loanCriteria.LenderReferralLenderId) this.isLenderReferredSearch = true;\r\n\r\n // Showing confirm client phone number modal once client register through result page\r\n if (this.isClient && sessionStorage.getItem('showConfirmClientPhoneNo') == 'true') {\r\n this.showClientPhoneNumberConfirmationModal = true;\r\n this.clientUpdatedContact = this.loanCriteria?.DealClients[0].Client.PhoneNumber;\r\n }\r\n\r\n this.dealProductTypeDisplayText = this.productService.getProductTypeDisplayText(this.loanCriteria.ProductType,);\r\n\r\n // Expanding a 'new search' panel for first time search execution\r\n if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"newSearch\")\r\n ) {\r\n this.sliderShown = (this.$rootScope as any).previousRoute.startsWith(\"/compare\") || this.showClientPhoneNumberConfirmationModal ? false : true;\r\n sessionStorage.removeItem(\"newSearch\");\r\n }\r\n }\r\n } else {\r\n if (this.$location.path().startsWith(\"/e/bridgingresults\")) {\r\n this.populateEnterpriseClientValue(\"LENDERRESULTS\");\r\n }\r\n\r\n if (this.dealClientUniqueRef) {\r\n if (this.$routeParams.showOnlyRegister == \"false\")\r\n this.isClient = true;\r\n this.populateEnterpriseClientValue(\"LENDERRESULTS-USING-EMAIL-LINK\");\r\n }\r\n }\r\n\r\n var owner = this.loanCriteria.DealClients.find((dc) => dc.IsPrimary);\r\n\r\n if (owner) {\r\n this.isAssigned = true;\r\n }\r\n }\r\n }\r\n\r\n populateEnterpriseClientValue(eventType) {\r\n if (this.loanCriteria.DealClients[0] != null) {\r\n this.enterpriseClient.FirstName =\r\n this.loanCriteria.DealClients[0].Client.FirstName;\r\n this.enterpriseClient.LastName =\r\n this.loanCriteria.DealClients[0].Client.LastName;\r\n this.enterpriseClient.Email =\r\n this.loanCriteria.DealClients[0].Client.Email;\r\n this.enterpriseClient.UserName =\r\n this.loanCriteria.DealClients[0].Client.Email;\r\n this.enterpriseClient.DealClientUniqueRef = this.loanCriteria.DealClients[0].UniqueRef;\r\n this.enterpriseClient.OrgCode = this.orgCode;\r\n this.enterpriseClient.PhoneNumber =\r\n this.loanCriteria.DealClients[0].Client.PhoneNumber;\r\n if (this.loanCriteria.DealClients[0].Client.ClientUserId) {\r\n this.showRegisterModal = true;\r\n this.showLoginSection = true;\r\n }\r\n\r\n if (this.loanCriteria.OrganisationLinkId) {\r\n this.organisationLinkService\r\n .getOrganisationLinkLogoByLinkIdAndLogPageLoadEvent(Number(this.loanCriteria.OrganisationLinkId), eventType, this.loanCriteria.Id, this.loanCriteria.ProductType, this.loanCriteria.DealClients[0]?.Client?.Email, this.loanCriteria.DealClients[0]?.Client?.Id.toString())\r\n .then((logoUrl) => {\r\n if (logoUrl) {\r\n var imgs = document.getElementsByTagName(\"img\");\r\n imgs[0].src = logoUrl\r\n }\r\n });\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n eventType,\r\n this.orgCode,\r\n this.loanCriteria.DealClients.length > 0\r\n ? this.loanCriteria.DealClients[0].Client.Email\r\n : \"\",\r\n \"Client\",\r\n this.loanCriteria.OrganisationLinkId != null\r\n ? this.loanCriteria.OrganisationLinkId\r\n : null,\r\n this.loanCriteria?.ProductType,\r\n \"\",\r\n this.loanCriteria?.Id,\r\n this.loanCriteria.DealClients.length > 0\r\n ? this.loanCriteria.DealClients[0].Client.Id.toString()\r\n : null,\r\n );\r\n }\r\n //Todo Roopa: do we need a broker details?\r\n this.getOrganisationAndBrokerDetails();\r\n }\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n toggleLenderComparisonSelection(\r\n item: BridgingLenderResultSummaryDTO,\r\n index: number,\r\n ) {\r\n\r\n let comparisonMatches: BridgingLenderResultSummaryDTO[] =\r\n this.comparisonList.filter((result, index) => {\r\n return result.ProductID === item.ProductID;\r\n });\r\n\r\n if (!comparisonMatches || comparisonMatches.length === 0) {\r\n this.comparisonList.push(item);\r\n this.eventLogService.logEvent(\r\n `SHORTLISTING-RESULT`,\r\n EventLogEnum.Shortlisting,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n item.ProductID.toString(),\r\n \"\"\r\n );\r\n } else {\r\n\r\n if (this.isShortlistingMore && item.IsDealLender && (this.loanCriteria.Status != CaseStatusEnum.Search && this.loanCriteria.Status != CaseStatusEnum.NewCase))\r\n return;\r\n comparisonMatches.forEach((value, index) => {\r\n this.comparisonList.splice(this.comparisonList.indexOf(value), 1);\r\n });\r\n this.eventLogService.logEvent(\r\n `DESELECTING-SHORTLISTED-RESULT`,\r\n EventLogEnum.Shortlisting,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n item.ProductID.toString(),\r\n \"\"\r\n );\r\n }\r\n //This is user for shortlisting pdf\r\n this.prepareDataForShortlistPdf();\r\n }\r\n\r\n comparisonContains(item: BridgingLenderResultSummaryDTO): boolean {\r\n return !!this.comparisonList.find((result, index) => {\r\n return result.ProductID === item.ProductID;\r\n });\r\n }\r\n\r\n checkLender(item: BridgingLenderResultSummaryDTO): boolean {\r\n if (this.userLenderId == item.LenderID) return true;\r\n return false;\r\n }\r\n\r\n selectionOrderNumber(item: BridgingLenderResultSummaryDTO) {\r\n\r\n\r\n var activeProductList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n\r\n var hiddenProduct = this.HiddenDealLenderList.filter(hl => hl.Status != CaseLenderStateEnum.Rejected && hl.Status != CaseLenderStateEnum.Withdrawn);\r\n var hiddenProductLength = this.isShortlistingMore ? hiddenProduct.length : 0;\r\n\r\n var order =\r\n activeProductList.map((item) => item.ProductID).indexOf(item.ProductID) + hiddenProductLength +\r\n 1;\r\n if (order === 0) {\r\n return \" \";\r\n }\r\n\r\n return order;\r\n }\r\n\r\n /**\r\n * Processes the clicking of the \"View Eligibility\" anchor/button and index to show on the row number\r\n * @param item BridgingLenderResultSummaryDTO\r\n */\r\n viewEligibility(item: BridgingLenderResultSummaryDTO) {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.showProductNote = true;\r\n this.offer = item;\r\n this.loanLabel = item.LoanLabel;\r\n this.productNote = item.AdditionalProductInfo;\r\n }\r\n\r\n /**\r\n *Marks a selected search as a deleted\r\n * @param\r\n */\r\n deleteSearch() {\r\n if (this.$routeParams.SearchId) {\r\n this.dealService\r\n .markasdeleted(this.$routeParams.SearchId)\r\n .then((response) => {\r\n this.displayMsg = \"Search is successfully deleted\";\r\n this.showMsg = true;\r\n this.ShowdeleteSearch = true;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n this.showMsg = true;\r\n });\r\n }\r\n }\r\n\r\n closeDeleteModal() {\r\n this.showMsg = false;\r\n this.displayMsg = null;\r\n this.ShowdeleteSearch = false;\r\n this.warningOff = true;\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.go(\"/userdashboard\");\r\n }\r\n\r\n viewSingleLoan(item: BridgingLenderResultSummaryDTO) {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.warningOff = true;\r\n //Storing the actual comparisonList to local storage so that to recover it later when we comeback to result screen from compare screen.\r\n sessionStorage.setItem(\r\n \"actualcomparisonList\",\r\n JSON.stringify(this.comparisonList),\r\n );\r\n this.comparisonList = [];\r\n\r\n this.comparisonList.push(item);\r\n this.goCompare();\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n }\r\n\r\n goCompare() {\r\n this.warningOff = true;\r\n\r\n this.sharedSearchResultsService.clearStorageDataForCompareView();\r\n let comparisonList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n\r\n sessionStorage.setItem(\"ComparisonList\", JSON.stringify(comparisonList));\r\n sessionStorage.setItem(\"LoanCriteria\", JSON.stringify(this.loanCriteria));\r\n\r\n\r\n // temporarily put all results into saved results so the comparison controller can use them.\r\n let allResults: BridgingLenderResultSummaryDTO[] = [];\r\n this.summarySearchResults.forEach((result) => {\r\n allResults.push(result);\r\n });\r\n\r\n sessionStorage.setItem(\"TempSavedResults\", JSON.stringify(allResults));\r\n\r\n if (this.dealClientUniqueRef) {\r\n if (!this.isLoggedInUser) {\r\n this.dealUniqueRef = this.loanCriteria.UniqueRef;\r\n //This property is used in compare view controller to find previous route \r\n sessionStorage.setItem(\"DealClientUniqueRef\", this.dealClientUniqueRef);\r\n } else {\r\n this.searchid = this.loanCriteria.Id;\r\n }\r\n }\r\n\r\n if (this.searchid) {\r\n this.$location.path(\"compare/\" + this.searchid + \"/\" + 0 + \"/\" + true);\r\n } else {\r\n this.$location.path(\"compare/\" + this.dealUniqueRef + \"/\" + 0 + \"/\" + true);\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Opens the modal to enter new name or calls 'register' method to svae and promote search to case.\r\n */\r\n\r\n applyForLoan() {\r\n this.isProceedClicked = true;\r\n this.register(true, this.productResultList);\r\n //if (this.searchid && this.loanCriteria.SearchName.startsWith('My Loan Search')) {\r\n // this.showSaveResults = 2;\r\n //} else if (this.searchid) {\r\n // this.register(true, this.productResultList)\r\n //}\r\n }\r\n\r\n getDealLenders(selectedLenders: BridgingLenderResultSummaryDTO[]) {\r\n var lendersList: DealLenderDTO[] = [];\r\n\r\n if (this.dealClientUniqueRef || this.dealUniqueRef) {\r\n this.searchid = this.loanCriteria.Id;\r\n }\r\n\r\n selectedLenders.forEach(({ ProductID, LenderID, GrossLoan }) => {\r\n var dealLender: DealLenderDTO;\r\n\r\n if (this.dealLenders) {\r\n dealLender = this.dealLenders.find(\r\n (dl) =>\r\n dl.DealId === this.searchid &&\r\n dl.ProductId === ProductID &&\r\n dl.LenderId === LenderID,\r\n );\r\n }\r\n\r\n if (!dealLender) {\r\n dealLender = {\r\n DealId: this.searchid,\r\n ProductId: ProductID,\r\n LenderId: LenderID,\r\n Status: CaseLenderStateEnum.Shortlisted,\r\n OriginalTotalGrossLoan: GrossLoan,\r\n } as DealLenderDTO;\r\n }\r\n\r\n lendersList.push(dealLender);\r\n });\r\n\r\n\r\n var unselecteLenderList = [];\r\n\r\n if (this.dealLenders) {\r\n unselecteLenderList = this.dealLenders.filter(dl => !lendersList.some(ll => ll.ProductId === dl.ProductId && ll.LenderId === dl.LenderId) && (dl.Status == CaseLenderStateEnum.Rejected || dl.Status == CaseLenderStateEnum.Withdrawn));\r\n }\r\n\r\n if (unselecteLenderList.length > 0) {\r\n unselecteLenderList.forEach((l) => {\r\n l.IsDeleted = true;\r\n lendersList.push(l);\r\n });\r\n }\r\n\r\n return lendersList;\r\n }\r\n\r\n\r\n getSelectedProducts() {\r\n\r\n if (this.summarySearchResults && this.summarySearchResults.length > 0) {\r\n this.dealLenderService\r\n .fetchDealLendersByDealId(this.dealClientUniqueRef || this.dealUniqueRef ? this.loanCriteria.Id : this.searchid)\r\n .then((results) => {\r\n this.dealLenders = results;\r\n })\r\n .then(() => {\r\n this.comparisonList = this.summarySearchResults.filter((result) => {\r\n const isDealLender = this.dealLenders.find(\r\n (dealLender) => dealLender.ProductId === result.ProductID,\r\n );\r\n if (isDealLender) {\r\n result.DealLenderStatus = isDealLender.Status;\r\n }\r\n return (result.IsDealLender = Boolean(isDealLender));\r\n });\r\n\r\n // Previously shortlisted/submitted lenders which are not visible on current results because of criteria change\r\n this.HiddenDealLenderList = this.dealLenders.filter(l =>\r\n !this.summarySearchResults.some(s => l.ProductId === s.ProductID)\r\n );\r\n\r\n if (this.comparisonList.length > 0) {\r\n var inActiveDealLenderList = this.comparisonList.filter(\r\n (ia) =>\r\n ia.DealLenderStatus == CaseLenderStateEnum.Rejected ||\r\n ia.DealLenderStatus == CaseLenderStateEnum.Withdrawn,\r\n );\r\n this.inActiveDealLender = inActiveDealLenderList.length;\r\n }\r\n\r\n if (\r\n sessionStorage.getItem(\"LoanCriteria\") &&\r\n (this.$rootScope as any).previousRoute.startsWith(\"/compare\")\r\n ) {\r\n if (sessionStorage.getItem(\"actualcomparisonList\")) {\r\n var selectedProducts = sessionStorage.getItem(\r\n \"actualcomparisonList\",\r\n );\r\n this.comparisonList = JSON.parse(selectedProducts);\r\n sessionStorage.removeItem(\"actualcomparisonList\");\r\n } else {\r\n this.comparisonList = JSON.parse(\r\n sessionStorage.getItem(\"ComparisonList\"),\r\n );\r\n }\r\n if (this.inActiveDealLender > 0) {\r\n this.comparisonList = this.comparisonList.concat(\r\n inActiveDealLenderList,\r\n );\r\n }\r\n\r\n //Removing lsd data saved for compare view.\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Saves the search or saves the search and create a case.\r\n * @param createCase (boolean set to true when promoting search to case)\r\n */\r\n register(createCase: boolean = false, productResultList: number) {\r\n this.loadingData = true;\r\n\r\n if (this.isShortlistingMore) {\r\n if (this.validateAllLendersUnique(this.comparisonList) == true) {\r\n this.dealLenderService.shortlistMoreLenders(this.loanCriteria.Id, this.getDealLenders(this.comparisonList), this.hasSearchChanged).then((response) => {\r\n }).then(() => {\r\n this.getSelectedProducts();\r\n }).finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.loadingData = false;\r\n }\r\n } else {\r\n if (\r\n this.shareDealDto &&\r\n this.shareDealDto.DealName &&\r\n this.shareDealDto.DealName.length > 0\r\n ) {\r\n this.loanCriteria.Name = this.shareDealDto.DealName;\r\n }\r\n\r\n var request: SaveBridgingSearchRequest = {\r\n DealDto: this.loanCriteria,\r\n ShareDealDto: null,\r\n OrgCode: \"\",\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n this.bridgingDealService\r\n .saveBridgingSearchReturnsId(request)\r\n .then((response) => {\r\n this.loanCriteria.Id = response as number;\r\n this.loadingData = false;\r\n\r\n // Creating the case is done on the casedashboard for deals\r\n if (createCase) {\r\n this.$location.path(\r\n \"/bridgingcasedashboard/\" + this.loanCriteria.Id + \"/\" + true,\r\n );\r\n }\r\n\r\n var shortlistDealLenders = this.getDealLenders(this.comparisonList);\r\n\r\n this.dealLenderService\r\n .addUpdatelistreturnonlyids(shortlistDealLenders)\r\n .then((response) => {\r\n let deallenders = this.dealLenders.filter(\r\n (lender) => response.indexOf(lender.Id) === -1,\r\n );\r\n\r\n deallenders.forEach((lender) =>\r\n this.dealLenderService.markasdeleted(lender.Id),\r\n );\r\n }).finally(() => {\r\n this.getSelectedProducts();\r\n this.isClicked = false;\r\n this.newSearch = false;\r\n this.isProceedClicked = false;\r\n this.showSaveResults = null;\r\n this.loadingData = false;\r\n });\r\n })\r\n .catch((response) => {\r\n //TODO BRIDGING - capture if an error has occurred and process it\r\n //this.isError = true;\r\n this.isProceedClicked = false;\r\n })\r\n .finally(() => { });\r\n }\r\n }\r\n\r\n /*onClickSaveAs() {\r\n this.showSaveResults = 3;\r\n this.tempSearchName = this.loanCriteria.Name;\r\n this.loanCriteria.Name = '';\r\n }\r\n\r\n saveAs() {\r\n\r\n this.isSaveorSaveAsClicked = true;\r\n this.register(false, this.productResultList);\r\n }*/\r\n\r\n onClickSaveAs() {\r\n this.isSaveAsClicked = true;\r\n if (this.isAdmin || this.isBroker) {\r\n if (!this.shareDealDto) {\r\n this.shareDealDto = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n }\r\n this.shareDealDto.DealName = \"\";\r\n this.showShareSearchModal();\r\n } else {\r\n this.showSaveResults = 3;\r\n }\r\n }\r\n\r\n saveSaveAsSearch(attachClient = false) {\r\n this.loadingData = true;\r\n let newSearchName = this.isBroker || this.isAdmin ? this.shareDealDto.DealName : this.saveAsSearchName;\r\n\r\n if (newSearchName.length == 0) {\r\n newSearchName = this.loanCriteria.Name + ' (Copy)';\r\n }\r\n\r\n var request: SaveAsSearchRequest = {\r\n ShareDealDto: attachClient ? this.shareDealDto : null,\r\n ProductFamily: this.loanCriteria.ProductFamily,\r\n SearchId: this.loanCriteria.Id,\r\n NewSearchName: newSearchName,\r\n };\r\n\r\n this.dealService\r\n .saveSaveAsSearch(request)\r\n .then((result) => {\r\n this.displayMsg = `${newSearchName} search has been saved to your dashboard.`;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.cancelNewSearch();\r\n this.loadingData = false;\r\n this.isSaveAsClicked = false;\r\n this.shareDealDto = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n this.saveAsSearchName = \"\";\r\n this.showSaveResults = null;\r\n this.showMsg = true;\r\n });\r\n }\r\n\r\n openSendResultsToBorrowerModal() {\r\n var client = this.loanCriteria.DealClients[0][\"Client\"]; // TODO BRIDGING FUTURE- always want to assume there's one for now until there's a redesign of sharing\r\n this.shareDealDto.DealId = this.loanCriteria.Id;\r\n this.shareDealDto.DealName = this.loanCriteria.Name;\r\n this.shareDealDto.IsApplicant = true;\r\n this.shareDealDto.IsPrimary = true;\r\n this.shareDealDto.ClientDto = {\r\n FirstName: client.FirstName,\r\n LastName: client.LastName,\r\n Email: client.Email,\r\n PhoneNumber: client.PhoneNumber,\r\n ClientUserId: client.ClientUserId,\r\n } as ClientDTO;\r\n this.existingborrower = null;\r\n this.newSearch = true;\r\n this.sharedSearch = true;\r\n }\r\n\r\n /** closes share results modal*/\r\n cancelNewSearch() {\r\n this.newSearch = false;\r\n this.shareDealDto.ClientDto = null;\r\n this.existingborrower = null;\r\n this.showClientDetails = false;\r\n this.selecteduserName = null;\r\n this.isSaveAsClicked = false;\r\n this.sharedSearch = false;\r\n if (this.tempSearchName) {\r\n this.loanCriteria.Name = this.tempSearchName;\r\n this.tempSearchName = \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Sends email to client attached to the search\r\n */\r\n sendShareSearchEmailToClient() {\r\n this.dataLoading = true;\r\n this.shareDealDto.EmailLinkToClient = true;\r\n this.dealService\r\n .shareDealWithClient(this.shareDealDto)\r\n .then(() => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.shareDealDto.ClientDto.FirstName +\r\n \" \" +\r\n this.shareDealDto.ClientDto.LastName;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.dataLoading = false;\r\n this.sharedSearch = false;\r\n });\r\n }\r\n\r\n /**\r\n * Opens a 'share a search with client' modal if search do not have client attached to.\r\n * @param none\r\n */\r\n /* saveAsWthOutIntroducee() {\r\n this.isSaveAsWthOutIntroducee = true;\r\n this.tempSearchName = this.loanCriteria?.Name;\r\n //this.loanCriteria.Name = '';\r\n this.showShareSearchModal()\r\n }*/\r\n\r\n /**\r\n * Opens a 'share a search with client' modal if search do not have client attached to.\r\n * @param none\r\n */\r\n saveResultsForShareSearchToClient() {\r\n if (!this.isSaveAsClicked) {\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.saveSaveAsSearch();\r\n }\r\n this.newSearch = false;\r\n }\r\n\r\n showShareSearchModal() {\r\n this.newSearch = true;\r\n\r\n this.shareDealDto = {\r\n DealId: this.searchid,\r\n DealName: this.isSaveAsClicked ? \"\" : this.loanCriteria?.Name,\r\n ShowLenderNamesAndLogos: this.loanCriteria?.ShowLenderInfoBrokerOverride,\r\n EmailLinkToClient: false,\r\n AccessLevel: CaseAccessLevelEnum.FullAccess,\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n\r\n this.shareDealDto.ClientDto = {\r\n FirstName: \"\",\r\n LastName: \"\",\r\n Email: \"\",\r\n PhoneNumber: \"\",\r\n } as ClientDTO;\r\n }\r\n\r\n /**\r\n * updates a seach with introducee details and saves it and sends emil to client if 'notifyBorrower' is set to true.\r\n * @param notifyBorrower\r\n */\r\n\r\n sendResultsToClient(notifyBorrower) {\r\n if (this.isSaveAsClicked) {\r\n this.saveSaveAsSearch(true);\r\n } else {\r\n this.loadingData = true;\r\n this.dealService\r\n .shareDealWithClient(this.shareDealDto)\r\n .then(() => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.shareDealDto.ClientDto.FirstName +\r\n \" \" +\r\n this.shareDealDto.ClientDto.LastName;\r\n //this.loanCriteria.DealClients[0] = this.shareDealDto.ClientDto;\r\n this.loanCriteria.Name = this.shareDealDto.DealName;\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.reloadSearch = true;\r\n this.loadingData = false;\r\n this.isAssigned = true;\r\n })\r\n .finally(() => {\r\n delete this.shareDealDto;\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n cancelSavePopup() {\r\n this.showSaveResults = null;\r\n this.loanCriteria.Name = this.searchNameCache;\r\n }\r\n\r\n showBookMeetingButton() {\r\n return (\r\n !this.isLoggedInUser &&\r\n this.isClient &&\r\n this.brokerDetail == \"\" &&\r\n this.brokerageOrg != null\r\n );\r\n }\r\n\r\n bookMeeting() {\r\n this.$auth\r\n .getHubspotDeveloperBookMeetingWithSearch()\r\n .then((hubSpotUrl: string) => {\r\n window.open(hubSpotUrl);\r\n });\r\n }\r\n\r\n sendMessageToBroker(message) {\r\n this.loadingData = true;\r\n this.borrowerMessage = null;\r\n this.organisationService\r\n .sendBorrowerMessageToSearchBroker(\r\n this.loanCriteria.Id,\r\n message,\r\n this.loanCriteria.DealClients[0].Client.FirstName,\r\n this.loanCriteria.DealClients[0].Client.LastName,\r\n this.loanCriteria.DealClients[0].Client.Email,\r\n this.loanCriteria.ProductType,\r\n \"BRIDGINGRESULTSSCREEN\",\r\n )\r\n .then((results) => {\r\n if (results) {\r\n this.displayMsg = `Message has been sent successfully.`;\r\n this.showMessageToborrower = true;\r\n } else {\r\n this.displayMsg = `There is problem sending a message, Please try later.`;\r\n this.showMessageToborrower = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n closeContactBrokerModal() {\r\n this.showContactBrokerModal = false;\r\n this.showMessageToborrower = false;\r\n this.displayMsg = null;\r\n }\r\n\r\n getTotalShortlistedLenders() {\r\n var activeDealLenders = this.comparisonList.filter(\r\n (al) =>\r\n al.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n al.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n var hiddenProduct = this.HiddenDealLenderList.filter(hl => hl.Status != CaseLenderStateEnum.Rejected && hl.Status != CaseLenderStateEnum.Withdrawn);\r\n var hiddenProductLength = this.isShortlistingMore ? hiddenProduct.length : 0;\r\n\r\n return activeDealLenders.length + hiddenProductLength;\r\n }\r\n\r\n isLendersFiltered(): boolean {\r\n //If the search is empty return true\r\n if (!this.summarySearchResults && this.caseLenders) return true;\r\n\r\n if (!this.caseLenders) return false;\r\n\r\n //For all products that have been submitted for DIP and active, check if in the search\r\n return !this.caseLenders.every((lender) => {\r\n if (\r\n lender.CaseLenderState !== CaseLenderStateEnum.Withdrawn &&\r\n lender.CaseLenderState !== CaseLenderStateEnum.Rejected\r\n ) {\r\n const match = this.summarySearchResults.some(\r\n (summarySearchResult) =>\r\n lender.ProductID === summarySearchResult.ProductID,\r\n );\r\n if (!match) {\r\n if (this.filterLenderNames.indexOf(lender.LenderName) === -1) {\r\n this.filterLenderNames.push(lender.LenderName);\r\n }\r\n }\r\n return match;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n getLenderNames(): string {\r\n if (this.filterLenderNames.length === 1) {\r\n return \"lender \" + this.filterLenderNames[0];\r\n } else {\r\n return \"lenders \" + this.filterLenderNames.join(\", \");\r\n }\r\n }\r\n\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n this.loadingData = true;\r\n this.shareDealDto.IsApplicant = true;\r\n this.shareDealDto.IsPrimary = true;\r\n //Look up client's account details\r\n this.$user.searchByEmail(userName).then((users) => {\r\n this.shareDealDto.ClientDto.FirstName = users[0].FirstName;\r\n this.shareDealDto.ClientDto.Email = users[0].Email;\r\n this.shareDealDto.ClientDto.LastName = users[0].LastName;\r\n this.shareDealDto.ClientDto.PhoneNumber = users[0].PhoneNumber;\r\n this.shareDealDto.ClientDto.ClientUserId = users[0].Id;\r\n this.showClientDetails = true;\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n returnToCase() {\r\n if (this.isShortlistingMore) {\r\n // copy newly selected products/lenders to caselender\r\n this.dealLenderService\r\n .shortlistMoreLenders(\r\n this.loanCriteria.Id,\r\n this.getDealLenders(this.comparisonList),\r\n this.hasSearchChanged,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n //sending 'Promote' as true if search has changed & 'NewShortlist' as true if isShortlistingMore\r\n this.$location.path(\r\n \"/bridgingcasedashboard/\" +\r\n this.loanCriteria.Id +\r\n \"/\" +\r\n null +\r\n \"/\" +\r\n true +\r\n \"/\" +\r\n this.hasSearchChanged,\r\n );\r\n }\r\n });\r\n } else {\r\n this.dealLenderService\r\n .updateShortlistedLenders(this.getDealLenders(this.comparisonList))\r\n .then((response) => {\r\n this.$location.path(\"/bridgingcasedashboard/\" + this.loanCriteria.Id);\r\n });\r\n }\r\n }\r\n\r\n updateSearchViaSlider(isAdminDebugValueChanged: boolean = false): void {\r\n if (this.searchPanelForm.$valid && !this.showPostcodeErrorMessage) {\r\n if (\r\n this.loanCriteria.ProductType !=\r\n ProductTypeEnum.BridgingDeveloperExit &&\r\n !(\r\n this.loanCriteria.OwnOrPurchase == OwnOrPurchaseEnum.Own &&\r\n this.loanCriteria.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance\r\n ) &&\r\n !(\r\n this.loanCriteria.OwnOrPurchase == 1 &&\r\n this.loanCriteria.ProductType == ProductTypeEnum.BridgingRefurb\r\n )\r\n ) {\r\n if (this.loanCriteria.PurchasePrice <= 0) return;\r\n }\r\n\r\n if (\r\n this.loanCriteria.ProductType ==\r\n ProductTypeEnum.BridgingDeveloperExit ||\r\n (this.loanCriteria.OwnOrPurchase == OwnOrPurchaseEnum.Own &&\r\n this.loanCriteria.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance) ||\r\n (this.loanCriteria.OwnOrPurchase == 1 &&\r\n this.loanCriteria.ProductType == ProductTypeEnum.BridgingRefurb)\r\n ) {\r\n if (this.loanCriteria.Currentvalue <= 0) return;\r\n }\r\n\r\n if (this.loanCriteria.ProductType == ProductTypeEnum.BridgingRefurb) {\r\n if (this.loanCriteria.GDV <= 0) return;\r\n }\r\n this.loadingData = true;\r\n\r\n this.hasSearchChanged = true;\r\n\r\n this.clearSelected();\r\n\r\n this.updateCriteriaAndGetResults(\r\n isAdminDebugValueChanged && this.isAdmin ? false : true,\r\n );\r\n }\r\n }\r\n\r\n //Clears the client data on share search modal\r\n clearInputFields() {\r\n this.shareDealDto.ClientDto.FirstName = null;\r\n this.shareDealDto.ClientDto.LastName = null;\r\n this.shareDealDto.ClientDto.Email = null;\r\n this.shareDealDto.ClientDto.PhoneNumber = null;\r\n this.shareDealDto.IsApplicant = true;\r\n this.shareDealDto.IsPrimary = true;\r\n this.showClientDetails = false;\r\n this.selecteduserName = null;\r\n }\r\n\r\n /** Redirects to the user dashboard */\r\n goToUserDashboard() {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n getTubeMapValue() {\r\n return this.$CaseService.getTubeMap();\r\n }\r\n\r\n updateLoanRequiredValue() {\r\n this.loanCriteria.MaxLoanRequired = this.isMaximumLoanRequired;\r\n\r\n if (this.isMaximumLoanRequired) {\r\n if (this.loanCriteria.NetLoanRequired) {\r\n this.tempLoanRequired = this.loanCriteria.NetLoanRequired;\r\n }\r\n this.loanCriteria.NetLoanRequired = 0;\r\n this.updateSearchViaSlider();\r\n } else {\r\n this.loanCriteria.NetLoanRequired = this.tempLoanRequired;\r\n this.updateSearchViaSlider();\r\n }\r\n }\r\n\r\n calculateMonthsSinceOrigPurchase() {\r\n let date1 = new Date(this.loanCriteria.OriginalPurchaseDate);\r\n let date2 = new Date();\r\n let months;\r\n months = (date2.getFullYear() - date1.getFullYear()) * 12;\r\n months -= date1.getMonth();\r\n months += date2.getMonth();\r\n return months;\r\n }\r\n\r\n datasetupOnEndPropertyTypeChange() {\r\n this.updateSearchViaSlider();\r\n }\r\n\r\n logPdfDownload(eventName) {\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n );\r\n }\r\n\r\n /* saveEnterpriseClientAndRenameDeal() {\r\n this.loadingData = true;\r\n\r\n this.userService.checkEmailExists(this.user.Email).then((response) => {\r\n if (!response) {\r\n let userFullName = this.user.FullName;\r\n let spaceIndex = userFullName.indexOf(' ');\r\n\r\n let firstName = '';\r\n let lastName = '';\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(' '));\r\n lastName = userFullName.substring(userFullName.indexOf(' ') + 1);\r\n }\r\n\r\n // Set up Client dto\r\n var clientDto = {\r\n FirstName: firstName,\r\n LastName: lastName,\r\n PhoneNumber: this.user.PhoneNumber,\r\n Email: this.user.Email,\r\n BrokerOrganisationId: this.brokerageOrg.Id,\r\n PostalAddress: {\r\n AddressLine1: '',\r\n AddressLine2: '',\r\n AddressLine3: '',\r\n AddressLine4: '',\r\n PostCode: ''\r\n } as PostalAddress\r\n } as ClientDTO;\r\n\r\n\r\n\r\n var currentDate = new Date();\r\n this.loanCriteria.Name = this.projectName ? this.projectName : firstName + ' ' + lastName + ' Loan Search ' + currentDate.getDate() + \"/\" + (currentDate.getMonth() + 1) + \"/\" + currentDate.getFullYear()\r\n\r\n var request: SaveEnterpriseClientAndRenameSearchRequest = {\r\n // BridgingDealDto: this.loanCriteria,\r\n ClientDto: clientDto,\r\n //ProductFamily: ProductFamilyEnum.Bridging,\r\n CommercialDealDto: null,\r\n DevFinanceDealDto: null\r\n }\r\n\r\n this.dealService.saveEnterpriseClientAndRenameDeal(request).then((response) => {\r\n if (response) {\r\n document.getElementById('body').style.overflow = \"auto\";\r\n this.showEnterpriseRegistrationModal = false;\r\n this.loanCriteria = response.BridgingDealDto;\r\n if (window.self == window.top) {\r\n sessionStorage.setItem('clientId', this.loanCriteria.DealClients[0].Client.Id.toString());\r\n } else {\r\n this.organisationService.sendDataToParent('clientId', this.loanCriteria.DealClients[0].Client.Id.toString());\r\n }\r\n\r\n this.userService.sendEventToHubspot(this.user, \"ENTERPRISE-CONTACT-REGISTERED\", false, this.orgCode, this.userRole, this.loanCriteria && this.loanCriteria.OrganisationLinkId != null ? this.loanCriteria.OrganisationLinkId : 0, this.loanCriteria.ProductType, this.loanCriteria ? this.loanCriteria.Id : 0);\r\n\r\n // For Google analytics tracking\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'results_gating_form',\r\n 'loan_product_family': this.productService.getProductFamilyTextForGa(this.loanCriteria.ProductFamily),\r\n 'loan_product_type': this.productService.getProductTypeTextForGa(this.loanCriteria.ProductType, this.loanCriteria.IsFamilyInResidence)\r\n });\r\n }\r\n \r\n }).finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.emailExistsError = true;\r\n this.loadingData = false;\r\n }\r\n });\r\n\r\n \r\n }*/\r\n\r\n gotoSignInPage() {\r\n this.$location.path(\"/login\");\r\n }\r\n\r\n goToLink(url) {\r\n var baseUrl = window.location.href.split(\"#!\")[0] + \"#!\";\r\n var newUrl = baseUrl + url;\r\n window.open(newUrl, \"_blank\");\r\n }\r\n\r\n toggleShowLenderNamesBrokerOverride() {\r\n // this.loanCriteria.ShowLenderInfoBrokerOverride = !this.loanCriteria.ShowLenderInfoBrokerOverride;\r\n if (this.searchPanelForm.$valid && !this.showPostcodeErrorMessage) {\r\n this.updateCriteriaAndGetResults(false, true);\r\n }\r\n }\r\n\r\n getAppName() {\r\n let lsd = null;\r\n if (window.self == window.top)\r\n lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n this.appName = lsd;\r\n } else {\r\n this.appName = \"Brickflow\";\r\n }\r\n }\r\n\r\n onSelectingExportShortlist(eventName) {\r\n let comparisonList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n this.loanCriteria.ComparisonList = comparisonList;\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n );\r\n }\r\n\r\n showContactBrokerAndExportButton() {\r\n if (\r\n this.brokerageOrg != null &&\r\n this.loanCriteria != null &&\r\n this.loanCriteria.DealClients != null &&\r\n this.loanCriteria.DealClients.length > 0 &&\r\n this.loanCriteria.DealClients[0]?.Client != null &&\r\n this.loanCriteria.DealClients[0].Client.Email.length > 0\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n //This is used in shortlisting pdf\r\n prepareDataForShortlistPdf() {\r\n this.loanCriteria.ComparisonList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n }\r\n\r\n getRegionByPostcode() {\r\n if (\r\n this.loanCriteria.PostcodeSearchString &&\r\n this.loanCriteria.PostcodeSearchString.replace(\" \", \"\").length >= 2\r\n ) {\r\n if (\r\n this.dealService.isValidPostcodeString(\r\n this.loanCriteria.PostcodeSearchString,\r\n )\r\n ) {\r\n this.showPostcodeErrorMessage = false;\r\n this.isPostcodeChange = true;\r\n this.updateSearchViaSlider();\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n }\r\n }\r\n\r\n getOrganisationAndBrokerDetails() {\r\n this.loadingData = true;\r\n if (!this.isLoggedInUser && !this.isAdmin && !this.isBroker) {\r\n this.loadingData = true;\r\n this.organisationService\r\n .getOrganisationAndBrokerByDealId(this.loanCriteria.Id)\r\n .then((response) => {\r\n if (response && response.Organisation != null) {\r\n this.brokerageOrg = response.Organisation;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n sortByField(field) {\r\n this.loanCriteria.SortBy = field;\r\n this.updateCriteriaAndGetResults(false, false);\r\n this.showSortBy = !this.showSortBy;\r\n }\r\n\r\n sortSummaryResults() {\r\n switch (this.loanCriteria.SortBy) {\r\n case SortByEnum.TrueMonthlyCost:\r\n this.summarySearchResults.sort(\r\n (a, b) => a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.NetLoanSize:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n b.NetLoan - a.NetLoan || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.LenderCosts:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.LenderCosts - b.LenderCosts ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.LenderName:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.LenderName.localeCompare(b.LenderName) ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.InterestRate:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.AnnualInterest - b.AnnualInterest ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.ArrangementFee:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.ArrangementFee - b.ArrangementFee ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.DepositEquity:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.EquityOrDeposit - b.EquityOrDeposit ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n default:\r\n this.summarySearchResults.sort((a, b) => {\r\n if (a.NetLoan < b.NetLoan) return 1;\r\n if (a.NetLoan > b.NetLoan) return -1;\r\n\r\n if (a.TrueMonthlyCost > b.TrueMonthlyCost) return 1;\r\n if (a.TrueMonthlyCost < b.TrueMonthlyCost) return -1;\r\n\r\n return 0;\r\n });\r\n this.loanCriteria.SortBy = SortByEnum.NetLoanSize;\r\n }\r\n\r\n for (var i = 0; i < this.summarySearchResults.length; i++) {\r\n this.summarySearchResults[i].SelectedRowNumber = i + 1;\r\n }\r\n }\r\n\r\n isFieldZero(fieldName) {\r\n if (this.loanCriteria) {\r\n const fieldValue = this.loanCriteria[fieldName];\r\n if (fieldValue == null || fieldValue === \"0\" || fieldValue === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n submitLenderReferral() {\r\n this.loadingData = true;\r\n this.lenderReferralData.DealId = this.loanCriteria.Id;\r\n this.dealClientService\r\n .submitLenderReferral(this.lenderReferralData)\r\n .then((response) => {\r\n if (response) {\r\n this.displayMsg = \"Your referral has been submitted.\";\r\n this.showMsg = true;\r\n this.isLenderReferredSearch = true;\r\n } else {\r\n this.displayMsg = \"Error while making a referral, please try later.\";\r\n this.showMsg = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n this.lenderReferralData = null;\r\n sessionStorage.removeItem(\"lenderReferralData\");\r\n });\r\n }\r\n\r\n showBasedOnMainResidence() {\r\n return this.dealService.showBasedOnMainResidence(this.loanCriteria);\r\n }\r\n\r\n reloadPage() {\r\n if (this.reloadSearch) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n openRegisterModal() {\r\n\r\n this.showRegisterModal = true;\r\n\r\n }\r\n\r\n onEditSearchNameClick() {\r\n this.toggleEditSearchName = !this.toggleEditSearchName;\r\n }\r\n\r\n\r\n onSortbyClick() {\r\n //event.stopPropagation();\r\n this.closeFilterOptions();\r\n this.closeExportDropdown();\r\n this.showSortBy = !this.showSortBy;\r\n }\r\n\r\n onFilterClick() {\r\n // event.stopPropagation();\r\n this.closeSortByDropdown();\r\n this.closeExportDropdown();\r\n this.showFilters = !this.showFilters;\r\n }\r\n\r\n onExportClick() {\r\n this.prepareDataForShortlistPdf();\r\n this.closeSortByDropdown();\r\n this.closeFilterOptions();\r\n this.showExportOptions = !this.showExportOptions;\r\n }\r\n\r\n getSelectedSortByOptionText() {\r\n if (this.loanCriteria) {\r\n switch (this.loanCriteria.SortBy) {\r\n case SortByEnum.TrueMonthlyCost:\r\n return \"True Monthly Cost\";\r\n case SortByEnum.NetLoanSize:\r\n return \"Net Loan Size\";\r\n case SortByEnum.LenderCosts:\r\n return \"Lender Costs (Est.)\";\r\n case SortByEnum.LenderName:\r\n return \"Lender Name (A-Z)\";\r\n case SortByEnum.InterestRate:\r\n return \"Interest Rate\";\r\n case SortByEnum.ArrangementFee:\r\n return \"Arrangement Fee\";\r\n case SortByEnum.DepositEquity:\r\n return \"Est. Deposit/Equity\";\r\n case SortByEnum.ROCE:\r\n return \"ROCE\";\r\n default:\r\n return \"\";\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n createAccount() {\r\n this.dataLoading = true;\r\n this.enterpriseClient.OrgUniqueRef = this.brokerageOrg.UniqueRef;\r\n this.$user\r\n .registerEnterpriseUserAndSaveShortlisteResults(this.enterpriseClient, this.getDealLenders(this.comparisonList))\r\n .then((user) => {\r\n // clean up session storage\r\n if (window.self == window.top) {\r\n sessionStorage.removeItem(\"clientId\");\r\n sessionStorage.removeItem(\"userRole\");\r\n } else {\r\n this.organisationService.sendDataToParent(\"clientId\", \"\");\r\n this.organisationService.sendDataToParent(\"userRole\", \"\");\r\n }\r\n this.login(\"ENTERPRISE-LEAD-REGISTERED-FROM-RESULTS-PAGE\", EventLogEnum.EnterpriseUserRegistration);\r\n })\r\n .catch((response) => {\r\n this.error = \"Error while registering an account, please try again later.\";\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n login(eventIdentifier: string = \"ENTERPRISE-CONTACT-LOGGEDIN-FROM-RESULTS-PAGE\", eventType: EventLogEnum = EventLogEnum.EnterpriseUserLogin) {\r\n this.dataLoading = true;\r\n if (!this.$cookies.get(\"access_token\")) {\r\n this.$auth\r\n .login(\r\n this.enterpriseClient.UserName,\r\n this.enterpriseClient.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n this.error =\"\";\r\n let expiry: Date = response;\r\n\r\n this.$user.getcurentuserrecord().then((response) => {\r\n this.eventLogService.logEvent(\r\n eventIdentifier,\r\n eventType,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n \"\",\r\n this.loanCriteria.DealClients[0]?.Client.Id?.toString()\r\n );\r\n\r\n (this.$rootScope as any).currentUser = response;\r\n this.$cookies.put(\"user_firstname\", response.FirstName, {\r\n expires: expiry,\r\n });\r\n (this.$rootScope as any).selectedUser = response;\r\n this.$rootScope.$broadcast(\"login\"); //tell everyone you have logged in\r\n if (eventType == EventLogEnum.EnterpriseUserRegistration) sessionStorage.setItem('showConfirmClientPhoneNo', 'true');\r\n this.$location.path(`/bridgingresults/${this.loanCriteria.Id}`);\r\n });\r\n }).catch((response) => {\r\n this.isLoginError = true;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n onClickLogin() {\r\n this.saveShortlistedLenders();\r\n this.login();\r\n }\r\n\r\n saveShortlistedLenders() {\r\n var shortlistDealLenders = this.getDealLenders(this.comparisonList);\r\n this.dealLenderService\r\n .updateShortlistedLenders(shortlistDealLenders)\r\n .then((response) => { });\r\n }\r\n\r\n\r\n returnShortlistedDealLenderStatusText(item: BridgingLenderResultSummaryDTO) {\r\n if (this.checkDeletedLender(item.LenderID.toString(), item.ProductID.toString())) {\r\n return \"Previously Deleted\";\r\n }\r\n\r\n if (item.IsDealLender && (this.loanCriteria.Status != CaseStatusEnum.Search && this.loanCriteria.Status != CaseStatusEnum.NewCase && this.loanCriteria.Status != CaseStatusEnum.ReadyToSubmit)) {\r\n\r\n switch (item.DealLenderStatus) {\r\n case CaseLenderStateEnum.Shortlisted:\r\n return \"Shortlisted\";\r\n case CaseLenderStateEnum.Received:\r\n return \"Awaiting DIP\";\r\n case CaseLenderStateEnum.Offered:\r\n return \"DIP Received\";\r\n case CaseLenderStateEnum.Rejected:\r\n return \"Lender Rejected\";\r\n case CaseLenderStateEnum.Withdrawn:\r\n return \"Lender Withdrawn\";\r\n default:\r\n break\r\n }\r\n }\r\n }\r\n\r\n isProceedButtonDisabled(): boolean {\r\n if (this.validateAllLendersUnique(this.comparisonList) == false) {\r\n return true;\r\n }\r\n\r\n const validLenders = this.comparisonList?.filter(\r\n (item) =>\r\n item.DealLenderStatus !== CaseLenderStateEnum.Rejected &&\r\n item.DealLenderStatus !== CaseLenderStateEnum.Withdrawn\r\n ) || [];\r\n \r\n if (\r\n !validLenders ||\r\n validLenders.length < 1 ||\r\n validLenders.length > this.noOfShortlistAllowed ||\r\n this.isProceedClicked == true\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n onSaveClick() {\r\n if (this.isAssigned) {\r\n this.isSaveorSaveAsClicked = true;\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.showShareSearchModal();\r\n }\r\n }\r\n\r\n getProductLastVerifiedDates(productIds: number[]) {\r\n this.productService.getLastVerifiedDates(productIds).then((response) => {\r\n productIds.forEach(id => {\r\n if (response[id] != null) {\r\n this.productLastVerifiedDates[id] = this.formatDate(response[id]);\r\n }\r\n })\r\n });\r\n }\r\n\r\n formatDate = (dateString) => {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString('en-GB');\r\n };\r\n\r\n\r\n validateAllLendersUnique(\r\n comparisonList: BridgingLenderResultSummaryDTO[],\r\n ): boolean {\r\n\r\n if (this.isShortlistingMore) {\r\n const matchingItems = this.HiddenDealLenderList.filter(item1 =>\r\n this.comparisonList.some(item2 => item1.LenderId === item2.LenderID)\r\n );\r\n\r\n if (matchingItems.length > 0) return false;\r\n\r\n const numberOfUniqueLenderIds: number = new Set(\r\n this.comparisonList.map((item) => item.LenderID),\r\n ).size;\r\n\r\n return numberOfUniqueLenderIds == this.comparisonList.length;\r\n }\r\n\r\n return true;\r\n\r\n }\r\n\r\n /**Closes all context menus */\r\n closeContextMenus() {\r\n var myevent = event;\r\n this.closeFilterOptions();\r\n this.closeSortByDropdown();\r\n }\r\n\r\n closeFilterOptions() {\r\n this.showFilters = false;\r\n }\r\n\r\n closeSortByDropdown() {\r\n this.showSortBy = false;\r\n }\r\n\r\n closeExportDropdown() {\r\n this.showExportOptions = false;\r\n }\r\n\r\n goToNewSearch() {\r\n this.sharedDataService.cleanLenderReferralSessionStorage();\r\n // If the current user is a broker and doesn't have a subscription then don't allow them to create a new search\r\n if (this.isBroker && !this.selectedUser.HasActiveSubscription) {\r\n return;\r\n }\r\n\r\n if (!this.loadingData) {\r\n (this.$rootScope as any).loanCriteria = null;\r\n\r\n this.$location.path(\"/allloans\");\r\n }\r\n }\r\n\r\n updateClientContactInfoAndNotifyBroker(){\r\n if(this.loanCriteria !=null && this.loanCriteria.DealClients != null){\r\n this.dealClientService.UpdateClientContactInfoAndNotifyBroker(this.clientUpdatedContact, this.loanCriteria?.Id,this.loanCriteria.DealClients[0].Client.Id).then((response) => {\r\n this.showClientPhoneNumberConfirmationModal = false;\r\n this.sliderShown = true;\r\n }).catch((response) => {\r\n this.error = \"There was an error updating the contact. Please try again later.\"\r\n })\r\n .finally(() => {\r\n sessionStorage.removeItem('showConfirmClientPhoneNo');\r\n });\r\n } else {\r\n sessionStorage.removeItem('showConfirmClientPhoneNo');\r\n this.showClientPhoneNumberConfirmationModal = false;\r\n this.sliderShown = true;\r\n }\r\n }\r\n\r\n getOrgName(){\r\n if(this.orgName){\r\n return this.orgName.replace(/_/g, \" \");\r\n }\r\n return \"\";\r\n }\r\n\r\n /**Sends an email to the email address for the user to reset their password */\r\n sendResetPasswordEmail() {\r\n this.loadingData = true;\r\n this.$auth\r\n .resetPassword(this.enterpriseClient.Email)\r\n .then((response) => {\r\n this.isLoginError = false;\r\n this.isResetPasswordSubmitted = true;\r\n this.registrationLoginError = null;\r\n })\r\n .catch((error) => {\r\n this.registrationLoginError = \"There was an error sending the password reset email. Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n getRequiredRolesOptions(){\r\n return this.dealService.getRequiredRolesOptions();\r\n }\r\n\r\n validateAccessAndRedirect(){\r\n //Do not allow the connect user to access the deal\r\n if(this.loanCriteria.IsReferredToConnect && this.selectedUser.IsConnectUser){\r\n this.$location.path(`/bridgingcasedashboard/${this.loanCriteria.Id}`)\r\n }else{\r\n if(this.loanCriteria.Status != CaseStatusEnum.NewCase && this.loanCriteria.Status != CaseStatusEnum.Search && !this.isShortlistingMore){\r\n this.dealLenderService\r\n .fetchDealLendersByDealId( this.loanCriteria.Id)\r\n .then((results) => {\r\n if(results && results.filter(dl => !dl.IsDeleted && dl.Status != CaseLenderStateEnum.Withdrawn && dl.Status != CaseLenderStateEnum.Rejected).length >= 5 && results.filter(dl => !dl.IsDeleted && dl.IsBidAccepted)){\r\n if (this.isAdmin || this.isBroker) {\r\n this.$location.path(\"/dealforum/\" + this.loanCriteria.Id)\r\n }\r\n else {\r\n this.$location.path(`/userdashboard`)\r\n }\r\n }else{\r\n this.$location.path(`/bridgingshortlistmore/${this.loanCriteria.Id}`)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","export const enum BuildProcurementTypeEnum {\r\n DesignAndBuildContract = 1,\r\n TraditionalContract = 2,\r\n SelfManaged = 3,\r\n}\r\n","export const enum ExternalLinksEnum {\r\n Misc = 0,\r\n Youtube = 1,\r\n}\r\n","export const enum PlanningResponsibilityEnum {\r\n Borrower = 1,\r\n PreviousOwner = 2,\r\n SomebodyElse = 3,\r\n NA = 4,\r\n}\r\n","export const enum PurchaseProcessTypeEnum {\r\n RegularPurchase = 1,\r\n Option = 2,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseLenderDTO } from \"@js/DTO/CaseLenderDTO.cs.d\";\r\nimport { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { CaseNoteDTO } from \"@js/DTO/CaseNoteDTO.cs.d\";\r\nimport { ComparablePropertyDTO } from \"@js/DTO/ComparablePropertyDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { LenderResultMinimalDTO } from \"@js/DTO/DevelopmentFinance/LenderResultMinimalDTO.cs.d\";\r\nimport { ExternalLinksDTO } from \"@js/DTO/ExternalLinksDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { LenderInfo } from \"@js/DTO/Messages/Deal/LendersInfoForSubmitToLenderMessage.cs.d\";\r\nimport { ModuleAppFeatureDTO } from \"@js/DTO/ModuleAppFeatureDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { ProductDTO } from \"@js/DTO/ProductDTO.cs.d\";\r\nimport { TeamMemberDTO } from \"@js/DTO/TeamMemberDTO.cs.d\";\r\nimport { BuildProcurementTypeEnum } from \"@js/models/enum/BuildProcurementTypeEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\nimport { ExitStrategyEnum } from \"@js/models/enum/ExitStrategyEnum.cs.d\";\r\nimport { ExternalLinksEnum } from \"@js/models/enum/ExternalLinksEnum.cs.d\";\r\nimport { LenderProductTypeEnum } from \"@js/models/enum/LenderProductTypeEnum.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { PlanningPermissionTypeEnum } from \"@js/models/enum/PlanningPermissionTypeEnum.cs.d\";\r\nimport { PlanningResponsibilityEnum } from \"@js/models/enum/PlanningResponsibilityEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PurchaseProcessTypeEnum } from \"@js/models/enum/PurchaseProcessTypeEnum.cs.d\";\r\nimport { AccountService } from \"@js/services/AccountService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseLenderService } from \"@js/services/CaseLenderService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseNoteService } from \"@js/services/CaseNoteService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { ComparablePropertyService } from \"@js/services/ComparablePropertyService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { ExternalLinksService } from \"@js/services/ExternalLinksService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { InviteService } from \"@js/services/InviteService\";\r\nimport { LenderResultService } from \"@js/services/LenderResultService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { TeamMemberService } from \"@js/services/TeamMemberService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport angular from \"angular\";\r\n\r\nexport class CaseController {\r\n dataLoading: boolean = false;\r\n\r\n assistanceSlider: boolean = false;\r\n totalLender: number = 0;\r\n\r\n selectedSection: string;\r\n\r\n thisModuleSection: ModuleEnum;\r\n fileUpload: FileAttachmentDTO[];\r\n fileUploadPlaning: FileAttachmentDTO[];\r\n fileUploadTeam: FileAttachmentDTO[];\r\n fileUploadProperties: FileAttachmentDTO[];\r\n selectedProduct: ProductDTO;\r\n selectedResult: LenderResultMinimalDTO;\r\n total: number = 0;\r\n openModal: boolean = false;\r\n objects: CaseDTO[]; //TODO JLH rename this to something meaningful but look into what it is used for\r\n case: CaseDTO;\r\n toggleEditSearchName: boolean = false;\r\n orgName: string;\r\n orgId: number;\r\n org: OrganisationDTO;\r\n fileNamePrefix: string = \"Brickflow\";\r\n\r\n caseLenders: CaseLenderDTO[];\r\n // indicates whether a bid has been accepted on the case\r\n hasBidAccepted: boolean = false;\r\n selectedCaseLender: CaseLenderDTO;\r\n\r\n ShowProceed: boolean = false;\r\n showEdit: boolean = false;\r\n confirmationDelete: boolean = false;\r\n\r\n uploadingFiles: FileUploadProgressDTO[];\r\n renamingFile: FileAttachmentDTO;\r\n currentUser: ApplicationUserDTO;\r\n\r\n //to populate the full login details\r\n showSetPasswordModal: boolean = false;\r\n verifyNewPassword: string;\r\n passwordSetSuccess: boolean = false;\r\n registrationForm: FormData;\r\n modal: ng.IFormController;\r\n\r\n newNote: CaseNoteDTO;\r\n newExternalLink: ExternalLinksDTO;\r\n newTeamMember: TeamMemberDTO;\r\n editTeamMember: TeamMemberDTO;\r\n tempTeamMember: TeamMemberDTO;\r\n confirmDeleteTeamMember: TeamMemberDTO;\r\n newComparable: ComparablePropertyDTO;\r\n editComparable: ComparablePropertyDTO;\r\n tempComparable: ComparablePropertyDTO;\r\n confirmDeleteComparable: ComparablePropertyDTO;\r\n appName: string;\r\n\r\n clickRequestReview: boolean = false;\r\n\r\n //check Payment Status and show modal\r\n paymentStatus: string;\r\n\r\n IsOnlyBroker: boolean = false;\r\n isAdminBroker: boolean = false;\r\n isBroker: boolean = false;\r\n isAdmin: boolean = false;\r\n isLender: boolean = false;\r\n isClient: boolean = false;\r\n showVideo: boolean = false;\r\n showShare: boolean = false;\r\n shareContext: number = null;\r\n shareSuplId: number = null;\r\n shareNote: string;\r\n userFirstName: string;\r\n showAdd: boolean = false;\r\n showDelete: boolean = false;\r\n showReject: boolean = false;\r\n showWithdraw: boolean = false;\r\n showStatusMessage: boolean = false;\r\n isCaseMember: boolean = false;\r\n redactSensitiveInfo: boolean = false;\r\n invalidEmail: boolean = false;\r\n\r\n caseForm: ng.IFormController;\r\n externalLinkForm: ng.IFormController;\r\n teamMemberForm: ng.IFormController;\r\n editTeamMemberForm: ng.IFormController;\r\n comparableForm: ng.IFormController;\r\n editComparableForm: ng.IFormController;\r\n planningForm: ng.IFormController;\r\n shareForm: ng.IFormController;\r\n lenderDetailsForm: ng.IFormController;\r\n\r\n showExport: boolean = false;\r\n //case overview\r\n caseOverviewTempBackup: string;\r\n //planning\r\n planningURLTempBackup: string;\r\n planningLocalAuthorityTempBackup: string;\r\n planningReferenceTempBackup: string;\r\n planningDescriptionTempBackup: string;\r\n lenderDetails: CaseLenderDTO;\r\n\r\n caseMembersWithAccess: CaseMemberDTO[];\r\n selectedClientToShareWith: CaseMemberDTO;\r\n\r\n isInActiveLender: boolean = false;\r\n brokerCommission: number;\r\n caseBrokerUser: ApplicationUserDTO;\r\n\r\n //carousel\r\n carouselData: string[] = [\r\n \"Brickflow is the quickest and easiest way to apply for development finance.\",\r\n \"To get a Decision in Principle (DIP) from a Lender please complete the Appraisal modules below.\",\r\n \"The Decision in Principle may be different to the estimates you saw on the results screen.\\nThe Decision in Principle is an accurate quote directly from the lender. \",\r\n \"The lender is basing their Decision in Principle only on the information provided below in the Appraisal,\\nso be sure to really showcase you and your project.\",\r\n \"The Decision in Principle should be provided to you within 48 - 72 hours of you completing the Appraisal.\\nNo credit scores will be carried out to provide a Decision in Principle.\",\r\n \"The loan still needs to be approved by Credit Committee, but providing a Decision in Principle means the lender is confident in getting approval (but it's not guaranteed)\",\r\n \"Select 'Complete' against each Module once you're happy.\\nOnce all modules are complete click 'Submit to Lenders'.\",\r\n \"A Brickflow Team Member will review your Case and then when they're happy,\\nyour Case will be sent to the chosen lender(s) for review.\",\r\n \"Your Developer Profile is like a CV. It will be saved and updated as you complete loans in the platform. Complete it once and never have to do it again.\",\r\n \"When you're ready to start, click module 1 'Case Overview'\",\r\n ];\r\n carouselStep: number = 0;\r\n\r\n caseLandingSeen: boolean = true;\r\n\r\n message: boolean = false;\r\n messageContent: string;\r\n sendingMessage: boolean = false;\r\n\r\n maxNotes: number = 3;\r\n showAllNotes: boolean = false;\r\n\r\n showRequestEmailForm: boolean = false;\r\n requestMessageReason: string = \"\";\r\n enquiryTelephone: string = \"\";\r\n\r\n // Controls showing Ts & Cs when a borrower/broker submits to lenders\r\n showTsAndCs: boolean = false;\r\n showTsAndCsForm: boolean = false;\r\n showApplyTsAndCs: boolean = false;\r\n acceptTerms: boolean = false;\r\n\r\n youtubeLinkToAdd: string;\r\n currentYoutubeVideo: string = \"\";\r\n\r\n //For build costs calculation\r\n totalBuild: number;\r\n additionalBuild: number;\r\n contingencyTotal: number;\r\n totalPurchaseCostsNotOwning: number;\r\n totalPurchaseCostsOwning: number;\r\n\r\n shareholders: CaseMemberDTO;\r\n\r\n //Accordion\r\n\r\n accordionShow: boolean[] = [];\r\n\r\n //Admin viewing on behalf\r\n\r\n proxyViewer: boolean = false;\r\n\r\n selectedUser: ApplicationUserDTO;\r\n clientUsernameBeingAccessed: string;\r\n tinymceOptions: any;\r\n //Guidance\r\n guidanceCheckbox: boolean = true;\r\n tourState: any = {\r\n tourStep: 1,\r\n tourTotalSteps: 0,\r\n };\r\n tourEnabled: boolean = false;\r\n brokerOrganisations: OrganisationDTO[];\r\n brokerUsers: ApplicationUserDTO[];\r\n\r\n seeFiles: boolean = false;\r\n\r\n isLoggedInUser: boolean = false;\r\n\r\n primaryShareholder: CaseMemberDTO;\r\n brokerEmail: string;\r\n\r\n isSelected: boolean = false;\r\n selectedPaymentProduct: AppPackagePricingDTO = null;\r\n showPaymentModal: boolean = false;\r\n moduleAppFeatures: ModuleAppFeatureDTO[];\r\n moduleFeatureCount: number = 0;\r\n selecteFeatureCount: number = 0;\r\n appPackagePrices: AppPackagePricingDTO[];\r\n selectedProductList: AppPackagePricingDTO[] = [];\r\n billingFrequency: Array<{ id: number; value: string }> = [\r\n { id: 1, value: \"Monthly\" },\r\n { id: 2, value: \"Yearly\" },\r\n ];\r\n selectedBillingFrequency: number;\r\n isSubmittedToLenders: boolean = false;\r\n\r\n selectedLendersText: string = \"\";\r\n shortlistedLendersText: string = \"\";\r\n lendersDetailsForSubmittoLenders: LenderInfo[];\r\n shortListedLendersId: Number[];\r\n\r\n referrerOptions = [];\r\n locationOptions = [];\r\n\r\n hasShortlistedCaseLenders: boolean;\r\n\r\n showModuleShareConfirmation: boolean;\r\n\r\n productTypeDisplayText: string;\r\n\r\n brokerPreferredContact: string;\r\n isBrokerPhoneNumberUpdated: boolean = false;\r\n showAutofill: boolean = false;\r\n\r\n totalUnreadCaseLenderMessages: number = 0;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"CaseService\",\r\n \"DevelopmentInputService\",\r\n \"$location\",\r\n \"FileAttachmentService\",\r\n \"CaseNoteService\",\r\n \"RoleService\",\r\n \"AuthService\",\r\n \"$cookies\",\r\n \"AccountService\",\r\n \"ProductService\",\r\n \"LenderResultService\",\r\n \"ExternalLinksService\",\r\n \"$interval\",\r\n \"$q\",\r\n \"$window\",\r\n \"UserService\",\r\n \"TeamMemberService\",\r\n \"ComparablePropertyService\",\r\n \"CaseLenderService\",\r\n \"LenderService\",\r\n \"OrganisationService\",\r\n \"CaseMemberService\",\r\n \"InviteService\",\r\n \"PaymentService\",\r\n \"SelectListService\",\r\n \"EventLogService\",\r\n ];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private caseService: CaseService,\r\n private developmentInputService: DevelopmentInputService,\r\n private $location: ng.ILocationService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private caseNoteService: CaseNoteService,\r\n private roleService: RoleService,\r\n private authService: AuthService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $accountservice: AccountService,\r\n private productService: ProductService,\r\n private $lenderresultservice: LenderResultService,\r\n private $externalLinksService: ExternalLinksService,\r\n private $interval: ng.IIntervalService,\r\n protected $q: ng.IQService,\r\n private $window: ng.IWindowService,\r\n private userService: UserService,\r\n private $teamMemberService: TeamMemberService,\r\n private comparablePropertyService: ComparablePropertyService,\r\n private caseLenderService: CaseLenderService,\r\n private $lenderService: LenderService,\r\n private organisationService: OrganisationService,\r\n private caseMemberService: CaseMemberService,\r\n private inviteService: InviteService,\r\n private $paymentService: PaymentService,\r\n private selectListService: SelectListService,\r\n private eventLogService: EventLogService,\r\n ) {\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n }\r\n\r\n this.productTypeDisplayText = this.productService.getProductTypeDisplayText(\r\n ProductTypeEnum.Development,\r\n );\r\n\r\n sessionStorage.removeItem(\"lenderTask\");\r\n\r\n //TOUR\r\n $rootScope.$on(\"nextTour\", (event: ng.IAngularEvent) => {\r\n this.tourNext();\r\n });\r\n $rootScope.$on(\"backTour\", (event: ng.IAngularEvent) => {\r\n this.tourBack();\r\n });\r\n $rootScope.$on(\"skipTour\", (event: ng.IAngularEvent) => {\r\n this.tourSkip();\r\n });\r\n\r\n this.tinymceOptions = {\r\n content_style:\r\n \"body {color: #304b9a;font:300 13.33px Roboto,sans-serif;}\",\r\n menubar: false,\r\n height: 300,\r\n branding: false,\r\n statusbar: false,\r\n plugins: [\r\n \"advlist autolink lists link image charmap print preview anchor\",\r\n \"searchreplace visualblocks code fullscreen\",\r\n \"insertdatetime media table paste code help wordcount\",\r\n ],\r\n toolbar:\r\n \"undo redo | formatselect | \" +\r\n \"bold italic backcolor forecolor | alignleft aligncenter \" +\r\n \"alignright alignjustify | bullist numlist outdent indent | preview fullscreen |\" +\r\n \"removeformat | help\",\r\n };\r\n\r\n if ((this.$rootScope as any).acceptTerms) {\r\n this.showRequestEmailForm = false;\r\n this.requestMessageReason =\r\n \"Thank you for accepting the Decision in Principle\";\r\n this.message = true;\r\n this.messageContent =\r\n \"Once you have made the application payment you will need to review the information in the Application Details module. Once this has been completed you will be able to submit your application to the lender\";\r\n }\r\n\r\n if (this.$routeParams.PaymentStatus) {\r\n this.paymentStatus = this.$routeParams.PaymentStatus;\r\n }\r\n\r\n this.getTubeMapValue();\r\n\r\n this.checkForClient();\r\n\r\n if (this.$routeParams.CaseId) {\r\n this.dataLoading = true;\r\n\r\n this.organisationService.fetchAll().then((response) => {\r\n this.brokerOrganisations = response;\r\n });\r\n\r\n this.caseLenderService\r\n .fetchByCaseId(this.$routeParams.CaseId)\r\n .then((cls: CaseLenderDTO[]) => {\r\n this.hasShortlistedCaseLenders = cls.some(\r\n (cl) => cl.CaseLenderState == CaseLenderStateEnum.Shortlisted,\r\n );\r\n this.totalUnreadCaseLenderMessages = cls\r\n .filter((cls) => cls.TotalUnreadCaseLenderMessages != null)\r\n .reduce((a, b) => a + b.TotalUnreadCaseLenderMessages, 0);\r\n });\r\n\r\n this.caseService\r\n .fetch(this.$routeParams.CaseId)\r\n .then((response) => {\r\n\r\n // The case was a pre-existing case when the broker org became a member of Connect and therefore was archived.\r\n if (response.DevelopmentInput?.IsPreConnectArchived) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n\r\n this.case = response;\r\n this.orgId = this.case.BrokerOrganisationId;\r\n if (this.orgId) {\r\n this.organisationService.fetch(this.orgId).then((response) => {\r\n this.org = response;\r\n this.brokerCommission =\r\n this.case.CaseStatus == CaseStatusEnum.NewCase\r\n ? response.CommissionPercent\r\n : this.case.BrokerCommissionPercent;\r\n if (this.org.IsWhiteLabelled) {\r\n this.fileNamePrefix = this.org.Name.replace(/ /g, \"_\");\r\n } else {\r\n this.fileNamePrefix = \"Brickflow\";\r\n }\r\n });\r\n }\r\n\r\n if (this.case) {\r\n this.fileUpload = this.case.Attachments;\r\n // UpdateCaseState is essential to the RequiredState directive functionality\r\n //TODO JNG refactor to put within the caseservice fetch\r\n if (this.case) {\r\n ($rootScope as any).statusRequirementId = this.case.Id;\r\n\r\n this.caseService.updateCaseState(\r\n this.case.Id,\r\n this.case.CaseStatus,\r\n );\r\n\r\n if (this.case.CaseStatus == 0 || this.case.CaseStatus == 1) {\r\n this.caseService.updateTubeMap(CaseStatusEnum.InProgress);\r\n } else {\r\n this.caseService.updateTubeMap(this.case.CaseStatus);\r\n }\r\n\r\n this.CalcTotalBuild();\r\n\r\n if (this.case.DevelopmentInput.CI_Dev_DoYouOwnTheProperty) {\r\n this.CalcTotalPurchaseCostsOwning();\r\n } else {\r\n this.CalcTotalPurchaseCostsNotOwning();\r\n }\r\n\r\n //External links object initialisation\r\n this.newExternalLink = {\r\n CaseId: this.case.Id,\r\n LinkType: ExternalLinksEnum.Misc,\r\n Link: \"https://\",\r\n } as ExternalLinksDTO;\r\n }\r\n\r\n // doesn't use cookies to get updated subscription status\r\n this.authService.getUpdatedProfile().then((prof) => {\r\n this.currentUser = prof;\r\n this.isAdminBroker = this.currentUser.IsOrganisationAdmin;\r\n this.checkForAdmin();\r\n this.checkForBroker();\r\n this.checkForLender();\r\n this.checkIfOnlyBroker();\r\n this.checkForClient();\r\n this.updateRequestAssitanceCaseNoteMessage();\r\n //If half-registered user hasn't set a password, then prompt them to set one\r\n if (this.currentUser.TemporaryAccount === true) {\r\n this.showSetPasswordModal = true;\r\n }\r\n\r\n this.newTeamMember = {\r\n UserId: this.currentUser.Id,\r\n CaseId: this.case.Id,\r\n Website: \"https://\",\r\n } as TeamMemberDTO;\r\n this.newNote = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n ExpandNote: false,\r\n } as CaseNoteDTO;\r\n this.newComparable = {\r\n CaseId: this.case.Id,\r\n URL: \"https://\",\r\n } as ComparablePropertyDTO;\r\n });\r\n\r\n this.clientAccountAccessCheck();\r\n } else if (\r\n (this.$rootScope as any).loginRedirectPath.includes(\r\n \"/casedashboard\",\r\n )\r\n ) {\r\n } else {\r\n // If no case is returned, this could be that the logged in user has been removed from the case\r\n // - only do this if there is a logged in user, otherwise let the routing sort out where the redirect should go\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n this.$location.path(\"/dashboard\");\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n this.updateCaseLandingSeenState();\r\n\r\n //Tour & Guidance logic\r\n let cookieTourStep = this.$cookies.get(\"tourStepPreapp\");\r\n if (cookieTourStep) {\r\n this.tourState.tourStep = cookieTourStep;\r\n }\r\n $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n this.updateGuidanceState();\r\n });\r\n this.updateGuidanceState();\r\n this.getAppName();\r\n\r\n this.getLenderCount();\r\n\r\n this.referrerOptions = this.selectListService.GetReferrerOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n }\r\n\r\n updateGuidanceState() {\r\n this.guidanceCheckbox =\r\n this.$cookies.get(\"guidance\") === \"on\" ||\r\n this.$cookies.get(\"guidance\") === undefined;\r\n\r\n // Update tour settings\r\n let tourEnabled = this.$cookies.get(\"tourEnabledPreapp\");\r\n if (\r\n (tourEnabled == \"true\" || tourEnabled === undefined) &&\r\n this.guidanceCheckbox\r\n ) {\r\n this.tourEnabled = true;\r\n } else {\r\n this.tourEnabled = false;\r\n }\r\n }\r\n\r\n getTubeMapValue() {\r\n return this.caseService.getTubeMap();\r\n }\r\n\r\n closeModal(test: number) {\r\n this.message = false;\r\n }\r\n\r\n /**\r\n * Process the Accept/Cancel Application button being clicked\r\n */\r\n acceptCancelTerms() {\r\n this.caseLenderService\r\n .applyToLender(this.selectedCaseLender.CaseId, this.selectedCaseLender.Id)\r\n .then((response) => {\r\n this.selectedCaseLender.CaseLenderState = response.CaseLenderState;\r\n this.caseLenders = this.caseLenders.filter(\r\n (lender) => lender.Id != this.selectedCaseLender.Id,\r\n );\r\n this.caseLenders.push(this.selectedCaseLender);\r\n })\r\n .finally(() => {\r\n this.messageContent =\r\n \"Thank you for submitting an application with this lender.\";\r\n this.message = true;\r\n });\r\n\r\n this.showApplyTsAndCs = false;\r\n }\r\n\r\n turnOffGuidance() {\r\n this.guidanceCheckbox = false;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n this.$cookies.put(\"guidance\", \"off\", { expires: expiryDate });\r\n this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n }\r\n\r\n getGuidanceSwitchState() {\r\n if (!this.$cookies.get(\"guidance\")) {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"on\") {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"off\") {\r\n this.guidanceCheckbox = false;\r\n } else {\r\n this.guidanceCheckbox = true;\r\n }\r\n return this.guidanceCheckbox;\r\n }\r\n\r\n recordGuidanceCookie() {\r\n var guidanceSwitchState: string;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n if (this.guidanceCheckbox == true) {\r\n guidanceSwitchState = \"on\";\r\n } else {\r\n guidanceSwitchState = \"off\";\r\n }\r\n this.$cookies.put(\"guidance\", guidanceSwitchState, { expires: expiryDate });\r\n this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n backToClientSearches(): void {\r\n (this.$rootScope as any).clientUsernameBeingViewed =\r\n this.case.DevelopmentInput.OwnerUser;\r\n this.authService.clearSelectedNavMenuAndFilterStorageData();\r\n this.go(\"/userdashboard\");\r\n }\r\n\r\n clientAccountAccessCheck(): void {\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.userService.getcurentuserrecord().then((result) => {\r\n this.selectedUser = result;\r\n\r\n this.caseMemberService\r\n .fetchByCaseId(this.$routeParams.CaseId)\r\n .then((response) => {\r\n this.shareholders = response.find(\r\n (x) => x.UserId == this.selectedUser.Id,\r\n );\r\n this.primaryShareholder = response.find((x) => x.IsPrimary == true);\r\n\r\n if (\r\n (this.selectedUser.UserName !==\r\n this.case.DevelopmentInput.OwnerUser &&\r\n !this.shareholders) ||\r\n (this.selectedUser.UserName !==\r\n this.case.DevelopmentInput.OwnerUser &&\r\n this.isAdmin)\r\n ) {\r\n this.clientUsernameBeingAccessed =\r\n this.case.DevelopmentInput.OwnerUser;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n paymentStatusClose() {\r\n this.go(\"/casedashboard/\" + this.$routeParams.CaseId);\r\n this.paymentStatus = \"\";\r\n }\r\n\r\n carriageReturnCheck(event) {\r\n if (event.key === \"Enter\") {\r\n let position = event.target.selectionStart;\r\n if (this.case.CaseOverview) {\r\n this.case.CaseOverview = [\r\n this.case.CaseOverview.slice(0, position),\r\n \"\\n\",\r\n this.case.CaseOverview.slice(position),\r\n ].join(\"\");\r\n\r\n setTimeout(() => {\r\n event.target.setSelectionRange(position + 1, position + 1);\r\n }, 0);\r\n } else {\r\n this.case.CaseOverview = \"\\n\";\r\n }\r\n }\r\n }\r\n\r\n toggleAccordion(id: number) {\r\n if (!this.accordionShow[id]) {\r\n this.accordionShow[id] = true;\r\n } else {\r\n this.accordionShow[id] = !this.accordionShow[id];\r\n }\r\n }\r\n\r\n formChanged(): void {\r\n (this.$rootScope as any).formSaved = false;\r\n }\r\n checkForAdmin(): void {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isAdminUser()\r\n .then((response) => {\r\n this.isAdmin = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkForLender(): void {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isLenderUser()\r\n .then((response) => {\r\n this.isLender = response;\r\n if (this.isLender) {\r\n this.caseLenderService\r\n .fetchCaseLender(this.case.Id)\r\n .then((response) => {\r\n this.lenderDetails = response;\r\n this.isInActiveLender = response.IsLenderInActive;\r\n });\r\n } else {\r\n if (this.case.DevelopmentInput.SelectedResults.length > 0) {\r\n this.$lenderService\r\n .getSelectedLendersName(\r\n this.case.DevelopmentInput.SelectedResults,\r\n )\r\n .then((response) => {\r\n this.selectedLendersText = response.LendersName;\r\n if (this.case.CaseStatus == CaseStatusEnum.NewCase) {\r\n this.shortListedLendersId = response.LendersId;\r\n }\r\n });\r\n this.$lenderService\r\n .getShortlistedLendersName(\r\n this.case.DevelopmentInput.SelectedResults,\r\n )\r\n .then((response) => {\r\n this.shortlistedLendersText = response.LendersName;\r\n if (this.case.CaseStatus != CaseStatusEnum.NewCase) {\r\n this.shortListedLendersId = response.LendersId;\r\n }\r\n });\r\n }\r\n }\r\n this.getBrokerUsers();\r\n this.checkIfUserIsInvited();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkIfOnlyBroker() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isBroker()\r\n .then((response) => {\r\n this.IsOnlyBroker = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkForBroker(): void {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isBrokerOrABove()\r\n .then((response) => {\r\n this.isBroker = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkForClient(): void {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isClientUser()\r\n .then((response) => {\r\n this.isClient = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n // Gets the List of brokers belonging to broker organisation for admin or broker, and broker email to client or lender.\r\n getBrokerUsers(): void {\r\n this.dataLoading = true;\r\n if ((this.isAdmin || this.isBroker) && this.case.BrokerOrganisationId) {\r\n this.userService\r\n .getAllOrganisationMembers(this.case.BrokerOrganisationId)\r\n .then((response) => {\r\n if (this.case.BrokerUserId != null) {\r\n this.caseBrokerUser = response.find(\r\n (x) => x.Id == this.case.BrokerUserId,\r\n );\r\n this.brokerPreferredContact = this.caseBrokerUser?.PhoneNumber;\r\n }\r\n this.brokerUsers = response.filter(\r\n (x) => x.SubscriptionStatus > 0 || x.IsOrganisationAdmin,\r\n );\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else if (\r\n this.case.BrokerUserId != null &&\r\n !this.isAdmin &&\r\n !this.isBroker\r\n ) {\r\n this.userService\r\n .getUserEmail(this.case.BrokerUserId)\r\n .then((response) => {\r\n this.brokerEmail = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n completeAccount() {\r\n this.currentUser.TemporaryAccount = false;\r\n this.currentUser.Roles = [];\r\n this.currentUser.Roles.push(\"Client\");\r\n if (this.currentUser.ApplicantDefinedRole == 0) {\r\n this.currentUser.NewUserEmailJourneyStarted = true;\r\n }\r\n this.userService.addUpdate(this.currentUser).then((response) => {\r\n this.passwordSetSuccess = true;\r\n });\r\n }\r\n\r\n afterSetPasswordContinue() {\r\n //User needs to be logged out and logged in again\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.authService.logout(false);\r\n }\r\n this.authService\r\n .login(\r\n this.currentUser.Email,\r\n this.currentUser.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n this.$cookies.put(\"user_firstname\", this.currentUser.FirstName, {\r\n expires: expiry,\r\n });\r\n });\r\n\r\n this.showSetPasswordModal = false;\r\n }\r\n\r\n saveLink(link: ExternalLinksDTO): void {\r\n this.dataLoading = true;\r\n\r\n this.$externalLinksService\r\n .addUpdate(this.newExternalLink)\r\n .then((response) => {\r\n this.case.Links.push(response);\r\n\r\n this.newExternalLink = {\r\n CaseId: this.case.Id,\r\n LinkType: ExternalLinksEnum.Misc,\r\n Link: \"https://\",\r\n } as ExternalLinksDTO;\r\n\r\n this.externalLinkForm.$setPristine();\r\n this.externalLinkForm.$setUntouched();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n removeLink(link: ExternalLinksDTO): void {\r\n this.dataLoading = true;\r\n this.$externalLinksService\r\n .delete(link.Id)\r\n .then((response) => {\r\n let index = this.case.Links.indexOf(link);\r\n this.case.Links.splice(index, 1);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n saveTeamMember(teamMember: TeamMemberDTO): void {\r\n this.newTeamMember.Website =\r\n this.newTeamMember.Website == \"https://\"\r\n ? \"\"\r\n : this.newTeamMember.Website;\r\n this.$teamMemberService.addUpdate(this.newTeamMember).then((response) => {\r\n this.case.TeamMembers.push(response);\r\n this.newTeamMember = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n Website: \"https://\",\r\n } as TeamMemberDTO;\r\n this.teamMemberForm.$setPristine();\r\n this.teamMemberForm.$setUntouched();\r\n this.showAdd = false;\r\n });\r\n }\r\n\r\n addTeamMemberPopUp() {\r\n if (this.teamMemberForm) {\r\n this.teamMemberForm.$setPristine();\r\n this.teamMemberForm.$setUntouched();\r\n }\r\n\r\n this.showAdd = true;\r\n }\r\n\r\n resetTeamMember() {\r\n this.teamMemberForm.$setPristine();\r\n this.teamMemberForm.$setUntouched();\r\n this.newTeamMember = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n Website: \"https://\",\r\n } as TeamMemberDTO;\r\n this.showAdd = false;\r\n }\r\n\r\n deleteTeamMember(): void {\r\n this.$teamMemberService\r\n .delete(this.confirmDeleteTeamMember.Id)\r\n .then((response) => {\r\n let index = this.case.TeamMembers.indexOf(this.confirmDeleteTeamMember);\r\n this.case.TeamMembers.splice(index, 1);\r\n });\r\n this.confirmDeleteTeamMember = {} as TeamMemberDTO;\r\n this.showDelete = false;\r\n }\r\n\r\n updateTeamMember(teamMember: TeamMemberDTO): void {\r\n this.editTeamMember = teamMember;\r\n this.tempTeamMember = { ...this.editTeamMember };\r\n this.editTeamMember.Website = this.editTeamMember.Website\r\n ? this.editTeamMember.Website\r\n : \"https://\";\r\n this.showEdit = true;\r\n }\r\n\r\n saveUpdatedTeamMember(teamMember: TeamMemberDTO): void {\r\n this.editTeamMember.Website =\r\n this.editTeamMember.Website == \"https://\"\r\n ? \"\"\r\n : this.editTeamMember.Website;\r\n\r\n this.$teamMemberService\r\n .addUpdate(this.editTeamMember)\r\n .then((response) => {\r\n this.case.TeamMembers = this.case.TeamMembers.filter(\r\n (member) => member.Id != this.editTeamMember.Id,\r\n );\r\n this.case.TeamMembers.push(response);\r\n })\r\n .finally(() => {\r\n this.showEdit = false;\r\n });\r\n }\r\n\r\n cancelUpdateTeamMember() {\r\n this.showEdit = false;\r\n this.case.TeamMembers = this.case.TeamMembers.filter(\r\n (member) => member.Id != this.tempTeamMember.Id,\r\n );\r\n this.case.TeamMembers.push(this.tempTeamMember);\r\n }\r\n\r\n deleteConfirmTeamMember(teamMember: TeamMemberDTO) {\r\n this.showDelete = true;\r\n this.confirmDeleteTeamMember = { ...teamMember };\r\n }\r\n\r\n saveComparable(comparable: ComparablePropertyDTO): void {\r\n this.newComparable.URL =\r\n this.newComparable.URL == \"https://\" ? \"\" : this.newComparable.URL;\r\n this.comparablePropertyService\r\n .addUpdate(this.newComparable)\r\n .then((response) => {\r\n this.case.Comparables.push(response);\r\n this.newComparable = {\r\n CaseId: this.case.Id,\r\n URL: \"https://\",\r\n } as ComparablePropertyDTO;\r\n this.comparableForm.$setPristine();\r\n this.comparableForm.$setUntouched();\r\n this.showAdd = false;\r\n });\r\n }\r\n\r\n resetComparable() {\r\n this.newComparable = {\r\n CaseId: this.case.Id,\r\n URL: \"https://\",\r\n } as ComparablePropertyDTO;\r\n this.comparableForm.$setPristine();\r\n this.comparableForm.$setUntouched();\r\n this.showAdd = false;\r\n }\r\n\r\n deleteComparable(): void {\r\n this.comparablePropertyService\r\n .delete(this.confirmDeleteComparable.Id)\r\n .then((response) => {\r\n let index = this.case.Comparables.indexOf(this.confirmDeleteComparable);\r\n this.case.Comparables.splice(index, 1);\r\n });\r\n this.confirmDeleteComparable = {} as ComparablePropertyDTO;\r\n this.confirmationDelete = false;\r\n }\r\n\r\n updateComparable(comparable: ComparablePropertyDTO): void {\r\n this.editComparable = comparable;\r\n this.tempComparable = { ...this.editComparable };\r\n this.editComparable.URL = this.editComparable.URL\r\n ? this.editComparable.URL\r\n : \"https://\";\r\n this.showEdit = true;\r\n }\r\n\r\n saveUpdatedComparable(comparable: ComparablePropertyDTO): void {\r\n this.editComparable.URL =\r\n this.editComparable.URL == \"https://\" ? \"\" : this.editComparable.URL;\r\n this.comparablePropertyService\r\n .addUpdate(this.editComparable)\r\n .then((response) => {\r\n this.case.Comparables = this.case.Comparables.filter(\r\n (member) => member.Id != this.editComparable.Id,\r\n );\r\n this.case.Comparables.push(response);\r\n })\r\n .finally(() => {\r\n this.showEdit = false;\r\n });\r\n }\r\n\r\n cancelDelete() {\r\n this.confirmationDelete = false;\r\n }\r\n\r\n deleteConfirmationMessage(row) {\r\n this.confirmationDelete = true;\r\n this.confirmDeleteComparable = { ...row };\r\n }\r\n\r\n cancelUpdateComparable() {\r\n this.showEdit = false;\r\n this.case.Comparables = this.case.Comparables.filter(\r\n (member) => member.Id != this.tempComparable.Id,\r\n );\r\n this.case.Comparables.push(this.tempComparable);\r\n }\r\n\r\n rejectOrWithdrawConfirmation(rejectorwithdraw: string) {\r\n rejectorwithdraw === \"Withdraw\"\r\n ? (this.showWithdraw = true)\r\n : (this.showReject = true);\r\n }\r\n\r\n goToCaseDashboard() {\r\n this.$location.path(\"/casedashboard/\" + this.case.Id);\r\n }\r\n\r\n updateCaseLandingSeenState() {\r\n this.caseLandingSeen =\r\n this.$cookies.get(\"caseLandingDontShowAgain\") === \"yes\";\r\n }\r\n\r\n caseLandingSeenClicked() {\r\n this.caseLandingSeen = true;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n this.$cookies.put(\"caseLandingDontShowAgain\", \"yes\", {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n viewResults(loanCriteria: DevelopmentInputDTO) {\r\n this.$location.path(\r\n \"/results/\" + this.case.DevelopmentInputID + \"/\" + this.case.Id,\r\n );\r\n }\r\n\r\n CreateDeveloperExperience() {\r\n this.$location.path(\"/devexperience/\" + this.case.Id + \"/-1\");\r\n }\r\n EditDeveloperExperience() {\r\n if (this.case.DevelopmentExperienceID) {\r\n this.$location.path(\r\n \"/devexperience/\" +\r\n this.case.Id +\r\n \"/\" +\r\n this.case.DevelopmentExperienceID,\r\n );\r\n } else {\r\n this.CreateDeveloperExperience();\r\n }\r\n }\r\n\r\n EditProfiles() {\r\n if (this.case.DevelopmentExperienceID) {\r\n this.$location.path(\r\n \"/profiles/\" + this.case.Id + \"/\" + this.case.DevelopmentExperienceID,\r\n );\r\n } else {\r\n this.CreateDeveloperExperience();\r\n }\r\n }\r\n\r\n UpdateDeveloperInformation() {\r\n this.$location.path(\r\n \"/criteriaappraisal/\" +\r\n this.case.Id +\r\n \"/\" +\r\n this.case.DevelopmentInput.Id,\r\n );\r\n }\r\n\r\n EditDeveloperSchedule() {\r\n this.$location.path(\r\n \"/devschedule/\" + this.case.Id + \"/\" + this.case.DevelopmentInput.Id,\r\n );\r\n }\r\n\r\n save() {\r\n this.dataLoading = true;\r\n this.caseService\r\n .addUpdatereturnonlyid(this.case)\r\n .then((response) => {\r\n this.case.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: CaseDTO[] = this.objects.filter((value, index) => {\r\n return value.Id == response;\r\n });\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.case);\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n doRenameSearch() {\r\n this.developmentInputService\r\n .addUpdate(this.case.DevelopmentInput)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n }\r\n\r\n saveCase(): ng.IPromise {\r\n this.dataLoading = true;\r\n let defer = this.$q.defer();\r\n this.caseService\r\n .addUpdatereturnonlyid(this.case)\r\n .then((response) => {\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n return defer.promise;\r\n }\r\n\r\n delete() {\r\n this.dataLoading = true;\r\n this.caseService\r\n .delete(this.case.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.case), 1);\r\n this.caseForm.$setPristine();\r\n delete this.case;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getdevelopmentinput(id: number) {\r\n this.dataLoading = true;\r\n this.developmentInputService\r\n .fetch(id)\r\n .then((response) => {\r\n this.case.DevelopmentInput = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n //File upload\r\n\r\n //calculateFilesForThisModule() {\r\n // this.fileUploadPlaning = this.fileUpload.filter(file => file.Module === ModuleEnum.Planning);\r\n //this.fileUploadTeam = this.fileUpload.filter(file => file.Module === ModuleEnum.ProfessionalTeam);\r\n //this.fileUploadProperties = this.fileUpload.filter(file => file.Module === ModuleEnum.ComparableProperties);\r\n //}\r\n\r\n calculateTotalFiles(filter: number) {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module === filter,\r\n ).length;\r\n }\r\n return this.total;\r\n }\r\n\r\n calculateTotalFilesRemoving(filter: number) {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module != filter,\r\n ).length;\r\n }\r\n return this.total;\r\n }\r\n\r\n onFileSelect(files, moduleSelected) {\r\n var module = ModuleEnum.Case;\r\n if (moduleSelected === \"Planning\") {\r\n module = ModuleEnum.Planning;\r\n } else if (moduleSelected === \"teammember\") {\r\n module = ModuleEnum.ProfessionalTeam;\r\n } else if (moduleSelected === \"properties\") {\r\n module = ModuleEnum.ComparableProperties;\r\n } else if (moduleSelected === \"images\") {\r\n module = ModuleEnum.Images;\r\n }\r\n\r\n this.openModal = false;\r\n\r\n if (files.length > 0) {\r\n //if case has no id it must be saved first\r\n if (this.case.Id < 1) {\r\n this.dataLoading = true;\r\n\r\n this.caseService\r\n .addUpdate(this.case)\r\n .then((response) => {\r\n this.case = response;\r\n this.onFileSelect(files, module); //call itself and then exit as should now be saved so should be able to run\r\n return;\r\n })\r\n .catch((e) => { })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.openModal = false;\r\n });\r\n //return;\r\n }\r\n\r\n this.fileAttachmentService\r\n .UploadFileLstInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.case.Id,\r\n this.fileUpload,\r\n module,\r\n )\r\n .finally(() => {\r\n this.openModal = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: FileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.fileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n downloadFilesAsZip(files: FileAttachmentDTO) {\r\n var keys: string[] = [];\r\n for (var file in files) {\r\n if (files[file].FileLocation) {\r\n keys.push(files[file].FileLocation);\r\n }\r\n }\r\n this.fileAttachmentService.downloadZip(keys);\r\n }\r\n\r\n deleteFile(file: FileAttachmentDTO) {\r\n this.case.Attachments.splice(this.case.Attachments.indexOf(file), 1);\r\n this.fileAttachmentService.markasdeleted(file.Id).then((result) => { }); //remove on the server\r\n }\r\n\r\n renameFile(file: FileAttachmentDTO) {\r\n if (this.renamingFile === undefined) {\r\n // if renaming this file will dirty the case, we'll want to set it back to pristine when we're done.\r\n // this.renamingFileDirties = !$scope.caseForm.$dirty;\r\n this.renamingFile = file;\r\n } else {\r\n delete this.renamingFile;\r\n }\r\n }\r\n renamingFileComplete(file: FileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.fileAttachmentService\r\n .renameFile(file)\r\n .then((response) => {\r\n file.TempURL = response.TempURL;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n renamingLinkCompleted(link: ExternalLinksDTO) {\r\n this.dataLoading = true;\r\n this.$externalLinksService\r\n .addUpdate(link)\r\n .then((response) => {\r\n link.Link = response.Link;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n //TODO: this will probably need to be deleted once apply button is put on lendings page\r\n ProcessApplication() {\r\n let result = this.$location.path(\"/payment/\" + this.case.Id);\r\n\r\n if (result) {\r\n this.setApplyStatus();\r\n }\r\n\r\n this.showTsAndCsForm = true;\r\n this.showTsAndCs = true;\r\n }\r\n\r\n //TOUR\r\n\r\n tourNext(): void {\r\n this.tourState.tourStep++;\r\n this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n }\r\n tourBack(): void {\r\n this.tourState.tourStep--;\r\n this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n }\r\n\r\n tourSkip(): void {\r\n this.tourEnabled = false;\r\n this.$cookies.put(\"tourEnabledPreapp\", \"false\");\r\n this.$cookies.remove(\"tourStep\");\r\n }\r\n\r\n startTour(): void {\r\n this.tourState.tourStep = 1;\r\n this.tourState.tourTotalSteps = 0;\r\n this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n this.tourEnabled = true;\r\n this.$cookies.put(\"tourEnabledPreapp\", \"true\");\r\n }\r\n\r\n removeNote(note: CaseNoteDTO): void {\r\n this.dataLoading = true;\r\n this.caseNoteService\r\n .delete(note.Id)\r\n .then((response) => {\r\n let index = this.case.CaseNotes.indexOf(note);\r\n this.case.CaseNotes.splice(index, 1);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n saveNote(): void {\r\n this.dataLoading = true;\r\n this.caseNoteService\r\n .addUpdate(this.newNote)\r\n .then((response) => {\r\n this.case.CaseNotes.push(response);\r\n this.newNote = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n ExpandNote: false,\r\n } as CaseNoteDTO;\r\n this.caseForm.$setPristine();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n statusMap = [\r\n { status: 0, label: \"New Case\" },\r\n { status: 1, label: \"Pre App\" },\r\n { status: 2, label: \"Decision in Principle\" },\r\n { status: 3, label: \"App Made\" },\r\n { status: 4, label: \"Credit Approval\" },\r\n { status: 5, label: \"With Professionals\" },\r\n { status: 6, label: \"Completed\" },\r\n { status: 7, label: \"Dormant\" },\r\n { status: 9, label: \"Submitted To Lenders Pending Review\" },\r\n ];\r\n\r\n setStatus(newCaseStatus: CaseStatusEnum) {\r\n let statusText = this.statusMap.find((status) => {\r\n return status.status === newCaseStatus;\r\n });\r\n this.dataLoading = true;\r\n this.caseService\r\n .setStatusOnCase(this.case.Id, newCaseStatus)\r\n .then((statusUpdateResponse) => {\r\n this.caseService.updateTubeMap(newCaseStatus);\r\n let caseNote = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n NoteText: \"Status changed to: \" + statusText.label,\r\n ExpandNote: false,\r\n } as CaseNoteDTO;\r\n this.caseNoteService.addUpdate(caseNote).then((caseNoteResponse) => {\r\n this.case.CaseNotes.push(caseNoteResponse);\r\n });\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n markSectionAsComplete(propertyName: string, noteText: string) {\r\n this.case[propertyName] = !this.case[propertyName];\r\n // TODO JNG this should probably not save the entire case.\r\n this.dataLoading = true;\r\n this.caseService\r\n .addUpdatereturnonlyid(this.case)\r\n .then((response) => {\r\n let caseNote = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n NoteText:\r\n noteText +\r\n \" marked as \" +\r\n (this.case[propertyName] ? \"complete\" : \"incomplete\") +\r\n \".\",\r\n ExpandNote: false,\r\n } as CaseNoteDTO;\r\n\r\n this.caseNoteService.addUpdate(caseNote).then((caseNoteResponse) => {\r\n this.case.CaseNotes.push(caseNoteResponse);\r\n });\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n showMessage(message: string) {\r\n this.messageContent = message;\r\n }\r\n\r\n requestEmail(reason): void {\r\n this.showRequestEmailForm = true;\r\n this.requestMessageReason = reason;\r\n this.message = true;\r\n this.messageContent = \"\";\r\n }\r\n\r\n sendRequestEmail() {\r\n this.showRequestEmailForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n this.$accountservice\r\n .RequestAssistanceReview(this.requestMessageReason, this.case.Id)\r\n .then((response) => {\r\n this.showMessage(\r\n `${this.appName} have been notified that you require assistance and will be in touch shortly to help.`,\r\n );\r\n\r\n let caseNote = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n NoteText: \"You have requested \" + this.requestMessageReason + \".\",\r\n ExpandNote: false,\r\n } as CaseNoteDTO;\r\n this.caseNoteService.addUpdate(caseNote).then((caseNoteResponse) => {\r\n this.case.CaseNotes.push(caseNoteResponse);\r\n });\r\n })\r\n .catch((error) => {\r\n this.showMessage(\r\n \"Sorry, something went wrong while sending your email. Please try again.\",\r\n );\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /** Opens the Terms and Conditions popup when the Submit to Lenders button is clicked*/\r\n showTermsAndConditionsForBorrower() {\r\n this.showApplyTsAndCs = true;\r\n this.requestMessageReason = \"a review\";\r\n this.showTsAndCs = true;\r\n }\r\n\r\n /** Request a Review button clicked */\r\n requestReview() {\r\n this.showTsAndCsForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n this.requestMessageReason = \"a review\";\r\n this.caseService\r\n .requestReview(\r\n this.case.Id,\r\n this.currentUser.PhoneNumber,\r\n this.requestMessageReason,\r\n )\r\n .then((response) => {\r\n this.case.CaseStatus = response.CaseState;\r\n this.showMessage(\r\n `Thank you for accepting the terms and conditions. ${this.appName} have been notified that you require a review and will be in touch shortly to help.`,\r\n );\r\n })\r\n .catch((error) => {\r\n this.showMessage(\r\n \"Sorry, something went wrong while sending your email. Please try again.\",\r\n );\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n this.showApplyTsAndCs = false;\r\n });\r\n }\r\n\r\n sendPreAppEmail() {\r\n this.showTsAndCsForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n this.caseService\r\n .SendPreAppEmail(this.case.Id)\r\n .then((response) => {\r\n this.showMessage(\r\n `${this.appName} have been notified that you have submitted your Appraisal and will be in touch shortly.`,\r\n );\r\n this.case.PreAppSubmitted = true;\r\n this.caseService.addUpdatereturnonlyid(this.case).then((response) => {\r\n let caseNote = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n NoteText: \"Your Appraisal has been submitted.\",\r\n ExpandNote: false,\r\n } as CaseNoteDTO;\r\n\r\n this.caseNoteService.addUpdate(caseNote).then((caseNoteResponse) => {\r\n this.case.CaseNotes.push(caseNoteResponse);\r\n });\r\n });\r\n })\r\n .catch((error) => {\r\n this.showMessage(\r\n \"Sorry, something went wrong while sending your email. Please try again.\",\r\n );\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /** Opens the Terms and Conditions popup when the Submit to Lenders HoT button is clicked (borrower/broker) */\r\n showTermsAndConditions() {\r\n this.dataLoading = true;\r\n this.$lenderService\r\n .getShortlistedLendersInfoForSubmitToLenders(\r\n this.shortListedLendersId,\r\n LenderProductTypeEnum.DevelopmentFinance,\r\n false,\r\n )\r\n .then((response) => {\r\n this.lendersDetailsForSubmittoLenders = response;\r\n })\r\n .finally(() => {\r\n this.showTsAndCs = true;\r\n this.showTsAndCsForm = true;\r\n this.case.SubmitTsAndCs = false;\r\n this.invalidEmail = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /** Submit button clicked (on Terms and Conditions popup) */\r\n submitToLenders() {\r\n this.showTsAndCsForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n\r\n this.caseService.addUpdatereturnonlyid(this.case);\r\n\r\n if (this.case.CaseStatus == CaseStatusEnum.ReadyToReSubmit) {\r\n this.caseService\r\n .resubmitToLenders(\r\n this.case.Id,\r\n this.brokerCommission,\r\n this.lendersDetailsForSubmittoLenders,\r\n this.brokerPreferredContact,\r\n this.isBrokerPhoneNumberUpdated,\r\n )\r\n .then((response) => {\r\n this.case.CaseStatus = response.CaseState;\r\n this.showMessage(\r\n \"This case has been re-submitted to Lenders to request a Decision in Principle.\",\r\n );\r\n this.isSubmittedToLenders = true;\r\n })\r\n .catch((error) => {\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n this.caseService.updateTubeMap(this.case.CaseStatus);\r\n });\r\n } else {\r\n this.caseService\r\n .submitToLenders(\r\n this.case.Id,\r\n this.brokerCommission,\r\n this.lendersDetailsForSubmittoLenders,\r\n this.brokerPreferredContact,\r\n this.isBrokerPhoneNumberUpdated,\r\n )\r\n .then((response) => {\r\n this.case.CaseStatus = response.CaseState;\r\n this.showMessage(\r\n \"You have requested a Decision in Principle from each lender.\",\r\n );\r\n this.isSubmittedToLenders = true;\r\n })\r\n .catch((error) => {\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n this.caseService.updateTubeMap(this.case.CaseStatus);\r\n });\r\n }\r\n }\r\n\r\n setApplyStatus() {\r\n this.dataLoading = true;\r\n this.showStatusMessage = true;\r\n this.caseService\r\n .setApplyStatus(this.case.Id)\r\n .then((statusUpdateResponse) => {\r\n this.case.CaseStatus = statusUpdateResponse;\r\n let caseNote = {\r\n CaseId: this.case.Id,\r\n UserId: this.currentUser.Id,\r\n NoteText: \"User has moved application to app made stage\",\r\n ExpandNote: false,\r\n } as CaseNoteDTO;\r\n this.caseNoteService.addUpdate(caseNote).then((caseNoteResponse) => {\r\n this.case.CaseNotes.push(caseNoteResponse);\r\n });\r\n })\r\n .catch((error) => { })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n allFormsComplete(): boolean {\r\n if (this.case) {\r\n if (\r\n this.case.CaseOverviewComplete &&\r\n this.case.DeveloperExperienceComplete &&\r\n this.case.DevelopmentAppraisalComplete &&\r\n this.case.DevelopmentScheduleComplete\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n //case overview\r\n editCaseOverview() {\r\n //take a temp backup of what is in case overview in case they hit cancel\r\n this.caseOverviewTempBackup = this.case.CaseOverview;\r\n this.$location.path(\"/caseoverview/\" + this.case.Id);\r\n }\r\n\r\n //Planning Module\r\n editPlanning() {\r\n //take a temp backup of what is in Planning Module in case they hit cancel\r\n this.planningURLTempBackup = this.case.PlanningURL;\r\n this.planningLocalAuthorityTempBackup = this.case.PlanningLocalAuthority;\r\n this.planningReferenceTempBackup = this.case.PlanningReference;\r\n this.planningDescriptionTempBackup = this.case.PlanningDescription;\r\n this.$location.path(\"/planning/\" + this.case.Id);\r\n this.planningURLTempBackup = this.case.PlanningURL;\r\n this.planningLocalAuthorityTempBackup = this.case.PlanningLocalAuthority;\r\n this.planningReferenceTempBackup = this.case.PlanningReference;\r\n this.planningDescriptionTempBackup = this.case.PlanningDescription;\r\n this.$location.path(\"/planning/\" + this.case.Id);\r\n }\r\n\r\n //Comparables Module\r\n editComparableProperties() {\r\n this.$location.path(\"/comparableproperties/\" + this.case.Id);\r\n }\r\n\r\n editProfessionalTeam() {\r\n this.$location.path(\"/teammember/\" + this.case.Id);\r\n }\r\n\r\n returnToPreApp(saveBefore: boolean): void {\r\n if (saveBefore) {\r\n this.saveCase().then((success) => {\r\n this.caseOverviewTempBackup = this.case.CaseOverview;\r\n this.$location.path(\"/casedashboard/\" + this.case.Id);\r\n });\r\n } else {\r\n this.case.CaseOverview = this.caseOverviewTempBackup;\r\n this.$location.path(\"/casedashboard/\" + this.case.Id);\r\n }\r\n (this.$rootScope as any).formSaved = true;\r\n }\r\n\r\n returnToCase(saveBefore: boolean): void {\r\n if (saveBefore) {\r\n this.saveCase().then((success) => {\r\n this.planningURLTempBackup = this.case.PlanningURL;\r\n this.planningLocalAuthorityTempBackup =\r\n this.case.PlanningLocalAuthority;\r\n this.planningReferenceTempBackup = this.case.PlanningReference;\r\n this.planningDescriptionTempBackup = this.case.PlanningDescription;\r\n this.$location.path(\"/casedashboard/\" + this.case.Id);\r\n });\r\n } else {\r\n this.case.PlanningURL = this.planningURLTempBackup;\r\n this.case.PlanningLocalAuthority = this.planningLocalAuthorityTempBackup;\r\n this.case.PlanningReference = this.planningReferenceTempBackup;\r\n this.case.PlanningDescription = this.planningDescriptionTempBackup;\r\n this.$location.path(\"/casedashboard/\" + this.case.Id);\r\n }\r\n (this.$rootScope as any).formSaved = true;\r\n }\r\n\r\n openSendToBorrower(contextToShare: number) {\r\n this.shareContext = contextToShare;\r\n this.shareSuplId = 0;\r\n if (this.selectedUser.UserName !== this.case.DevelopmentInput.OwnerUser) {\r\n this.userFirstName = \"\";\r\n } else {\r\n this.userFirstName = this.selectedUser.FirstName;\r\n }\r\n\r\n this.constructShareNoteMessage();\r\n\r\n this.caseMemberService\r\n .fetchcasememberswithaccess(this.case.Id)\r\n .then((response: CaseMemberDTO[]) => {\r\n this.caseMembersWithAccess = response;\r\n\r\n this.showShare = true;\r\n });\r\n }\r\n\r\n sendToBorrower() {\r\n this.dataLoading = true;\r\n this.caseService\r\n .sendNoteToBorrower(\r\n this.selectedClientToShareWith.FirstName,\r\n this.selectedClientToShareWith.Surname,\r\n this.selectedClientToShareWith.Email,\r\n this.shareNote,\r\n this.case.Id,\r\n this.shareContext,\r\n this.shareSuplId,\r\n this.case.DevelopmentExperienceID,\r\n )\r\n .then((success) => {\r\n this.showShare = false;\r\n this.dataLoading = false;\r\n this.showModuleShareConfirmation = true;\r\n });\r\n }\r\n\r\n closeModuleShareConfirmationModal() {\r\n this.selectedClientToShareWith = null;\r\n this.showModuleShareConfirmation = false;\r\n }\r\n\r\n CalcTotalPurchaseCostsNotOwning(): number {\r\n var res: number = 0;\r\n if (this.case.DevelopmentInput.CI_Dev_OrigPP) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_OrigPP);\r\n }\r\n if (this.case.DevelopmentInput.CI_Dev_SDLT) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_SDLT);\r\n }\r\n if (this.case.DevelopmentInput.DI_PurchaseAgentFees) {\r\n res += Number(this.case.DevelopmentInput.DI_PurchaseAgentFees);\r\n }\r\n if (this.case.DevelopmentInput.DI_PurchaseLegalFees) {\r\n res += Number(this.case.DevelopmentInput.DI_PurchaseLegalFees);\r\n }\r\n if (this.case.DevelopmentInput.DI_PurchaseOtherFees) {\r\n res += Number(this.case.DevelopmentInput.DI_PurchaseOtherFees);\r\n }\r\n this.totalPurchaseCostsNotOwning = res;\r\n return res;\r\n }\r\n\r\n CalcTotalPurchaseCostsOwning(): number {\r\n var res: number = 0;\r\n if (this.case.DevelopmentInput.CI_Dev_OrigPP) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_OrigPP);\r\n }\r\n if (this.case.DevelopmentInput.CI_Dev_SDLT) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_SDLT);\r\n }\r\n if (this.case.DevelopmentInput.DI_PurchaseAgentFees) {\r\n res += Number(this.case.DevelopmentInput.DI_PurchaseAgentFees);\r\n }\r\n if (this.case.DevelopmentInput.DI_PurchaseLegalFees) {\r\n res += Number(this.case.DevelopmentInput.DI_PurchaseLegalFees);\r\n }\r\n if (this.case.DevelopmentInput.DI_PurchaseOtherFees) {\r\n res += Number(this.case.DevelopmentInput.DI_PurchaseOtherFees);\r\n }\r\n this.totalPurchaseCostsOwning = res;\r\n return res;\r\n }\r\n\r\n CalcTotalBuild(): number {\r\n var res: number = this.CalcAdditionalBuild();\r\n if (this.case.DevelopmentInput.CI_Dev_BuildCosts) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_BuildCosts);\r\n }\r\n var res: number = this.CalcAdditionalBuild();\r\n if (this.case && this.case.DevelopmentInput.CI_Dev_BuildCosts) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_BuildCosts);\r\n }\r\n\r\n res += this.calcContingencyCost();\r\n this.totalBuild = res;\r\n return res;\r\n }\r\n\r\n calcContingencyCost(): number {\r\n var res: number = 0;\r\n if (\r\n this.case.DevelopmentInput.CI_Dev_Contingency &&\r\n this.case.DevelopmentInput.CI_Dev_BuildCosts\r\n ) {\r\n res =\r\n this.case.DevelopmentInput.CI_Dev_Contingency *\r\n this.case.DevelopmentInput.CI_Dev_BuildCosts;\r\n this.contingencyTotal = res;\r\n return res;\r\n }\r\n return res;\r\n }\r\n\r\n CalcAdditionalBuild(): number {\r\n var res: number = 0;\r\n if (this.case.DevelopmentInput.DI_BreakDownBuildCosts) {\r\n if (this.case.DevelopmentInput.CI_Dev_ProfPlanning) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_ProfPlanning);\r\n }\r\n if (this.case.DevelopmentInput.CI_Dev_ProfQS) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_ProfQS);\r\n }\r\n if (this.case.DevelopmentInput.DI_BuildProjectManag) {\r\n res += Number(this.case.DevelopmentInput.DI_BuildProjectManag);\r\n }\r\n if (this.case.DevelopmentInput.CI_Dev_S106CIL) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_S106CIL);\r\n }\r\n if (this.case.DevelopmentInput.DI_BuildMechEng) {\r\n res += Number(this.case.DevelopmentInput.DI_BuildMechEng);\r\n }\r\n if (this.case.DevelopmentInput.DI_BuildStrucEng) {\r\n res += Number(this.case.DevelopmentInput.DI_BuildStrucEng);\r\n }\r\n if (this.case.DevelopmentInput.DI_BuildPartyWall) {\r\n res += Number(this.case.DevelopmentInput.DI_BuildPartyWall);\r\n }\r\n if (this.case.DevelopmentInput.DI_BuildLandscaping) {\r\n res += Number(this.case.DevelopmentInput.DI_BuildLandscaping);\r\n }\r\n if (this.case.DevelopmentInput.DI_BuildWarranty) {\r\n res += Number(this.case.DevelopmentInput.DI_BuildWarranty);\r\n }\r\n if (this.case.DevelopmentInput.DI_BuildDemolition) {\r\n res += Number(this.case.DevelopmentInput.DI_BuildDemolition);\r\n }\r\n if (this.case.DevelopmentInput.DI_BuildOtherCosts) {\r\n res += Number(this.case.DevelopmentInput.DI_BuildOtherCosts);\r\n }\r\n } else {\r\n if (this.case.DevelopmentInput.CI_Dev_AdditionalOngoingCosts) {\r\n res += Number(this.case.DevelopmentInput.CI_Dev_AdditionalOngoingCosts);\r\n }\r\n }\r\n this.additionalBuild = res;\r\n return res;\r\n }\r\n\r\n videotour() {\r\n this.showVideo = true;\r\n }\r\n\r\n videopause(id) {\r\n this.showVideo = false;\r\n let containerElement = document.getElementById(id);\r\n let iframe_tag = containerElement.querySelector(\"iframe\");\r\n if (iframe_tag) {\r\n let iframeSrc = iframe_tag.src;\r\n iframe_tag.src = iframeSrc;\r\n }\r\n }\r\n\r\n addTeamRoleOption(e) {\r\n this.newTeamMember.TeamRole = \"\";\r\n e.target.value = \"\";\r\n }\r\n\r\n editTeamRoleOption(e) {\r\n this.editTeamMember.TeamRole = \"\";\r\n e.target.value = \"\";\r\n }\r\n\r\n EnumToString(item: ModuleEnum) {\r\n switch (item) {\r\n case 0:\r\n return \"Case Overview\";\r\n case 1:\r\n return \"Developer Profile\";\r\n case 2:\r\n return \"Development Appraisal\";\r\n case 3:\r\n return \"Development Schedule\";\r\n case 4:\r\n return \"Planning\";\r\n case 5:\r\n return \"Professional Team\";\r\n case 6:\r\n return \"Comparable Properties\";\r\n case 7:\r\n return \"General\";\r\n case 8:\r\n return \"Track Record\";\r\n case 9:\r\n return \"Assets & Liabilities\";\r\n case 10:\r\n return \"Proof Of Income\";\r\n case 11:\r\n return \"Applicant Details\";\r\n case 12:\r\n return \"Pictures\";\r\n default:\r\n return \"General\";\r\n }\r\n }\r\n\r\n gotoLendingPage() {\r\n (this.$rootScope as any).isLender = false;\r\n this.$location.path(\"/lending/\" + this.case.Id);\r\n }\r\n\r\n checkBrokerDeal() {\r\n return this.case?.BrokerUserId != null && this.isClient ? true : false;\r\n }\r\n\r\n /* gotoPaymentPage() {\r\n this.$location.path(\"/payment/\" + this.case.Id);\r\n }*/\r\n\r\n gotoHeadsOfTermsPage() {\r\n this.$location.path(\"/headsofterm/\" + this.case.Id);\r\n }\r\n\r\n /** Approve button clicked (This functionality has been removed from the process)\r\n approve() {\r\n this.dataLoading = true;\r\n this.caseService.approve(this.case.Id).then((response) => {\r\n this.case.CaseStatus = response.CaseState;\r\n this.caseService.updateTubeMap(response.CaseState);\r\n this.showMessage(\"Your case has been approved.\");\r\n this.showStatusMessage = true;\r\n }).catch((error) => {\r\n this.showMessage(\"Sorry, something went wrong while approving your case. Please try again.\");\r\n }).finally(() => {\r\n this.dataLoading = false;\r\n });;\r\n }*/\r\n\r\n setBrokerOrganisation(value: number) {\r\n // TODO JNG this should probably not save the entire case.\r\n this.dataLoading = true;\r\n this.case.BrokerUserId = null;\r\n\r\n this.caseService\r\n .changeBrokerOrganisation(this.case.Id, this.case.BrokerOrganisationId)\r\n .then((response: CaseNoteDTO) => {\r\n //populating the users related to selected new organisation.\r\n this.getBrokerUsers();\r\n\r\n this.case.CaseNotes.push(response);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n setBrokerUser(value: string) {\r\n this.dataLoading = true;\r\n this.caseService\r\n .changeBrokerUser(this.case.Id, this.case.BrokerUserId)\r\n .then((response: CaseNoteDTO) => {\r\n this.case.CaseNotes.push(response);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n goToLending() {\r\n this.$location.path(\"/lending/\" + this.case.Id);\r\n this.caseService.setIsProceed(false);\r\n }\r\n\r\n isShareNoteFormComplete(): boolean {\r\n if (!this.selectedClientToShareWith) {\r\n return false;\r\n }\r\n\r\n if (\r\n this.shareNote == \"undefined\" ||\r\n this.shareNote == null ||\r\n this.shareNote.length == 0\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n constructShareNoteMessage() {\r\n var message: string;\r\n var messageStart: string = `Please take a look at the `;\r\n var messageEnd: string =\r\n ` section in your Smart Appraisal™ and complete as much as you can.\\n\\nIf you would like our help or want us to complete this module with you, please do give me a call on ` +\r\n this.currentUser.PhoneNumber +\r\n `.`;\r\n\r\n switch (this.shareContext) {\r\n case 1: //overview\r\n message =\r\n `Please take a look at the case overview I have started for you and add to it where you can.\\n\\nThis section provides the lender with an overview about you, your team and your project. Lenders approve just 1 in 4 applications due to poor presentation, so we need to make it as impactful as possible.\\n\\nIf you would like to call me so we can add the notes together, my number is ` +\r\n this.currentUser.PhoneNumber +\r\n `.`;\r\n break;\r\n case 2: //dev experience\r\n this.shareSuplId = this.case.DevelopmentExperienceID\r\n ? this.case.DevelopmentExperienceID\r\n : -1;\r\n message = messageStart + `ownership` + messageEnd;\r\n break;\r\n case 3: //dev appraisal\r\n this.shareSuplId = this.case.DevelopmentInput.Id;\r\n message = messageStart + `development appraisal` + messageEnd;\r\n break;\r\n case 4: //schedule\r\n this.shareSuplId = this.case.DevelopmentInput.Id;\r\n message = messageStart + `development schedule` + messageEnd;\r\n break;\r\n case 5: //files\r\n message = `Please upload the supporting documents associated with your project.\\n\\nAdding supporting documents helps lenders make quicker and more reliable decisions.`;\r\n break;\r\n case 6: //planning module\r\n this.shareSuplId = this.case.DevelopmentInput.Id;\r\n message = messageStart + `planning section` + messageEnd;\r\n break;\r\n case 7: //Professional Team\r\n this.shareSuplId = this.case.DevelopmentInput.Id;\r\n message = messageStart + `professional team` + messageEnd;\r\n break;\r\n case 8: //comparable properties module\r\n message = messageStart + `comparable properties` + messageEnd;\r\n break;\r\n case 9: //profiles module\r\n message = messageStart + `profiles` + messageEnd;\r\n break;\r\n }\r\n\r\n this.shareNote = message;\r\n }\r\n\r\n /** Process the Heads of Terms button being clicked */\r\n headsOfTermsClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"terms\");\r\n this.$location.path(\r\n \"/headsofterm/\" + this.case.Id + \"/\" + this.lenderDetails.Id,\r\n );\r\n }\r\n\r\n showAndHideExport() {\r\n this.showExport = !this.showExport;\r\n }\r\n\r\n /** Lender rejects the case*/\r\n rejectButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"reject\");\r\n this.$location.path(\r\n \"/headsofterm/\" + this.case.Id + \"/\" + this.lenderDetails.Id,\r\n );\r\n }\r\n\r\n withDrawButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"withdraw\");\r\n this.$location.path(\r\n \"/headsofterm/\" + this.case.Id + \"/\" + this.lenderDetails.Id,\r\n );\r\n }\r\n\r\n feedbackButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"feedback\");\r\n this.$location.path(\r\n \"/headsofterm/\" + this.case.Id + \"/\" + this.lenderDetails.Id,\r\n );\r\n }\r\n\r\n getAppName() {\r\n let lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n this.appName = lsd;\r\n } else {\r\n this.appName = \"Brickflow\";\r\n }\r\n }\r\n\r\n closeModalAndGoToDasboard() {\r\n this.showTsAndCs = false;\r\n this.authService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n closeModalAndGoToDealForum() {\r\n this.showTsAndCs = false;\r\n this.$location.path(\"/lending/\" + this.case.Id);\r\n }\r\n\r\n checkIfUserIsInvited() {\r\n //added to scope for directive\r\n this.caseService\r\n .checkIfUserIsInvited(this.currentUser.Id, this.$routeParams.CaseId)\r\n .then((isInvited: boolean) => {\r\n // if user has no active subscription (and are not a lender or admin) then they should be redirected back to the dashboard\r\n if (\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PaidUp &&\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PreCancel &&\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !isInvited &&\r\n !this.isAdmin &&\r\n !this.isLender\r\n ) {\r\n this.$location.path(\"/dashboard\");\r\n return;\r\n }\r\n\r\n (this.$rootScope as any).isInvitedToCase = isInvited;\r\n if (isInvited) {\r\n this.caseMemberService\r\n .fetchByCaseId(this.$routeParams.CaseId)\r\n .then((response) => {\r\n if (response != null && response.length > 0) {\r\n var currentShareholder = response.find(\r\n (x) => x.UserId == this.currentUser.Id,\r\n );\r\n\r\n if (\r\n currentShareholder != null &&\r\n currentShareholder.AccessLevel == CaseAccessLevelEnum.ReadOnly\r\n ) {\r\n (this.$rootScope as any).isInvitedAndHasReadonlyAccess = true;\r\n }\r\n }\r\n this.$rootScope.$broadcast(\"invitedStatusChange\");\r\n });\r\n } else {\r\n this.$rootScope.$broadcast(\"invitedStatusChange\");\r\n }\r\n });\r\n }\r\n\r\n getLenderCount() {\r\n this.$lenderService\r\n .getTotalLenders(ProductFamilyEnum.Development)\r\n .then((result) => {\r\n this.totalLender = result;\r\n });\r\n }\r\n\r\n closeConfirmationModal() {\r\n if (this.isSubmittedToLenders) {\r\n window.location.reload();\r\n }\r\n this.showTsAndCs = false;\r\n }\r\n\r\n getSelectedLenderName() {\r\n if (\r\n this.isBroker &&\r\n this.case.DevelopmentInput &&\r\n this.case.DevelopmentInput.SelectedResults.length == 1\r\n ) {\r\n this.productService\r\n .fetch(this.case.DevelopmentInput.SelectedResults[0].ProductId)\r\n .then((product: ProductDTO) => {\r\n this.selectedLendersText = product.LenderName;\r\n });\r\n }\r\n }\r\n\r\n redactInfo() {\r\n this.eventLogService.logEvent(\r\n \"EXPORTCASEPDFCLICKED\",\r\n EventLogEnum.Export,\r\n ProductTypeEnum.Development,\r\n this.case.Id,\r\n );\r\n if (this.isClient) {\r\n this.redactSensitiveInfo = true;\r\n }\r\n }\r\n\r\n autoFillComparable(save: boolean = true) {\r\n this.newTeamMember;\r\n this.newComparable = {\r\n CaseId: this.case.Id,\r\n URL: \"https://www.rightmove.co.uk/properties/118409864#/?channel=RES_BUY\",\r\n PropType: \"4 bed detached house\",\r\n Value: 1100000,\r\n IsGoodComparable: true,\r\n Comments:\r\n \"It is a very similar spec and layout to our property and is in the same side of the road - south-facing\",\r\n } as ComparablePropertyDTO;\r\n\r\n if (save) {\r\n this.saveComparable(this.newComparable);\r\n } else {\r\n this.case.Comparables.push(this.newComparable);\r\n }\r\n\r\n this.newComparable = {\r\n CaseId: this.case.Id,\r\n URL: \"https://www.rightmove.co.uk/properties/119098043#/?channel=RES_BUY\",\r\n PropType: \"4 bed detached house\",\r\n Value: 1510000,\r\n IsGoodComparable: true,\r\n Comments: \"Similar property - different street\",\r\n } as ComparablePropertyDTO;\r\n\r\n if (save) {\r\n this.saveComparable(this.newComparable);\r\n } else {\r\n this.case.Comparables.push(this.newComparable);\r\n }\r\n }\r\n\r\n autoFillTeammember(save: boolean = true) {\r\n this.newTeamMember = {\r\n UserId: this.currentUser.Id,\r\n CaseId: this.case.Id,\r\n TeamRole: \"TeamRole\",\r\n Name: \"Jane Doe\",\r\n Email: \"jane@jdarchitects.com\",\r\n Website: \"https://janedoearchitects.com/\",\r\n WorkedWithBefore: true,\r\n PreviousProjects: \"Worked with them on our project in Soho Square\",\r\n } as TeamMemberDTO;\r\n\r\n if (save) {\r\n this.saveTeamMember(this.newTeamMember);\r\n } else {\r\n this.case.TeamMembers.push(this.newTeamMember);\r\n }\r\n\r\n this.newTeamMember = {\r\n UserId: this.currentUser.Id,\r\n CaseId: this.case.Id,\r\n TeamRole: \"Main Contractor \",\r\n Name: \"JS Build & Design\",\r\n Email: \"JS Build & Design\",\r\n Website: \"https://jsbuildanddesign.com/\",\r\n WorkedWithBefore: true,\r\n PreviousProjects: \"https://jsbuildanddesign.com/\",\r\n } as TeamMemberDTO;\r\n\r\n if (save) {\r\n this.saveTeamMember(this.newTeamMember);\r\n } else {\r\n this.case.TeamMembers.push(this.newTeamMember);\r\n }\r\n }\r\n\r\n autofillCase() {\r\n this.autoFillComparable(false);\r\n this.autoFillTeammember(false);\r\n this.case.PurchaseProcessType = PurchaseProcessTypeEnum.RegularPurchase;\r\n this.case.PlanningPermissionType =\r\n PlanningPermissionTypeEnum.DetailedPlanning;\r\n this.case.PlanningResponsibility = PlanningResponsibilityEnum.Borrower;\r\n this.case.PlanningDescription =\r\n \"We purchased the site with outline planning 6 months ago, with a bridging loan.We havenow dealt with all reserved matters, and have detailed planning permission for 26x 3 & 4 bed houses.\";\r\n this.case.SiteDescriptionOnCompletion =\r\n \"The site will be bare land at completion.\";\r\n this.case.BuildProcurementType = BuildProcurementTypeEnum.SelfManaged;\r\n this.case.BuildProcurementDescription =\r\n \"We are managing the build ourselves and will tender the individual packages. We have worked this way on 3x previous personal projects. Prior to that one of our shareholders worked as a PM for 10 years at a regional house builder, managing projects of up to 150 houses. \";\r\n this.case.DepositDescription =\r\n \"50% of the deposit will come from the shareholders and 50% will come from investors. The investors are family and friends and their investment will be secured as a 2nd charge.\";\r\n this.case.GuaranteeDescription = \"This is the dummy text\";\r\n this.case.DevelopmentInput.CI_Dev_ExitStrategy =\r\n ExitStrategyEnum.PartSalePartRefinance;\r\n this.case.HasSetCompletionDate = true;\r\n let maxDate = Date.now();\r\n const timestamp = Math.floor(Math.random() * maxDate);\r\n this.case.CompletionDate = new Date(timestamp);\r\n this.case.DevelopmentInput.SearchPreferenceLoanSize = 1;\r\n this.case.DevelopmentInput.SearchPreferencePricing = 2;\r\n this.case.DevelopmentInput.SearchPreferenceCompletionSpeed = 3;\r\n this.case.DevelopmentInput.SearchPreferenceCustomerService = 4;\r\n this.case.DevelopmentInput.HowManyHouses = 2;\r\n this.caseService.autofillCase(this.case).then((response) => {\r\n window.location.reload();\r\n });\r\n }\r\n\r\n getNoteText(text: string) {\r\n if (this.isClient && text.startsWith(\"Project submitted to lenders\")) {\r\n return \"Project submitted to lenders\";\r\n } else {\r\n return text;\r\n }\r\n }\r\n\r\n updateRequestAssitanceCaseNoteMessage() {\r\n if (this.case?.CaseNotes != null && this.currentUser != null) {\r\n this.case.CaseNotes = this.case.CaseNotes.map((d) => {\r\n if (\r\n d.UserId != this.currentUser.Id &&\r\n (d.NoteText == \"Your have requested for assistance.\" ||\r\n d.NoteText == \"You have requested assistance.\")\r\n ) {\r\n return { ...d, NoteText: `${d.UserName} requested assistance.` };\r\n }\r\n return d;\r\n });\r\n }\r\n }\r\n\r\n closeSubmitToLenderModal() {\r\n this.showTsAndCs = false;\r\n this.brokerCommission =\r\n this.case.CaseStatus == CaseStatusEnum.NewCase\r\n ? this.org?.CommissionPercent\r\n : this.case.BrokerCommissionPercent;\r\n this.brokerPreferredContact =\r\n this.case.CaseStatus == CaseStatusEnum.NewCase\r\n ? this.caseBrokerUser?.PhoneNumber\r\n : this.case.BrokerPhoneNumber;\r\n this.isBrokerPhoneNumberUpdated = false;\r\n }\r\n\r\n validateEmails() {\r\n this.invalidEmail = false;\r\n\r\n angular.forEach(\r\n this.lendersDetailsForSubmittoLenders,\r\n (lenderdetails, index) => {\r\n var emailField = this.lenderDetailsForm[\"email\" + index];\r\n\r\n if (emailField && emailField.$invalid) {\r\n this.invalidEmail = true;\r\n }\r\n },\r\n );\r\n }\r\n}\r\n","import { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseLenderDTO } from \"@js/DTO/CaseLenderDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { CaseLenderService } from \"@js/services/CaseLenderService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class CaseLenderController {\r\n static $inject = [\r\n \"$routeParams\",\r\n \"LenderService\",\r\n \"$location\",\r\n \"CaseMemberService\",\r\n \"CaseService\",\r\n \"CaseLenderService\",\r\n \"RoleService\",\r\n \"UserService\",\r\n \"OrganisationService\",\r\n \"EventLogService\",\r\n \"$sce\",\r\n ];\r\n\r\n // have todays date\r\n todaysDate: Date = new Date();\r\n //To save url for Lender Logo Image\r\n lenderLogos: string[] = [];\r\n //To save the Lender Id and request Lender URL\r\n lenderId: number[] = [];\r\n // Controls showing the data loading \"spinner\"\r\n dataLoading: boolean = false;\r\n //Show lender names or Lender Generic Name\r\n showLenders: boolean = false;\r\n\r\n //get development Input Id\r\n developmentInputId: number;\r\n\r\n currentCase: CaseDTO;\r\n caseLenders: CaseLenderDTO[];\r\n // The lender the user has clicked apply/heads of terms/feedback for\r\n selectedCaseLender: CaseLenderDTO;\r\n // Controls showing the Application Terms and Conditions modal\r\n showApplyTsAndCs: boolean = false;\r\n // Controls showing the Preferred Lenders modal\r\n showPreferredPackagers: boolean = false;\r\n // Controls showing the application confirmation message\r\n showApplicationConfirmation: boolean = false;\r\n // Show the feedback modal\r\n showFeedbackModal: boolean = false;\r\n // Show the Information modal\r\n showInformationMessage: boolean = false;\r\n // show the button to confirm deleting the case lender\r\n showConfirmDeleteButton: boolean = false;\r\n // case to remove\r\n caseLender: CaseLenderDTO;\r\n // indicates whether a bid has been accepted on the case\r\n hasBidAccepted: boolean = false;\r\n\r\n // Message to be displayed in the message modal\r\n messageContent: string;\r\n\r\n showProceedModal: boolean = false;\r\n\r\n IsSupplimentInfoFilled: boolean = false;\r\n\r\n currentLenderPreferredBrokers: OrganisationDTO[];\r\n currentLenderPreferredPackagersText: string;\r\n hasLenderPreferredBrokers: boolean = false;\r\n emailCache = {};\r\n\r\n //Export Modal\r\n selectedLenders: { [lenderId: number]: boolean } = {};\r\n showExport: boolean = false;\r\n showExportButton: boolean = false;\r\n seeLenderNames: boolean = false;\r\n showLenderNames: boolean = true;\r\n\r\n currentUserOrg: OrganisationDTO;\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private lenderService: LenderService,\r\n private $location: ng.ILocationService,\r\n private caseMemberService: CaseMemberService,\r\n private caseService: CaseService,\r\n private caseLenderService: CaseLenderService,\r\n private roleService: RoleService,\r\n private userService: UserService,\r\n private organisationService: OrganisationService,\r\n private eventLogService: EventLogService,\r\n private $sce: ng.ISCEService,\r\n ) {\r\n this.lenderDisplayName();\r\n\r\n if (this.$routeParams.CaseId) {\r\n this.dataLoading = true;\r\n\r\n this.caseService\r\n .fetch(this.$routeParams.CaseId)\r\n .then((response) => {\r\n this.currentCase = response;\r\n this.developmentInputId = response.DevelopmentInputID;\r\n this.userService.GetDefaultBrokerOrganisation().then((result) => {\r\n this.currentUserOrg = result;\r\n this.seeLenderNames = result?.ShowLenderNames;\r\n this.caseLenderService\r\n .fetchByCaseId(this.$routeParams.CaseId, this.seeLenderNames)\r\n .then((response) => {\r\n this.caseLenders = response;\r\n\r\n for (var i = 0; i < this.caseLenders.length; i++) {\r\n this.lenderId[i] = this.caseLenders[i].LenderId;\r\n this.toggleLender(this.caseLenders[i]);\r\n }\r\n /*this.getAllLenderLogos(this.lenderId);*/\r\n\r\n var bidAccepted = this.caseLenders.find(\r\n (x) => x.IsBidAccepted == true,\r\n );\r\n\r\n if (bidAccepted) {\r\n this.hasBidAccepted = true;\r\n }\r\n this.dipRecieved();\r\n });\r\n });\r\n\r\n //TODO JLH - why is this being done??\r\n //this.caseService.setStatusOnCase(this.currentCase.Id, this.currentCase.CaseStatus);\r\n\r\n this.IsSupplimentInfoFilled =\r\n this.caseService.getIsSupplimentInfoFilled();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n ////Get URL for the specific lender\r\n //getLenderLogos(index: number) {\r\n // return this.lenderLogos[index];\r\n //}\r\n\r\n //// Get all URL for all Lender result\r\n //getAllLenderLogos(lenderId: number[]) {\r\n // this.lenderService.getAllLenderLogos(lenderId).then(result => {\r\n // this.lenderLogos = result;\r\n\r\n // })\r\n //}\r\n\r\n /** Redirects to the case dashboard */\r\n goToCaseDashboard() {\r\n this.$location.path(\"/casedashboard/\" + this.currentCase.Id);\r\n }\r\n\r\n /** Redirects to the user dashboard */\r\n goToUserDashboard() {\r\n this.userService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n /** Process the Heads of Terms button being clicked */\r\n headsOfTermsClicked(selectedCaseLender: CaseLenderDTO, index) {\r\n this.selectedCaseLender = selectedCaseLender;\r\n this.$location.path(\r\n \"/headsofterm/\" + this.currentCase.Id + \"/\" + this.selectedCaseLender.Id,\r\n );\r\n }\r\n /**\r\n * Process the feedback button being clicked\r\n * @param selectedCaseLender The lender associated with the button's row\r\n */\r\n feedbackButtonClicked(selectedCaseLender: CaseLenderDTO) {\r\n this.selectedCaseLender = selectedCaseLender;\r\n\r\n // Show the Feedback Modal\r\n this.showFeedbackModal = true;\r\n }\r\n\r\n lenderDisplayName() {\r\n this.organisationService.showLenderNamesAndLogos().then((result) => {\r\n this.showLenders = result;\r\n });\r\n }\r\n\r\n /**Process the Submit Terms and Conditions button being clicked */\r\n submitTsAndCsClicked() {\r\n this.showApplyTsAndCs = false;\r\n this.selectedCaseLender.IsBidAccepted = true;\r\n\r\n this.caseLenderService\r\n .addUpdate(this.selectedCaseLender)\r\n .then((response) => {\r\n this.selectedCaseLender.IsBidAccepted = response.IsBidAccepted;\r\n this.hasBidAccepted = response.IsBidAccepted;\r\n\r\n return this.caseLenderService.applyToLender(\r\n this.selectedCaseLender.CaseId,\r\n this.selectedCaseLender.Id,\r\n this.hasLenderPreferredBrokers,\r\n );\r\n })\r\n .then((response) => {\r\n this.selectedCaseLender.CaseLenderState = response.CaseLenderState;\r\n this.caseLenders = this.caseLenders.map((cl) =>\r\n cl.Id !== this.selectedCaseLender.Id ? cl : this.selectedCaseLender,\r\n );\r\n })\r\n .finally(() => {\r\n this.messageContent =\r\n \"Thank you for submitting an application with this lender.\";\r\n if (this.hasLenderPreferredBrokers) {\r\n this.showPreferredPackagers = true;\r\n } else {\r\n this.showInformationMessage = true;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Process the Apply button being clicked\r\n */\r\n submit(lender: CaseLenderDTO) {\r\n this.selectedCaseLender = lender;\r\n\r\n this.lenderService\r\n .getSelectedLenderPreferredOrgs(this.selectedCaseLender.LenderId)\r\n .then((response) => {\r\n this.currentLenderPreferredBrokers = response;\r\n\r\n return this.userService.getBrokerOrganisationId();\r\n })\r\n .then((response) => {\r\n //checks if broker that applies is not part of the preferred brokers list\r\n\r\n this.hasLenderPreferredBrokers =\r\n this.currentLenderPreferredBrokers != null &&\r\n this.currentLenderPreferredBrokers.length > 0 &&\r\n !this.currentLenderPreferredBrokers.some(\r\n (org) => org.Id === response,\r\n );\r\n\r\n if (this.hasLenderPreferredBrokers) {\r\n this.currentLenderPreferredBrokers.forEach((org) => {\r\n this.getBrokerAdminEmail(org);\r\n });\r\n }\r\n\r\n return this.lenderService.getLenderPreferredPackagersText(\r\n this.selectedCaseLender.LenderId,\r\n );\r\n })\r\n .then((response) => {\r\n this.currentLenderPreferredPackagersText = response;\r\n })\r\n .finally(() => {\r\n this.showApplyTsAndCs = true;\r\n });\r\n }\r\n\r\n /**\r\n * Process the Send Feedback button being clicked\r\n * @param message\r\n */\r\n sendFeedbackClicked() {\r\n this.caseLenderService\r\n .sendFeedbackToLender(this.selectedCaseLender)\r\n .then((response) => {\r\n this.messageContent = \"Your feedback has been sent to the lender.\";\r\n this.showInformationMessage = true;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while sending feedback to lender. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.showFeedbackModal = false;\r\n });\r\n }\r\n\r\n /**\r\n * Process the Apply button being clicked\r\n * @param currentCaseLender\r\n */\r\n applyClicked(selectedCaseLender: CaseLenderDTO) {\r\n this.selectedCaseLender = selectedCaseLender;\r\n\r\n // Show the Terms and Conditions modal\r\n this.showApplyTsAndCs = true;\r\n }\r\n /**\r\n * Process the Cancel Application button being clicked\r\n * @param currentCaseLender\r\n */\r\n\r\n cancelTerms(selectedCaseLender: CaseLenderDTO) {\r\n this.caseLenderService\r\n .getSelectedCaseLender(selectedCaseLender.Id, this.seeLenderNames)\r\n .then((response) => {\r\n this.selectedCaseLender = response;\r\n })\r\n .then(() => {\r\n if (\r\n this.selectedCaseLender.CaseLenderState == CaseLenderStateEnum.Applied\r\n ) {\r\n this.selectedCaseLender.IsBidAccepted = false;\r\n this.caseLenderService\r\n .addUpdate(this.selectedCaseLender)\r\n .then((response) => {\r\n this.selectedCaseLender.IsBidAccepted = response.IsBidAccepted;\r\n this.hasBidAccepted = response.IsBidAccepted;\r\n\r\n return this.caseLenderService.cancelApplication(\r\n this.selectedCaseLender.CaseId,\r\n this.selectedCaseLender.Id,\r\n );\r\n })\r\n .then((response) => {\r\n this.selectedCaseLender.CaseLenderState =\r\n response.CaseLenderState;\r\n this.caseLenders = this.caseLenders.map((cl) =>\r\n cl.Id !== this.selectedCaseLender.Id\r\n ? cl\r\n : this.selectedCaseLender,\r\n );\r\n })\r\n .finally(() => {\r\n this.messageContent =\r\n \"Application with this lender has been cancelled.\";\r\n this.showInformationMessage = true;\r\n });\r\n } else {\r\n this.messageContent =\r\n \"There was a problem with cancelling this application. Please refresh and try again.\";\r\n this.showInformationMessage = true;\r\n }\r\n });\r\n\r\n //this.showProceedModal = true;\r\n }\r\n\r\n getStatusText(selectedCaseLender: CaseLenderDTO): string {\r\n var statusText = \"\";\r\n\r\n if (this.roleService.IsLender) {\r\n statusText = this.caseLenderService.getStatusTextForLender(\r\n selectedCaseLender.CaseLenderState,\r\n selectedCaseLender.IsBidAccepted,\r\n );\r\n } else {\r\n switch (selectedCaseLender.CaseLenderState) {\r\n case CaseLenderStateEnum.Offered: {\r\n if (this.hasBidAccepted) {\r\n statusText = selectedCaseLender.IsBidAccepted\r\n ? \"DIP received and accepted\"\r\n : \"DIP received but applying to another lender\";\r\n } else {\r\n statusText = \"DIP received\";\r\n }\r\n break;\r\n }\r\n case CaseLenderStateEnum.Received: {\r\n statusText = \"Awaiting DIP\";\r\n if (this.hasBidAccepted) {\r\n statusText = \"Awaiting DIP but applying to another lender\";\r\n } else {\r\n statusText = \"Awaiting DIP\";\r\n }\r\n break;\r\n }\r\n case CaseLenderStateEnum.Cancelled: {\r\n if (this.hasBidAccepted) {\r\n statusText = \"Application cancelled but applying to another lender\";\r\n } else {\r\n statusText = \"Application cancelled\";\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return statusText;\r\n }\r\n\r\n editApplicationDetails() {\r\n this.$location.path(\"/applicationdetails/\" + this.currentCase.Id);\r\n }\r\n\r\n deleteButton(caseLender: CaseLenderDTO) {\r\n this.showConfirmDeleteButton = true;\r\n this.showInformationMessage = true;\r\n this.messageContent =\r\n \"Are you sure you want to remove \" + caseLender.LenderName + \"?\";\r\n this.caseLender = caseLender;\r\n }\r\n\r\n delete() {\r\n this.caseLenderService\r\n .markasdeleted(this.caseLender.Id)\r\n .then((result) => {\r\n this.caseLenders = this.caseLenders.filter(\r\n (x) => x.Id != this.caseLender.Id,\r\n );\r\n })\r\n .finally(() => {\r\n this.showInformationMessage = false;\r\n delete this.caseLender;\r\n this.showConfirmDeleteButton = false;\r\n });\r\n }\r\n\r\n /**\r\n * Determines whether to show the Shortlist More Lenders button.\r\n * Should be shown if there are less than 3 \"active\" shortlisted lenders i.e. haven't rejected/withdrawn\r\n * and no DIP is accepted\r\n * */\r\n showShortlistMoreLendersButton(): boolean {\r\n var showButton: boolean = false;\r\n if (this.caseLenders) {\r\n var activeShortlistCount = this.caseLenders.filter(\r\n (lender) =>\r\n lender.CaseLenderState != CaseLenderStateEnum.Withdrawn &&\r\n lender.CaseLenderState != CaseLenderStateEnum.Rejected,\r\n ).length;\r\n\r\n showButton = activeShortlistCount < 5 ? true : false;\r\n }\r\n\r\n //Hide button if DIP accepted\r\n if (this.hasBidAccepted) {\r\n showButton = false;\r\n }\r\n\r\n return showButton;\r\n }\r\n\r\n shortlistMoreLenders() {\r\n this.$location.path(\r\n \"/shortlistmore/\" +\r\n this.currentCase.DevelopmentInputID +\r\n \"/\" +\r\n this.currentCase.Id,\r\n );\r\n }\r\n\r\n toggleLender(lender: CaseLenderDTO) {\r\n this.selectedLenders[lender.Id] = !this.selectedLenders[lender.Id];\r\n }\r\n\r\n stateFilter(lender: CaseLenderDTO) {\r\n return (\r\n !lender.IsDeleted &&\r\n (lender.CaseLenderState === 2 || lender.CaseLenderState === 10)\r\n );\r\n }\r\n\r\n showAndHideExport() {\r\n this.showExport = !this.showExport;\r\n }\r\n\r\n getSelectedCaseLenders() {\r\n const selectedCaseLenders = this.caseLenders.filter(\r\n (lender) => this.selectedLenders[lender.Id],\r\n );\r\n return selectedCaseLenders;\r\n }\r\n\r\n areLendersSelected() {\r\n for (var lenderId in this.selectedLenders) {\r\n if (this.selectedLenders[lenderId]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n dipRecieved() {\r\n this.showExportButton = this.caseLenders.some(\r\n (lender) => lender.CaseLenderState === 2 || lender.CaseLenderState === 10,\r\n );\r\n }\r\n\r\n logPdfDownload() {\r\n this.eventLogService.logEvent(\r\n \"EXPORTDIPPDFCLICKED\",\r\n EventLogEnum.Export,\r\n ProductTypeEnum.Development,\r\n );\r\n }\r\n\r\n trustedHtml(plainText) {\r\n return this.$sce.trustAsHtml(plainText);\r\n }\r\n\r\n getBrokerAdminEmail(org: OrganisationDTO) {\r\n if (this.emailCache && this.emailCache[org.Id]) {\r\n return;\r\n }\r\n\r\n if (!org.PreferredPackagerEmail) {\r\n this.userService.getOrganisationAdminEmail(org.Id).then((response) => {\r\n this.emailCache[org.Id] = response;\r\n });\r\n } else {\r\n this.emailCache[org.Id] = org.PreferredPackagerEmail;\r\n }\r\n }\r\n\r\n showApplyButton(lender){\r\n if((this.hasBidAccepted == false || this.hasBidAccepted == null ) && (lender.CaseLenderState == CaseLenderStateEnum.Offered || lender.CaseLenderState == CaseLenderStateEnum.Cancelled)){\r\n return true;\r\n }\r\n \r\n return false;\r\n }\r\n \r\n showCancelApplicationButton(lender){\r\n if(lender.IsBidAccepted == true && lender.CaseLenderState == CaseLenderStateEnum.Applied){\r\n return true;\r\n }\r\n return false;\r\n\r\n }\r\n\r\n // We need this as deal and case shares the same view.\r\n showSendToPackagerButton(lender){\r\n return false;\r\n }\r\n}\r\n","import { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { LenderResultMinimalDTO } from \"@js/DTO/DevelopmentFinance/LenderResultMinimalDTO.cs.d\";\r\nimport { ProjectOwnershipDTO } from \"@js/DTO/DevelopmentFinance/ProjectOwnershipDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { ProductDTO } from \"@js/DTO/ProductDTO.cs.d\";\r\nimport { BuildProcurementTypeEnum } from \"@js/models/enum/BuildProcurementTypeEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { ExitStrategyEnum } from \"@js/models/enum/ExitStrategyEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { OwnNewDevelopmentEnum } from \"@js/models/enum/OwnNewDevelopmentEnum.cs.d\";\r\nimport { PlanningPermissionTypeEnum } from \"@js/models/enum/PlanningPermissionTypeEnum.cs.d\";\r\nimport { PlanningResponsibilityEnum } from \"@js/models/enum/PlanningResponsibilityEnum.cs.d\";\r\nimport { PurchaseProcessTypeEnum } from \"@js/models/enum/PurchaseProcessTypeEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { ApplicantService } from \"@js/services/ApplicantService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DevelopmentExperienceService } from \"@js/services/DevelopmentExperienceService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { LenderResultService } from \"@js/services/LenderResultService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { StreetAddressService } from \"@js/services/StreetAddressService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class CaseOverviewController {\r\n dataLoading: boolean = false;\r\n\r\n //Applicants displayed\r\n shareholders: CaseMemberDTO[];\r\n currentApplicant: CaseMemberDTO;\r\n applicantForm: ng.IFormController;\r\n addEditApplicant: CaseMemberDTO;\r\n confirmDeleteApplicant: CaseMemberDTO;\r\n tempApplicant: CaseMemberDTO;\r\n showQuickEditModal: boolean = false;\r\n showDelete: boolean = false;\r\n confirmationDelete: boolean = false;\r\n maxDateOfBirth: Date = new Date();\r\n minDateOfBirth: Date = new Date(\"Jan 01 1900\");\r\n maxDateForDateField: Date = new Date(\"Jan 01 3000\");\r\n message: string = \"\";\r\n modal: boolean = false;\r\n disableQuickEditSave: boolean = false;\r\n isAddShareholder: boolean;\r\n\r\n isAdmin: boolean;\r\n isBroker: boolean;\r\n shareholder: CaseMemberDTO;\r\n isPrimaryApplicant: boolean;\r\n\r\n //Open / close the sections\r\n ownership: boolean = false;\r\n siteDetails: boolean = false;\r\n planning: boolean = false;\r\n procurement: boolean = false;\r\n deposit: boolean = false;\r\n guarantees: boolean = false;\r\n exitStrategy: boolean = false;\r\n completion: boolean = false;\r\n mezzanine: boolean = false;\r\n preferences: boolean = false;\r\n existingRelationships: boolean = false;\r\n caseOverview: boolean = false;\r\n isExpanded: boolean = false;\r\n executiveSummary: boolean = false;\r\n\r\n //File Section\r\n\r\n thisModuleSection: ModuleEnum.Planning;\r\n fileUpload: FileAttachmentDTO[];\r\n fileUploadPlaning: FileAttachmentDTO[];\r\n fileUploadTeam: FileAttachmentDTO[];\r\n fileUploadProperties: FileAttachmentDTO[];\r\n selectedProduct: ProductDTO;\r\n selectedResult: LenderResultMinimalDTO;\r\n total: number = 0;\r\n openModal: boolean = false;\r\n uploadingFiles: FileUploadProgressDTO[];\r\n renamingFile: FileAttachmentDTO;\r\n\r\n //Case info\r\n loanCriteria: DevelopmentInputDTO;\r\n dateOfOrigPurchMonth: number;\r\n dateOfOrigPurchYear: number;\r\n case: CaseDTO;\r\n\r\n //Search address\r\n searchresults: string;\r\n PostCodeOptions: PostalAddress[] = [];\r\n searchterm: string;\r\n searchingForAddress: boolean = false;\r\n\r\n //Development Experience info\r\n companyDetails: ProjectOwnershipDTO;\r\n\r\n tinymceOptions: any;\r\n multiPartForm1: ng.IFormController;\r\n showAutofill: boolean;\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"CaseMemberService\",\r\n \"CaseService\",\r\n \"DevelopmentInputService\",\r\n \"$location\",\r\n \"StreetAddressService\",\r\n \"$q\",\r\n \"LenderResultService\",\r\n \"ApplicantService\",\r\n \"DevelopmentExperienceService\",\r\n \"FileAttachmentService\",\r\n \"$window\",\r\n \"RoleService\",\r\n \"AuthService\",\r\n \"UserService\",\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $caseMemberService: CaseMemberService,\r\n private caseService: CaseService,\r\n private developmentInputService: DevelopmentInputService,\r\n private $location: ng.ILocationService,\r\n private $streetAddressService: StreetAddressService,\r\n protected $q: ng.IQService,\r\n private $lenderresultservice: LenderResultService,\r\n private $applicantservice: ApplicantService,\r\n private $developmentexperienceservice: DevelopmentExperienceService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private roleService: RoleService,\r\n private $auth: AuthService,\r\n private userService: UserService,\r\n ) {\r\n this.tinymceOptions = {\r\n content_style:\r\n \"body {color: #304b9a;font:300 13.33px Roboto,sans-serif;}\",\r\n menubar: false,\r\n height: 300,\r\n branding: false,\r\n statusbar: false,\r\n plugins: [\r\n \"advlist autolink lists link image charmap print preview anchor\",\r\n \"searchreplace visualblocks code fullscreen\",\r\n \"insertdatetime media table paste code help wordcount\",\r\n ],\r\n toolbar:\r\n \"undo redo | formatselect | \" +\r\n \"bold italic backcolor forecolor | alignleft aligncenter \" +\r\n \"alignright alignjustify | bullist numlist outdent indent | preview fullscreen |\" +\r\n \"removeformat | help\",\r\n };\r\n\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n\r\n if (this.$routeParams.CaseId) {\r\n this.dataLoading = true;\r\n\r\n //case is needed to get loanCriteria information\r\n this.caseService\r\n .fetch(this.$routeParams.CaseId)\r\n .then((response) => {\r\n this.case = response;\r\n\r\n if (this.$routeParams.Planning) {\r\n this.planning = true;\r\n }\r\n\r\n if (this.case) {\r\n this.fileUpload = this.case.Attachments;\r\n\r\n this.$developmentexperienceservice\r\n .fetch(this.case.DevelopmentExperienceID)\r\n .then((response) => {\r\n this.companyDetails = response;\r\n });\r\n\r\n this.developmentInputService\r\n .fetch(this.case.DevelopmentInputID)\r\n .then((response) => {\r\n this.loanCriteria = response;\r\n\r\n if (this.loanCriteria) {\r\n if (this.loanCriteria.CI_Dev_DateOfOrigPurch) {\r\n this.dateOfOrigPurchMonth =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getMonth() + 1;\r\n this.dateOfOrigPurchYear =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getFullYear() %\r\n 100;\r\n }\r\n if (!this.loanCriteria.DI_PurchaseAgentFees) {\r\n this.loanCriteria.DI_PurchaseAgentFees = 0;\r\n }\r\n if (!this.loanCriteria.DI_PurchaseLegalFees) {\r\n this.loanCriteria.DI_PurchaseLegalFees = 0;\r\n }\r\n if (!this.loanCriteria.DI_PurchaseOtherFees) {\r\n this.loanCriteria.DI_PurchaseOtherFees = 0;\r\n }\r\n } else {\r\n // If there's no loan criteria then something has gone wrong\r\n this.$location.path(\"/dashboard\");\r\n }\r\n })\r\n .catch((error) => {\r\n this.$location.path(\"/dashboard\");\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n // If no case is returned, this could be that the logged in user has been removed from the case\r\n // - only do this if there is a logged in user, otherwise let the routing sort out where the redirect should go\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n this.$location.path(\"/dashboard\");\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n\r\n this.checkForAdmin();\r\n this.checkForBroker();\r\n this.checkForPrimaryUser();\r\n\r\n this.$caseMemberService\r\n .fetchByCaseId(this.$routeParams.CaseId)\r\n .then((response) => {\r\n this.shareholders = response;\r\n });\r\n }\r\n }\r\n\r\n checkForAdmin(): void {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isAdminUser()\r\n .then((response) => {\r\n this.isAdmin = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkForBroker(): void {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isBroker()\r\n .then((response) => {\r\n this.isBroker = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkForPrimaryUser(): boolean {\r\n if (\r\n (this.$rootScope as any).selectedUser &&\r\n this.case &&\r\n (this.$rootScope as any).selectedUser.UserName == this.case.OwnerUser\r\n ) {\r\n this.isPrimaryApplicant = true;\r\n return true;\r\n }\r\n\r\n this.isPrimaryApplicant = false;\r\n return false;\r\n }\r\n\r\n clientAccountAccessCheck(shareholder: CaseMemberDTO): boolean {\r\n if (this.shareholders) {\r\n this.shareholder = this.shareholders.find(\r\n (x) => x.UserId == shareholder.UserId,\r\n );\r\n }\r\n\r\n if (this.shareholder.UserId == (this.$rootScope as any).selectedUser.Id) {\r\n return true;\r\n }\r\n\r\n if (this.checkForPrimaryUser()) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getAddressList(app, searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions.length > 0\r\n ) {\r\n let addressLookup = this.PostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n app.DI_StreetAddress = address;\r\n this.searchterm = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.loanCriteria.DI_StreetAddress.AddressLine1 =\r\n addressLookup.AddressLine2.replace(\r\n addressLookup.AddressLine2.substring(\r\n addressLookup.AddressLine2.indexOf(\"-\") - 1,\r\n ),\r\n \"\",\r\n );\r\n this.loanCriteria.DI_StreetAddress.AddressLine2 =\r\n addressLookup.AddressLine3;\r\n this.loanCriteria.DI_StreetAddress.AddressLine3 =\r\n addressLookup.AddressLine4;\r\n this.loanCriteria.DI_StreetAddress.AddressLine4 =\r\n addressLookup.PostCode;\r\n this.loanCriteria.DI_StreetAddress.PostCode =\r\n addressLookup.AddressLine1;\r\n this.searchterm = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.PostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n save(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n if (!this.loanCriteria) {\r\n return defer.promise;\r\n }\r\n\r\n this.developmentInputService\r\n .addUpdatereturnonlyid(this.loanCriteria)\r\n .then((response) => {\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 20,\r\n false,\r\n \"\",\r\n \"\",\r\n \"\",\r\n this.loanCriteria.SearchName,\r\n )\r\n .then((results) => {});\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n if (this.case.CompletionDate) {\r\n var completionDate = new Date();\r\n completionDate.setHours(0, 0, 0, 0);\r\n this.case.CompletionDate = new Date(\r\n completionDate.setUTCFullYear(\r\n this.case.CompletionDate.getFullYear(),\r\n this.case.CompletionDate.getMonth(),\r\n this.case.CompletionDate.getDate(),\r\n ),\r\n );\r\n }\r\n\r\n this.caseService.addUpdatereturnonlyid(this.case).then((response) => {});\r\n\r\n this.$developmentexperienceservice\r\n .addUpdatereturnonlyid(this.companyDetails)\r\n .then((response) => {\r\n //set ID of selectedobject\r\n this.companyDetails.Id = response;\r\n //after save take out saving assoication each time\r\n this.companyDetails.parentCaseToAssoicateWithOnCreation = null;\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n this.goToCaseDashboard(false);\r\n\r\n return defer.promise;\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n /**\r\n * Calculates the order number of all the preferences when one is toggled\r\n * @param toggledPreference\r\n */\r\n calculatePreferenceOrder(toggledPreference: string) {\r\n const preferenceNames = [\r\n \"SearchPreferenceLoanSize\",\r\n \"SearchPreferencePricing\",\r\n \"SearchPreferenceCompletionSpeed\",\r\n \"SearchPreferenceCustomerService\",\r\n ];\r\n // Finds the highest preference order of all preferences\r\n const maxPreferenceOrder = Math.max(\r\n this.loanCriteria.SearchPreferenceCompletionSpeed,\r\n this.loanCriteria.SearchPreferenceCustomerService,\r\n this.loanCriteria.SearchPreferenceLoanSize,\r\n this.loanCriteria.SearchPreferencePricing,\r\n );\r\n\r\n // If the preference that has been toggled already has a value greater than 0 then it is being turned OFF\r\n if (this.loanCriteria[toggledPreference] > 0) {\r\n // Find any preferences that have a higher preference number and decrease their order number by 1\r\n for (let preference of preferenceNames) {\r\n if (preference == toggledPreference) {\r\n continue;\r\n } else {\r\n if (\r\n this.loanCriteria[preference] > this.loanCriteria[toggledPreference]\r\n ) {\r\n this.loanCriteria[preference]--;\r\n }\r\n }\r\n }\r\n\r\n this.loanCriteria[toggledPreference] = 0;\r\n } else {\r\n // Preference is being turned ON\r\n // Use the highest preference order number and increase by 1\r\n this.loanCriteria[toggledPreference] = maxPreferenceOrder + 1;\r\n }\r\n }\r\n\r\n goToCaseDashboard(saveChanges: boolean): void {\r\n if (saveChanges && !this.roleService.IsLender) {\r\n this.save().then((response) => {\r\n (this.$rootScope as any).formSaved = true;\r\n this.$location.path(\"/casedashboard/\" + this.case.Id);\r\n });\r\n } else {\r\n this.$location.path(\"/casedashboard/\" + this.case.Id);\r\n }\r\n }\r\n\r\n /** Initialise the CaseMemberDTO for adding a new Shareholder/Applicant */\r\n initialiseNewApplicant() {\r\n this.addEditApplicant = {\r\n AccessLevel: CaseAccessLevelEnum.FullAccess,\r\n CaseId: this.$routeParams.CaseId,\r\n IsApplicant: true,\r\n Order:\r\n this.shareholders && this.shareholders.length > 0\r\n ? this.shareholders.length + 1\r\n : 1,\r\n StreetAddress: {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress,\r\n } as CaseMemberDTO;\r\n }\r\n\r\n deleteApplicant(): void {\r\n var id = this.confirmDeleteApplicant.Id;\r\n\r\n this.$applicantservice.delete(id).then((response) => {\r\n var index = this.shareholders\r\n .map(function (s) {\r\n return s.Id;\r\n })\r\n .indexOf(id);\r\n\r\n //let index = this.shareholders.indexOf(this.confirmDeleteApplicant);\r\n this.shareholders.splice(index, 1);\r\n });\r\n this.confirmDeleteApplicant = {} as CaseMemberDTO;\r\n this.showDelete = false;\r\n }\r\n\r\n deleteConfirmApplicant(applicant: CaseMemberDTO) {\r\n this.showDelete = true;\r\n this.confirmDeleteApplicant = { ...applicant };\r\n }\r\n\r\n /**\r\n * Open the Shareholder/Applicant quick edit\r\n * @param applicant\r\n */\r\n openShareholderQuickEdit(applicant: CaseMemberDTO) {\r\n if (applicant) {\r\n this.isAddShareholder = false;\r\n this.addEditApplicant = applicant;\r\n this.tempApplicant = { ...this.addEditApplicant };\r\n } else {\r\n this.isAddShareholder = true;\r\n if (this.applicantForm) {\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n }\r\n\r\n this.initialiseNewApplicant();\r\n }\r\n\r\n this.showQuickEditModal = true;\r\n }\r\n\r\n /** Cancel any adding or editing of a Shareholder/Applicant */\r\n cancelShareholderQuickEdit() {\r\n if (this.tempApplicant && this.tempApplicant.Id > 0) {\r\n this.shareholders = this.shareholders.filter(\r\n (applicant) => applicant.Id != this.tempApplicant.Id,\r\n );\r\n this.shareholders.push(this.tempApplicant);\r\n }\r\n\r\n this.closeShareholderQuickEdit();\r\n }\r\n\r\n /** Save a new or updated Shareholder/Applicant */\r\n saveApplicant(): void {\r\n this.disableQuickEditSave = true; // this is just because sometimes the save takes a little while and the user could click the save button again\r\n\r\n this.$applicantservice\r\n .addOrUpdateCaseMember(this.addEditApplicant, this.isAddShareholder)\r\n .then((response) => {\r\n response.DateOfBirth = this.addEditApplicant.DateOfBirth; // TODO should try to parse the response.DOB as it's being returned as a string\r\n\r\n const existingShareholder = this.shareholders.find(\r\n (s) => s.Id == response.Id,\r\n );\r\n\r\n // If found then we're updating\r\n if (existingShareholder) {\r\n this.shareholders = this.shareholders.filter(\r\n (member) => member.Id != this.addEditApplicant.Id,\r\n );\r\n this.shareholders.push(response);\r\n } else {\r\n this.shareholders.push(response);\r\n }\r\n })\r\n .finally(() => {\r\n this.closeShareholderQuickEdit();\r\n this.disableQuickEditSave = false;\r\n });\r\n }\r\n\r\n goToApplicantDetails(applicant: CaseMemberDTO): void {\r\n //change applicant.id to index (use a for loop to iterate through dto)\r\n var applicantId;\r\n\r\n for (let i = 0; i <= this.shareholders.length - 1; i++) {\r\n if (this.shareholders[i].Id == applicant.Id) {\r\n applicantId = i;\r\n }\r\n }\r\n if (applicantId || applicantId == 0) {\r\n this.go(\r\n \"/applicantdetails/\" +\r\n this.case.Id +\r\n \"/\" +\r\n this.case.DevelopmentExperienceID +\r\n \"/4/\" +\r\n applicantId,\r\n );\r\n }\r\n }\r\n\r\n closeShareholderQuickEdit() {\r\n this.showQuickEditModal = false;\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n this.tempApplicant = {} as CaseMemberDTO;\r\n this.addEditApplicant = {} as CaseMemberDTO;\r\n }\r\n\r\n /** Get the text to display based on the ownership type selected */\r\n getOwnershipTypeText(): string {\r\n var ownershipTypeText;\r\n\r\n if (\r\n this.companyDetails &&\r\n this.companyDetails.HowWillYouOwnNewDevelopment\r\n ) {\r\n switch (this.companyDetails.HowWillYouOwnNewDevelopment) {\r\n case OwnNewDevelopmentEnum.UKLimitedCompany:\r\n ownershipTypeText = \"UK Limited Company\";\r\n break;\r\n case OwnNewDevelopmentEnum.OverseasLimitedCompany:\r\n ownershipTypeText = \"Overseas Limited Company\";\r\n break;\r\n case OwnNewDevelopmentEnum.PensionFund:\r\n ownershipTypeText = \"Pension Fund\";\r\n break;\r\n case OwnNewDevelopmentEnum.UKLimitedLiabilityPartnership:\r\n ownershipTypeText = \"UK Limited Liability Partnership\";\r\n break;\r\n default:\r\n ownershipTypeText = \"\";\r\n }\r\n return ownershipTypeText;\r\n }\r\n return \"\";\r\n }\r\n\r\n /**Determine whether to show CompanyOrPartnershipName */\r\n showCompanyOrPartnershipName(): boolean {\r\n if (\r\n this.companyDetails &&\r\n this.companyDetails.HowWillYouOwnNewDevelopment !=\r\n OwnNewDevelopmentEnum.PersonalNames &&\r\n this.companyDetails.HasTheCompanyOrPensionBeenFormedYet\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**Determine whether to show CompanyOrPartnershipNumber */\r\n showCompanyOrPartnershipNumber(): boolean {\r\n if (\r\n this.companyDetails &&\r\n this.companyDetails.HowWillYouOwnNewDevelopment !=\r\n OwnNewDevelopmentEnum.PersonalNames &&\r\n this.companyDetails.HasTheCompanyOrPensionBeenFormedYet\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**Determine whether to show PensionType */\r\n showPensionType(): boolean {\r\n if (\r\n this.companyDetails &&\r\n this.companyDetails.HowWillYouOwnNewDevelopment ==\r\n OwnNewDevelopmentEnum.PensionFund &&\r\n this.companyDetails.HasTheCompanyOrPensionBeenFormedYet\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** Determing whether to show the Tell us more fields */\r\n showTellUsMoreFields(): boolean {\r\n if (\r\n this.companyDetails &&\r\n this.companyDetails.HowWillYouOwnNewDevelopment !=\r\n OwnNewDevelopmentEnum.PersonalNames &&\r\n this.companyDetails.HowWillYouOwnNewDevelopment !=\r\n OwnNewDevelopmentEnum.Other\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n setDate(dateToUpdate: Date, month: number, year: number) {\r\n // Two digit years!\r\n var fullYear: number;\r\n var today = new Date();\r\n if (today.getFullYear() < 2000 + year) {\r\n // If it's after this year, we probably mean 19xx.\r\n fullYear = 1900 + year;\r\n } else {\r\n // Otherwise it's probably in the 2000s.\r\n fullYear = 2000 + year;\r\n }\r\n dateToUpdate.setUTCFullYear(fullYear);\r\n // Note: Months are 0 based.\r\n dateToUpdate.setUTCMonth(month - 1);\r\n }\r\n\r\n invite(applicant: CaseMemberDTO) {\r\n this.$caseMemberService\r\n .inviteApplicant(applicant.UniqueRef)\r\n .then((i) => {\r\n this.modal = true;\r\n this.message = \"Your email was successfully sent.\";\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"there was a problem on sending the email. Please try again later.\";\r\n });\r\n }\r\n\r\n //File upload\r\n\r\n //calculateFilesForThisModule() {\r\n // this.fileUploadPlaning = this.fileUpload.filter(file => file.Module === ModuleEnum.Planning);\r\n //this.fileUploadTeam = this.fileUpload.filter(file => file.Module === ModuleEnum.ProfessionalTeam);\r\n //this.fileUploadProperties = this.fileUpload.filter(file => file.Module === ModuleEnum.ComparableProperties);\r\n //}\r\n\r\n calculateTotalFiles(filter: number) {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module === filter,\r\n ).length;\r\n }\r\n return this.total;\r\n }\r\n\r\n onFileSelect(\r\n files: FileAttachmentDTO[],\r\n module: ModuleEnum = this.thisModuleSection,\r\n ) {\r\n if (files.length > 0) {\r\n //if case has no id it must be saved first\r\n if (this.case.Id < 1) {\r\n this.caseService\r\n .addUpdate(this.case)\r\n .then((response) => {\r\n this.case = response;\r\n this.onFileSelect(files, module); //call itself and then exit as should now be saved so should be able to run\r\n return;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n return;\r\n }\r\n this.fileAttachmentService\r\n .UploadFileLstInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.case.Id,\r\n this.fileUpload,\r\n module,\r\n )\r\n .then((result) => {\r\n this.openModal = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: FileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.fileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n downloadFilesAsZip(files: FileAttachmentDTO) {\r\n var keys: string[] = [];\r\n for (var file in files) {\r\n if (files[file].FileLocation) {\r\n keys.push(files[file].FileLocation);\r\n }\r\n }\r\n this.fileAttachmentService.downloadZip(keys);\r\n }\r\n\r\n deleteFile(file: FileAttachmentDTO) {\r\n this.case.Attachments.splice(this.case.Attachments.indexOf(file), 1);\r\n this.fileAttachmentService.markasdeleted(file.Id).then((result) => {\r\n // code for file upload\r\n //this.calculateFilesForThisModule();\r\n }); //remove on the server\r\n // this.$rootScope.$apply();\r\n }\r\n renameFile(file: FileAttachmentDTO) {\r\n if (this.renamingFile === undefined) {\r\n // if renaming this file will dirty the case, we'll want to set it back to pristine when we're done.\r\n // this.renamingFileDirties = !$scope.caseForm.$dirty;\r\n this.renamingFile = file;\r\n } else {\r\n delete this.renamingFile;\r\n }\r\n }\r\n renamingFileComplete(file: FileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.fileAttachmentService\r\n .renameFile(file)\r\n .then((response) => {\r\n file.TempURL = response.TempURL;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n expandOrCollapse(value: boolean) {\r\n this.ownership = value;\r\n this.siteDetails = value;\r\n this.planning = value;\r\n this.procurement = value;\r\n this.deposit = value;\r\n this.guarantees = value;\r\n this.exitStrategy = value;\r\n this.completion = value;\r\n this.mezzanine = value;\r\n this.preferences = value;\r\n this.existingRelationships = value;\r\n this.caseOverview = value;\r\n return value;\r\n }\r\n\r\n /**\r\n * Determines when to show/hide the Invite button\r\n * @param shareholder\r\n */\r\n showInviteButton(shareholder: CaseMemberDTO) {\r\n // If the shareholder has already been verified then don't show the button\r\n if (shareholder.IsVerified) {\r\n return false;\r\n }\r\n\r\n // At least 2 of the security questions should be answered\r\n var count = 0;\r\n\r\n if (shareholder.PhoneNumber) {\r\n count++;\r\n }\r\n\r\n if (shareholder.StreetAddress.PostCode) {\r\n count++;\r\n }\r\n\r\n if (shareholder.DateOfBirth) {\r\n count++;\r\n }\r\n\r\n if (count >= 2) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n autoFillCaseOverview() {\r\n this.loanCriteria.DI_StreetAddress.AddressLine1 = \"10 Kings Road\";\r\n this.loanCriteria.DI_StreetAddress.AddressLine2 = \"York\";\r\n this.loanCriteria.DI_StreetAddress.AddressLine3 = \"\";\r\n this.loanCriteria.DI_StreetAddress.AddressLine4 = \"\";\r\n this.loanCriteria.DI_StreetAddress.PostCode = \"YO1 1ET\";\r\n this.loanCriteria.DI_AreaSalesAreaResidential = 1000;\r\n this.case.PurchaseProcessType = PurchaseProcessTypeEnum.RegularPurchase;\r\n this.case.PlanningPermissionType = PlanningPermissionTypeEnum.NoPlanning;\r\n this.case.PlanningResponsibility = PlanningResponsibilityEnum.Borrower;\r\n this.case.PlanningDescription =\r\n \"We purchased the site with outline planning 6 months ago, with a bridging loan.We havenow dealt with all reserved matters, and have detailed planning permission for 26x 3 & 4 bed houses.\";\r\n this.case.SiteDescriptionOnCompletion =\r\n \"The site will be bare land at completion.\";\r\n this.case.BuildProcurementType =\r\n BuildProcurementTypeEnum.DesignAndBuildContract;\r\n this.case.DepositDescription =\r\n \"50% of the deposit will come from the shareholders and 50% will come from investors. The investors are family and friends and their investment will be secured as a 2nd charge.\";\r\n this.case.GuaranteeDescription = \"This is the dummy text\";\r\n this.loanCriteria.CI_Dev_ExitStrategy =\r\n ExitStrategyEnum.PartSalePartRefinance;\r\n this.case.HasSetCompletionDate = true;\r\n const maxDate = Date.now();\r\n const timestamp = Math.floor(Math.random() * maxDate);\r\n this.case.CompletionDate = new Date(timestamp);\r\n this.loanCriteria.SearchPreferenceLoanSize = 1;\r\n this.loanCriteria.SearchPreferencePricing = 2;\r\n this.loanCriteria.SearchPreferenceCompletionSpeed = 3;\r\n this.loanCriteria.SearchPreferenceCustomerService = 4;\r\n this.companyDetails.ExcludedLenders = \"Example Lenders\";\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseSummaryDTO } from \"@js/DTO/CaseSummaryDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { DevelopmentWithNoLoginDTO } from \"@js/DTO/DevelopmentWithNoLoginDTO.cs.d\";\r\nimport { IntroducerSimpleDTO } from \"@js/DTO/IntroducerSimpleDTO.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { CaseSummaryService } from \"@js/services/CaseSummaryService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { DevelopmentInputWithNoLoginService } from \"@js/services/DevelopmentInputWithNoLoginService\";\r\nimport { IntroducerService } from \"@js/services/IntroducerService\";\r\nimport { IntroducerSimpleService } from \"@js/services/IntroducerSimpleService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class ClientDashboardController {\r\n dataLoading: boolean = false;\r\n\r\n //Introducers\r\n introducerFirstLogin: boolean = false;\r\n introduceClientModal: number = null;\r\n clientFirstName: string;\r\n clientSurname: string;\r\n clientEmail: string;\r\n clientPhoneNumber: string;\r\n notifyBorrower: boolean = true;\r\n introducedUsers: ApplicationUserDTO[];\r\n hideCaseCreation: boolean = false;\r\n fetchingResults: boolean;\r\n savedResults: DevelopmentInputDTO[];\r\n unsavedIntroducedSearches: DevelopmentWithNoLoginDTO[];\r\n savedIntroducedSearches: DevelopmentInputDTO[] = [];\r\n savedCases: DevelopmentInputDTO[];\r\n allResults: DevelopmentInputDTO[];\r\n selectedResult: DevelopmentInputDTO;\r\n\r\n shareEmails: string = \"\";\r\n multipleEmails: boolean = false;\r\n\r\n shareEmailsArray: string[];\r\n\r\n caseSummaryList: CaseSummaryDTO[];\r\n myCaseSummaryList: CaseSummaryDTO[];\r\n allCaseSummaryList: CaseSummaryDTO[];\r\n selectedUser: ApplicationUserDTO;\r\n userSearchResults: ApplicationUserDTO[];\r\n adminUser: boolean = false;\r\n isBroker: boolean = false;\r\n isLender: boolean = false;\r\n currentUser: ApplicationUserDTO = null;\r\n selecteduserName: string = null;\r\n OtherUsers: string[] = null;\r\n newSearchName: string;\r\n link: string;\r\n\r\n introducerSimpleDetails: IntroducerSimpleDTO;\r\n\r\n introducerId: number;\r\n\r\n clientAdminTools: boolean = false;\r\n\r\n showSetPasswordModal: boolean = false;\r\n verifyNewPassword: string;\r\n passwordSetSuccess: boolean = false;\r\n registrationForm: FormData;\r\n\r\n introducerErrorDisplayed: boolean = false;\r\n\r\n referrerOptions = [];\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"DevelopmentInputService\",\r\n \"DevelopmentInputWithNoLoginService\",\r\n \"UserService\",\r\n \"CaseService\",\r\n \"RoleService\",\r\n \"AuthService\",\r\n \"IntroducerService\",\r\n \"IntroducerSimpleService\",\r\n \"CaseSummaryService\",\r\n \"$cookies\",\r\n \"SelectListService\",\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private $DevelopmentInputWithNoLoginService: DevelopmentInputWithNoLoginService,\r\n private $user: UserService,\r\n private $CaseService: CaseService,\r\n private roleService: RoleService,\r\n private authService: AuthService,\r\n private $IntroducerService: IntroducerService,\r\n private $IntroducerSimpleService: IntroducerSimpleService,\r\n private $CaseSummaryService: CaseSummaryService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private selectListService: SelectListService,\r\n ) {\r\n this.initialise();\r\n this.referrerOptions = this.selectListService.GetReferrerOptions();\r\n }\r\n\r\n initialise() {\r\n //Introducers\r\n this.introducerFirstLogin = (this.$rootScope as any).introducerFirstLogin;\r\n //get type of user\r\n this.roleService.isBrokerOrABove().then((response) => {\r\n this.adminUser = response;\r\n this.authService.getProfile().then((prof) => {\r\n this.currentUser = prof;\r\n //If half-registered user hasn't set a password, then prompt them to set one\r\n if (this.currentUser.TemporaryAccount === true) {\r\n this.showSetPasswordModal = true;\r\n }\r\n\r\n //Get my introducer's details\r\n this.$IntroducerSimpleService.getintroducerdetails().then((i) => {\r\n this.introducerSimpleDetails = i;\r\n });\r\n\r\n this.introducerId = prof.RegisteredIntroducerId;\r\n if (prof.RegisteredIntroducerId) {\r\n this.updateIntroducedSearches(prof.RegisteredIntroducerId);\r\n //this.updateIntroducedClientList(prof.RegisteredIntroducerId);\r\n }\r\n this.updateResults();\r\n });\r\n });\r\n }\r\n\r\n isValidEmail() {\r\n var regex = /^([\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4})?$/;\r\n this.shareEmailsArray = this.shareEmails.replace(/\\s/g, \"\").split(/,|;/);\r\n for (var i = 0; i < this.shareEmailsArray.length; i++) {\r\n if (!regex.test(this.shareEmailsArray[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n viewClientsDashboard(userName: string) {\r\n //Look up client's account details\r\n this.dataLoading = true;\r\n this.$user.searchByEmail(userName).then((users) => {\r\n this.selectedUser = users[0];\r\n this.selecteduserName = users[0].Email;\r\n (this.$rootScope as any).clientUsernameBeingViewed = users[0].Email;\r\n this.updateResults();\r\n this.clientAdminTools = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n exitClientView(): void {\r\n (this.$rootScope as any).clientUsernameBeingViewed = null;\r\n this.selecteduserName = this.currentUser.UserName;\r\n this.updateResults();\r\n this.clientAdminTools = true;\r\n }\r\n\r\n userLookup(userSearchTerm: string) {\r\n this.fetchingResults = true;\r\n this.$user\r\n .searchByEmail(userSearchTerm)\r\n .then((response) => {\r\n this.userSearchResults = response;\r\n })\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n\r\n saveBlankSearch() {\r\n this.fetchingResults = true;\r\n let newDTO = {} as DevelopmentInputDTO;\r\n newDTO.OwnerUser = this.selecteduserName;\r\n newDTO.UserId = this.selectedUser.Id;\r\n newDTO.SaveQueryAndResults = true;\r\n newDTO.SearchName = this.newSearchName;\r\n newDTO.CI_Dev_Contingency = 0.05;\r\n this.$DevelopmentInputservice\r\n .addBlankSearch(newDTO)\r\n .then((response) => {\r\n this.$location.path(\"/criteria/\" + response.Id);\r\n })\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n\r\n newBlankCase() {\r\n var currentdate = new Date();\r\n\r\n var SearchName =\r\n \"My Loan Search \" +\r\n currentdate.getDate() +\r\n \"/\" +\r\n (currentdate.getMonth() + 1) +\r\n \"/\" +\r\n currentdate.getFullYear();\r\n\r\n this.fetchingResults = true;\r\n let newDTO = {} as DevelopmentInputDTO;\r\n newDTO.OwnerUser = this.currentUser.UserName;\r\n newDTO.UserId = this.currentUser.Id;\r\n newDTO.SaveQueryAndResults = true;\r\n newDTO.SearchName = SearchName;\r\n newDTO.CI_Dev_Contingency = 0.05;\r\n this.$DevelopmentInputservice\r\n .saveSearch(newDTO)\r\n .then((response) => {\r\n newDTO.Id = response;\r\n this.makeCase(newDTO);\r\n })\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n\r\n updateResults() {\r\n this.fetchingResults = true;\r\n let userForResults: string;\r\n if (this.selecteduserName) {\r\n userForResults = this.selecteduserName;\r\n } else if ((this.$rootScope as any).clientUsernameBeingViewed) {\r\n userForResults = (this.$rootScope as any).clientUsernameBeingViewed;\r\n } else {\r\n userForResults = this.currentUser.UserName;\r\n }\r\n this.selecteduserName = userForResults;\r\n if (this.selecteduserName !== this.currentUser.UserName) {\r\n this.$user.searchByEmail(this.selecteduserName).then((users) => {\r\n this.selectedUser = users[0];\r\n });\r\n }\r\n this.$DevelopmentInputservice\r\n .listbyusername(userForResults)\r\n .then((results) => {\r\n if (this.adminUser) {\r\n this.allResults = results;\r\n const distinct = (value: string, index: number, self: string[]) => {\r\n return self.indexOf(value) === index;\r\n };\r\n this.OtherUsers = this.allResults\r\n .map((s) => s.OwnerUser)\r\n .filter(distinct)\r\n .sort();\r\n this.allResults.map((s) => s.UserId);\r\n\r\n this.ApplyFilterOnUsers();\r\n } else {\r\n this.savedResults = results.filter((x) => !x.IsFullCase);\r\n this.savedCases = results.filter((x) => x.IsFullCase);\r\n }\r\n })\r\n .catch((error) => {})\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n\r\n updateIntroducedSearches(RegisteredIntroducerId: number) {\r\n if (!RegisteredIntroducerId) {\r\n return;\r\n }\r\n this.$DevelopmentInputWithNoLoginService\r\n .fetchByIntroducerId(RegisteredIntroducerId)\r\n .then((results) => {\r\n this.unsavedIntroducedSearches = results.filter(\r\n (r) => r.IntroducedSearchStatus < 2,\r\n );\r\n let savedIntroducedSearchesIdentified = results.filter(\r\n (r) => r.IntroducedSearchStatus >= 2,\r\n );\r\n if (savedIntroducedSearchesIdentified.length > 0) {\r\n this.$DevelopmentInputservice\r\n .fetchByIntroducerId(RegisteredIntroducerId)\r\n .then((devInputResults) => {\r\n this.savedIntroducedSearches = devInputResults;\r\n });\r\n }\r\n\r\n this.updateIntroducedClientList();\r\n });\r\n }\r\n\r\n updateIntroducedClientList() {\r\n this.$user.getintroducees(this.currentUser.Id).then((introducedUsers) => {\r\n this.introducedUsers = introducedUsers;\r\n });\r\n }\r\n ApplyFilterOnUsers() {\r\n this.clientAdminTools = false;\r\n this.savedResults = this.allResults.filter(\r\n (x) => !x.IsFullCase && x.OwnerUser == this.selecteduserName,\r\n );\r\n this.savedCases = this.allResults.filter(\r\n (x) => x.IsFullCase && x.OwnerUser == this.selecteduserName,\r\n );\r\n (this.$rootScope as any).clientUsernameBeingViewed = this.selecteduserName;\r\n }\r\n\r\n makeCase(loanCriteria: DevelopmentInputDTO) {\r\n this.$CaseService\r\n .promotesearchtocase(loanCriteria.Id, null, null)\r\n .then((result: number) => {\r\n if (result) {\r\n loanCriteria.CaseId = result;\r\n this.savedCases.push(loanCriteria);\r\n this.savedResults.splice(this.savedResults.indexOf(loanCriteria), 1);\r\n loanCriteria.IsFullCase = true;\r\n }\r\n this.viewCase(loanCriteria);\r\n });\r\n }\r\n delete(loanCriteriaId: number, loanType: number, index: number) {\r\n switch (loanType) {\r\n case 0:\r\n //Full case\r\n this.$DevelopmentInputservice\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n this.savedCases.splice(index, 1);\r\n });\r\n break;\r\n case 1:\r\n //Saved search\r\n this.$DevelopmentInputservice\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n this.savedResults.splice(index, 1);\r\n });\r\n break;\r\n case 2:\r\n //Introducer: Referred search, not claimed by introducee yet\r\n this.$DevelopmentInputWithNoLoginService\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n this.unsavedIntroducedSearches.splice(index, 1);\r\n });\r\n break;\r\n case 3:\r\n //Introducer: Referred search, claimed by introducee\r\n this.$DevelopmentInputservice\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n this.savedIntroducedSearches.splice(index, 1);\r\n });\r\n break;\r\n }\r\n }\r\n viewCase(loanCriteria: DevelopmentInputDTO) {\r\n //this.$CaseService.getcasefromsearch(loanCriteria.Id).then((result) => {\r\n if (loanCriteria.IsFullCase && loanCriteria.CaseId) {\r\n this.$location.path(\"/casedashboard/\" + loanCriteria.CaseId);\r\n } else if (loanCriteria.Id) {\r\n this.$location.path(\"/results/\" + loanCriteria.Id);\r\n }\r\n //});\r\n }\r\n\r\n viewResults(loanCriteria: DevelopmentInputDTO) {\r\n if (loanCriteria.IsFullCase && loanCriteria.CaseId) {\r\n // this.$CaseService.getcasefromsearch(loanCriteria.Id).then((result) => {\r\n //need to tweak a bit when we have all the case status.\r\n this.$CaseService.updateTubeMap(loanCriteria.CaseStatus);\r\n this.$location.path(\r\n \"/results/\" + loanCriteria.Id + \"/\" + loanCriteria.CaseId,\r\n );\r\n //});\r\n } else if (loanCriteria.Id) {\r\n this.$location.path(\"/results/\" + loanCriteria.Id);\r\n }\r\n }\r\n viewIntroducedResults(loanCriteria: DevelopmentWithNoLoginDTO) {\r\n this.$location.path(\"/referredSearch/\" + loanCriteria.UniqueRef);\r\n }\r\n\r\n copy(developmentInputId: DevelopmentInputDTO) {\r\n this.$DevelopmentInputservice\r\n .copyCase(developmentInputId.Id, \"\")\r\n .then((response) => {\r\n let newDevelopmentInputId = response;\r\n if (newDevelopmentInputId) {\r\n this.viewCaseByDIId(newDevelopmentInputId);\r\n }\r\n })\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n\r\n viewCaseByDIId(developmentInputId: number) {\r\n this.$CaseService.getcasefromsearch(developmentInputId).then((result) => {\r\n if (result) this.$location.path(\"/casedashboard/\" + result.Id);\r\n });\r\n }\r\n\r\n newloan() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/criteria\");\r\n }\r\n\r\n registerIntroducer() {\r\n this.$location.path(\"/registerintroducer\");\r\n }\r\n\r\n //introduceClient() {\r\n // this.$IntroducerService.introduceClient(this.clientFirstName, this.clientEmail, this.clientSurname, this.clientPhoneNumber).then((success) => {\r\n // this.introduceClientModal = 2;\r\n // this.dataLoading = false;\r\n // });\r\n //}\r\n\r\n sendLinkToUser() {\r\n this.$IntroducerService\r\n .sendLinkToUser(\r\n this.currentUser.FirstName,\r\n this.currentUser.Email,\r\n this.currentUser.Id,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 6;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n copyLinkToClipboard() {\r\n this.$IntroducerService\r\n .copyLinkToClipboard(this.currentUser.Id)\r\n .then((response) => {\r\n this.link = response.toString();\r\n navigator.clipboard.writeText(this.link);\r\n this.introduceClientModal = 7;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /// changed the result type as number to avoid compilation error (sevice code has been changed for newdashboard)\r\n introducerSendResultsToClient(\r\n result: DevelopmentInputDTO,\r\n notifyBorrower: boolean = false,\r\n ) {\r\n this.dataLoading = true;\r\n this.$IntroducerService\r\n .sendResultsToClient(\r\n result,\r\n this.clientFirstName,\r\n this.clientSurname,\r\n this.clientEmail,\r\n notifyBorrower,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 4;\r\n })\r\n .catch((reason) => {\r\n this.introducerErrorDisplayed = true;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n introducerSendResultsToMultipleClient(\r\n result: DevelopmentInputDTO,\r\n notifyBorrower: boolean = false,\r\n ) {\r\n for (let i = 0; i < this.shareEmailsArray.length; i++) {\r\n this.dataLoading = true;\r\n this.$IntroducerService\r\n .sendResultsToClient(\r\n result,\r\n \"\",\r\n \"\",\r\n this.shareEmailsArray[i],\r\n notifyBorrower,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 4;\r\n })\r\n .catch((reason) => {\r\n this.introducerErrorDisplayed = true;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n delete this.shareEmails;\r\n });\r\n }\r\n }\r\n\r\n introducerRefreshSearchesAndClients() {\r\n //Trigger a refresh to show results\r\n this.updateIntroducedSearches(this.introducerId);\r\n this.clientAdminTools = true;\r\n }\r\n\r\n completeAccount() {\r\n this.currentUser.TemporaryAccount = false;\r\n this.currentUser.Roles = [];\r\n this.currentUser.Roles.push(\"Client\");\r\n if (this.currentUser.ApplicantDefinedRole == 0) {\r\n this.currentUser.NewUserEmailJourneyStarted = true;\r\n }\r\n this.$user.addUpdate(this.currentUser).then((response) => {\r\n this.passwordSetSuccess = true;\r\n });\r\n }\r\n\r\n afterSetPasswordContinue() {\r\n //User needs to be logged out and logged in again\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.authService.logout(false);\r\n }\r\n this.authService\r\n .login(\r\n this.currentUser.Email,\r\n this.currentUser.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n this.$cookies.put(\"user_firstname\", this.currentUser.FirstName, {\r\n expires: expiry,\r\n });\r\n this.showSetPasswordModal = false;\r\n this.initialise();\r\n });\r\n }\r\n}\r\n","export const enum FixedRateTermEnum {\r\n None = 0,\r\n TwoYear = 1,\r\n FiveYear = 2,\r\n TenYear = 3,\r\n}\r\n","import { AddressHistoryDTO } from \"@js/DTO/AddressHistoryDTO.cs.d\";\r\nimport { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseChangedMessageDTO } from \"@js/DTO/CaseChangedMessageDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { DealClientDTO } from \"@js/DTO/Deal/DealClientDTO.cs.d\";\r\nimport { DealFileAttachmentDTO } from \"@js/DTO/Deal/DealFileAttachmentDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { DealNoteDTO } from \"@js/DTO/Deal/DealNoteDTO.cs.d\";\r\nimport { ExternalLinksDTO } from \"@js/DTO/ExternalLinksDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { LenderDTO } from \"@js/DTO/LenderDTO.cs.d\";\r\nimport { InvitedUserResponse } from \"@js/DTO/Messages/Deal/InvitedUserMessage.cs.d\";\r\nimport { LenderInfo } from \"@js/DTO/Messages/Deal/LendersInfoForSubmitToLenderMessage.cs.d\";\r\nimport { PromoteSearchToCaseResponse } from \"@js/DTO/Messages/Deal/PromoteSearchToCaseMessage.cs.d\";\r\nimport { SaveCommercialSearchRequest } from \"@js/DTO/Messages/Deal/SaveCommercialSearchMessage.cs.d\";\r\nimport { ShareModuleRequest } from \"@js/DTO/Messages/Deal/ShareModuleMessage.cs.d\";\r\nimport { SubmitToLendersRequest } from \"@js/DTO/Messages/Deal/SubmitToLendersMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { AppraisalModuleEnum } from \"@js/models/enum/AppraisalModuleEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { FixedRateTermEnum } from \"@js/models/enum/FixedRateTermEnum.cs.d\";\r\nimport { InterestRateTypeEnum } from \"@js/models/enum/InterestRateTypeEnum.cs.d\";\r\nimport { LenderProductTypeEnum } from \"@js/models/enum/LenderProductTypeEnum.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { OwnNewDevelopmentEnum } from \"@js/models/enum/OwnNewDevelopmentEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { TenureEnum } from \"@js/models/enum/TenureEnum.cs.d\";\r\nimport { TitleEnum } from \"@js/models/enum/TitleEnum.cs.d\";\r\nimport { YesNoMaybe } from \"@js/models/enum/YesNoMaybeEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { AccountService } from \"@js/services/AccountService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { CommercialDealService } from \"@js/services/Deal/CommercialDealService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealNoteService } from \"@js/services/Deal/DealNoteService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { SharedDealService } from \"@js/services/Deal/SharedDealService\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\nimport { DealFileAttachmentService } from \"@js/services/DealFileAttachmentService\";\r\nimport { ExternalLinksService } from \"@js/services/ExternalLinksService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { StreetAddressService } from \"@js/services/StreetAddressService\";\r\nimport angular from \"angular\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\n\r\ninterface LeaseItemDetails {\r\n TimeLeftOnLeaseYears?: number;\r\n TimeLeftOnLeaseMonths?: number;\r\n GrossMonthlyRentalIncome: \"\";\r\n}\r\n\r\nexport class CommercialCaseController {\r\n isCaseDashboard: boolean = true;\r\n\r\n dataLoading: boolean;\r\n currentUser: ApplicationUserDTO;\r\n dealId: number;\r\n dealDto: CommercialDealDTO;\r\n tempDealDto: CommercialDealDTO;\r\n orgName: string;\r\n orgId: number;\r\n org: OrganisationDTO;\r\n fileNamePrefix: string = \"Brickflow\";\r\n newNote: DealNoteDTO = {} as DealNoteDTO;\r\n mortgageTerm: number = 0;\r\n\r\n CaseDashboardTypeEnum = {\r\n Overview: 0,\r\n Borrower: 1,\r\n Property: 2,\r\n Loan: 3,\r\n };\r\n\r\n selectedNavMenu: number = 0;\r\n\r\n dealForm: ng.IFormController;\r\n ownershipForm: ng.IFormController;\r\n companyDetailsForm: ng.IFormController;\r\n propertyDetailsForm: ng.IFormController;\r\n loanDetailsForm: ng.IFormController;\r\n personalDetailsForm: ng.IFormController;\r\n contactForm: ng.IFormController;\r\n occupationForm: ng.IFormController;\r\n creditForm: ng.IFormController;\r\n lenderDetailsForm: ng.IFormController;\r\n\r\n showAddressHistoryModal: boolean = false;\r\n\r\n tabs = {\r\n tabOpen: false,\r\n ownership: false,\r\n companyDetails: false,\r\n personalDetails: false,\r\n contactDetails: false,\r\n occupation: false,\r\n credit: false,\r\n };\r\n\r\n ownershipType: string = \"\";\r\n\r\n leaseItems: LeaseItemDetails[] = [];\r\n\r\n currentApplicant: DealClientDTO;\r\n tempApplicant: DealClientDTO;\r\n applicantList: DealClientDTO[] = [];\r\n appName: string;\r\n\r\n searchterm: string;\r\n previousAddressSearchTerm: string;\r\n PostCodeOptions: PostalAddress[] = [];\r\n previousAddressPostCodeOptions: PostalAddress[] = [];\r\n address: PostalAddress;\r\n searchingForAddress: boolean = false;\r\n searchingForPreviousAddress: boolean = false;\r\n searchresults: string = \"\";\r\n previousAddressSearchResults: string[];\r\n addressHistoryItem: AddressHistoryDTO;\r\n applicantAddressHistory: AddressHistoryDTO[] = [];\r\n\r\n propertyTypeOptions = [];\r\n tenureTypes = [];\r\n maritalStatusOptions = [];\r\n ownOrPurchaseOptions = [];\r\n ownNewDevelopmentOptions = [];\r\n yesNoOptions = [];\r\n planningOptions = [];\r\n titleOptions = [];\r\n ownershipRoleOptions = [];\r\n countryList = [];\r\n nationalityList = [];\r\n countryOfBirthList = [];\r\n countryOfResidenceList = [];\r\n loanCompletionTypeOptions = [];\r\n currentUseofBuildingOptions = [];\r\n loanRepaymentTypeOptions = [];\r\n productTypeOptions = [];\r\n fixedrateTermOptions = [];\r\n locationOptions = [];\r\n borrowingEntityTypeOptions = [];\r\n //modal\r\n message: string = \"\";\r\n modal: boolean = false;\r\n showErrorMessage: boolean = false;\r\n\r\n uploadingFiles: FileUploadProgressDTO[];\r\n fileUpload: DealFileAttachmentDTO[];\r\n total: number = 0;\r\n renamingFile: DealFileAttachmentDTO;\r\n\r\n // Number of note shown on the casedashboard\r\n maxNotes: number = 4;\r\n\r\n // Controls showing Ts & Cs when a borrower/broker submits to lenders\r\n showTsAndCs: boolean = false;\r\n showApplyTsAndCs: boolean = false;\r\n showRequestEmailForm: boolean = false;\r\n requestMessageReason: string = \"\";\r\n showTsAndCsForm: boolean = false;\r\n sendingMessage: boolean = false;\r\n messagebool: boolean = false;\r\n invalidEmail: boolean = false;\r\n\r\n isBroker: boolean = false;\r\n isAdmin: boolean = false;\r\n isLender: boolean = false;\r\n isClient: boolean = false;\r\n isSubmitted: boolean = false;\r\n\r\n isSubmittedToLenders: boolean = false;\r\n messageContent: string;\r\n dealLender: DealLenderDTO;\r\n\r\n //Boolean to enable a re-submit button\r\n hasShortlistedDealLenders: boolean = false;\r\n\r\n caseStatusOptions = [];\r\n caseStatusText: string = \"\";\r\n caseOverview: string;\r\n\r\n selectedLendersName: string = \"\";\r\n shortlistedLendersName: string = \"\";\r\n lendersDetailsForSubmittoLenders: LenderInfo[];\r\n shortListedLendersId: Number[];\r\n\r\n //Sharing case\r\n shareContext: AppraisalModuleEnum = null;\r\n caseMembersWithAccess: ClientDTO[];\r\n showShare: boolean = false;\r\n selectedClientToShareWith: ClientDTO;\r\n shareNote: string;\r\n showModuleShareConfirmation: boolean;\r\n\r\n //show profile view\r\n showAppraisalPermission: boolean = false;\r\n\r\n //profile\r\n newApplicant: DealClientDTO;\r\n\r\n maxDateOfBirth: Date = new Date();\r\n minDateOfBirth: Date = new Date(\"Jan 01 1900\");\r\n maxDateForDateField: Date = new Date(\"Jan 01 3000\");\r\n showAddorEdit: boolean = false;\r\n disableQuickEditSave: boolean = false;\r\n applicantForm: ng.IFormController;\r\n isAddShareholder: boolean;\r\n showDelete: boolean = false;\r\n confirmDeleteApplicant: DealClientDTO;\r\n\r\n showExport: boolean = false;\r\n updatingName: boolean = false;\r\n orginalDealName: string;\r\n\r\n showAddHistoryConfirmDelete: boolean = false;\r\n addressHistoryIdToDelete: number;\r\n\r\n isLoggedInUser: boolean = false;\r\n\r\n showDeal: boolean = true;\r\n classUses: {} = {};\r\n\r\n tinymceOptions: any;\r\n tinymceReadonlyOptions: any;\r\n missingAddressGaps: string[];\r\n\r\n ownOrPurchase: boolean;\r\n isFamilyInResidence: boolean;\r\n\r\n dateProperties = [\"ExpiryDate\"];\r\n\r\n profileDateProperties = [\r\n \"DateOfBirth\",\r\n \"CurrentAddressFrom\",\r\n \"UkResidenceIssueDate\",\r\n \"CurrentEmploymentStartDate\",\r\n \"AddressStartDate\",\r\n ];\r\n\r\n dealDateProperties = [\r\n \"OriginalPurchaseDate\",\r\n \"CompletionDate\",\r\n \"TradingStartDate\",\r\n ];\r\n\r\n clientDateProperties = [\"DateOfBirth\"];\r\n\r\n maxPurchaseDate: Date = new Date();\r\n minPurchaseDate: Date = new Date(\"Jan 01 1900\");\r\n dealProductTypeDisplayText: string;\r\n isInActiveLender: boolean = false;\r\n totalGrossMonthlyRentalIncome: number = 0;\r\n isGrossMonthlyRentalIncomeMatch: boolean = true;\r\n\r\n //SubmitToLender modal\r\n brokerCommission: number;\r\n brokerPreferredContact: string;\r\n isBrokerPhoneNumberUpdated: boolean = false;\r\n dealBrokerUser: ApplicationUserDTO;\r\n\r\n totalUnreadDealLenderMessages: number = null;\r\n\r\n //Lender Portal Links\r\n dealLenders: DealLenderDTO[];\r\n dealLendersWithPortalLinkEnabled: DealLenderDTO[];\r\n lendersWithPortalLinkEnabled: LenderDTO[];\r\n showLenderPortalLinks: boolean = false;\r\n portalLinks: {} = {};\r\n borrowerDetails: UserSimpleDTO;\r\n applicationForm: ng.IFormController;\r\n portalLinkDetailsAdded: {} = {};\r\n\r\n //property for roles directive to handle referred readonly view for broker/connect broker\r\n isReadOnlyDeal: boolean = true;\r\n hasFirstLoadOccurred: boolean = false;\r\n referredPackagerText: string;\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"AccountService\",\r\n \"StreetAddressService\",\r\n \"CommercialDealService\",\r\n \"DealNoteService\",\r\n \"AuthService\",\r\n \"SelectListService\",\r\n \"RoleService\",\r\n \"LenderService\",\r\n \"CaseService\",\r\n \"DealLenderService\",\r\n \"DealFileAttachmentService\",\r\n \"$window\",\r\n \"ExternalLinksService\",\r\n \"DealClientService\",\r\n \"OrganisationService\",\r\n \"$scope\",\r\n \"$sce\",\r\n \"DealService\",\r\n \"SharedDealService\",\r\n \"ProductService\",\r\n \"EventLogService\"\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $accountservice: AccountService,\r\n private $streetAddressService: StreetAddressService,\r\n private commercialDealService: CommercialDealService,\r\n private dealNoteService: DealNoteService,\r\n private authService: AuthService,\r\n private selectListService: SelectListService,\r\n private roleService: RoleService,\r\n private $lenderService: LenderService,\r\n private caseService: CaseService,\r\n private dealLenderService: DealLenderService,\r\n private dealFileAttachmentService: DealFileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private $externalLinksService: ExternalLinksService,\r\n private dealClientService: DealClientService,\r\n private organisationService: OrganisationService,\r\n private $scope: ng.IScope,\r\n private $sce: ng.ISCEService,\r\n private dealService: DealService,\r\n private sharedDealService: SharedDealService,\r\n private productService: ProductService,\r\n private eventLogService: EventLogService\r\n ) {\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n }\r\n this.tinymceOptions = this.sharedDealService.tinymceOptions;\r\n this.tinymceReadonlyOptions = angular.copy(this.tinymceOptions);\r\n this.tinymceReadonlyOptions.readonly = 1;\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"client\").length > 0) {\r\n this.isClient = true;\r\n } else {\r\n this.isClient = false;\r\n }\r\n });\r\n\r\n if (this.$routeParams.DealId) {\r\n this.dataLoading = true;\r\n\r\n this.dealId = this.$routeParams.DealId;\r\n if (\r\n this.$routeParams.Promote &&\r\n this.$routeParams.Promote != \"null\" &&\r\n !this.dealDto\r\n ) {\r\n var promote = this.$routeParams.Promote as boolean;\r\n this.isReadOnlyDeal = false;\r\n this.hasFirstLoadOccurred = true;\r\n if (promote) {\r\n this.promoteSearchToCase();\r\n }\r\n } else {\r\n this.dealService\r\n .fetchByDealId(this.$routeParams.DealId, ProductFamilyEnum.Commercial, true)\r\n .then((response) => {\r\n\r\n // The case was a pre-existing case when the broker org became a member of Connect and therefore was archived.\r\n if (response.CommercialDealDto.IsPreConnectArchived) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n\r\n //Below properties are very imp for view roles directive \r\n this.isReadOnlyDeal = response.IsReadOnlyDealForBroker;\r\n this.referredPackagerText = response.ReferredPackagerText;\r\n\r\n this.hasFirstLoadOccurred = true;\r\n if (response.HideCommercialDeal) {\r\n this.showDeal = false;\r\n } else {\r\n this.dealDto = response.CommercialDealDto;\r\n this.shortlistedLendersName = response.ShortlistedLendersName;\r\n this.selectedLendersName = response.SelectedLendersName;\r\n this.shortListedLendersId = response.ShortlistedLendersId;\r\n this.parseLeaseDetails(this.dealDto.LeaseDetails);\r\n this.totalUnreadDealLenderMessages =\r\n response.TotalUnreadDealLenderMessages;\r\n\r\n if (this.dealDto) {\r\n this.orgId = this.dealDto.BrokerOrganisationId;\r\n\r\n if (this.dealDto.ProjectDescription) {\r\n this.caseOverview = this.dealDto.ProjectDescription;\r\n }\r\n\r\n this.postRetrieveProcessing();\r\n\r\n var newShortlist = this.$routeParams.NewShortlist as boolean;\r\n if (newShortlist) this.getLenderPortalLinks();\r\n } else {\r\n // If no case is returned, this could be that the logged in user has been removed from the case\r\n // - only do this if there is a logged in user, otherwise let the routing sort out where the redirect should go\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n this.countryOfBirthList = this.countryOfResidenceList =\r\n this.selectListService.GetCountries();\r\n this.nationalityList = this.selectListService.GetNationalities();\r\n this.ownOrPurchaseOptions = this.selectListService.GetOwnOrPurchase();\r\n this.maritalStatusOptions =\r\n this.selectListService.GetMaritalStatusOptions();\r\n this.propertyTypeOptions = this.selectListService.GetPropertyType();\r\n this.ownNewDevelopmentOptions =\r\n this.selectListService.GetCommercialOwnNewDevelopmentOptions();\r\n this.yesNoOptions = this.selectListService.GetYesNoForBridging();\r\n this.titleOptions = this.selectListService.GetTitleOptions();\r\n this.loanCompletionTypeOptions =\r\n this.selectListService.GetLoanCompletionOptions();\r\n this.loanRepaymentTypeOptions =\r\n this.selectListService.GetLoanRepaymentTypeOptions();\r\n this.productTypeOptions = this.selectListService.GetInterestRateType();\r\n this.fixedrateTermOptions =\r\n this.selectListService.GetFixedRateTermOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.getAppName();\r\n }\r\n\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) {\r\n if (this.isReadOnlyDeal) {\r\n return `['Admin', 'Client']`;\r\n } else {\r\n return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n }\r\n }\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n editDealName() {\r\n var name = this.dealDto.Name;\r\n this.orginalDealName = name;\r\n this.updatingName = true;\r\n }\r\n\r\n cancelEditDealName() {\r\n this.updatingName = false;\r\n this.dealDto.Name = this.orginalDealName;\r\n }\r\n\r\n /**Gets the Case Status display text */\r\n getCaseStatusDisplayText() {\r\n var statusItem = null;\r\n\r\n if (this.isLender) {\r\n statusItem = this.caseStatusOptions.find(\r\n (statusOption) => this.dealLender.Status == statusOption.key,\r\n );\r\n } else {\r\n statusItem = this.caseStatusOptions.find(\r\n (statusOption) => this.dealDto.Status == statusOption.key,\r\n );\r\n }\r\n\r\n this.caseStatusText = statusItem.displayName;\r\n }\r\n\r\n postRetrieveProcessing() {\r\n if (this.$routeParams.selectedNavMenu) {\r\n this.selectedNavMenu = this.$routeParams.selectedNavMenu;\r\n }\r\n\r\n this.dealLenderService\r\n .fetchByDealId(this.$routeParams.DealId)\r\n .then((dls: DealLenderDTO[]) => {\r\n this.hasShortlistedDealLenders = dls.some(\r\n (dl) => dl.Status == CaseLenderStateEnum.Shortlisted,\r\n );\r\n });\r\n\r\n //These are used for directive.\r\n (this.$rootScope as any).statusRequirementId = this.dealDto.Id;\r\n this.caseService.updateCaseState(this.dealDto.Id, this.dealDto.Status);\r\n this.getCurrentUserAndRoles();\r\n this.fileUpload = this.dealDto.Attachments;\r\n this.applicantList = this.dealDto.DealClients;\r\n\r\n this.dealProductTypeDisplayText =\r\n this.productService.getProductTypeDisplayText(this.dealDto.ProductType);\r\n this.tenureTypes = this.selectListService.GetTenureTypes(\r\n this.dealDto.ProductType,\r\n );\r\n this.currentUseofBuildingOptions =\r\n this.selectListService.GetCommercialCurrentUseOfBuildingOptions(\r\n this.dealDto.ProductType,\r\n );\r\n this.borrowingEntityTypeOptions =\r\n this.selectListService.GetBorrowingEntityTypeOptions(\r\n this.dealDto.ProductType,\r\n );\r\n this.ownershipRoleOptions = this.selectListService.GetOwnershipRoleOptions(\r\n this.dealDto.ProductType,\r\n );\r\n\r\n if (this.dealDto.BrokerOrganisationId) {\r\n this.getOrganisationbyDealId();\r\n }\r\n }\r\n\r\n keyPressEvent(event) {\r\n if (event.key === \"Enter\") {\r\n this.updatingName = false;\r\n this.submitForm(this.dealForm);\r\n }\r\n if (event.key === \"Escape\") {\r\n this.updatingName = false;\r\n }\r\n }\r\n\r\n submitForm(form: ng.IFormController) {\r\n this.dataLoading = true;\r\n\r\n var request: SaveCommercialSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: null,\r\n OrgCode: \"\",\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n if (this.leaseItems != null && this.leaseItems.length > 0) {\r\n this.dealDto.LeaseDetails = JSON.stringify(this.leaseItems);\r\n } else {\r\n this.dealDto.LeaseDetails = \"\";\r\n }\r\n\r\n this.commercialDealService\r\n .saveCommercialSearchReturnsId(request)\r\n .then((response) => {\r\n if (response != null) {\r\n this.closeTabs();\r\n form.$setPristine();\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n onTradingStartDateChange() {\r\n this.dealDto.TradingStartDate = this.modifyDateForBackend(\r\n this.dealDto.TradingStartDate,\r\n );\r\n }\r\n\r\n closeModalAndGoToDasboard() {\r\n this.showTsAndCs = false;\r\n this.authService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n closeModalAndGoToDealForum() {\r\n this.showTsAndCs = false;\r\n this.$location.path(\"/dealforum/\" + this.dealDto.Id);\r\n }\r\n\r\n closeModal(test: number) {\r\n this.messagebool = false;\r\n }\r\n\r\n closeTabs() {\r\n for (let key in this.tabs) {\r\n this.tabs[key] = false;\r\n }\r\n }\r\n\r\n discardOwnership() {\r\n this.dealDto.HowWillYouOwnNewDevelopment = null;\r\n //this.companyDetails.temp = null;\r\n this.dealDto.ExcludedLenders = null;\r\n this.dealDto.HasTheCompanyOrPensionBeenFormedYet = null;\r\n }\r\n\r\n gotoApplicant(applicant?: DealClientDTO) {\r\n this.currentApplicant = applicant || null;\r\n this.PostCodeOptions = null;\r\n\r\n if (\r\n this.currentApplicant &&\r\n this.currentApplicant.Profile &&\r\n this.currentApplicant.Profile.AddressHistory &&\r\n this.currentApplicant.Profile.AddressHistory.length > 0\r\n ) {\r\n this.parseAddressHistory(this.currentApplicant.Profile.AddressHistory);\r\n } else {\r\n this.applicantAddressHistory = [];\r\n }\r\n\r\n this.selectedNavMenu = 4;\r\n this.closeTabs();\r\n }\r\n\r\n getOwnershipTypeText(): string {\r\n var ownershipTypeText;\r\n\r\n if (this.dealDto && this.dealDto.HowWillYouOwnNewDevelopment) {\r\n switch (this.dealDto.HowWillYouOwnNewDevelopment) {\r\n case OwnNewDevelopmentEnum.UKLimitedCompany:\r\n this.ownershipType = ownershipTypeText = \"Company\";\r\n break;\r\n case OwnNewDevelopmentEnum.OverseasLimitedCompany:\r\n this.ownershipType = ownershipTypeText = \"Overseas Company\";\r\n break;\r\n case OwnNewDevelopmentEnum.PensionFund:\r\n this.ownershipType = ownershipTypeText = \"Pension Fund\";\r\n break;\r\n case OwnNewDevelopmentEnum.UKLimitedLiabilityPartnership:\r\n ownershipTypeText = \"Limited Liability Partnership\";\r\n this.ownershipType = \"Partnership\";\r\n break;\r\n default:\r\n ownershipTypeText = \"\";\r\n }\r\n return ownershipTypeText;\r\n }\r\n return \"\";\r\n }\r\n\r\n openAddressHistoryModal(addressHistory: AddressHistoryDTO = null) {\r\n this.previousAddressSearchResults = [];\r\n this.previousAddressPostCodeOptions = [];\r\n\r\n if (addressHistory) {\r\n this.addressHistoryItem = addressHistory;\r\n } else {\r\n this.addressHistoryItem = null;\r\n }\r\n\r\n this.showAddressHistoryModal = true;\r\n }\r\n\r\n addressHistoryComplete() {\r\n return this.sharedDealService.addressHistoryComplete(\r\n this.currentApplicant,\r\n this.applicantAddressHistory,\r\n this.missingAddressGaps,\r\n );\r\n }\r\n\r\n getAddressList(searchTerm: string, postalAddress: PostalAddress) {\r\n let foundMatch = false;\r\n\r\n if (this.PostCodeOptions && this.PostCodeOptions.length > 0) {\r\n let addressLookup = this.PostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n for (let prop in address) {\r\n if (address.hasOwnProperty(prop)) {\r\n postalAddress[prop] = address[prop];\r\n }\r\n }\r\n this.searchterm = \"\";\r\n this.searchresults = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n postalAddress.AddressLine1 = addressLookup.AddressLine2.replace(\r\n addressLookup.AddressLine2.substring(\r\n addressLookup.AddressLine2.indexOf(\"-\") - 1,\r\n ),\r\n \"\",\r\n );\r\n postalAddress.AddressLine2 = addressLookup.AddressLine3;\r\n postalAddress.PostCode = addressLookup.AddressLine1;\r\n this.searchterm = \"\";\r\n this.searchresults = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n this.PostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n lookupPreviousAddress(searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.previousAddressPostCodeOptions &&\r\n this.previousAddressPostCodeOptions &&\r\n this.previousAddressPostCodeOptions.length > 0\r\n ) {\r\n let addressLookup = this.previousAddressPostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n this.addressHistoryItem = {\r\n AddressLine1: address.AddressLine1,\r\n AddressLine2: address.AddressLine2,\r\n AddressLine3: address.AddressLine3,\r\n AddressLine4: address.AddressLine4,\r\n PostCode: address.PostCode,\r\n };\r\n\r\n this.previousAddressSearchTerm = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.addressHistoryItem = {\r\n AddressLine1: addressLookup.AddressLine2,\r\n AddressLine2: addressLookup.AddressLine3,\r\n AddressLine3: addressLookup.AddressLine4,\r\n AddressLine4: addressLookup.PostCode,\r\n PostCode: addressLookup.AddressLine1,\r\n };\r\n\r\n this.previousAddressSearchTerm = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.previousAddressPostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.previousAddressPostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n saveAddressHistory(selectedApplicant: DealClientDTO) {\r\n var id: number = 0;\r\n\r\n if (!this.applicantAddressHistory) {\r\n this.applicantAddressHistory = [];\r\n }\r\n\r\n // If the Id hasn't been set then this is a new previous address\r\n if (this.addressHistoryItem.Id == null) {\r\n id = this.getNextAddressHistoryId();\r\n this.addressHistoryItem.Id = id;\r\n this.applicantAddressHistory.push(this.addressHistoryItem);\r\n } else {\r\n var foundIndex = this.applicantAddressHistory\r\n .map(function (a) {\r\n return a.Id;\r\n })\r\n .indexOf(this.addressHistoryItem.Id);\r\n if (foundIndex > -1) {\r\n this.applicantAddressHistory.splice(\r\n foundIndex,\r\n 1,\r\n this.addressHistoryItem,\r\n ); // removed previous entry and adds the updated one in its place\r\n }\r\n }\r\n\r\n this.dealClientService\r\n .saveAddressHistory(\r\n selectedApplicant.Id,\r\n JSON.stringify(this.applicantAddressHistory),\r\n )\r\n .then((addressHistory: string) => {\r\n selectedApplicant.Profile.AddressHistory = addressHistory;\r\n this.parseAddressHistory(addressHistory);\r\n this.showAddressHistoryModal = false;\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem saving the address history. Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.showAddressHistoryModal = false;\r\n });\r\n }\r\n\r\n /**\r\n * Convert addres history JSON back to an array of PostalAddress objects\r\n * @param addressHistoryJson\r\n */\r\n parseAddressHistory(addressHistoryJson: string) {\r\n // JSON doesn't understand date types so therefore user the reviver function to manually convert them back to dates as opposed to strings\r\n this.applicantAddressHistory = JSON.parse(addressHistoryJson, this.sharedDealService.reviver);\r\n\r\n // Order the address histories by the from date (ascending)\r\n this.applicantAddressHistory.sort(\r\n (a: AddressHistoryDTO, b: AddressHistoryDTO) => {\r\n return this.sharedDealService.getTime(a.FromDate) - this.sharedDealService.getTime(b.FromDate);\r\n },\r\n );\r\n }\r\n\r\n getAddressAsString(address: PostalAddress) {\r\n return this.sharedDealService.getAddressAsString(address);\r\n }\r\n\r\n showConfirmAddressDelete(addressHistoryId: number) {\r\n this.showAddHistoryConfirmDelete = true;\r\n this.addressHistoryIdToDelete = addressHistoryId;\r\n }\r\n\r\n deleteAddressHistory() {\r\n this.showAddHistoryConfirmDelete = false;\r\n\r\n var foundIndex = this.applicantAddressHistory\r\n .map(function (a) {\r\n return a.Id;\r\n })\r\n .indexOf(this.addressHistoryIdToDelete);\r\n\r\n if (foundIndex > -1) {\r\n this.applicantAddressHistory.splice(foundIndex, 1);\r\n\r\n this.dealClientService\r\n .saveAddressHistory(\r\n this.currentApplicant.Id,\r\n JSON.stringify(this.applicantAddressHistory),\r\n )\r\n .then((addressHistory: string) => {\r\n this.currentApplicant.Profile.AddressHistory = addressHistory;\r\n this.parseAddressHistory(addressHistory);\r\n this.showAddressHistoryModal = false;\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem deleting the address history item. Please try again later.\";\r\n });\r\n }\r\n }\r\n\r\n getNextAddressHistoryId(): number {\r\n return this.sharedDealService.getNextAddressHistoryId(\r\n this.applicantAddressHistory,\r\n );\r\n }\r\n\r\n /** Promotes/converts a search to a case */\r\n promoteSearchToCase() {\r\n this.dealService\r\n .promoteSearchToCase(this.dealId, ProductFamilyEnum.Commercial)\r\n .then((response: PromoteSearchToCaseResponse) => {\r\n if (response != null && response.CommercialDealDto != null) {\r\n this.dealDto = response.CommercialDealDto;\r\n this.shortlistedLendersName = response.ShortlistedLendersName;\r\n this.selectedLendersName = response.SelectedLendersName;\r\n this.shortListedLendersId = response.ShortlistedLendersId;\r\n this.postRetrieveProcessing();\r\n this.getCurrentUserAndRoles();\r\n } else {\r\n this.message =\r\n \"Problem while promoting a search to case, please try after some time.\";\r\n this.showErrorMessage = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.getLenderPortalLinks();\r\n });\r\n }\r\n\r\n getLenderPortalLinks() {\r\n this.dealLenderService\r\n .fetchByDealId(this.$routeParams.DealId)\r\n .then((dls: DealLenderDTO[]) => {\r\n this.dealLenders = dls;\r\n var searchChanged = this.$routeParams.SearchChanged;\r\n const lenderIds = dls\r\n .filter(\r\n (dl) =>\r\n !dl.HasAppliedInLenderPortal &&\r\n (dl.Status === CaseLenderStateEnum.Shortlisted ||\r\n searchChanged == \"true\"),\r\n )\r\n .map((dl) => dl.LenderId);\r\n return this.$lenderService.getLenderPortalLinks(lenderIds);\r\n })\r\n .then((links) => {\r\n this.portalLinks = links;\r\n })\r\n .catch((error) => {\r\n this.message = \"Error fetching lender portal links: \" + error;\r\n this.portalLinks = null;\r\n })\r\n .finally(() => {\r\n this.showLenderPortalLinks = Object.keys(this.portalLinks).length > 0;\r\n });\r\n }\r\n\r\n openPortalLink(dealLenderId: number, url: string) {\r\n if (!this.portalLinkDetailsAdded[dealLenderId]) {\r\n this.dealLenderService\r\n .addLenderPortalLinkDetails(dealLenderId, this.borrowerDetails)\r\n .then(() => {\r\n this.portalLinkDetailsAdded[dealLenderId] = true;\r\n this.openUrl(url);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error adding lender portal link details:\", error);\r\n });\r\n } else {\r\n this.openUrl(url);\r\n }\r\n }\r\n\r\n private openUrl(url: string) {\r\n if (!/^https?:\\/\\//i.test(url)) {\r\n url = \"http://\" + url;\r\n }\r\n window.open(url, \"_blank\");\r\n }\r\n\r\n saveNote(): void {\r\n this.newNote.DealId = this.dealDto.Id;\r\n this.newNote.UserId = this.currentUser.Id;\r\n\r\n this.dataLoading = true;\r\n this.dealNoteService\r\n .addUpdate(this.newNote)\r\n .then((response) => {\r\n this.dealDto.DealNotes.push(response);\r\n this.newNote = {\r\n DealId: this.dealDto.Id,\r\n UserId: this.currentUser.Id,\r\n } as DealNoteDTO;\r\n this.dealForm.$setPristine();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n saveOverview(): void {\r\n this.dealDto.ProjectDescription = this.caseOverview;\r\n this.submitForm(this.dealForm);\r\n }\r\n\r\n gotoResultpage() {\r\n this.showErrorMessage = false;\r\n this.$location.path(\"/commercialresults/\" + this.dealId);\r\n }\r\n\r\n onFileSelect(files) {\r\n var module = ModuleEnum.Case;\r\n\r\n this.dealFileAttachmentService\r\n .UploadFileListInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.dealDto.Id,\r\n this.fileUpload,\r\n module,\r\n )\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n calculateTotalFilesRemoving(filter: number) {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module != filter,\r\n ).length;\r\n }\r\n return this.total;\r\n }\r\n\r\n downloadFile(file: DealFileAttachmentDTO, downloadFile: boolean = false) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n if (downloadFile) {\r\n this.sharedDealService.downloadFile(uri, file.FileName);\r\n } else {\r\n this.$window.open(uri);\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n renameFile(file: DealFileAttachmentDTO) {\r\n if (this.renamingFile === undefined) {\r\n // if renaming this file will dirty the case, we'll want to set it back to pristine when we're done.\r\n // this.renamingFileDirties = !$scope.caseForm.$dirty;\r\n this.renamingFile = file;\r\n } else {\r\n delete this.renamingFile;\r\n }\r\n }\r\n renamingFileComplete(file: DealFileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .renameFile(file)\r\n .then((response) => {\r\n file.TempURL = response.TempURL;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n renamingLinkCompleted(link: ExternalLinksDTO) {\r\n this.dataLoading = true;\r\n this.$externalLinksService\r\n .addUpdate(link)\r\n .then((response) => {\r\n link.Link = response.Link;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n deleteFile(file: DealFileAttachmentDTO) {\r\n this.dealDto.Attachments.splice(this.dealDto.Attachments.indexOf(file), 1);\r\n this.dealFileAttachmentService.markasdeleted(file.Id).then((result) => { }); //remove on the server\r\n }\r\n\r\n markSectionAsComplete(propertyName: string) {\r\n if (this.dataLoading == false) {\r\n this.dataLoading = true;\r\n\r\n this.dealDto.IsLoanSectionComplete;\r\n\r\n this.dealService\r\n .markSectionAsComplete(\r\n this.dealDto.Id,\r\n propertyName,\r\n ProductFamilyEnum.Commercial,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.dealDto.DealNotes.push(response.NewDealNote);\r\n this.dealDto = response.CommercialDealDto;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n allFormsComplete(): boolean {\r\n if (this.dealDto) {\r\n if (\r\n this.dealDto.IsBorrowerSectionComplete &&\r\n this.dealDto.IsPropertySectionComplete &&\r\n this.dealDto.IsLoanSectionComplete\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n /** Opens the Terms and Conditions popup when the Submit to Lenders button is clicked*/\r\n showTermsAndConditionsForBorrower() {\r\n this.showApplyTsAndCs = true;\r\n this.requestMessageReason = \"a review\";\r\n this.showTsAndCs = true;\r\n }\r\n\r\n /** Opens the Terms and Conditions popup when the Submit to Lenders HoT button is clicked (borrower/broker) */\r\n showTermsAndConditions() {\r\n this.dataLoading = true;\r\n this.$lenderService\r\n .getShortlistedLendersInfoForSubmitToLenders(\r\n this.shortListedLendersId,\r\n LenderProductTypeEnum.CommercialMortgages,\r\n )\r\n .then((response) => {\r\n this.lendersDetailsForSubmittoLenders = response;\r\n })\r\n .finally(() => {\r\n this.showTsAndCs = true;\r\n this.showTsAndCsForm = true;\r\n this.dealDto.SubmitTsAndCs = false;\r\n this.invalidEmail = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n gotoLendingPage() {\r\n (this.$rootScope as any).isLender = false;\r\n this.$location.path(\"/dealforum/\" + this.dealDto.Id);\r\n }\r\n\r\n checkBrokerDeal() {\r\n return this.dealDto?.BrokerUserId != null && this.isClient ? true : false;\r\n }\r\n\r\n /** Submits a case to lenders */\r\n submitCaseToLenders() {\r\n this.showTsAndCsForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n var isResubmitting = false;\r\n\r\n if (this.dealDto.Status == CaseStatusEnum.ReadyToReSubmit) {\r\n isResubmitting = true;\r\n }\r\n\r\n var request = {\r\n DealId: this.dealId,\r\n ProductType: this.dealDto.ProductType,\r\n ResubmitToLenders: isResubmitting,\r\n //BrokerCommission: Number(this.brokerCommission),\r\n LendersInfo: this.lendersDetailsForSubmittoLenders,\r\n BrokerPhoneNumber: this.brokerPreferredContact,\r\n IsBrokerPhoneNumberUpdated: this.isBrokerPhoneNumberUpdated,\r\n } as SubmitToLendersRequest;\r\n\r\n this.dealService\r\n .submitToLenders(request)\r\n .then((response: CaseChangedMessageDTO) => {\r\n this.dealDto.Status = response.CaseState;\r\n this.caseService.updateCaseState(this.dealDto.Id, response.CaseState);\r\n this.showMessage(\r\n \"You have requested a Decision in Principle from each lender.\",\r\n );\r\n this.isSubmittedToLenders = true;\r\n })\r\n .catch((error) => {\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n validateEmails() {\r\n this.invalidEmail = false;\r\n\r\n angular.forEach(\r\n this.lendersDetailsForSubmittoLenders,\r\n (lenderdetails, index) => {\r\n var emailField = this.lenderDetailsForm[\"email\" + index];\r\n\r\n if (emailField && emailField.$invalid) {\r\n this.invalidEmail = true;\r\n }\r\n },\r\n );\r\n }\r\n\r\n showMessage(message: string) {\r\n this.messageContent = message;\r\n }\r\n\r\n requestEmail(reason): void {\r\n this.showRequestEmailForm = true;\r\n this.requestMessageReason = reason;\r\n this.messagebool = true;\r\n this.messageContent = \"\";\r\n }\r\n\r\n sendRequestEmail() {\r\n this.showRequestEmailForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n this.$accountservice\r\n .RequestAssistanceReview(\r\n this.requestMessageReason,\r\n this.dealDto.Id,\r\n this.dealDto.ProductFamily,\r\n )\r\n .then((response) => {\r\n this.showMessage(\r\n `${this.appName} have been notified that you require assistance and will be in touch shortly to help.`,\r\n );\r\n\r\n let dealNote = {\r\n DealId: this.dealDto.Id,\r\n UserId: this.currentUser.Id,\r\n NoteText: \"You have requested \" + this.requestMessageReason + \".\",\r\n /*ExpandNote: false*/\r\n } as DealNoteDTO;\r\n this.dealNoteService.addUpdate(dealNote).then((caseNoteResponse) => {\r\n this.dealDto.DealNotes.push(caseNoteResponse);\r\n });\r\n })\r\n .catch((error) => {\r\n this.showMessage(\r\n \"Sorry, something went wrong while sending your email. Please try again.\",\r\n );\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getAppName() {\r\n let lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n this.appName = lsd;\r\n } else {\r\n this.appName = \"Brickflow\";\r\n }\r\n }\r\n\r\n closeConfirmationModal() {\r\n if (this.isSubmittedToLenders) {\r\n if (this.$routeParams.Promote) {\r\n this.$location.path(\"/commercialcasedashboard/\" + this.dealDto.Id);\r\n } else {\r\n window.location.reload();\r\n }\r\n }\r\n this.showTsAndCs = false;\r\n }\r\n\r\n viewResults() {\r\n this.$location.path(\"/commercialresults/\" + this.dealDto.Id);\r\n }\r\n\r\n /** Process the Heads of Terms button being clicked */\r\n headsOfTermsClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"terms\");\r\n this.$location.path(\r\n \"/commercialheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n /** Lender rejects the case*/\r\n rejectButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"reject\");\r\n this.$location.path(\r\n \"/commercialheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n withDrawButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"withdraw\");\r\n this.$location.path(\r\n \"/commercialheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n feedbackButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"feedback\");\r\n this.$location.path(\r\n \"/commercialheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n getCurrentUserAndRoles() {\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.isAdmin = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"client\").length > 0) {\r\n this.isClient = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"lender\").length > 0) {\r\n this.isLender = true;\r\n\r\n this.dealLenderService\r\n .fetchDealLender(this.dealDto.Id)\r\n .then((response) => {\r\n this.dealLender = response;\r\n this.isInActiveLender = response.IsLenderInActive;\r\n this.generateCaseStatusText();\r\n });\r\n }\r\n\r\n this.authService\r\n .getUpdatedProfile()\r\n .then((prof) => {\r\n this.currentUser = prof;\r\n this.updateRequestAssitanceDealNoteMessage();\r\n })\r\n .then(() => {\r\n this.checkIfUserIsInvited();\r\n this.generateCaseStatusText();\r\n });\r\n\r\n /*this.$lenderService\r\n .getSelectedDealLenderNames(this.dealDto.Id)\r\n .then((response) => {\r\n this.selectedLendersText = response.LendersName;\r\n if (this.dealDto.Status == CaseStatusEnum.NewCase) {\r\n this.shortListedLendersId = response.LendersId;\r\n }\r\n });\r\n\r\n this.$lenderService\r\n .getShortlistedDealLenderNames(this.dealDto.Id)\r\n .then((response) => {\r\n this.shortlistedLendersText = response.LendersName;\r\n if (this.dealDto.Status != CaseStatusEnum.NewCase) {\r\n this.shortListedLendersId = response.LendersId;\r\n }\r\n });*/\r\n });\r\n }\r\n\r\n //Share module functions\r\n openShareModuleModal(contextToShare: AppraisalModuleEnum) {\r\n this.shareContext = contextToShare;\r\n this.constructShareNoteMessage();\r\n\r\n this.dealClientService\r\n .fetchDealMembersWithAccess(this.dealDto.Id)\r\n .then((response: ClientDTO[]) => {\r\n this.caseMembersWithAccess = response;\r\n\r\n this.showShare = true;\r\n });\r\n }\r\n\r\n constructShareNoteMessage() {\r\n this.shareNote = this.sharedDealService.constructShareNoteMessage(\r\n this.shareContext,\r\n this.currentUser,\r\n );\r\n }\r\n\r\n sendToBorrower() {\r\n this.dataLoading = true;\r\n\r\n var request = {\r\n ClientFirstName: this.selectedClientToShareWith.FirstName,\r\n ClientLastName: this.selectedClientToShareWith.LastName,\r\n ClientEmail: this.selectedClientToShareWith.Email,\r\n Note: this.shareNote,\r\n DealId: this.dealDto.Id,\r\n Section: this.shareContext,\r\n ProductFamily: ProductFamilyEnum.Commercial,\r\n } as ShareModuleRequest;\r\n\r\n this.dealService.shareModuleToBorrower(request).then((success) => {\r\n if (success) {\r\n this.showShare = false;\r\n this.dataLoading = false;\r\n this.showModuleShareConfirmation = true;\r\n this.selectedClientToShareWith = null;\r\n } else {\r\n this.showShare = false;\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n }\r\n });\r\n }\r\n\r\n isShareNoteFormComplete(): boolean {\r\n return this.selectedClientToShareWith &&\r\n this.shareNote &&\r\n this.shareNote.length > 0\r\n ? true\r\n : false;\r\n }\r\n\r\n //End of Share module functions\r\n\r\n // Profile view functions\r\n\r\n /**\r\n * Show the Add/Edit permissions profile modal\r\n * @param applicant\r\n */\r\n showPermissionsProfileModal(\r\n profile: DealClientDTO = null,\r\n isEdit: boolean = false,\r\n ): void {\r\n if (isEdit) {\r\n this.dealClientService.fetch(profile.Id).then((response) => {\r\n this.newApplicant = response;\r\n this.isAddShareholder = false;\r\n this.showAddorEdit = true;\r\n\r\n })\r\n\r\n } else {\r\n this.newApplicant = {} as DealClientDTO;\r\n this.isAddShareholder = true;\r\n this.newApplicant.AccessLevel = CaseAccessLevelEnum.Hidden;\r\n this.showAddorEdit = true;\r\n }\r\n }\r\n\r\n resetApplicant() {\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n this.newApplicant = {} as DealClientDTO;\r\n this.showAddorEdit = false;\r\n }\r\n\r\n /**\r\n * Saves the applicant being added/edited\r\n */\r\n saveApplicant(formController) {\r\n this.dataLoading = true;\r\n\r\n if (!(this.currentApplicant.Id > 0)) {\r\n this.currentApplicant.IsApplicant = true;\r\n this.currentApplicant.DealId = this.dealDto.Id;\r\n this.currentApplicant.AccessLevel = CaseAccessLevelEnum.Hidden;\r\n }\r\n\r\n this.saveUpdatedApplicant(this.currentApplicant, false, formController);\r\n }\r\n\r\n /**\r\n * Add or update a applicant\r\n * @param applicant\r\n */\r\n saveUpdatedApplicant(\r\n applicant: DealClientDTO,\r\n isPermissionsProfile: boolean = false,\r\n formController = null,\r\n ): void {\r\n this.dataLoading = true;\r\n\r\n this.disableQuickEditSave = true; // this is just because sometimes the save takes a little while and the user could click the save button again\r\n applicant.DealId = this.dealDto.Id;\r\n\r\n if (applicant) {\r\n this.dateProperties.forEach((property) => {\r\n let val = applicant[property];\r\n if (val) {\r\n applicant[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (applicant.Profile) {\r\n this.profileDateProperties.forEach((property) => {\r\n let val = applicant.Profile[property];\r\n if (val) {\r\n applicant.Profile[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (applicant.Client) {\r\n this.clientDateProperties.forEach((property) => {\r\n let val = applicant.Client[property];\r\n if (val) {\r\n applicant.Client[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (!applicant.Client.PostalAddress && isPermissionsProfile) {\r\n applicant.Client.PostalAddress = {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress;\r\n }\r\n\r\n this.dealClientService\r\n .addorUpdateApplicant(applicant, this.isAddShareholder)\r\n .then((response) => {\r\n this.dataLoading = true;\r\n\r\n if (response) {\r\n this.dateProperties.forEach((property) => {\r\n let val = response[property];\r\n if (val) {\r\n response[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n if (response.Profile) {\r\n this.profileDateProperties.forEach((property) => {\r\n let val = response.Profile[property];\r\n if (val) {\r\n response.Profile[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n if (response.Client) {\r\n this.clientDateProperties.forEach((property) => {\r\n let val = response.Client[property];\r\n if (val) {\r\n response.Client[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n const existingShareholder = this.applicantList.find(\r\n (s) => s.Id == response.Id,\r\n );\r\n\r\n // If found then we're updating\r\n if (existingShareholder) {\r\n this.applicantList = this.applicantList.filter(\r\n (member) => member.Id != applicant.Id,\r\n );\r\n this.applicantList.push(response);\r\n } else {\r\n this.applicantList.push(response);\r\n }\r\n if (!isPermissionsProfile) {\r\n this.currentApplicant = response;\r\n //This closes all the tab\r\n //this.closeTabs();\r\n formController.$setPristine();\r\n }\r\n })\r\n .finally(() => {\r\n delete this.newApplicant;\r\n this.showAddorEdit = false;\r\n this.disableQuickEditSave = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n cancelUpdateApplicant() {\r\n this.showAddorEdit = false;\r\n this.applicantList = this.applicantList.filter(\r\n (applicant) => applicant.Id != this.newApplicant?.Id,\r\n );\r\n this.applicantList.push(this.newApplicant); // Resets anything that is changed using the original data object\r\n }\r\n\r\n deleteApplicant(): void {\r\n this.dataLoading = true;\r\n this.dealClientService\r\n .markAsDeleteAndSetNextApplicantAsPrimary(\r\n this.dealDto.Id,\r\n this.confirmDeleteApplicant.Id,\r\n )\r\n .then((response) => {\r\n this.applicantList = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.confirmDeleteApplicant = {} as DealClientDTO;\r\n this.showDelete = false;\r\n });\r\n }\r\n\r\n deleteConfirmApplicant(applicant: DealClientDTO) {\r\n this.showDelete = true;\r\n this.confirmDeleteApplicant = { ...applicant };\r\n }\r\n\r\n nonUkWarningVisible(): boolean {\r\n return this.sharedDealService.nonUkWarningVisible(this.currentApplicant);\r\n }\r\n\r\n showInviteButton(shareholder: DealClientDTO) {\r\n return this.sharedDealService.showInviteButton(shareholder);\r\n }\r\n\r\n invite(applicant: DealClientDTO) {\r\n this.dataLoading = true;\r\n\r\n this.dealClientService\r\n .inviteApplicant(applicant.UniqueRef)\r\n .then((i) => {\r\n this.modal = true;\r\n this.message =\r\n \"A request has been sent to \" +\r\n applicant.Client.FirstName +\r\n \" \" +\r\n applicant.Client.LastName +\r\n \" complete their shareholder profile.\";\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem sending the invite request to \" +\r\n applicant.Client.FirstName +\r\n \" \" +\r\n applicant.Client.LastName +\r\n \". Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n //End of Profile view functions\r\n\r\n /** Show and hide the export menu */\r\n showAndHideExport() {\r\n this.showExport = !this.showExport;\r\n }\r\n\r\n //loanSaveDisabled() {\r\n\r\n // var selectFields = [];\r\n // if (this.dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance) {\r\n // selectFields = [\r\n // this.dealDto.AdditionalSecurity,\r\n // this.dealDto.ExitStrategy,\r\n // this.dealDto.InterestService,\r\n // this.dealDto.LoanTermReq,\r\n // this.dealDto.LoanPurpose,\r\n // ];\r\n // } else {\r\n // selectFields = [\r\n // this.dealDto.AdditionalSecurity,\r\n // this.dealDto.ExitStrategy,\r\n // this.dealDto.InterestService,\r\n // this.dealDto.SourceOfIncome,\r\n // this.dealDto.LoanPurpose,\r\n // this.dealDto.PlanningStatusAtStartOfLoan,\r\n // this.dealDto.PlanningStatusAtEndOfLoan\r\n // ];\r\n // }\r\n\r\n // if (this.loanDetailsForm.$invalid) return true;\r\n\r\n // if (this.dealDto.LoanPurpose && this.dealDto.LoanPurpose == LoanPurposeEnum.Other && this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction) {\r\n // if (!this.dealDto.LoanPurposeDescription || this.dealDto.LoanPurposeDescription.length == 0) {\r\n // return true;\r\n // }\r\n // }\r\n\r\n // for (let i = 0; i < selectFields.length; i++) {\r\n // if (selectFields[i] === 0 || selectFields[i] === '0') {\r\n // return true;\r\n // }\r\n // }\r\n\r\n // return false;\r\n //}\r\n\r\n checkIfUserIsInvited() {\r\n //added to scope for directive\r\n this.dealService\r\n .checkIfUserIsInvited(this.currentUser.Id, this.dealId)\r\n .then((response: InvitedUserResponse) => {\r\n // if user has no active subscription (and are not a lender or admin) then they should be redirected back to the dashboard\r\n if (\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PaidUp &&\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PreCancel &&\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !response.IsInvited &&\r\n !this.isAdmin &&\r\n !this.isLender\r\n ) {\r\n this.$location.path(\"/dashboard\");\r\n return;\r\n }\r\n\r\n (this.$rootScope as any).isInvitedToCase = response.IsInvited;\r\n\r\n if (response.IsInvited) {\r\n if (response.DealAccessLevel == CaseAccessLevelEnum.ReadOnly) {\r\n (this.$rootScope as any).isInvitedAndHasReadonlyAccess = true;\r\n }\r\n }\r\n\r\n this.$rootScope.$broadcast(\"invitedStatusChange\");\r\n });\r\n }\r\n\r\n modifyDateForBackend(property: Date) {\r\n return this.sharedDealService.modifyDateForBackend(property);\r\n }\r\n\r\n modifyDateForFrontend(property: Date) {\r\n return this.sharedDealService.modifyDateForFrontend(property);\r\n }\r\n\r\n disablePersonalDetails() {\r\n return this.sharedDealService.disablePersonalDetails(\r\n this.currentApplicant,\r\n this.personalDetailsForm,\r\n );\r\n }\r\n\r\n goToUserDashboard() {\r\n this.authService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange() {\r\n this.dealDto = this.commercialDealService.datasetupOnOwnOrPurchaseChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnIsTenantedBuildingChange() {\r\n if (!this.dealDto.IsTenantedBuilding) this.leaseItems = null;\r\n this.dealDto =\r\n this.commercialDealService.datasetupOnIsTenantedBuildingChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnMaxLoanRequiredChange() {\r\n this.dealDto = this.dealService.dataSetupOnMaxLoanRequiredChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n onPropertyTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.CaseDashboardTypeEnum.Property;\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n discardDealData(form: ng.IFormController = null) {\r\n event.stopPropagation();\r\n if (form == this.propertyDetailsForm) {\r\n this.dealDto = JSON.parse(JSON.stringify(this.tempDealDto));\r\n this.PostCodeOptions = [];\r\n this.searchterm = null;\r\n } else {\r\n this.dealDto = JSON.parse(JSON.stringify(this.tempDealDto));\r\n }\r\n\r\n if (form) {\r\n form.$setPristine();\r\n form.$setUntouched();\r\n }\r\n }\r\n\r\n onLoanTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.CaseDashboardTypeEnum.Loan;\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n onTabSelection() {\r\n this.tempDealDto = JSON.parse(JSON.stringify(this.dealDto));\r\n }\r\n\r\n discardApplicantData(form: ng.IFormController) {\r\n event.stopPropagation();\r\n this.currentApplicant = JSON.parse(JSON.stringify(this.tempApplicant));\r\n form.$setPristine();\r\n form.$setUntouched();\r\n }\r\n\r\n onApplicantTabSelection(tab) {\r\n const str = tab;\r\n this.tabs[str] = !this.tabs[str];\r\n\r\n this.tempApplicant = JSON.parse(JSON.stringify(this.currentApplicant));\r\n }\r\n\r\n carriageReturnCheck(event) {\r\n if (event.key === \"Enter\") {\r\n let position = event.target.selectionStart;\r\n if (this.newNote.NoteText) {\r\n this.newNote.NoteText = [\r\n this.newNote.NoteText.slice(0, position),\r\n \"\\n\",\r\n this.newNote.NoteText.slice(position),\r\n ].join(\"\");\r\n\r\n setTimeout(() => {\r\n event.target.setSelectionRange(position + 1, position + 1);\r\n }, 0);\r\n } else {\r\n this.newNote.NoteText = \"\\n\";\r\n }\r\n }\r\n }\r\n\r\n trustedHtml(plainText) {\r\n if (this.isClient && plainText.startsWith(\"Project submitted to lenders\")) {\r\n return this.$sce.trustAsHtml(\"Project submitted to lenders\");\r\n } else {\r\n return this.$sce.trustAsHtml(plainText);\r\n }\r\n }\r\n\r\n initialiseTitleAndTitleOption() {\r\n if (this.currentApplicant?.Profile) {\r\n const { Title, TitleOption } = this.currentApplicant.Profile;\r\n\r\n // If TitleOption has a value greater than 0, set Title to null\r\n if (\r\n (TitleOption > TitleEnum.None && TitleOption != TitleEnum.Other) ||\r\n Title == null\r\n ) {\r\n this.currentApplicant.Profile.Title = \"\";\r\n }\r\n // If Title exists and TitleOption is not set, set TitleOption to Other\r\n else if (Title && !TitleOption) {\r\n this.currentApplicant.Profile.TitleOption = TitleEnum.Other;\r\n }\r\n }\r\n }\r\n\r\n onTitleOptionChange() {\r\n const { TitleOption } = this.currentApplicant.Profile;\r\n\r\n if (TitleOption > 0 && TitleOption != TitleEnum.Other) {\r\n this.currentApplicant.Profile.Title = \"\";\r\n }\r\n }\r\n\r\n onOwnOrPurchaseChange(OwnOrPurchase: boolean) {\r\n this.dealDto.OwnOrPurchase = this.dealDto.HasOwnOrPurchase\r\n ? OwnOrPurchaseEnum.Own\r\n : OwnOrPurchaseEnum.Purchasing;\r\n this.datasetupOnOwnOrPurchaseChange();\r\n }\r\n\r\n onIsFamilyInResidenceChange() {\r\n this.dealDto.IsFamilyInResidence = this.dealDto.HasIsFamilyInResidence\r\n ? YesNoMaybe.Yes\r\n : YesNoMaybe.No;\r\n }\r\n\r\n initialDataSetupForIsFamilyInResidence() {\r\n if (this.dealDto.HasIsFamilyInResidence) {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.Yes;\r\n this.dealDto.HasIsFamilyInResidence = true;\r\n } else {\r\n this.dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n this.dealDto.HasIsFamilyInResidence = false;\r\n }\r\n }\r\n\r\n onIsMortgagedChange() {\r\n if (!this.dealDto.IsMortgaged) {\r\n this.dealDto.MortgageCurrentLender = null;\r\n this.dealDto.MortgageCurrentBalance = 0;\r\n }\r\n }\r\n\r\n goToLoanTypeSelectionPage() {\r\n if (this.isLoggedInUser) {\r\n this.authService.setHasValidStatustoShowShareSearchModal(\r\n true,\r\n );\r\n }\r\n this.$location.path(\"/allloans\");\r\n\r\n }\r\n\r\n onNumberOfTenanciesChange() {\r\n if (this.dealDto.NumberOfTenancies && this.dealDto.NumberOfTenancies > 1) {\r\n this.leaseItems = [];\r\n for (let i = 0; i < this.dealDto.NumberOfTenancies; i++) {\r\n var leaseItem = {\r\n TimeLeftOnLeaseYears: null,\r\n TimeLeftOnLeaseMonths: null,\r\n GrossMonthlyRentalIncome: \"\",\r\n } as LeaseItemDetails;\r\n this.leaseItems.push(leaseItem);\r\n }\r\n this.onGrossMonthlyRentalIncomeChange();\r\n } else if (\r\n this.dealDto.NumberOfTenancies &&\r\n this.dealDto.NumberOfTenancies == 1\r\n ) {\r\n this.leaseItems = [];\r\n var leaseItem = {\r\n TimeLeftOnLeaseYears: null,\r\n TimeLeftOnLeaseMonths: null,\r\n GrossMonthlyRentalIncome: \"\",\r\n } as LeaseItemDetails;\r\n this.leaseItems.push(leaseItem);\r\n this.isGrossMonthlyRentalIncomeMatch = true;\r\n } else {\r\n this.leaseItems = [];\r\n this.isGrossMonthlyRentalIncomeMatch = true;\r\n }\r\n }\r\n\r\n onGrossMonthlyRentalIncomeChange() {\r\n this.totalGrossMonthlyRentalIncome = this.leaseItems.reduce(function (\r\n a,\r\n b,\r\n ) {\r\n return (\r\n a +\r\n Number.parseInt(\r\n b.GrossMonthlyRentalIncome != \"\" ? b.GrossMonthlyRentalIncome : \"0\",\r\n )\r\n );\r\n }, 0);\r\n\r\n this.isGrossMonthlyRentalIncomeMatch =\r\n this.totalGrossMonthlyRentalIncome !=\r\n this.dealDto.GrossMonthlyRentalIncome\r\n ? false\r\n : true;\r\n }\r\n\r\n propertySaveDisabled() {\r\n var commonFields = [\r\n this.dealDto.OwnOrPurchase,\r\n this.dealDto.Locations,\r\n this.dealDto.IsFamilyInResidence,\r\n this.dealDto.PropertyAddress.AddressLine1,\r\n this.dealDto.PropertyAddress.PostCode,\r\n ];\r\n\r\n if (this.dealDto.ProductType == ProductTypeEnum.CommercialInvestment) {\r\n commonFields.push(this.dealDto.GrossMonthlyRentalIncome);\r\n }\r\n\r\n if (this.dealDto.IsTenantedBuilding) {\r\n if (\r\n this.dealDto.NumberOfTenancies == null ||\r\n this.dealDto.NumberOfTenancies == 0\r\n ) {\r\n return true;\r\n } else if (this.dealDto.NumberOfTenancies > 1) {\r\n for (let i = 0; i < this.leaseItems.length; i++) {\r\n if (\r\n this.leaseItems[i].GrossMonthlyRentalIncome == null ||\r\n this.leaseItems[i].TimeLeftOnLeaseMonths == null ||\r\n this.leaseItems[i].TimeLeftOnLeaseYears == null\r\n ) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.propertyDetailsForm && this.propertyDetailsForm.$invalid)\r\n return true;\r\n\r\n if (this.dealDto.PropertyTenure == null) return true;\r\n\r\n if (\r\n this.dealDto.PropertyTenure &&\r\n this.dealDto.PropertyTenure == TenureEnum.Leasehold\r\n ) {\r\n if (this.dealDto.YearsLeftOnLease == null) return true;\r\n }\r\n\r\n if (\r\n this.dealDto.IsFamilyInResidence == 0 ||\r\n this.dealDto.IsFamilyInResidence == YesNoMaybe.Yes\r\n )\r\n return true;\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (\r\n commonFields[i] == null ||\r\n commonFields[i] == \"0\" ||\r\n commonFields[i] == \"\"\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n if (this.leaseItems.length > 1) {\r\n if (\r\n this.leaseItems.find(\r\n (l) =>\r\n l.GrossMonthlyRentalIncome == null ||\r\n l.GrossMonthlyRentalIncome == \"\",\r\n )\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n loanSaveDisabled() {\r\n var selectFields = [\r\n this.dealDto.LoanRepaymentType,\r\n this.dealDto.CurrentPropertyType,\r\n this.dealDto.FixedRateTerm,\r\n this.dealDto.LoanCompletionType,\r\n ];\r\n\r\n if (this.loanDetailsForm.$invalid) return true;\r\n\r\n for (let i = 0; i < selectFields.length; i++) {\r\n if (selectFields[i] === 0 || selectFields[i] === \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Convert LeaseDeatails JSON back to an array of LeaseDeatails objects\r\n * @param leaseItemsJson\r\n */\r\n parseLeaseDetails(leaseItems: string) {\r\n if (leaseItems != null && leaseItems.length > 0) {\r\n // JSON doesn't understand date types so therefore user the reviver function to manually convert them back to dates as opposed to strings\r\n this.leaseItems = JSON.parse(leaseItems, this.sharedDealService.reviver);\r\n }\r\n\r\n if (this.leaseItems != null && this.leaseItems.length > 1) {\r\n this.onGrossMonthlyRentalIncomeChange();\r\n }\r\n }\r\n\r\n initMortgageTerm() {\r\n this.dealDto.LoanTermReq = this.dealDto.LoanTermReq || 240;\r\n this.mortgageTerm = this.dealDto.LoanTermReq / 12;\r\n }\r\n\r\n mortgageTermToLoanTerm() {\r\n this.dealDto.LoanTermReq = this.mortgageTerm * 12;\r\n }\r\n\r\n onCurrentUseOfBuilding() {\r\n this.dealDto = this.commercialDealService.datasetupOnCurrentUseOfBuilding(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n onMortgageProductChange() {\r\n if (this.dealDto.MortgageInterestType == InterestRateTypeEnum.Variable) {\r\n this.dealDto.FixedRateTerm = null;\r\n } else if (\r\n this.dealDto.MortgageInterestType == InterestRateTypeEnum.Fixed\r\n ) {\r\n this.dealDto.FixedRateTerm = FixedRateTermEnum.FiveYear;\r\n }\r\n }\r\n\r\n onPropertyTenureChange() {\r\n if (this.dealDto.PropertyTenure == TenureEnum.Freehold) {\r\n this.dealDto.YearsLeftOnLease = 0;\r\n }\r\n }\r\n\r\n onOriginalGrossMonthlyRentalIncomeChange() {\r\n if (\r\n this.dealDto.GrossMonthlyRentalIncome != null &&\r\n this.totalGrossMonthlyRentalIncome ==\r\n this.dealDto.GrossMonthlyRentalIncome\r\n ) {\r\n this.isGrossMonthlyRentalIncomeMatch = true;\r\n }\r\n }\r\n\r\n calculateTotalShareholding(currentapplicant: DealClientDTO) {\r\n return this.sharedDealService.calculateTotalShareholding(\r\n currentapplicant,\r\n this.applicantList,\r\n );\r\n }\r\n\r\n getOrganisationbyDealId() {\r\n this.organisationService\r\n .getOrganisationAndBrokerByDealId(this.dealDto.Id)\r\n .then((response) => {\r\n this.org = response.Organisation;\r\n this.dealBrokerUser = response.Broker;\r\n //this.brokerCommission = this.dealDto.Status == CaseStatusEnum.NewCase ? this.org?.CommissionPercent : this.dealDto.BrokerCommissionPercent;\r\n this.brokerPreferredContact =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? this.dealBrokerUser?.PhoneNumber\r\n : this.dealDto.BrokerPhoneNumber;\r\n if (this.org.IsWhiteLabelled) {\r\n this.fileNamePrefix = this.org.Name.replace(/ /g, \"_\");\r\n } else {\r\n this.fileNamePrefix = \"Brickflow\";\r\n }\r\n });\r\n }\r\n\r\n updateRequestAssitanceDealNoteMessage() {\r\n if (this.dealDto?.DealNotes != null && this.currentUser != null) {\r\n this.dealDto.DealNotes = this.dealDto.DealNotes.map((d) => {\r\n if (\r\n d.UserId != this.currentUser.Id &&\r\n (d.NoteText == \"Your have requested for assistance.\" ||\r\n d.NoteText == \"You have requested assistance.\")\r\n ) {\r\n return { ...d, NoteText: `${d.UserFullName} requested assistance.` };\r\n }\r\n\r\n return d;\r\n });\r\n }\r\n }\r\n\r\n getOwnershipPercentageText() {\r\n if (this.dealDto != null) {\r\n return this.sharedDealService.getOwnershipPercentageText(\r\n this.currentApplicant,\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n return \"Shareholding\";\r\n }\r\n\r\n closeSubmitToLenderModal() {\r\n this.showTsAndCs = false;\r\n // this.brokerCommission = this.dealDto.Status == CaseStatusEnum.NewCase ? this.org?.CommissionPercent : this.dealDto.BrokerCommissionPercent;\r\n this.brokerPreferredContact =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? this.dealBrokerUser?.PhoneNumber\r\n : this.dealDto.BrokerPhoneNumber;\r\n this.isBrokerPhoneNumberUpdated = false;\r\n }\r\n\r\n isCompanyAndOwnershipSaveDisabled() {\r\n return this.dealDto.HowWillYouOwnNewDevelopment == null ||\r\n this.dealDto.HowWillYouOwnNewDevelopment <= 0\r\n ? true\r\n : false;\r\n }\r\n\r\n showBasedOnMainResidence() {\r\n return this.dealService.showBasedOnMainResidence(this.dealDto);\r\n }\r\n\r\n getRequiredRolesOptions() {\r\n return this.dealService.getRequiredRolesOptions(true, this.isReadOnlyDeal);\r\n }\r\n\r\n generateCaseStatusText() {\r\n if (this.isLender) {\r\n this.caseStatusOptions = this.selectListService.GetCaseLenderStateOptionsForLenders();\r\n }\r\n else {\r\n this.caseStatusOptions = this.selectListService.GetCaseStatusOptions(this.currentUser && this.currentUser.IsConnectUser);\r\n }\r\n this.getCaseStatusDisplayText();\r\n\r\n }\r\n\r\n showEditDealNameButton() {\r\n if (!this.isReadOnlyDeal && (!this.currentUser?.IsConnectUser || (this.currentUser?.IsConnectUser && !this.dealDto.IsReferredToConnect))) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n logExportDownload(eventName) {\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n this.dealDto.ProductType,\r\n this.dealDto.Id,\r\n );\r\n }\r\n\r\n getTinymceOptions = function () {\r\n return this.isLender || this.isReadOnlyDeal ? this.tinymceReadonlyOptions : this.tinymceOptions;\r\n };\r\n}\r\n","import { CommercialLenderResultSummaryDTO } from \"@js/DTO/SearchResults/CommercialLenderResultSummaryDTO.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { CommercialDealService } from \"@js/services/Deal/CommercialDealService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\n\r\nexport class CommercialComparisonController {\r\n isLoading: boolean;\r\n selectedCandidates: CommercialLenderResultSummaryDTO[];\r\n\r\n //Lender Logos\r\n showLenderLogo: boolean = false;\r\n\r\n dealId: number;\r\n uniqueid: string;\r\n criteria: {} = {};\r\n\r\n //This needs to be set to true as we are using a same view.\r\n isDeal: boolean = true;\r\n\r\n productLastVerifiedDates = {};\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$http\",\r\n \"OrganisationService\",\r\n \"CommercialDealService\",\r\n \"$routeParams\",\r\n \"ProductService\"\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private organisationService: OrganisationService,\r\n private commercialDealService: CommercialDealService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private productService: ProductService\r\n ) {\r\n this.showOrHideLenderLogo();\r\n\r\n if (this.$routeParams.DealId) {\r\n this.dealId = this.$routeParams.DealId;\r\n }\r\n\r\n //if ((this.$rootScope as any).selectedUser || sessionStorage.getItem('SelectedUser')) {\r\n // if ((this.$rootScope as any).selectedUser) {\r\n // this.selectedUser = (this.$rootScope as any).selectedUser;\r\n // sessionStorage.setItem('SelectedUser', JSON.stringify(this.selectedUser));\r\n // } else if (sessionStorage.getItem('SelectedUser')) {\r\n // this.selectedUser = JSON.parse(sessionStorage.getItem('SelectedUser'));\r\n // }\r\n //}\r\n\r\n if (\r\n sessionStorage.getItem(\"ComparisonList\") &&\r\n sessionStorage.getItem(\"LoanCriteria\")\r\n ) {\r\n this.selectedCandidates = JSON.parse(\r\n sessionStorage.getItem(\"ComparisonList\"),\r\n );\r\n this.criteria = JSON.parse(sessionStorage.getItem(\"LoanCriteria\"));\r\n const productIds = this.selectedCandidates.map((product) => product.ProductID);\r\n this.getProductLastVerifiedDates(productIds);\r\n } else {\r\n this.goToResults();\r\n }\r\n }\r\n\r\n showOrHideLenderLogo() {\r\n this.organisationService.showLenderNamesAndLogos().then((result) => {\r\n this.showLenderLogo = result;\r\n });\r\n }\r\n\r\n goToResults(): void {\r\n sessionStorage.setItem(\r\n \"ComparisonList\",\r\n JSON.stringify(this.selectedCandidates),\r\n );\r\n\r\n this.commercialDealService.fetch(this.dealId).then((result) => {\r\n if (\r\n result.Status == CaseStatusEnum.ReadyToReSubmit ||\r\n result.Status == CaseStatusEnum.SubmittedToLendersForHoT\r\n ) {\r\n this.$location.path(\"/commercialshortlistmore/\" + this.dealId);\r\n } else {\r\n this.$location.path(\"/commercialresults/\" + this.dealId);\r\n }\r\n });\r\n }\r\n\r\n getProductLastVerifiedDates(productIds: number[]) {\r\n this.productService.getLastVerifiedDates(productIds).then((response) => {\r\n productIds.forEach(id => {\r\n if (response[id] != null) {\r\n this.productLastVerifiedDates[id] = this.formatDate(response[id]);\r\n } \r\n })\r\n });\r\n }\r\n\r\n formatDate = (dateString) => {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString('en-GB');\r\n };\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { DealFileAttachmentDTO } from \"@js/DTO/Deal/DealFileAttachmentDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { DealLenderMessageDTO } from \"@js/DTO/Deal/DealLenderMessageDTO.cs.d\";\r\nimport { FeedBackDTO } from \"@js/DTO/FeedBackDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { BridgingSubmitOfferRequest } from \"@js/DTO/Messages/Deal/BridgingSubmitOfferMessage.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { InterestRateTypeEnum } from \"@js/models/enum/InterestRateTypeEnum.cs.d\";\r\nimport { LoanRepaymentTypeEnum } from \"@js/models/enum/LoanRepaymentTypeEnum.cs.d\";\r\nimport { MessageRoleEnum } from \"@js/models/enum/MessageRoleEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CommercialDealService } from \"@js/services/Deal/CommercialDealService\";\r\nimport { DealLenderMessageService } from \"@js/services/Deal/DealLenderMessageService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { SharedHeadsOfTermsService } from \"@js/services/Deal/SharedHeadsOfTermsService\";\r\nimport { DealFileAttachmentService } from \"@js/services/DealFileAttachmentService\";\r\nimport { FeedBackService } from \"@js/services/FeedBackService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class CommercialHeadsOfTermsController {\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"RoleService\",\r\n \"DealLenderMessageService\",\r\n \"DealFileAttachmentService\",\r\n \"$window\",\r\n \"CommercialDealService\",\r\n \"DealLenderService\",\r\n \"SelectListService\",\r\n \"FeedBackService\",\r\n \"UserService\",\r\n \"AuthService\",\r\n \"ProductService\",\r\n \"SharedHeadsOfTermsService\"\r\n ];\r\n\r\n isCommercial: boolean = true;\r\n dataLoading: boolean = false; // Controls showing the data loading \"spinner\"\r\n dealLenders: DealLenderDTO[];\r\n showInformationMessage: boolean = false;\r\n messageContent: string;\r\n\r\n showDirection: boolean = false;\r\n\r\n toggleFeedbackSection: boolean = false;\r\n toggleHoTDetailSection: boolean = false;\r\n toggleRejectSection: boolean = false;\r\n toggleWithdrawSection: boolean = false;\r\n currentUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n isLender: boolean = false;\r\n isBroker: boolean = false;\r\n isAdmin: boolean = false;\r\n isClient: boolean = false;\r\n\r\n // show different sections to Lender based on which button clicked on Case Dashboard\r\n showFeedbackSectionLender: boolean = false;\r\n showHoTDetailSectionLender: boolean = false;\r\n showRejectSectionLender: boolean = false;\r\n showWithdrawSectionLender: boolean = false;\r\n\r\n showTsAndCsModal: boolean = false;\r\n showTsAndCsForm: boolean = false;\r\n sendingMessage: boolean = false;\r\n goToUserDashboard: boolean = false;\r\n\r\n currentDeal: CommercialDealDTO;\r\n currentCaseLender: DealLenderDTO;\r\n\r\n grossLoanCalcVal: number = 0;\r\n builLoanCalcVal: number = 0;\r\n landLoanCalcVal: number = 0;\r\n monetaryLAFee: number = 0;\r\n monetaryLEFee: number = 0;\r\n lenderTask: string = \"\";\r\n\r\n isRejectClicked: boolean = false;\r\n isWithdrawClicked: boolean = false;\r\n isConfirmClicked: boolean = false;\r\n isSubmitClicked: boolean = false;\r\n\r\n //Lender Message\r\n newChatMessage: string = \"\";\r\n showFullMessageId: number;\r\n\r\n //files\r\n fileUpload: DealFileAttachmentDTO[];\r\n uploadingFiles: FileUploadProgressDTO[];\r\n openModal: boolean = false;\r\n module = ModuleEnum.DIP;\r\n\r\n showFullLenderMessage = false;\r\n showFullBorrowerMessage = false;\r\n monthlyInterestRate: number = 0;\r\n showAutofill: boolean = false;\r\n\r\n mortgageProductType = [];\r\n loanRepaymentType = [];\r\n\r\n //Lender/Broker feedback properties\r\n showLenderFeedBackModal: boolean = false;\r\n showBrokerFeedBackModal: boolean = false;\r\n feedBackDTO: FeedBackDTO;\r\n prevPath: string;\r\n brokerName: string;\r\n brokerOrganisationName: string;\r\n lendingForm: ng.IFormController;\r\n\r\n //Deleteing a chat message\r\n selectedDealLenderMessageDto: DealLenderMessageDTO;\r\n showdeleteChatMessageModal: boolean = false;\r\n showConfirmDeleteButton: boolean = false;\r\n productTypeText: string = null;\r\n\r\n noLenderOrMoreLenderError:boolean = false;\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private roleService: RoleService,\r\n private dealLenderMessageService: DealLenderMessageService,\r\n private dealFileAttachmentService: DealFileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private commercialDealService: CommercialDealService,\r\n private dealLenderService: DealLenderService,\r\n private selectListService: SelectListService,\r\n private feedBackService: FeedBackService,\r\n private userService: UserService,\r\n private $auth: AuthService,\r\n private productService: ProductService,\r\n private sharedHeadsOfTermsService :SharedHeadsOfTermsService\r\n\r\n ) {\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n\r\n this.feedBackDTO = {} as FeedBackDTO;\r\n\r\n if (\r\n this.$routeParams.openModule &&\r\n this.$routeParams.openModule == \"withdraw\"\r\n ) {\r\n this.toggleWithdrawSection = true;\r\n } else if (\r\n this.$routeParams.openModule &&\r\n this.$routeParams.openModule == \"reject\"\r\n ) {\r\n this.toggleRejectSection = true;\r\n } else if (this.$routeParams.openModule) {\r\n this.toggleFeedbackSection = true;\r\n }\r\n\r\n if (this.$routeParams.DealId && this.$routeParams.DealLenderId) {\r\n this.dataLoading = true;\r\n\r\n this.commercialDealService\r\n .fetch(this.$routeParams.DealId)\r\n .then((response) => {\r\n this.currentDeal = response;\r\n if (this.currentDeal) {\r\n this.dealLenderService\r\n .fetchByDealId(\r\n this.$routeParams.DealId,\r\n this.roleService.getIsLenderVisible(),\r\n this.$routeParams.DealLenderId,\r\n )\r\n .then((response) => {\r\n this.dealLenders = response;\r\n if (this.$routeParams.DealLenderId) {\r\n if (this.dealLenders.length != 1) {\r\n this.noLenderOrMoreLenderError = true;\r\n return;\r\n }\r\n this.currentCaseLender = this.dealLenders[0];\r\n\r\n this.fileUpload = this.currentDeal.Attachments.filter((f) => {\r\n return f.DealLenderId == this.$routeParams.DealLenderId;\r\n });\r\n }\r\n }).finally(() => {\r\n this.populateLenderInformation(this.currentUser)\r\n });\r\n\r\n this.lenderTask = sessionStorage.getItem(\"lenderTask\");\r\n if (this.lenderTask != null && this.lenderTask.length > 0) {\r\n switch (this.lenderTask) {\r\n case \"reject\":\r\n this.showRejectSectionLender = true;\r\n break;\r\n case \"withdraw\":\r\n this.showWithdrawSectionLender = true;\r\n break;\r\n case \"feedback\":\r\n this.showFeedbackSectionLender = true;\r\n this.updateCaseLenderMessageReadDatetime();\r\n break;\r\n case \"terms\":\r\n this.showHoTDetailSectionLender = true;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.productTypeText = this.productService.getProductTypeFullName(\r\n this.currentDeal.ProductType,\r\n );\r\n } else {\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.getCurrentUserAndRoles();\r\n });\r\n }\r\n\r\n // this.BasisOfInterestRateOptions = this.selectListService.GetInterestRateBasis();\r\n // this.InterestRateTypeOptions = this.selectListService.GetInterestRateType();\r\n this.mortgageProductType = this.selectListService.GetInterestRateType();\r\n this.loanRepaymentType =\r\n this.selectListService.GetLoanRepaymentTypeOptions();\r\n }\r\n\r\n checkingIfUserIsLender() {\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n });\r\n }\r\n\r\n checkingIfUerIsBroker() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isBroker()\r\n .then((response) => {\r\n this.isBroker = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsAdmin() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isAdminUser()\r\n .then((response) => {\r\n this.isAdmin = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsClient() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isClientUser()\r\n .then((response) => {\r\n this.isClient = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /** Redirects to the case dashboard */\r\n goToCaseDashboard() {\r\n this.showFeedbackSectionLender = false;\r\n this.showHoTDetailSectionLender = false;\r\n this.showRejectSectionLender = false;\r\n this.showWithdrawSectionLender = false;\r\n if (\r\n this.isBroker && this.currentCaseLender &&\r\n !this.currentCaseLender.IsLenderReviewComplete &&\r\n (this.currentCaseLender.Status == CaseLenderStateEnum.Offered ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Rejected ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)\r\n ) {\r\n this.prevPath = \"commercialcasedashboard\";\r\n this.feedBackDTO.IsLenderFeedback = true;\r\n this.showLenderFeedBackModal = true;\r\n } else {\r\n this.$location.path(\"/commercialcasedashboard/\" + this.currentDeal.Id);\r\n }\r\n }\r\n\r\n /** Close modal after send feedback */\r\n closeModal() {\r\n this.showDirection = false;\r\n this.showTsAndCsModal = false;\r\n this.showInformationMessage = false;\r\n this.isConfirmClicked = false;\r\n this.showdeleteChatMessageModal = false;\r\n if (this.goToUserDashboard) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n this.goToUserDashboard = false;\r\n this.showFeedbackSectionLender = false;\r\n this.showHoTDetailSectionLender = false;\r\n this.showRejectSectionLender = false;\r\n this.showWithdrawSectionLender = false;\r\n }\r\n\r\n if (this.prevPath) {\r\n if (this.isLender) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(`/${this.prevPath}/${this.currentDeal.Id}`);\r\n }\r\n }\r\n }\r\n\r\n goToLending() {\r\n if (\r\n this.isBroker && this.currentCaseLender &&\r\n !this.currentCaseLender.IsLenderReviewComplete &&\r\n (this.currentCaseLender.Status == CaseLenderStateEnum.Offered ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Rejected ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)\r\n ) {\r\n this.prevPath = \"dealforum\";\r\n this.feedBackDTO.IsLenderFeedback = true;\r\n this.showLenderFeedBackModal = true;\r\n } else {\r\n this.$location.path(\"/dealforum/\" + this.currentDeal.Id);\r\n }\r\n }\r\n\r\n saveUpdatedCaseLender(): void {\r\n this.dealLenderService\r\n .addUpdate(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender = response;\r\n this.messageContent = \"Your changes have been saved.\";\r\n this.showInformationMessage = true;\r\n });\r\n }\r\n\r\n dummyDIP() {\r\n this.dealLenderService.dummyDIP(this);\r\n }\r\n\r\n /** Process the Reject button being clicked*/\r\n rejectClicked(): void {\r\n this.isRejectClicked = true;\r\n this.dealLenderService\r\n .rejectCase(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"The borrower has been notified you have rejected their application.\";\r\n })\r\n .catch((error) => {\r\n this.messageContent = \"Sorry, something went wrong. Please try again.\";\r\n this.isRejectClicked = false;\r\n })\r\n .finally(() => {\r\n this.goToUserDashboard = true;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n ///**Process the Withdraw button being clicked */\r\n withdrawClicked(): void {\r\n this.isWithdrawClicked = true;\r\n this.dealLenderService\r\n .withdrawHoT(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"The borrower has been notified you have withdrawn terms for their application.\";\r\n })\r\n .catch((error) => {\r\n this.messageContent = \"Sorry, something went wrong. Please try again.\";\r\n this.isWithdrawClicked = false;\r\n })\r\n .finally(() => {\r\n this.goToUserDashboard = true;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n ///**Process the Submit button being clicked */\r\n submitClicked() {\r\n this.isConfirmClicked = true;\r\n this.showTsAndCsModal = true;\r\n }\r\n\r\n ///**Heads of Terms Submit button clicked event */\r\n submitHoTClicked() {\r\n // Close the Heads of Terms' Terms and Conditions modal\r\n this.showTsAndCsModal = false;\r\n this.sendingMessage = true;\r\n\r\n var request = {\r\n dealLender: this.currentCaseLender,\r\n dealLenderStatus: this.currentCaseLender.Status,\r\n } as BridgingSubmitOfferRequest;\r\n\r\n // Submit the Heads of Terms\r\n this.dealLenderService\r\n .submitOffer(request)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.dealLenderStatus;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"Thank you for submitting a Decision in Principle.\";\r\n this.goToUserDashboard = true;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while submitting your Decision in Principle. Please try again.\";\r\n this.isConfirmClicked = false;\r\n })\r\n .finally(() => {\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n this.sendingMessage = false;\r\n });\r\n }\r\n\r\n /**\r\n * Process the Send Feedback button being clicked\r\n * @param message\r\n */\r\n sendChatMessage() {\r\n \r\n this.dataLoading = true;\r\n let DealChatMessage = {\r\n Message: this.newChatMessage,\r\n DealId: this.$routeParams.DealId,\r\n DealLenderId: this.$routeParams.DealLenderId,\r\n SenderRole: this.getSenderMessageRole(),\r\n RecipientRoles: this.isLender ? 10 : 4,\r\n } as DealLenderMessageDTO;\r\n\r\n this.dealLenderMessageService\r\n .addUpdate(DealChatMessage)\r\n .then((dealChatMessageResponse) => {\r\n this.currentCaseLender.DealLenderMessage.push(dealChatMessageResponse);\r\n this.newChatMessage = null;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while sending feedback. Please try again.\";\r\n }).finally(() =>{\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n showFullChatMessage(index) {\r\n this.showFullMessageId = index;\r\n }\r\n\r\n updateCaseLenderMessageReadDatetime() {\r\n this.dealLenderMessageService\r\n .updateDealLenderMessageReadDatetime(this.$routeParams.DealLenderId)\r\n .then((caseLenderMessageResponse) => { });\r\n }\r\n\r\n onFileSelect(files: FileAttachmentDTO[], module: ModuleEnum) {\r\n if (files.length > 0) {\r\n this.dealFileAttachmentService\r\n .UploadFileListInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.$routeParams.DealId,\r\n this.fileUpload,\r\n module,\r\n this.$routeParams.DealLenderId,\r\n )\r\n .then((result) => {\r\n this.openModal = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: DealFileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n deleteFile(file: DealFileAttachmentDTO) {\r\n this.fileUpload.splice(this.fileUpload.indexOf(file), 1);\r\n this.dealFileAttachmentService.markasdeleted(file.Id).then((result) => { }); //remove on the server\r\n }\r\n\r\n showActionButtons() {\r\n if (this.currentCaseLender && (this.currentCaseLender.Status == CaseLenderStateEnum.Received || this.currentCaseLender.Status == CaseLenderStateEnum.Rejected || this.currentCaseLender.Status == CaseLenderStateEnum.Offered || this.currentCaseLender.Status == CaseLenderStateEnum.Cancelled || this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n calculatemonetaryLAFee() {\r\n if (\r\n this.currentCaseLender.LenderArrangementFeePercent != null &&\r\n this.currentCaseLender.LenderArrangementFeePercent > 0 &&\r\n this.currentCaseLender.TotalNetLoan != null &&\r\n this.currentCaseLender.TotalNetLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderArrangementFee =\r\n Math.round(\r\n this.currentCaseLender.TotalNetLoan *\r\n this.currentCaseLender.LenderArrangementFeePercent *\r\n 100,\r\n ) / 100;\r\n } else {\r\n this.currentCaseLender.LenderArrangementFee = 0;\r\n }\r\n }\r\n\r\n calculatemonetaryLAPercent() {\r\n if (\r\n this.currentCaseLender.LenderArrangementFee != null &&\r\n this.currentCaseLender.LenderArrangementFee > 0 &&\r\n this.currentCaseLender.TotalNetLoan != null &&\r\n this.currentCaseLender.TotalNetLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderArrangementFeePercent =\r\n this.currentCaseLender.LenderArrangementFee /\r\n this.currentCaseLender.TotalNetLoan;\r\n\r\n this.currentCaseLender.LenderArrangementFeePercent = parseFloat(\r\n this.currentCaseLender.LenderArrangementFeePercent.toFixed(4),\r\n );\r\n } else {\r\n this.currentCaseLender.LenderArrangementFeePercent = 0;\r\n }\r\n }\r\n\r\n getMortgageInterestTypeText(e: InterestRateTypeEnum) {\r\n switch (e) {\r\n case InterestRateTypeEnum.Fixed:\r\n return \"Fixed\";\r\n case InterestRateTypeEnum.Variable:\r\n return \"Variable\";\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n getRepaymentTypeText(e: LoanRepaymentTypeEnum) {\r\n switch (e) {\r\n case LoanRepaymentTypeEnum.InterestOnly:\r\n return \"Interest only\";\r\n case LoanRepaymentTypeEnum.Repayment:\r\n return \"Capital & Interest\";\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n addClass(star: number, id: string) {\r\n this.feedBackService.addClass(star, id);\r\n }\r\n\r\n removeClass(star: number, id: string, rating) {\r\n this.feedBackService.removeClass(star, id, rating);\r\n }\r\n\r\n isFeedBackFormDisabled() {\r\n return this.feedBackService.isFeedBackFormDisabled(\r\n this.isLender,\r\n this.feedBackDTO,\r\n );\r\n }\r\n\r\n updateRating(star, rating) {\r\n this.feedBackDTO = this.feedBackService.updateRating(\r\n star,\r\n rating,\r\n this.feedBackDTO,\r\n );\r\n }\r\n\r\n submitFeedBack() {\r\n if (this.isLender) {\r\n this.feedBackDTO.OrganisationId = this.currentDeal.BrokerOrganisationId;\r\n this.feedBackDTO.BrokerUserId = this.currentDeal.BrokerUserId;\r\n } else {\r\n this.feedBackDTO.LenderId = this.currentCaseLender.LenderId;\r\n }\r\n\r\n this.feedBackService\r\n .addFeedBack(this.feedBackDTO, this.currentCaseLender.Id, true)\r\n .then((response) => {\r\n if (this.isLender) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(`/${this.prevPath}/${this.currentDeal.Id}`);\r\n }\r\n });\r\n }\r\n\r\n showBrokerFeedBack() {\r\n this.feedBackDTO.IsBrokerFeedback = true;\r\n this.showBrokerFeedBackModal = true;\r\n }\r\n\r\n onClickDeleteMessageButton(message: DealLenderMessageDTO) {\r\n this.showdeleteChatMessageModal = true;\r\n this.messageContent = \"Are you sure you want to delete a selected message?\";\r\n this.selectedDealLenderMessageDto = message;\r\n this.showConfirmDeleteButton = true;\r\n }\r\n\r\n deleteChatMessage() {\r\n this.dataLoading = true;\r\n this.dealLenderMessageService\r\n .markasdeleted(this.selectedDealLenderMessageDto.Id)\r\n .then((response) => {\r\n this.currentCaseLender.DealLenderMessage =\r\n this.currentCaseLender.DealLenderMessage.filter(\r\n (x) => x.Id != this.selectedDealLenderMessageDto.Id,\r\n );\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while deleting message. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.showdeleteChatMessageModal = false;\r\n delete this.selectedDealLenderMessageDto;\r\n this.showConfirmDeleteButton = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getCurrentUserAndRoles() {\r\n this.dataLoading = true;\r\n this.userService\r\n .getcurentuserrecord()\r\n .then((result) => {\r\n this.currentUser = result;\r\n\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n });\r\n\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n });\r\n\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n });\r\n\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n if (!this.isLender) {\r\n this.toggleFeedbackSection = true;\r\n this.updateCaseLenderMessageReadDatetime();\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getSenderMessageRole() {\r\n if (this.isLender) {\r\n return MessageRoleEnum.Lender;\r\n } else if (this.isBroker) {\r\n return MessageRoleEnum.Broker;\r\n } else if (this.isAdmin) {\r\n return MessageRoleEnum.Admin;\r\n } else if (this.isClient) {\r\n return MessageRoleEnum.Client;\r\n }\r\n }\r\n\r\n populateLenderInformation(user: ApplicationUserDTO) {\r\n if (this.isLender) {\r\n this.currentCaseLender.ContactName = user.FullName;\r\n this.currentCaseLender.ContactEmail = user.Email;\r\n this.currentCaseLender.ContactMobilePhoneNumber = user.PhoneNumber;\r\n } \r\n }\r\n\r\n isCurrentUserAllowedToSendChat(){\r\n if(this.currentUser && this.currentDeal && (this.toggleFeedbackSection||this.showFeedbackSectionLender)){\r\n return this.sharedHeadsOfTermsService.isCurrentUserAllowedToSendChat(this.isBroker,this.currentDeal.Status,this.currentDeal.IsReferredToConnect,this.currentUser)\r\n }\r\n return false;\r\n }\r\n}\r\n","export const enum EPCRatingTypeEnum {\r\n None = 0,\r\n A = 1,\r\n B = 2,\r\n C = 4,\r\n D = 8,\r\n E = 16,\r\n AboveE = 32,\r\n AtoC = 7,\r\n DtoE = 24,\r\n}\r\n","export const enum EWS1GradeTypeEnum {\r\n None = 0,\r\n A = 1,\r\n B = 2,\r\n}\r\n","export const enum MaxIndividualUnitPriceEnum {\r\n None,\r\n NoMax = 0,\r\n UpTo1Million = 1,\r\n UpTo2Million = 2,\r\n UpTo5Million = 3,\r\n}\r\n","export const enum TimeLeftOnLeaseEnum {\r\n None = 0,\r\n LessThanYear = 1,\r\n OneToThreeYears = 2,\r\n MoreThanThreeYears = 3,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { LenderProductPairDTO } from \"@js/DTO/LenderProductPairDTO.cs\";\r\nimport { SaveAsSearchRequest } from \"@js/DTO/Messages/Deal/SaveAsSearchMessage.cs.d\";\r\nimport { SaveCommercialSearchRequest } from \"@js/DTO/Messages/Deal/SaveCommercialSearchMessage.cs.d\";\r\nimport { MakeReferralMessageRequest } from \"@js/DTO/Messages/MakeReferralMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { CommercialLenderResultSummaryDTO } from \"@js/DTO/SearchResults/CommercialLenderResultSummaryDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { BridgingPersonalGuaranteeLevelEnum } from \"@js/models/enum/BridgingPersonalGuaranteeLevelEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { EPCRatingTypeEnum } from \"@js/models/enum/EPCRatingTypeEnum.cs.d\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\nimport { EWS1GradeTypeEnum } from \"@js/models/enum/EWS1GradeTypeEnum.cs.d\";\r\nimport { FixedRateTermEnum } from \"@js/models/enum/FixedRateTermEnum.cs.d\";\r\nimport { InterestRateTypeEnum } from \"@js/models/enum/InterestRateTypeEnum.cs.d\";\r\nimport { MaxIndividualUnitPriceEnum } from \"@js/models/enum/MaxIndividualUnitPriceEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { SortByEnum } from \"@js/models/enum/SortByEnum.cs.d\";\r\nimport { TimeLeftOnLeaseEnum } from \"@js/models/enum/TimeLeftOnLeaseEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CommercialDealService } from \"@js/services/Deal/CommercialDealService\";\r\nimport { CommercialSearchResultsService } from \"@js/services/Deal/CommercialSearchResultsService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { SharedSearchResultsService } from \"@js/services/Deal/SharedSearchResultsService\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { SharedDataService } from \"@js/services/SharedDataService\";\r\n\r\ndeclare const window: Window & { dataLayer: any[] };\r\n\r\nexport class CommercialLenderResultScreenController {\r\n loadingData: boolean = false;\r\n // tourState: any = {\r\n // tourStep: 1,\r\n // tourTotalSteps: 0,\r\n // };\r\n guidanceCheckbox: boolean = true;\r\n // tourEnabled: boolean = false;\r\n totalLender: number = 0;\r\n isSearch: boolean = true;\r\n debug1: boolean = false;\r\n loanCriteria: CommercialDealDTO;\r\n dealLenders: DealLenderDTO[];\r\n tempLoanCriteria = null;\r\n comparisonList: CommercialLenderResultSummaryDTO[] = [];\r\n snapshotNewSearch: boolean = false;\r\n isShortlistingMore: boolean = false;\r\n isLoggedInUser: boolean = false;\r\n showLenderNamesAndLogosOverride: boolean = false;\r\n searchid: number = null;\r\n dealUniqueRef: string = null;\r\n dealClientUniqueRef: string = null;\r\n orgCode: string;\r\n orgName: string = \"Brickflow\";\r\n mortgageTerm: number = 0;\r\n userLenderId: number = null;\r\n\r\n //session storage values for enterprise journey\r\n userRole: string = null;\r\n clientId: string = null;\r\n isClient: boolean = false;\r\n\r\n //Enterprise user\r\n user: ApplicationUserDTO;\r\n showEnterpriseRegistrationModal: boolean = false;\r\n projectName: string = \"\";\r\n hasAccessToDeal: boolean = true;\r\n summarySearchResults: CommercialLenderResultSummaryDTO[];\r\n initialSummarySearchResults: CommercialLenderResultSummaryDTO[];\r\n productLastVerifiedDates = {};\r\n deletedDealLenders: LenderProductPairDTO[];\r\n sliderShown: boolean;\r\n isAssigned: boolean = false;\r\n inActiveDealLender: number = 0;\r\n brokerageOrg: OrganisationDTO;\r\n moveContactBrokerBtnInMiddle: boolean = false;\r\n brokerDetail: string = \"\";\r\n brokerageOrgFilename: string;\r\n selectedUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n isAdmin: boolean = false;\r\n isLender: boolean = false;\r\n isBroker: boolean = false;\r\n\r\n //These are added for new search functinality\r\n existingUsers: UserSimpleDTO[];\r\n newSearch: boolean = false;\r\n existingborrower: boolean;\r\n showClientDetails: boolean = false;\r\n\r\n isLoggingOut: boolean = false;\r\n appName: string;\r\n shareDealDto: ShareDealDTO = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n\r\n toggleEditSearchName: boolean = false;\r\n showProductNote: boolean = false;\r\n productNote: string;\r\n offer: CommercialLenderResultSummaryDTO;\r\n loanLabel: string;\r\n displayMsg: string = null;\r\n showMsg: boolean = false;\r\n ShowdeleteSearch: boolean = false;\r\n warningOff: boolean = false;\r\n emailExistsError: boolean = false;\r\n noOfShortlistAllowed: number = 5;\r\n showMessageToborrower: boolean = false;\r\n borrowerMessage: string = \"\";\r\n showContactBrokerModal: boolean = false;\r\n\r\n borrowingEntityTypeOptions = [];\r\n interestRateTypeOptions = [];\r\n loanRepaymentTypeOptions = [];\r\n timeLeftOnLeaseOptions = [];\r\n numberOfPreviousDevelopmentsOptions = [];\r\n personalGuaranteeLevelOptions = [];\r\n maxIndividualUnitPriceOptions = [];\r\n acceptableEPCRatingOptions = [];\r\n acceptableEWS1GradeTypeOptions = [];\r\n currentUseofBuildingOptions = [];\r\n tradingPeriodOptions = [];\r\n fixedrateTermOptions = [];\r\n locationOptions = [];\r\n yearsTradingOptions = [];\r\n maxIndividualUnitPrice = null;\r\n acceptableEPCRating = null;\r\n maxCommercialFloorspaceOptions = [];\r\n\r\n hasSearchChanged: boolean = false;\r\n showFilters: boolean = false;\r\n personalGuaranteeLevel = null;\r\n\r\n isProceedClicked: boolean = false;\r\n isSaveorSaveAsClicked: boolean = false;\r\n productResultList: number;\r\n isSaveAsWthOutIntroducee: boolean = false;\r\n tempSearchName: string = null;\r\n // Flag to disable or enable the Save as button depending on the click.\r\n isClicked: boolean = false;\r\n showSaveResults: number;\r\n //This boolean is used in the shareedmodal.html for all the deals\r\n isDeal: boolean = true;\r\n showSortBy: boolean = false;\r\n\r\n isResultScreen: boolean = true;\r\n selecteduserName: string;\r\n sharedSearch: boolean = false;\r\n searchPanelForm: ng.IFormController;\r\n\r\n showPostcodeErrorMessage: boolean = false;\r\n postcodeErrorMsg: string;\r\n isPostcodeChange: boolean = false;\r\n noAccessToDealMsg: string;\r\n //LenderReferralSearch\r\n lenderReferralData: MakeReferralMessageRequest =\r\n {} as MakeReferralMessageRequest;\r\n isLenderReferredSearch: boolean = false;\r\n isLenderReferringSearch: boolean = false;\r\n\r\n hasResultsProcessed: boolean = false;\r\n\r\n //SaveAs functionality\r\n isSaveAsClicked: boolean = false;\r\n saveAsSearchName: string;\r\n reloadSearch: boolean = false;\r\n\r\n //Enterprise journey\r\n showRegisterModal: boolean = false;\r\n showLoginSection: boolean = false;\r\n enterpriseClient: ApplicationUserDTO = {\r\n Id: \"\",\r\n AgreedToTermsAndPP: true,\r\n Roles: [\"Client\"],\r\n } as ApplicationUserDTO;\r\n error: string = \"\";\r\n\r\n isCommercial: boolean = true;\r\n\r\n // Previously shortlisted/submitted lenders which are not visible on current results because of criteria change\r\n HiddenDealLenderList: DealLenderDTO[] = [];\r\n\r\n showExportOptions: boolean = false;\r\n\r\n hasLiveSearch: boolean = true;\r\n\r\n //Confirm phone number for new client, when they register through enterprise journey from results page\r\n showClientPhoneNumberConfirmationModal: boolean = false;\r\n clientUpdatedContact: string;\r\n confirmClientPhoneNumberForm: ng.IFormController;\r\n clientUpdatedContactErrorMessage: string;\r\n // Logging in/resetting password\r\n isLoginError: boolean = false;\r\n isResetPasswordSubmitted: boolean = false;\r\n registrationLoginError: string = null;\r\n\r\n filterProperties = [\r\n \"F_IsFirstTimeDeveloper\",\r\n \"F_IsPersonalName\",\r\n \"F_IsOffshoreCompany\",\r\n \"F_IsMainShareholderOverseas\",\r\n \"F_PersonalGuaranteeMax\",\r\n \"F_MinOwnershipPeriod\",\r\n \"F_HasAdverseCredit\",\r\n \"F_MaxCommercialFloorspace\",\r\n \"F_IsGradeOneListed\",\r\n \"F_IsGradeTwoListed\",\r\n \"F_IsTimberFrameConstruction\",\r\n \"F_IsConcreteConstruction\",\r\n \"F_MaxIndividualUnitPrice\",\r\n \"F_AcceptableEPCRating\",\r\n \"F_IsFixedRate\",\r\n \"F_IsRetypedValuation\",\r\n \"F_IsChargeOnAdditionalProperty\",\r\n \"F_IsInterestOnly\",\r\n \"F_IsCapitalAndRepayment\",\r\n \"F_EWS1AcceptableType\",\r\n \"F_MaxAgeAtStartOfMortgageTerm\",\r\n \"F_MaxAgeAtEndOfMortgageTerm\"\r\n ];\r\n\r\n static $inject = [\r\n \"$route\",\r\n \"$routeParams\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"OrganisationService\",\r\n \"CommercialSearchResultsService\",\r\n \"SelectListService\",\r\n \"EventLogService\",\r\n \"LenderService\",\r\n \"DealLenderService\",\r\n \"RoleService\",\r\n \"UserService\",\r\n \"SharedSearchResultsService\",\r\n \"CommercialDealService\",\r\n \"DealService\",\r\n \"AuthService\",\r\n \"DealClientService\",\r\n \"ProductService\",\r\n 'OrganisationLinkService',\r\n 'SharedDataService'\r\n ];\r\n\r\n constructor(\r\n private $route: ng.route.IRouteService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n public $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private organisationService: OrganisationService,\r\n private commercialSearchResultsService: CommercialSearchResultsService,\r\n private selectListService: SelectListService,\r\n private eventLogService: EventLogService,\r\n private lenderService: LenderService,\r\n private dealLenderService: DealLenderService,\r\n private roleService: RoleService,\r\n private $user: UserService,\r\n private sharedSearchResultsService: SharedSearchResultsService,\r\n private commercialDealService: CommercialDealService,\r\n private dealService: DealService,\r\n private $auth: AuthService,\r\n private dealClientService: DealClientService,\r\n private productService: ProductService,\r\n private organisationLinkService: OrganisationLinkService,\r\n private sharedDataService: SharedDataService\r\n ) {\r\n if (this.$location.path().startsWith(\"/commercialshortlistmore\")) {\r\n this.isShortlistingMore = true;\r\n }\r\n\r\n //Hide header for borrower on page header\r\n /* if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"userRole\") &&\r\n sessionStorage.getItem(\"userRole\") == \"borrower\" &&\r\n !$cookies.get(\"access_token\")\r\n ) {\r\n document.getElementById(\"header\").style.display = \"none\";\r\n }*/\r\n\r\n if (this.$routeParams.DealId) {\r\n if (/^\\d+$/.test(this.$routeParams.DealId)) {\r\n // Treat the reference as an ID (e.g., fetch data using the ID)\r\n this.searchid = Number(this.$routeParams.DealId);\r\n } else {\r\n // Treat the reference as a unique string (e.g., fetch data using the string)\r\n this.dealUniqueRef = this.$routeParams.DealId;\r\n }\r\n }\r\n\r\n if (this.$routeParams.dealclientuniqueref) {\r\n this.dealClientUniqueRef = this.$routeParams.dealclientuniqueref;\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n this.isLoggedInUser = true;\r\n this.loadingData = true;\r\n this.organisationService\r\n .getOrganisation()\r\n .then((organisation) => {\r\n if (organisation) {\r\n this.orgCode = organisation.IsWhiteLabelled\r\n ? organisation.OrganisationCode\r\n : \"\";\r\n this.showLenderNamesAndLogosOverride =\r\n organisation.ShowLenderNames ?? false;\r\n if (organisation.IsWhiteLabelled) {\r\n this.orgName = organisation.Name.replace(/ /g, \"_\");\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n this.loadingData = false;\r\n })\r\n .finally(() => {\r\n // this.loadingData = false;\r\n });\r\n } else {\r\n if (window.self == window.top) {\r\n //this.userRole = sessionStorage.getItem('userRole');\r\n this.isClient = this.userRole == \"borrower\";\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n // this.clientId = sessionStorage.getItem('clientId');\r\n this.getSearchCriteriaAndResults();\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.guidanceCheckbox = false;\r\n Promise.all([\r\n this.organisationService.getData(\"userRole\").then((userRole) => {\r\n if (userRole) {\r\n this.userRole = userRole;\r\n this.isClient = this.userRole == \"borrower\";\r\n }\r\n }) /*,\r\n this.organisationService.getData('clientId').then(clientId => {\r\n if (clientId) {\r\n this.clientId = clientId;\r\n }\r\n })*/,\r\n //Try get session storage if running in iframe before getting results\r\n this.organisationService.getData(\"newSearch\").then((newSearch) => {\r\n if (newSearch) {\r\n this.snapshotNewSearch = newSearch == \"true\";\r\n }\r\n }),\r\n ])\r\n .then(() => {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.organisationService.sendDataToParent(\"newSearch\", \"false\");\r\n this.getSearchCriteriaAndResults();\r\n })\r\n .catch((error) => {\r\n // One or both of the promises were rejected, handle the error\r\n console.error(\"Failed to get user data: \", error);\r\n });\r\n }\r\n }\r\n\r\n if (window.self == window.top) {\r\n // let cookieTourStep = this.$cookies.get(\"tourStep\");\r\n // if (cookieTourStep) {\r\n // this.tourState.tourStep = cookieTourStep;\r\n // }\r\n\r\n //if user is logged in, get profile\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.$user.getcurentuserrecord().then((result) => {\r\n this.selectedUser = result;\r\n\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n });\r\n\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n if (this.isAdmin) {\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n });\r\n\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n if (this.isBroker) {\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n });\r\n\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n this.updateLoanLabels();\r\n if (this.isLender) {\r\n this.hasLiveSearch = false;\r\n this.lenderService.getUserLenderDetails().then((lender) => {\r\n if (lender.HasLiveMarketSearch) {\r\n this.hasLiveSearch = true;\r\n }\r\n });\r\n\r\n //Lender referred search\r\n if (sessionStorage.getItem(\"lenderReferralClient\")) {\r\n this.lenderReferralData.ClientDTO = JSON.parse(\r\n sessionStorage.getItem(\"lenderReferralClient\"),\r\n );\r\n this.isLenderReferringSearch = true;\r\n }\r\n this.$user.getCurrentUserLender().then((response) => {\r\n this.userLenderId = response;\r\n });\r\n }\r\n });\r\n\r\n if (this.isShortlistingMore) {\r\n this.lenderService.getDealDeletedLenderIds(this.searchid).then(response => {\r\n this.deletedDealLenders = response;\r\n }).finally(() => {\r\n this.getSearchCriteriaAndResults();\r\n });\r\n } else {\r\n this.getSearchCriteriaAndResults();\r\n }\r\n\r\n }).catch((error) => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.isClient = true; // if the user isn't logged in then this is the enterprise journey and should be treated as a borrower/client\r\n }\r\n\r\n // this.updateGuidanceState();\r\n\r\n // $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n // this.updateGuidanceState();\r\n // });\r\n\r\n let logoutUnregister = $rootScope.$on(\r\n \"logout\",\r\n (event: ng.IAngularEvent) => {\r\n this.isLoggingOut = true;\r\n },\r\n );\r\n\r\n $scope.$on(\"$destroy\", logoutUnregister);\r\n\r\n // $rootScope.$on(\"nextTour\", (event: ng.IAngularEvent) => {\r\n // this.tourNext();\r\n // });\r\n // $rootScope.$on(\"backTour\", (event: ng.IAngularEvent) => {\r\n // this.tourBack();\r\n // });\r\n // $rootScope.$on(\"skipTour\", (event: ng.IAngularEvent) => {\r\n // this.tourSkip();\r\n // });\r\n }\r\n\r\n this.interestRateTypeOptions = this.selectListService.GetInterestRateType();\r\n this.loanRepaymentTypeOptions =\r\n this.selectListService.GetLoanRepaymentTypeOptions();\r\n this.timeLeftOnLeaseOptions =\r\n this.selectListService.GetTimeLeftOnLeaseOptions();\r\n this.personalGuaranteeLevelOptions =\r\n this.selectListService.GetBridgingPersonalGuaranteeLevels();\r\n this.maxIndividualUnitPriceOptions =\r\n this.selectListService.GetMaxIndividualUnitPrices();\r\n this.acceptableEPCRatingOptions =\r\n this.selectListService.GetAcceptableEPCRating();\r\n this.acceptableEWS1GradeTypeOptions =\r\n this.selectListService.GetEWS1GradeType();\r\n this.fixedrateTermOptions =\r\n this.selectListService.GetFixedRateTermOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.tradingPeriodOptions = this.selectListService.GetTradingPeriodTypes();\r\n this.maxCommercialFloorspaceOptions = this.selectListService.GetMaxCommercialFloorspaceOptions();\r\n }\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n /**\r\n * Gets the search results and criteria for selected search\r\n * @param none\r\n */\r\n getSearchCriteriaAndResults() {\r\n if (window.self == window.top) {\r\n this.snapshotNewSearch = sessionStorage.getItem(\"newSearch\") == \"true\";\r\n sessionStorage.setItem(\"newSearch\", \"false\");\r\n }\r\n\r\n if (this.searchid) {\r\n this.loadingData = true;\r\n this.commercialSearchResultsService\r\n .getSearchCriteriaAndResultsByDealId(\r\n this.searchid,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n this.getSearchLenderCount();\r\n if (this.isLoggedInUser) this.getSelectedProducts();\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n .finally(() => {\r\n if (this.loanCriteria) {\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.currentUseofBuildingOptions =\r\n this.selectListService.GetCommercialCurrentUseOfBuildingOptions(\r\n this.loanCriteria.ProductType,\r\n );\r\n this.borrowingEntityTypeOptions =\r\n this.selectListService.GetBorrowingEntityTypeOptions(\r\n this.loanCriteria.ProductType,\r\n );\r\n this.loadingData = false;\r\n this.hasResultsProcessed = true;\r\n }\r\n });\r\n } else if (this.dealUniqueRef) {\r\n this.loadingData = true;\r\n this.commercialSearchResultsService\r\n .getSearchCriteriaAndResultsByDealUniqueRef(\r\n this.dealUniqueRef,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n if (this.summarySearchResults != null) {\r\n const productIds = this.summarySearchResults.map((product) => product.ProductID);\r\n this.getProductLastVerifiedDates(productIds);\r\n }\r\n })\r\n .then(() => {\r\n this.getSearchLenderCount();\r\n if (this.loanCriteria) this.getSelectedProducts();\r\n\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n .finally(() => {\r\n if (this.loanCriteria) {\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.currentUseofBuildingOptions =\r\n this.selectListService.GetCommercialCurrentUseOfBuildingOptions(\r\n this.loanCriteria.ProductType,\r\n );\r\n this.borrowingEntityTypeOptions =\r\n this.selectListService.GetBorrowingEntityTypeOptions(\r\n this.loanCriteria.ProductType,\r\n );\r\n this.loadingData = false;\r\n this.hasResultsProcessed = true;\r\n }\r\n });\r\n } else if (this.dealClientUniqueRef) {\r\n this.loadingData = true;\r\n this.commercialSearchResultsService\r\n .getSearchCriteriaAndResultsByDealClientUniqueRef(\r\n this.dealClientUniqueRef,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n if (this.summarySearchResults != null) {\r\n const productIds = this.summarySearchResults.map((product) => product.ProductID);\r\n this.getProductLastVerifiedDates(productIds);\r\n }\r\n })\r\n .then(() => {\r\n if (this.loanCriteria) this.getSelectedProducts();\r\n this.getSearchLenderCount();\r\n if (\r\n sessionStorage.getItem(\"LoanCriteria\") &&\r\n (this.$rootScope as any).previousRoute.startsWith(\"/compare\")\r\n ) {\r\n this.comparisonList = JSON.parse(\r\n sessionStorage.getItem(\"ComparisonList\"),\r\n );\r\n\r\n //Removing lsd data saved for compare view.\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n }\r\n })\r\n .catch((error) => { })\r\n .finally(() => {\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.currentUseofBuildingOptions =\r\n this.selectListService.GetCommercialCurrentUseOfBuildingOptions(\r\n this.loanCriteria?.ProductType,\r\n );\r\n this.borrowingEntityTypeOptions =\r\n this.selectListService.GetBorrowingEntityTypeOptions(\r\n this.loanCriteria.ProductType,\r\n );\r\n this.loadingData = false;\r\n this.hasResultsProcessed = true;\r\n });\r\n }\r\n }\r\n\r\n postResultsProcessing(results) {\r\n if (results.HideDeal || results.HasNoAccessToDeal) {\r\n if (results.HasNoAccessToDeal) {\r\n if (this.isClient) {\r\n this.noAccessToDealMsg =\r\n \"Please contact your broker in order to access this case.\";\r\n } else {\r\n this.noAccessToDealMsg = \"Error retrieving deal.\";\r\n }\r\n } else {\r\n this.noAccessToDealMsg =\r\n \"You cannot access commercial search results. Please contact your admin for more details.\";\r\n }\r\n this.hasAccessToDeal = false;\r\n } else {\r\n this.summarySearchResults = this.initialSummarySearchResults = results.Results;\r\n this.loanCriteria = results.CriteriaDto;\r\n\r\n if(this.isLoggedInUser ){\r\n this.validateAccessAndRedirect();\r\n }\r\n\r\n this.sortSummaryResults();\r\n\r\n if (this.loanCriteria.LoanTermReq && this.loanCriteria.LoanTermReq > 0) {\r\n this.mortgageTerm = this.loanCriteria.LoanTermReq / 12;\r\n }\r\n\r\n if (this.isLoggedInUser) {\r\n if (this.dealClientUniqueRef) {\r\n if (this.isClient) {\r\n this.eventLogService.logPageLoad(\r\n \"AFTER-ENTERPRISE-LEAD-REGISTRATION-USING-EMAIL-LINK\",\r\n this.orgCode,\r\n this.selectedUser.UserName,\r\n \"Client\",\r\n this.loanCriteria?.OrganisationLinkId,\r\n this.loanCriteria.ProductType,\r\n \"\",\r\n this.loanCriteria?.Id,\r\n );\r\n }\r\n } else {\r\n if (this.loanCriteria.LenderReferralLenderId)\r\n this.isLenderReferredSearch = true;\r\n\r\n // Showing confirm client phone number modal once client register through result page\r\n if (this.isClient && sessionStorage.getItem('showConfirmClientPhoneNo') == 'true') {\r\n this.showClientPhoneNumberConfirmationModal = true;\r\n this.clientUpdatedContact = this.loanCriteria?.DealClients[0].Client.PhoneNumber;\r\n }\r\n // Expanding a 'new search' panel for first time search execution\r\n if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"newSearch\")\r\n ) {\r\n this.sliderShown = (this.$rootScope as any).previousRoute.startsWith(\"/compare\") || this.showClientPhoneNumberConfirmationModal ? false : true;\r\n sessionStorage.removeItem(\"newSearch\");\r\n }\r\n }\r\n } else {\r\n if (this.$location.path().startsWith(\"/e/commercialresults\")) {\r\n this.populateEnterpriseClientValue(\"LENDERRESULTS\");\r\n }\r\n\r\n if (this.dealClientUniqueRef) {\r\n if (this.$routeParams.showOnlyRegister == \"false\")\r\n this.isClient = true;\r\n this.populateEnterpriseClientValue(\"LENDERRESULTS-USING-EMAIL-LINK\");\r\n }\r\n }\r\n\r\n var owner = this.loanCriteria.DealClients.find((dc) => dc.IsPrimary);\r\n\r\n if (owner) {\r\n this.isAssigned = true;\r\n }\r\n }\r\n }\r\n\r\n populateEnterpriseClientValue(eventType) {\r\n if (this.loanCriteria.DealClients[0] != null) {\r\n this.enterpriseClient.FirstName =\r\n this.loanCriteria.DealClients[0].Client.FirstName;\r\n this.enterpriseClient.LastName =\r\n this.loanCriteria.DealClients[0].Client.LastName;\r\n this.enterpriseClient.Email =\r\n this.loanCriteria.DealClients[0].Client.Email;\r\n this.enterpriseClient.UserName =\r\n this.loanCriteria.DealClients[0].Client.Email;\r\n this.enterpriseClient.DealClientUniqueRef = this.loanCriteria.DealClients[0].UniqueRef;\r\n this.enterpriseClient.OrgCode = this.orgCode;\r\n this.enterpriseClient.PhoneNumber =\r\n this.loanCriteria.DealClients[0].Client.PhoneNumber;\r\n if (this.loanCriteria.DealClients[0].Client.ClientUserId) {\r\n this.showRegisterModal = true;\r\n this.showLoginSection = true;\r\n }\r\n\r\n if (this.loanCriteria.OrganisationLinkId) {\r\n this.organisationLinkService\r\n .getOrganisationLinkLogoByLinkIdAndLogPageLoadEvent(Number(this.loanCriteria.OrganisationLinkId), eventType, this.loanCriteria.Id, this.loanCriteria.ProductType, this.loanCriteria.DealClients[0]?.Client?.Email, this.loanCriteria.DealClients[0]?.Client?.Id.toString())\r\n .then((logoUrl) => {\r\n if (logoUrl) {\r\n var imgs = document.getElementsByTagName(\"img\");\r\n imgs[0].src = logoUrl\r\n }\r\n });\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n eventType,\r\n this.orgCode,\r\n this.loanCriteria.DealClients.length > 0\r\n ? this.loanCriteria.DealClients[0].Client.Email\r\n : null,\r\n \"Client\",\r\n this.loanCriteria.OrganisationLinkId != null\r\n ? this.loanCriteria.OrganisationLinkId\r\n : null,\r\n this.loanCriteria?.ProductType,\r\n null,\r\n this.loanCriteria?.Id,\r\n this.loanCriteria.DealClients.length > 0\r\n ? this.loanCriteria.DealClients[0].Client.Id.toString()\r\n : null\r\n );\r\n }\r\n\r\n //Todo Roopa: do we need a broker details?\r\n this.getOrganisationAndBrokerDetails();\r\n }\r\n }\r\n\r\n checkDeletedLender(lenderId: string, productId: string): boolean {\r\n if (this.isShortlistingMore && this.deletedDealLenders) {\r\n const deletedLender = this.deletedDealLenders.find(deletedLender => deletedLender.LenderId === String(lenderId));\r\n\r\n if (deletedLender) {\r\n return deletedLender.ProductId === String(productId);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n getSearchLenderCount() {\r\n this.lenderService\r\n .getTotalLenders(ProductFamilyEnum.Commercial, this.loanCriteria.BrokerOrganisationId)\r\n .then((result: number) => {\r\n this.totalLender = result;\r\n });\r\n }\r\n\r\n getSelectedProducts() {\r\n if (this.summarySearchResults && this.summarySearchResults.length > 0) {\r\n this.dealLenderService\r\n .fetchDealLendersByDealId(this.dealClientUniqueRef || this.dealUniqueRef ? this.loanCriteria.Id : this.searchid)\r\n .then((results) => {\r\n this.dealLenders = results;\r\n })\r\n .then(() => {\r\n this.comparisonList = this.summarySearchResults.filter((result) => {\r\n const isDealLender = this.dealLenders.find(\r\n (dealLender) => dealLender.ProductId === result.ProductID,\r\n );\r\n if (isDealLender) {\r\n result.DealLenderStatus = isDealLender.Status;\r\n }\r\n return (result.IsDealLender = Boolean(isDealLender));\r\n });\r\n\r\n // Previously shortlisted/submitted lenders which are not visible on current results because of criteria change\r\n this.HiddenDealLenderList = this.dealLenders.filter(l =>\r\n !this.summarySearchResults.some(s => l.ProductId === s.ProductID)\r\n );\r\n\r\n if (this.comparisonList.length > 0) {\r\n var inActiveDealLenderList = this.comparisonList.filter(\r\n (ia) =>\r\n ia.DealLenderStatus == CaseLenderStateEnum.Rejected ||\r\n ia.DealLenderStatus == CaseLenderStateEnum.Withdrawn,\r\n );\r\n this.inActiveDealLender = inActiveDealLenderList.length;\r\n }\r\n\r\n if (\r\n sessionStorage.getItem(\"LoanCriteria\") &&\r\n (this.$rootScope as any).previousRoute.startsWith(\"/compare\")\r\n ) {\r\n if (sessionStorage.getItem(\"actualcomparisonList\")) {\r\n var selectedProducts = sessionStorage.getItem(\r\n \"actualcomparisonList\",\r\n );\r\n this.comparisonList = JSON.parse(selectedProducts);\r\n sessionStorage.removeItem(\"actualcomparisonList\");\r\n } else {\r\n this.comparisonList = JSON.parse(\r\n sessionStorage.getItem(\"ComparisonList\"),\r\n );\r\n }\r\n if (this.inActiveDealLender > 0) {\r\n this.comparisonList = this.comparisonList.concat(\r\n inActiveDealLenderList,\r\n );\r\n }\r\n\r\n //Removing lsd data saved for compare view.\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n getUsersBelongToBrokerOrAdmin() {\r\n this.loadingData = true;\r\n this.$user\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n });\r\n }\r\n\r\n // updateGuidanceState() {\r\n // this.tourEnabled = this.sharedSearchResultsService.updateGuidanceState(\r\n // this.guidanceCheckbox,\r\n // );\r\n // }\r\n\r\n // getGuidanceSwitchState() {\r\n // return this.sharedSearchResultsService.getGuidanceSwitchState();\r\n // }\r\n\r\n // recordGuidanceCookie() {\r\n // this.sharedSearchResultsService.recordGuidanceCookie(this.guidanceCheckbox);\r\n // this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n // }\r\n\r\n // tourNext(): void {\r\n // this.tourState.tourStep++;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // }\r\n\r\n // tourBack(): void {\r\n // this.tourState.tourStep--;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // }\r\n\r\n // tourSkip(): void {\r\n // this.tourEnabled = false;\r\n // this.$cookies.put(\"tourEnabled\", \"false\");\r\n // this.$cookies.remove(\"tourStep\");\r\n // }\r\n\r\n // startTour(): void {\r\n // this.tourState.tourStep = 1;\r\n // this.tourState.tourTotalSteps = 0;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // this.tourEnabled = true;\r\n // this.$cookies.put(\"tourEnabled\", \"true\");\r\n // }\r\n\r\n /**\r\n * Saves the new search name on the edit.\r\n * @param none\r\n */\r\n doRenameSearch() {\r\n var request: SaveCommercialSearchRequest = {\r\n DealDto: this.loanCriteria,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.orgCode,\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n if (this.searchid) {\r\n this.commercialDealService.saveCommercialSearchReturnsId(request)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n } else if (this.dealUniqueRef) {\r\n if (this.isLoggedInUser) {\r\n this.commercialDealService.saveCommercialSearchReturnsUniqueRef(request)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n } else {\r\n this.dealService.renameDeal(this.dealUniqueRef, this.loanCriteria.Name)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n }\r\n } else {\r\n this.toggleEditSearchName = false;\r\n }\r\n }\r\n\r\n toggleLenderComparisonSelection(\r\n item: CommercialLenderResultSummaryDTO,\r\n index: number,\r\n ) {\r\n\r\n let comparisonMatches: CommercialLenderResultSummaryDTO[] =\r\n this.comparisonList.filter((result, index) => {\r\n return result.ProductID === item.ProductID;\r\n });\r\n\r\n if (!comparisonMatches || comparisonMatches.length === 0) {\r\n this.comparisonList.push(item);\r\n this.eventLogService.logEvent(\r\n `SHORTLISTING-RESULT`,\r\n EventLogEnum.Shortlisting,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n item.ProductID.toString(),\r\n \"\"\r\n );\r\n } else {\r\n if (this.isShortlistingMore && item.IsDealLender && (this.loanCriteria.Status != CaseStatusEnum.Search && this.loanCriteria.Status != CaseStatusEnum.NewCase))\r\n return;\r\n comparisonMatches.forEach((value, index) => {\r\n this.comparisonList.splice(this.comparisonList.indexOf(value), 1);\r\n });\r\n this.eventLogService.logEvent(\r\n `DESELECTING-SHORTLISTED-RESULT`,\r\n EventLogEnum.Shortlisting,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n item.ProductID.toString(),\r\n \"\"\r\n );\r\n }\r\n\r\n\r\n //This is user for shortlisting pdf\r\n this.prepareDataForShortlistPdf();\r\n }\r\n\r\n comparisonContains(item: CommercialLenderResultSummaryDTO): boolean {\r\n return !!this.comparisonList.find((result, index) => {\r\n return result.ProductID === item.ProductID;\r\n });\r\n }\r\n\r\n checkLender(item: CommercialLenderResultSummaryDTO): boolean {\r\n if (this.userLenderId == item.LenderID) return true;\r\n return false;\r\n }\r\n\r\n selectionOrderNumber(item: CommercialLenderResultSummaryDTO) {\r\n var activeProductList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n\r\n var hiddenProduct = this.HiddenDealLenderList.filter(hl => hl.Status != CaseLenderStateEnum.Rejected && hl.Status != CaseLenderStateEnum.Withdrawn);\r\n var hiddenProductLength = this.isShortlistingMore ? hiddenProduct.length : 0;\r\n var order =\r\n activeProductList.map((item) => item.ProductID).indexOf(item.ProductID) + hiddenProductLength + 1;\r\n if (order === 0) {\r\n return \" \";\r\n }\r\n\r\n return order;\r\n }\r\n\r\n /**\r\n * Processes the clicking of the \"View Eligibility\" anchor/button and index to show on the row number\r\n * @param item BridgingLenderResultSummaryDTO\r\n */\r\n viewEligibility(item: CommercialLenderResultSummaryDTO) {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.showProductNote = true;\r\n this.offer = item;\r\n this.loanLabel = item.LoanLabel;\r\n this.productNote = item.AdditionalProductInfo;\r\n }\r\n\r\n /**\r\n *Marks a selected search as a deleted\r\n * @param\r\n */\r\n deleteSearch() {\r\n if (this.$routeParams.DealId) {\r\n this.dealService\r\n .markasdeleted(this.$routeParams.DealId)\r\n .then((response) => {\r\n this.displayMsg = \"Search is successfully deleted\";\r\n this.showMsg = true;\r\n this.ShowdeleteSearch = true;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n this.showMsg = true;\r\n });\r\n }\r\n }\r\n\r\n closeDeleteModal() {\r\n this.showMsg = false;\r\n this.displayMsg = null;\r\n this.ShowdeleteSearch = false;\r\n this.warningOff = true;\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n viewSingleLoan(item: CommercialLenderResultSummaryDTO) {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.warningOff = true;\r\n //Storing the actual comparisonList to local storage so that to recover it later when we comeback to result screen from compare screen.\r\n sessionStorage.setItem(\r\n \"actualcomparisonList\",\r\n JSON.stringify(this.comparisonList),\r\n );\r\n this.comparisonList = [];\r\n\r\n this.comparisonList.push(item);\r\n this.goCompare();\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n }\r\n\r\n goCompare() {\r\n this.warningOff = true;\r\n\r\n this.sharedSearchResultsService.clearStorageDataForCompareView();\r\n\r\n let comparisonList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n\r\n sessionStorage.setItem(\"ComparisonList\", JSON.stringify(comparisonList));\r\n sessionStorage.setItem(\"LoanCriteria\", JSON.stringify(this.loanCriteria));\r\n\r\n if (this.dealClientUniqueRef) {\r\n if (!this.isLoggedInUser) {\r\n this.dealUniqueRef = this.loanCriteria.UniqueRef;\r\n //This property is used in compare view controller to find previous route \r\n sessionStorage.setItem(\"DealClientUniqueRef\", this.dealClientUniqueRef);\r\n } else {\r\n this.searchid = this.loanCriteria.Id;\r\n }\r\n }\r\n\r\n if (this.searchid) {\r\n this.$location.path(\"compare/\" + this.searchid + \"/\" + 0 + \"/\" + true);\r\n } else {\r\n this.$location.path(\"compare/\" + this.dealUniqueRef + \"/\" + 0 + \"/\" + true);\r\n }\r\n }\r\n\r\n showBookMeetingButton() {\r\n return (\r\n !this.isLoggedInUser &&\r\n this.isClient &&\r\n this.brokerDetail == \"\" &&\r\n this.brokerageOrg != null\r\n );\r\n }\r\n\r\n bookMeeting() {\r\n this.$auth\r\n .getHubspotDeveloperBookMeetingWithSearch()\r\n .then((hubSpotUrl: string) => {\r\n window.open(hubSpotUrl);\r\n });\r\n }\r\n\r\n sendMessageToBroker(message) {\r\n this.loadingData = true;\r\n this.borrowerMessage = null;\r\n this.organisationService\r\n .sendBorrowerMessageToSearchBroker(\r\n this.loanCriteria.Id,\r\n message,\r\n this.loanCriteria.DealClients[0].Client.FirstName,\r\n this.loanCriteria.DealClients[0].Client.LastName,\r\n this.loanCriteria.DealClients[0].Client.Email,\r\n this.loanCriteria.ProductType,\r\n \"Results\",\r\n )\r\n .then((results) => {\r\n if (results) {\r\n this.displayMsg = `Message has been sent successfully.`;\r\n this.showMessageToborrower = true;\r\n } else {\r\n this.displayMsg = `There is problem sending a message, Please try later.`;\r\n this.showMessageToborrower = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n closeContactBrokerModal() {\r\n this.showContactBrokerModal = false;\r\n this.showMessageToborrower = false;\r\n this.displayMsg = null;\r\n }\r\n\r\n getTotalShortlistedLenders() {\r\n var activeDealLenders = this.comparisonList.filter(\r\n (al) =>\r\n al.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n al.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n\r\n var hiddenProduct = this.HiddenDealLenderList.filter(hl => hl.Status != CaseLenderStateEnum.Rejected && hl.Status != CaseLenderStateEnum.Withdrawn);\r\n var hiddenProductLength = this.isShortlistingMore ? hiddenProduct.length : 0;\r\n\r\n return activeDealLenders.length + hiddenProductLength;\r\n }\r\n\r\n logPdfDownload(eventName) {\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n );\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n changeSearch() {\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n this.warningOff = true;\r\n sessionStorage.setItem(\"skip\", \"true\");\r\n if (!this.isLoggedInUser && (this.dealUniqueRef || this.dealClientUniqueRef)) {\r\n if (this.dealClientUniqueRef) sessionStorage.setItem('previousRoute', 'referredsearchdeal')\r\n var url = `/e/commercialcriteria/${this.loanCriteria.UniqueRef}`;\r\n if (this.loanCriteria.OrganisationLinkId > 0) {\r\n url = `${url}/${this.loanCriteria.OrganisationLinkId}`;\r\n }\r\n this.go(url);\r\n }\r\n else if (this.searchid) {\r\n this.go(\"/commercialcriteria/\" + this.searchid);\r\n } else {\r\n this.go(\"/commercialcriteria\");\r\n }\r\n }\r\n\r\n newloan() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/commercialcriteria/0\");\r\n }\r\n\r\n updateSearchViaSlider(isAdminDebugValueChanged: boolean = false): void {\r\n if (this.searchPanelForm.$valid && !this.showPostcodeErrorMessage) {\r\n if (this.loanCriteria.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing) {\r\n if (this.loanCriteria.PurchasePrice <= 0) return;\r\n }\r\n\r\n if (this.loanCriteria.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n if (this.loanCriteria.Currentvalue <= 0) return;\r\n }\r\n this.loadingData = true;\r\n this.hasSearchChanged = true;\r\n\r\n this.clearSelected();\r\n\r\n this.updateCriteriaAndGetResults(\r\n isAdminDebugValueChanged && this.isAdmin ? false : true,\r\n );\r\n }\r\n }\r\n\r\n clearSelected() {\r\n if (this.isShortlistingMore) {\r\n this.comparisonList = this.comparisonList.filter(item =>\r\n this.summarySearchResults.some(result => result.ProductID == item.ProductID)\r\n );\r\n\r\n const dealLenders = this.initialSummarySearchResults.filter(result =>\r\n result.IsDealLender && !result.IsDeleted\r\n );\r\n\r\n dealLenders.forEach(dealLender => {\r\n if (!this.comparisonList.some(item => item.ProductID === dealLender.ProductID)) {\r\n this.comparisonList.push(dealLender);\r\n }\r\n });\r\n } else {\r\n this.comparisonList = this.comparisonList.filter(item =>\r\n this.summarySearchResults.some(result => result.ProductID == item.ProductID)\r\n );\r\n }\r\n }\r\n\r\n updateCriteriaAndGetResults(\r\n criteriaChanged: boolean,\r\n updateLoanLabels: boolean = false,\r\n ) {\r\n this.commercialDealService\r\n .updateSearchCriteriaAndGetResults(\r\n this.loanCriteria,\r\n criteriaChanged,\r\n this.debug1,\r\n this.isPostcodeChange,\r\n this.isShortlistingMore\r\n )\r\n .then((results) => {\r\n if (this.isPostcodeChange) {\r\n if (results.CriteriaLocation != null) {\r\n this.loanCriteria.Locations = results.CriteriaLocation;\r\n this.summarySearchResults = results.Results;\r\n } else {\r\n this.postcodeErrorMsg = results.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n } else {\r\n this.summarySearchResults = results.Results;\r\n this.sortSummaryResults();\r\n }\r\n })\r\n .catch((error) => { })\r\n .finally(() => {\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.clearSelected();\r\n if (updateLoanLabels) {\r\n this.updateLoanLabels();\r\n }\r\n\r\n this.isPostcodeChange = false;\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n getSearchResultCount() {\r\n return this.sharedSearchResultsService.getSearchResultCount(\r\n this.summarySearchResults,\r\n );\r\n }\r\n\r\n onPersonalGuaranteeLevelOptionsChange(e: BridgingPersonalGuaranteeLevelEnum) {\r\n switch (e) {\r\n case BridgingPersonalGuaranteeLevelEnum.None:\r\n this.loanCriteria.F_PersonalGuaranteeMin = 0.0;\r\n this.loanCriteria.F_PersonalGuaranteeMax = 0.0;\r\n break;\r\n case BridgingPersonalGuaranteeLevelEnum.OneToTwentyFivePercent:\r\n this.loanCriteria.F_PersonalGuaranteeMin = 0.0;\r\n this.loanCriteria.F_PersonalGuaranteeMax = 0.25;\r\n break;\r\n case BridgingPersonalGuaranteeLevelEnum.TwentySixToFiftyPercent:\r\n this.loanCriteria.F_PersonalGuaranteeMin = 0.25;\r\n this.loanCriteria.F_PersonalGuaranteeMax = 0.5;\r\n break;\r\n case BridgingPersonalGuaranteeLevelEnum.FiftyOneToOneHundredPercent:\r\n this.loanCriteria.F_PersonalGuaranteeMin = 0.5;\r\n this.loanCriteria.F_PersonalGuaranteeMax = 1.0;\r\n break;\r\n default:\r\n this.loanCriteria.F_PersonalGuaranteeMin = null;\r\n this.loanCriteria.F_PersonalGuaranteeMax = null;\r\n break;\r\n }\r\n }\r\n\r\n getPersonalGuaranteeLevelOptions() {\r\n return this.sharedSearchResultsService.getPersonalGuaranteeLevelOptions(\r\n this.tempLoanCriteria.F_PersonalGuaranteeMax,\r\n );\r\n }\r\n\r\n applyFilters() {\r\n this.loadingData = true;\r\n this.showFilters = false;\r\n this.updateCriteriaAndGetResults(false);\r\n }\r\n\r\n clearClientFilters() {\r\n this.loanCriteria.F_IsFirstTimeDeveloper = null;\r\n this.loanCriteria.F_IsPersonalName = null;\r\n this.loanCriteria.F_IsOffshoreCompany = null;\r\n this.loanCriteria.F_IsMainShareholderOverseas = null;\r\n this.loanCriteria.F_MinOwnershipPeriod = null;\r\n this.personalGuaranteeLevel = null;\r\n this.loanCriteria.F_PersonalGuaranteeMin = null;\r\n this.loanCriteria.F_PersonalGuaranteeMax = null;\r\n this.loanCriteria.F_HasAdverseCredit = null;\r\n this.loanCriteria.F_MaxAgeAtEndOfMortgageTerm = null;\r\n this.loanCriteria.F_MaxAgeAtStartOfMortgageTerm = null;\r\n\r\n }\r\n\r\n showClearForClientFilters() {\r\n if (\r\n this.loanCriteria.F_IsFirstTimeDeveloper != null ||\r\n this.loanCriteria.F_IsPersonalName != null ||\r\n this.loanCriteria.F_MinOwnershipPeriod != null ||\r\n this.loanCriteria.F_IsOffshoreCompany != null ||\r\n this.loanCriteria.F_IsMainShareholderOverseas != null ||\r\n this.loanCriteria.F_PersonalGuaranteeMin != null ||\r\n this.loanCriteria.F_PersonalGuaranteeMax != null ||\r\n this.loanCriteria.F_HasAdverseCredit != null ||\r\n this.loanCriteria.F_MaxAgeAtEndOfMortgageTerm != null ||\r\n this.loanCriteria.F_MaxAgeAtStartOfMortgageTerm != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n toggleCheckbox(variableName) {\r\n if (\r\n this.loanCriteria[variableName] === null ||\r\n this.loanCriteria[variableName] === false\r\n ) {\r\n this.loanCriteria[variableName] = true;\r\n } else {\r\n this.loanCriteria[variableName] = null;\r\n }\r\n }\r\n\r\n clearPropertyFilters() {\r\n this.loanCriteria.F_IsGradeOneListed = null;\r\n this.loanCriteria.F_IsGradeTwoListed = null;\r\n this.loanCriteria.F_IsTimberFrameConstruction = null;\r\n this.loanCriteria.F_IsConcreteConstruction = null;\r\n this.maxIndividualUnitPrice = null;\r\n this.loanCriteria.F_AcceptableEPCRating = null;\r\n this.loanCriteria.F_EWS1AcceptableType = null;\r\n this.loanCriteria.F_MaxIndividualUnitPrice = null;\r\n this.loanCriteria.F_MaxCommercialFloorspace = null;\r\n }\r\n\r\n showClearForPropertyFilters() {\r\n if (\r\n this.loanCriteria.F_IsGradeOneListed != null ||\r\n this.loanCriteria.F_IsGradeTwoListed != null ||\r\n this.loanCriteria.F_IsTimberFrameConstruction != null ||\r\n this.loanCriteria.F_IsConcreteConstruction != null ||\r\n this.maxIndividualUnitPrice != null ||\r\n this.loanCriteria.F_AcceptableEPCRating != null ||\r\n this.loanCriteria.F_EWS1AcceptableType != null ||\r\n this.loanCriteria.F_MaxIndividualUnitPrice != null ||\r\n this.loanCriteria.F_MaxCommercialFloorspace != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearAllFilters() {\r\n this.clearClientFilters();\r\n this.clearPropertyFilters();\r\n }\r\n\r\n debugSearch() {\r\n const stringJSON = JSON.stringify(this.loanCriteria);\r\n navigator.clipboard\r\n .writeText(stringJSON)\r\n .then()\r\n .catch((e) => console.log(e));\r\n }\r\n\r\n onClickFilterCancel() {\r\n this.filterProperties.forEach(\r\n (e) => (this.loanCriteria[e] = this.tempLoanCriteria[e]),\r\n );\r\n this.maxIndividualUnitPrice = null;\r\n this.personalGuaranteeLevel = null;\r\n }\r\n\r\n getDisplayTextForProperty(property) {\r\n return this.sharedSearchResultsService.getDisplayTextForProperty(property);\r\n }\r\n\r\n getPropertyValue(property) {\r\n let propertyValue = this.tempLoanCriteria[property];\r\n switch (property) {\r\n case \"F_PersonalGuaranteeMax\":\r\n return this.selectListService\r\n .GetBridgingPersonalGuaranteeLevels()\r\n .find((item) => item.key === this.getPersonalGuaranteeLevelOptions())\r\n ?.displayName;\r\n case \"F_MaxIndividualUnitPrice\":\r\n return this.selectListService\r\n .GetMaxHouseSalePrices()\r\n .find((item) => item.key === this.getMaxIndividualUnitPrice())\r\n ?.displayName;\r\n case \"F_AcceptableEPCRating\":\r\n return this.selectListService\r\n .GetAcceptableEPCRating()\r\n .find((item) => item.key === this.getAcceptableEPCRating())\r\n ?.displayName;\r\n case \"F_EWS1AcceptableType\":\r\n return this.selectListService\r\n .GetEWS1GradeType()\r\n .find((item) => item.key === this.getEWS1GradeType())?.displayName;\r\n case \"F_MaxCommercialFloorspace\":\r\n return this.selectListService\r\n .GetMaxCommercialFloorspaceOptions()\r\n .find((item) => item.key === this.tempLoanCriteria.F_MaxCommercialFloorspace)\r\n ?.displayName;\r\n default:\r\n return propertyValue;\r\n }\r\n }\r\n\r\n filterPropertyToText(property: string) {\r\n let value = this.tempLoanCriteria[property];\r\n if (typeof value == \"boolean\" && value == true) {\r\n return;\r\n } else if (value != null && typeof value != \"boolean\") {\r\n return `: ${this.getPropertyValue(property)}`;\r\n } else if (value == null) {\r\n return;\r\n }\r\n return false;\r\n }\r\n\r\n countFiltersSelected() {\r\n let count = 0;\r\n count = this.sharedSearchResultsService.countFiltersSelected(\r\n this.tempLoanCriteria,\r\n this.filterProperties,\r\n );\r\n return count;\r\n }\r\n\r\n checkFilterSelected(property: string) {\r\n return this.sharedSearchResultsService.checkFilterSelected(\r\n property,\r\n this.tempLoanCriteria,\r\n );\r\n }\r\n\r\n onMaxIndividualUnitPriceChange(e: MaxIndividualUnitPriceEnum) {\r\n switch (e) {\r\n case MaxIndividualUnitPriceEnum.UpTo1Million:\r\n this.loanCriteria.F_MaxIndividualUnitPrice = 1000000;\r\n break;\r\n case MaxIndividualUnitPriceEnum.UpTo2Million:\r\n this.loanCriteria.F_MaxIndividualUnitPrice = 2000000;\r\n break;\r\n case MaxIndividualUnitPriceEnum.UpTo5Million:\r\n this.loanCriteria.F_MaxIndividualUnitPrice = 5000000;\r\n break;\r\n case MaxIndividualUnitPriceEnum.NoMax:\r\n this.loanCriteria.F_MaxIndividualUnitPrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxIndividualUnitPrice = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxIndividualUnitPrice() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxIndividualUnitPrice) {\r\n case 1000000:\r\n value = MaxIndividualUnitPriceEnum.UpTo1Million;\r\n break;\r\n case 2000000:\r\n value = MaxIndividualUnitPriceEnum.UpTo2Million;\r\n break;\r\n case 5000000:\r\n value = MaxIndividualUnitPriceEnum.UpTo5Million;\r\n break;\r\n case -999:\r\n value = MaxIndividualUnitPriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getAcceptableEPCRating() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_AcceptableEPCRating) {\r\n case EPCRatingTypeEnum.A:\r\n case EPCRatingTypeEnum.B:\r\n case EPCRatingTypeEnum.C:\r\n case EPCRatingTypeEnum.AtoC:\r\n value = EPCRatingTypeEnum.AtoC;\r\n break;\r\n case EPCRatingTypeEnum.D:\r\n case EPCRatingTypeEnum.E:\r\n case EPCRatingTypeEnum.DtoE:\r\n value = EPCRatingTypeEnum.DtoE;\r\n break;\r\n case EPCRatingTypeEnum.AboveE:\r\n value = EPCRatingTypeEnum.AboveE;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getEWS1GradeType() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_EWS1AcceptableType) {\r\n case EWS1GradeTypeEnum.A:\r\n value = EWS1GradeTypeEnum.A;\r\n break;\r\n case EWS1GradeTypeEnum.B:\r\n value = EWS1GradeTypeEnum.B;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n /*saveEnterpriseClientAndRenameDeal() {\r\n this.loadingData = true;\r\n\r\n this.$user.checkEmailExists(this.user.Email).then((response) => {\r\n if (!response) {\r\n let userFullName = this.user.FullName;\r\n let spaceIndex = userFullName.indexOf(' ');\r\n\r\n let firstName = '';\r\n let lastName = '';\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(' '));\r\n lastName = userFullName.substring(userFullName.indexOf(' ') + 1);\r\n }\r\n\r\n // Set up Client dto\r\n var clientDto = {\r\n FirstName: firstName,\r\n LastName: lastName,\r\n PhoneNumber: this.user.PhoneNumber,\r\n Email: this.user.Email,\r\n BrokerOrganisationId: this.brokerageOrg.Id,\r\n PostalAddress: {\r\n AddressLine1: '',\r\n AddressLine2: '',\r\n AddressLine3: '',\r\n AddressLine4: '',\r\n PostCode: ''\r\n } as PostalAddress\r\n } as ClientDTO;\r\n\r\n var currentDate = new Date();\r\n this.loanCriteria.Name = this.projectName ? this.projectName : firstName + ' ' + lastName + ' Loan Search ' + currentDate.getDate() + \"/\" + (currentDate.getMonth() + 1) + \"/\" + currentDate.getFullYear()\r\n\r\n var request: SaveEnterpriseClientAndRenameSearchRequest = {\r\n BridgingDealDto: null,\r\n ClientDto: clientDto,\r\n ProductFamily: ProductFamilyEnum.Commercial,\r\n CommercialDealDto: this.loanCriteria,\r\n DevFinanceDealDto: null\r\n }\r\n\r\n this.dealService.saveEnterpriseClientAndRenameDeal(request).then((response) => {\r\n if (response) {\r\n document.getElementById('body').style.overflow = \"auto\";\r\n this.showEnterpriseRegistrationModal = false;\r\n this.loanCriteria = response.CommercialDealDto;\r\n if (window.self == window.top) {\r\n sessionStorage.setItem('clientId', this.loanCriteria.DealClients[0].Client.Id.toString());\r\n } else {\r\n this.organisationService.sendDataToParent('clientId', this.loanCriteria.DealClients[0].Client.Id.toString());\r\n }\r\n\r\n this.$user.sendEventToHubspot(this.user, \"ENTERPRISE-CONTACT-REGISTERED\", false, this.orgCode, this.userRole, this.loanCriteria && this.loanCriteria.OrganisationLinkId != null ? this.loanCriteria.OrganisationLinkId : 0, this.loanCriteria.ProductType, this.loanCriteria ? this.loanCriteria.Id : 0);\r\n\r\n // For Google analytics tracking\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'results_gating_form',\r\n 'loan_product_family': this.productService.getProductFamilyTextForGa(this.loanCriteria.ProductFamily),\r\n 'loan_product_type': this.productService.getProductTypeTextForGa(this.loanCriteria.ProductType, this.loanCriteria.IsFamilyInResidence)\r\n });\r\n }\r\n\r\n }).finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.emailExistsError = true;\r\n this.loadingData = false;\r\n }\r\n });\r\n\r\n\r\n }*/\r\n\r\n gotoSignInPage() {\r\n this.$location.path(\"/login\");\r\n }\r\n\r\n goToLink(url) {\r\n var baseUrl = window.location.href.split(\"#!\")[0] + \"#!\";\r\n var newUrl = baseUrl + url;\r\n window.open(newUrl, \"_blank\");\r\n }\r\n\r\n /**\r\n * Opens a 'share a search with client' modal if search do not have client attached to.\r\n * @param none\r\n */\r\n saveResultsForShareSearchToClient() {\r\n if (!this.isSaveAsClicked) {\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.saveSaveAsSearch();\r\n }\r\n this.newSearch = false;\r\n }\r\n\r\n showShareSearchModal() {\r\n this.newSearch = true;\r\n\r\n this.shareDealDto = {\r\n DealId: this.searchid,\r\n DealName: this.isSaveAsClicked ? \"\" : this.loanCriteria?.Name,\r\n ShowLenderNamesAndLogos: this.loanCriteria?.ShowLenderInfoBrokerOverride,\r\n EmailLinkToClient: false,\r\n AccessLevel: CaseAccessLevelEnum.FullAccess,\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n\r\n this.shareDealDto.ClientDto = {\r\n FirstName: \"\",\r\n LastName: \"\",\r\n Email: \"\",\r\n PhoneNumber: \"\",\r\n } as ClientDTO;\r\n }\r\n\r\n onClickSaveAs() {\r\n this.isSaveAsClicked = true;\r\n if (this.isAdmin || this.isBroker) {\r\n if (!this.shareDealDto) {\r\n this.shareDealDto = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n }\r\n this.shareDealDto.DealName = \"\";\r\n this.showShareSearchModal();\r\n } else {\r\n this.showSaveResults = 3;\r\n }\r\n }\r\n\r\n saveSaveAsSearch(attachClient = false) {\r\n this.loadingData = true;\r\n let newSearchName = this.isBroker || this.isAdmin ? this.shareDealDto.DealName : this.saveAsSearchName;\r\n\r\n if (newSearchName.length == 0) {\r\n newSearchName = this.loanCriteria.Name + ' (Copy)';\r\n }\r\n\r\n var request: SaveAsSearchRequest = {\r\n ShareDealDto: attachClient ? this.shareDealDto : null,\r\n ProductFamily: this.loanCriteria.ProductFamily,\r\n SearchId: this.loanCriteria.Id,\r\n NewSearchName: newSearchName,\r\n };\r\n\r\n this.dealService\r\n .saveSaveAsSearch(request)\r\n .then((result) => {\r\n this.displayMsg = `${newSearchName} search has been saved to your dashboard.`;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.cancelNewSearch();\r\n this.loadingData = false;\r\n this.isSaveAsClicked = false;\r\n this.shareDealDto = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n this.saveAsSearchName = \"\";\r\n this.showSaveResults = null;\r\n this.showMsg = true;\r\n });\r\n }\r\n\r\n /**\r\n * Saves the search or saves the search and create a case.\r\n * @param createCase (boolean set to true when promoting search to case)\r\n */\r\n\r\n //TODO: this functon does not need a productResultList parameter but as views have been shared with devfinance we are passing it\r\n register(createCase: boolean = false, productResultList: number) {\r\n this.loadingData = true;\r\n if (this.isShortlistingMore) {\r\n if (this.validateAllLendersUnique(this.comparisonList) == true) {\r\n this.dealLenderService.shortlistMoreLenders(this.loanCriteria.Id, this.getDealLenders(this.comparisonList), this.hasSearchChanged).then((response) => {\r\n }).then(() => {\r\n this.getSelectedProducts();\r\n }).finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.loadingData = false;\r\n }\r\n } else {\r\n if (\r\n this.shareDealDto &&\r\n this.shareDealDto.DealName &&\r\n this.shareDealDto.DealName.length > 0\r\n ) {\r\n this.loanCriteria.Name = this.shareDealDto.DealName;\r\n }\r\n\r\n var request: SaveCommercialSearchRequest = {\r\n DealDto: this.loanCriteria,\r\n ShareDealDto: null,\r\n OrgCode: \"\",\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n this.commercialDealService\r\n .saveCommercialSearchReturnsId(request)\r\n .then((response) => {\r\n this.loanCriteria.Id = response as number;\r\n this.loadingData = false;\r\n\r\n // Creating the case is done on the casedashboard for deals\r\n if (createCase) {\r\n this.$location.path(\r\n \"/commercialcasedashboard/\" + this.loanCriteria.Id + \"/\" + true,\r\n );\r\n }\r\n\r\n var shortlistDealLenders = this.getDealLenders(this.comparisonList);\r\n\r\n this.dealLenderService\r\n .addUpdatelistreturnonlyids(shortlistDealLenders)\r\n .then((response) => {\r\n if (this.dealLenders != null) {\r\n let deallenders = this.dealLenders.filter(\r\n (lender) => response.indexOf(lender.Id) === -1,\r\n );\r\n\r\n deallenders.forEach((lender) =>\r\n this.dealLenderService.markasdeleted(lender.Id),\r\n );\r\n }\r\n })\r\n .finally(() => {\r\n this.getSelectedProducts();\r\n this.isClicked = false;\r\n this.newSearch = false;\r\n this.isProceedClicked = false;\r\n this.showSaveResults = null;\r\n this.loadingData = false;\r\n });\r\n })\r\n .catch((response) => {\r\n //TODO BRIDGING - capture if an error has occurred and process it\r\n //this.isError = true;\r\n this.isProceedClicked = false;\r\n })\r\n .finally(() => { });\r\n }\r\n }\r\n\r\n /**\r\n * updates a seach with introducee details and saves it and sends emil to client if 'notifyBorrower' is set to true.\r\n * @param notifyBorrower\r\n */\r\n\r\n sendResultsToClient(notifyBorrower) {\r\n if (this.isSaveAsClicked) {\r\n this.saveSaveAsSearch(true);\r\n } else {\r\n this.loadingData = true;\r\n this.dealService\r\n .shareDealWithClient(this.shareDealDto)\r\n .then(() => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.shareDealDto.ClientDto.FirstName +\r\n \" \" +\r\n this.shareDealDto.ClientDto.LastName;\r\n //this.loanCriteria.DealClients[0] = this.shareDealDto.ClientDto;\r\n this.loanCriteria.Name = this.shareDealDto.DealName;\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.loadingData = false;\r\n this.isAssigned = true;\r\n this.reloadSearch = true;\r\n })\r\n .finally(() => {\r\n delete this.shareDealDto;\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n getDealLenders(selectedLenders: CommercialLenderResultSummaryDTO[]) {\r\n var lendersList: DealLenderDTO[] = [];\r\n\r\n if (this.dealClientUniqueRef || this.dealUniqueRef) {\r\n this.searchid = this.loanCriteria.Id;\r\n }\r\n\r\n selectedLenders.forEach(({ ProductID, LenderID, NetLoan }) => {\r\n var dealLender: DealLenderDTO;\r\n\r\n if (this.dealLenders) {\r\n dealLender = this.dealLenders.find(\r\n (dl) =>\r\n dl.DealId === this.searchid &&\r\n dl.ProductId === ProductID &&\r\n dl.LenderId === LenderID,\r\n );\r\n }\r\n\r\n if (!dealLender) {\r\n dealLender = {\r\n DealId: this.searchid,\r\n ProductId: ProductID,\r\n LenderId: LenderID,\r\n Status: CaseLenderStateEnum.Shortlisted,\r\n OriginalNetLoan: NetLoan,\r\n } as DealLenderDTO;\r\n }\r\n\r\n lendersList.push(dealLender);\r\n });\r\n\r\n var unselecteLenderList = [];\r\n\r\n if (this.dealLenders) {\r\n unselecteLenderList = this.dealLenders.filter(dl => !lendersList.some(ll => ll.ProductId === dl.ProductId && ll.LenderId === dl.LenderId) && (dl.Status == CaseLenderStateEnum.Rejected || dl.Status == CaseLenderStateEnum.Withdrawn));\r\n }\r\n\r\n if (unselecteLenderList.length > 0) {\r\n unselecteLenderList.forEach((l) => {\r\n l.IsDeleted = true;\r\n lendersList.push(l);\r\n });\r\n }\r\n\r\n return lendersList;\r\n }\r\n\r\n /** closes share results modal*/\r\n cancelNewSearch() {\r\n this.newSearch = false;\r\n this.shareDealDto.ClientDto = null;\r\n this.existingborrower = null;\r\n this.showClientDetails = false;\r\n this.selecteduserName = null;\r\n this.isSaveAsClicked = false;\r\n this.sharedSearch = false;\r\n if (this.tempSearchName) {\r\n this.loanCriteria.Name = this.tempSearchName;\r\n this.tempSearchName = \"\";\r\n }\r\n }\r\n\r\n openSendResultsToBorrowerModal() {\r\n var client = this.loanCriteria.DealClients[0][\"Client\"]; // TODO Deal FUTURE- always want to assume there's one for now until there's a redesign of sharing\r\n this.shareDealDto.DealId = this.loanCriteria.Id;\r\n this.shareDealDto.DealName = this.loanCriteria.Name;\r\n this.shareDealDto.IsApplicant = true;\r\n this.shareDealDto.IsPrimary = true;\r\n this.shareDealDto.ClientDto = {\r\n FirstName: client.FirstName,\r\n LastName: client.LastName,\r\n Email: client.Email,\r\n PhoneNumber: client.PhoneNumber,\r\n ClientUserId: client.ClientUserId,\r\n } as ClientDTO;\r\n this.existingborrower = null;\r\n this.newSearch = true;\r\n this.sharedSearch = true;\r\n }\r\n\r\n //TODO:Roopa need to move to shared service\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n this.loadingData = true;\r\n this.shareDealDto.IsApplicant = true;\r\n this.shareDealDto.IsPrimary = true;\r\n //Look up client's account details\r\n this.$user.searchByEmail(userName).then((users) => {\r\n this.shareDealDto.ClientDto.FirstName = users[0].FirstName;\r\n this.shareDealDto.ClientDto.Email = users[0].Email;\r\n this.shareDealDto.ClientDto.LastName = users[0].LastName;\r\n this.shareDealDto.ClientDto.PhoneNumber = users[0].PhoneNumber;\r\n this.shareDealDto.ClientDto.ClientUserId = users[0].Id;\r\n this.showClientDetails = true;\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n /**\r\n * Sends email to client attached to the search\r\n */\r\n sendShareSearchEmailToClient() {\r\n this.loadingData = true;\r\n this.shareDealDto.EmailLinkToClient = true;\r\n this.dealService\r\n .shareDealWithClient(this.shareDealDto)\r\n .then(() => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.shareDealDto.ClientDto.FirstName +\r\n \" \" +\r\n this.shareDealDto.ClientDto.LastName;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.loadingData = false;\r\n this.sharedSearch = false;\r\n });\r\n }\r\n\r\n applyForLoan() {\r\n this.isProceedClicked = true;\r\n this.register(true, this.productResultList);\r\n }\r\n\r\n returnToCase() {\r\n if (this.isShortlistingMore) {\r\n // copy newly selected products/lenders to caselender\r\n this.dealLenderService\r\n .shortlistMoreLenders(\r\n this.loanCriteria.Id,\r\n this.getDealLenders(this.comparisonList),\r\n this.hasSearchChanged,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n //sending 'Promote' as true if search has changed & 'NewShortlist' as true if isShortlistingMore\r\n this.$location.path(\r\n \"/commercialcasedashboard/\" +\r\n this.loanCriteria.Id +\r\n \"/\" +\r\n null +\r\n \"/\" +\r\n true +\r\n \"/\" +\r\n this.hasSearchChanged,\r\n );\r\n }\r\n });\r\n } else {\r\n this.dealLenderService\r\n .updateShortlistedLenders(this.getDealLenders(this.comparisonList))\r\n .then((response) => {\r\n this.$location.path(\r\n \"/commercialcasedashboard/\" + this.loanCriteria.Id,\r\n );\r\n });\r\n }\r\n }\r\n\r\n toggleShowLenderNamesBrokerOverride() {\r\n // this.loanCriteria.ShowLenderInfoBrokerOverride = !this.loanCriteria.ShowLenderInfoBrokerOverride;\r\n if (this.searchPanelForm.$valid && !this.showPostcodeErrorMessage) {\r\n this.updateCriteriaAndGetResults(false, true);\r\n }\r\n }\r\n\r\n onMortgageProductChange() {\r\n if (\r\n this.loanCriteria.MortgageInterestType == InterestRateTypeEnum.Variable\r\n ) {\r\n this.loanCriteria.FixedRateTerm = null;\r\n } else if (\r\n this.loanCriteria.MortgageInterestType == InterestRateTypeEnum.Fixed\r\n ) {\r\n this.loanCriteria.FixedRateTerm = FixedRateTermEnum.FiveYear;\r\n }\r\n }\r\n\r\n mortgageTermToLoanTerm(): void {\r\n this.loanCriteria.LoanTermReq = this.mortgageTerm * 12;\r\n }\r\n\r\n /**Update the loan label in the comparison results based on the loan label returned in the results\r\n * Primary purpose is to update the loan label when the show lender names button is toggled\r\n * */\r\n updateLoanLabels() {\r\n for (var i = 0; i < this.comparisonList.length; i++) {\r\n let resultIndex = this.summarySearchResults.findIndex(\r\n (item) => item.ProductID == this.comparisonList[i].ProductID,\r\n );\r\n\r\n if (resultIndex > -1) {\r\n this.comparisonList[i].LoanLabel =\r\n this.summarySearchResults[resultIndex].LoanLabel;\r\n }\r\n }\r\n\r\n //This is used for shortlisting pdf\r\n this.prepareDataForShortlistPdf();\r\n }\r\n\r\n onCurrentUseOfBuilding() {\r\n if (\r\n this.loanCriteria.CurrentPropertyType != null &&\r\n this.loanCriteria.CurrentPropertyType == PropertyTypeEnum.HMO\r\n ) {\r\n this.loanCriteria.UnitCount = null;\r\n this.loanCriteria.TimeLeftOnLease = TimeLeftOnLeaseEnum.OneToThreeYears;\r\n } else if (\r\n this.loanCriteria.CurrentPropertyType != null &&\r\n this.loanCriteria.CurrentPropertyType ==\r\n PropertyTypeEnum.MultiUnitFreeholdBlock\r\n ) {\r\n this.loanCriteria.BedroomCount = null;\r\n this.loanCriteria.TimeLeftOnLease = TimeLeftOnLeaseEnum.OneToThreeYears;\r\n } else if (\r\n this.loanCriteria.CurrentPropertyType != null &&\r\n this.loanCriteria.CurrentPropertyType !=\r\n PropertyTypeEnum.MultiUnitFreeholdBlock &&\r\n this.loanCriteria.CurrentPropertyType != PropertyTypeEnum.HMO\r\n ) {\r\n this.loanCriteria.BedroomCount = null;\r\n this.loanCriteria.UnitCount = null;\r\n }\r\n\r\n this.updateSearchViaSlider();\r\n }\r\n\r\n datasetupOnMaxLoanRequiredChange() {\r\n this.loanCriteria = this.dealService.dataSetupOnMaxLoanRequiredChange(\r\n this.loanCriteria,\r\n );\r\n\r\n this.updateSearchViaSlider();\r\n }\r\n\r\n showContactBrokerAndExportButton() {\r\n if (\r\n this.brokerageOrg != null &&\r\n this.loanCriteria != null &&\r\n this.loanCriteria.DealClients != null &&\r\n this.loanCriteria.DealClients.length > 0 &&\r\n this.loanCriteria.DealClients[0]?.Client != null &&\r\n this.loanCriteria.DealClients[0].Client.Email.length > 0\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n //This is used in shortlisting pdf\r\n prepareDataForShortlistPdf() {\r\n this.loanCriteria.ComparisonList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n }\r\n\r\n isProceedButtonDisabled(): boolean {\r\n if (this.validateAllLendersUnique(this.comparisonList) == false) {\r\n return true;\r\n }\r\n\r\n const validLenders = this.comparisonList?.filter(\r\n (item) =>\r\n item.DealLenderStatus !== CaseLenderStateEnum.Rejected &&\r\n item.DealLenderStatus !== CaseLenderStateEnum.Withdrawn\r\n ) || [];\r\n \r\n if (\r\n !validLenders ||\r\n validLenders.length < 1 ||\r\n validLenders.length > this.noOfShortlistAllowed ||\r\n this.isProceedClicked == true\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n validateAllLendersUnique(\r\n comparisonList: CommercialLenderResultSummaryDTO[],\r\n ): boolean {\r\n\r\n if (this.isShortlistingMore) {\r\n const matchingItems = this.HiddenDealLenderList.filter(item1 =>\r\n this.comparisonList.some(item2 => item1.LenderId === item2.LenderID)\r\n );\r\n\r\n if (matchingItems.length > 0) return false;\r\n }\r\n\r\n const numberOfUniqueLenderIds: number = new Set(\r\n this.comparisonList.map((item) => item.LenderID),\r\n ).size;\r\n\r\n return numberOfUniqueLenderIds == this.comparisonList.length;\r\n }\r\n\r\n getRegionByPostcode() {\r\n if (\r\n this.loanCriteria.PostcodeSearchString &&\r\n this.loanCriteria.PostcodeSearchString.replace(\" \", \"\").length >= 2\r\n ) {\r\n if (\r\n this.dealService.isValidPostcodeString(\r\n this.loanCriteria.PostcodeSearchString,\r\n )\r\n ) {\r\n this.showPostcodeErrorMessage = false;\r\n this.isPostcodeChange = true;\r\n this.updateSearchViaSlider();\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n }\r\n }\r\n\r\n getOrganisationAndBrokerDetails() {\r\n if (!this.isLoggedInUser && !this.isAdmin && !this.isBroker) {\r\n this.loadingData = true;\r\n this.organisationService\r\n .getOrganisationAndBrokerByDealId(this.loanCriteria.Id)\r\n .then((response) => {\r\n if (response && response.Organisation != null) {\r\n this.brokerageOrg = response.Organisation;\r\n\r\n if (response.Organisation.IsBrickflow) {\r\n this.moveContactBrokerBtnInMiddle = true;\r\n } else {\r\n if (response.Broker != null) {\r\n this.brokerDetail = `${response.Broker.FullName} (${response.Broker.Email})`;\r\n }\r\n\r\n if (this.brokerageOrg.IsWhiteLabelled) {\r\n this.orgName = this.brokerageOrg.Name.replace(/ /g, \"_\");\r\n }\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n sortByField(field) {\r\n this.loanCriteria.SortBy = field;\r\n this.updateCriteriaAndGetResults(false, false);\r\n this.showSortBy = !this.showSortBy;\r\n }\r\n\r\n sortSummaryResults() {\r\n switch (this.loanCriteria.SortBy) {\r\n case SortByEnum.NetLoanSize:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n b.NetLoan - a.NetLoan || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.LenderCosts:\r\n this.summarySearchResults.sort(\r\n (a, b) => a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.LenderName:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.LenderName.localeCompare(b.LenderName) ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.InterestRate:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.Interest - b.Interest || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.ArrangementFee:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.ArrangementFee - b.ArrangementFee ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.DepositEquity:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.EquityOrDeposit - b.EquityOrDeposit ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.MonthlyPayment:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.MonthlyPayment - b.MonthlyPayment ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n default:\r\n this.summarySearchResults.sort((a, b) => {\r\n if (a.NetLoan < b.NetLoan) return 1;\r\n if (a.NetLoan > b.NetLoan) return -1;\r\n\r\n if (a.TrueMonthlyCost > b.TrueMonthlyCost) return 1;\r\n if (a.TrueMonthlyCost < b.TrueMonthlyCost) return -1;\r\n\r\n return 0;\r\n });\r\n this.loanCriteria.SortBy = SortByEnum.NetLoanSize;\r\n }\r\n\r\n for (var i = 0; i < this.summarySearchResults.length; i++) {\r\n this.summarySearchResults[i].SelectedRowNumber = i + 1;\r\n }\r\n }\r\n\r\n /** Redirects to the user dashboard */\r\n goToUserDashboard() {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n submitLenderReferral() {\r\n this.loadingData = true;\r\n this.lenderReferralData.DealId = this.loanCriteria.Id;\r\n this.dealClientService\r\n .submitLenderReferral(this.lenderReferralData)\r\n .then((response) => {\r\n if (response) {\r\n this.displayMsg = \"Your referral has been submitted.\";\r\n this.showMsg = true;\r\n this.isLenderReferredSearch = true;\r\n } else {\r\n this.displayMsg = \"Error while making a referral, please try later.\";\r\n this.showMsg = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n this.lenderReferralData = null;\r\n sessionStorage.removeItem(\"lenderReferralData\");\r\n });\r\n }\r\n\r\n reloadPage() {\r\n if (this.reloadSearch) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n openRegisterModal() {\r\n this.showRegisterModal = true;\r\n }\r\n\r\n onEditSearchNameClick() {\r\n this.toggleEditSearchName = !this.toggleEditSearchName;\r\n }\r\n\r\n /* onClickEligibleConfirm() {\r\n this.loadingData = true;\r\n this.loanCriteria.DealClients[0].Client.PhoneNumber =\r\n this.enterpriseClient.PhoneNumber;\r\n this.clientService\r\n .addUpdatereturnonlyid(this.loanCriteria.DealClients[0].Client)\r\n .then((response) => {\r\n this.showEligibleModal = false;\r\n window.scrollTo(0, 0);\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }*/\r\n\r\n onSortbyClick() {\r\n this.closeFilterOptions();\r\n this.closeExportDropdown();\r\n this.showSortBy = !this.showSortBy;\r\n }\r\n\r\n onFilterClick() {\r\n this.closeSortByDropdown();\r\n this.closeExportDropdown();\r\n this.showFilters = !this.showFilters;\r\n }\r\n\r\n onExportClick() {\r\n this.prepareDataForShortlistPdf();\r\n this.closeSortByDropdown();\r\n this.closeFilterOptions();\r\n this.showExportOptions = !this.showExportOptions;\r\n }\r\n\r\n getSelectedSortByOptionText() {\r\n if (this.loanCriteria) {\r\n switch (this.loanCriteria.SortBy) {\r\n case SortByEnum.TrueMonthlyCost:\r\n return \"True Monthly Cost\";\r\n case SortByEnum.NetLoanSize:\r\n return \"Net Loan Size\";\r\n case SortByEnum.LenderCosts:\r\n return \"Total Loan Costs\";\r\n case SortByEnum.LenderName:\r\n return \"Lender Name (A-Z)\";\r\n case SortByEnum.InterestRate:\r\n return \"Interest Rate\";\r\n case SortByEnum.ArrangementFee:\r\n return \"Arrangement Fee\";\r\n case SortByEnum.DepositEquity:\r\n return \"Equity\";\r\n case SortByEnum.ROCE:\r\n return \"ROCE\";\r\n case SortByEnum.MonthlyPayment:\r\n return \"Monthly Payment\";\r\n default:\r\n return \"\";\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n createAccount() {\r\n this.loadingData = true;\r\n this.enterpriseClient.OrgUniqueRef = this.brokerageOrg.UniqueRef;\r\n this.$user\r\n .registerEnterpriseUserAndSaveShortlisteResults(this.enterpriseClient, this.getDealLenders(this.comparisonList))\r\n .then((response) => {\r\n // clean up session storage\r\n if (window.self == window.top) {\r\n sessionStorage.removeItem(\"clientId\");\r\n sessionStorage.removeItem(\"userRole\");\r\n } else {\r\n this.organisationService.sendDataToParent(\"clientId\", \"\");\r\n this.organisationService.sendDataToParent(\"userRole\", \"\");\r\n }\r\n this.login(\"ENTERPRISE-LEAD-REGISTERED-FROM-RESULTS-PAGE\", EventLogEnum.EnterpriseUserRegistration);\r\n })\r\n .catch((response) => {\r\n this.error = \"Error while registering an account, please try again later.\";\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n login(eventIdentifier: string = \"ENTERPRISE-CONTACT-LOGGEDIN-FROM-RESULTS-PAGE\", eventType: EventLogEnum = EventLogEnum.EnterpriseUserLogin) {\r\n this.loadingData = true;\r\n if (!this.$cookies.get(\"access_token\")) {\r\n this.$auth\r\n .login(\r\n this.enterpriseClient.UserName,\r\n this.enterpriseClient.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n this.error =\"\";\r\n let expiry: Date = response;\r\n this.$user.getcurentuserrecord().then((response) => {\r\n this.eventLogService.logEvent(\r\n eventIdentifier,\r\n eventType,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n \"\",\r\n this.loanCriteria.DealClients[0]?.Client.Id?.toString()\r\n );\r\n\r\n (this.$rootScope as any).currentUser = response;\r\n this.$cookies.put(\"user_firstname\", response.FirstName, {\r\n expires: expiry,\r\n });\r\n (this.$rootScope as any).selectedUser = response;\r\n this.$rootScope.$broadcast(\"login\"); //tell everyone you have logged in\r\n if (eventType == EventLogEnum.EnterpriseUserRegistration) sessionStorage.setItem('showConfirmClientPhoneNo', 'true');\r\n this.$location.path(`/commercialresults/${this.loanCriteria.Id}`);\r\n });\r\n }).catch((response) => {\r\n this.isLoginError = true;\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n onClickLogin() {\r\n this.saveShortlistedLenders();\r\n this.login();\r\n }\r\n\r\n saveShortlistedLenders() {\r\n var shortlistDealLenders = this.getDealLenders(this.comparisonList);\r\n this.dealLenderService\r\n .updateShortlistedLenders(shortlistDealLenders)\r\n .then((response) => { });\r\n }\r\n\r\n returnShortlistedDealLenderStatusText(item: CommercialLenderResultSummaryDTO) {\r\n if (this.checkDeletedLender(item.LenderID.toString(), item.ProductID.toString())) {\r\n return \"Previously Deleted\";\r\n }\r\n\r\n if (item.IsDealLender && (this.loanCriteria.Status != CaseStatusEnum.Search && this.loanCriteria.Status != CaseStatusEnum.NewCase && this.loanCriteria.Status != CaseStatusEnum.ReadyToSubmit)) {\r\n switch (item.DealLenderStatus) {\r\n case CaseLenderStateEnum.Shortlisted:\r\n return \"Shortlisted\";\r\n case CaseLenderStateEnum.Received:\r\n return \"Awaiting DIP\";\r\n case CaseLenderStateEnum.Offered:\r\n return \"DIP Received\";\r\n case CaseLenderStateEnum.Rejected:\r\n return \"Lender Rejected\";\r\n case CaseLenderStateEnum.Withdrawn:\r\n return \"Lender Withdrawn\";\r\n default:\r\n break\r\n }\r\n }\r\n }\r\n\r\n onSaveClick() {\r\n if (this.isAssigned) {\r\n this.isSaveorSaveAsClicked = true;\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.showShareSearchModal();\r\n }\r\n }\r\n\r\n getProductLastVerifiedDates(productIds: number[]) {\r\n this.productService.getLastVerifiedDates(productIds).then((response) => {\r\n productIds.forEach(id => {\r\n if (response[id] != null) {\r\n this.productLastVerifiedDates[id] = this.formatDate(response[id]);\r\n }\r\n })\r\n });\r\n }\r\n\r\n formatDate = (dateString) => {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString('en-GB');\r\n };\r\n\r\n closeFilterOptions() {\r\n this.showFilters = false;\r\n }\r\n\r\n closeSortByDropdown() {\r\n this.showSortBy = false;\r\n }\r\n\r\n closeExportDropdown() {\r\n this.showExportOptions = false;\r\n }\r\n\r\n goToNewSearch() {\r\n this.sharedDataService.cleanLenderReferralSessionStorage();\r\n // If the current user is a broker and doesn't have a subscription then don't allow them to create a new search\r\n if (this.isBroker && !this.selectedUser.HasActiveSubscription) {\r\n return;\r\n }\r\n\r\n if (!this.loadingData) {\r\n (this.$rootScope as any).loanCriteria = null;\r\n\r\n this.$location.path(\"/allloans\");\r\n }\r\n }\r\n\r\n updateClientContactInfoAndNotifyBroker(){\r\n if(this.loanCriteria !=null && this.loanCriteria.DealClients != null){\r\n this.dealClientService.UpdateClientContactInfoAndNotifyBroker(this.clientUpdatedContact, this.loanCriteria?.Id,this.loanCriteria.DealClients[0].Client.Id).then((response) => {\r\n this.showClientPhoneNumberConfirmationModal = false;\r\n this.sliderShown = true;\r\n }).catch((response) => {\r\n this.error = \"There was an error updating the contact. Please try again later.\"\r\n })\r\n .finally(() => {\r\n sessionStorage.removeItem('showConfirmClientPhoneNo');\r\n });\r\n } else {\r\n sessionStorage.removeItem('showConfirmClientPhoneNo');\r\n this.showClientPhoneNumberConfirmationModal = false;\r\n this.sliderShown = true;\r\n }\r\n }\r\n\r\n getOrgName(){\r\n if(this.orgName){\r\n return this.orgName.replace(/_/g, \" \");\r\n }\r\n return \"\";\r\n }\r\n\r\n /**Sends an email to the email address for the user to reset their password */\r\n sendResetPasswordEmail() {\r\n this.loadingData = true;\r\n this.$auth\r\n .resetPassword(this.enterpriseClient.Email)\r\n .then((response) => {\r\n this.isLoginError = false;\r\n this.isResetPasswordSubmitted = true;\r\n this.registrationLoginError = null;\r\n })\r\n .catch((error) => {\r\n this.registrationLoginError = \"There was an error sending the password reset email. Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n getRequiredRolesOptions(){\r\n return this.dealService.getRequiredRolesOptions();\r\n }\r\n\r\n validateAccessAndRedirect(){\r\n //Do not allow the connect user to access the deal\r\n if(this.isLoggedInUser && this.loanCriteria.IsReferredToConnect && this.selectedUser.IsConnectUser){\r\n this.$location.path(`/commercialcasedashboard/${this.loanCriteria.Id}`)\r\n }else{\r\n if(this.isLoggedInUser && (this.loanCriteria.Status != CaseStatusEnum.NewCase && this.loanCriteria.Status != CaseStatusEnum.Search && !this.isShortlistingMore)){\r\n this.dealLenderService\r\n .fetchDealLendersByDealId( this.loanCriteria.Id)\r\n .then((results) => {\r\n if(results && results.filter(dl => !dl.IsDeleted && dl.Status != CaseLenderStateEnum.Withdrawn && dl.Status != CaseLenderStateEnum.Rejected).length >= 5 && results.filter(dl => !dl.IsDeleted && dl.IsBidAccepted)){\r\n if (this.isAdmin || this.isBroker) {\r\n this.$location.path(\"/dealforum/\" + this.loanCriteria.Id)\r\n }\r\n else {\r\n this.$location.path(`/userdashboard`)\r\n }\r\n }else{\r\n this.$location.path(`/commercialshortlistmore/${this.loanCriteria.Id}`)\r\n }\r\n })\r\n }\r\n }\r\n \r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { DealDTO } from \"@js/DTO/Deal/DealDTO.cs.d\";\r\nimport { LenderResultDTO } from \"@js/DTO/DevelopmentFinance/LenderResultDTO.cs.d\";\r\nimport { LenderResultSummaryDTO } from \"@js/DTO/DevelopmentFinance/LenderResultSummaryDTO.cs.d\";\r\nimport { LenderLogoDTO } from \"@js/DTO/LenderLogoDTO.cs.d\";\r\nimport { BridgingLenderResultSummaryDTO } from \"@js/DTO/SearchResults/BridgingLenderResultSummaryDTO.cs.d\";\r\nimport { CommercialLenderResultSummaryDTO } from \"@js/DTO/SearchResults/CommercialLenderResultSummaryDTO.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\n\r\nexport class ComparisonController {\r\n isLoading: boolean;\r\n\r\n selectedCandidates: (\r\n | LenderResultSummaryDTO\r\n | CommercialLenderResultSummaryDTO\r\n | BridgingLenderResultSummaryDTO\r\n )[];\r\n allResults: (\r\n | LenderResultSummaryDTO\r\n | CommercialLenderResultSummaryDTO\r\n | BridgingLenderResultSummaryDTO\r\n )[];\r\n rowSelected: number[] = [];\r\n\r\n //Lender Logos\r\n showLenderLogo: boolean = false;\r\n lenderIds: number[] = [];\r\n urlLenders: LenderLogoDTO[] = [];\r\n\r\n selectedUser: ApplicationUserDTO;\r\n\r\n enquiryOpen: boolean;\r\n enquiryEmail: string;\r\n enquiryBody: string;\r\n\r\n isBroker: boolean = false;\r\n\r\n isIntroducer: boolean = false;\r\n\r\n searchid: number;\r\n caseid: number;\r\n uniqueid: string;\r\n isLenderVisible: boolean;\r\n showAdditionalProductInfoModal: LenderResultDTO;\r\n case: CaseDTO;\r\n isDeal: boolean = false;\r\n\r\n criteria: {} = {};\r\n\r\n productTypeOptions = [];\r\n productLastVerifiedDates = {};\r\n\r\n isLoggedInUser: boolean = false;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"CaseMemberService\",\r\n \"RoleService\",\r\n \"FileAttachmentService\",\r\n \"OrganisationService\",\r\n \"CaseService\",\r\n \"DealService\",\r\n \"$routeParams\",\r\n \"SelectListService\",\r\n \"ProductService\"\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private caseMemberService: CaseMemberService,\r\n private roleService: RoleService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private organisationService: OrganisationService,\r\n private caseService: CaseService,\r\n private dealService: DealService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private selectListService: SelectListService,\r\n private productService: ProductService\r\n ) {\r\n this.isDeal = this.$routeParams.isDeal ? true : false;\r\n\r\n if (this.$routeParams.SearchId) {\r\n this.searchid = this.$routeParams.SearchId;\r\n }\r\n this.showOrHideLenderLogo();\r\n this.productTypeOptions = this.selectListService.GetProductTypeOptions();\r\n\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n }\r\n\r\n if (sessionStorage.getItem(\"UniqueId\")) {\r\n this.uniqueid = sessionStorage.getItem(\"UniqueId\");\r\n }\r\n\r\n this.allResults = JSON.parse(sessionStorage.getItem(\"TempSavedResults\"));\r\n\r\n //We are sending caseId has 0 for bridging\r\n if (this.$routeParams.CaseId && this.$routeParams.CaseId > 0) {\r\n this.caseid = this.$routeParams.CaseId;\r\n }\r\n\r\n if (\r\n (this.$rootScope as any).selectedUser ||\r\n sessionStorage.getItem(\"SelectedUser\")\r\n ) {\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.selectedUser = (this.$rootScope as any).selectedUser;\r\n sessionStorage.setItem(\r\n \"SelectedUser\",\r\n JSON.stringify(this.selectedUser),\r\n );\r\n } else if (sessionStorage.getItem(\"SelectedUser\")) {\r\n this.selectedUser = JSON.parse(sessionStorage.getItem(\"SelectedUser\"));\r\n }\r\n\r\n this.checkForBrokerOrIntroducer();\r\n }\r\n\r\n if (\r\n sessionStorage.getItem(\"ComparisonList\") &&\r\n sessionStorage.getItem(\"LoanCriteria\")\r\n ) {\r\n this.selectedCandidates = JSON.parse(\r\n sessionStorage.getItem(\"ComparisonList\"),\r\n );\r\n\r\n if (this.selectedCandidates) {\r\n for (var i = 0; i < this.selectedCandidates.length; i++) {\r\n this.getUrls(\r\n this.selectedCandidates[i].Id,\r\n this.selectedCandidates[i].LogoURL,\r\n );\r\n }\r\n const productIds = this.selectedCandidates.map((product) => product.ProductID);\r\n this.getProductLastVerifiedDates(productIds);\r\n }\r\n\r\n this.criteria = JSON.parse(sessionStorage.getItem(\"LoanCriteria\"));\r\n } else {\r\n this.goToResults();\r\n }\r\n }\r\n\r\n getUrls(id: number, url: string) {\r\n if (url == null) return null;\r\n\r\n this.fileAttachmentService.getFileUri(url).then((response) => {\r\n var LenderLogoDTO = {\r\n Id: id,\r\n LogoURL: response,\r\n } as LenderLogoDTO;\r\n\r\n this.urlLenders.push(LenderLogoDTO);\r\n });\r\n }\r\n\r\n checkForBrokerOrIntroducer(): void {\r\n //Check if broker\r\n this.roleService.isBrokerOrABove().then((response) => {\r\n this.isBroker = response;\r\n });\r\n this.roleService.isIntroducer().then((response) => {\r\n this.isIntroducer = response;\r\n });\r\n }\r\n\r\n showOrHideLenderLogo() {\r\n this.organisationService.showLenderNamesAndLogos(this.searchid, this.isDeal).then((result) => {\r\n this.showLenderLogo = result;\r\n });\r\n }\r\n\r\n getLogoURL(id: number) {\r\n var found = this.urlLenders.find((x) => x.Id == id);\r\n\r\n if (found) {\r\n return found.LogoURL;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n sendEnquiry(): void {\r\n this.enquiryOpen = false;\r\n }\r\n\r\n goToDealResults(dealCriteria: DealDTO, shortlistingMore: boolean = false) {\r\n var route = shortlistingMore ? \"shortlistmore\" : \"results\";\r\n var enterpriseRoute = !this.isLoggedInUser && !shortlistingMore ? '/e' : '';\r\n\r\n if (this.dealService.isDevelopmentFinanceDealDto(dealCriteria)) {\r\n this.$location.path(enterpriseRoute + \"/devfinance\" + route + \"/\" + this.searchid);\r\n }\r\n\r\n if (this.dealService.isBridgingDealDto(dealCriteria)) {\r\n console.log(enterpriseRoute + \"/bridging\" + route + \"/\" + this.searchid);\r\n this.$location.path(enterpriseRoute + \"/bridging\" + route + \"/\" + this.searchid);\r\n }\r\n\r\n if (this.dealService.isCommercialDealDto(dealCriteria)) {\r\n this.$location.path(enterpriseRoute + \"/commercial\" + route + \"/\" + this.searchid);\r\n }\r\n }\r\n\r\n goToResults(): void {\r\n //Clearing the all lsd data(except 'LoanCriteria') saved for this view.\r\n sessionStorage.removeItem(\"TempSavedResults\");\r\n sessionStorage.removeItem(\"SelectedUser\");\r\n sessionStorage.removeItem(\"UniqueId\");\r\n\r\n if (this.caseid && this.searchid) {\r\n this.caseService.fetch(this.caseid).then((result) => {\r\n if (\r\n result.CaseStatus == CaseStatusEnum.ReadyToReSubmit ||\r\n result.CaseStatus == CaseStatusEnum.SubmittedToLendersForHoT\r\n ) {\r\n this.$location.path(\r\n \"/shortlistmore/\" + this.searchid + \"/\" + this.caseid,\r\n );\r\n } else {\r\n if (this.isDeal) {\r\n this.goToDealResults(this.criteria as DealDTO);\r\n } else {\r\n this.$location.path(\r\n \"/results/\" + this.searchid + \"/\" + this.caseid,\r\n );\r\n }\r\n }\r\n });\r\n } else if (this.searchid || this.isDeal) {\r\n if (this.isDeal) {\r\n sessionStorage.setItem(\r\n \"ComparisonList\",\r\n JSON.stringify(this.selectedCandidates),\r\n );\r\n\r\n if (sessionStorage.getItem(\"DealClientUniqueRef\")) {\r\n this.$location.path(\r\n \"/referredsearchdeal/\" +\r\n sessionStorage.getItem(\"DealClientUniqueRef\") + \"/false\",\r\n );\r\n sessionStorage.removeItem(\"DealClientUniqueRef\");\r\n } else {\r\n const dealCriteria = this.criteria as DealDTO;\r\n if (\r\n dealCriteria.Status == CaseStatusEnum.ReadyToReSubmit ||\r\n dealCriteria.Status == CaseStatusEnum.SubmittedToLendersForHoT\r\n ) {\r\n var shortlistingMore = true;\r\n this.goToDealResults(dealCriteria, shortlistingMore);\r\n } else {\r\n this.goToDealResults(dealCriteria);\r\n }\r\n }\r\n } else {\r\n this.$location.path(\"/results/\" + this.searchid);\r\n }\r\n } else {\r\n if (this.uniqueid) {\r\n this.$location.path(\"/referredSearch/\" + this.uniqueid);\r\n } else {\r\n this.$location.path(\"/results\");\r\n }\r\n }\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n hideLenderName(label) {\r\n let newLabel = label.replace(/ *\\([^)]*\\) */g, \"\");\r\n return newLabel;\r\n }\r\n\r\n getProductLastVerifiedDates(productIds: number[]) {\r\n this.productService.getLastVerifiedDates(productIds).then((response) => {\r\n productIds.forEach(id => {\r\n if (response[id] != null) {\r\n this.productLastVerifiedDates[id] = this.formatDate(response[id]);\r\n }\r\n })\r\n });\r\n }\r\n\r\n formatDate = (dateString) => {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString('en-GB');\r\n };\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport {UserService} from \"@js/services/UserService\";\r\n\r\nexport class DashboardController {\r\n $scope: any;\r\n $cookies: any;\r\n $location: ng.ILocationService;\r\n $http: ng.IHttpService;\r\n user: ApplicationUserDTO;\r\n webServer: boolean = false;\r\n isLenderVisible: boolean;\r\n isTestBannerHidden: boolean;\r\n cardColours: string[] = [\r\n \"card-colour-1\",\r\n \"card-colour-2\",\r\n \"card-colour-3\",\r\n \"card-colour-4\",\r\n \"card-colour-5\",\r\n \"card-colour-6\",\r\n ];\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"$rootScope\",\r\n \"RoleService\",\r\n \"CaseMemberService\",\r\n \"AuthService\",\r\n \"UserService\"\r\n ];\r\n\r\n constructor(\r\n scope: ng.IScope,\r\n cookies: any,\r\n location: ng.ILocationService,\r\n http: ng.IHttpService,\r\n private $rootScope: ng.IRootScopeService,\r\n protected roleService: RoleService,\r\n private caseMember: CaseMemberService,\r\n private $auth: AuthService,\r\n private userService: UserService\r\n ) {\r\n this.$scope = scope;\r\n this.$cookies = cookies;\r\n this.$location = location;\r\n this.$http = http;\r\n this.isLenderVisible = this.roleService.getIsLenderVisible();\r\n\r\n // Used for test site to keep banner hidden\r\n if (localStorage.getItem(\"isTestBannerHidden\")) {\r\n if (localStorage.getItem(\"isTestBannerHidden\") == \"true\") {\r\n this.isTestBannerHidden = true;\r\n } else {\r\n this.isTestBannerHidden = false;\r\n }\r\n } else {\r\n this.isTestBannerHidden = false;\r\n }\r\n\r\n if (!this.roleService.IsAdminUser) {\r\n this.go(\"/userdashboard\");\r\n }\r\n\r\n this.caseMember.getWebConfigValue().then((result) => {\r\n this.webServer = result;\r\n });\r\n }\r\n\r\n toggleHidden() {\r\n localStorage.setItem(\r\n \"isTestBannerHidden\",\r\n this.isTestBannerHidden.toString(),\r\n );\r\n if (this.isTestBannerHidden) {\r\n this.roleService.isTestBannerHidden = true;\r\n } else {\r\n this.roleService.isTestBannerHidden = false;\r\n }\r\n }\r\n\r\n logout() {\r\n delete this.$cookies.token;\r\n delete this.$cookies.loggedUser;\r\n delete this.$cookies.loggedUserID;\r\n delete this.$cookies.tokenValidTo;\r\n this.$location.path(\"/login\");\r\n }\r\n\r\n newloan() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/criteria/0/0/1\");\r\n }\r\n go(path) {\r\n this.$location.path(path);\r\n }\r\n\r\n hideLenderName(isLenderVisible: boolean) {\r\n this.roleService.setIsLenderVisible(isLenderVisible);\r\n }\r\n\r\n sendTestEmail() {\r\n this.userService.sendTestEmailToUsers();\r\n }\r\n\r\n}\r\n","import { DealSummaryDTO } from \"@js/DTO/Deal/DealSummaryDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { CaseLenderService } from \"@js/services/CaseLenderService\";\r\nimport { BridgingDealService } from \"@js/services/Deal/BridgingDealService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs\";\r\n\r\nexport class DealLenderController {\r\n static $inject = [\r\n \"$routeParams\",\r\n \"LenderService\",\r\n \"$location\",\r\n \"RoleService\",\r\n \"UserService\",\r\n \"OrganisationService\",\r\n \"BridgingDealService\",\r\n \"DealLenderService\",\r\n \"CaseLenderService\",\r\n \"DealService\",\r\n \"$sce\",\r\n ];\r\n\r\n //To save url for Lender Logo Image\r\n lenderLogos: string[] = [];\r\n //To save the Lender Id and request Lender URL\r\n lenderId: number[] = [];\r\n // Controls showing the data loading \"spinner\"\r\n dataLoading: boolean = false;\r\n //Show lender names or Lender Generic Name\r\n showLenders: boolean = false;\r\n\r\n currentDeal: DealSummaryDTO;\r\n caseLenders: DealLenderDTO[];\r\n // The lender the user has clicked apply/heads of terms/feedback for\r\n selectedCaseLender: DealLenderDTO;\r\n // Controls showing the Application Terms and Conditions modal\r\n showApplyTsAndCs: boolean = false;\r\n // Controls showing the Preferred Lenders modal\r\n showPreferredPackagers: boolean = false;\r\n // Controls showing the application confirmation message\r\n showApplicationConfirmation: boolean = false;\r\n // Show the feedback modal\r\n showFeedbackModal: boolean = false;\r\n // Show the Information modal\r\n showInformationMessage: boolean = false;\r\n // show the button to confirm deleting the case lender\r\n showConfirmDeleteButton: boolean = false;\r\n // case to remove\r\n dealLender: DealLenderDTO;\r\n // indicates whether a bid has been accepted on the case\r\n hasBidAccepted: boolean = false;\r\n\r\n // Message to be displayed in the message modal\r\n messageContent: string;\r\n\r\n showProceedModal: boolean = false;\r\n\r\n IsSupplimentInfoFilled: boolean = false;\r\n\r\n currentLenderPreferredBrokers: OrganisationDTO[];\r\n currentLenderPreferredPackagersText: string;\r\n hasLenderPreferredBrokers: boolean = false;\r\n isPreferredBrokerBrickflow: boolean = false;\r\n emailCache = {};\r\n\r\n //Export Modal\r\n selectedLenders: { [lenderId: number]: boolean } = {};\r\n showExport: boolean = false;\r\n showExportButton: boolean = false;\r\n seeLenderNames: boolean = false;\r\n showLenderNames: boolean = true;\r\n\r\n isBridging: boolean = true;\r\n\r\n portalLinks: {} = {};\r\n\r\n isDeallockerIntegrationEnabled: boolean = false;\r\n showDeallockerModal: boolean = false;\r\n isDeallockerTermsAccepted: boolean = false;\r\n isSubmittingToDeallocker: boolean = false;\r\n deallockerTabSelected: number = 1;\r\n hasEnterpriseLicense: boolean = false;\r\n\r\n isConnectMember: boolean = false;\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private lenderService: LenderService,\r\n private $location: ng.ILocationService,\r\n private roleService: RoleService,\r\n private userService: UserService,\r\n private organisationService: OrganisationService,\r\n private bridgingDealService: BridgingDealService,\r\n private dealLenderService: DealLenderService,\r\n private caseLenderService: CaseLenderService,\r\n private dealService: DealService,\r\n private $sce: ng.ISCEService,\r\n ) {\r\n this.lenderDisplayName();\r\n\r\n this.userService.getCurrentUserGotEnterpriseLicense().then((response) => {\r\n this.hasEnterpriseLicense = response;\r\n });\r\n\r\n if (this.$routeParams.DealId) {\r\n this.dataLoading = true;\r\n\r\n this.organisationService.getOrganisationProductAccess().then((response) => {\r\n this.isDeallockerIntegrationEnabled = response.IsDeallockerIntegrationEnabled;\r\n this.isConnectMember = response.IsConnectMember;\r\n });\r\n\r\n this.dealService\r\n .getDealSummary(this.$routeParams.DealId)\r\n .then((response) => {\r\n this.currentDeal = response;\r\n\r\n this.userService.GetDefaultBrokerOrganisation().then((result) => {\r\n this.seeLenderNames = result?.ShowLenderNames;\r\n this.dealLenderService\r\n .fetchByDealId(this.$routeParams.DealId, this.seeLenderNames)\r\n .then((response) => {\r\n this.caseLenders = response.filter((dl) => dl.isPrimaryProduct);\r\n\r\n for (var i = 0; i < this.caseLenders.length; i++) {\r\n this.lenderId[i] = this.caseLenders[i].LenderId;\r\n this.toggleLender(this.caseLenders[i]);\r\n }\r\n /* this.getAllLenderLogos(this.lenderId);*/\r\n\r\n var bidAccepted = this.caseLenders.find(\r\n (x) => x.IsBidAccepted == true,\r\n );\r\n\r\n if (bidAccepted) {\r\n this.hasBidAccepted = true;\r\n }\r\n this.dipRecieved();\r\n })\r\n .then(() => {\r\n this.getLenderPortalLinks();\r\n });\r\n });\r\n\r\n this.IsSupplimentInfoFilled =\r\n this.dealService.getIsSupplimentInfoFilled();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n ////Get URL for the specific lender\r\n //getLenderLogos(index: number) {\r\n // return this.lenderLogos[index];\r\n //}\r\n\r\n //// Get all URL for all Lender result\r\n //getAllLenderLogos(lenderId: number[]) {\r\n // this.lenderService.getAllLenderLogos(lenderId).then(result => {\r\n // this.lenderLogos = result;\r\n\r\n // })\r\n //}\r\n\r\n /** Redirects to the case dashboard */\r\n goToCaseDashboard() {\r\n this.dealService.goToCaseDashboard(\r\n this.currentDeal.Id,\r\n this.currentDeal.ProductFamily,\r\n );\r\n }\r\n\r\n /** Redirects to the user dashboard */\r\n goToUserDashboard() {\r\n this.userService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n lenderDisplayName() {\r\n this.organisationService.showLenderNamesAndLogos().then((result) => {\r\n this.showLenders = result;\r\n });\r\n }\r\n\r\n /**Process the Submit Terms and Conditions button being clicked */\r\n submitTsAndCsClicked() {\r\n this.showApplyTsAndCs = false;\r\n this.selectedCaseLender.IsBidAccepted = true;\r\n\r\n this.dealLenderService\r\n .addUpdate(this.selectedCaseLender)\r\n .then((response) => {\r\n this.selectedCaseLender.IsBidAccepted = response.IsBidAccepted;\r\n this.hasBidAccepted = response.IsBidAccepted;\r\n\r\n return this.dealLenderService.applyToLender(this.selectedCaseLender.DealId, this.selectedCaseLender.Id);\r\n })\r\n .then((response) => {\r\n this.selectedCaseLender.Status = response.CaseLenderState;\r\n this.caseLenders = this.caseLenders.map(cl => cl.Id !== this.selectedCaseLender.Id ? cl : this.selectedCaseLender);\r\n })\r\n .finally(() => {\r\n this.dealLenderService.sendProceedDipEmails(this.currentDeal.Id, this.selectedCaseLender.Id);\r\n this.messageContent = 'Thank you for submitting an application with this lender.';\r\n if (this.hasLenderPreferredBrokers && !this.currentDeal.IsConnectUser && !this.isConnectMember) {\r\n this.showPreferredPackagers = true;\r\n }\r\n else {\r\n this.showInformationMessage = true;\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Process the Apply button being clicked\r\n */\r\n submit(lender) {\r\n this.selectedCaseLender = lender;\r\n\r\n this.lenderService\r\n .getSelectedLenderPreferredOrgs(this.selectedCaseLender.LenderId)\r\n .then((response) => {\r\n this.currentLenderPreferredBrokers = response;\r\n\r\n return this.userService.getBrokerOrganisationId();\r\n })\r\n .then((response) => {\r\n //checks if broker that applies is not part of the preferred brokers list\r\n\r\n this.hasLenderPreferredBrokers =\r\n this.currentLenderPreferredBrokers != null &&\r\n this.currentLenderPreferredBrokers.length > 0 &&\r\n !this.currentLenderPreferredBrokers.some(\r\n (org) => org.Id === response,\r\n );\r\n\r\n if (this.hasLenderPreferredBrokers) {\r\n this.currentLenderPreferredBrokers.forEach((org) => {\r\n this.getBrokerAdminEmail(org);\r\n });\r\n }\r\n\r\n // Determine if any of the preferred brokers are IsBrickflow = true\r\n this.isPreferredBrokerBrickflow = this.currentLenderPreferredBrokers.some(org => org.IsBrickflow);\r\n\r\n return this.lenderService.getLenderPreferredPackagersText(\r\n this.selectedCaseLender.LenderId,\r\n );\r\n })\r\n .then((response) => {\r\n this.currentLenderPreferredPackagersText = response;\r\n })\r\n .finally(() => {\r\n this.showApplyTsAndCs = true;\r\n });\r\n }\r\n\r\n /**\r\n * Process the Apply button being clicked\r\n * @param currentCaseLender\r\n */\r\n applyClicked(selectedCaseLender: DealLenderDTO) {\r\n this.selectedCaseLender = selectedCaseLender;\r\n\r\n // Show the Terms and Conditions modal\r\n this.showApplyTsAndCs = true;\r\n }\r\n /**\r\n * Process the cancel Application button being clicked\r\n * @param currentCaseLender\r\n */\r\n cancelTerms(selectedCaseLender: DealLenderDTO) {\r\n this.dealLenderService\r\n .getSelectedCaseLender(selectedCaseLender.Id)\r\n .then((response) => {\r\n this.selectedCaseLender = response;\r\n })\r\n .then(() => {\r\n if (this.selectedCaseLender.Status == CaseLenderStateEnum.Applied) {\r\n this.selectedCaseLender.IsBidAccepted = false;\r\n this.dealLenderService\r\n .addUpdate(this.selectedCaseLender)\r\n .then((response) => {\r\n this.selectedCaseLender.IsBidAccepted = response.IsBidAccepted;\r\n this.hasBidAccepted = response.IsBidAccepted;\r\n\r\n return this.dealLenderService.cancelApplication(\r\n this.selectedCaseLender.DealId,\r\n this.selectedCaseLender.Id,\r\n );\r\n })\r\n .then((response) => {\r\n this.selectedCaseLender.Status = response.CaseLenderState;\r\n this.caseLenders = this.caseLenders.map((cl) =>\r\n cl.Id !== this.selectedCaseLender.Id\r\n ? cl\r\n : this.selectedCaseLender,\r\n );\r\n })\r\n .finally(() => {\r\n this.messageContent =\r\n \"Application with this lender has been cancelled.\";\r\n this.showInformationMessage = true;\r\n });\r\n } else {\r\n this.messageContent =\r\n \"There was a problem with cancelling this application. Please refresh and try again.\";\r\n this.showInformationMessage = true;\r\n }\r\n });\r\n\r\n //this.showProceedModal = true;\r\n }\r\n\r\n getStatusText(selectedCaseLender): string {\r\n var statusText = \"\";\r\n\r\n if (this.roleService.IsLender) {\r\n statusText = this.caseLenderService.getStatusTextForLender(\r\n selectedCaseLender.Status,\r\n selectedCaseLender.IsBidAccepted,\r\n );\r\n } else {\r\n switch (selectedCaseLender.Status) {\r\n case CaseLenderStateEnum.Offered: {\r\n if (this.hasBidAccepted) {\r\n statusText = selectedCaseLender.IsBidAccepted\r\n ? \"DIP received and accepted\"\r\n : \"DIP received but applying to another lender\";\r\n } else {\r\n statusText = \"DIP received\";\r\n }\r\n break;\r\n }\r\n case CaseLenderStateEnum.Received: {\r\n statusText = \"Awaiting DIP\";\r\n if (this.hasBidAccepted) {\r\n statusText = \"Awaiting DIP but applying to another lender\";\r\n } else {\r\n statusText = \"Awaiting DIP\";\r\n }\r\n break;\r\n }\r\n case CaseLenderStateEnum.Cancelled: {\r\n if (this.hasBidAccepted) {\r\n statusText = \"Application cancelled but applying to another lender\";\r\n } else {\r\n statusText = \"Application cancelled\";\r\n }\r\n break;\r\n }\r\n case CaseLenderStateEnum.SentToPackager: {\r\n if (this.currentDeal.IsConnectUser) {\r\n statusText = \"Case to Review\";\r\n } else {\r\n statusText = \"Sent to Packager\";\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return statusText;\r\n }\r\n\r\n editApplicationDetails() {\r\n this.$location.path(\"/dealapplicationdetails/\" + this.currentDeal.Id);\r\n }\r\n\r\n deleteButton(dealLender: DealLenderDTO) {\r\n this.showConfirmDeleteButton = true;\r\n this.showInformationMessage = true;\r\n this.messageContent =\r\n \"Are you sure you want to remove \" + dealLender.LenderName + \"?\";\r\n this.dealLender = dealLender;\r\n }\r\n\r\n delete() {\r\n this.dealLenderService\r\n .markasdeleted(this.dealLender.Id)\r\n .then((result) => {\r\n this.caseLenders = this.caseLenders.filter(\r\n (x) => x.Id != this.dealLender.Id,\r\n );\r\n })\r\n .finally(() => {\r\n this.showInformationMessage = false;\r\n delete this.dealLender;\r\n this.showConfirmDeleteButton = false;\r\n });\r\n }\r\n\r\n /**\r\n * Determines whether to show the Shortlist More Lenders button.\r\n * Should be shown if there are less than 3 \"active\" shortlisted lenders i.e. haven't rejected/withdrawn\r\n * and no DIP is accepted\r\n * */\r\n showShortlistMoreLendersButton(): boolean {\r\n var showButton: boolean = false;\r\n if (this.caseLenders) {\r\n var activeShortlistCount = this.caseLenders.filter(\r\n (lender) =>\r\n lender.Status != CaseLenderStateEnum.Withdrawn &&\r\n lender.Status != CaseLenderStateEnum.Rejected,\r\n ).length;\r\n\r\n showButton = activeShortlistCount < 5 ? true : false;\r\n }\r\n\r\n //Hide button if DIP accepted\r\n if (this.hasBidAccepted) {\r\n showButton = false;\r\n }\r\n \r\n if(this.currentDeal != null && this.currentDeal.IsReferredToConnect && !this.currentDeal.IsConnectUser && (this.currentDeal.Status == CaseStatusEnum.SentToPackager || this.currentDeal.Status == CaseStatusEnum.Applied)){\r\n showButton = false;\r\n }\r\n\r\n if(this.currentDeal != null && this.currentDeal.IsReferredToConnect && this.currentDeal.IsConnectUser){\r\n showButton = false;\r\n }\r\n\r\n return showButton;\r\n }\r\n\r\n shortlistMoreLenders() {\r\n if (this.currentDeal.ProductFamily == ProductFamilyEnum.Commercial) {\r\n this.$location.path(\"/commercialshortlistmore/\" + this.currentDeal.Id);\r\n } else if (this.currentDeal.ProductFamily == ProductFamilyEnum.Bridging) {\r\n this.$location.path(\"/bridgingshortlistmore/\" + this.currentDeal.Id);\r\n } else if (\r\n this.currentDeal.ProductFamily == ProductFamilyEnum.Development\r\n ) {\r\n this.$location.path(\"/devfinanceshortlistmore/\" + this.currentDeal.Id);\r\n }\r\n }\r\n\r\n toggleLender(lender: DealLenderDTO) {\r\n this.selectedLenders[lender.Id] = !this.selectedLenders[lender.Id];\r\n }\r\n\r\n stateFilter(lender: DealLenderDTO) {\r\n return !lender.IsDeleted && (lender.Status === 2 || lender.Status === 10);\r\n }\r\n\r\n showAndHideExport() {\r\n this.showExport = !this.showExport;\r\n }\r\n\r\n getSelectedCaseLenders() {\r\n const selectedCaseLenders = this.caseLenders.filter(\r\n (lender) => this.selectedLenders[lender.Id],\r\n );\r\n return selectedCaseLenders;\r\n }\r\n\r\n areLendersSelected() {\r\n for (var lenderId in this.selectedLenders) {\r\n if (this.selectedLenders[lenderId]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n dipRecieved() {\r\n this.showExportButton = this.caseLenders.some(\r\n (lender) => lender.Status === CaseLenderStateEnum.Offered || lender.Status === CaseLenderStateEnum.Applied || lender.Status === CaseLenderStateEnum.SentToPackager,\r\n );\r\n }\r\n\r\n /** Process the Heads of Terms button being clicked */\r\n headsOfTermsClicked(selectedCaseLender: DealLenderDTO, index) {\r\n this.selectedCaseLender = selectedCaseLender;\r\n if (this.currentDeal.ProductFamily == ProductFamilyEnum.Commercial) {\r\n this.$location.path(\r\n \"/commercialheadsofterm/\" +\r\n this.currentDeal.Id +\r\n \"/\" +\r\n this.selectedCaseLender.Id,\r\n );\r\n } else if (this.currentDeal.ProductType == ProductTypeEnum.Development) {\r\n this.$location.path(\r\n \"/devfinanceheadsofterm/\" +\r\n this.currentDeal.Id +\r\n \"/\" +\r\n this.selectedCaseLender.Id,\r\n );\r\n } else {\r\n this.$location.path(\r\n \"/bridgingheadsofterm/\" +\r\n this.currentDeal.Id +\r\n \"/\" +\r\n this.selectedCaseLender.Id,\r\n );\r\n }\r\n }\r\n\r\n trustedHtml(plainText) {\r\n return this.$sce.trustAsHtml(plainText);\r\n }\r\n\r\n getBrokerAdminEmail(org: OrganisationDTO) {\r\n if (this.emailCache && this.emailCache[org.Id]) {\r\n return;\r\n }\r\n\r\n if (!org.PreferredPackagerEmail) {\r\n this.userService.getOrganisationAdminEmail(org.Id).then((response) => {\r\n this.emailCache[org.Id] = response;\r\n });\r\n } else {\r\n this.emailCache[org.Id] = org.PreferredPackagerEmail;\r\n }\r\n }\r\n\r\n getLenderPortalLinks() {\r\n const lenderIds = this.caseLenders\r\n .filter((dl) => dl.HasAppliedInLenderPortal)\r\n .map((dl) => dl.LenderId);\r\n\r\n this.lenderService\r\n .getLenderPortalLinks(lenderIds)\r\n .then((links) => {\r\n this.portalLinks = links;\r\n })\r\n .catch((error) => {\r\n this.portalLinks = null;\r\n });\r\n }\r\n\r\n openPortalLink(portalLink: string) {\r\n if (!/^https?:\\/\\//i.test(portalLink)) {\r\n portalLink = \"http://\" + portalLink;\r\n }\r\n window.open(portalLink, \"_blank\");\r\n }\r\n\r\n submitToDealocker() {\r\n this.isSubmittingToDeallocker = true;\r\n //TODO call deallocker API end point\r\n this.dealLenderService.submitToDeallocker(this.dealLender.Id).then(response => {\r\n return response;\r\n }).then(response => {\r\n if (response) {\r\n return this.dealLenderService.getSelectedCaseLender(this.dealLender.Id).then(caseLender => {\r\n if (caseLender && caseLender.Id) {\r\n this.caseLenders = [...this.caseLenders.map(lender =>\r\n lender.Id === caseLender.Id ? caseLender : lender\r\n )];\r\n }\r\n this.showInformationMessage = true;\r\n this.messageContent = 'Your case information has been sent to Deallocker. They\\'ll confirm receipt via email.';\r\n return caseLender;\r\n });\r\n }\r\n }).catch(() => {\r\n // TODO do something if it fails?\r\n }).finally(() => {\r\n this.showDeallockerModal = false;\r\n this.isSubmittingToDeallocker = false;\r\n this.isDeallockerTermsAccepted = false;\r\n this.dealLender = null;\r\n });\r\n\r\n }\r\n\r\n\r\n sendDealToPackagerForReview(selectedCaseLender: DealLenderDTO) {\r\n this.selectedCaseLender = selectedCaseLender;\r\n\r\n this.dealLenderService\r\n .sendDealToPackagerForReview(this.selectedCaseLender.DealId,this.selectedCaseLender.Id)\r\n .then((response) => {\r\n this.selectedCaseLender.Status = response.CaseLenderState;\r\n this.currentDeal.Status = response.DealStatus;\r\n this.currentDeal.IsReferredToConnect = response.IsReferredToConnect;\r\n this.caseLenders = this.caseLenders.map(cl => cl.Id !== this.selectedCaseLender.Id ? cl : this.selectedCaseLender);\r\n }).catch(() => {\r\n this.messageContent = 'Error while sending case information to Connect Packager, please try later.';\r\n this.showInformationMessage = true;\r\n })\r\n .finally(() => {\r\n this.messageContent = 'Your case information has been sent to Connect Packager';\r\n this.showInformationMessage = true;\r\n });\r\n }\r\n\r\n showApplyButton(lender){\r\n if((!(lender.IsConnectReferralOnly && this.isConnectMember) && !(this.isConnectMember && this.currentDeal.IsReferredToConnect && (this.currentDeal.Status == CaseStatusEnum.Applied || this.currentDeal.Status == CaseStatusEnum.SentToPackager)) ) && (this.hasBidAccepted == false || this.hasBidAccepted == null ) && (lender.Status == CaseLenderStateEnum.Offered || lender.Status == CaseLenderStateEnum.Cancelled || lender.Status == CaseLenderStateEnum.SentToPackager)){\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n showCancelApplicationButton(lender){\r\n if((!(lender.IsConnectReferralOnly && this.isConnectMember) && !(this.isConnectMember && this.currentDeal.IsReferredToConnect && (this.currentDeal.Status == CaseStatusEnum.Applied || this.currentDeal.Status == CaseStatusEnum.SentToPackager))) && lender.IsBidAccepted == true && lender.Status == CaseLenderStateEnum.Applied){\r\n return true;\r\n }\r\n\r\n return false;\r\n\r\n }\r\n\r\n showSendToPackagerButton(lender){\r\n if((lender.IsConnectReferralOnly && this.isConnectMember) && (this.hasBidAccepted == false || this.hasBidAccepted == null ) && (lender.Status == CaseLenderStateEnum.Offered || lender.Status == CaseLenderStateEnum.Cancelled)){\r\n return true;\r\n }\r\n\r\n return false;\r\n\r\n }\r\n}\r\n","export const enum SecurityQuestionEnum {\r\n None = 0,\r\n PhoneNumber = 1,\r\n PostCode = 2,\r\n DateOfBirth = 4,\r\n}\r\n","import { SecurityQuestionEnum } from \"@js/models/enum/SecurityQuestionEnum.cs.d\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\n\r\nexport class DealSecurityCheckController {\r\n dateOfBirth: Date;\r\n email: string;\r\n phone: string;\r\n postcode: string;\r\n answers: number;\r\n error: boolean = false;\r\n\r\n securityValidation: ng.IFormController;\r\n maxDateOfBirth: Date = new Date();\r\n minDateOfBirth: Date = new Date(\"Jan 01 1900\");\r\n uniqueId: string;\r\n showDob: boolean = false;\r\n showPhone: boolean = false;\r\n showPostCode: boolean = false;\r\n\r\n orgUniqueRef: string;\r\n brokerUserId: string;\r\n\r\n static $inject = [\"$routeParams\", \"$location\", \"DealClientService\"];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private dealClientService: DealClientService,\r\n ) {\r\n this.uniqueId = this.$routeParams.uniqueId;\r\n if (this.$routeParams.orgUniqueRef && this.$routeParams.brokerUserId) {\r\n this.orgUniqueRef = this.$routeParams.orgUniqueRef;\r\n this.brokerUserId = this.$routeParams.brokerUserId;\r\n }\r\n\r\n if (this.uniqueId) {\r\n this.dealClientService\r\n .getShareholderEmailAndSecurityQuestions(this.uniqueId)\r\n .then((response) => {\r\n this.email = response?.Email;\r\n var securityQuestions = response?.SecurityQuestions;\r\n\r\n this.showDob =\r\n SecurityQuestionEnum.DateOfBirth ===\r\n (securityQuestions & SecurityQuestionEnum.DateOfBirth);\r\n this.showPostCode =\r\n SecurityQuestionEnum.PostCode ===\r\n (securityQuestions & SecurityQuestionEnum.PostCode);\r\n this.showPhone =\r\n SecurityQuestionEnum.PhoneNumber ===\r\n (securityQuestions & SecurityQuestionEnum.PhoneNumber);\r\n });\r\n }\r\n }\r\n\r\n isValidAnswer() {\r\n this.answers = 0;\r\n\r\n if (this.dateOfBirth) {\r\n this.answers++;\r\n }\r\n\r\n if (this.phone) {\r\n this.answers++;\r\n }\r\n\r\n if (this.postcode) {\r\n this.answers++;\r\n }\r\n\r\n if (\r\n this.answers >= 2 &&\r\n this.securityValidation.$valid &&\r\n !this.securityValidation.$pristine\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n send() {\r\n if (this.uniqueId) {\r\n this.dealClientService\r\n .securityCheck(\r\n this.uniqueId,\r\n this.phone ? this.phone : null,\r\n this.postcode ? this.postcode : null,\r\n this.dateOfBirth ? this.dateOfBirth : null,\r\n this.orgUniqueRef,\r\n this.brokerUserId,\r\n )\r\n .then((i) => {\r\n var targeturl = this.$location.search().targeturl;\r\n\r\n if (targeturl) {\r\n this.$location.search({});\r\n this.$location.path(targeturl);\r\n } else {\r\n this.$location.path(i);\r\n }\r\n })\r\n .catch(() => {\r\n this.error = true;\r\n });\r\n }\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { DeveloperExitFinanceInputSetDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceInputSetDTO.cs.d\";\r\nimport { DeveloperExitFinanceResultDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceResultDTO.cs.d\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\n\r\nexport class DeveloperExitFinanceComparisonController {\r\n isLoading: boolean;\r\n\r\n exitLoanCriteria: DeveloperExitFinanceInputSetDTO;\r\n\r\n selectedCandidates: DeveloperExitFinanceResultDTO[];\r\n\r\n selectedUser: ApplicationUserDTO;\r\n\r\n enquiryOpen: boolean;\r\n enquiryEmail: string;\r\n enquiryBody: string;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"DevelopmentInputService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $DevelopmentInputService: DevelopmentInputService,\r\n ) {\r\n this.selectedUser = (this.$rootScope as any).selectedUser;\r\n\r\n this.selectedCandidates = (this.$rootScope as any).comparisonList;\r\n this.exitLoanCriteria = (this.$rootScope as any).exitLoanCriteria;\r\n\r\n if (!this.selectedCandidates || !this.exitLoanCriteria) {\r\n this.$location.path(\"/\");\r\n }\r\n }\r\n\r\n sendEnquiry(): void {\r\n this.enquiryOpen = false;\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n}\r\n","import { DeveloperExitFinanceDevelopmentInputDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceDevelopmentInputDTO.cs.d\";\r\nimport { DeveloperExitFinanceDevelopmentInputService } from \"@js/services/DevExitFinance/DeveloperExitFinanceDevelopmentInputService\";\r\n\r\nexport class DeveloperExitFinanceDevelopmentInputController {\r\n selectedSection: string;\r\n\r\n objects: DeveloperExitFinanceDevelopmentInputDTO[];\r\n selectedObject: DeveloperExitFinanceDevelopmentInputDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n developerexitfinancedevelopmentinputForm: ng.IFormController;\r\n //subdeveloperexitfinancedevelopmentinputForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"DeveloperExitFinanceDevelopmentInputService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $developerexitfinancedevelopmentinputservice: DeveloperExitFinanceDevelopmentInputService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$developerexitfinancedevelopmentinputservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: DeveloperExitFinanceDevelopmentInputDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as DeveloperExitFinanceDevelopmentInputDTO;\r\n }\r\n\r\n save() {\r\n this.$developerexitfinancedevelopmentinputservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: DeveloperExitFinanceDevelopmentInputDTO[] =\r\n this.objects.filter((value, index) => {\r\n return value.Id == response;\r\n });\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.developerexitfinancedevelopmentinputForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$developerexitfinancedevelopmentinputservice\r\n .delete(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.developerexitfinancedevelopmentinputForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n}\r\n","import { DeveloperExitFinanceDevelopmentInputDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceDevelopmentInputDTO.cs.d\";\r\nimport { DeveloperExitFinanceDevScheduleInputDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceDevScheduleInputDTO.cs.d\";\r\nimport { DeveloperExitFinanceInputSetDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceInputSetDTO.cs.d\";\r\nimport { DeveloperExitFinanceLoanInputDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceLoanInputDTO.cs.d\";\r\nimport { DeveloperExitFinanceDevelopmentInputService } from \"@js/services/DevExitFinance/DeveloperExitFinanceDevelopmentInputService\";\r\nimport { DeveloperExitFinanceDevScheduleInputService } from \"@js/services/DevExitFinance/DeveloperExitFinanceDevScheduleInputService\";\r\nimport { DeveloperExitFinanceLoanInputService } from \"@js/services/DevExitFinance/DeveloperExitFinanceLoanInputService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\n\r\nexport class DeveloperExitFinanceDevScheduleInputController {\r\n selectedSection: string;\r\n\r\n objects: DeveloperExitFinanceDevScheduleInputDTO[];\r\n selectedObject: DeveloperExitFinanceDevScheduleInputDTO;\r\n\r\n devInputs: DeveloperExitFinanceDevelopmentInputDTO;\r\n loanInputs: DeveloperExitFinanceLoanInputDTO;\r\n exitLoanCriteria: DeveloperExitFinanceInputSetDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n totalUnitRentalPrice: number;\r\n totalUnitPrice: number;\r\n\r\n developerexitfinancedevscheduleinputForm: ng.IFormController;\r\n\r\n locationOptions = [];\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"DeveloperExitFinanceDevScheduleInputService\",\r\n \"DeveloperExitFinanceDevelopmentInputService\",\r\n \"DeveloperExitFinanceLoanInputService\",\r\n \"SelectListService\",\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $developerexitfinancedevscheduleinputservice: DeveloperExitFinanceDevScheduleInputService,\r\n private $developerexitfinancedevelopmentinputservice: DeveloperExitFinanceDevelopmentInputService,\r\n private $developerexitfinanceloaninputservice: DeveloperExitFinanceLoanInputService,\r\n private selectListService: SelectListService,\r\n ) {\r\n this.updateObjects();\r\n\r\n this.locationOptions = this.selectListService.GetLocations();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n if ((this.$rootScope as any).exitLoanCriteria) {\r\n this.exitLoanCriteria = (this.$rootScope as any).exitLoanCriteria;\r\n this.objects =\r\n this.exitLoanCriteria.DevelopmentInput.DevelopmentSchedules;\r\n } else {\r\n this.exitLoanCriteria = {} as DeveloperExitFinanceInputSetDTO;\r\n this.objects = [];\r\n this.addUnit();\r\n }\r\n //this.$developerexitfinancedevscheduleinputservice.fetchAll().then((response) => {\r\n // this.objects = response;\r\n // this.preSelectedItem();\r\n //}).finally(() => {\r\n // this.fetchingObjects = false;\r\n //});\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n calcTotalUnitPrice() {\r\n var res: number = 0;\r\n this.objects.forEach((item) => {\r\n if (item.SalesPrice) {\r\n res += Number(item.SalesPrice);\r\n }\r\n });\r\n this.totalUnitPrice = res;\r\n }\r\n calcTotalUnitRentalPrice() {\r\n var res: number = 0;\r\n this.objects.forEach((item) => {\r\n if (item.MonthlyRent) {\r\n res += Number(item.MonthlyRent);\r\n }\r\n });\r\n this.totalUnitRentalPrice = res;\r\n }\r\n\r\n selectObject(object: DeveloperExitFinanceDevScheduleInputDTO) {\r\n this.selectedObject = object;\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as DeveloperExitFinanceDevScheduleInputDTO;\r\n }\r\n\r\n addUnit() {\r\n this.selectedObject = {} as DeveloperExitFinanceDevScheduleInputDTO;\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n save() {\r\n this.$developerexitfinancedevscheduleinputservice\r\n .addUpdatelist(this.objects)\r\n .then((response) => {\r\n //this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n this.developerexitfinancedevscheduleinputForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n deleteUnit(item: DeveloperExitFinanceDevScheduleInputDTO) {\r\n //this.$developerexitfinancedevscheduleinputservice.delete(item.Id).then((response) => {\r\n // if (response) {\r\n this.objects.splice(this.objects.indexOf(item), 1);\r\n this.developerexitfinancedevscheduleinputForm.$setPristine();\r\n // }\r\n //});\r\n }\r\n\r\n delete() {\r\n this.$developerexitfinancedevscheduleinputservice\r\n .delete(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.developerexitfinancedevscheduleinputForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n fetchResults() {\r\n this.exitLoanCriteria.DevelopmentInput.DevelopmentSchedules = this.objects;\r\n this.exitLoanCriteria.DevelopmentInput.HowManyUnits =\r\n this.exitLoanCriteria.DevelopmentInput.DevelopmentSchedules.length;\r\n (this.$rootScope as any).exitLoanCriteria = this.exitLoanCriteria;\r\n this.$location.path(\"/exitloanresults\");\r\n }\r\n}\r\n","import { DeveloperExitFinanceLoanInputDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceLoanInputDTO.cs.d\";\r\nimport { DeveloperExitFinanceLoanInputService } from \"@js/services/DevExitFinance/DeveloperExitFinanceLoanInputService\";\r\n\r\nexport class DeveloperExitFinanceLoanInputController {\r\n selectedSection: string;\r\n\r\n objects: DeveloperExitFinanceLoanInputDTO[];\r\n selectedObject: DeveloperExitFinanceLoanInputDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n developerexitfinanceloaninputForm: ng.IFormController;\r\n //subdeveloperexitfinanceloaninputForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"DeveloperExitFinanceLoanInputService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $developerexitfinanceloaninputservice: DeveloperExitFinanceLoanInputService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$developerexitfinanceloaninputservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: DeveloperExitFinanceLoanInputDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as DeveloperExitFinanceLoanInputDTO;\r\n }\r\n\r\n save() {\r\n this.$developerexitfinanceloaninputservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: DeveloperExitFinanceLoanInputDTO[] = this.objects.filter(\r\n (value, index) => {\r\n return value.Id == response;\r\n },\r\n );\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.developerexitfinanceloaninputForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$developerexitfinanceloaninputservice\r\n .delete(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.developerexitfinanceloaninputForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n}\r\n","import { DeveloperExitFinanceInputSetDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceInputSetDTO.cs.d\";\r\nimport { DeveloperExitFinanceResultDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceResultDTO.cs.d\";\r\nimport { DeveloperExitFinanceResultSetDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceResultSetDTO.cs.d\";\r\nimport { LenderResultDTO } from \"@js/DTO/DevelopmentFinance/LenderResultDTO.cs.d\";\r\nimport { DeveloperExitFinanceResultService } from \"@js/services/DevExitFinance/DeveloperExitFinanceResultService\";\r\n\r\nexport class DeveloperExitFinanceResultController {\r\n selectedSection: string;\r\n\r\n //objects: DeveloperExitFinanceResultDTO[];\r\n selectedObject: DeveloperExitFinanceResultDTO;\r\n\r\n exitLoanCriteria: DeveloperExitFinanceInputSetDTO;\r\n\r\n results: DeveloperExitFinanceResultSetDTO;\r\n\r\n matchingResults: DeveloperExitFinanceResultDTO[];\r\n largestResults: DeveloperExitFinanceResultDTO[];\r\n\r\n comparisonList: DeveloperExitFinanceResultDTO[] = [];\r\n\r\n selectedResult: DeveloperExitFinanceResultDTO;\r\n\r\n warningOff: boolean = false;\r\n\r\n enquiryOpen: boolean;\r\n enquiryEmail: string;\r\n enquiryBody: string;\r\n enquiryTelephone: string;\r\n sentmessage: boolean = false;\r\n sendingmessage: boolean = false;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n developerexitfinanceresultForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"DeveloperExitFinanceResultService\",\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n $routeParams: ng.route.IRouteParamsService,\r\n private $developerexitfinanceresultservice: DeveloperExitFinanceResultService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n this.exitLoanCriteria = (this.$rootScope as any).exitLoanCriteria;\r\n this.updateResults();\r\n }\r\n\r\n updateResults() {\r\n this.$developerexitfinanceresultservice\r\n .fetchMatchingResults(\r\n this.exitLoanCriteria,\r\n true,\r\n true,\r\n 20,\r\n false,\r\n \"\",\r\n \"\",\r\n \"\",\r\n \"\",\r\n )\r\n .then((results) => {\r\n this.results = results;\r\n this.matchingResults = results.MatchingResults;\r\n this.largestResults = results.LargestLoanResults;\r\n })\r\n .catch((error) => {\r\n this.matchingResults = [];\r\n })\r\n .finally(() => {});\r\n }\r\n\r\n sendEnquiry(): void {\r\n this.sendingmessage = true;\r\n this.sentmessage = false;\r\n\r\n this.$developerexitfinanceresultservice\r\n .fetchMatchingResults(\r\n this.exitLoanCriteria,\r\n true,\r\n true,\r\n 20,\r\n true,\r\n this.enquiryBody,\r\n this.enquiryEmail,\r\n this.enquiryTelephone,\r\n this.GetSelectedLabel(),\r\n )\r\n .then((response2) => {\r\n this.sendingmessage = false;\r\n this.sentmessage = true;\r\n });\r\n }\r\n\r\n private GetSelectedLabel() {\r\n var selectedlabel = \"\";\r\n if (this.selectedResult && this.selectedResult.LoanLabel) {\r\n selectedlabel = this.selectedResult.LoanLabel;\r\n }\r\n return selectedlabel;\r\n }\r\n\r\n comparisonContains(item: DeveloperExitFinanceResultDTO) {\r\n let found = !!this.comparisonList.find((result, index) => {\r\n return result === item;\r\n });\r\n\r\n if (found) {\r\n }\r\n\r\n return found;\r\n }\r\n\r\n toggleLenderComparisonSelection(item: DeveloperExitFinanceResultDTO) {\r\n let match: DeveloperExitFinanceResultDTO = this.comparisonList.find(\r\n (result, index) => {\r\n return result === item;\r\n },\r\n );\r\n\r\n if (!match && this.comparisonList.length < 3) {\r\n this.comparisonList.push(item);\r\n } else {\r\n this.comparisonList.splice(this.comparisonList.indexOf(match), 1);\r\n }\r\n }\r\n\r\n viewOffer(offer: LenderResultDTO) {\r\n this.selectedResult = offer;\r\n }\r\n\r\n goCompare() {\r\n this.warningOff = true;\r\n (this.$rootScope as any).comparisonList = this.comparisonList;\r\n\r\n // temporarily put all results into saved results so the comparison controller can use them.\r\n\r\n let allResults: DeveloperExitFinanceResultDTO[] = [];\r\n this.matchingResults.forEach((result) => {\r\n allResults.push(result);\r\n });\r\n this.largestResults.forEach((result) => {\r\n allResults.push(result);\r\n });\r\n\r\n (this.$rootScope as any).tempSavedResults = allResults;\r\n\r\n this.$location.path(\"exitloancompare\");\r\n }\r\n\r\n viewSingleLoan(item: LenderResultDTO) {\r\n this.warningOff = true;\r\n this.comparisonList = [];\r\n this.comparisonList.push(item);\r\n this.goCompare();\r\n }\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n applyForLoan(offer: DeveloperExitFinanceResultDTO, index) {\r\n this.selectedResult = offer;\r\n this.enquiryBody = \"Please call me about loan: \" + offer.LoanLabel;\r\n this.enquiryOpen = true;\r\n }\r\n}\r\n","import { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { LenderResultService } from \"@js/services/LenderResultService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { StreetAddressService } from \"@js/services/StreetAddressService\";\r\n\r\nexport class DevelopmentAppraisalScreenController {\r\n isLoggedInUser: boolean = false;\r\n\r\n fileUpload: FileAttachmentDTO[];\r\n uploadingFiles: FileUploadProgressDTO[];\r\n case: CaseDTO;\r\n caseTitle: string;\r\n openModal: boolean = false;\r\n thisModuleSection: ModuleEnum = ModuleEnum.DevelopmentAppraisal;\r\n total: number = 0;\r\n\r\n dataLoading: boolean = false;\r\n\r\n loanCriteria: DevelopmentInputDTO;\r\n step: number = 1;\r\n dateOfOrigPurchMonth: number;\r\n dateOfOrigPurchYear: number;\r\n DevelopmentInputForm: ng.IFormController;\r\n caseid: number;\r\n searchid: number;\r\n totalPurchaseCostsOwning: number;\r\n additionalBuild: number;\r\n totalBuild: number;\r\n totalSales: number;\r\n totalPurchaseCostsNotOwning: number;\r\n totalNDV: number;\r\n contingencyCost: number;\r\n\r\n searchterm: string;\r\n PostCodeOptions: PostalAddress[] = [];\r\n searchingForAddress: boolean = false;\r\n searchresults: string;\r\n\r\n criteriaPropertyForm: ng.IFormController;\r\n criteriaBorrowingForm: ng.IFormController;\r\n criteriaCostsForm: ng.IFormController;\r\n criteriaSalesForm: ng.IFormController;\r\n\r\n guidanceCheckbox: boolean = true;\r\n\r\n pageLoading: boolean = true;\r\n\r\n contingencyTotal: number;\r\n\r\n seeFiles: boolean = false;\r\n\r\n //array describing form sections\r\n formSectionNames = [\r\n {\r\n label: \"Property\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Build Costs\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Borrowing\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Sales\",\r\n visible: true,\r\n },\r\n ];\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"DevelopmentInputService\",\r\n \"$location\",\r\n \"LenderResultService\",\r\n \"StreetAddressService\",\r\n \"$cookies\",\r\n \"CaseService\",\r\n \"FileAttachmentService\",\r\n \"$window\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n protected $q: ng.IQService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private $location: ng.ILocationService,\r\n private $lenderresultservice: LenderResultService,\r\n private $streetAddressService: StreetAddressService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $caseService: CaseService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private roleService: RoleService,\r\n ) {\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n }\r\n\r\n //Init\r\n if (this.$routeParams.CaseId && this.$routeParams.SearchId) {\r\n this.caseid = this.$routeParams.CaseId;\r\n this.searchid = this.$routeParams.SearchId;\r\n } else {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n\r\n this.$caseService.fetch(this.$routeParams.CaseId).then((response) => {\r\n if (response == null) {\r\n if (this.isLoggedInUser) {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n } else {\r\n this.fileUpload = response.Attachments;\r\n this.case = response;\r\n this.$caseService.updateCaseState(this.case.Id, this.case.CaseStatus);\r\n this.caseTitle = response.DevelopmentInput.SearchName;\r\n }\r\n });\r\n\r\n // Look up the existing search - must exist prior in order to have a case.\r\n\r\n this.$DevelopmentInputservice\r\n .fetch(this.searchid)\r\n .then((response) => {\r\n if (response == null) {\r\n if (this.isLoggedInUser) {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n } else {\r\n this.loanCriteria = response;\r\n if (this.loanCriteria) {\r\n this.calcContingencyCost();\r\n if (this.loanCriteria.CI_Dev_DateOfOrigPurch) {\r\n this.dateOfOrigPurchMonth =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getMonth() + 1;\r\n this.dateOfOrigPurchYear =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getFullYear() % 100;\r\n }\r\n if (!this.loanCriteria.DI_PurchaseAgentFees) {\r\n this.loanCriteria.DI_PurchaseAgentFees = 0;\r\n }\r\n if (!this.loanCriteria.DI_PurchaseLegalFees) {\r\n this.loanCriteria.DI_PurchaseLegalFees = 0;\r\n }\r\n if (!this.loanCriteria.DI_PurchaseOtherFees) {\r\n this.loanCriteria.DI_PurchaseOtherFees = 0;\r\n }\r\n this.recalcContingencyTotal();\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n this.$location.path(\"/dashboard\");\r\n })\r\n .finally(() => {\r\n this.pageLoading = false;\r\n });\r\n\r\n if (this.$routeParams.StepNumber) {\r\n this.step =\r\n this.$routeParams.StepNumber > 4 || this.$routeParams.StepNumber < 1\r\n ? 1\r\n : this.$routeParams.StepNumber;\r\n } else {\r\n if (this.isLoggedInUser) {\r\n this.go(\r\n \"/criteriaappraisal/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.searchid +\r\n \"/\" +\r\n this.step,\r\n );\r\n }\r\n }\r\n\r\n this.updateGuidanceState();\r\n\r\n $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n this.updateGuidanceState();\r\n });\r\n }\r\n\r\n updateVatOnLandPurchase(value: number): void {\r\n if (value === 1) {\r\n //if yes, show vat amount question prepopulated with 20% of purchase price\r\n this.loanCriteria.LandPurchaseVatAmount =\r\n this.loanCriteria.CI_Dev_OrigPP * 0.2;\r\n }\r\n this.loanCriteria.PayingVATOnLandPurchase = value;\r\n this.CalcTotalPurchaseCostsOwning();\r\n this.CalcTotalPurchaseCostsOwning();\r\n }\r\n\r\n indexPopup(methodName: string) {\r\n this.$rootScope.$broadcast(methodName);\r\n }\r\n\r\n updateGuidanceState() {\r\n this.guidanceCheckbox =\r\n this.$cookies.get(\"guidance\") === \"on\" ||\r\n this.$cookies.get(\"guidance\") === undefined;\r\n }\r\n\r\n getGuidanceSwitchState() {\r\n if (!this.$cookies.get(\"guidance\")) {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"on\") {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"off\") {\r\n this.guidanceCheckbox = false;\r\n } else {\r\n this.guidanceCheckbox = true;\r\n }\r\n return this.guidanceCheckbox;\r\n }\r\n\r\n recordGuidanceCookie() {\r\n var guidanceSwitchState: string;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n if (this.guidanceCheckbox == true) {\r\n guidanceSwitchState = \"on\";\r\n } else {\r\n guidanceSwitchState = \"off\";\r\n }\r\n this.$cookies.put(\"guidance\", guidanceSwitchState, { expires: expiryDate });\r\n this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n }\r\n\r\n setAllFormsPristine(): void {\r\n if (this.criteriaPropertyForm) {\r\n this.criteriaPropertyForm.$setPristine();\r\n }\r\n if (this.criteriaBorrowingForm) {\r\n this.criteriaBorrowingForm.$setPristine();\r\n }\r\n if (this.criteriaCostsForm) {\r\n this.criteriaCostsForm.$setPristine();\r\n }\r\n if (this.criteriaSalesForm) {\r\n this.criteriaSalesForm.$setPristine();\r\n }\r\n }\r\n\r\n back(): void {\r\n this.save().then(() => {\r\n if (this.step > 0) {\r\n this.step--;\r\n }\r\n\r\n this.go(\r\n \"/criteriaappraisal/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.searchid +\r\n \"/\" +\r\n this.step,\r\n );\r\n });\r\n }\r\n\r\n next(): void {\r\n this.save().then(() => {\r\n this.goToNextStep();\r\n });\r\n }\r\n\r\n /** Go to the next step */\r\n goToNextStep() {\r\n if (this.step == 6) {\r\n // Store the search on rootScope.\r\n //(this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n //this.$location.path(\"/results\");\r\n }\r\n this.step++;\r\n this.go(\r\n \"/criteriaappraisal/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.searchid +\r\n \"/\" +\r\n this.step,\r\n );\r\n }\r\n\r\n goToCaseDashboard(save: boolean = false): void {\r\n if (!this.roleService.IsLender) {\r\n this.save();\r\n (this.$rootScope as any).formSaved = true;\r\n }\r\n\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n }\r\n go(path): void {\r\n if (!this.roleService.IsLender) {\r\n this.save().then((response) => {\r\n this.$location.path(path);\r\n });\r\n } else {\r\n this.$location.path(path);\r\n }\r\n }\r\n\r\n setDate(dateToUpdate: Date, month: number, year: number) {\r\n // Two digit years!\r\n var fullYear: number;\r\n var today = new Date();\r\n if (today.getFullYear() < 2000 + year) {\r\n // If it's after this year, we probably mean 19xx.\r\n fullYear = 1900 + year;\r\n } else {\r\n // Otherwise it's probably in the 2000s.\r\n fullYear = 2000 + year;\r\n }\r\n dateToUpdate.setUTCFullYear(fullYear);\r\n // Note: Months are 0 based.\r\n dateToUpdate.setUTCMonth(month - 1);\r\n }\r\n\r\n calcContingencyCost(): number {\r\n if (this.pageLoading === false) {\r\n var res: number = 0;\r\n if (this.contingencyTotal == 0) {\r\n if (\r\n this.loanCriteria.CI_Dev_Contingency &&\r\n this.loanCriteria.CI_Dev_BuildCosts\r\n ) {\r\n res =\r\n this.loanCriteria.CI_Dev_Contingency *\r\n this.loanCriteria.CI_Dev_BuildCosts;\r\n this.contingencyTotal = res;\r\n return res;\r\n }\r\n }\r\n\r\n return this.contingencyTotal;\r\n }\r\n }\r\n\r\n recalcContingencyTotal(): void {\r\n let res: number = 0;\r\n //Case 1 - recalc Build costs\r\n if (\r\n this.loanCriteria.CI_Dev_Contingency &&\r\n this.loanCriteria.CI_Dev_BuildCosts\r\n ) {\r\n res =\r\n this.loanCriteria.CI_Dev_Contingency *\r\n this.loanCriteria.CI_Dev_BuildCosts;\r\n this.contingencyTotal = res;\r\n }\r\n }\r\n\r\n CalcTotalPurchaseCostsNotOwning(): number {\r\n if (this.pageLoading === false) {\r\n var res: number = 0;\r\n if (this.loanCriteria.CI_Dev_OrigPP) {\r\n res += Number(this.loanCriteria.CI_Dev_OrigPP);\r\n }\r\n if (this.loanCriteria.CI_Dev_SDLT) {\r\n res += Number(this.loanCriteria.CI_Dev_SDLT);\r\n }\r\n //if (this.loanCriteria.CI_Land_Total_other_Costs) {\r\n // res += Number(this.loanCriteria.CI_Land_Total_other_Costs)\r\n //}\r\n if (this.loanCriteria.DI_PurchaseAgentFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseAgentFees);\r\n }\r\n if (this.loanCriteria.DI_PurchaseLegalFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseLegalFees);\r\n }\r\n if (this.loanCriteria.DI_PurchaseOtherFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseOtherFees);\r\n }\r\n if (this.loanCriteria.PayingVATOnLandPurchase === 1) {\r\n res += Number(this.loanCriteria.LandPurchaseVatAmount);\r\n }\r\n //this.loanCriteria.Dev_TotLndCostAdj = res;\r\n this.totalPurchaseCostsNotOwning = res;\r\n return res;\r\n }\r\n }\r\n\r\n CalcTotalPurchaseCostsOwning(): number {\r\n if (this.pageLoading === false) {\r\n var res: number = 0;\r\n if (this.loanCriteria.CI_Dev_OrigPP) {\r\n res += Number(this.loanCriteria.CI_Dev_OrigPP);\r\n }\r\n if (this.loanCriteria.CI_Dev_SDLT) {\r\n res += Number(this.loanCriteria.CI_Dev_SDLT);\r\n }\r\n if (this.loanCriteria.DI_PurchaseAgentFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseAgentFees);\r\n }\r\n if (this.loanCriteria.DI_PurchaseLegalFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseLegalFees);\r\n }\r\n if (this.loanCriteria.DI_PurchaseOtherFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseOtherFees);\r\n }\r\n if (this.loanCriteria.PayingVATOnLandPurchase === 1) {\r\n res += Number(this.loanCriteria.LandPurchaseVatAmount);\r\n }\r\n //this.loanCriteria.Dev_TotLndCostAdj = res;\r\n this.totalPurchaseCostsOwning = res;\r\n return res;\r\n }\r\n }\r\n CalcTotalBuild(): number {\r\n if (this.pageLoading === false) {\r\n var res: number = this.CalcAdditionalBuild();\r\n if (this.loanCriteria.CI_Dev_BuildCosts) {\r\n res += Number(this.loanCriteria.CI_Dev_BuildCosts);\r\n }\r\n if (this.contingencyTotal) {\r\n res += Number(this.contingencyTotal);\r\n }\r\n //this.loanCriteria.Dev_TotBuildCostsAdj = res;\r\n //this.loanCriteria.CI_Dev_BuildCosts = res;\r\n this.totalBuild = res;\r\n return res;\r\n }\r\n }\r\n CalcTotalSales(): number {\r\n if (this.pageLoading === false) {\r\n var res: number = 0;\r\n if (this.loanCriteria.DI_Sales_Dressing) {\r\n res += Number(this.loanCriteria.DI_Sales_Dressing);\r\n }\r\n if (this.loanCriteria.DC_SalesAgentFees) {\r\n res += Number(this.loanCriteria.DC_SalesAgentFees);\r\n }\r\n if (this.loanCriteria.DC_SalesLegalFeesPercent) {\r\n res += Number(this.loanCriteria.DC_SalesLegalFeesPercent);\r\n }\r\n this.totalSales = res;\r\n return res;\r\n }\r\n }\r\n\r\n CalcNDV(): number {\r\n if (this.pageLoading === false) {\r\n var gdv: number = 0;\r\n var sales: number = 0;\r\n if (\r\n this.loanCriteria.CI_UseGDVCalculated === false &&\r\n this.loanCriteria.CI_GDV\r\n ) {\r\n gdv = Number(this.loanCriteria.CI_GDV);\r\n }\r\n if (\r\n this.loanCriteria.CI_UseGDVCalculated === true &&\r\n this.loanCriteria.CI_GDVCalculated\r\n ) {\r\n gdv = Number(this.loanCriteria.CI_GDVCalculated);\r\n }\r\n if (this.totalSales) {\r\n sales = Number(this.totalSales);\r\n }\r\n var ndv: number = Number(gdv - sales);\r\n if (ndv <= 0) {\r\n ndv = Number(0);\r\n }\r\n this.totalNDV = ndv;\r\n return ndv;\r\n }\r\n }\r\n\r\n CalcAdditionalBuild(): number {\r\n if (this.pageLoading === false) {\r\n var res: number = 0;\r\n if (this.loanCriteria.DI_BreakDownBuildCosts) {\r\n if (this.loanCriteria.CI_Dev_ProfPlanning) {\r\n res += Number(this.loanCriteria.CI_Dev_ProfPlanning);\r\n }\r\n if (this.loanCriteria.CI_Dev_ProfQS) {\r\n res += Number(this.loanCriteria.CI_Dev_ProfQS);\r\n }\r\n if (this.loanCriteria.DI_BuildProjectManag) {\r\n res += Number(this.loanCriteria.DI_BuildProjectManag);\r\n }\r\n if (this.loanCriteria.CI_Dev_S106CIL) {\r\n res += Number(this.loanCriteria.CI_Dev_S106CIL);\r\n }\r\n if (this.loanCriteria.DI_BuildMechEng) {\r\n res += Number(this.loanCriteria.DI_BuildMechEng);\r\n }\r\n if (this.loanCriteria.DI_BuildStrucEng) {\r\n res += Number(this.loanCriteria.DI_BuildStrucEng);\r\n }\r\n if (this.loanCriteria.DI_BuildPartyWall) {\r\n res += Number(this.loanCriteria.DI_BuildPartyWall);\r\n }\r\n if (this.loanCriteria.DI_BuildLandscaping) {\r\n res += Number(this.loanCriteria.DI_BuildLandscaping);\r\n }\r\n if (this.loanCriteria.DI_BuildWarranty) {\r\n res += Number(this.loanCriteria.DI_BuildWarranty);\r\n }\r\n if (this.loanCriteria.DI_BuildDemolition) {\r\n res += Number(this.loanCriteria.DI_BuildDemolition);\r\n }\r\n if (this.loanCriteria.DI_BuildOtherCosts) {\r\n res += Number(this.loanCriteria.DI_BuildOtherCosts);\r\n }\r\n } else {\r\n if (this.loanCriteria.CI_Dev_AdditionalOngoingCosts) {\r\n res += Number(this.loanCriteria.CI_Dev_AdditionalOngoingCosts);\r\n }\r\n }\r\n this.additionalBuild = res;\r\n return res;\r\n }\r\n }\r\n save(): ng.IPromise {\r\n //this.loanCriteria.SaveQueryAndResults = true;\r\n let defer = this.$q.defer();\r\n if (!this.loanCriteria) {\r\n return defer.promise;\r\n }\r\n this.$DevelopmentInputservice\r\n .addUpdatereturnonlyid(this.loanCriteria)\r\n .then((response) => {\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 20,\r\n false,\r\n \"\",\r\n \"\",\r\n \"\",\r\n this.loanCriteria.SearchName,\r\n )\r\n .then((results) => {\r\n this.setAllFormsPristine();\r\n })\r\n .catch((error) => {})\r\n .finally(() => {});\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n formChanged(): void {\r\n (this.$rootScope as any).formSaved = false;\r\n }\r\n\r\n getAddressList(app, searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions.length > 0\r\n ) {\r\n let addressLookup = this.PostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n app.DI_StreetAddress = address;\r\n this.searchterm = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.loanCriteria.DI_StreetAddress.AddressLine1 =\r\n addressLookup.AddressLine2;\r\n this.loanCriteria.DI_StreetAddress.AddressLine2 =\r\n addressLookup.AddressLine3;\r\n this.loanCriteria.DI_StreetAddress.AddressLine3 =\r\n addressLookup.AddressLine4;\r\n this.loanCriteria.DI_StreetAddress.AddressLine4 =\r\n addressLookup.PostCode;\r\n this.loanCriteria.DI_StreetAddress.PostCode =\r\n addressLookup.AddressLine1;\r\n this.searchterm = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.PostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n sum(a: number, b: number): number {\r\n return a + b;\r\n }\r\n\r\n //File upload\r\n\r\n onFileSelect(files: FileAttachmentDTO[], module: ModuleEnum) {\r\n if (files.length > 0) {\r\n //if case has no id it must be saved first\r\n if (this.case.Id < 1) {\r\n this.$caseService\r\n .addUpdate(this.case)\r\n .then((response) => {\r\n this.case = response;\r\n this.onFileSelect(files, module); //call itself and then exit as should now be saved so should be able to run\r\n return;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n return;\r\n }\r\n this.fileAttachmentService\r\n .UploadFileLstInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.case.Id,\r\n this.fileUpload,\r\n module,\r\n )\r\n .then((result) => {\r\n this.openModal = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: FileAttachmentDTO) {\r\n this.fileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n deleteFile(file: FileAttachmentDTO) {\r\n this.fileUpload.splice(this.fileUpload.indexOf(file), 1);\r\n this.fileAttachmentService.markasdeleted(file.Id).then((result) => {});\r\n }\r\n\r\n calculateTotalFiles(filter: number) {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module === filter,\r\n ).length;\r\n }\r\n return this.total;\r\n }\r\n\r\n viewResults(loanCriteria: DevelopmentInputDTO) {\r\n if (!this.roleService.IsLender) {\r\n this.save();\r\n (this.$rootScope as any).formSaved = true;\r\n }\r\n this.$location.path(\r\n \"/results/\" + this.case.DevelopmentInputID + \"/\" + this.case.Id,\r\n );\r\n }\r\n}\r\n","export const enum OwnerOrEmployeeEnum {\r\n None = 0,\r\n Owner = 1,\r\n Employee = 2,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { DevelopmentTrackRecordDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentTrackRecordDTO.cs.d\";\r\nimport { ProjectOwnershipDTO } from \"@js/DTO/DevelopmentFinance/ProjectOwnershipDTO.cs.d\";\r\nimport { AreaUnitEnum } from \"@js/models/enum/AreaUnitEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { OwnerOrEmployeeEnum } from \"@js/models/enum/OwnerOrEmployeeEnum.cs.d\";\r\nimport { OwnNewDevelopmentEnum } from \"@js/models/enum/OwnNewDevelopmentEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { ApplicantService } from \"@js/services/ApplicantService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DevelopmentExperienceService } from \"@js/services/DevelopmentExperienceService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class DevelopmentExperienceController {\r\n isLoggedInUser: boolean = false;\r\n\r\n case: CaseDTO;\r\n caseTitle: string;\r\n\r\n message: string = \"\";\r\n modal: boolean = false;\r\n\r\n //Check if shareholder is Admin or current user\r\n isAdmin: boolean = false;\r\n shareholder: CaseMemberDTO;\r\n selectedUser: ApplicationUserDTO;\r\n isPrimaryApplicant: boolean;\r\n\r\n //share shareholder\r\n shareContext: number = null;\r\n shareSuplId: number = null;\r\n userFirstName: string;\r\n shareNote: string;\r\n shareFirstName: string;\r\n shareSurname: string;\r\n shareEmail: string;\r\n showShare: boolean = false;\r\n\r\n dataLoading: boolean = false;\r\n selectedObject: ProjectOwnershipDTO;\r\n maxDateOfBirth: Date = new Date();\r\n minDateOfBirth: Date = new Date(\"Jan 01 1900\");\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n show: boolean[] = [];\r\n showAutofill: boolean = false;\r\n\r\n step: number = 1;\r\n caseid: number;\r\n\r\n formattedAcquisitionDate: any[] = [];\r\n\r\n error: boolean = false;\r\n saving: boolean = false;\r\n saved: boolean = false;\r\n\r\n devexperienceId: number;\r\n\r\n multiPartForm1: ng.IFormController;\r\n assetform: ng.IFormController;\r\n\r\n //array describing form sections\r\n formSectionNames = [\r\n {\r\n label: \"Ownership\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Shareholders\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Track Record\",\r\n visible: true,\r\n },\r\n ];\r\n\r\n applicantNo: number = 0;\r\n\r\n guidanceCheckbox: boolean = true;\r\n\r\n applicantForm: ng.IFormController;\r\n showDelete: boolean = false;\r\n confirmDeleteApplicant: CaseMemberDTO;\r\n tempApplicant: CaseMemberDTO;\r\n showQuickEditModal: boolean = false;\r\n addEditApplicant: CaseMemberDTO;\r\n disableQuickEditSave: boolean = false;\r\n isAddShareholder: boolean;\r\n\r\n showAdd: boolean = false;\r\n showEdit: boolean = false;\r\n editApplicant: CaseMemberDTO;\r\n newApplicant: CaseMemberDTO;\r\n\r\n owners: CaseMemberDTO[];\r\n IsBroker: boolean = false;\r\n maxDateForDateField: Date = new Date(\"Jan 01 3000\");\r\n\r\n howWillYouOwnNewDevelopmentOptions = [\r\n { label: \"UK Limited Company\", value: 1 },\r\n { label: \"UK Limited Liability Partnership\", value: 2 },\r\n { label: \"Personal Names\", value: 3 },\r\n { label: \"Overseas Limited Company\", value: 4 },\r\n { label: \"Pension Fund\", value: 5 },\r\n { label: \"Other(Please Specify)\", value: 6 },\r\n ];\r\n\r\n static $inject = [\r\n \"$window\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$routeParams\",\r\n \"DevelopmentExperienceService\",\r\n \"ApplicantService\",\r\n \"$location\",\r\n \"CaseService\",\r\n \"$cookies\",\r\n \"CaseMemberService\",\r\n \"RoleService\",\r\n \"UserService\",\r\n \"AuthService\",\r\n ];\r\n\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $window: ng.IWindowService,\r\n private $rootScope: ng.IRootScopeService,\r\n protected $q: ng.IQService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $developmentexperienceservice: DevelopmentExperienceService,\r\n private $applicantservice: ApplicantService,\r\n private $location: ng.ILocationService,\r\n private $caseService: CaseService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $caseMemberService: CaseMemberService,\r\n private roleService: RoleService,\r\n private userService: UserService,\r\n private $auth: AuthService,\r\n ) {\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n }\r\n\r\n //Get step number\r\n if (this.$routeParams.StepNumber) {\r\n this.step =\r\n this.$routeParams.StepNumber > 8 || this.$routeParams.StepNumber < 1\r\n ? 1\r\n : this.$routeParams.StepNumber;\r\n }\r\n\r\n if (this.$routeParams.CaseId) {\r\n this.caseid = this.$routeParams.CaseId;\r\n }\r\n\r\n //existing devexperience\r\n if (this.$routeParams.Id && this.$routeParams.Id > 0) {\r\n this.devexperienceId = this.$routeParams.Id;\r\n\r\n this.userService.getcurentuserrecord().then((result) => {\r\n this.selectedUser = result;\r\n });\r\n\r\n //if (!this.selectedObject) {\r\n this.$developmentexperienceservice\r\n .fetch(this.$routeParams.Id)\r\n .then((response) => {\r\n if (response == null) {\r\n if (this.isLoggedInUser) {\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(\"/landing\");\r\n }\r\n } else {\r\n this.selectedObject = response;\r\n if (this.selectedObject.HowWillYouOwnNewDevelopment <= 0) {\r\n this.selectedObject.HowWillYouOwnNewDevelopment = 1;\r\n }\r\n\r\n this.$caseMemberService\r\n .fetchByCaseId(this.caseid)\r\n .then((response) => {\r\n this.owners = response;\r\n\r\n this.selectedObject.HowManyOwnersShareholdersOrPartners =\r\n this.owners.length;\r\n });\r\n\r\n this.selectedObject.DevelopmentTrackRecords.forEach((d, index) => {\r\n if (d.AcquistionDate != null) {\r\n this.formattedAcquisitionDate[index] = new Date(\r\n d.AcquistionDate.toString(),\r\n );\r\n }\r\n });\r\n }\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n } else if (this.caseid) {\r\n //assoicate the case with it so when it is saved the server attaches it to the case\r\n this.selectedObject = {\r\n parentCaseToAssoicateWithOnCreation: this.caseid,\r\n } as ProjectOwnershipDTO;\r\n } else {\r\n this.selectedObject = {} as ProjectOwnershipDTO;\r\n }\r\n\r\n this.$caseService.fetch(this.$routeParams.CaseId).then((response) => {\r\n this.case = response;\r\n this.caseTitle = response.DevelopmentInput.SearchName;\r\n this.checkForPrimaryUser();\r\n });\r\n\r\n if (this.$routeParams.Id < 1) {\r\n // no develoment experience id\r\n this.save(false).then((response) => {\r\n this.devexperienceId = response;\r\n this.go(\r\n \"/devexperience/\" + this.caseid + \"/\" + this.devexperienceId + \"/1\",\r\n );\r\n });\r\n } else if (!this.$routeParams.StepNumber) {\r\n this.go(\r\n \"/devexperience/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.devexperienceId +\r\n \"/\" +\r\n this.step,\r\n );\r\n }\r\n\r\n if (this.$routeParams.ApplicantNo) {\r\n this.applicantNo = this.$routeParams.ApplicantNo;\r\n }\r\n\r\n this.updateGuidanceState();\r\n this.checkForAdmin();\r\n this.checkIfOnlyBroker();\r\n\r\n $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n this.updateGuidanceState();\r\n });\r\n }\r\n\r\n checkForAdmin(): void {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isAdminUser()\r\n .then((response) => {\r\n this.isAdmin = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkIfOnlyBroker() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isBroker()\r\n .then((response) => {\r\n this.IsBroker = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkForPrimaryUser(): boolean {\r\n if (\r\n (this.$rootScope as any).selectedUser &&\r\n this.case &&\r\n (this.$rootScope as any).selectedUser.UserName == this.case.OwnerUser\r\n ) {\r\n this.isPrimaryApplicant = true;\r\n return true;\r\n }\r\n\r\n this.isPrimaryApplicant = false;\r\n return false;\r\n }\r\n\r\n clientAccountAccessCheck(shareholder: CaseMemberDTO): boolean {\r\n if (this.owners) {\r\n this.shareholder = this.owners.find(\r\n (x) => x.UserId == shareholder.UserId,\r\n );\r\n }\r\n\r\n if (this.shareholder.UserId == (this.$rootScope as any).selectedUser.Id) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n updateGuidanceState() {\r\n this.guidanceCheckbox =\r\n this.$cookies.get(\"guidance\") === \"on\" ||\r\n this.$cookies.get(\"guidance\") === undefined;\r\n }\r\n\r\n getGuidanceSwitchState() {\r\n if (!this.$cookies.get(\"guidance\")) {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"on\") {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"off\") {\r\n this.guidanceCheckbox = false;\r\n } else {\r\n this.guidanceCheckbox = true;\r\n }\r\n return this.guidanceCheckbox;\r\n }\r\n\r\n addApplicantPopUp() {\r\n delete this.newApplicant;\r\n this.showAdd = true;\r\n }\r\n\r\n resetApplicant() {\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n this.newApplicant = {} as CaseMemberDTO;\r\n this.showAdd = false;\r\n }\r\n\r\n updateApplicant(applicant: CaseMemberDTO): void {\r\n this.editApplicant = applicant;\r\n this.tempApplicant = { ...this.editApplicant };\r\n this.showEdit = true;\r\n }\r\n\r\n saveUpdatedApplicant(applicant: CaseMemberDTO): void {\r\n this.disableQuickEditSave = true; // this is just because sometimes the save takes a little while and the user could click the save button again\r\n applicant.CaseId = this.case.Id;\r\n\r\n if (!applicant.StreetAddress) {\r\n applicant.StreetAddress = {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress;\r\n }\r\n\r\n this.$applicantservice\r\n .addOrUpdateCaseMember(applicant, this.isAddShareholder)\r\n .then((response) => {\r\n response.DateOfBirth = applicant.DateOfBirth;\r\n const existingShareholder = this.owners.find(\r\n (s) => s.Id == response.Id,\r\n );\r\n\r\n // If found then we're updating\r\n if (existingShareholder) {\r\n this.owners = this.owners.filter(\r\n (member) => member.Id != applicant.Id,\r\n );\r\n this.owners.push(response);\r\n } else {\r\n this.owners.push(response);\r\n }\r\n })\r\n .finally(() => {\r\n delete this.newApplicant;\r\n this.showEdit = false;\r\n this.showAdd = false;\r\n this.disableQuickEditSave = false;\r\n });\r\n }\r\n\r\n cancelUpdateApplicant() {\r\n this.showEdit = false;\r\n this.owners = this.owners.filter(\r\n (applicant) => applicant.Id != this.tempApplicant.Id,\r\n );\r\n this.owners.push(this.tempApplicant); // Resets anything that is changed using the original data object\r\n }\r\n\r\n recordGuidanceCookie() {\r\n var guidanceSwitchState: string;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n if (this.guidanceCheckbox == true) {\r\n guidanceSwitchState = \"on\";\r\n } else {\r\n guidanceSwitchState = \"off\";\r\n }\r\n this.$cookies.put(\"guidance\", guidanceSwitchState, { expires: expiryDate });\r\n this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n }\r\n\r\n formChanged(): void {\r\n (this.$rootScope as any).formSaved = false;\r\n }\r\n\r\n save(isFormComplete: boolean): ng.IPromise {\r\n let defer = this.$q.defer();\r\n if (!this.selectedObject) {\r\n return defer.promise;\r\n }\r\n\r\n if (!this.roleService.IsLender) {\r\n this.saving = true;\r\n\r\n this.formattedAcquisitionDate.forEach((d, index) => {\r\n this.selectedObject.DevelopmentTrackRecords[index].AcquistionDate = d;\r\n });\r\n\r\n var saveRequest = this.$developmentexperienceservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n //set ID of selectedobject\r\n this.selectedObject.Id = response;\r\n //after save take out saving assoication each time\r\n this.selectedObject.parentCaseToAssoicateWithOnCreation = null;\r\n this.setAllFormsPristine();\r\n this.saved = true;\r\n if (isFormComplete) {\r\n var markComplete = {\r\n Id: this.caseid,\r\n DevelopmentAppraisalComplete: true,\r\n } as CaseDTO;\r\n this.$caseService\r\n .addUpdatereturnonlyid(markComplete)\r\n .then((response) => {\r\n this.goToCaseDashboard(true);\r\n });\r\n }\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n }\r\n return defer.promise;\r\n }\r\n\r\n next(): void {\r\n //go to next screen\r\n this.step++;\r\n if (this.step > 1 && this.step <= 3) {\r\n this.go(\r\n \"/devexperience/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.devexperienceId +\r\n \"/\" +\r\n this.step,\r\n );\r\n (this.$rootScope as any).formSaved = this.roleService.IsLender;\r\n } else {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n }\r\n }\r\n\r\n back(): void {\r\n if (this.step > 1) {\r\n this.step--;\r\n this.go(\r\n \"/devexperience/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.devexperienceId +\r\n \"/\" +\r\n this.step,\r\n );\r\n (this.$rootScope as any).formSaved = this.roleService.IsLender;\r\n } else if (this.step <= 1) {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n }\r\n }\r\n\r\n goToCaseDashboard(blockSave?: boolean): void {\r\n if (this.roleService.IsLender == true) {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n } else {\r\n if (blockSave) {\r\n this.save(true).then((response) => {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n (this.$rootScope as any).formSaved = true;\r\n });\r\n } else {\r\n this.save(false).then(() => {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n });\r\n }\r\n }\r\n }\r\n\r\n setAllFormsPristine(): void {\r\n if (this.multiPartForm1) {\r\n this.multiPartForm1.$setPristine();\r\n }\r\n }\r\n\r\n updateComparable(index) {\r\n this.show[index] = true;\r\n }\r\n\r\n ShowCompanyOrPartnershipName(): boolean {\r\n if (\r\n this.selectedObject &&\r\n this.selectedObject.HowWillYouOwnNewDevelopment !=\r\n OwnNewDevelopmentEnum.PersonalNames &&\r\n this.selectedObject.HasTheCompanyOrPensionBeenFormedYet\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n ShowCompanyOrPartnershipNumber(): boolean {\r\n if (\r\n this.selectedObject &&\r\n this.selectedObject.HowWillYouOwnNewDevelopment !=\r\n OwnNewDevelopmentEnum.PersonalNames &&\r\n this.selectedObject.HasTheCompanyOrPensionBeenFormedYet\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n ShowPensionType(): boolean {\r\n if (\r\n this.selectedObject &&\r\n this.selectedObject.HowWillYouOwnNewDevelopment ==\r\n OwnNewDevelopmentEnum.PensionFund &&\r\n this.selectedObject.HasTheCompanyOrPensionBeenFormedYet\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n go(path): void {\r\n // Only need to save if user is NOT a lender (everything is in read-only mode for lender)\r\n if (this.roleService.IsLender == true) {\r\n this.$location.path(path);\r\n } else {\r\n this.save(false).then((response) => {\r\n this.devexperienceId = response;\r\n this.$location.path(path);\r\n });\r\n }\r\n }\r\n\r\n sum(a: number, b: number): number {\r\n return a + b;\r\n }\r\n\r\n getMethodOwningText(): string {\r\n var methodofowningnewdevelopmenttext;\r\n var nameOfSubParts;\r\n if (\r\n this.selectedObject &&\r\n this.selectedObject.HowWillYouOwnNewDevelopment\r\n ) {\r\n this.formSectionNames.forEach((s) => (s.visible = true));\r\n switch (this.selectedObject.HowWillYouOwnNewDevelopment) {\r\n case OwnNewDevelopmentEnum.UKLimitedCompany:\r\n methodofowningnewdevelopmenttext = \"UK Limited Company\";\r\n nameOfSubParts = \"Shareholders\";\r\n break;\r\n case OwnNewDevelopmentEnum.OverseasLimitedCompany:\r\n methodofowningnewdevelopmenttext = \"Overseas Limited Company\";\r\n nameOfSubParts = \"Shareholders\";\r\n break;\r\n case OwnNewDevelopmentEnum.Other:\r\n methodofowningnewdevelopmenttext =\r\n this.selectedObject.HowWillYouOwnNewDevelopmentOther;\r\n nameOfSubParts = \"Owners\";\r\n this.formSectionNames[1].visible = false;\r\n //step = 2;\r\n break;\r\n case OwnNewDevelopmentEnum.PensionFund:\r\n methodofowningnewdevelopmenttext = \"Pension Fund\";\r\n nameOfSubParts = \"beneficiaries\";\r\n break;\r\n case OwnNewDevelopmentEnum.PersonalNames:\r\n methodofowningnewdevelopmenttext = \"Personal Names\";\r\n nameOfSubParts = \"Owners\";\r\n this.formSectionNames[1].visible = false;\r\n //step = 2;\r\n break;\r\n case OwnNewDevelopmentEnum.UKLimitedLiabilityPartnership:\r\n methodofowningnewdevelopmenttext = \"UK Limited Liability Partnership\";\r\n nameOfSubParts = \"Partners\";\r\n break;\r\n default:\r\n }\r\n return methodofowningnewdevelopmenttext;\r\n }\r\n return \"\";\r\n }\r\n\r\n /** Initialise the CaseMemberDTO for adding a new Shareholder/Applicant */\r\n initialiseNewApplicant() {\r\n this.addEditApplicant = {\r\n AccessLevel: CaseAccessLevelEnum.Hidden,\r\n CaseId: this.$routeParams.CaseId,\r\n IsApplicant: true,\r\n Order: this.owners && this.owners.length > 0 ? this.owners.length + 1 : 1,\r\n StreetAddress: {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress,\r\n } as CaseMemberDTO;\r\n }\r\n\r\n /**\r\n * Open the Shareholder/Applicant quick edit\r\n * @param applicant\r\n */\r\n openShareholderQuickEdit(applicant: CaseMemberDTO) {\r\n if (applicant) {\r\n this.isAddShareholder = false;\r\n this.addEditApplicant = applicant;\r\n this.tempApplicant = { ...this.addEditApplicant };\r\n } else {\r\n this.isAddShareholder = true;\r\n if (this.applicantForm) {\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n }\r\n\r\n this.initialiseNewApplicant();\r\n }\r\n\r\n this.showQuickEditModal = true;\r\n }\r\n\r\n /** Cancel any adding or editing of a Shareholder/Applicant */\r\n cancelShareholderQuickEdit() {\r\n if (this.tempApplicant && this.tempApplicant.Id > 0) {\r\n this.owners = this.owners.filter(\r\n (applicant) => applicant.Id != this.tempApplicant.Id,\r\n );\r\n this.owners.push(this.tempApplicant);\r\n }\r\n\r\n this.closeShareholderQuickEdit();\r\n }\r\n\r\n /** Save a new or updated Shareholder/Applicant on quick add/edit */\r\n saveApplicant(): void {\r\n this.disableQuickEditSave = true; // this is just because sometimes the save takes a little while and the user could click the save button again\r\n\r\n this.$applicantservice\r\n .addOrUpdateCaseMember(this.addEditApplicant, true)\r\n .then((response) => {\r\n const existingShareholder = this.owners.find(\r\n (s) => s.Id == response.Id,\r\n );\r\n\r\n // If found then we're updating\r\n if (existingShareholder) {\r\n this.owners = this.owners.filter(\r\n (member) => member.Id != this.addEditApplicant.Id,\r\n );\r\n this.owners.push(response);\r\n } else {\r\n this.owners.push(response);\r\n }\r\n })\r\n .finally(() => {\r\n this.showQuickEditModal = false;\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n this.tempApplicant = {} as CaseMemberDTO;\r\n this.addEditApplicant = {} as CaseMemberDTO;\r\n this.disableQuickEditSave = false;\r\n });\r\n }\r\n\r\n deleteApplicant(): void {\r\n var id = this.confirmDeleteApplicant.Id;\r\n\r\n this.$caseMemberService\r\n .markAsDeleteAndSetNextCaseMenmberAsPrimary(\r\n this.caseid,\r\n this.confirmDeleteApplicant.Id,\r\n )\r\n .then((response) => {\r\n this.owners = response;\r\n });\r\n this.confirmDeleteApplicant = {} as CaseMemberDTO;\r\n this.showDelete = false;\r\n }\r\n\r\n deleteConfirmApplicant(applicant: CaseMemberDTO) {\r\n this.showDelete = true;\r\n this.confirmDeleteApplicant = { ...applicant };\r\n }\r\n\r\n /** Processing that should be done each time the modal closes - on cancel or save */\r\n closeShareholderQuickEdit() {\r\n this.showQuickEditModal = false;\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n this.tempApplicant = {} as CaseMemberDTO;\r\n this.addEditApplicant = {} as CaseMemberDTO;\r\n }\r\n\r\n isInvalid() {\r\n if (this.selectedObject) {\r\n if (!this.selectedObject.HasTheCompanyOrPensionBeenFormedYet) {\r\n return false;\r\n }\r\n if (\r\n this.selectedObject.CompanyPensionOrPartnershipName &&\r\n this.selectedObject.CompanyOrPartnershipNumber\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n goToApplicantDetails(applicant: CaseMemberDTO): void {\r\n //change applicant.id to index (use a for loop to iterate through dto)\r\n var applicantId;\r\n\r\n for (let i = 0; i <= this.owners.length - 1; i++) {\r\n if (this.owners[i].Id == applicant.Id) {\r\n applicantId = i;\r\n }\r\n }\r\n if (applicantId || applicantId == 0) {\r\n this.go(\r\n \"/applicantdetails/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.devexperienceId +\r\n \"/\" +\r\n applicant.Id +\r\n \"/1\",\r\n );\r\n }\r\n }\r\n\r\n invite(applicant: CaseMemberDTO) {\r\n this.$caseMemberService\r\n .inviteApplicant(applicant.UniqueRef)\r\n .then((i) => {\r\n this.modal = true;\r\n this.message =\r\n \"A request has been sent to \" +\r\n applicant.FirstName +\r\n \" \" +\r\n applicant.Surname +\r\n \" complete their shareholder profile.\";\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem sending the invite request to \" +\r\n applicant.FirstName +\r\n \" \" +\r\n applicant.Surname +\r\n \". Please try again later.\";\r\n });\r\n }\r\n\r\n /**\r\n * Determines when to show/hide the Invite button\r\n * @param shareholder\r\n */\r\n showInviteButton(shareholder: CaseMemberDTO) {\r\n // If the shareholder has already been verified then don't show the button\r\n if (shareholder.IsVerified) {\r\n return false;\r\n }\r\n\r\n // At least 2 of the security questions should be answered\r\n var count = 0;\r\n\r\n if (shareholder.PhoneNumber) {\r\n count++;\r\n }\r\n\r\n if (shareholder.StreetAddress.PostCode) {\r\n count++;\r\n }\r\n\r\n if (shareholder.DateOfBirth) {\r\n count++;\r\n }\r\n\r\n if (count >= 2) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n openSendToBorrower(shareholder: CaseMemberDTO, shareContext: number) {\r\n this.shareContext = shareContext;\r\n this.shareSuplId = shareholder.Id;\r\n if (this.selectedUser.UserName !== this.case.DevelopmentInput.OwnerUser) {\r\n this.userFirstName = \"\";\r\n } else {\r\n this.userFirstName = this.selectedUser.FirstName;\r\n }\r\n\r\n var message =\r\n `Please take a look and complete the information for ` +\r\n shareholder.FirstName +\r\n `\\n\\nIf you need my help or want me to complete this information with you on a call, then please contact me as soon as possible.`;\r\n\r\n this.shareNote = message;\r\n\r\n this.shareEmail = shareholder.Email;\r\n this.shareFirstName = shareholder.FirstName;\r\n this.shareSurname = shareholder.Surname;\r\n\r\n //if (this.$cookies.get('access_token')) {\r\n // this.userService.getcurentuserrecord().then((result) => {\r\n\r\n // if (this.selectedUser.UserName !== this.case.DevelopmentInput.OwnerUser) {\r\n // this.shareEmail = this.case.DevelopmentInput.OwnerUser;\r\n // this.shareFirstName = \"\";\r\n // this.shareSurname = \"\";\r\n // }\r\n // else {\r\n // this.shareEmail = result.Email;\r\n // this.shareFirstName = result.FirstName;\r\n // this.shareSurname = result.LastName;\r\n // }\r\n // });\r\n //}\r\n\r\n this.showShare = true;\r\n }\r\n\r\n sendToBorrower() {\r\n this.dataLoading = true;\r\n this.$caseService\r\n .sendNoteToBorrower(\r\n this.shareFirstName,\r\n this.shareSurname,\r\n this.shareEmail,\r\n this.shareNote,\r\n this.case.Id,\r\n this.shareContext,\r\n this.shareSuplId,\r\n this.case.DevelopmentExperienceID,\r\n )\r\n .then((success) => {\r\n this.showShare = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n autoFillOwnershipDetails() {\r\n this.selectedObject.HowWillYouOwnNewDevelopment =\r\n OwnNewDevelopmentEnum.UKLimitedCompany;\r\n this.selectedObject.HasTheCompanyOrPensionBeenFormedYet = true;\r\n this.selectedObject.CompanyPensionOrPartnershipName =\r\n \"Globe Results Limited\";\r\n this.selectedObject.CompanyOrPartnershipNumber = \"12322370\";\r\n this.selectedObject.ExcludedLenders = \"Example Lender\";\r\n\r\n this.selectedObject.DevelopmentTrackRecords = [];\r\n\r\n let newDevelopmentTrackRecord = {\r\n DevelopmentTrackRecordNumber: 1,\r\n DevelopmentExperienceId: this.selectedObject.Id,\r\n AreaUnit: 1,\r\n DevelopmentTrackRecordType: null,\r\n StreetAddress: {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress,\r\n } as DevelopmentTrackRecordDTO;\r\n\r\n this.selectedObject.DevelopmentTrackRecords.push(newDevelopmentTrackRecord);\r\n\r\n newDevelopmentTrackRecord = {\r\n DevelopmentTrackRecordNumber: 2,\r\n DevelopmentExperienceId: this.selectedObject.Id,\r\n AreaUnit: 1,\r\n DevelopmentTrackRecordType: null,\r\n StreetAddress: {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress,\r\n } as DevelopmentTrackRecordDTO;\r\n\r\n this.selectedObject.DevelopmentTrackRecords.push(newDevelopmentTrackRecord);\r\n this.selectedObject.DevelopmentTrackRecords[0].OwnerOrEmployee =\r\n OwnerOrEmployeeEnum.Owner;\r\n this.selectedObject.DevelopmentTrackRecords[0].StreetAddress.AddressLine1 =\r\n \"32 Brookside Road\";\r\n this.selectedObject.DevelopmentTrackRecords[0].StreetAddress.AddressLine2 =\r\n \"Istead Rise\";\r\n this.selectedObject.DevelopmentTrackRecords[0].StreetAddress.AddressLine3 =\r\n \"Gravesend\";\r\n this.selectedObject.DevelopmentTrackRecords[0].StreetAddress.AddressLine4 =\r\n \"Kent\";\r\n this.selectedObject.DevelopmentTrackRecords[0].StreetAddress.PostCode =\r\n \"DA13 9JJ\";\r\n const maxDate = Date.now();\r\n const timestamp = Math.floor(Math.random() * maxDate);\r\n this.selectedObject.DevelopmentTrackRecords[0].AcquistionDate = new Date(\r\n timestamp,\r\n );\r\n this.selectedObject.DevelopmentTrackRecords[0].AcquistionCosts =\r\n this.getRandomIntInclusive(1000, 3000);\r\n this.selectedObject.DevelopmentTrackRecords[0].DidYouUseDevelopmentFinance =\r\n true;\r\n this.selectedObject.DevelopmentTrackRecords[0].DevelopmentFinanceLenderName =\r\n \"Masthaven\";\r\n this.selectedObject.DevelopmentTrackRecords[0].DevelopmentAreas =\r\n this.getRandomIntInclusive(2000, 3000).toString();\r\n this.selectedObject.DevelopmentTrackRecords[0].BuildCosts =\r\n this.getRandomIntInclusive(1000000, 2000000);\r\n this.selectedObject.DevelopmentTrackRecords[0].BuildTime =\r\n this.getRandomIntInclusive(5, 12);\r\n this.selectedObject.DevelopmentTrackRecords[0].GDV =\r\n this.getRandomIntInclusive(10000000, 20000000);\r\n this.selectedObject.DevelopmentTrackRecords[0].DescriptionOfWorks =\r\n \"Knock down and rebuild of main residence\";\r\n\r\n this.selectedObject.DevelopmentTrackRecords[1].OwnerOrEmployee =\r\n OwnerOrEmployeeEnum.Owner;\r\n this.selectedObject.DevelopmentTrackRecords[1].StreetAddress.AddressLine1 =\r\n \"7 Soho Square\";\r\n this.selectedObject.DevelopmentTrackRecords[1].StreetAddress.AddressLine2 =\r\n \"\";\r\n this.selectedObject.DevelopmentTrackRecords[1].StreetAddress.AddressLine3 =\r\n \"London\";\r\n this.selectedObject.DevelopmentTrackRecords[1].StreetAddress.AddressLine4 =\r\n \"\";\r\n this.selectedObject.DevelopmentTrackRecords[1].StreetAddress.PostCode =\r\n \"W1D 3QB\";\r\n this.selectedObject.DevelopmentTrackRecords[1].AcquistionDate = new Date(\r\n timestamp,\r\n );\r\n this.selectedObject.DevelopmentTrackRecords[1].AcquistionCosts =\r\n this.getRandomIntInclusive(1000, 3000);\r\n this.selectedObject.DevelopmentTrackRecords[1].DidYouUseDevelopmentFinance =\r\n true;\r\n this.selectedObject.DevelopmentTrackRecords[1].DevelopmentFinanceLenderName =\r\n \"Masthaven\";\r\n (this.selectedObject.DevelopmentTrackRecords[1].AreaUnit =\r\n AreaUnitEnum.SquareMeters),\r\n (this.selectedObject.DevelopmentTrackRecords[1].DevelopmentAreas =\r\n this.getRandomIntInclusive(2000, 3000).toString());\r\n this.selectedObject.DevelopmentTrackRecords[1].BuildCosts =\r\n this.getRandomIntInclusive(1000000, 2000000);\r\n this.selectedObject.DevelopmentTrackRecords[1].BuildTime =\r\n this.getRandomIntInclusive(12, 24);\r\n this.selectedObject.DevelopmentTrackRecords[1].GDV =\r\n this.getRandomIntInclusive(10000000, 20000000);\r\n this.selectedObject.DevelopmentTrackRecords[1].DescriptionOfWorks =\r\n \"Office to residential conversion on upper floors, and retention of the downstairs commercial - included a basement dig and 2 storey extension\";\r\n }\r\n\r\n getRandomIntInclusive(min, max) {\r\n min = Math.ceil(min);\r\n max = Math.floor(max);\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n }\r\n\r\n hasMinSecurityQuestionsBeenAnswered(shareholder: CaseMemberDTO) {\r\n var answers = 0;\r\n\r\n if (shareholder.DateOfBirth) {\r\n answers++;\r\n }\r\n\r\n if (shareholder.PhoneNumber) {\r\n answers++;\r\n }\r\n\r\n if (shareholder.StreetAddress.PostCode) {\r\n answers++;\r\n }\r\n\r\n if (answers >= 2 || shareholder.IsVerified) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class DevelopmentInputController {\r\n selectedSection: string;\r\n\r\n objects: DevelopmentInputDTO[];\r\n selectedObject: DevelopmentInputDTO = {} as DevelopmentInputDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n userRecords: ApplicationUserDTO[];\r\n\r\n DevelopmentInputForm: ng.IFormController;\r\n //subDevelopmentInputForm: ng.IFormController;\r\n\r\n static $inject = [\"$routeParams\", \"DevelopmentInputService\", \"UserService\"];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private $applicationuserservice: UserService,\r\n ) {\r\n //Is search related to a saved search?\r\n\r\n if (this.$routeParams.searchId) {\r\n this.$DevelopmentInputservice\r\n .fetch(parseInt(this.$routeParams.searchId))\r\n .then((object) => {\r\n this.selectedObject = object;\r\n });\r\n } else {\r\n //Unsaved search. Use $rootScope\r\n }\r\n }\r\n\r\n save() {\r\n this.$DevelopmentInputservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: DevelopmentInputDTO[] = this.objects.filter(\r\n (value, index) => {\r\n return value.Id == response;\r\n },\r\n );\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.DevelopmentInputForm.$setPristine();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$DevelopmentInputservice\r\n .delete(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.DevelopmentInputForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n}\r\n","export const enum ScheduleTypeEnum {\r\n House = 0,\r\n Flat = 1,\r\n Parking = 2,\r\n Commercial = 3,\r\n Communal = 4,\r\n}\r\n","import { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { DevelopmentInputScheduleDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputScheduleDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { ScheduleTypeEnum } from \"@js/models/enum/ScheduleTypeEnum.cs.d\";\r\nimport { TenureEnum } from \"@js/models/enum/TenureEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DevelopmentInputScheduleService } from \"@js/services/DevelopmentInputScheduleService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class DevelopmentInputScheduleController {\r\n isLoggedInUser: boolean = false;\r\n dataLoading: boolean = false;\r\n\r\n saving: boolean = false;\r\n saved: boolean = false;\r\n error: boolean = false;\r\n selectedSection: string;\r\n developmentInput: DevelopmentInputDTO;\r\n developmentInputid: number;\r\n objects: DevelopmentInputScheduleDTO[]; // This is a full list of houses, flats, commercial units and parking spaces in the dev schedule\r\n objectsMarkedForDeletion: DevelopmentInputScheduleDTO[];\r\n houses: DevelopmentInputScheduleDTO[];\r\n flats: DevelopmentInputScheduleDTO[];\r\n communalAreas: DevelopmentInputScheduleDTO[];\r\n commercialUnits: DevelopmentInputScheduleDTO[];\r\n parkingSpaces: DevelopmentInputScheduleDTO[];\r\n selectedObject: DevelopmentInputScheduleDTO;\r\n OverallGDVLocal: number;\r\n OverallSQft: number = 0;\r\n sqlUnmatch: boolean = false;\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n fileUpload: FileAttachmentDTO[];\r\n uploadingFiles: FileUploadProgressDTO[];\r\n case: CaseDTO;\r\n file: FileAttachmentDTO;\r\n caseTitle: string;\r\n thisModuleSection: ModuleEnum = ModuleEnum.DevelopmentSchedule;\r\n openModal: boolean = false;\r\n seeFiles: boolean = false;\r\n seeInfo: boolean = false;\r\n\r\n showInformationMessage: boolean = false;\r\n messageContent: string;\r\n savingInProgress: boolean = false;\r\n showAutofill: boolean = false;\r\n\r\n GDVmismatch: boolean = false;\r\n OverallFlats: number = 0;\r\n OverallHouses: number = 0;\r\n OverallCommercial: number = 0;\r\n OverallCommunal: number = 0;\r\n\r\n parkingSoldSeparately: boolean;\r\n\r\n currentCaseNumber: number;\r\n\r\n developmentScheduleForm: ng.IFormController;\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n DevelopmentInputscheduleForm: ng.IFormController;\r\n DevelopmentScheduleFormUnitsDetailForm: ng.IFormController;\r\n //subDevelopmentInputscheduleForm: ng.IFormController;\r\n\r\n previousHouseNumber: number = 0;\r\n previousFlatNumber: number = 0;\r\n previousCommunalNumber: number = 0;\r\n previousParkingNumber: number = 0;\r\n previousCommercialNumber: number = 0;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"DevelopmentInputScheduleService\",\r\n \"DevelopmentInputService\",\r\n \"$location\",\r\n \"$q\",\r\n \"CaseService\",\r\n \"FileAttachmentService\",\r\n \"RoleService\",\r\n \"$window\",\r\n \"$cookies\",\r\n \"AuthService\",\r\n \"UserService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $DevelopmentInputscheduleservice: DevelopmentInputScheduleService,\r\n private $DevelopmentInputService: DevelopmentInputService,\r\n private $location: ng.ILocationService,\r\n protected $q: ng.IQService,\r\n private $caseService: CaseService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private roleService: RoleService,\r\n private $window: ng.IWindowService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private authService: AuthService,\r\n private userService: UserService,\r\n ) {\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n }\r\n\r\n this.objects = [{} as DevelopmentInputScheduleDTO];\r\n\r\n if (this.$routeParams.CaseId) {\r\n this.currentCaseNumber = this.$routeParams.CaseId;\r\n }\r\n\r\n this.$caseService.fetch(this.$routeParams.CaseId).then((response) => {\r\n if (response == null) {\r\n if (this.isLoggedInUser) {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n } else {\r\n this.case = response;\r\n this.fileUpload = response.Attachments;\r\n this.caseTitle = response.DevelopmentInput.SearchName;\r\n this.calculateFilesForThisModule();\r\n }\r\n });\r\n\r\n if (\r\n this.$routeParams.DevelopmentId &&\r\n this.$routeParams.DevelopmentId != \"null\"\r\n ) {\r\n this.developmentInputid = this.$routeParams.DevelopmentId;\r\n this.$DevelopmentInputService\r\n .fetch(this.developmentInputid)\r\n .then((response) => {\r\n if (response == null) {\r\n if (this.isLoggedInUser) {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n } else {\r\n this.developmentInput = response;\r\n\r\n this.updateObjects();\r\n\r\n if (this.developmentInput) {\r\n this.CalcAll();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n formChanged(): void {\r\n (this.$rootScope as any).formSaved = false;\r\n }\r\n //ReduceOrInceaseRecordsOfType(rectype:ScheduleTypeEnum) {\r\n\r\n //}\r\n\r\n //SingleUnitChanged() {\r\n // this.developmentInput.HowManyUnits = 1;\r\n // this.developmentInput.HowManyHouses = 0;\r\n // this.developmentInput.HowManyParkingSpaces = 0;\r\n // this.developmentInput.HowManyFlats = 0;\r\n\r\n //}\r\n setAllFormsPristine(): void {\r\n if (this.developmentScheduleForm) {\r\n this.developmentScheduleForm.$setPristine();\r\n }\r\n if (this.DevelopmentScheduleFormUnitsDetailForm) {\r\n this.DevelopmentScheduleFormUnitsDetailForm.$setPristine();\r\n }\r\n }\r\n\r\n NumberCommercialChanged() {\r\n if (this.developmentInput.HowManyUnits == undefined) {\r\n this.developmentInput.HowManyUnits = 0;\r\n }\r\n\r\n (this.developmentInput.HowManyUnits ||\r\n this.developmentInput.HowManyUnits == 0) &&\r\n this.NumberChanged(\r\n ScheduleTypeEnum.Commercial,\r\n this.developmentInput.HowManyUnits,\r\n );\r\n\r\n this.commercialUnits.length = this.developmentInput.HowManyUnits;\r\n\r\n this.CalcGDVCorporateUnitsSpaces();\r\n this.previousCommercialNumber = this.developmentInput.HowManyUnits;\r\n }\r\n\r\n NumberHousesChanged() {\r\n if (this.developmentInput.HowManyHouses == undefined) {\r\n this.developmentInput.HowManyHouses = 0;\r\n }\r\n\r\n (this.developmentInput.HowManyHouses ||\r\n this.developmentInput.HowManyHouses == 0) &&\r\n this.NumberChanged(\r\n ScheduleTypeEnum.House,\r\n this.developmentInput.HowManyHouses,\r\n );\r\n\r\n this.houses.length = this.developmentInput.HowManyHouses;\r\n\r\n this.CalcGDVHouses();\r\n this.previousHouseNumber = this.developmentInput.HowManyHouses;\r\n }\r\n\r\n NumberFlatsChanged() {\r\n if (this.developmentInput.HowManyFlats == undefined) {\r\n this.developmentInput.HowManyFlats = 0;\r\n }\r\n\r\n (this.developmentInput.HowManyFlats ||\r\n this.developmentInput.HowManyFlats == 0) &&\r\n this.NumberChanged(\r\n ScheduleTypeEnum.Flat,\r\n this.developmentInput.HowManyFlats,\r\n );\r\n\r\n this.flats.length = this.developmentInput.HowManyFlats;\r\n this.CalcGDVFlats();\r\n\r\n this.previousFlatNumber = this.developmentInput.HowManyFlats;\r\n }\r\n\r\n NumberCommunalAreas() {\r\n if (this.developmentInput.HowManyCommunalAreas === undefined) {\r\n this.developmentInput.HowManyCommunalAreas = 0;\r\n }\r\n\r\n (this.developmentInput.HowManyCommunalAreas ||\r\n this.developmentInput.HowManyCommunalAreas == 0) &&\r\n this.NumberChanged(\r\n ScheduleTypeEnum.Communal,\r\n this.developmentInput.HowManyCommunalAreas,\r\n );\r\n\r\n this.communalAreas.length = this.developmentInput.HowManyCommunalAreas;\r\n }\r\n\r\n SetParkingSpacesToZero() {\r\n if (this.developmentInput.ParkingSoldSeparately === true) {\r\n this.NumberChanged(ScheduleTypeEnum.Parking, 0);\r\n this.CalcGDVParkingSpaces();\r\n }\r\n }\r\n\r\n NumberParkingSpacesChanged() {\r\n if (this.developmentInput.HowManyParkingSpaces == undefined) {\r\n this.developmentInput.HowManyParkingSpaces = 0;\r\n }\r\n\r\n (this.developmentInput.HowManyParkingSpaces ||\r\n this.developmentInput.HowManyParkingSpaces == 0) &&\r\n this.NumberChanged(\r\n ScheduleTypeEnum.Parking,\r\n this.developmentInput.HowManyParkingSpaces,\r\n );\r\n\r\n this.parkingSpaces.length = this.developmentInput.HowManyParkingSpaces;\r\n\r\n this.CalcGDVParkingSpaces();\r\n\r\n this.previousParkingNumber = this.developmentInput.HowManyParkingSpaces;\r\n }\r\n CalcTotalForListOfSalesPrices(\r\n salesprices: DevelopmentInputScheduleDTO[],\r\n ): number {\r\n var total: number = 0;\r\n salesprices.forEach((x) => {\r\n if (x.SalesPrice && x.SalesPrice > 0) {\r\n total = total + Number(x.SalesPrice);\r\n }\r\n });\r\n return total;\r\n }\r\n CalcTotalForListOfSalesPricesMultQuanity(\r\n salesprices: DevelopmentInputScheduleDTO[],\r\n ): number {\r\n var total: number = 0;\r\n salesprices.forEach((x) => {\r\n if (\r\n x.SalesPrice &&\r\n x.SalesPrice > 0 &&\r\n x.NumberOfUnits &&\r\n x.NumberOfUnits > 0\r\n ) {\r\n total = total + Number(x.SalesPrice) * x.NumberOfUnits;\r\n }\r\n });\r\n return total;\r\n }\r\n CalcGDVHouses() {\r\n this.developmentInput.Houses_GDV = this.CalcTotalForListOfSalesPrices(\r\n this.houses,\r\n );\r\n this.CalcOverallTotal();\r\n }\r\n CalcGDVFlats() {\r\n this.developmentInput.Flats_GDV = this.CalcTotalForListOfSalesPrices(\r\n this.flats,\r\n );\r\n this.CalcOverallTotal();\r\n }\r\n CalcGDVParkingSpaces() {\r\n this.developmentInput.Parking_GDV =\r\n this.CalcTotalForListOfSalesPricesMultQuanity(this.parkingSpaces);\r\n this.CalcOverallTotal();\r\n }\r\n CalcGDVCorporateUnitsSpaces() {\r\n this.developmentInput.Commercial_GDV = this.CalcTotalForListOfSalesPrices(\r\n this.commercialUnits,\r\n );\r\n this.CalcOverallTotal();\r\n }\r\n CalcOverallTotal() {\r\n this.OverallGDVLocal = 0;\r\n\r\n if (\r\n this.developmentInput.CI_EndPropType == 1 ||\r\n this.developmentInput.CI_EndPropType == 2\r\n ) {\r\n this.OverallGDVLocal +=\r\n this.developmentInput.Houses_GDV +\r\n this.developmentInput.Flats_GDV +\r\n this.developmentInput.Parking_GDV;\r\n }\r\n\r\n if (this.developmentInput.CI_EndPropType != 1) {\r\n this.OverallGDVLocal += this.developmentInput.Commercial_GDV;\r\n }\r\n\r\n if (\r\n this.OverallGDVLocal > 0 &&\r\n this.OverallGDVLocal !== this.developmentInput.CI_GDV\r\n ) {\r\n this.GDVmismatch = true;\r\n } else {\r\n this.GDVmismatch = false;\r\n }\r\n }\r\n\r\n CalcOverallSQft() {\r\n this.OverallSQft = 0;\r\n this.OverallHouses = 0;\r\n this.OverallFlats = 0;\r\n this.OverallCommercial = 0;\r\n this.OverallCommunal = 0;\r\n\r\n if (this.houses && this.houses.length > 0) {\r\n var tempHouseArray = this.houses.filter((house) => house.Area > 0);\r\n\r\n tempHouseArray.forEach(\r\n (i) => (i.AreaUnit = this.developmentInput.DI_AreaUnit),\r\n );\r\n\r\n if (tempHouseArray && tempHouseArray.length > 0) {\r\n this.OverallHouses = tempHouseArray\r\n .map((i) => i.Area)\r\n .reduce((a, b) => a + b);\r\n }\r\n }\r\n\r\n if (this.flats && this.flats.length > 0) {\r\n var tempFlatArray = this.flats.filter((flat) => flat.Area > 0);\r\n\r\n tempFlatArray.forEach(\r\n (i) => (i.AreaUnit = this.developmentInput.DI_AreaUnit),\r\n );\r\n\r\n if (tempFlatArray && tempFlatArray.length > 0) {\r\n this.OverallFlats = tempFlatArray\r\n .map((i) => i.Area)\r\n .reduce((a, b) => a + b);\r\n }\r\n }\r\n\r\n if (this.commercialUnits && this.commercialUnits.length > 0) {\r\n var tempCMUArray = this.commercialUnits.filter(\r\n (commercialUnit) => commercialUnit.Area > 0,\r\n );\r\n tempCMUArray.forEach(\r\n (i) => (i.AreaUnit = this.developmentInput.DI_AreaUnit),\r\n );\r\n\r\n if (tempCMUArray && tempCMUArray.length > 0) {\r\n this.OverallCommercial = tempCMUArray\r\n .map((i) => i.Area)\r\n .reduce((a, b) => a + b);\r\n }\r\n }\r\n\r\n if (this.communalAreas && this.communalAreas.length > 0) {\r\n this.communalAreas = this.checkIfAreaisNull(this.communalAreas);\r\n this.communalAreas = this.checkIfDescriptionIsNull(this.communalAreas);\r\n var tempCAArray = this.communalAreas.filter(\r\n (communalArea) => communalArea.Area > 0,\r\n );\r\n\r\n tempCAArray.forEach(\r\n (i) => (i.AreaUnit = this.developmentInput.DI_AreaUnit),\r\n );\r\n\r\n if (tempCAArray && tempCAArray.length > 0) {\r\n this.OverallCommunal = tempCAArray\r\n .map((i) => i.Area)\r\n .reduce((a, b) => a + b);\r\n }\r\n }\r\n\r\n if (\r\n this.developmentInput.CI_EndPropType == 1 ||\r\n this.developmentInput.CI_EndPropType == 2\r\n ) {\r\n this.OverallSQft +=\r\n this.OverallHouses + this.OverallFlats + this.OverallCommunal;\r\n }\r\n\r\n if (this.developmentInput.CI_EndPropType != 1) {\r\n this.OverallSQft += this.OverallCommercial;\r\n }\r\n\r\n if (\r\n this.OverallSQft !== this.developmentInput.DI_AreaSalesAreaResidential\r\n ) {\r\n this.sqlUnmatch = true;\r\n } else {\r\n this.sqlUnmatch = false;\r\n }\r\n }\r\n\r\n checkIfAreaisNull(overallBuild: DevelopmentInputScheduleDTO[]) {\r\n return overallBuild.map((i) => {\r\n if (i.Area === undefined || i.Area === null) {\r\n i.Area = 0;\r\n } else {\r\n i.Area;\r\n }\r\n return i;\r\n });\r\n }\r\n\r\n checkIfDescriptionIsNull(overallBuild: DevelopmentInputScheduleDTO[]) {\r\n return overallBuild.map((i) => {\r\n if (i.Description === undefined || i.Description === null) {\r\n i.Description = \"Communal Areas\";\r\n }\r\n return i;\r\n });\r\n }\r\n\r\n CalcAll() {\r\n if (this.developmentInput && this.objects && this.objects.length > 0) {\r\n this.developmentInput.Houses_GDV =\r\n this.houses && this.houses.length > 0\r\n ? this.CalcTotalForListOfSalesPrices(this.houses)\r\n : null;\r\n this.developmentInput.Parking_GDV =\r\n this.parkingSpaces && this.parkingSpaces.length > 0\r\n ? this.CalcTotalForListOfSalesPricesMultQuanity(this.parkingSpaces)\r\n : null;\r\n this.developmentInput.Flats_GDV =\r\n this.flats && this.flats.length > 0\r\n ? this.CalcTotalForListOfSalesPrices(this.flats)\r\n : null;\r\n this.developmentInput.Commercial_GDV =\r\n this.commercialUnits && this.commercialUnits.length > 0\r\n ? this.CalcTotalForListOfSalesPrices(this.commercialUnits)\r\n : null;\r\n this.CalcOverallTotal();\r\n this.CalcOverallSQft();\r\n }\r\n }\r\n FilterMainObjects(recType: ScheduleTypeEnum): DevelopmentInputScheduleDTO[] {\r\n if (this.objects) {\r\n return this.objects\r\n .filter((x) => x.ScheduleType == recType)\r\n .sort(function (a, b) {\r\n return a.OrderId < b.OrderId ? -1 : 1;\r\n });\r\n }\r\n return null;\r\n }\r\n NumberChanged(recType: ScheduleTypeEnum, numberCurrently: number) {\r\n var currentObjects: DevelopmentInputScheduleDTO[];\r\n\r\n // by using = when currentObjects changes the original array will also change as it is \"copied\" by reference\r\n switch (recType) {\r\n case ScheduleTypeEnum.Commercial:\r\n currentObjects = this.commercialUnits;\r\n break;\r\n case ScheduleTypeEnum.Flat:\r\n currentObjects = this.flats;\r\n break;\r\n case ScheduleTypeEnum.House:\r\n currentObjects = this.houses;\r\n break;\r\n case ScheduleTypeEnum.Parking:\r\n currentObjects = this.parkingSpaces;\r\n break;\r\n case ScheduleTypeEnum.Communal:\r\n currentObjects = this.communalAreas;\r\n break;\r\n }\r\n\r\n //get back list related to corporate units\r\n var difference: number = numberCurrently - currentObjects.length;\r\n if (difference < 0) {\r\n difference = Math.abs(difference);\r\n //remove the latter ones\r\n\r\n for (\r\n var i = currentObjects.length - difference;\r\n i < currentObjects.length;\r\n i++\r\n ) {\r\n if (!this.objectsMarkedForDeletion) {\r\n this.objectsMarkedForDeletion = [];\r\n }\r\n this.objectsMarkedForDeletion.push(currentObjects[i]);\r\n }\r\n } else if (difference > 0) {\r\n //add new ones\r\n for (var i = 0; i < difference; i++) {\r\n var singlerec: DevelopmentInputScheduleDTO =\r\n {} as DevelopmentInputScheduleDTO;\r\n singlerec.ScheduleType = recType;\r\n singlerec.DevelopmentInputId = this.developmentInput.Id;\r\n singlerec.SalesPrice = 0;\r\n\r\n if (recType === 0) {\r\n singlerec.Tenure = TenureEnum.Freehold;\r\n }\r\n if (recType === 1) {\r\n singlerec.Tenure = TenureEnum.Leasehold;\r\n }\r\n\r\n currentObjects.push(singlerec);\r\n }\r\n }\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$DevelopmentInputscheduleservice\r\n .fetchByCaseId(this.developmentInputid)\r\n .then((response) => {\r\n this.objects = response;\r\n\r\n this.objects.forEach((o) => {\r\n o.Area != 0 ? o.Area : (o.Area = null);\r\n });\r\n\r\n this.populatePropertyArrays();\r\n\r\n this.CalcAll();\r\n this.preSelectedItem();\r\n\r\n this.NumberCommercialChanged();\r\n this.NumberCommunalAreas();\r\n this.NumberFlatsChanged();\r\n this.NumberHousesChanged();\r\n this.NumberParkingSpacesChanged();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: DevelopmentInputScheduleDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as DevelopmentInputScheduleDTO;\r\n }\r\n\r\n save(): ng.IPromise {\r\n this.saving = true;\r\n let defer = this.$q.defer();\r\n\r\n // Concatenate the separate arrays back into the main objects array for saving\r\n this.objects = this.houses.concat(\r\n this.flats,\r\n this.commercialUnits,\r\n this.parkingSpaces,\r\n this.communalAreas,\r\n );\r\n\r\n this.objects.forEach((o) => {\r\n o.SalesPrice > -1 ? o.SalesPrice : (o.SalesPrice = 0);\r\n });\r\n\r\n this.objects.forEach((o) => {\r\n o.Area > 0 ? o.Area : (o.Area = 0);\r\n });\r\n\r\n this.$DevelopmentInputscheduleservice\r\n .addUpdatelistreturnonlyids(this.objects)\r\n .then((response) => {\r\n this.objects.forEach((o) => {\r\n o.Area != 0 ? o.Area : (o.Area = null);\r\n });\r\n //set ids to those of response\r\n this.objects.forEach((o, i) => (o.Id = response[i]));\r\n // re-populate the individual arrays with the new data\r\n this.populatePropertyArrays();\r\n\r\n this.$DevelopmentInputService\r\n .addUpdatereturnonlyid(this.developmentInput)\r\n .then((devInputResponse) => {\r\n this.developmentInput.Id = devInputResponse;\r\n this.CalcAll();\r\n this.setAllFormsPristine();\r\n this.saved = true;\r\n defer.resolve(response as number[]);\r\n //TODO: add to architecture delete all\r\n if (this.objectsMarkedForDeletion) {\r\n for (var i = 0; i < this.objectsMarkedForDeletion.length; i++) {\r\n if (this.objectsMarkedForDeletion[i].Id) {\r\n this.$DevelopmentInputscheduleservice.delete(\r\n this.objectsMarkedForDeletion[i].Id,\r\n );\r\n }\r\n }\r\n this.objectsMarkedForDeletion = [];\r\n }\r\n\r\n return response;\r\n });\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n return defer.promise;\r\n }\r\n\r\n delete() {\r\n this.$DevelopmentInputscheduleservice\r\n .delete(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.DevelopmentInputscheduleForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n cancel(): void {\r\n this.$location.path(\"/casedashboard/\" + this.currentCaseNumber);\r\n }\r\n\r\n saveChanges(): void {\r\n this.dataLoading = true;\r\n this.save()\r\n .then((response) => {\r\n (this.$rootScope as any).formSaved = true;\r\n this.DevelopmentScheduleFormUnitsDetailForm.$setPristine();\r\n this.developmentScheduleForm.$setPristine();\r\n this.messageContent = \"Your changes have been saved.\";\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while saving. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.showInformationMessage = true;\r\n });\r\n }\r\n\r\n goToCaseDashboard(saveChanges: boolean): void {\r\n if (saveChanges && this.roleService.IsLender != true) {\r\n this.save().then((response) => {\r\n (this.$rootScope as any).formSaved = true;\r\n });\r\n }\r\n this.$location.path(\"/casedashboard/\" + this.currentCaseNumber);\r\n }\r\n\r\n closeModal(): void {\r\n this.showInformationMessage = false;\r\n this.$location.path(\"/casedashboard/\" + this.currentCaseNumber);\r\n }\r\n\r\n updateGIA() {\r\n this.developmentInput.DI_AreaSalesAreaResidential = this.OverallSQft;\r\n this.$DevelopmentInputService\r\n .addUpdatereturnonlyid(this.developmentInput)\r\n .then((devInputResponse) => {\r\n this.developmentInput.Id = devInputResponse;\r\n this.developmentInput.DI_AreaSalesAreaResidential = this.OverallSQft;\r\n this.CalcAll();\r\n this.setAllFormsPristine();\r\n this.saved = true;\r\n return devInputResponse;\r\n });\r\n this.CalcOverallSQft();\r\n }\r\n\r\n updateGDV() {\r\n this.developmentInput.CI_GDV = this.OverallGDVLocal;\r\n this.$DevelopmentInputService\r\n .addUpdatereturnonlyid(this.developmentInput)\r\n .then((devInputResponse) => {\r\n this.developmentInput.Id = devInputResponse;\r\n this.developmentInput.CI_GDV = this.OverallGDVLocal;\r\n this.CalcAll();\r\n this.setAllFormsPristine();\r\n this.saved = true;\r\n return devInputResponse;\r\n });\r\n }\r\n\r\n //File upload\r\n\r\n calculateTotalFiles(filter: number) {\r\n if (this.fileUpload) {\r\n return this.fileUpload.length;\r\n }\r\n }\r\n\r\n calculateFilesForThisModule() {\r\n this.fileUpload = this.fileUpload.filter(\r\n (file) => file.Module === this.thisModuleSection,\r\n );\r\n if (this.fileUpload.length <= 0) {\r\n this.seeInfo = true;\r\n } else {\r\n this.seeInfo = false;\r\n }\r\n }\r\n\r\n onFileSelect(files: FileAttachmentDTO[], module?: ModuleEnum) {\r\n if (files.length > 0) {\r\n //if case has no id it must be saved first\r\n if (this.case.Id < 1) {\r\n this.$caseService\r\n .addUpdate(this.case)\r\n .then((response) => {\r\n this.case = response;\r\n this.onFileSelect(files); //call itself and then exit as should now be saved so should be able to run\r\n return;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.calculateFilesForThisModule();\r\n this.openModal = false;\r\n });\r\n return;\r\n }\r\n\r\n this.fileAttachmentService\r\n .UploadFileLstInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.case.Id,\r\n this.fileUpload,\r\n module,\r\n )\r\n .then((result) => {\r\n this.calculateFilesForThisModule();\r\n this.openModal = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: FileAttachmentDTO) {\r\n this.fileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n deleteFile(file: FileAttachmentDTO) {\r\n this.fileUpload.splice(this.fileUpload.indexOf(file), 1);\r\n this.fileAttachmentService.markasdeleted(file.Id).then((result) => {\r\n this.calculateFilesForThisModule();\r\n });\r\n }\r\n\r\n uploadYourOwnClicked() {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.openModal = true;\r\n }\r\n\r\n setAreaVal(area) {\r\n if (area === undefined || area === null) {\r\n return 0;\r\n } else {\r\n return area;\r\n }\r\n }\r\n\r\n populatePropertyArrays() {\r\n // First clear them:\r\n this.houses = [];\r\n this.flats = [];\r\n this.communalAreas = [];\r\n this.commercialUnits = [];\r\n this.parkingSpaces = [];\r\n\r\n // Then populate them from the main objects array\r\n this.houses = this.FilterMainObjects(ScheduleTypeEnum.House);\r\n this.flats = this.FilterMainObjects(ScheduleTypeEnum.Flat);\r\n this.communalAreas = this.FilterMainObjects(ScheduleTypeEnum.Communal);\r\n this.commercialUnits = this.FilterMainObjects(ScheduleTypeEnum.Commercial);\r\n this.parkingSpaces = this.FilterMainObjects(ScheduleTypeEnum.Parking);\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n\r\n autofillSchedule() {\r\n this.developmentInput.HowManyHouses = 2;\r\n this.houses = [];\r\n var house1 = {\r\n DevelopmentInputId: this.developmentInput.Id,\r\n ScheduleType: ScheduleTypeEnum.House,\r\n LocationIdentifier: \"1\",\r\n Description: \"Detached house\",\r\n NumberOfBeds: 4,\r\n NumberOfBaths: 3,\r\n Tenure: TenureEnum.Freehold,\r\n Area: 1500,\r\n SalesPrice: 1000000,\r\n } as DevelopmentInputScheduleDTO;\r\n\r\n this.houses.push(house1);\r\n\r\n var house2 = {\r\n DevelopmentInputId: this.developmentInput.Id,\r\n ScheduleType: ScheduleTypeEnum.House,\r\n LocationIdentifier: \"2\",\r\n Description: \"Semi-detached house\",\r\n NumberOfBeds: 4,\r\n NumberOfBaths: 3,\r\n Tenure: TenureEnum.Freehold,\r\n Area: 1500,\r\n SalesPrice: 1500000,\r\n } as DevelopmentInputScheduleDTO;\r\n\r\n this.houses.push(house2);\r\n\r\n this.developmentInput.Houses_GDV = 2500000;\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { DevelopmentWithNoLoginDTO } from \"@js/DTO/DevelopmentWithNoLoginDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { OrganisationLinkDTO } from \"@js/DTO/OrgnisationLinkDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { DevelopmentTrackRecordTypeEnum } from \"@js/models/enum/DevelopmentTrackRecordTypeEnum.cs.d\";\r\nimport { ExitStrategyEnum } from \"@js/models/enum/ExitStrategyEnum.cs.d\";\r\nimport { LocationEnum } from \"@js/models/enum/LocationEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeDetailEnum } from \"@js/models/enum/PropertyTypeDetailEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { SharedCriteriaService } from \"@js/services/Deal/SharedCriteriaService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { DevelopmentInputWithNoLoginService } from \"@js/services/DevelopmentInputWithNoLoginService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { SharedDataService } from \"@js/services/SharedDataService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class DevelopmentInputScreenController {\r\n loanCriteria: DevelopmentInputDTO;\r\n snapshotLoanCriteria: DevelopmentInputDTO;\r\n step: number = 1;\r\n dateOfOrigPurchMonth: number;\r\n dateOfOrigPurchYear: number;\r\n DevelopmentInputForm: ng.IFormController;\r\n guidanceCheckbox: boolean = true;\r\n buildCostPerArea: number;\r\n searchid: number = null;\r\n caseid: number = null;\r\n existingClassUses: number = 0;\r\n classUses: {} = {};\r\n projectType: {}[] = [];\r\n totalBuild: number = 0;\r\n totalLand: number = 0;\r\n multiPartForm1: ng.IFormController;\r\n multiPartForm2: ng.IFormController;\r\n multiPartForm3: ng.IFormController;\r\n\r\n showVideo: boolean = false;\r\n\r\n //boolean to fetch largest or matcing results\r\n isMaximumLoanRequired: boolean = true;\r\n\r\n tempLoanRequired: number;\r\n\r\n //array describing form sections\r\n formSectionNames = [\r\n {\r\n label: \"Property\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Build Costs\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Borrowing\",\r\n visible: true,\r\n },\r\n ];\r\n\r\n isLoggedInUser: boolean = false;\r\n isLegacyUser: boolean = false;\r\n isAdmin: boolean = false;\r\n isBroker: boolean = false;\r\n isBorrower: boolean = false;\r\n isLender: boolean = false;\r\n brokerOrAdminUser: ApplicationUserDTO;\r\n existingUsers: UserSimpleDTO[];\r\n showShareSearchtoClientModal: boolean = false;\r\n clientFirstName: string;\r\n clientSurname: string;\r\n clientEmail: string;\r\n clientPhoneNumber: string;\r\n clientId: string = null;\r\n showClientDetails: boolean = false;\r\n existingborrower: boolean;\r\n loadingData: boolean = false;\r\n dataLoading: boolean = false;\r\n isResultScreen: boolean = false;\r\n isIntroduceronly: boolean = false;\r\n selectedBorrower: UserSimpleDTO = null;\r\n showAutofill: boolean = false;\r\n\r\n totalLenders: number = 0;\r\n brokerageOrg: OrganisationDTO;\r\n showContactBrokerModal: boolean = false;\r\n showMessageToborrower: boolean = false;\r\n messageToborrower: string = \"\";\r\n user: ApplicationUserDTO;\r\n stepName: string = \"\";\r\n moveContactBrokerBtnInMiddle: boolean = false;\r\n showActionPanel: boolean = false;\r\n userRole: string = \"\";\r\n userDetails: string = null;\r\n projectName: string = null;\r\n applicationName: string = null;\r\n\r\n organisationLink: OrganisationLinkDTO;\r\n orgCode: string = \"\";\r\n noPermissionErrorMsg: string = \"\";\r\n\r\n locationOptions = [];\r\n\r\n //Postcode properties\r\n showPostcodeErrorMessage: boolean = false;\r\n postcodeErrorMsg: string;\r\n previouslySelectedLocation: LocationEnum;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"DevelopmentInputService\",\r\n \"$location\",\r\n \"$q\",\r\n \"CaseService\",\r\n \"RoleService\",\r\n \"UserService\",\r\n \"AuthService\",\r\n \"OrganisationService\",\r\n \"DevelopmentInputWithNoLoginService\",\r\n \"LenderService\",\r\n \"SharedDataService\",\r\n \"OrganisationLinkService\",\r\n \"EventLogService\",\r\n \"SelectListService\",\r\n \"SharedCriteriaService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private $location: ng.ILocationService,\r\n protected $q: ng.IQService,\r\n private caseService: CaseService,\r\n private roleService: RoleService,\r\n private userService: UserService,\r\n private $auth: AuthService,\r\n private organisationService: OrganisationService,\r\n private $DevelopmentInputWithNoLoginService: DevelopmentInputWithNoLoginService,\r\n private lenderService: LenderService,\r\n private sharedDataService: SharedDataService,\r\n private organisationLinkService: OrganisationLinkService,\r\n private eventLogService: EventLogService,\r\n private selectListService: SelectListService,\r\n private sharedCriteriaService: SharedCriteriaService,\r\n ) {\r\n try {\r\n if (this.$location.path().startsWith(\"/e/criteria\")) {\r\n // for enterprise and unique links we should now use the new dev finance search so have commented out the code below\r\n if (this.$routeParams.linkId) {\r\n this.$location.path(\r\n `/e/devfinancecriteria/0/${this.$routeParams.linkId}`,\r\n );\r\n } else {\r\n this.$location.path(\"/e/devfinancecriteria\");\r\n }\r\n } else if (\r\n this.$location.path().startsWith(\"/criteria\") &&\r\n (!this.$routeParams.SearchId || this.$routeParams.SearchId == 0)\r\n ) {\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n this.$location.path(\"/devfinancecriteria\");\r\n } else {\r\n this.$location.path(\"/e/devfinancecriteria\");\r\n }\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.isAdmin = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (this.isBroker) {\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.gotoDashboard();\r\n }\r\n }\r\n }\r\n\r\n if (result.filter((x) => x.toLowerCase() == \"client\").length > 0) {\r\n this.sharedDataService.isBorrower = true;\r\n }\r\n\r\n if (\r\n result.filter((x) => x.toLowerCase() == \"lender\").length > 0 &&\r\n !this.isAdmin\r\n ) {\r\n this.isLender = true;\r\n }\r\n\r\n if (\r\n result.filter((x) => x == \"Introducer\").length > 0 &&\r\n result.filter((x) => x == \"Broker\").length == 0 &&\r\n result.filter((x) => x == \"Client\").length == 0 &&\r\n result.filter((x) => x == \"Admin\").length == 0\r\n ) {\r\n this.isIntroduceronly = true;\r\n }\r\n\r\n if (\r\n this.$routeParams.SearchId == 0 &&\r\n this.$routeParams.CaseId == 0 &&\r\n this.step == 1\r\n ) {\r\n if (this.isBroker || this.isAdmin) {\r\n if (sessionStorage.getItem(\"searchuser\")) {\r\n let data = sessionStorage.getItem(\"searchuser\");\r\n let userdetails = JSON.parse(data);\r\n this.clientFirstName = userdetails.clientFirstName;\r\n this.clientSurname = userdetails.clientSurname;\r\n this.clientEmail = userdetails.clientEmail;\r\n this.clientPhoneNumber = userdetails.clientPhoneNumber;\r\n this.clientId = userdetails.clientId;\r\n this.existingborrower = userdetails.existingborrower;\r\n this.loanCriteria.SearchName = userdetails.searchName;\r\n if (this.existingborrower) {\r\n this.showClientDetails = true;\r\n }\r\n } else {\r\n this.loanCriteria.SearchName = this.loanCriteria.SearchName\r\n ? this.loanCriteria.SearchName\r\n : null;\r\n }\r\n\r\n if (\r\n this.$DevelopmentInputservice.getHasValidStatustoShowShareSearchModal()\r\n ) {\r\n if (sessionStorage.getItem(\"skip\")) {\r\n this.showShareSearchtoClientModal = false;\r\n } else {\r\n this.showShareSearchtoClientModal = true;\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n }\r\n }\r\n if (this.isLender) {\r\n if (sessionStorage.getItem(\"skip\")) {\r\n this.showShareSearchtoClientModal = false;\r\n } else {\r\n this.showShareSearchtoClientModal = true;\r\n }\r\n }\r\n }\r\n\r\n this.userService.getcurentuserrecord().then((result) => {\r\n this.brokerOrAdminUser = result;\r\n this.isLegacyUser = result.IsLegacyUser;\r\n });\r\n });\r\n }\r\n\r\n // If we have an introducer code set, let's store a cookie.\r\n if (this.$routeParams.introducercode) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams.introducercode, {\r\n expires: expiryDate,\r\n });\r\n } else if (this.$routeParams[\"ic\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams[\"ic\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n // If we have an invite code set, let's store a cookie.\r\n if (this.$routeParams.invitecode) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"invite_code\", this.$routeParams.invitecode, {\r\n expires: expiryDate,\r\n });\r\n }\r\n // If we have an org code set, let's store a cookie.\r\n if (this.$routeParams[\"orgc\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"org_code\", this.$routeParams[\"orgc\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n if (this.$routeParams.SearchId && this.$routeParams.SearchId > 0) {\r\n if (this.$routeParams.CaseId && this.$routeParams.CaseId > 0) {\r\n this.caseService.fetch(this.$routeParams.CaseId).then((result) => {\r\n if (result.CaseStatus == 0 || result.CaseStatus == 1) {\r\n this.caseService.updateTubeMap(CaseStatusEnum.InProgress);\r\n } else {\r\n this.caseService.updateTubeMap(result.CaseStatus);\r\n }\r\n });\r\n } else {\r\n this.caseService.updateTubeMap(null);\r\n }\r\n } else {\r\n this.caseService.updateTubeMap(CaseStatusEnum.Search);\r\n }\r\n\r\n if (this.$routeParams.SearchId > 0) {\r\n this.searchid = this.$routeParams.SearchId;\r\n } else {\r\n this.searchid = 0;\r\n }\r\n if (this.$routeParams.CaseId > 0) {\r\n this.caseid = this.$routeParams.CaseId;\r\n } else {\r\n this.caseid = 0;\r\n }\r\n if (this.$routeParams.StepNumber) {\r\n this.step =\r\n this.$routeParams.StepNumber > 3 || this.$routeParams.StepNumber < 1\r\n ? 1\r\n : this.$routeParams.StepNumber;\r\n }\r\n\r\n //redirect to full path if full path not given\r\n if (\r\n (!this.$routeParams.SearchId ||\r\n !this.$routeParams.CaseId ||\r\n !this.$routeParams.StepNumber) &&\r\n (this.$routeParams.uniqueId == undefined ||\r\n this.$routeParams.uniqueId == \"null\")\r\n ) {\r\n this.go(\r\n \"/criteria/\" + this.searchid + \"/\" + this.caseid + \"/\" + this.step,\r\n false,\r\n );\r\n }\r\n\r\n this.snapshotLoanCriteria = {\r\n ...(this.$rootScope as any).snapshotLoanCriteria,\r\n };\r\n\r\n // See if we've got an existing search in database.\r\n if (this.searchid > 0) {\r\n this.$DevelopmentInputservice.fetch(this.searchid).then((response) => {\r\n this.loanCriteria = response;\r\n this.tempLoanRequired = response.CI_Dev_LoanReq;\r\n if (response.CI_Dev_LoanReq > 0) {\r\n this.isMaximumLoanRequired = false;\r\n }\r\n if (this.loanCriteria.CI_Dev_DateOfOrigPurch) {\r\n this.dateOfOrigPurchMonth =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getMonth() + 1;\r\n this.dateOfOrigPurchYear =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getFullYear() % 100;\r\n }\r\n this.existingClassUses = this.loanCriteria.DI_Dev_ClassUses;\r\n this.initClassUses();\r\n this.initProjectTypes();\r\n });\r\n } else if (\r\n this.$routeParams.uniqueId !== undefined &&\r\n this.$routeParams.uniqueId != \"null\"\r\n ) {\r\n this.$DevelopmentInputWithNoLoginService\r\n .fetchByUniqueId(this.$routeParams.uniqueId)\r\n .then((results) => {\r\n this.loanCriteria = {} as DevelopmentInputDTO;\r\n (Object).assign(this.loanCriteria, results);\r\n this.tempLoanRequired = this.loanCriteria.CI_Dev_LoanReq;\r\n if (this.loanCriteria.CI_Dev_LoanReq > 0) {\r\n this.isMaximumLoanRequired = false;\r\n }\r\n if (this.loanCriteria.CI_Dev_DateOfOrigPurch) {\r\n this.dateOfOrigPurchMonth =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getMonth() + 1;\r\n this.dateOfOrigPurchYear =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getFullYear() % 100;\r\n }\r\n this.existingClassUses = this.loanCriteria.DI_Dev_ClassUses;\r\n this.initClassUses();\r\n this.initProjectTypes();\r\n });\r\n } else if ((this.$rootScope as any).loanCriteria) {\r\n this.loanCriteria = { ...(this.$rootScope as any).loanCriteria };\r\n this.tempLoanRequired = this.loanCriteria.CI_Dev_LoanReq;\r\n if (this.loanCriteria.CI_Dev_LoanReq > 0) {\r\n this.isMaximumLoanRequired = false;\r\n }\r\n if (this.loanCriteria.CI_Dev_DateOfOrigPurch) {\r\n this.dateOfOrigPurchMonth =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getMonth() + 1;\r\n this.dateOfOrigPurchYear =\r\n this.loanCriteria.CI_Dev_DateOfOrigPurch.getFullYear() % 100;\r\n }\r\n this.existingClassUses = this.loanCriteria.DI_Dev_ClassUses;\r\n this.initClassUses();\r\n this.initProjectTypes();\r\n } else {\r\n this.loanCriteria = {\r\n CI_Dev_Contingency: 0.05,\r\n CI_Dev_DateOfOrigPurch: new Date(),\r\n ShowLenderInfoBrokerOverride: true,\r\n } as DevelopmentInputDTO;\r\n this.loanCriteria.CI_Dev_Locations = LocationEnum.None;\r\n this.loanCriteria.CI_EndPropType = PropertyTypeEnum.None;\r\n this.loanCriteria.CI_Dev_ExitStrategy = ExitStrategyEnum.None;\r\n this.loanCriteria.DI_AreaUnit = 1;\r\n this.loanCriteria.hasPostcode = true;\r\n\r\n // If the current user is a broker then record the broker info on the search record (devleopmentInput)\r\n\r\n if (this.isLoggedInUser) {\r\n this.roleService.isBroker().then((isBroker: boolean) => {\r\n if (isBroker == true) {\r\n this.userService\r\n .getcurentuserrecord()\r\n .then((currentUser: ApplicationUserDTO) => {\r\n this.loanCriteria.BrokerUserId = currentUser.Id;\r\n this.loanCriteria.BrokerOrganisationId =\r\n currentUser.OrganisationId;\r\n });\r\n }\r\n });\r\n }\r\n if (!this.isLoggedInUser && this.sharedDataService.isBorrower) {\r\n //if (orgCode) {\r\n // this.organisationService.getOrganisationByOrgCode(orgCode).then((organisation: OrganisationDTO) => {\r\n // this.loanCriteria.BrokerOrganisationId = organisation.Id;\r\n // });\r\n //} else {\r\n // this.organisationService.getBrickflowBrokerOrg().then((organisation: OrganisationDTO) => {\r\n // this.loanCriteria.BrokerOrganisationId = organisation.Id;\r\n // });\r\n //}\r\n var data;\r\n\r\n //if (window.self == window.top) {\r\n // data = sessionStorage.getItem('userDetails');\r\n\r\n // if (sessionStorage.getItem('organisationLinkId')) this.loanCriteria.OrganisationLinkId = Number(sessionStorage.getItem('organisationLinkId'));\r\n\r\n // if (sessionStorage.getItem('sourceUrl')) this.loanCriteria.LeadSourceUrl = sessionStorage.getItem('sourceUrl');\r\n\r\n //} else {\r\n // data = this.sharedDataService.userDetails;\r\n\r\n // if (this.sharedDataService.organisationLinkId != null) this.loanCriteria.OrganisationLinkId = Number(this.sharedDataService.organisationLinkId);\r\n // if (this.sharedDataService.leadSourceUrl != null) this.loanCriteria.LeadSourceUrl = this.sharedDataService.leadSourceUrl;\r\n\r\n //}\r\n\r\n //if (data) {\r\n // let userdetails = JSON.parse(data);\r\n\r\n // let userFullName = userdetails.FullName;\r\n // let spaceIndex = userFullName.indexOf(' ');\r\n\r\n // let firstName = '';\r\n // let lastName = '';\r\n\r\n // // if not space has been added to the name then put the whole name in the first name field\r\n // if (spaceIndex == -1) {\r\n // firstName = userFullName;\r\n // } else {\r\n // firstName = userFullName.substring(0, userFullName.indexOf(' '));\r\n // lastName = userFullName.substring(userFullName.indexOf(' ') + 1);\r\n // }\r\n\r\n // this.loanCriteria.IntroduceeFirstName = firstName;\r\n // this.loanCriteria.IntroduceeSurname = lastName;\r\n // this.loanCriteria.IntroduceeEmail = userdetails.Email;\r\n // this.loanCriteria.IntroduceePhone = userdetails.PhoneNumber;\r\n\r\n // var currentDate = new Date();\r\n // var projectName = this.sharedDataService.projectName;\r\n // this.loanCriteria.SearchName = projectName ? projectName : firstName + ' ' + lastName + ' Loan Search ' + currentDate.getDate() + \"/\" + (currentDate.getMonth() + 1) + \"/\" + currentDate.getFullYear()\r\n //}\r\n //}).catch ((error) => {\r\n // console.error(\"Failed to get user details: \", error);\r\n //});\r\n }\r\n\r\n this.initClassUses();\r\n this.initProjectTypes();\r\n }\r\n\r\n if (window.self == window.top) {\r\n this.updateGuidanceState();\r\n\r\n $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n this.updateGuidanceState();\r\n });\r\n }\r\n } catch (e) {\r\n console.error(\"Error: \", e);\r\n }\r\n }\r\n\r\n indexPopup(methodName: string) {\r\n this.$rootScope.$broadcast(methodName);\r\n }\r\n\r\n initClassUses() {\r\n let classUses: {} = {};\r\n for (let i = 1; i >= 0; i *= 2) {\r\n if (this.loanCriteria.DI_Dev_ClassUses >= i) {\r\n //number is in enum sum, add it to object\r\n if (this.loanCriteria.DI_Dev_ClassUses & i) {\r\n classUses[i] = true;\r\n }\r\n } else {\r\n this.classUses = classUses;\r\n\r\n //watch and update classuses\r\n this.$scope.$watchCollection(\"ctrl.classUses\", (newVal: {}) => {\r\n let valuesList = Object.keys(newVal);\r\n let total: number = 0;\r\n //tot up all the numeric keys (class use enums)\r\n valuesList.forEach((v, i) => {\r\n let keyToNum = Number(v);\r\n if (newVal[keyToNum]) {\r\n total += keyToNum;\r\n }\r\n });\r\n this.loanCriteria.DI_Dev_ClassUses = total;\r\n });\r\n\r\n return;\r\n }\r\n }\r\n }\r\n\r\n initProjectTypes() {\r\n if (!this.loanCriteria.ProjectType) {\r\n this.loanCriteria.ProjectType = 0;\r\n } else {\r\n for (let i = 1; i >= 0; i *= 2) {\r\n if (this.loanCriteria.ProjectType >= i) {\r\n //number is in enum sum, add it to object\r\n if (this.loanCriteria.ProjectType & i) {\r\n this.projectType[i] = true;\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getTubeMapValue() {\r\n return this.caseService.getTubeMap();\r\n }\r\n\r\n updateProjectTypes(item: DevelopmentTrackRecordTypeEnum) {\r\n //if we are setting item to false and item exists, remove it, else add it\r\n if (\r\n this.projectType[item] === true &&\r\n !!!(this.loanCriteria.ProjectType & item)\r\n ) {\r\n this.loanCriteria.ProjectType += item;\r\n } else {\r\n this.loanCriteria.ProjectType -= item;\r\n }\r\n }\r\n\r\n back(): void {\r\n if (this.step > 1) {\r\n this.step--;\r\n if (this.$location.path().startsWith(\"/e/criteria\")) {\r\n if (this.$routeParams.linkId) {\r\n this.go(\r\n \"/e/criteria/\" +\r\n this.searchid +\r\n \"/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.step +\r\n \"/\" +\r\n this.$routeParams.linkId,\r\n );\r\n } else {\r\n this.go(\r\n \"/e/criteria/\" +\r\n this.searchid +\r\n \"/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.step,\r\n );\r\n }\r\n } else {\r\n this.go(\r\n \"/criteria/\" + this.searchid + \"/\" + this.caseid + \"/\" + this.step,\r\n );\r\n }\r\n } else if (this.step == 1 && !this.isLoggedInUser) {\r\n this.go(\"/\");\r\n }\r\n }\r\n\r\n formChanged(): void {\r\n (this.$rootScope as any).formSaved = false;\r\n }\r\n\r\n setNewSearch(): void {\r\n var criteriaChanged = true;\r\n\r\n //Store that this is a new search\r\n if (sessionStorage.getItem(\"skip\") == \"true\") {\r\n criteriaChanged = !this.shallowCompare(\r\n this.loanCriteria,\r\n this.snapshotLoanCriteria,\r\n );\r\n }\r\n\r\n if (window.self == window.top) {\r\n sessionStorage.setItem(\"newSearch\", criteriaChanged.toString());\r\n } else {\r\n this.organisationService.sendDataToParent(\r\n \"newSearch\",\r\n criteriaChanged.toString(),\r\n );\r\n }\r\n }\r\n\r\n next(): void {\r\n if (this.step >= 3) {\r\n this.setNewSearch();\r\n //go to results\r\n if (!this.loanCriteria.CI_Dev_LoanReq) {\r\n this.loanCriteria.CI_Dev_LoanReq = 0;\r\n }\r\n if (this.caseid > 0 && this.searchid > 0) {\r\n //If attached case, save changes and go to case related search results\r\n this.save().then((response) => {\r\n this.$location.path(\"/results/\" + this.searchid + \"/\" + this.caseid);\r\n });\r\n } else if (this.searchid > 0) {\r\n //If a previously saved search, save changes and go to existing search results page\r\n this.save().then((response) => {\r\n this.$location.path(\"/results/\" + this.searchid);\r\n });\r\n } else if (\r\n this.$routeParams.uniqueId !== undefined &&\r\n this.$routeParams.uniqueId != \"null\"\r\n ) {\r\n this.save().then((response) => {\r\n this.$location.path(\"/referredSearch/\" + this.$routeParams.uniqueId);\r\n });\r\n } else {\r\n // Store the search on rootScope.\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n (this.$rootScope as any).formSaved = true;\r\n\r\n if (window.self == window.top) sessionStorage.removeItem(\"skip\");\r\n\r\n if (\r\n !this.isLoggedInUser &&\r\n this.isBorrower &&\r\n this.$location.path().startsWith(\"/e/criteria\")\r\n ) {\r\n this.loanCriteria.BrokerOrganisationId = this.brokerageOrg.Id;\r\n if (this.$routeParams.linkId) {\r\n this.loanCriteria.OrganisationLinkId = Number(\r\n this.$routeParams.linkId,\r\n );\r\n }\r\n\r\n if (this.loanCriteria.UniqueRef) {\r\n var result = {} as DevelopmentWithNoLoginDTO;\r\n (Object).assign(result, this.loanCriteria);\r\n this.$DevelopmentInputWithNoLoginService\r\n .saveChangesToReferredSearch(result, this.loanCriteria.UniqueRef)\r\n .then((result) => {\r\n //Go to fresh results page\r\n this.$location.path(\"/results\");\r\n });\r\n } else {\r\n //Go to fresh results page\r\n this.$location.path(\"/results\");\r\n }\r\n } else {\r\n //Go to fresh results page\r\n this.$location.path(\"/results\");\r\n }\r\n }\r\n } else {\r\n this.step++;\r\n //go to next screen\r\n if (this.caseid > 0 && this.searchid > 0) {\r\n this.save().then((response) => {\r\n this.$location.path(\r\n \"/criteria/\" + this.searchid + \"/\" + this.caseid + \"/\" + this.step,\r\n );\r\n });\r\n } else if (this.searchid > 0) {\r\n this.save().then((response) => {\r\n this.$location.path(\r\n \"/criteria/\" + this.searchid + \"/\" + this.caseid + \"/\" + this.step,\r\n );\r\n });\r\n } else if (\r\n this.$routeParams.uniqueId !== undefined &&\r\n this.$routeParams.uniqueId != \"null\"\r\n ) {\r\n this.save().then((response) => {\r\n this.$location.path(\r\n \"/referredsearchcriteria/\" +\r\n this.$routeParams.uniqueId +\r\n \"/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.step,\r\n );\r\n });\r\n } else {\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n if (this.$location.path().startsWith(\"/e/criteria\")) {\r\n if (this.$routeParams.linkId) {\r\n this.$location.path(\r\n \"/e/criteria/\" +\r\n this.searchid +\r\n \"/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.step +\r\n \"/\" +\r\n this.$routeParams.linkId,\r\n );\r\n } else {\r\n this.$location.path(\r\n \"/e/criteria/\" +\r\n this.searchid +\r\n \"/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.step,\r\n );\r\n }\r\n } else {\r\n this.$location.path(\r\n \"/criteria/\" + this.searchid + \"/\" + this.caseid + \"/\" + this.step,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n save(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n if (!this.loanCriteria) {\r\n defer.reject(\"not ready\");\r\n }\r\n\r\n //Only save if the user is not lender\r\n if (!this.roleService.IsLender) {\r\n // JNG clear selected results, as this is effectively a new query and it may have different results available.\r\n this.loanCriteria.SelectedResults = [];\r\n\r\n if (\r\n this.$routeParams.uniqueId !== undefined &&\r\n this.$routeParams.uniqueId != \"null\"\r\n ) {\r\n var result = {} as DevelopmentWithNoLoginDTO;\r\n (Object).assign(result, this.loanCriteria);\r\n this.$DevelopmentInputWithNoLoginService\r\n .saveChangesToReferredSearch(result, this.$routeParams.uniqueId)\r\n .then((response) => {\r\n defer.resolve(response);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n } else {\r\n this.$DevelopmentInputservice\r\n .addUpdatereturnonlyid(this.loanCriteria)\r\n .then((response) => {\r\n defer.resolve(response);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n }\r\n }\r\n return defer.promise;\r\n }\r\n\r\n updateGuidanceState() {\r\n this.guidanceCheckbox =\r\n this.$cookies.get(\"guidance\") === \"on\" ||\r\n this.$cookies.get(\"guidance\") === undefined;\r\n }\r\n\r\n getGuidanceSwitchState() {\r\n if (!this.$cookies.get(\"guidance\")) {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"on\") {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"off\") {\r\n this.guidanceCheckbox = false;\r\n } else {\r\n this.guidanceCheckbox = true;\r\n }\r\n return this.guidanceCheckbox;\r\n }\r\n\r\n recordGuidanceCookie() {\r\n var guidanceSwitchState: string;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n if (this.guidanceCheckbox == true) {\r\n guidanceSwitchState = \"on\";\r\n } else {\r\n guidanceSwitchState = \"off\";\r\n }\r\n this.$cookies.put(\"guidance\", guidanceSwitchState, { expires: expiryDate });\r\n this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n }\r\n\r\n updateClassUse() {\r\n //this.loanCriteria.DI_Dev_ClassUses has now changed to the single new selection or group of selections. Subtract current set of selections from last state to get last state\r\n let newSelections: number = this.loanCriteria.DI_Dev_ClassUses;\r\n let lastState: number = this.existingClassUses;\r\n //have we re-selected any options\r\n if (!!(lastState & newSelections)) {\r\n this.loanCriteria.DI_Dev_ClassUses = lastState - newSelections;\r\n } else {\r\n this.loanCriteria.DI_Dev_ClassUses = lastState + newSelections;\r\n }\r\n this.existingClassUses = this.loanCriteria.DI_Dev_ClassUses;\r\n }\r\n\r\n go(path: string, save: boolean = true): void {\r\n if (!save) {\r\n this.$location.path(path);\r\n return;\r\n }\r\n\r\n if (this.searchid > 0) {\r\n this.save().then(() => {\r\n this.$location.path(path);\r\n });\r\n } else {\r\n if (this.loanCriteria) {\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n }\r\n this.$location.path(path);\r\n }\r\n }\r\n\r\n setDate(dateToUpdate: Date, month: number, year: number) {\r\n // Two digit years!\r\n var fullYear: number;\r\n var today = new Date();\r\n if (today.getFullYear() < 2000 + year) {\r\n // If it's after this year, we probably mean 19xx.\r\n fullYear = 1900 + year;\r\n } else {\r\n // Otherwise it's probably in the 2000s.\r\n fullYear = 2000 + year;\r\n }\r\n dateToUpdate.setUTCFullYear(fullYear);\r\n // Note: Months are 0 based.\r\n dateToUpdate.setUTCMonth(month - 1);\r\n }\r\n\r\n recalcCosts(updatedField: string): void {\r\n switch (updatedField) {\r\n case \"CI_Dev_BuildCosts\":\r\n this.recalcCostPerArea();\r\n break;\r\n case \"CI_Dev_Contingency\":\r\n this.recalcCostPerArea();\r\n break;\r\n case \"DC_AreaAcquisition\":\r\n this.recalcCostPerArea();\r\n break;\r\n }\r\n }\r\n\r\n recalcTotalBuildCost(): void {\r\n let res: number = 0;\r\n //Case 1 - recalc Build costs\r\n if (\r\n this.loanCriteria.CI_Dev_Contingency &&\r\n this.loanCriteria.DC_AreaAcquisition &&\r\n this.loanCriteria.DC_BuildCostPerArea\r\n ) {\r\n res =\r\n (this.loanCriteria.DC_BuildCostPerArea /\r\n (1 + this.loanCriteria.CI_Dev_Contingency)) *\r\n this.loanCriteria.DC_AreaAcquisition;\r\n this.loanCriteria.CI_Dev_BuildCosts = res;\r\n }\r\n }\r\n\r\n checkValidationCriteria(index: number) {\r\n if (index === 0) {\r\n if (!this.disabledPropertyScreen()) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n if (index === 1) {\r\n if (this.multiPartForm2 && this.multiPartForm2.$valid) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n if (index === 2) {\r\n if (this.multiPartForm3 && this.multiPartForm3.$valid) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n //recalcContingency(): void {\r\n // //let res: number = 0;\r\n // ////Case 2 - recalc Contingency\r\n // //if (this.loanCriteria.CI_Dev_BuildCosts && this.loanCriteria.DC_AreaAcquisition && this.loanCriteria.DC_BuildCostPerArea) {\r\n // // res = ((this.loanCriteria.DC_BuildCostPerArea * this.loanCriteria.DC_AreaAcquisition) / this.loanCriteria.CI_Dev_BuildCosts) - 1;\r\n // // this.loanCriteria.CI_Dev_Contingency = res;\r\n // //}\r\n //}\r\n\r\n recalcGia(): void {\r\n let res: number = 0;\r\n //Case 3 - recalc GIA\r\n if (\r\n this.loanCriteria.CI_Dev_BuildCosts &&\r\n this.loanCriteria.CI_Dev_Contingency &&\r\n this.loanCriteria.DC_BuildCostPerArea\r\n ) {\r\n res =\r\n (this.loanCriteria.CI_Dev_BuildCosts *\r\n (this.loanCriteria.CI_Dev_Contingency + 1)) /\r\n this.loanCriteria.DC_BuildCostPerArea;\r\n this.loanCriteria.DC_AreaAcquisition = res;\r\n }\r\n }\r\n\r\n recalcCostPerArea(): void {\r\n let res: number = 0;\r\n //Case 4 - recalc cost per sq. m\r\n if (\r\n this.loanCriteria.CI_Dev_BuildCosts &&\r\n this.loanCriteria.CI_Dev_Contingency &&\r\n this.loanCriteria.DC_AreaAcquisition\r\n ) {\r\n res =\r\n (this.loanCriteria.CI_Dev_BuildCosts *\r\n (1 + Number(this.loanCriteria.CI_Dev_Contingency))) /\r\n this.loanCriteria.DC_AreaAcquisition;\r\n this.loanCriteria.DC_BuildCostPerArea = res;\r\n\r\n if (\r\n this.loanCriteria.CI_EndPropType === 2 ||\r\n this.loanCriteria.CI_EndPropType === 1\r\n ) {\r\n this.loanCriteria.DI_AreaSalesAreaResidential =\r\n this.loanCriteria.DC_AreaAcquisition;\r\n }\r\n if (this.loanCriteria.CI_EndPropType != 1) {\r\n this.loanCriteria.DI_AreaSalesAreaCommercial =\r\n this.loanCriteria.DC_AreaAcquisition;\r\n }\r\n }\r\n }\r\n\r\n calcTotalBuild(): number {\r\n if (!this.loanCriteria) {\r\n return 0;\r\n }\r\n\r\n let res: number = 0;\r\n\r\n // Add build costs\r\n if (this.loanCriteria.CI_Dev_BuildCosts) {\r\n res += Number(this.loanCriteria.CI_Dev_BuildCosts);\r\n }\r\n\r\n // Add contingency cost\r\n if (\r\n this.loanCriteria.CI_Dev_BuildCosts &&\r\n this.loanCriteria.CI_Dev_Contingency\r\n ) {\r\n res +=\r\n Number(this.loanCriteria.CI_Dev_BuildCosts) *\r\n Number(this.loanCriteria.CI_Dev_Contingency);\r\n }\r\n\r\n // Add Professional costs and charges\r\n if (this.loanCriteria.CI_Dev_AdditionalOngoingCosts) {\r\n res += Number(this.loanCriteria.CI_Dev_AdditionalOngoingCosts);\r\n }\r\n\r\n this.totalBuild = res;\r\n return res;\r\n }\r\n\r\n calcTotalLand(): number {\r\n if (!this.loanCriteria) {\r\n return 0;\r\n }\r\n let res: number = 0;\r\n\r\n if (this.loanCriteria.CI_Dev_OrigPP) {\r\n res += Number(this.loanCriteria.CI_Dev_OrigPP);\r\n }\r\n if (this.loanCriteria.CI_Dev_DoYouOwnTheProperty) {\r\n if (this.loanCriteria.CI_Dev_OrigPPExtra) {\r\n res += Number(this.loanCriteria.CI_Dev_OrigPPExtra);\r\n }\r\n } else {\r\n if (this.loanCriteria.CI_Land_Total_other_Costs) {\r\n res += Number(this.loanCriteria.CI_Land_Total_other_Costs);\r\n }\r\n }\r\n this.totalLand = res;\r\n return res;\r\n }\r\n\r\n totalWarningVisible(): boolean {\r\n if (!this.loanCriteria.CI_GDV) return false;\r\n this.calcTotalBuild();\r\n this.calcTotalLand();\r\n\r\n return this.totalBuild + this.totalLand > Number(this.loanCriteria.CI_GDV);\r\n }\r\n\r\n debugSearch() {\r\n const stringJSON = JSON.stringify(this.loanCriteria);\r\n navigator.clipboard\r\n .writeText(stringJSON)\r\n .then()\r\n .catch((e) => console.log(e));\r\n }\r\n\r\n sum(a: number, b: number): number {\r\n return a + b;\r\n }\r\n videotour() {\r\n this.showVideo = true;\r\n }\r\n\r\n disabledPropertyScreen() {\r\n if (this.multiPartForm1 && this.loanCriteria) {\r\n if (\r\n this.multiPartForm1.$valid &&\r\n this.loanCriteria.CI_Dev_Locations != 0 &&\r\n this.loanCriteria.CI_EndPropType != 0 &&\r\n !this.showPostcodeErrorMessage\r\n ) {\r\n if (\r\n this.loanCriteria.CI_EndPropType == 1 ||\r\n this.loanCriteria.CI_EndPropType == 2\r\n ) {\r\n if (this.loanCriteria.CI_PropTypeDetail != 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n videopause(id) {\r\n this.showVideo = false;\r\n let containerElement = document.getElementById(id);\r\n let iframe_tag = containerElement.querySelector(\"iframe\");\r\n if (iframe_tag) {\r\n let iframeSrc = iframe_tag.src;\r\n iframe_tag.src = iframeSrc;\r\n }\r\n }\r\n\r\n updateLoanRequiredValue() {\r\n if (this.isMaximumLoanRequired) {\r\n this.loanCriteria.CI_Dev_LoanReq = 0;\r\n } else {\r\n this.loanCriteria.CI_Dev_LoanReq = this.tempLoanRequired;\r\n }\r\n }\r\n\r\n dummysearch() {\r\n this.loanCriteria.CI_Dev_OrigPP = this.getRandomIntInclusive(\r\n 1000000,\r\n 2000000,\r\n );\r\n this.loanCriteria.CI_Land_Total_other_Costs = this.getRandomIntInclusive(\r\n 1000,\r\n 20000,\r\n );\r\n if (this.loanCriteria.hasPostcode) {\r\n this.loanCriteria.PostcodeSearchString =\r\n this.sharedCriteriaService.getRandomPostcode();\r\n this.loanCriteria.CI_Dev_Locations =\r\n this.sharedCriteriaService.getRegionByPostcode(\r\n this.loanCriteria.PostcodeSearchString,\r\n );\r\n } else {\r\n this.loanCriteria.CI_Dev_Locations = LocationEnum.London;\r\n }\r\n\r\n this.loanCriteria.CI_EndPropType = PropertyTypeEnum.Residential;\r\n this.loanCriteria.CI_PropTypeDetail = PropertyTypeDetailEnum.Flats;\r\n this.loanCriteria.HowManyHouses = this.getRandomIntInclusive(10, 20);\r\n this.loanCriteria.CI_Dev_BuildCosts = this.getRandomIntInclusive(\r\n 1000000,\r\n 2000000,\r\n );\r\n this.loanCriteria.DC_AreaAcquisition = this.getRandomIntInclusive(\r\n 1000,\r\n 3000,\r\n );\r\n this.loanCriteria.CI_Dev_AdditionalOngoingCosts = 1000;\r\n this.loanCriteria.CI_GDV = this.getRandomIntInclusive(10000000, 20000000);\r\n this.step = 3;\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n if (this.$location.path().startsWith(\"/e/criteria\")) {\r\n if (this.$routeParams.linkId) {\r\n this.$location.path(\r\n \"/e/criteria/\" +\r\n this.searchid +\r\n \"/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.step +\r\n \"/\" +\r\n this.$routeParams.linkId,\r\n );\r\n } else {\r\n this.$location.path(\r\n \"/e/criteria/\" + this.searchid + \"/\" + this.caseid + \"/\" + this.step,\r\n );\r\n }\r\n } else {\r\n this.$location.path(\r\n \"/criteria/\" + this.searchid + \"/\" + this.caseid + \"/\" + this.step,\r\n );\r\n }\r\n }\r\n\r\n getRandomIntInclusive(min, max) {\r\n min = Math.ceil(min);\r\n max = Math.floor(max);\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n }\r\n\r\n registerNow() {\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n this.$location.path(\"promo\");\r\n }\r\n\r\n userLookupForNewSearch(userSearchTerm: string) {\r\n this.loadingData = true;\r\n this.userService\r\n .searchByEmail(userSearchTerm)\r\n .then((response) => {\r\n if (this.isBroker) {\r\n this.existingUsers = response.filter(\r\n (x) =>\r\n x.OrganisationReferralId ==\r\n this.brokerOrAdminUser.OrganisationId &&\r\n !x.OrganisationId &&\r\n !x.IsOrganisationAdmin,\r\n );\r\n } else {\r\n this.existingUsers = response;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n var users = this.existingUsers.filter(\r\n (x) => x.Email.indexOf(userName) !== -1,\r\n );\r\n this.clientFirstName = users[0].FirstName;\r\n this.clientEmail = users[0].Email;\r\n this.clientSurname = users[0].LastName;\r\n this.clientPhoneNumber = users[0].PhoneNumber;\r\n this.clientId = users[0].Id;\r\n this.selectedBorrower = users[0];\r\n this.showClientDetails = true;\r\n }\r\n\r\n attachClientDatatoSearch() {\r\n this.showShareSearchtoClientModal = false;\r\n if (\r\n this.clientEmail != null &&\r\n this.clientFirstName != null &&\r\n this.clientSurname != null &&\r\n this.clientPhoneNumber != null\r\n ) {\r\n var searchuser = {\r\n clientFirstName: \"\",\r\n clientSurname: \"\",\r\n clientEmail: \"\",\r\n clientPhoneNumber: \"\",\r\n clientId: \"\",\r\n existingborrower: false,\r\n searchName: this.loanCriteria.SearchName,\r\n clientUser: null,\r\n };\r\n searchuser.clientEmail = this.clientEmail;\r\n searchuser.clientFirstName = this.clientFirstName;\r\n searchuser.clientSurname = this.clientSurname;\r\n searchuser.clientPhoneNumber = this.clientPhoneNumber;\r\n searchuser.clientId = this.clientId;\r\n searchuser.existingborrower = this.existingborrower;\r\n if (searchuser.existingborrower) {\r\n searchuser.clientUser = this.selectedBorrower;\r\n }\r\n sessionStorage.setItem(\"searchuser\", JSON.stringify(searchuser));\r\n }\r\n }\r\n\r\n clearInputFields() {\r\n this.clientFirstName = null;\r\n this.clientEmail = null;\r\n this.clientSurname = null;\r\n this.clientPhoneNumber = null;\r\n this.showClientDetails = false;\r\n }\r\n\r\n OnClickOfSkip() {\r\n this.showShareSearchtoClientModal = false;\r\n sessionStorage.setItem(\"skip\", \"true\");\r\n sessionStorage.removeItem(\"searchuser\");\r\n }\r\n\r\n gotoDashboard() {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n getUsersBelongToBrokerOrAdmin() {\r\n this.loadingData = true;\r\n this.userService\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n getNumberOfLenders() {\r\n this.lenderService\r\n .getTotalLenders(ProductFamilyEnum.Development)\r\n .then((response: number) => {\r\n this.totalLenders = Math.floor(response);\r\n });\r\n }\r\n\r\n sendMessageToBroker(message) {\r\n this.loadingData = true;\r\n this.messageToborrower = null;\r\n this.organisationService\r\n .sendBorrowerMessageToSearchBroker(\r\n 0,\r\n message,\r\n this.loanCriteria.IntroduceeFirstName,\r\n this.loanCriteria.IntroduceeSurname,\r\n this.loanCriteria.IntroduceeEmail,\r\n ProductTypeEnum.Development,\r\n \"CRITERIA\",\r\n this.loanCriteria.UniqueRef,\r\n )\r\n .then((results) => {\r\n if (results) {\r\n this.messageToborrower = `Message has been sent successfully.`;\r\n this.showMessageToborrower = true;\r\n } else {\r\n this.messageToborrower = `There is problem sending a message, Please try later.`;\r\n this.showMessageToborrower = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n closeContactBrokerModal() {\r\n this.showContactBrokerModal = false;\r\n this.showMessageToborrower = false;\r\n this.messageToborrower = null;\r\n }\r\n\r\n getStepName(step: number): string {\r\n if (step == 1) return \"PROPERTYCRITERIA\";\r\n if (step == 2) return \"BUILDCOSTCRITERIA\";\r\n if (step == 3) return \"BORROWINGCRITERIA\";\r\n }\r\n\r\n calculateMonthsSinceOrigPurchase() {\r\n let date1 = new Date(this.loanCriteria.CI_Dev_DateOfOrigPurch);\r\n let date2 = new Date();\r\n let months;\r\n months = (date2.getFullYear() - date1.getFullYear()) * 12;\r\n months -= date1.getMonth();\r\n months += date2.getMonth();\r\n return months;\r\n }\r\n\r\n async logEvent() {\r\n var orgCode;\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n this.getStepName(Number(this.$routeParams.StepNumber)),\r\n this.orgCode,\r\n this.loanCriteria?.IntroduceeEmail,\r\n sessionStorage.getItem(\"userRole\"),\r\n this.$routeParams.linkId ? Number(this.$routeParams.linkId) : 0,\r\n ProductTypeEnum.Development,\r\n this.loanCriteria?.UniqueRef,\r\n 0,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n this.getStepName(Number(this.$routeParams.StepNumber)),\r\n this.orgCode,\r\n this.loanCriteria?.IntroduceeEmail,\r\n sessionStorage.getItem(\"userRole\"),\r\n this.$routeParams.linkId ? Number(this.$routeParams.linkId) : 0,\r\n ProductTypeEnum.Development,\r\n this.loanCriteria?.UniqueRef,\r\n );\r\n }\r\n } else {\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n this.getStepName(Number(this.$routeParams.StepNumber)),\r\n this.orgCode,\r\n this.loanCriteria?.IntroduceeEmail,\r\n \"borrower\",\r\n this.$routeParams.linkId ? Number(this.$routeParams.linkId) : 0,\r\n ProductTypeEnum.Development,\r\n this.loanCriteria?.UniqueRef,\r\n 0,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n this.getStepName(Number(this.$routeParams.StepNumber)),\r\n this.orgCode,\r\n this.loanCriteria?.IntroduceeEmail,\r\n \"borrower\",\r\n this.$routeParams.linkId ? Number(this.$routeParams.linkId) : 0,\r\n ProductTypeEnum.Development,\r\n this.loanCriteria?.UniqueRef,\r\n );\r\n }\r\n }\r\n }\r\n\r\n shallowCompare(obj1, obj2) {\r\n // Check if both are null or if one is null\r\n if (obj1 == null && obj2 == null) {\r\n return true;\r\n }\r\n if (obj1 == null || obj2 == null) {\r\n return false;\r\n }\r\n var keys1 = Object.keys(obj1);\r\n var keys2 = Object.keys(obj2);\r\n\r\n keys1 = keys1.filter((key) => key !== \"SaveQueryAndResults\");\r\n keys2 = keys2.filter((key) => key !== \"SaveQueryAndResults\");\r\n\r\n // Check if both objects have the same number of keys\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n\r\n // Check if all keys in obj1 have corresponding equal values in obj2\r\n for (let key of keys1) {\r\n if (typeof obj1[key] === \"object\" || typeof obj2[key] === \"object\") {\r\n continue;\r\n }\r\n if (obj1[key] !== obj2[key]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n getRegionByPostcode() {\r\n if (\r\n this.loanCriteria.PostcodeSearchString &&\r\n this.loanCriteria.PostcodeSearchString.replace(\" \", \"\").length >= 2\r\n ) {\r\n if (\r\n this.$DevelopmentInputservice.isValidPostcodeString(\r\n this.loanCriteria.PostcodeSearchString,\r\n )\r\n ) {\r\n this.dataLoading = true;\r\n this.$DevelopmentInputservice\r\n .getRegionByPostcode(this.loanCriteria.PostcodeSearchString)\r\n .then((response) => {\r\n if (response.Location != null) {\r\n this.loanCriteria.CI_Dev_Locations = response.Location;\r\n this.showPostcodeErrorMessage = false;\r\n } else {\r\n this.postcodeErrorMsg = response.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n if (this.loanCriteria.CI_Dev_Locations)\r\n this.loanCriteria.CI_Dev_Locations = null;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n if (this.loanCriteria.CI_Dev_Locations)\r\n this.loanCriteria.CI_Dev_Locations = null;\r\n }\r\n } else {\r\n if (this.loanCriteria.CI_Dev_Locations)\r\n this.loanCriteria.CI_Dev_Locations = null;\r\n }\r\n }\r\n\r\n onHasPostcodeChange() {\r\n if (!this.loanCriteria.hasPostcode) {\r\n this.showPostcodeErrorMessage = false;\r\n this.loanCriteria.PostcodeSearchString = null;\r\n this.loanCriteria.CI_Dev_Locations = this.previouslySelectedLocation;\r\n } else {\r\n this.previouslySelectedLocation = this.loanCriteria.CI_Dev_Locations;\r\n this.loanCriteria.CI_Dev_Locations = null;\r\n }\r\n }\r\n}\r\n","import { DevelopmentWithNoLoginDTO } from \"@js/DTO/DevelopmentWithNoLoginDTO.cs.d\";\r\nimport { DevelopmentInputWithNoLoginService } from \"@js/services/DevelopmentInputWithNoLoginService\";\r\n\r\nexport class DevelopmentInputWithNoLoginController {\r\n selectedSection: string;\r\n\r\n objects: DevelopmentWithNoLoginDTO[];\r\n selectedObject: DevelopmentWithNoLoginDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n DevelopmentInputwithnologinForm: ng.IFormController;\r\n //subDevelopmentInputwithnologinForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"DevelopmentInputWithNoLoginService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $DevelopmentInputwithnologinservice: DevelopmentInputWithNoLoginService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$DevelopmentInputwithnologinservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: DevelopmentWithNoLoginDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as DevelopmentWithNoLoginDTO;\r\n }\r\n\r\n save() {\r\n this.$DevelopmentInputwithnologinservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: DevelopmentWithNoLoginDTO[] = this.objects.filter(\r\n (value, index) => {\r\n return value.Id == response;\r\n },\r\n );\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.DevelopmentInputwithnologinForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$DevelopmentInputwithnologinservice\r\n .delete(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.DevelopmentInputwithnologinForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n}\r\n","import { DevelopmentTrackRecordDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentTrackRecordDTO.cs.d\";\r\nimport { DevelopmentTrackRecordService } from \"@js/services/DevelopmentTrackRecordService\";\r\n\r\nexport class DevelopmentTrackRecordController {\r\n selectedSection: string;\r\n\r\n objects: DevelopmentTrackRecordDTO[];\r\n selectedObject: DevelopmentTrackRecordDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n developmenttrackrecordForm: ng.IFormController;\r\n //subdevelopmenttrackrecordForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"DevelopmentTrackRecordService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $developmenttrackrecordservice: DevelopmentTrackRecordService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$developmenttrackrecordservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: DevelopmentTrackRecordDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as DevelopmentTrackRecordDTO;\r\n }\r\n\r\n save() {\r\n this.$developmenttrackrecordservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: DevelopmentTrackRecordDTO[] = this.objects.filter(\r\n (value, index) => {\r\n return value.Id == response;\r\n },\r\n );\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.developmenttrackrecordForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$developmenttrackrecordservice\r\n .delete(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.developmenttrackrecordForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n}\r\n","export const enum PreAgreementEnum {\r\n None = 0,\r\n PreLet = 1,\r\n PreSold = 2,\r\n}\r\n","export const enum ScheduleDescriptionTypeEnum {\r\n DetachedHouse = 1,\r\n SemiDetachedHouse = 2,\r\n TerrancedHouse = 3,\r\n Cottage = 4,\r\n Bungalow = 5,\r\n Studio = 6,\r\n SingleStorey = 7,\r\n Duplex = 8,\r\n Triplex = 9,\r\n}\r\n","import { AddressHistoryDTO } from \"@js/DTO/AddressHistoryDTO.cs.d\";\r\nimport { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseChangedMessageDTO } from \"@js/DTO/CaseChangedMessageDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { DealClientDTO } from \"@js/DTO/Deal/DealClientDTO.cs.d\";\r\nimport { DealFileAttachmentDTO } from \"@js/DTO/Deal/DealFileAttachmentDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { DealNoteDTO } from \"@js/DTO/Deal/DealNoteDTO.cs.d\";\r\nimport { DealScheduleDTO } from \"@js/DTO/Deal/DealScheduleDTO.cs.d\";\r\nimport { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { ExternalLinksDTO } from \"@js/DTO/ExternalLinksDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { LenderDTO } from \"@js/DTO/LenderDTO.cs.d\";\r\nimport { InvitedUserResponse } from \"@js/DTO/Messages/Deal/InvitedUserMessage.cs.d\";\r\nimport { LenderInfo } from \"@js/DTO/Messages/Deal/LendersInfoForSubmitToLenderMessage.cs.d\";\r\nimport { PromoteSearchToCaseResponse } from \"@js/DTO/Messages/Deal/PromoteSearchToCaseMessage.cs.d\";\r\nimport { SaveDevFinanceSearchRequest } from \"@js/DTO/Messages/Deal/SaveDevFinanceSearchMessage.cs.d\";\r\nimport { ShareModuleRequest } from \"@js/DTO/Messages/Deal/ShareModuleMessage.cs.d\";\r\nimport { SubmitToLendersRequest } from \"@js/DTO/Messages/Deal/SubmitToLendersMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { AppraisalModuleEnum } from \"@js/models/enum/AppraisalModuleEnum.cs.d\";\r\nimport { AreaUnitEnum } from \"@js/models/enum/AreaUnitEnum.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { LenderProductTypeEnum } from \"@js/models/enum/LenderProductTypeEnum.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { OwnNewDevelopmentEnum } from \"@js/models/enum/OwnNewDevelopmentEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { PreAgreementEnum } from \"@js/models/enum/PreAgreementEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { ScheduleDescriptionTypeEnum } from \"@js/models/enum/ScheduleDescriptionTypeEnum.cs.d\";\r\nimport { ScheduleTypeEnum } from \"@js/models/enum/ScheduleTypeEnum.cs.d\";\r\nimport { TenureEnum } from \"@js/models/enum/TenureEnum.cs.d\";\r\nimport { TitleEnum } from \"@js/models/enum/TitleEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { AccountService } from \"@js/services/AccountService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealNoteService } from \"@js/services/Deal/DealNoteService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { DevFinanceDealService } from \"@js/services/Deal/DevFinanceDealService\";\r\nimport { SharedDealService } from \"@js/services/Deal/SharedDealService\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\nimport { DealFileAttachmentService } from \"@js/services/DealFileAttachmentService\";\r\nimport { DevFinanceScheduleService } from \"@js/services/DevFinanceScheduleService\";\r\nimport { ExternalLinksService } from \"@js/services/ExternalLinksService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { StreetAddressService } from \"@js/services/StreetAddressService\";\r\nimport { UserDashboardService } from \"@js/services/UserDashboardService\";\r\nimport angular from \"angular\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\n\r\ninterface LeaseItemDetails {\r\n TimeLeftOnLeaseYears?: number;\r\n TimeLeftOnLeaseMonths?: number;\r\n GrossMonthlyRentalIncome: \"\";\r\n}\r\n\r\nexport class DevFinanceCaseController {\r\n isCaseDashboard: boolean = true;\r\n\r\n dataLoading: boolean;\r\n currentUser: ApplicationUserDTO;\r\n dealId: number;\r\n dealDto: DevelopmentFinanceDealDTO;\r\n tempDealDto: DevelopmentFinanceDealDTO;\r\n orgName: string;\r\n orgId: number;\r\n org: OrganisationDTO;\r\n fileNamePrefix: string = \"Brickflow\";\r\n newNote: DealNoteDTO = {} as DealNoteDTO;\r\n mortgageTerm: number = 0;\r\n\r\n CaseDashboardTypeEnum = {\r\n Overview: 0,\r\n Borrower: 1,\r\n Property: 2,\r\n Loan: 3,\r\n BorrowerEdit: 4,\r\n Planning: 5,\r\n BuildProcurement: 6,\r\n FurtherInfo: 7,\r\n EquityAndMezz: 8,\r\n };\r\n\r\n selectedNavMenu: number = 0;\r\n\r\n dealForm: ng.IFormController;\r\n ownershipForm: ng.IFormController;\r\n companyDetailsForm: ng.IFormController;\r\n propertyDetailsForm: ng.IFormController;\r\n loanDetailsForm: ng.IFormController;\r\n personalDetailsForm: ng.IFormController;\r\n contactForm: ng.IFormController;\r\n occupationForm: ng.IFormController;\r\n creditForm: ng.IFormController;\r\n trackRecordForm: ng.IFormController;\r\n salesForm: ng.IFormController;\r\n depositsourceForm: ng.IFormController;\r\n developmentScheduleForm: ng.IFormController;\r\n showAddressHistoryModal: boolean = false;\r\n planningForm: ng.IFormController;\r\n buildProcurementForm: ng.IFormController;\r\n furtherInformationForm: ng.IFormController;\r\n lenderDetailsForm: ng.IFormController;\r\n\r\n tabs = {\r\n tabOpen: false,\r\n ownership: false,\r\n companyDetails: false,\r\n personalDetails: false,\r\n contactDetails: false,\r\n occupation: false,\r\n credit: false,\r\n trackRecord: false,\r\n };\r\n\r\n loanTabs = {\r\n loan: false,\r\n depositsource: false,\r\n guaranteesorrecourse: false,\r\n exitstrategy: false,\r\n completion: false,\r\n preferences: false,\r\n mezzanineandequity: false,\r\n };\r\n\r\n proprtyTabs = {\r\n property: false,\r\n buildCosts: false,\r\n sales: false,\r\n developmentSchedule: false,\r\n planning: false,\r\n buildProcurement: false,\r\n furtherInformation: false,\r\n };\r\n\r\n ownershipType: string = \"\";\r\n\r\n leaseItems: LeaseItemDetails[] = [];\r\n\r\n currentApplicant: DealClientDTO;\r\n tempApplicant: DealClientDTO;\r\n applicantList: DealClientDTO[] = [];\r\n appName: string;\r\n\r\n searchterm: string;\r\n previousAddressSearchTerm: string;\r\n PostCodeOptions: PostalAddress[] = [];\r\n previousAddressPostCodeOptions: PostalAddress[] = [];\r\n address: PostalAddress;\r\n searchingForAddress: boolean = false;\r\n searchingForPreviousAddress: boolean = false;\r\n searchresults: string = \"\";\r\n previousAddressSearchResults: string[];\r\n addressHistoryItem: AddressHistoryDTO;\r\n applicantAddressHistory: AddressHistoryDTO[] = [];\r\n\r\n propertyTypeOptions = [];\r\n tenureTypes = [];\r\n maritalStatusOptions = [];\r\n ownOrPurchaseOptions = [];\r\n ownNewDevelopmentOptions = [];\r\n yesNoOptions = [];\r\n planningOptions = [];\r\n titleOptions = [];\r\n ownershipRoleOptions = [];\r\n countryList = [];\r\n nationalityList = [];\r\n countryOfBirthList = [];\r\n countryOfResidenceList = [];\r\n loanCompletionTypeOptions = [];\r\n currentUseofBuildingOptions = [];\r\n loanRepaymentTypeOptions = [];\r\n productTypeOptions = [];\r\n fixedrateTermOptions = [];\r\n locationOptions = [];\r\n planningStatusAtEndOfDevOptions = [];\r\n planningResponsibilityOptions = [];\r\n buildProcurementTypeOptions = [];\r\n exitStrategyOptions = [];\r\n\r\n //modal\r\n message: string = \"\";\r\n modal: boolean = false;\r\n showErrorMessage: boolean = false;\r\n\r\n uploadingFiles: FileUploadProgressDTO[];\r\n fileUpload: DealFileAttachmentDTO[];\r\n applicantTrackRecordFiles: DealFileAttachmentDTO[];\r\n propertyFiles: DealFileAttachmentDTO[];\r\n total: number = 0;\r\n renamingFile: DealFileAttachmentDTO;\r\n\r\n // Number of note shown on the casedashboard\r\n maxNotes: number = 4;\r\n\r\n // Controls showing Ts & Cs when a borrower/broker submits to lenders\r\n showTsAndCs: boolean = false;\r\n showApplyTsAndCs: boolean = false;\r\n showRequestEmailForm: boolean = false;\r\n requestMessageReason: string = \"\";\r\n showTsAndCsForm: boolean = false;\r\n sendingMessage: boolean = false;\r\n messagebool: boolean = false;\r\n invalidEmail: boolean = false;\r\n\r\n isBroker: boolean = false;\r\n isAdmin: boolean = false;\r\n isLender: boolean = false;\r\n isClient: boolean = false;\r\n isSubmitted: boolean = false;\r\n\r\n isSubmittedToLenders: boolean = false;\r\n messageContent: string;\r\n dealLender: DealLenderDTO;\r\n\r\n //Boolean to enable a re-submit button\r\n hasShortlistedDealLenders: boolean = false;\r\n\r\n caseStatusOptions = [];\r\n caseStatusText: string = \"\";\r\n caseOverview: string;\r\n\r\n selectedLendersName: string = \"\";\r\n shortlistedLendersName: string = \"\";\r\n\r\n //Sharing case\r\n shareContext: AppraisalModuleEnum = null;\r\n caseMembersWithAccess: ClientDTO[];\r\n showShare: boolean = false;\r\n selectedClientToShareWith: ClientDTO;\r\n shareNote: string;\r\n showModuleShareConfirmation: boolean;\r\n\r\n //show profile view\r\n showAppraisalPermission: boolean = false;\r\n\r\n //profile\r\n newApplicant: DealClientDTO;\r\n\r\n maxDateOfBirth: Date = new Date();\r\n minDateOfBirth: Date = new Date(\"Jan 01 1900\");\r\n maxDateForDateField: Date = new Date(\"Jan 01 3000\");\r\n showAddorEdit: boolean = false;\r\n disableQuickEditSave: boolean = false;\r\n applicantForm: ng.IFormController;\r\n isAddShareholder: boolean;\r\n showDelete: boolean = false;\r\n confirmDeleteApplicant: DealClientDTO;\r\n\r\n showExport: boolean = false;\r\n updatingName: boolean = false;\r\n orginalDealName: string;\r\n\r\n showAddHistoryConfirmDelete: boolean = false;\r\n addressHistoryIdToDelete: number;\r\n\r\n isLoggedInUser: boolean = false;\r\n\r\n showBridgingDeal: boolean = true;\r\n classUses: {} = {};\r\n\r\n tinymceOptions: any;\r\n tinymceOptionsTrackRecord: any;\r\n tinymceReadonlyOptions: any;\r\n missingAddressGaps: string[];\r\n\r\n ownOrPurchase: boolean;\r\n isFamilyInResidence: boolean;\r\n\r\n dateProperties = [\"ExpiryDate\"];\r\n\r\n profileDateProperties = [\r\n \"DateOfBirth\",\r\n \"CurrentAddressFrom\",\r\n \"UkResidenceIssueDate\",\r\n \"CurrentEmploymentStartDate\",\r\n \"AddressStartDate\",\r\n ];\r\n\r\n dealDateProperties = [\"OriginalPurchaseDate\", \"CompletionDate\"];\r\n\r\n clientDateProperties = [\"DateOfBirth\"];\r\n\r\n maxPurchaseDate: string;\r\n minPurchaseDate: Date = new Date(\"Jan 01 1900\");\r\n dealProductTypeDisplayText: string;\r\n isInActiveLender: boolean = false;\r\n totalGrossMonthlyRentalIncome: number = 0;\r\n isGrossMonthlyRentalIncomeMatch: boolean = true;\r\n showDeal: boolean = true;\r\n\r\n openTrackRecordUploadModal: boolean = false;\r\n\r\n //Sales section\r\n totalSalesCost: number;\r\n totalNetDevelopmentVal: number;\r\n\r\n //Property/property\r\n totalPurchaseCosts: number;\r\n // Property/build costs\r\n hasBuildCostsChanged: boolean = false;\r\n totalBreakdownProfessionalCosts: number;\r\n totalProjectCosts: number;\r\n buildCostPerSqFt: number;\r\n buildCostPerSqM: number;\r\n buildCostIntermediary: number;\r\n areaConversionFactor: number = 10.7639;\r\n contingencyValue: number;\r\n totalBuildCosts: number;\r\n buildCostsForm: ng.IFormController;\r\n\r\n //Schedule\r\n showUnitTypeOptions: boolean = false;\r\n selectedUnitType: ScheduleTypeEnum = null;\r\n scheduleTenureOptions = [];\r\n preAgreementTypeOptions = [];\r\n flatDescriptionTypeOptions = [];\r\n houseDescriptionTypeOptions = [];\r\n newScheduleData: DealScheduleDTO;\r\n houses: DealScheduleDTO[] = [];\r\n flats: DealScheduleDTO[] = [];\r\n parking: DealScheduleDTO[] = [];\r\n commercial: DealScheduleDTO[] = [];\r\n scheduleData: DealScheduleDTO[] = [];\r\n newScheduleDataPricePerUnit: number = 0;\r\n\r\n totalScheduleUnitsGDV: number = 0;\r\n totalScheduleUnitsArea: number = 0;\r\n tempGDV: number = 0;\r\n tempAreaAcquisition: number = 0;\r\n tempScheduleData: DealScheduleDTO;\r\n showScheduleUnitDeleteConfirmation: boolean = false;\r\n showSuccessorFailureMessage: boolean = false;\r\n\r\n //Property section validity\r\n isPropertySectionInvalidToSave: boolean = false;\r\n\r\n //property for roles directive to handle referred readonly view for broker/connect broker\r\n isReadOnlyDeal: boolean = true;\r\n hasFirstLoadOccurred: boolean = false;\r\n\r\n referredPackagerText: string;\r\n\r\n properyForms = [\r\n \"ctrl.planningForm\",\r\n \"ctrl.buildProcurementForm\",\r\n \"ctrl.furtherInformationForm\",\r\n \"ctrl.salesForm\",\r\n \"ctrl.propertyDetailsForm\",\r\n \"ctrl.buildCostsForm\",\r\n ];\r\n\r\n shortListedLendersId: Number[];\r\n lendersDetailsForSubmittoLenders: LenderInfo[];\r\n\r\n //SubmitToLender modal\r\n brokerCommission: number;\r\n brokerPreferredContact: string;\r\n isBrokerPhoneNumberUpdated: boolean = false;\r\n dealBrokerUser: ApplicationUserDTO;\r\n totalUnreadDealLenderMessages: number = null;\r\n\r\n //Lender Portal Links\r\n dealLenders: DealLenderDTO[];\r\n dealLendersWithPortalLinkEnabled: DealLenderDTO[];\r\n lendersWithPortalLinkEnabled: LenderDTO[];\r\n showLenderPortalLinks: boolean = false;\r\n portalLinks: {} = {};\r\n borrowerDetails: UserSimpleDTO;\r\n applicationForm: ng.IFormController;\r\n portalLinkDetailsAdded: {} = {};\r\n\r\n isDeallockerIntegrationEnabled: boolean = false;\r\n showMaximumApplicantsMessage: boolean = false;\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"AccountService\",\r\n \"StreetAddressService\",\r\n \"DevFinanceDealService\",\r\n \"DealNoteService\",\r\n \"AuthService\",\r\n \"SelectListService\",\r\n \"RoleService\",\r\n \"LenderService\",\r\n \"CaseService\",\r\n \"DealLenderService\",\r\n \"DealFileAttachmentService\",\r\n \"$window\",\r\n \"ExternalLinksService\",\r\n \"DealClientService\",\r\n \"OrganisationService\",\r\n \"$scope\",\r\n \"$sce\",\r\n \"DealService\",\r\n \"SharedDealService\",\r\n \"ProductService\",\r\n \"DevFinanceScheduleService\",\r\n \"UserDashboardService\",\r\n \"EventLogService\"\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $accountservice: AccountService,\r\n private $streetAddressService: StreetAddressService,\r\n private devFinanceDealService: DevFinanceDealService,\r\n private dealNoteService: DealNoteService,\r\n private authService: AuthService,\r\n private selectListService: SelectListService,\r\n private roleService: RoleService,\r\n private $lenderService: LenderService,\r\n private caseService: CaseService,\r\n private dealLenderService: DealLenderService,\r\n private dealFileAttachmentService: DealFileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private $externalLinksService: ExternalLinksService,\r\n private dealClientService: DealClientService,\r\n private organisationService: OrganisationService,\r\n private $scope: ng.IScope,\r\n private $sce: ng.ISCEService,\r\n private dealService: DealService,\r\n private sharedDealService: SharedDealService,\r\n private productService: ProductService,\r\n private devFinanceScheduleService: DevFinanceScheduleService,\r\n private userDashboardService: UserDashboardService,\r\n private eventLogService: EventLogService\r\n ) {\r\n if ($cookies.get(\"access_token\")) {\r\n this.isLoggedInUser = true;\r\n }\r\n this.maxPurchaseDate = new Date().toISOString().split(\"T\")[0];\r\n this.tinymceOptionsTrackRecord = this.tinymceOptions =\r\n this.sharedDealService.tinymceOptions;\r\n this.tinymceOptionsTrackRecord.height = undefined;\r\n this.tinymceReadonlyOptions = angular.copy(this.tinymceOptions);\r\n this.tinymceReadonlyOptions.readonly = 1;\r\n if (this.$routeParams.DealId) {\r\n this.dataLoading = true;\r\n\r\n this.dealId = this.$routeParams.DealId;\r\n if (\r\n this.$routeParams.Promote &&\r\n this.$routeParams.Promote != \"null\" &&\r\n !this.dealDto\r\n ) {\r\n var promote = this.$routeParams.Promote as boolean;\r\n this.isReadOnlyDeal = false;\r\n this.hasFirstLoadOccurred = true;\r\n if (promote) {\r\n this.promoteSearchToCase();\r\n }\r\n } else {\r\n this.dealService.fetchByDealId(this.$routeParams.DealId, ProductFamilyEnum.Development, true)\r\n .then((response) => {\r\n // The case was a pre-existing case when the broker org became a member of Connect and therefore was archived.\r\n if (response.DevFinanceDealDto.IsPreConnectArchived) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n\r\n //Below properties are very imp for view roles directive \r\n this.isReadOnlyDeal = response.IsReadOnlyDealForBroker;\r\n this.hasFirstLoadOccurred = true;\r\n this.referredPackagerText = response.ReferredPackagerText;\r\n this.dealDto = response.DevFinanceDealDto;\r\n this.shortlistedLendersName = response.ShortlistedLendersName;\r\n this.selectedLendersName = response.SelectedLendersName;\r\n this.shortListedLendersId = response.ShortlistedLendersId;\r\n this.totalUnreadDealLenderMessages =\r\n response.TotalUnreadDealLenderMessages;\r\n\r\n if (this.dealDto) {\r\n this.orgId = this.dealDto.BrokerOrganisationId;\r\n\r\n if (this.dealDto.ProjectDescription) {\r\n this.caseOverview = this.dealDto.ProjectDescription;\r\n }\r\n\r\n this.postRetrieveProcessing();\r\n\r\n var newShortlist = this.$routeParams.NewShortlist as boolean;\r\n if (newShortlist) this.getLenderPortalLinks();\r\n } else {\r\n // If no case is returned, this could be that the logged in user has been removed from the case\r\n // - only do this if there is a logged in user, otherwise let the routing sort out where the redirect should go\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n this.countryOfBirthList = this.countryOfResidenceList =\r\n this.selectListService.GetCountries();\r\n this.nationalityList = this.selectListService.GetNationalities();\r\n this.ownOrPurchaseOptions = this.selectListService.GetOwnOrPurchase();\r\n this.maritalStatusOptions =\r\n this.selectListService.GetMaritalStatusOptions();\r\n this.propertyTypeOptions = this.selectListService.GetPropertyType();\r\n this.ownNewDevelopmentOptions =\r\n this.selectListService.GetOwnNewDevelopmentOptions();\r\n this.yesNoOptions = this.selectListService.GetYesNoForBridging();\r\n this.titleOptions = this.selectListService.GetTitleOptions();\r\n this.loanCompletionTypeOptions =\r\n this.selectListService.GetLoanCompletionOptions();\r\n this.ownershipRoleOptions =\r\n this.selectListService.GetOwnershipRoleOptions();\r\n this.currentUseofBuildingOptions =\r\n this.selectListService.GetCurrentUseOfBuildingOptions();\r\n this.loanRepaymentTypeOptions =\r\n this.selectListService.GetLoanRepaymentTypeOptions();\r\n this.productTypeOptions = this.selectListService.GetInterestRateType();\r\n this.fixedrateTermOptions =\r\n this.selectListService.GetFixedRateTermOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.planningStatusAtEndOfDevOptions =\r\n this.selectListService.GetPlanningStatusAtEndOfDevelopmentOptions(\r\n ProductTypeEnum.Development,\r\n );\r\n this.planningResponsibilityOptions =\r\n this.selectListService.GetPlanningResponsibilityOptions();\r\n this.buildProcurementTypeOptions =\r\n this.selectListService.GetBuildProcurementTypeOptions();\r\n this.exitStrategyOptions =\r\n this.selectListService.GetExitStrategyDevFinanceOptions();\r\n this.scheduleTenureOptions =\r\n this.selectListService.GetSceheduleTenureTypes();\r\n this.preAgreementTypeOptions =\r\n this.selectListService.GetPreAgreementTypes();\r\n this.flatDescriptionTypeOptions =\r\n this.selectListService.GetFlatDescriptionTypes();\r\n this.houseDescriptionTypeOptions =\r\n this.selectListService.GetHouseDescriptionTypes();\r\n this.getAppName();\r\n }\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) {\r\n if (this.isReadOnlyDeal) {\r\n return `['Admin', 'Client']`;\r\n } else {\r\n return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n }\r\n }\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n editDealName() {\r\n var name = this.dealDto.Name;\r\n this.orginalDealName = name;\r\n this.updatingName = true;\r\n }\r\n\r\n cancelEditDealName() {\r\n this.updatingName = false;\r\n this.dealDto.Name = this.orginalDealName;\r\n }\r\n\r\n /**Gets the Case Status display text */\r\n getCaseStatusDisplayText() {\r\n var statusItem = null;\r\n\r\n if (this.isLender) {\r\n statusItem = this.caseStatusOptions.find(\r\n (statusOption) => this.dealLender.Status == statusOption.key,\r\n );\r\n } else {\r\n statusItem = this.caseStatusOptions.find(\r\n (statusOption) => this.dealDto.Status == statusOption.key,\r\n );\r\n }\r\n\r\n this.caseStatusText = statusItem.displayName;\r\n }\r\n\r\n postRetrieveProcessing() {\r\n if (this.$routeParams.selectedNavMenu) {\r\n this.selectedNavMenu = this.$routeParams.selectedNavMenu;\r\n }\r\n\r\n this.dealLenderService\r\n .fetchByDealId(this.$routeParams.DealId)\r\n .then((dls: DealLenderDTO[]) => {\r\n this.hasShortlistedDealLenders = dls.some(\r\n (dl) => dl.Status == CaseLenderStateEnum.Shortlisted,\r\n );\r\n });\r\n\r\n //These are used for directive.\r\n (this.$rootScope as any).statusRequirementId = this.dealDto.Id;\r\n this.caseService.updateCaseState(this.dealDto.Id, this.dealDto.Status);\r\n this.getCurrentUserAndRoles();\r\n this.fileUpload = this.dealDto.Attachments;\r\n this.applicantList = this.dealDto.DealClients;\r\n this.scheduleData = this.dealDto.DealSchedules;\r\n this.prepareUnitData();\r\n this.tenureTypes = this.selectListService.GetTenureTypes(\r\n this.dealDto.ProductType,\r\n );\r\n this.dealProductTypeDisplayText =\r\n this.productService.getProductTypeDisplayText(this.dealDto.ProductType);\r\n // this.CalcTotalPurchaseCosts();\r\n\r\n this.buildCostPerSqFt =\r\n this.dealDto.AreaUnit == AreaUnitEnum.SquareFeet\r\n ? this.dealDto.BuildCostPerArea\r\n : null;\r\n this.buildCostPerSqM =\r\n this.dealDto.AreaUnit == AreaUnitEnum.SquareMeters\r\n ? this.dealDto.BuildCostPerArea\r\n : null;\r\n this.buildCostIntermediary = this.dealDto.BuildCosts;\r\n this.updateBuildArea(true);\r\n this.calculateContingency();\r\n this.calculateTotalCosts();\r\n this.updateClassUses();\r\n\r\n if (this.dealDto.BrokerOrganisationId) {\r\n this.getOrganisationbyDealId();\r\n }\r\n }\r\n\r\n keyPressEvent(event) {\r\n if (event.key === \"Enter\") {\r\n this.updatingName = false;\r\n this.submitForm(this.dealForm);\r\n }\r\n if (event.key === \"Escape\") {\r\n this.updatingName = false;\r\n }\r\n }\r\n\r\n submitForm(form: ng.IFormController = null) {\r\n this.dataLoading = true;\r\n\r\n var request: SaveDevFinanceSearchRequest = {\r\n DealDto: this.dealDto,\r\n ShareDealDto: null,\r\n OrgCode: \"\",\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n this.devFinanceDealService\r\n .saveDevFinanceSearchReturnsId(request)\r\n .then((response) => {\r\n if (response != null) {\r\n this.closeTabs();\r\n if (form != null) form.$setPristine();\r\n }\r\n })\r\n .finally(() => {\r\n this.hasBuildCostsChanged = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n closeModalAndGoToDasboard() {\r\n this.showTsAndCs = false;\r\n this.authService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n closeModalAndGoToDealForum() {\r\n this.showTsAndCs = false;\r\n this.$location.path(\"/dealforum/\" + this.dealDto.Id);\r\n }\r\n\r\n closeModal(test: number) {\r\n this.messagebool = false;\r\n }\r\n\r\n closeTabs() {\r\n for (let key in this.tabs) {\r\n this.tabs[key] = false;\r\n }\r\n }\r\n\r\n closeLoanTabs() {\r\n for (let key in this.loanTabs) {\r\n this.loanTabs[key] = false;\r\n }\r\n }\r\n\r\n discardOwnership() {\r\n this.dealDto.HowWillYouOwnNewDevelopment = null;\r\n //this.companyDetails.temp = null;\r\n this.dealDto.ExcludedLenders = null;\r\n this.dealDto.HasTheCompanyOrPensionBeenFormedYet = null;\r\n }\r\n\r\n gotoApplicant(applicant?: DealClientDTO) {\r\n this.currentApplicant = applicant || null;\r\n this.PostCodeOptions = null;\r\n\r\n if (\r\n this.currentApplicant &&\r\n this.currentApplicant.Profile &&\r\n this.currentApplicant.Profile.AddressHistory &&\r\n this.currentApplicant.Profile.AddressHistory.length > 0\r\n ) {\r\n this.parseAddressHistory(this.currentApplicant.Profile.AddressHistory);\r\n } else {\r\n this.applicantAddressHistory = [];\r\n }\r\n\r\n this.selectedNavMenu = this.CaseDashboardTypeEnum.BorrowerEdit;\r\n this.closeTabs();\r\n }\r\n\r\n getOwnershipTypeText(): string {\r\n var ownershipTypeText;\r\n\r\n if (this.dealDto && this.dealDto.HowWillYouOwnNewDevelopment) {\r\n switch (this.dealDto.HowWillYouOwnNewDevelopment) {\r\n case OwnNewDevelopmentEnum.UKLimitedCompany:\r\n this.ownershipType = ownershipTypeText = \"Company\";\r\n break;\r\n case OwnNewDevelopmentEnum.OverseasLimitedCompany:\r\n this.ownershipType = ownershipTypeText = \"Overseas Company\";\r\n break;\r\n case OwnNewDevelopmentEnum.PensionFund:\r\n this.ownershipType = ownershipTypeText = \"Pension Fund\";\r\n break;\r\n case OwnNewDevelopmentEnum.UKLimitedLiabilityPartnership:\r\n ownershipTypeText = \"Limited Liability Partnership\";\r\n this.ownershipType = \"Partnership\";\r\n break;\r\n default:\r\n ownershipTypeText = \"\";\r\n }\r\n return ownershipTypeText;\r\n }\r\n return \"\";\r\n }\r\n\r\n openAddressHistoryModal(addressHistory: AddressHistoryDTO = null) {\r\n this.previousAddressSearchResults = [];\r\n this.previousAddressPostCodeOptions = [];\r\n\r\n if (addressHistory) {\r\n this.addressHistoryItem = addressHistory;\r\n } else {\r\n this.addressHistoryItem = null;\r\n }\r\n\r\n this.showAddressHistoryModal = true;\r\n }\r\n\r\n addressHistoryComplete() {\r\n return this.sharedDealService.addressHistoryComplete(\r\n this.currentApplicant,\r\n this.applicantAddressHistory,\r\n this.missingAddressGaps,\r\n );\r\n }\r\n\r\n getAddressList(searchTerm: string, postalAddress: PostalAddress) {\r\n let foundMatch = false;\r\n\r\n if (this.PostCodeOptions && this.PostCodeOptions.length > 0) {\r\n let addressLookup = this.PostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n for (let prop in address) {\r\n if (address.hasOwnProperty(prop)) {\r\n postalAddress[prop] = address[prop];\r\n }\r\n }\r\n this.searchterm = \"\";\r\n this.searchresults = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n postalAddress.AddressLine1 = addressLookup.AddressLine2.replace(\r\n addressLookup.AddressLine2.substring(\r\n addressLookup.AddressLine2.indexOf(\"-\") - 1,\r\n ),\r\n \"\",\r\n );\r\n postalAddress.AddressLine2 = addressLookup.AddressLine3;\r\n postalAddress.PostCode = addressLookup.AddressLine1;\r\n this.searchterm = \"\";\r\n this.searchresults = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n this.PostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n lookupPreviousAddress(searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.previousAddressPostCodeOptions &&\r\n this.previousAddressPostCodeOptions &&\r\n this.previousAddressPostCodeOptions.length > 0\r\n ) {\r\n let addressLookup = this.previousAddressPostCodeOptions.find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.$streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n this.addressHistoryItem = {\r\n AddressLine1: address.AddressLine1,\r\n AddressLine2: address.AddressLine2,\r\n AddressLine3: address.AddressLine3,\r\n AddressLine4: address.AddressLine4,\r\n PostCode: address.PostCode,\r\n };\r\n\r\n this.previousAddressSearchTerm = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.addressHistoryItem = {\r\n AddressLine1: addressLookup.AddressLine2,\r\n AddressLine2: addressLookup.AddressLine3,\r\n AddressLine3: addressLookup.AddressLine4,\r\n AddressLine4: addressLookup.PostCode,\r\n PostCode: addressLookup.AddressLine1,\r\n };\r\n\r\n this.previousAddressSearchTerm = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.previousAddressPostCodeOptions = [];\r\n\r\n this.$streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.previousAddressPostCodeOptions = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n saveAddressHistory(selectedApplicant: DealClientDTO) {\r\n var id: number = 0;\r\n\r\n if (!this.applicantAddressHistory) {\r\n this.applicantAddressHistory = [];\r\n }\r\n\r\n // If the Id hasn't been set then this is a new previous address\r\n if (this.addressHistoryItem.Id == null) {\r\n id = this.getNextAddressHistoryId();\r\n this.addressHistoryItem.Id = id;\r\n this.applicantAddressHistory.push(this.addressHistoryItem);\r\n } else {\r\n var foundIndex = this.applicantAddressHistory\r\n .map(function (a) {\r\n return a.Id;\r\n })\r\n .indexOf(this.addressHistoryItem.Id);\r\n if (foundIndex > -1) {\r\n this.applicantAddressHistory.splice(\r\n foundIndex,\r\n 1,\r\n this.addressHistoryItem,\r\n ); // removed previous entry and adds the updated one in its place\r\n }\r\n }\r\n\r\n this.dealClientService\r\n .saveAddressHistory(\r\n selectedApplicant.Id,\r\n JSON.stringify(this.applicantAddressHistory),\r\n )\r\n .then((addressHistory: string) => {\r\n selectedApplicant.Profile.AddressHistory = addressHistory;\r\n this.parseAddressHistory(addressHistory);\r\n this.showAddressHistoryModal = false;\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem saving the address history. Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.showAddressHistoryModal = false;\r\n });\r\n }\r\n\r\n /**\r\n * Convert addres history JSON back to an array of PostalAddress objects\r\n * @param addressHistoryJson\r\n */\r\n parseAddressHistory(addressHistoryJson: string) {\r\n // JSON doesn't understand date types so therefore user the reviver function to manually convert them back to dates as opposed to strings\r\n this.applicantAddressHistory = JSON.parse(addressHistoryJson, this.sharedDealService.reviver);\r\n\r\n // Order the address histories by the from date (ascending)\r\n this.applicantAddressHistory.sort(\r\n (a: AddressHistoryDTO, b: AddressHistoryDTO) => {\r\n return this.sharedDealService.getTime(a.FromDate) - this.sharedDealService.getTime(b.FromDate);\r\n },\r\n );\r\n }\r\n\r\n getAddressAsString(address: PostalAddress) {\r\n return this.sharedDealService.getAddressAsString(address);\r\n }\r\n\r\n showConfirmAddressDelete(addressHistoryId: number) {\r\n this.showAddHistoryConfirmDelete = true;\r\n this.addressHistoryIdToDelete = addressHistoryId;\r\n }\r\n\r\n deleteAddressHistory() {\r\n this.showAddHistoryConfirmDelete = false;\r\n\r\n var foundIndex = this.applicantAddressHistory\r\n .map(function (a) {\r\n return a.Id;\r\n })\r\n .indexOf(this.addressHistoryIdToDelete);\r\n\r\n if (foundIndex > -1) {\r\n this.applicantAddressHistory.splice(foundIndex, 1);\r\n\r\n this.dealClientService\r\n .saveAddressHistory(\r\n this.currentApplicant.Id,\r\n JSON.stringify(this.applicantAddressHistory),\r\n )\r\n .then((addressHistory: string) => {\r\n this.currentApplicant.Profile.AddressHistory = addressHistory;\r\n this.parseAddressHistory(addressHistory);\r\n this.showAddressHistoryModal = false;\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem deleting the address history item. Please try again later.\";\r\n });\r\n }\r\n }\r\n\r\n getNextAddressHistoryId(): number {\r\n return this.sharedDealService.getNextAddressHistoryId(\r\n this.applicantAddressHistory,\r\n );\r\n }\r\n\r\n /** Promotes/converts a search to a case */\r\n promoteSearchToCase() {\r\n this.dealService\r\n .promoteSearchToCase(this.dealId, ProductFamilyEnum.Development)\r\n .then((response: PromoteSearchToCaseResponse) => {\r\n if (response != null && response.DevFinanceDealDto != null) {\r\n this.dealDto = response.DevFinanceDealDto;\r\n this.shortlistedLendersName = response.ShortlistedLendersName;\r\n this.selectedLendersName = response.SelectedLendersName;\r\n this.shortListedLendersId = response.ShortlistedLendersId;\r\n this.postRetrieveProcessing();\r\n this.getCurrentUserAndRoles();\r\n } else {\r\n this.message =\r\n \"Problem while promoting a search to case, please try after some time.\";\r\n this.showErrorMessage = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.getLenderPortalLinks();\r\n });\r\n }\r\n\r\n getLenderPortalLinks() {\r\n this.dealLenderService\r\n .fetchByDealId(this.$routeParams.DealId)\r\n .then((dls: DealLenderDTO[]) => {\r\n this.dealLenders = dls;\r\n var searchChanged = this.$routeParams.SearchChanged;\r\n const lenderIds = dls\r\n .filter(\r\n (dl) =>\r\n !dl.HasAppliedInLenderPortal &&\r\n (dl.Status === CaseLenderStateEnum.Shortlisted ||\r\n searchChanged == \"true\"),\r\n )\r\n .map((dl) => dl.LenderId);\r\n return this.$lenderService.getLenderPortalLinks(lenderIds);\r\n })\r\n .then((links) => {\r\n this.portalLinks = links;\r\n })\r\n .catch((error) => {\r\n this.message = \"Error fetching lender portal links: \" + error;\r\n this.portalLinks = null;\r\n })\r\n .finally(() => {\r\n this.showLenderPortalLinks = Object.keys(this.portalLinks).length > 0;\r\n });\r\n }\r\n\r\n openPortalLink(dealLenderId: number, url: string) {\r\n if (!this.portalLinkDetailsAdded[dealLenderId]) {\r\n this.dealLenderService\r\n .addLenderPortalLinkDetails(dealLenderId, this.borrowerDetails)\r\n .then(() => {\r\n this.portalLinkDetailsAdded[dealLenderId] = true;\r\n this.openUrl(url);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error adding lender portal link details:\", error);\r\n });\r\n } else {\r\n this.openUrl(url);\r\n }\r\n }\r\n\r\n private openUrl(url: string) {\r\n if (!/^https?:\\/\\//i.test(url)) {\r\n url = \"http://\" + url;\r\n }\r\n window.open(url, \"_blank\");\r\n }\r\n\r\n saveNote(): void {\r\n this.newNote.DealId = this.dealDto.Id;\r\n this.newNote.UserId = this.currentUser.Id;\r\n\r\n this.dataLoading = true;\r\n this.dealNoteService\r\n .addUpdate(this.newNote)\r\n .then((response) => {\r\n this.dealDto.DealNotes.push(response);\r\n this.newNote = {\r\n DealId: this.dealDto.Id,\r\n UserId: this.currentUser.Id,\r\n } as DealNoteDTO;\r\n this.dealForm.$setPristine();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n saveOverview(): void {\r\n this.dealDto.ProjectDescription = this.caseOverview;\r\n this.submitForm(this.dealForm);\r\n }\r\n\r\n gotoResultpage() {\r\n this.showErrorMessage = false;\r\n this.$location.path(\"/devfinanceresults/\" + this.dealId);\r\n }\r\n\r\n onFileSelect(files: DealFileAttachmentDTO[], module: ModuleEnum) {\r\n if (!module) {\r\n module = ModuleEnum.Case;\r\n }\r\n\r\n var dealClientId =\r\n module == ModuleEnum.Track ? this.currentApplicant.Id : null;\r\n\r\n this.dealFileAttachmentService\r\n .UploadFileListInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.dealDto.Id,\r\n this.fileUpload,\r\n module,\r\n null,\r\n dealClientId,\r\n )\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n calculateTotalFiles(module: number) {\r\n if (module == ModuleEnum.Track) {\r\n this.total = this.fileUpload.filter(\r\n (item) =>\r\n item.Module === module &&\r\n item.DealClientId == this.currentApplicant.Id &&\r\n !item.IsDeleted,\r\n ).length;\r\n } else {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module === module && !item.IsDeleted,\r\n ).length;\r\n }\r\n }\r\n\r\n return this.total;\r\n }\r\n\r\n calculateTotalFilesRemoving(filter: number) {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module != filter,\r\n ).length;\r\n }\r\n return this.total;\r\n }\r\n\r\n downloadFile(file: DealFileAttachmentDTO, downloadFile: boolean = false) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n if (downloadFile) {\r\n this.sharedDealService.downloadFile(uri, file.FileName);\r\n } else {\r\n this.$window.open(uri);\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n renameFile(file: DealFileAttachmentDTO) {\r\n if (this.renamingFile === undefined) {\r\n // if renaming this file will dirty the case, we'll want to set it back to pristine when we're done.\r\n // this.renamingFileDirties = !$scope.caseForm.$dirty;\r\n this.renamingFile = file;\r\n } else {\r\n delete this.renamingFile;\r\n }\r\n }\r\n renamingFileComplete(file: DealFileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .renameFile(file)\r\n .then((response) => {\r\n file.TempURL = response.TempURL;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n renamingLinkCompleted(link: ExternalLinksDTO) {\r\n this.dataLoading = true;\r\n this.$externalLinksService\r\n .addUpdate(link)\r\n .then((response) => {\r\n link.Link = response.Link;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n delete this.renamingFile;\r\n }\r\n\r\n deleteFile(file: DealFileAttachmentDTO) {\r\n this.dealDto.Attachments.splice(this.dealDto.Attachments.indexOf(file), 1);\r\n this.dealFileAttachmentService.markasdeleted(file.Id).then((result) => { }); //remove on the server\r\n }\r\n\r\n markSectionAsComplete(propertyName: string) {\r\n if (this.dataLoading == false) {\r\n this.dataLoading = true;\r\n\r\n this.dealDto.IsLoanSectionComplete;\r\n\r\n this.dealService\r\n .markSectionAsComplete(\r\n this.dealDto.Id,\r\n propertyName,\r\n ProductFamilyEnum.Development,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.dealDto.DealNotes.push(response.NewDealNote);\r\n this.dealDto = response.DevFinanceDealDto;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n allFormsComplete(): boolean {\r\n if (this.dealDto) {\r\n if (\r\n this.dealDto.IsBorrowerSectionComplete &&\r\n this.dealDto.IsPropertySectionComplete &&\r\n this.dealDto.IsLoanSectionComplete\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n /** Opens the Terms and Conditions popup when the Submit to Lenders button is clicked*/\r\n showTermsAndConditionsForBorrower() {\r\n this.showApplyTsAndCs = true;\r\n this.requestMessageReason = \"a review\";\r\n this.showTsAndCs = true;\r\n }\r\n\r\n /** Opens the Terms and Conditions popup when the Submit to Lenders HoT button is clicked (borrower/broker) */\r\n showTermsAndConditions() {\r\n this.dataLoading = true;\r\n this.$lenderService\r\n .getShortlistedLendersInfoForSubmitToLenders(\r\n this.shortListedLendersId,\r\n LenderProductTypeEnum.DevelopmentFinance,\r\n )\r\n .then((response) => {\r\n this.lendersDetailsForSubmittoLenders = response;\r\n })\r\n .finally(() => {\r\n this.showTsAndCs = true;\r\n this.showTsAndCsForm = true;\r\n this.dealDto.SubmitTsAndCs = false;\r\n this.invalidEmail = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n gotoLendingPage() {\r\n (this.$rootScope as any).isLender = false;\r\n this.$location.path(\"/dealforum/\" + this.dealDto.Id);\r\n }\r\n\r\n /** Submits a case to lenders */\r\n submitCaseToLenders() {\r\n this.showTsAndCsForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n var isResubmitting = false;\r\n\r\n if (this.dealDto.Status == CaseStatusEnum.ReadyToReSubmit) {\r\n isResubmitting = true;\r\n }\r\n\r\n var request = {\r\n DealId: this.dealId,\r\n ProductType: this.dealDto.ProductType,\r\n ResubmitToLenders: isResubmitting,\r\n BrokerCommission: Number(this.brokerCommission),\r\n LendersInfo: this.lendersDetailsForSubmittoLenders,\r\n BrokerPhoneNumber: this.brokerPreferredContact,\r\n IsBrokerPhoneNumberUpdated: this.isBrokerPhoneNumberUpdated,\r\n } as SubmitToLendersRequest;\r\n\r\n this.dealService\r\n .submitToLenders(request)\r\n .then((response: CaseChangedMessageDTO) => {\r\n this.dealDto.Status = response.CaseState;\r\n this.caseService.updateCaseState(this.dealDto.Id, response.CaseState);\r\n this.showMessage(\r\n \"You have requested a Decision in Principle from each lender.\",\r\n );\r\n this.isSubmittedToLenders = true;\r\n })\r\n .catch((error) => {\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n validateEmails() {\r\n this.invalidEmail = false;\r\n\r\n angular.forEach(\r\n this.lendersDetailsForSubmittoLenders,\r\n (lenderdetails, index) => {\r\n var emailField = this.lenderDetailsForm[\"email\" + index];\r\n\r\n if (emailField && emailField.$invalid) {\r\n this.invalidEmail = true;\r\n }\r\n },\r\n );\r\n }\r\n\r\n showMessage(message: string) {\r\n this.messageContent = message;\r\n }\r\n\r\n requestEmail(reason): void {\r\n this.showRequestEmailForm = true;\r\n this.requestMessageReason = reason;\r\n this.messagebool = true;\r\n this.messageContent = \"\";\r\n }\r\n\r\n sendRequestEmail() {\r\n this.showRequestEmailForm = false;\r\n this.sendingMessage = true;\r\n this.dataLoading = true;\r\n this.$accountservice\r\n .RequestAssistanceReview(\r\n this.requestMessageReason,\r\n this.dealDto.Id,\r\n this.dealDto.ProductFamily,\r\n )\r\n .then((response) => {\r\n this.showMessage(\r\n `${this.appName} have been notified that you require assistance and will be in touch shortly to help.`,\r\n );\r\n\r\n let dealNote = {\r\n DealId: this.dealDto.Id,\r\n UserId: this.currentUser.Id,\r\n NoteText: \"You have requested \" + this.requestMessageReason + \".\",\r\n /*ExpandNote: false*/\r\n } as DealNoteDTO;\r\n this.dealNoteService.addUpdate(dealNote).then((caseNoteResponse) => {\r\n this.dealDto.DealNotes.push(caseNoteResponse);\r\n });\r\n })\r\n .catch((error) => {\r\n this.showMessage(\r\n \"Sorry, something went wrong while sending your email. Please try again.\",\r\n );\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getAppName() {\r\n let lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n this.appName = lsd;\r\n } else {\r\n this.appName = \"Brickflow\";\r\n }\r\n }\r\n\r\n closeConfirmationModal() {\r\n if (this.isSubmittedToLenders) {\r\n if (this.$routeParams.Promote) {\r\n this.$location.path(\"/devfinancecasedashboard/\" + this.dealDto.Id);\r\n } else {\r\n window.location.reload();\r\n }\r\n }\r\n this.showTsAndCs = false;\r\n }\r\n\r\n viewResults() {\r\n this.$location.path(\"/devfinanceresults/\" + this.dealDto.Id);\r\n }\r\n\r\n /** Process the Heads of Terms button being clicked */\r\n headsOfTermsClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"terms\");\r\n this.$location.path(\r\n \"/devfinanceheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n /** Lender rejects the case*/\r\n rejectButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"reject\");\r\n this.$location.path(\r\n \"/devfinanceheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n withDrawButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"withdraw\");\r\n this.$location.path(\r\n \"/devfinanceheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n feedbackButtonClicked() {\r\n sessionStorage.setItem(\"lenderTask\", \"feedback\");\r\n this.$location.path(\r\n \"/devfinanceheadsofterm/\" + this.dealDto.Id + \"/\" + this.dealLender.Id,\r\n );\r\n }\r\n\r\n getCurrentUserAndRoles() {\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.isAdmin = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"client\").length > 0) {\r\n this.isClient = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"lender\").length > 0) {\r\n this.isLender = true;\r\n\r\n this.dealLenderService\r\n .fetchDealLender(this.dealDto.Id)\r\n .then((response) => {\r\n this.dealLender = response;\r\n this.isInActiveLender = response.IsLenderInActive;\r\n this.generateCaseStatusText();\r\n });\r\n }\r\n\r\n this.authService\r\n .getUpdatedProfile()\r\n .then((prof) => {\r\n this.currentUser = prof;\r\n })\r\n .then(() => {\r\n this.checkIfUserIsInvited();\r\n this.updateRequestAssitanceDealNoteMessage();\r\n if (!this.isLender) this.generateCaseStatusText();\r\n });\r\n\r\n /*this.$lenderService\r\n .getSelectedDealLenderNames(this.dealDto.Id)\r\n .then((response) => {\r\n this.selectedLendersText = response.LendersName;\r\n if (this.dealDto.Status == CaseStatusEnum.NewCase) {\r\n this.shortListedLendersId = response.LendersId;\r\n }\r\n });*/\r\n\r\n /*this.$lenderService\r\n .getShortlistedDealLenderNames(this.dealDto.Id)\r\n .then((response) => {\r\n this.shortlistedLendersText = response.LendersName;\r\n if (this.dealDto.Status != CaseStatusEnum.NewCase) {\r\n this.shortListedLendersId = response.LendersId;\r\n }\r\n });*/\r\n if (this.isBroker || this.isAdmin) {\r\n this.organisationService.getOrganisationProductAccess().then((response) => {\r\n this.isDeallockerIntegrationEnabled = response.IsDeallockerIntegrationEnabled;\r\n });\r\n }\r\n });\r\n }\r\n\r\n //Share module functions\r\n openShareModuleModal(contextToShare: AppraisalModuleEnum) {\r\n this.shareContext = contextToShare;\r\n this.constructShareNoteMessage();\r\n\r\n this.dealClientService\r\n .fetchDealMembersWithAccess(this.dealDto.Id)\r\n .then((response: ClientDTO[]) => {\r\n this.caseMembersWithAccess = response;\r\n\r\n this.showShare = true;\r\n });\r\n }\r\n\r\n constructShareNoteMessage() {\r\n this.shareNote = this.sharedDealService.constructShareNoteMessage(\r\n this.shareContext,\r\n this.currentUser,\r\n );\r\n }\r\n\r\n sendToBorrower() {\r\n this.dataLoading = true;\r\n\r\n var request = {\r\n ClientFirstName: this.selectedClientToShareWith.FirstName,\r\n ClientLastName: this.selectedClientToShareWith.LastName,\r\n ClientEmail: this.selectedClientToShareWith.Email,\r\n Note: this.shareNote,\r\n DealId: this.dealDto.Id,\r\n Section: this.shareContext,\r\n ProductFamily: ProductFamilyEnum.Development,\r\n } as ShareModuleRequest;\r\n\r\n this.dealService.shareModuleToBorrower(request).then((success) => {\r\n if (success) {\r\n this.showShare = false;\r\n this.dataLoading = false;\r\n this.showModuleShareConfirmation = true;\r\n this.selectedClientToShareWith = null;\r\n } else {\r\n this.showShare = false;\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n }\r\n });\r\n }\r\n\r\n isShareNoteFormComplete(): boolean {\r\n return this.selectedClientToShareWith &&\r\n this.shareNote &&\r\n this.shareNote.length > 0\r\n ? true\r\n : false;\r\n }\r\n\r\n //End of Share module functions\r\n\r\n // Profile view functions\r\n\r\n /**\r\n * Show the Add/Edit permissions profile modal\r\n * @param applicant\r\n */\r\n showPermissionsProfileModal(\r\n profile: DealClientDTO = null,\r\n isEdit: boolean = null,\r\n ): void {\r\n\r\n this.showMaximumApplicantsMessage = false;\r\n\r\n if (isEdit) {\r\n this.dealClientService.fetch(profile.Id).then((response) => {\r\n this.newApplicant = response;\r\n this.isAddShareholder = false;\r\n this.showAddorEdit = true;\r\n\r\n })\r\n\r\n } else {\r\n this.newApplicant = {} as DealClientDTO;\r\n this.isAddShareholder = true;\r\n this.newApplicant.AccessLevel = CaseAccessLevelEnum.Hidden;\r\n this.showAddorEdit = true;\r\n }\r\n }\r\n\r\n resetApplicant() {\r\n this.applicantForm.$setPristine();\r\n this.applicantForm.$setUntouched();\r\n this.newApplicant = {} as DealClientDTO;\r\n this.showAddorEdit = false;\r\n }\r\n\r\n /**\r\n * Saves the applicant being added/edited\r\n */\r\n saveApplicant(formController) {\r\n this.dataLoading = true;\r\n\r\n if (!(this.currentApplicant.Id > 0)) {\r\n this.currentApplicant.IsApplicant = true;\r\n this.currentApplicant.DealId = this.dealDto.Id;\r\n this.currentApplicant.AccessLevel = CaseAccessLevelEnum.Hidden;\r\n }\r\n\r\n this.saveUpdatedApplicant(this.currentApplicant, false, formController);\r\n }\r\n\r\n /**\r\n * Add or update a applicant\r\n * @param applicant\r\n */\r\n saveUpdatedApplicant(\r\n applicant: DealClientDTO,\r\n isPermissionsProfile: boolean = false,\r\n formController = null,\r\n ): void {\r\n this.dataLoading = true;\r\n\r\n this.disableQuickEditSave = true; // this is just because sometimes the save takes a little while and the user could click the save button again\r\n applicant.DealId = this.dealDto.Id;\r\n\r\n if (applicant) {\r\n this.dateProperties.forEach((property) => {\r\n let val = applicant[property];\r\n if (val) {\r\n applicant[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (applicant.Profile) {\r\n this.profileDateProperties.forEach((property) => {\r\n let val = applicant.Profile[property];\r\n if (val) {\r\n applicant.Profile[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (applicant.Client) {\r\n this.clientDateProperties.forEach((property) => {\r\n let val = applicant.Client[property];\r\n if (val) {\r\n applicant.Client[property] = this.modifyDateForBackend(val);\r\n }\r\n });\r\n }\r\n\r\n if (!applicant.Client.PostalAddress && isPermissionsProfile) {\r\n applicant.Client.PostalAddress = {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress;\r\n }\r\n\r\n this.dealClientService\r\n .addorUpdateApplicant(applicant, this.isAddShareholder)\r\n .then((response) => {\r\n this.dataLoading = true;\r\n\r\n if (response) {\r\n this.dateProperties.forEach((property) => {\r\n let val = response[property];\r\n if (val) {\r\n response[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n if (response.Profile) {\r\n this.profileDateProperties.forEach((property) => {\r\n let val = response.Profile[property];\r\n if (val) {\r\n response.Profile[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n if (response.Client) {\r\n this.clientDateProperties.forEach((property) => {\r\n let val = response.Client[property];\r\n if (val) {\r\n response.Client[property] = this.modifyDateForFrontend(val);\r\n }\r\n });\r\n }\r\n\r\n const existingShareholder = this.applicantList.find(\r\n (s) => s.Id == response.Id,\r\n );\r\n\r\n // If found then we're updating\r\n if (existingShareholder) {\r\n this.applicantList = this.applicantList.filter(\r\n (member) => member.Id != applicant.Id,\r\n );\r\n this.applicantList.push(response);\r\n } else {\r\n this.applicantList.push(response);\r\n }\r\n if (!isPermissionsProfile) {\r\n this.currentApplicant = response;\r\n formController.$setPristine();\r\n }\r\n })\r\n .finally(() => {\r\n delete this.newApplicant;\r\n this.showAddorEdit = false;\r\n this.disableQuickEditSave = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n cancelUpdateApplicant() {\r\n this.showAddorEdit = false;\r\n this.applicantList = this.applicantList.filter(\r\n (applicant) => applicant.Id != this.newApplicant?.Id,\r\n );\r\n this.applicantList.push(this.newApplicant); // Resets anything that is changed using the original data object\r\n }\r\n\r\n deleteApplicant(): void {\r\n this.dataLoading = true;\r\n this.dealClientService\r\n .markAsDeleteAndSetNextApplicantAsPrimary(\r\n this.dealDto.Id,\r\n this.confirmDeleteApplicant.Id,\r\n )\r\n .then((response) => {\r\n this.applicantList = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.confirmDeleteApplicant = {} as DealClientDTO;\r\n this.showDelete = false;\r\n });\r\n }\r\n\r\n deleteConfirmApplicant(applicant: DealClientDTO) {\r\n this.showDelete = true;\r\n this.confirmDeleteApplicant = { ...applicant };\r\n }\r\n\r\n nonUkWarningVisible(): boolean {\r\n return this.sharedDealService.nonUkWarningVisible(this.currentApplicant);\r\n }\r\n\r\n showInviteButton(shareholder: DealClientDTO) {\r\n return this.sharedDealService.showInviteButton(shareholder);\r\n }\r\n\r\n invite(applicant: DealClientDTO) {\r\n this.dataLoading = true;\r\n\r\n this.dealClientService\r\n .inviteApplicant(applicant.UniqueRef)\r\n .then((i) => {\r\n this.modal = true;\r\n this.message =\r\n \"A request has been sent to \" +\r\n applicant.Client.FirstName +\r\n \" \" +\r\n applicant.Client.LastName +\r\n \" complete their shareholder profile.\";\r\n })\r\n .catch((error) => {\r\n this.modal = true;\r\n this.message =\r\n \"There was a problem sending the invite request to \" +\r\n applicant.Client.FirstName +\r\n \" \" +\r\n applicant.Client.LastName +\r\n \". Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n //End of Profile view functions\r\n\r\n /** Show and hide the export menu */\r\n showAndHideExport() {\r\n this.showExport = !this.showExport;\r\n }\r\n\r\n //loanSaveDisabled() {\r\n\r\n // var selectFields = [];\r\n // if (this.dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance) {\r\n // selectFields = [\r\n // this.dealDto.AdditionalSecurity,\r\n // this.dealDto.ExitStrategy,\r\n // this.dealDto.InterestService,\r\n // this.dealDto.LoanTermReq,\r\n // this.dealDto.LoanPurpose,\r\n // ];\r\n // } else {\r\n // selectFields = [\r\n // this.dealDto.AdditionalSecurity,\r\n // this.dealDto.ExitStrategy,\r\n // this.dealDto.InterestService,\r\n // this.dealDto.SourceOfIncome,\r\n // this.dealDto.LoanPurpose,\r\n // this.dealDto.PlanningStatusAtStartOfLoan,\r\n // this.dealDto.PlanningStatusAtEndOfLoan\r\n // ];\r\n // }\r\n\r\n // if (this.loanDetailsForm.$invalid) return true;\r\n\r\n // if (this.dealDto.LoanPurpose && this.dealDto.LoanPurpose == LoanPurposeEnum.Other && this.dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction) {\r\n // if (!this.dealDto.LoanPurposeDescription || this.dealDto.LoanPurposeDescription.length == 0) {\r\n // return true;\r\n // }\r\n // }\r\n\r\n // for (let i = 0; i < selectFields.length; i++) {\r\n // if (selectFields[i] === 0 || selectFields[i] === '0') {\r\n // return true;\r\n // }\r\n // }\r\n\r\n // return false;\r\n //}\r\n\r\n checkIfUserIsInvited() {\r\n //added to scope for directive\r\n this.dealService\r\n .checkIfUserIsInvited(this.currentUser.Id, this.dealId)\r\n .then((response: InvitedUserResponse) => {\r\n // if user has no active subscription (and are not a lender or admin) then they should be redirected back to the dashboard\r\n if (\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PaidUp &&\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PreCancel &&\r\n this.currentUser.SubscriptionStatus !=\r\n LicenseMasterStatusEnum.PaymentProcessing &&\r\n !response.IsInvited &&\r\n !this.isAdmin &&\r\n !this.isLender\r\n ) {\r\n this.$location.path(\"/dashboard\");\r\n return;\r\n }\r\n\r\n (this.$rootScope as any).isInvitedToCase = response.IsInvited;\r\n\r\n if (response.IsInvited) {\r\n if (response.DealAccessLevel == CaseAccessLevelEnum.ReadOnly) {\r\n (this.$rootScope as any).isInvitedAndHasReadonlyAccess = true;\r\n }\r\n }\r\n\r\n this.$rootScope.$broadcast(\"invitedStatusChange\");\r\n });\r\n }\r\n\r\n modifyDateForBackend(property: Date) {\r\n return this.sharedDealService.modifyDateForBackend(property);\r\n }\r\n\r\n modifyDateForFrontend(property: Date) {\r\n return this.sharedDealService.modifyDateForFrontend(property);\r\n }\r\n\r\n disablePersonalDetails() {\r\n return this.sharedDealService.disablePersonalDetails(\r\n this.currentApplicant,\r\n this.personalDetailsForm,\r\n );\r\n }\r\n\r\n goToUserDashboard() {\r\n this.authService.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n // Setting the dependent data when option are changed\r\n clearSearchdata() {\r\n this.dealDto = this.devFinanceDealService.clearSearchdata(this.dealDto);\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange() {\r\n this.dealDto = this.devFinanceDealService.datasetupOnOwnOrPurchaseChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnIsTenantedBuildingChange() {\r\n if (!this.dealDto.IsTenantedBuilding) this.leaseItems = null;\r\n this.dealDto =\r\n this.devFinanceDealService.datasetupOnIsTenantedBuildingChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n datasetupOnMaxLoanRequiredChange() {\r\n this.dealDto = this.dealService.dataSetupOnMaxLoanRequiredChange(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n onPropertyTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.CaseDashboardTypeEnum.Property;\r\n\r\n this.propertyFiles = this.fileUpload.filter(\r\n (item) => item.Module === ModuleEnum.Property,\r\n );\r\n\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n discardDealData(form: ng.IFormController = null) {\r\n event.stopPropagation();\r\n if (form == this.propertyDetailsForm) {\r\n this.dealDto = JSON.parse(JSON.stringify(this.tempDealDto));\r\n this.PostCodeOptions = [];\r\n this.searchterm = null;\r\n } else {\r\n this.dealDto = JSON.parse(JSON.stringify(this.tempDealDto));\r\n }\r\n\r\n if (form) {\r\n form.$setPristine();\r\n form.$setUntouched();\r\n }\r\n }\r\n\r\n onLoanTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.CaseDashboardTypeEnum.Loan;\r\n this.closeLoanTabs();\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n onPlanningTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.CaseDashboardTypeEnum.Planning;\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n onBuildProcurementTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.CaseDashboardTypeEnum.BuildProcurement;\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n onFurtherInfoTabSelection() {\r\n if (this.dealDto) {\r\n this.selectedNavMenu = this.CaseDashboardTypeEnum.FurtherInfo;\r\n this.onTabSelection();\r\n }\r\n }\r\n\r\n onTabSelection() {\r\n this.tempDealDto = JSON.parse(JSON.stringify(this.dealDto));\r\n }\r\n\r\n discardApplicantData(form: ng.IFormController) {\r\n event.stopPropagation();\r\n this.currentApplicant = JSON.parse(JSON.stringify(this.tempApplicant));\r\n form.$setPristine();\r\n form.$setUntouched();\r\n }\r\n\r\n onApplicantTabSelection(tab) {\r\n if (\r\n tab != \"trackRecord\" ||\r\n (tab == \"trackRecord\" && this.currentApplicant)\r\n ) {\r\n const str = tab;\r\n this.tabs[str] = !this.tabs[str];\r\n\r\n this.tempApplicant = JSON.parse(JSON.stringify(this.currentApplicant));\r\n }\r\n }\r\n\r\n onPropertySubTabSelection(tab) {\r\n const str = tab;\r\n this.proprtyTabs[str] = !this.proprtyTabs[str];\r\n this.onTabSelection();\r\n }\r\n\r\n onLoanSubTabSelection(tab) {\r\n const str = tab;\r\n this.loanTabs[str] = !this.loanTabs[str];\r\n this.onTabSelection();\r\n }\r\n\r\n carriageReturnCheck(event) {\r\n if (event.key === \"Enter\") {\r\n let position = event.target.selectionStart;\r\n if (this.newNote.NoteText) {\r\n this.newNote.NoteText = [\r\n this.newNote.NoteText.slice(0, position),\r\n \"\\n\",\r\n this.newNote.NoteText.slice(position),\r\n ].join(\"\");\r\n\r\n setTimeout(() => {\r\n event.target.setSelectionRange(position + 1, position + 1);\r\n }, 0);\r\n } else {\r\n this.newNote.NoteText = \"\\n\";\r\n }\r\n }\r\n }\r\n\r\n trustedHtml(plainText) {\r\n return this.$sce.trustAsHtml(plainText);\r\n }\r\n\r\n initialiseTitleAndTitleOption() {\r\n if (this.currentApplicant?.Profile) {\r\n const { Title, TitleOption } = this.currentApplicant.Profile;\r\n\r\n // If TitleOption has a value greater than 0, set Title to null\r\n if (\r\n (TitleOption > TitleEnum.None && TitleOption != TitleEnum.Other) ||\r\n Title == null\r\n ) {\r\n this.currentApplicant.Profile.Title = \"\";\r\n }\r\n // If Title exists and TitleOption is not set, set TitleOption to Other\r\n else if (Title && !TitleOption) {\r\n this.currentApplicant.Profile.TitleOption = TitleEnum.Other;\r\n }\r\n }\r\n }\r\n\r\n onTitleOptionChange() {\r\n const { TitleOption } = this.currentApplicant.Profile;\r\n\r\n if (TitleOption > 0 && TitleOption != TitleEnum.Other) {\r\n this.currentApplicant.Profile.Title = \"\";\r\n }\r\n }\r\n\r\n onIsMortgagedChange() {\r\n if (!this.dealDto.IsMortgaged) {\r\n this.dealDto.MortgageCurrentLender = null;\r\n this.dealDto.MortgageCurrentBalance = 0;\r\n }\r\n }\r\n\r\n goToLoanTypeSelectionPage() {\r\n if (this.isLoggedInUser) {\r\n this.authService.setHasValidStatustoShowShareSearchModal(\r\n true,\r\n );\r\n }\r\n this.$location.path(\"/allloans\");\r\n\r\n }\r\n\r\n propertySaveDisabled() {\r\n var commonFields = [\r\n this.dealDto.OwnOrPurchase,\r\n this.dealDto.Locations,\r\n this.dealDto.IsFamilyInResidence,\r\n this.dealDto.PropertyAddress.AddressLine1,\r\n this.dealDto.PropertyAddress.PostCode,\r\n this.dealDto.PurchasePrice,\r\n this.dealDto.StampDutyLandTax,\r\n this.dealDto.PurchaseLegalFees,\r\n this.dealDto.PayingVATOnLandPurchase,\r\n ];\r\n\r\n if (this.dealDto.IsMortgaged) {\r\n commonFields.push(this.dealDto.MortgageCurrentLender);\r\n commonFields.push(this.dealDto.MortgageCurrentLender);\r\n }\r\n\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n commonFields.push(this.dealDto.Currentvalue);\r\n commonFields.push(this.dealDto.LandTotalOtherCosts);\r\n }\r\n\r\n if (this.dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing) {\r\n commonFields.push(this.dealDto.PurchaseCosts);\r\n }\r\n\r\n if (this.dealDto.PayingVATOnLandPurchase === 1) {\r\n commonFields.push(this.dealDto.LandPurchaseVatAmount);\r\n }\r\n\r\n if (this.propertyDetailsForm && this.propertyDetailsForm.$invalid)\r\n return true;\r\n\r\n for (let i = 0; i < commonFields.length; i++) {\r\n if (\r\n commonFields[i] == null ||\r\n commonFields[i] == \"0\" ||\r\n commonFields[i] == \"\"\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n planningSaveDisabled() {\r\n var selectFields = [\r\n this.dealDto.PlanningStatusAtEndOfLoan,\r\n this.dealDto.PlanningResponsibility,\r\n ];\r\n\r\n if (this.planningForm.$invalid) return true;\r\n\r\n for (let i = 0; i < selectFields.length; i++) {\r\n if (selectFields[i] === 0 || selectFields[i] === \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n buildProcurementSaveDisabled() {\r\n var selectFields = [this.dealDto.BuildProcurementType];\r\n\r\n if (this.buildProcurementForm.$invalid) return true;\r\n\r\n for (let i = 0; i < selectFields.length; i++) {\r\n if (selectFields[i] === 0 || selectFields[i] === \"0\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Convert LeaseDeatails JSON back to an array of LeaseDeatails objects\r\n * @param leaseItemsJson\r\n */\r\n parseLeaseDetails(leaseItems: string) {\r\n if (leaseItems != null && leaseItems.length > 0) {\r\n // JSON doesn't understand date types so therefore user the reviver function to manually convert them back to dates as opposed to strings\r\n this.leaseItems = JSON.parse(leaseItems, this.sharedDealService.reviver);\r\n }\r\n }\r\n\r\n initMortgageTerm() {\r\n this.dealDto.LoanTermReq = this.dealDto.LoanTermReq || 240;\r\n this.mortgageTerm = this.dealDto.LoanTermReq / 12;\r\n }\r\n\r\n mortgageTermToLoanTerm() {\r\n this.dealDto.LoanTermReq = this.mortgageTerm * 12;\r\n }\r\n\r\n onCurrentUseOfBuilding() {\r\n this.dealDto = this.devFinanceDealService.datasetupOnCurrentUseOfBuilding(\r\n this.dealDto,\r\n );\r\n }\r\n\r\n /**\r\n * Calculates the order number of all the preferences when one is toggled\r\n * @param toggledPreference\r\n */\r\n calculatePreferenceOrder(toggledPreference: string) {\r\n const preferenceNames = [\r\n \"SearchPreferenceLoanSize\",\r\n \"SearchPreferencePricing\",\r\n \"SearchPreferenceCompletionSpeed\",\r\n \"SearchPreferenceCustomerService\",\r\n ];\r\n // Finds the highest preference order of all preferences\r\n const maxPreferenceOrder = Math.max(\r\n this.dealDto.SearchPreferenceCompletionSpeed,\r\n this.dealDto.SearchPreferenceCustomerService,\r\n this.dealDto.SearchPreferenceLoanSize,\r\n this.dealDto.SearchPreferencePricing,\r\n );\r\n\r\n // If the preference that has been toggled already has a value greater than 0 then it is being turned OFF\r\n if (this.dealDto[toggledPreference] > 0) {\r\n // Find any preferences that have a higher preference number and decrease their order number by 1\r\n for (let preference of preferenceNames) {\r\n if (preference == toggledPreference) {\r\n continue;\r\n } else {\r\n if (this.dealDto[preference] > this.dealDto[toggledPreference]) {\r\n this.dealDto[preference]--;\r\n }\r\n }\r\n }\r\n\r\n this.dealDto[toggledPreference] = 0;\r\n } else {\r\n // Preference is being turned ON\r\n // Use the highest preference order number and increase by 1\r\n this.dealDto[toggledPreference] = maxPreferenceOrder + 1;\r\n }\r\n }\r\n\r\n CalcNDV(): number {\r\n if (this.dataLoading === false) {\r\n var gdv: number = 0;\r\n var sales: number = 0;\r\n\r\n if (this.dealDto.GDV) {\r\n gdv = Number(this.dealDto.GDV);\r\n }\r\n\r\n if (this.totalSalesCost) {\r\n sales = Number(this.totalSalesCost);\r\n }\r\n\r\n var ndv: number = Number(gdv - sales);\r\n\r\n if (ndv <= 0) {\r\n ndv = 0;\r\n }\r\n\r\n this.totalNetDevelopmentVal = ndv;\r\n return ndv;\r\n }\r\n }\r\n\r\n CalcTotalSalesCost(): number {\r\n if (this.dataLoading === false) {\r\n var res: number = 0;\r\n if (this.dealDto.SalesAgentFees) {\r\n res += Number(this.dealDto.SalesAgentFees);\r\n }\r\n if (this.dealDto.SalesLegalFees) {\r\n res += Number(this.dealDto.SalesLegalFees);\r\n }\r\n this.totalSalesCost = res;\r\n return res;\r\n }\r\n }\r\n\r\n CalcTotalPurchaseCosts(): number {\r\n var res: number = 0;\r\n if (this.dealDto.PurchasePrice) {\r\n res += Number(this.dealDto.PurchasePrice);\r\n }\r\n if (this.dealDto.StampDutyLandTax) {\r\n res += Number(this.dealDto.StampDutyLandTax);\r\n }\r\n if (this.dealDto.PurchaseLegalFees) {\r\n res += Number(this.dealDto.PurchaseLegalFees);\r\n }\r\n if (this.dealDto.PurchaseCosts) {\r\n res += Number(this.dealDto.PurchaseCosts);\r\n }\r\n\r\n if (this.dealDto.PayingVATOnLandPurchase === 1) {\r\n res += Number(this.dealDto.LandPurchaseVatAmount);\r\n }\r\n\r\n this.totalPurchaseCosts = res;\r\n return res;\r\n }\r\n\r\n onOwnOrPurchaseChange(OwnOrPurchase: boolean) {\r\n this.dealDto.OwnOrPurchase = this.dealDto.HasOwnOrPurchase\r\n ? OwnOrPurchaseEnum.Own\r\n : OwnOrPurchaseEnum.Purchasing;\r\n //TODO need a review for this function\r\n this.datasetupOnOwnOrPurchaseChange();\r\n }\r\n\r\n updateVatOnLandPurchase(PayingVATOnLandPurchase): void {\r\n this.dealDto.PayingVATOnLandPurchase = PayingVATOnLandPurchase;\r\n if (this.dealDto.PayingVATOnLandPurchase === 1) {\r\n //if yes, show vat amount question prepopulated with 20% of purchase price\r\n this.dealDto.LandPurchaseVatAmount = this.dealDto.PurchasePrice * 0.2;\r\n this.CalcTotalPurchaseCosts();\r\n }\r\n }\r\n\r\n toggleHasProfessionalCostsBreakdown(hasProfessionalCostsBreakdown: boolean) {\r\n this.dealDto.HasProfessionalCostsBreakdown = hasProfessionalCostsBreakdown;\r\n\r\n if (!this.dealDto.HasProfessionalCostsBreakdown) {\r\n this.dealDto.PlanningCosts = null;\r\n this.dealDto.ProjectManagementCosts = null;\r\n this.dealDto.S106CILCosts = null;\r\n this.dealDto.ClientQSCosts = null;\r\n this.dealDto.MechanicalEngineeringCosts = null;\r\n this.dealDto.StructuralEngineeringCosts = null;\r\n this.dealDto.PartyWallCosts = null;\r\n this.dealDto.WarrantyCosts = null;\r\n this.dealDto.LandscapingCosts = null;\r\n this.dealDto.OtherProfessionalCosts = null;\r\n this.dealDto.OtherProfessionalCostsDescription = \"\";\r\n }\r\n this.calculateTotalCosts();\r\n }\r\n\r\n calculateTotalCosts() {\r\n var totalCosts: number = 0;\r\n\r\n if (this.dealDto.HasProfessionalCostsBreakdown) {\r\n if (this.dealDto.PlanningCosts) {\r\n totalCosts += Number(this.dealDto.PlanningCosts);\r\n }\r\n\r\n if (this.dealDto.ProjectManagementCosts) {\r\n totalCosts += Number(this.dealDto.ProjectManagementCosts);\r\n }\r\n\r\n if (this.dealDto.S106CILCosts) {\r\n totalCosts += Number(this.dealDto.S106CILCosts);\r\n }\r\n\r\n if (this.dealDto.ClientQSCosts) {\r\n totalCosts += Number(this.dealDto.ClientQSCosts);\r\n }\r\n\r\n if (this.dealDto.MechanicalEngineeringCosts) {\r\n totalCosts += Number(this.dealDto.MechanicalEngineeringCosts);\r\n }\r\n\r\n if (this.dealDto.StructuralEngineeringCosts) {\r\n totalCosts += Number(this.dealDto.StructuralEngineeringCosts);\r\n }\r\n\r\n if (this.dealDto.PartyWallCosts) {\r\n totalCosts += Number(this.dealDto.PartyWallCosts);\r\n }\r\n\r\n if (this.dealDto.WarrantyCosts) {\r\n totalCosts += Number(this.dealDto.WarrantyCosts);\r\n }\r\n\r\n if (this.dealDto.LandscapingCosts) {\r\n totalCosts += Number(this.dealDto.LandscapingCosts);\r\n }\r\n\r\n if (this.dealDto.OtherProfessionalCosts) {\r\n totalCosts += Number(this.dealDto.OtherProfessionalCosts);\r\n }\r\n\r\n if (this.dealDto.DemolitionCosts) {\r\n totalCosts += Number(this.dealDto.DemolitionCosts);\r\n }\r\n } else {\r\n totalCosts += Number(this.dealDto.AdditionalOngoingCosts);\r\n }\r\n\r\n if (totalCosts != 0) this.totalBreakdownProfessionalCosts = totalCosts;\r\n\r\n this.totalProjectCosts =\r\n Number(this.totalBuildCosts) +\r\n totalCosts +\r\n Number(this.dealDto.PurchasePrice);\r\n\r\n if (this.dealDto.MarketingCosts) {\r\n this.totalProjectCosts += Number(this.dealDto.MarketingCosts);\r\n }\r\n }\r\n\r\n updateBuildArea(initial: boolean = false) {\r\n if (this.dealDto.AreaUnit == AreaUnitEnum.SquareFeet) {\r\n this.dealDto.BuildCostPerArea = this.buildCostPerSqFt;\r\n this.buildCostPerSqM = Number(\r\n this.convertSqFtToSqM(this.buildCostPerSqFt).toFixed(2),\r\n );\r\n } else {\r\n this.dealDto.BuildCostPerArea = this.buildCostPerSqM;\r\n this.buildCostPerSqFt = Number(\r\n this.convertSqMToSqFt(this.buildCostPerSqM).toFixed(2),\r\n );\r\n }\r\n if (!initial) {\r\n this.calculateBuildCostIntermediary();\r\n }\r\n }\r\n\r\n convertSqMToSqFt(costPerSqM: number): number {\r\n return costPerSqM / this.areaConversionFactor;\r\n }\r\n\r\n convertSqFtToSqM(costPerSqFt: number): number {\r\n return costPerSqFt * this.areaConversionFactor;\r\n }\r\n\r\n calculateBuildCostIntermediary() {\r\n if (\r\n this.dealDto.GrossInternalAreaKnown &&\r\n this.dealDto.BuildCostPerArea > 0 &&\r\n this.dealDto.AreaAcquisition > 0\r\n ) {\r\n this.buildCostIntermediary =\r\n this.dealDto.AreaAcquisition * this.dealDto.BuildCostPerArea;\r\n }\r\n this.calculateContingency();\r\n }\r\n\r\n updateGIA() {\r\n this.calculateBuildCostIntermediary();\r\n }\r\n\r\n updateContingency() {\r\n this.calculateContingency();\r\n }\r\n\r\n toggleKnowsGIA() {\r\n this.dealDto.GrossInternalAreaKnown = !this.dealDto.GrossInternalAreaKnown;\r\n if (this.dealDto.GrossInternalAreaKnown == true) {\r\n this.dealDto.AreaUnit = AreaUnitEnum.SquareFeet;\r\n } else {\r\n this.dealDto.AreaAcquisition = null;\r\n this.dealDto.AreaUnit = null;\r\n this.buildCostPerSqFt = null;\r\n this.buildCostPerSqM = null;\r\n this.dealDto.BuildCostPerArea = null;\r\n }\r\n\r\n this.buildCostIntermediary = null;\r\n this.buildCostsForm.buildCostIntermediary.$setUntouched();\r\n this.updateContingency();\r\n }\r\n\r\n calculateContingency() {\r\n if (this.dealDto.IncludesContingency) {\r\n this.contingencyValue =\r\n this.buildCostIntermediary -\r\n this.buildCostIntermediary / (1 + Number(this.dealDto.Contingency));\r\n } else {\r\n this.contingencyValue =\r\n this.buildCostIntermediary * this.dealDto.Contingency;\r\n }\r\n this.calculateTotalBuildCost();\r\n }\r\n\r\n calculateTotalBuildCost() {\r\n if (this.dealDto.IncludesContingency) {\r\n this.totalBuildCosts = this.buildCostIntermediary;\r\n this.dealDto.BuildCosts =\r\n Number(this.buildCostIntermediary) - this.contingencyValue;\r\n } else {\r\n this.totalBuildCosts =\r\n Number(this.buildCostIntermediary) + this.contingencyValue;\r\n this.dealDto.BuildCosts = Number(this.buildCostIntermediary);\r\n }\r\n\r\n this.calculateTotalCosts();\r\n }\r\n\r\n /** Schedule */\r\n showOrHideUnitTypeOptions() {\r\n this.showUnitTypeOptions = !this.showUnitTypeOptions;\r\n }\r\n\r\n onSelectingUnitType(unitType: ScheduleTypeEnum) {\r\n this.selectedUnitType = unitType;\r\n this.showUnitTypeOptions = false;\r\n this.newScheduleData = {\r\n DealId: this.dealDto.Id,\r\n ScheduleType: this.selectedUnitType,\r\n Tenure:\r\n this.selectedUnitType == ScheduleTypeEnum.Flat\r\n ? TenureEnum.Leasehold\r\n : TenureEnum.Freehold,\r\n } as DealScheduleDTO;\r\n }\r\n\r\n addnewScheduleData() {\r\n this.devFinanceScheduleService\r\n .addUpdate(this.newScheduleData)\r\n .then((newScheduleData) => {\r\n this.scheduleData.push(newScheduleData);\r\n this.prepareUnitData();\r\n this.newScheduleData = {\r\n DealId: this.dealDto.Id,\r\n } as DealScheduleDTO;\r\n this.developmentScheduleForm.$setPristine();\r\n this.showUnitTypeOptions = false;\r\n this.selectedUnitType = null;\r\n });\r\n }\r\n\r\n updateSelectedScheduleData(scheduleRow) {\r\n this.devFinanceScheduleService\r\n .addUpdate(scheduleRow)\r\n .then((scheduleRow) => {\r\n this.calculateScheduleUnitsTotalGDVAndArea();\r\n });\r\n }\r\n\r\n deleteSelectedScheduleData() {\r\n this.dataLoading = true;\r\n this.showScheduleUnitDeleteConfirmation = false;\r\n this.devFinanceScheduleService\r\n .markasdeleted(this.tempScheduleData.Id)\r\n .then((response) => {\r\n this.scheduleData = this.scheduleData.filter(\r\n (s) => s.Id != this.tempScheduleData.Id,\r\n );\r\n this.prepareUnitData();\r\n })\r\n .catch((error) => {\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n this.showSuccessorFailureMessage = true;\r\n })\r\n .finally(() => {\r\n this.tempScheduleData = null;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n closeAddSchduleDataForm() {\r\n this.showUnitTypeOptions = false;\r\n this.selectedUnitType = null;\r\n this.newScheduleData = {\r\n DealId: this.dealDto.Id,\r\n } as DealScheduleDTO;\r\n }\r\n\r\n getTenureText(tenureValue) {\r\n var value = null;\r\n switch (tenureValue) {\r\n case TenureEnum.Freehold:\r\n value = \"Freehold\";\r\n break;\r\n case TenureEnum.Leasehold:\r\n value = \"Leasehold\";\r\n break;\r\n case TenureEnum.Other:\r\n value = \"Other\";\r\n break;\r\n default:\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n calculatePricePerUnit(scheduleRow) {\r\n if (scheduleRow.SalesPrice != null && scheduleRow.Area != null) {\r\n return Number(scheduleRow.SalesPrice) / scheduleRow.Area;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n getDescriptionText(description) {\r\n var value = null;\r\n switch (description) {\r\n case ScheduleDescriptionTypeEnum.Bungalow:\r\n value = \"Bungalow\";\r\n break;\r\n case ScheduleDescriptionTypeEnum.Cottage:\r\n value = \"Cottage\";\r\n break;\r\n case ScheduleDescriptionTypeEnum.DetachedHouse:\r\n value = \"Detached house\";\r\n break;\r\n case ScheduleDescriptionTypeEnum.SemiDetachedHouse:\r\n value = \"Semi-detached house\";\r\n break;\r\n case ScheduleDescriptionTypeEnum.TerrancedHouse:\r\n value = \"Terranced house\";\r\n break;\r\n case ScheduleDescriptionTypeEnum.Duplex:\r\n value = \"Duplex\";\r\n break;\r\n case ScheduleDescriptionTypeEnum.SingleStorey:\r\n value = \"Single storey\";\r\n break;\r\n case ScheduleDescriptionTypeEnum.Triplex:\r\n value = \"Triplex\";\r\n break;\r\n case ScheduleDescriptionTypeEnum.Studio:\r\n value = \"Studio\";\r\n break;\r\n default:\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getSelectedUnitTypeText(scheduleUnit) {\r\n var value = null;\r\n switch (scheduleUnit) {\r\n case ScheduleTypeEnum.Commercial:\r\n value = \"Commercial\";\r\n break;\r\n case ScheduleTypeEnum.House:\r\n value = \"Houses\";\r\n break;\r\n case ScheduleTypeEnum.Flat:\r\n value = \"Flats\";\r\n break;\r\n default:\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getPreAgreementText(preAgreementType) {\r\n var value = null;\r\n switch (preAgreementType) {\r\n case PreAgreementEnum.PreLet:\r\n value = \"Pre-let\";\r\n break;\r\n case PreAgreementEnum.PreSold:\r\n value = \"Pre-sold\";\r\n break;\r\n case PreAgreementEnum.None:\r\n value = \"None\";\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n prepareUnitData() {\r\n this.calculateScheduleUnitsTotalGDVAndArea();\r\n this.houses = this.scheduleData.filter(\r\n (s) => s.ScheduleType == ScheduleTypeEnum.House,\r\n );\r\n this.parking = this.scheduleData.filter(\r\n (s) => s.ScheduleType == ScheduleTypeEnum.Parking,\r\n );\r\n this.flats = this.scheduleData.filter(\r\n (s) => s.ScheduleType == ScheduleTypeEnum.Flat,\r\n );\r\n this.commercial = this.scheduleData.filter(\r\n (s) => s.ScheduleType == ScheduleTypeEnum.Commercial,\r\n );\r\n }\r\n\r\n getHouseOrFlatDescriptionOptions(selectedUnitType) {\r\n if (selectedUnitType == ScheduleTypeEnum.House) {\r\n return this.houseDescriptionTypeOptions;\r\n }\r\n\r\n if (selectedUnitType == ScheduleTypeEnum.Flat) {\r\n return this.flatDescriptionTypeOptions;\r\n }\r\n }\r\n\r\n calculateScheduleUnitsTotalGDVAndArea() {\r\n if (this.scheduleData.length > 0) {\r\n if (this.dealDto.EndPropertyType == PropertyTypeEnum.Residential) {\r\n this.totalScheduleUnitsGDV = this.scheduleData\r\n .filter(\r\n (s) =>\r\n s.ScheduleType == ScheduleTypeEnum.House ||\r\n s.ScheduleType == ScheduleTypeEnum.Flat,\r\n )\r\n .map((i) => Number(i.SalesPrice))\r\n .reduce((a, b) => a + b, 0);\r\n this.totalScheduleUnitsArea = this.scheduleData\r\n .filter(\r\n (s) =>\r\n s.ScheduleType == ScheduleTypeEnum.House ||\r\n s.ScheduleType == ScheduleTypeEnum.Flat,\r\n )\r\n .map((i) => Number(i.Area))\r\n .reduce((a, b) => a + b, 0);\r\n } else if (\r\n this.dealDto.EndPropertyType == PropertyTypeEnum.MixedUse ||\r\n this.dealDto.EndPropertyType == PropertyTypeEnum.HMO\r\n ) {\r\n this.totalScheduleUnitsGDV = this.scheduleData\r\n .map((i) => Number(i.SalesPrice))\r\n .reduce((a, b) => a + b, 0);\r\n this.totalScheduleUnitsArea = this.scheduleData\r\n .map((i) => Number(i.Area))\r\n .reduce((a, b) => a + b, 0);\r\n } else {\r\n this.totalScheduleUnitsGDV = this.scheduleData\r\n .filter((s) => s.ScheduleType == ScheduleTypeEnum.Commercial)\r\n .map((i) => Number(i.SalesPrice))\r\n .reduce((a, b) => a + b, 0);\r\n this.totalScheduleUnitsArea = this.scheduleData\r\n .filter((s) => s.ScheduleType == ScheduleTypeEnum.Commercial)\r\n .map((i) => Number(i.Area))\r\n .reduce((a, b) => a + b, 0);\r\n }\r\n }\r\n }\r\n\r\n onClickOfEditScheduleData(selectedRow) {\r\n this.tempScheduleData = { ...selectedRow };\r\n }\r\n\r\n onClickOfDeleteScheduleData(selectedRow) {\r\n this.tempScheduleData = { ...selectedRow };\r\n this.showScheduleUnitDeleteConfirmation = true;\r\n }\r\n\r\n getFilesByModule(module) {\r\n if (module == ModuleEnum.Track) {\r\n return this.fileUpload.filter(\r\n (item) =>\r\n item.Module === module &&\r\n item.DealClientId == this.currentApplicant.Id,\r\n );\r\n } else {\r\n return this.fileUpload.filter((item) => item.Module === module);\r\n }\r\n }\r\n\r\n isPropertySectionValid() {\r\n var message = \"\";\r\n this.isPropertySectionInvalidToSave = false;\r\n if (\r\n this.propertyDetailsForm &&\r\n this.propertyDetailsForm.$dirty &&\r\n this.propertyDetailsForm.$invalid\r\n ) {\r\n message = \"Property\";\r\n this.isPropertySectionInvalidToSave = true;\r\n }\r\n\r\n if (\r\n this.buildCostsForm &&\r\n this.buildCostsForm.$dirty &&\r\n this.buildCostsForm.$invalid\r\n ) {\r\n message = message ? `${message} , Build Costs` : \"Build Costs\";\r\n this.isPropertySectionInvalidToSave = true;\r\n }\r\n\r\n if (this.salesForm && this.salesForm.$dirty && this.salesForm.$invalid) {\r\n message = message ? `${message} , Sales` : \"Sales\";\r\n this.isPropertySectionInvalidToSave = true;\r\n }\r\n\r\n if (\r\n this.planningForm &&\r\n this.planningForm.$dirty &&\r\n this.planningForm.$invalid\r\n ) {\r\n message = message ? `${message} , Planning` : \"Planning\";\r\n this.isPropertySectionInvalidToSave = true;\r\n }\r\n\r\n if (\r\n this.buildProcurementForm &&\r\n this.buildProcurementForm.$dirty &&\r\n this.buildProcurementForm.$invalid\r\n ) {\r\n message = message\r\n ? `${message} , Build Procurement`\r\n : \"Build Procurement\";\r\n this.isPropertySectionInvalidToSave = true;\r\n }\r\n\r\n return `Please correct values in ${message} section.`;\r\n }\r\n\r\n updateGDV() {\r\n //Storing a below value so that we can revert the values on dealDto when addUpdatereturnonlyid fails.\r\n this.tempGDV = this.dealDto.GDV;\r\n this.tempAreaAcquisition = this.dealDto.AreaAcquisition;\r\n this.dealDto.GDV = this.totalScheduleUnitsGDV;\r\n this.updateDealDto(\"GDV has been updated successfully\");\r\n }\r\n\r\n updateGIAToTotalScheduleUnitsArea() {\r\n //Storing a below value so that we can revert the values on dealDto when addUpdatereturnonlyid fails.\r\n this.tempGDV = this.dealDto.GDV;\r\n this.tempAreaAcquisition = this.dealDto.AreaAcquisition;\r\n this.dealDto.AreaAcquisition = this.totalScheduleUnitsArea;\r\n this.updateDealDto(\"Area/GIA has been updated successfully\");\r\n }\r\n\r\n updateHasPropertyScheduleBreakdownVal() {\r\n this.updateDealDto();\r\n }\r\n\r\n updateDealDto(successmessage: string = \"\") {\r\n this.dataLoading = false;\r\n this.devFinanceDealService\r\n .addUpdatereturnonlyid(this.dealDto)\r\n .then((dealId) => {\r\n if (successmessage.length > 0) {\r\n this.showMessage(successmessage);\r\n this.showSuccessorFailureMessage = true;\r\n }\r\n })\r\n .catch((error) => {\r\n if (successmessage.length > 0) {\r\n this.dealDto.GDV = this.tempGDV;\r\n this.dealDto.AreaAcquisition = this.tempAreaAcquisition;\r\n }\r\n this.showMessage(\"Sorry, something went wrong. Please try again.\");\r\n this.showSuccessorFailureMessage = true;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n updateClassUses() {\r\n if (this.dealDto.ClassUses > 0) {\r\n for (let i = 1; i < this.dealDto.ClassUses; i *= 2) {\r\n if (this.dealDto.ClassUses >= i) {\r\n //number is in enum sum, add it to object\r\n if (this.dealDto.ClassUses & i) {\r\n this.classUses[i] = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n //watch and update classuses\r\n this.$scope.$watchCollection(\"ctrl.classUses\", (newVal: {}) => {\r\n let valuesList = Object.keys(newVal);\r\n let total: number = 0;\r\n //tot up all the numeric keys (class use enums)\r\n valuesList.forEach((v, i) => {\r\n let keyToNum = Number(v);\r\n if (newVal[keyToNum]) {\r\n total += keyToNum;\r\n }\r\n });\r\n this.dealDto.ClassUses = total;\r\n });\r\n }\r\n\r\n getOrganisationbyDealId() {\r\n this.organisationService\r\n .getOrganisationAndBrokerByDealId(this.dealDto.Id)\r\n .then((response) => {\r\n this.org = response.Organisation;\r\n this.dealBrokerUser = response.Broker;\r\n this.brokerCommission =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? this.org?.CommissionPercent\r\n : this.dealDto.BrokerCommissionPercent;\r\n this.brokerPreferredContact =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? response.Broker.PhoneNumber\r\n : this.dealDto.BrokerPhoneNumber;\r\n if (this.org.IsWhiteLabelled) {\r\n this.fileNamePrefix = this.org.Name.replace(/ /g, \"_\");\r\n } else {\r\n this.fileNamePrefix = \"Brickflow\";\r\n }\r\n });\r\n }\r\n\r\n updateRequestAssitanceDealNoteMessage() {\r\n if (this.dealDto?.DealNotes != null && this.currentUser != null) {\r\n this.dealDto.DealNotes = this.dealDto.DealNotes.map((d) => {\r\n if (\r\n d.UserId != this.currentUser.Id &&\r\n (d.NoteText == \"Your have requested for assistance.\" ||\r\n d.NoteText == \"You have requested assistance.\")\r\n ) {\r\n return { ...d, NoteText: `${d.UserFullName} requested assistance.` };\r\n }\r\n\r\n return d;\r\n });\r\n }\r\n }\r\n\r\n getOwnershipPercentageText() {\r\n if (this.dealDto != null) {\r\n return this.sharedDealService.getOwnershipPercentageText(\r\n this.currentApplicant,\r\n this.dealDto.ProductType,\r\n );\r\n }\r\n return \"Shareholding\";\r\n }\r\n\r\n closeSubmitToLenderModal() {\r\n this.showTsAndCs = false;\r\n this.brokerCommission =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? this.org?.CommissionPercent\r\n : this.dealDto.BrokerCommissionPercent;\r\n this.brokerPreferredContact =\r\n this.dealDto.Status == CaseStatusEnum.NewCase\r\n ? this.dealBrokerUser?.PhoneNumber\r\n : this.dealDto.BrokerPhoneNumber;\r\n this.isBrokerPhoneNumberUpdated = false;\r\n }\r\n\r\n isCompanyAndOwnershipSaveDisabled() {\r\n return this.dealDto.HowWillYouOwnNewDevelopment == null ||\r\n this.dealDto.HowWillYouOwnNewDevelopment <= 0\r\n ? true\r\n : false;\r\n }\r\n\r\n showBasedOnMainResidence() {\r\n return this.dealService.showBasedOnMainResidence(this.dealDto);\r\n }\r\n\r\n checkBrokerDeal() {\r\n return this.dealDto?.BrokerUserId != null && this.isClient ? true : false;\r\n }\r\n\r\n goToUserDashboardEquityAndMezz() {\r\n this.userDashboardService.setGoToNavMenu(5);\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n hasMaximumApplicants() {\r\n return this.applicantList.filter(a => a.IsApplicant).length >= 4 ? true : false;;\r\n }\r\n\r\n getRequiredRolesOptions() {\r\n return this.dealService.getRequiredRolesOptions(true, this.isReadOnlyDeal);\r\n }\r\n\r\n generateCaseStatusText() {\r\n if (this.isLender) {\r\n this.caseStatusOptions = this.selectListService.GetCaseLenderStateOptionsForLenders();\r\n }\r\n else {\r\n this.caseStatusOptions = this.selectListService.GetCaseStatusOptions(this.currentUser && this.currentUser.IsConnectUser);\r\n }\r\n this.getCaseStatusDisplayText();\r\n\r\n }\r\n\r\n showEditDealNameButton() {\r\n if (!this.isReadOnlyDeal && (!this.currentUser?.IsConnectUser || (this.currentUser?.IsConnectUser && !this.dealDto.IsReferredToConnect))) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n logExportDownload(eventName) {\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n this.dealDto.ProductType,\r\n this.dealDto.Id,\r\n );\r\n }\r\n\r\n getTinymceOptions = function () {\r\n return this.isLender || this.isReadOnlyDeal ? this.tinymceReadonlyOptions : this.tinymceOptions;\r\n };\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { DealFileAttachmentDTO } from \"@js/DTO/Deal/DealFileAttachmentDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { DealLenderMessageDTO } from \"@js/DTO/Deal/DealLenderMessageDTO.cs.d\";\r\nimport { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { FeedBackDTO } from \"@js/DTO/FeedBackDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { BridgingSubmitOfferRequest } from \"@js/DTO/Messages/Deal/BridgingSubmitOfferMessage.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { InterestRateTypeEnum } from \"@js/models/enum/InterestRateTypeEnum.cs.d\";\r\nimport { MessageRoleEnum } from \"@js/models/enum/MessageRoleEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { DealLenderMessageService } from \"@js/services/Deal/DealLenderMessageService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DevFinanceDealService } from \"@js/services/Deal/DevFinanceDealService\";\r\nimport { SharedHeadsOfTermsService } from \"@js/services/Deal/SharedHeadsOfTermsService\";\r\nimport { DealFileAttachmentService } from \"@js/services/DealFileAttachmentService\";\r\nimport { FeedBackService } from \"@js/services/FeedBackService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class DevFinanceHeadsOfTermsController {\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"LenderService\",\r\n \"RoleService\",\r\n \"DealLenderMessageService\",\r\n \"DealFileAttachmentService\",\r\n \"$window\",\r\n \"DevFinanceDealService\",\r\n \"DealLenderService\",\r\n \"SelectListService\",\r\n \"FeedBackService\",\r\n \"UserService\",\r\n \"AuthService\",\r\n \"ProductService\",\r\n \"SharedHeadsOfTermsService\"\r\n ];\r\n\r\n dataLoading: boolean = false; // Controls showing the data loading \"spinner\"\r\n dealLenders: DealLenderDTO[];\r\n showInformationMessage: boolean = false;\r\n messageContent: string;\r\n\r\n showDirection: boolean = false;\r\n\r\n toggleFeedbackSection: boolean = false;\r\n toggleHoTDetailSection: boolean = false;\r\n toggleRejectSection: boolean = false;\r\n toggleWithdrawSection: boolean = false;\r\n currentUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n isLender: boolean = false;\r\n isBroker: boolean = false;\r\n isAdmin: boolean = false;\r\n isClient: boolean = false;\r\n\r\n // show different sections to Lender based on which button clicked on Case Dashboard\r\n showFeedbackSectionLender: boolean = false;\r\n showHoTDetailSectionLender: boolean = false;\r\n showRejectSectionLender: boolean = false;\r\n showWithdrawSectionLender: boolean = false;\r\n\r\n showTsAndCsModal: boolean = false;\r\n showTsAndCsForm: boolean = false;\r\n sendingMessage: boolean = false;\r\n goToUserDashboard: boolean = false;\r\n\r\n currentDeal: DevelopmentFinanceDealDTO;\r\n currentCaseLender: DealLenderDTO;\r\n InterestRateTypeOptions = [];\r\n\r\n lenderTask: string = \"\";\r\n\r\n isRejectClicked: boolean = false;\r\n isWithdrawClicked: boolean = false;\r\n isConfirmClicked: boolean = false;\r\n isSubmitClicked: boolean = false;\r\n\r\n //Lender Message\r\n newChatMessage: string = \"\";\r\n showFullMessageId: number;\r\n\r\n //files\r\n fileUpload: DealFileAttachmentDTO[];\r\n uploadingFiles: FileUploadProgressDTO[];\r\n openModal: boolean = false;\r\n module = ModuleEnum.DIP;\r\n\r\n showFullLenderMessage = false;\r\n showFullBorrowerMessage = false;\r\n showAutofill: boolean = false;\r\n\r\n //Lender/Broker feedback properties\r\n showLenderFeedBackModal: boolean = false;\r\n showBrokerFeedBackModal: boolean = false;\r\n feedBackDTO: FeedBackDTO;\r\n prevPath: string;\r\n brokerName: string;\r\n brokerOrganisationName: string;\r\n lendingForm: ng.IFormController;\r\n\r\n //Deleteing a chat message\r\n selectedDealLenderMessageDto: DealLenderMessageDTO;\r\n showdeleteChatMessageModal: boolean = false;\r\n showConfirmDeleteButton: boolean = false;\r\n\r\n grossLoanCalcVal: number = 0;\r\n builLoanCalcVal: number = 0;\r\n landLoanCalcVal: number = 0;\r\n isDevFinance: boolean = true;\r\n\r\n productTypeText: string = null;\r\n noLenderOrMoreLenderError:boolean = false;\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private lenderService: LenderService,\r\n private roleService: RoleService,\r\n private dealLenderMessageService: DealLenderMessageService,\r\n private dealFileAttachmentService: DealFileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private devFinanceDealService: DevFinanceDealService,\r\n private dealLenderService: DealLenderService,\r\n private selectListService: SelectListService,\r\n private feedBackService: FeedBackService,\r\n private userService: UserService,\r\n private $auth: AuthService,\r\n private productService: ProductService, \r\n private sharedHeadsOfTermsService :SharedHeadsOfTermsService\r\n ) {\r\n this.userService.getUserAutofill().then((response) => {\r\n this.showAutofill = response;\r\n });\r\n\r\n this.feedBackDTO = {} as FeedBackDTO;\r\n\r\n if (\r\n this.$routeParams.openModule &&\r\n this.$routeParams.openModule == \"withdraw\"\r\n ) {\r\n this.toggleWithdrawSection = true;\r\n } else if (\r\n this.$routeParams.openModule &&\r\n this.$routeParams.openModule == \"reject\"\r\n ) {\r\n this.toggleRejectSection = true;\r\n } else if (this.$routeParams.openModule) {\r\n this.toggleFeedbackSection = true;\r\n }\r\n\r\n if (this.$routeParams.DealId && this.$routeParams.DealLenderId) {\r\n this.dataLoading = true;\r\n\r\n this.devFinanceDealService\r\n .fetch(this.$routeParams.DealId)\r\n .then((response) => {\r\n this.currentDeal = response;\r\n if (this.currentDeal) {\r\n this.dealLenderService\r\n .fetchByDealId(\r\n this.$routeParams.DealId,\r\n this.roleService.getIsLenderVisible(),\r\n this.$routeParams.DealLenderId,\r\n )\r\n .then((response) => {\r\n this.dealLenders = response;\r\n if (this.$routeParams.DealLenderId) {\r\n if (this.dealLenders.length != 1) {\r\n this.noLenderOrMoreLenderError = true;\r\n return;\r\n }\r\n this.currentCaseLender = this.dealLenders[0];\r\n\r\n this.fileUpload = this.currentDeal.Attachments.filter((f) => {\r\n return f.DealLenderId == this.$routeParams.DealLenderId;\r\n });\r\n this.calculateGrossLoanValVal();\r\n this.calculateBuildLoadCalcVal();\r\n this.calculateLandLoanCalcVal();\r\n }\r\n }).finally(() => {\r\n this.populateLenderInformation(this.currentUser)\r\n });\r\n\r\n this.lenderTask = sessionStorage.getItem(\"lenderTask\");\r\n if (this.lenderTask != null && this.lenderTask.length > 0) {\r\n switch (this.lenderTask) {\r\n case \"reject\":\r\n this.showRejectSectionLender = true;\r\n break;\r\n case \"withdraw\":\r\n this.showWithdrawSectionLender = true;\r\n break;\r\n case \"feedback\":\r\n this.showFeedbackSectionLender = true;\r\n this.updateCaseLenderMessageReadDatetime();\r\n break;\r\n case \"terms\":\r\n this.showHoTDetailSectionLender = true;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n this.productTypeText = this.productService.getProductTypeFullName(\r\n this.currentDeal.ProductType,\r\n );\r\n } else {\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.getCurrentUserAndRoles();\r\n });\r\n }\r\n\r\n this.InterestRateTypeOptions = this.selectListService.GetInterestRateType();\r\n }\r\n\r\n /*checkingIfUserIsLender() {\r\n this.roleService.isLenderUser().then(response => {\r\n this.isLender = response;\r\n });\r\n }\r\n\r\n checkingIfUerIsBroker() {\r\n this.dataLoading = true;\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n }).finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsAdmin() {\r\n this.dataLoading = true;\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n }).finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsClient() {\r\n this.dataLoading = true;\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n }).finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }*/\r\n\r\n /** Redirects to the case dashboard */\r\n goToCaseDashboard() {\r\n this.showFeedbackSectionLender = false;\r\n this.showHoTDetailSectionLender = false;\r\n this.showRejectSectionLender = false;\r\n this.showWithdrawSectionLender = false;\r\n if (\r\n this.isBroker && this.currentCaseLender && \r\n !this.currentCaseLender.IsLenderReviewComplete &&\r\n (this.currentCaseLender.Status == CaseLenderStateEnum.Offered ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Rejected ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)\r\n ) {\r\n this.prevPath = \"devfinancecasedashboard\";\r\n this.feedBackDTO.IsLenderFeedback = true;\r\n this.showLenderFeedBackModal = true;\r\n } else {\r\n this.$location.path(\"/devfinancecasedashboard/\" + this.currentDeal.Id);\r\n }\r\n }\r\n\r\n /** Close modal after send feedback */\r\n closeModal() {\r\n this.showDirection = false;\r\n this.showTsAndCsModal = false;\r\n this.showInformationMessage = false;\r\n this.isConfirmClicked = false;\r\n this.showdeleteChatMessageModal = false;\r\n if (this.goToUserDashboard) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n this.goToUserDashboard = false;\r\n this.showFeedbackSectionLender = false;\r\n this.showHoTDetailSectionLender = false;\r\n this.showRejectSectionLender = false;\r\n this.showWithdrawSectionLender = false;\r\n }\r\n\r\n if (this.prevPath) {\r\n if (this.isLender) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(`/${this.prevPath}/${this.currentDeal.Id}`);\r\n }\r\n }\r\n }\r\n\r\n goToLending() {\r\n if (\r\n this.isBroker && this.currentCaseLender &&\r\n !this.currentCaseLender.IsLenderReviewComplete &&\r\n (this.currentCaseLender.Status == CaseLenderStateEnum.Offered ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Rejected ||\r\n this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)\r\n ) {\r\n this.prevPath = \"dealforum\";\r\n this.feedBackDTO.IsLenderFeedback = true;\r\n this.showLenderFeedBackModal = true;\r\n } else {\r\n this.$location.path(\"/dealforum/\" + this.currentDeal.Id);\r\n }\r\n }\r\n\r\n saveUpdatedCaseLender(): void {\r\n this.dealLenderService\r\n .addUpdate(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender = response;\r\n this.messageContent = \"Your changes have been saved.\";\r\n this.showInformationMessage = true;\r\n });\r\n }\r\n\r\n dummyDIP() {\r\n this.dealLenderService.dummyDIP(this);\r\n }\r\n\r\n /** Process the Reject button being clicked*/\r\n rejectClicked(): void {\r\n this.isRejectClicked = true;\r\n this.dealLenderService\r\n .rejectCase(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"The borrower has been notified you have rejected their application.\";\r\n })\r\n .catch((error) => {\r\n this.messageContent = \"Sorry, something went wrong. Please try again.\";\r\n this.isRejectClicked = false;\r\n })\r\n .finally(() => {\r\n this.goToUserDashboard = true;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n ///**Process the Withdraw button being clicked */\r\n withdrawClicked(): void {\r\n this.isWithdrawClicked = true;\r\n this.dealLenderService\r\n .withdrawHoT(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"The borrower has been notified you have withdrawn terms for their application.\";\r\n })\r\n .catch((error) => {\r\n this.messageContent = \"Sorry, something went wrong. Please try again.\";\r\n this.isWithdrawClicked = false;\r\n })\r\n .finally(() => {\r\n this.goToUserDashboard = true;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n ///**Process the Submit button being clicked */\r\n submitClicked() {\r\n this.isConfirmClicked = true;\r\n this.showTsAndCsModal = true;\r\n }\r\n\r\n ///**Heads of Terms Submit button clicked event */\r\n submitHoTClicked() {\r\n // Close the Heads of Terms' Terms and Conditions modal\r\n this.showTsAndCsModal = false;\r\n this.sendingMessage = true;\r\n\r\n var request = {\r\n dealLender: this.currentCaseLender,\r\n dealLenderStatus: this.currentCaseLender.Status,\r\n } as BridgingSubmitOfferRequest;\r\n\r\n // Submit the Heads of Terms\r\n this.dealLenderService\r\n .submitOffer(request)\r\n .then((response) => {\r\n this.currentCaseLender.Status = response.dealLenderStatus;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"Thank you for submitting a Decision in Principle.\";\r\n this.goToUserDashboard = true;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while submitting your Decision in Principle. Please try again.\";\r\n this.isConfirmClicked = false;\r\n })\r\n .finally(() => {\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentDeal.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n this.sendingMessage = false;\r\n });\r\n }\r\n\r\n /**\r\n * Process the Send Feedback button being clicked\r\n * @param message\r\n */\r\n sendChatMessage() {\r\n this.dataLoading = true;\r\n let DealChatMessage = {\r\n Message: this.newChatMessage,\r\n DealId: this.$routeParams.DealId,\r\n DealLenderId: this.$routeParams.DealLenderId,\r\n SenderRole: this.getSenderMessageRole(),\r\n RecipientRoles: this.isLender ? 10 : 4,\r\n } as DealLenderMessageDTO;\r\n\r\n this.dealLenderMessageService\r\n .addUpdate(DealChatMessage)\r\n .then((dealChatMessageResponse) => {\r\n this.currentCaseLender.DealLenderMessage.push(dealChatMessageResponse);\r\n this.newChatMessage = null;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while sending feedback. Please try again.\";\r\n }).finally(() =>{\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n showFullChatMessage(index) {\r\n this.showFullMessageId = index;\r\n }\r\n\r\n updateCaseLenderMessageReadDatetime() {\r\n this.dealLenderMessageService\r\n .updateDealLenderMessageReadDatetime(this.$routeParams.DealLenderId)\r\n .then((caseLenderMessageResponse) => { });\r\n }\r\n\r\n onFileSelect(files: FileAttachmentDTO[], module: ModuleEnum) {\r\n if (files.length > 0) {\r\n this.dealFileAttachmentService\r\n .UploadFileListInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.$routeParams.DealId,\r\n this.fileUpload,\r\n module,\r\n this.$routeParams.DealLenderId,\r\n )\r\n .then((result) => {\r\n this.openModal = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: DealFileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.dealFileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n deleteFile(file: DealFileAttachmentDTO) {\r\n this.fileUpload.splice(this.fileUpload.indexOf(file), 1);\r\n this.dealFileAttachmentService.markasdeleted(file.Id).then((result) => { }); //remove on the server\r\n }\r\n\r\n showActionButtons() {\r\n if (this.currentCaseLender && (this.currentCaseLender.Status == CaseLenderStateEnum.Received || this.currentCaseLender.Status == CaseLenderStateEnum.Rejected || this.currentCaseLender.Status == CaseLenderStateEnum.Offered || this.currentCaseLender.Status == CaseLenderStateEnum.Cancelled || this.currentCaseLender.Status == CaseLenderStateEnum.Withdrawn)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n addClass(star: number, id: string) {\r\n this.feedBackService.addClass(star, id);\r\n }\r\n\r\n removeClass(star: number, id: string, rating) {\r\n this.feedBackService.removeClass(star, id, rating);\r\n }\r\n\r\n isFeedBackFormDisabled() {\r\n return this.feedBackService.isFeedBackFormDisabled(\r\n this.isLender,\r\n this.feedBackDTO,\r\n );\r\n }\r\n\r\n updateRating(star, rating) {\r\n this.feedBackDTO = this.feedBackService.updateRating(\r\n star,\r\n rating,\r\n this.feedBackDTO,\r\n );\r\n }\r\n\r\n submitFeedBack() {\r\n if (this.isLender) {\r\n this.feedBackDTO.OrganisationId = this.currentDeal.BrokerOrganisationId;\r\n this.feedBackDTO.BrokerUserId = this.currentDeal.BrokerUserId;\r\n } else {\r\n this.feedBackDTO.LenderId = this.currentCaseLender.LenderId;\r\n }\r\n\r\n this.feedBackService\r\n .addFeedBack(this.feedBackDTO, this.currentCaseLender.Id, true)\r\n .then((response) => {\r\n if (this.isLender) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(`/${this.prevPath}/${this.currentDeal.Id}`);\r\n }\r\n });\r\n }\r\n\r\n showBrokerFeedBack() {\r\n this.feedBackDTO.IsBrokerFeedback = true;\r\n this.showBrokerFeedBackModal = true;\r\n }\r\n\r\n onClickDeleteMessageButton(message: DealLenderMessageDTO) {\r\n this.showdeleteChatMessageModal = true;\r\n this.messageContent = \"Are you sure you want to delete a selected message?\";\r\n this.selectedDealLenderMessageDto = message;\r\n this.showConfirmDeleteButton = true;\r\n }\r\n\r\n deleteChatMessage() {\r\n this.dataLoading = true;\r\n this.dealLenderMessageService\r\n .markasdeleted(this.selectedDealLenderMessageDto.Id)\r\n .then((response) => {\r\n this.currentCaseLender.DealLenderMessage =\r\n this.currentCaseLender.DealLenderMessage.filter(\r\n (x) => x.Id != this.selectedDealLenderMessageDto.Id,\r\n );\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while deleting message. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.showdeleteChatMessageModal = false;\r\n delete this.selectedDealLenderMessageDto;\r\n this.showConfirmDeleteButton = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /**Calculate the Total Net Loan */\r\n calculateTotalNetLoan() {\r\n var totalNetLoan: number = 0;\r\n if (\r\n this.currentCaseLender &&\r\n this.currentCaseLender.BuildLoan &&\r\n this.currentCaseLender.LandLoan\r\n ) {\r\n totalNetLoan =\r\n +this.currentCaseLender.BuildLoan + +this.currentCaseLender.LandLoan;\r\n totalNetLoan = Math.round(totalNetLoan * 100) / 100;\r\n }\r\n return totalNetLoan;\r\n }\r\n\r\n /**Calculate total lender costs */\r\n totalLenderCosts() {\r\n var lenderCosts: number = 0;\r\n\r\n if (this.currentCaseLender) {\r\n lenderCosts =\r\n +this.currentCaseLender.LenderArrangementFee +\r\n +this.currentCaseLender.LenderExitFee +\r\n +this.currentCaseLender.InterestCoverAllocation;\r\n }\r\n return lenderCosts;\r\n }\r\n\r\n /**Calculate Arrangement Amount */\r\n recalculateArrangementAmount() {\r\n if (this.currentCaseLender && this.currentCaseLender.TotalGrossLoan) {\r\n this.currentCaseLender.LenderArrangementFeePercent =\r\n (this.currentCaseLender.LenderArrangementFee * 100) /\r\n this.currentCaseLender.TotalGrossLoan;\r\n this.currentCaseLender.LenderArrangementFeePercent = parseFloat(\r\n this.currentCaseLender.LenderArrangementFeePercent.toFixed(2),\r\n );\r\n\r\n this.totalLenderCosts();\r\n }\r\n }\r\n\r\n /**Calculate borrower equity\r\n (Puchase Price - land loan)\r\n */\r\n calculateBorrowerEquity(calcShareholderDeposit: boolean = true) {\r\n var borrowerEquity: number = 0;\r\n\r\n if (\r\n this.currentDeal &&\r\n this.currentDeal.PurchasePrice &&\r\n this.currentCaseLender &&\r\n this.currentCaseLender.LandLoan\r\n ) {\r\n borrowerEquity =\r\n this.currentDeal.PurchasePrice - this.currentCaseLender.LandLoan;\r\n }\r\n\r\n if (calcShareholderDeposit) {\r\n this.calculateMinShareholderDeposit();\r\n }\r\n return Number(borrowerEquity);\r\n }\r\n\r\n /**Calculate true cost */\r\n calculateTrueCost(): number {\r\n if (this.currentCaseLender) {\r\n var trueCost: number =\r\n +this.currentCaseLender.InterestRate / 12 +\r\n (+this.currentCaseLender.LenderArrangementFeePercent +\r\n +this.currentCaseLender.LenderExitFeePercent) /\r\n +this.currentCaseLender.LoanTerm;\r\n return trueCost;\r\n }\r\n }\r\n\r\n /**Re-calculate arrangement percent */\r\n recalculateArrangementPercent() {\r\n if (this.currentCaseLender && this.currentCaseLender.TotalGrossLoan) {\r\n this.currentCaseLender.LenderArrangementFee =\r\n (this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderArrangementFeePercent) /\r\n 100;\r\n this.currentCaseLender.LenderArrangementFee =\r\n Math.round(this.currentCaseLender.LenderArrangementFee * 100) / 100;\r\n this.totalLenderCosts();\r\n }\r\n }\r\n\r\n /**Recalculate Exit Amount */\r\n recalculateExitAmount() {\r\n const element = event.currentTarget as HTMLInputElement;\r\n const value = parseFloat(element.value);\r\n if (this.currentCaseLender && this.currentCaseLender.TotalGrossLoan) {\r\n this.currentCaseLender.LenderExitFee = value;\r\n this.currentCaseLender.LenderExitFeePercent =\r\n (this.currentCaseLender.LenderExitFee * 100) /\r\n this.currentCaseLender.TotalGrossLoan;\r\n this.currentCaseLender.LenderExitFeePercent =\r\n Math.round(this.currentCaseLender.LenderExitFeePercent * 100) / 100;\r\n this.totalLenderCosts();\r\n }\r\n }\r\n\r\n /**Recalculate Exit Percent */\r\n recalculateExitPercent() {\r\n if (\r\n this.currentCaseLender &&\r\n this.currentCaseLender.TotalGrossLoan &&\r\n this.currentCaseLender.LenderExitFeePercent\r\n ) {\r\n this.currentCaseLender.LenderExitFee =\r\n (this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderExitFeePercent) /\r\n 100;\r\n this.currentCaseLender.LenderExitFee =\r\n Math.round(this.currentCaseLender.LenderExitFee * 100) / 100;\r\n this.totalLenderCosts();\r\n }\r\n }\r\n\r\n calculatemonetaryLAFee() {\r\n if (\r\n this.currentCaseLender.LenderArrangementFeePercent != null &&\r\n this.currentCaseLender.LenderArrangementFeePercent > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderArrangementFee =\r\n Math.round(\r\n this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderArrangementFeePercent *\r\n 100,\r\n ) / 100;\r\n } else {\r\n this.currentCaseLender.LenderArrangementFee = 0;\r\n }\r\n }\r\n\r\n calculatemonetaryLAPercent() {\r\n if (\r\n this.currentCaseLender.LenderArrangementFee != null &&\r\n this.currentCaseLender.LenderArrangementFee > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderArrangementFeePercent =\r\n this.currentCaseLender.LenderArrangementFee /\r\n this.currentCaseLender.TotalGrossLoan;\r\n\r\n this.currentCaseLender.LenderArrangementFeePercent = parseFloat(\r\n this.currentCaseLender.LenderArrangementFeePercent.toFixed(4),\r\n );\r\n } else {\r\n this.currentCaseLender.LenderArrangementFeePercent = 0;\r\n }\r\n }\r\n\r\n calculatemonetaryLEFee() {\r\n if (\r\n this.currentCaseLender.LenderExitFeePercent != null &&\r\n this.currentCaseLender.LenderExitFeePercent > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderExitFee =\r\n Math.round(\r\n this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderExitFeePercent *\r\n 100,\r\n ) / 100;\r\n } else {\r\n this.currentCaseLender.LenderExitFee = 0;\r\n }\r\n }\r\n\r\n calculatemonetaryLEPercent() {\r\n if (\r\n this.currentCaseLender.LenderExitFee != null &&\r\n this.currentCaseLender.LenderExitFee > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderExitFeePercent =\r\n this.currentCaseLender.LenderExitFee /\r\n this.currentCaseLender.TotalGrossLoan;\r\n this.currentCaseLender.LenderExitFeePercent = parseFloat(\r\n this.currentCaseLender.LenderExitFeePercent.toFixed(4),\r\n );\r\n } else {\r\n this.currentCaseLender.LenderExitFeePercent = 0;\r\n }\r\n }\r\n\r\n CalcTotalBuild(): number {\r\n var res: number = this.CalcAdditionalBuild();\r\n if (this.currentDeal && this.currentDeal.BuildCosts) {\r\n res += Number(this.currentDeal.BuildCosts);\r\n }\r\n\r\n res += this.calcContingencyCost();\r\n return res;\r\n }\r\n\r\n CalcAdditionalBuild(): number {\r\n var res: number = 0;\r\n if (this.currentDeal.HasProfessionalCostsBreakdown) {\r\n if (this.currentDeal.PlanningCosts) {\r\n res += Number(this.currentDeal.PlanningCosts);\r\n }\r\n if (this.currentDeal.ProjectManagementCosts) {\r\n res += Number(this.currentDeal.ProjectManagementCosts);\r\n }\r\n if (this.currentDeal.ClientQSCosts) {\r\n res += Number(this.currentDeal.ClientQSCosts);\r\n }\r\n if (this.currentDeal.S106CILCosts) {\r\n res += Number(this.currentDeal.S106CILCosts);\r\n }\r\n if (this.currentDeal.MechanicalEngineeringCosts) {\r\n res += Number(this.currentDeal.MechanicalEngineeringCosts);\r\n }\r\n if (this.currentDeal.StructuralEngineeringCosts) {\r\n res += Number(this.currentDeal.StructuralEngineeringCosts);\r\n }\r\n if (this.currentDeal.PartyWallCosts) {\r\n res += Number(this.currentDeal.PartyWallCosts);\r\n }\r\n if (this.currentDeal.WarrantyCosts) {\r\n res += Number(this.currentDeal.WarrantyCosts);\r\n }\r\n if (this.currentDeal.LandscapingCosts) {\r\n res += Number(this.currentDeal.LandscapingCosts);\r\n }\r\n if (this.currentDeal.OtherProfessionalCosts) {\r\n res += Number(this.currentDeal.OtherProfessionalCosts);\r\n }\r\n } else {\r\n if (this.currentDeal.AdditionalOngoingCosts) {\r\n res += Number(this.currentDeal.AdditionalOngoingCosts);\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n calcContingencyCost(): number {\r\n var res: number = 0;\r\n if (this.currentDeal.Contingency && this.currentDeal.BuildCosts) {\r\n res = this.currentDeal.Contingency * this.currentDeal.BuildCosts;\r\n return res;\r\n }\r\n return res;\r\n }\r\n\r\n calculateGrossLoanValVal() {\r\n if (\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan >= 0 &&\r\n this.currentDeal.GDV != null &&\r\n this.currentDeal.GDV >= 0\r\n ) {\r\n this.grossLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.TotalGrossLoan / this.currentDeal.GDV) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n\r\n if (\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n if (\r\n this.currentCaseLender.LenderArrangementFeePercent != null &&\r\n this.currentCaseLender.LenderArrangementFeePercent > 0\r\n ) {\r\n this.calculatemonetaryLAFee();\r\n } else {\r\n if (\r\n this.currentCaseLender.LenderArrangementFee != null &&\r\n this.currentCaseLender.LenderArrangementFee > 0\r\n ) {\r\n this.calculatemonetaryLAPercent();\r\n }\r\n }\r\n\r\n if (\r\n this.currentCaseLender.LenderExitFeePercent != null &&\r\n this.currentCaseLender.LenderExitFeePercent > 0\r\n ) {\r\n this.calculatemonetaryLEFee();\r\n } else {\r\n if (\r\n this.currentCaseLender.LenderExitFee != null &&\r\n this.currentCaseLender.LenderExitFee > 0\r\n ) {\r\n this.calculatemonetaryLEPercent();\r\n }\r\n }\r\n } else {\r\n this.currentCaseLender.LenderArrangementFeePercent = 0;\r\n this.currentCaseLender.LenderArrangementFee = 0;\r\n this.currentCaseLender.LenderExitFeePercent = 0;\r\n this.currentCaseLender.LenderExitFee = 0;\r\n }\r\n }\r\n\r\n calculateBuildLoadCalcVal() {\r\n if (\r\n this.currentCaseLender.BuildLoan != null &&\r\n this.currentCaseLender.BuildLoan >= 0\r\n ) {\r\n this.builLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.BuildLoan / this.CalcTotalBuild()) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n }\r\n\r\n calculateLandLoanCalcVal() {\r\n if (\r\n this.currentCaseLender.LandLoan != null &&\r\n this.currentCaseLender.LandLoan >= 0\r\n ) {\r\n this.landLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.LandLoan / this.currentDeal.PurchasePrice) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n }\r\n\r\n getRateTypeText(e: InterestRateTypeEnum) {\r\n switch (e) {\r\n case InterestRateTypeEnum.Fixed:\r\n return \"Fixed\";\r\n case InterestRateTypeEnum.Variable:\r\n return \"Variable\";\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n getCurrentUserAndRoles() {\r\n this.dataLoading = true;\r\n this.userService\r\n .getcurentuserrecord()\r\n .then((result) => {\r\n this.currentUser = result;\r\n\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n });\r\n\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n });\r\n\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n });\r\n\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n if (!this.isLender) {\r\n this.toggleFeedbackSection = true;\r\n this.updateCaseLenderMessageReadDatetime();\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getSenderMessageRole() {\r\n if (this.isLender) {\r\n return MessageRoleEnum.Lender;\r\n } else if (this.isBroker) {\r\n return MessageRoleEnum.Broker;\r\n } else if (this.isAdmin) {\r\n return MessageRoleEnum.Admin;\r\n } else if (this.isClient) {\r\n return MessageRoleEnum.Client;\r\n }\r\n }\r\n\r\n populateLenderInformation(user: ApplicationUserDTO) {\r\n if (this.isLender) {\r\n this.currentCaseLender.ContactName = user.FullName;\r\n this.currentCaseLender.ContactEmail = user.Email;\r\n this.currentCaseLender.ContactMobilePhoneNumber = user.PhoneNumber;\r\n } \r\n }\r\n\r\n calculateMinShareholderDeposit() {\r\n if (this.currentCaseLender) {\r\n if (this.currentCaseLender.MinShareholderDepositPercent != null && this.currentCaseLender.MinShareholderDepositPercent > 0) {\r\n this.currentCaseLender.MinShareholderDeposit = Math.round((this.calculateBorrowerEquity(false) * this.currentCaseLender.MinShareholderDepositPercent) * 100) / 100;\r\n } else {\r\n this.currentCaseLender.MinShareholderDeposit = 0;\r\n }\r\n }\r\n }\r\n\r\n calculateMinShareholderDepositPercent() {\r\n if (this.currentCaseLender) {\r\n if (this.currentCaseLender.MinShareholderDeposit != null && this.currentCaseLender.MinShareholderDeposit > 0) {\r\n this.currentCaseLender.MinShareholderDepositPercent = parseFloat((this.currentCaseLender.MinShareholderDeposit / this.calculateBorrowerEquity(false)).toFixed(4));\r\n\r\n } else {\r\n this.currentCaseLender.MinShareholderDepositPercent = 0;\r\n }\r\n }\r\n }\r\n\r\n isCurrentUserAllowedToSendChat(){\r\n if(this.currentUser && this.currentDeal && (this.toggleFeedbackSection||this.showFeedbackSectionLender)){\r\n return this.sharedHeadsOfTermsService.isCurrentUserAllowedToSendChat(this.isBroker,this.currentDeal.Status,this.currentDeal.IsReferredToConnect,this.currentUser)\r\n }\r\n return false;\r\n }\r\n}\r\n","export const enum PersonalGuaranteeLevelEnum {\r\n None = 0,\r\n UpTo20Percent = 1,\r\n TwentyOneTo35Percent = 2,\r\n OneHundredPercent = 3,\r\n ThirtySixTo50Percent = 4,\r\n}\r\n","export const enum ShareholderDepositRequiredEnum {\r\n None = 0,\r\n UpTo25Percent = 1,\r\n TwentyFiveTo50Percent = 2,\r\n FiftyPercentPlus = 3,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { LenderResultSummaryDTO } from \"@js/DTO/DevelopmentFinance/LenderResultSummaryDTO.cs.d\";\r\nimport { LenderProductPairDTO } from \"@js/DTO/LenderProductPairDTO.cs\";\r\nimport { SaveAsSearchRequest } from \"@js/DTO/Messages/Deal/SaveAsSearchMessage.cs.d\";\r\nimport { SaveDevFinanceSearchRequest } from \"@js/DTO/Messages/Deal/SaveDevFinanceSearchMessage.cs.d\";\r\nimport { UpdateDevFinanceSearchGetResultResponse } from \"@js/DTO/Messages/Deal/UpdateDevFinanceSearchGetResultMessage.cs.d\";\r\nimport { MakeReferralMessageRequest } from \"@js/DTO/Messages/MakeReferralMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\nimport { MaxFlatUnitPriceEnum } from \"@js/models/enum/MaxFlatUnitPriceEnum.cs.d\";\r\nimport { MaxHouseSalePriceEnum } from \"@js/models/enum/MaxHouseSalePriceEnum.cs.d\";\r\nimport { MaxPercCommercialForMixedUseEnum } from \"@js/models/enum/MaxPercCommercialForMixedUseEnum.cs.d\";\r\nimport { MaxSqFtSalePriceEnum } from \"@js/models/enum/MaxSqFtSalePriceEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { PersonalGuaranteeLevelEnum } from \"@js/models/enum/PersonalGuaranteeLevelEnum.cs.d\";\r\nimport { PreviousDevelopmentsEnum } from \"@js/models/enum/PreviousDevelopmentsEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { ShareholderDepositRequiredEnum } from \"@js/models/enum/ShareholderDepositRequiredEnum.cs.d\";\r\nimport { SortByEnum } from \"@js/models/enum/SortByEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { DevFinanceDealService } from \"@js/services/Deal/DevFinanceDealService\";\r\nimport { DevFinanceSearchResultsService } from \"@js/services/Deal/DevFinanceSearchResultsService\";\r\nimport { SharedSearchResultsService } from \"@js/services/Deal/SharedSearchResultsService\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderResultService } from \"@js/services/LenderResultService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { SharedDataService } from \"@js/services/SharedDataService\";\r\n\r\ndeclare const window: Window & { dataLayer: any[] };\r\n\r\nexport class DevFinanceLenderResultScreenController {\r\n loadingData: boolean = false;\r\n // tourState: any = {\r\n // tourStep: 1,\r\n // tourTotalSteps: 0,\r\n // };\r\n guidanceCheckbox: boolean = true;\r\n // tourEnabled: boolean = false;\r\n totalLender: number = 0;\r\n isSearch: boolean = true;\r\n debug1: boolean = false;\r\n loanCriteria: DevelopmentFinanceDealDTO;\r\n dealLenders: DealLenderDTO[];\r\n tempLoanCriteria = null;\r\n comparisonList: LenderResultSummaryDTO[] = [];\r\n snapshotNewSearch: boolean = false;\r\n isShortlistingMore: boolean = false;\r\n isLoggedInUser: boolean = false;\r\n showLenderNamesAndLogosOverride: boolean = false;\r\n searchid: number = null;\r\n dealUniqueRef: string = null;\r\n dealClientUniqueRef: string = null;\r\n orgCode: string;\r\n orgName: string = \"Brickflow\";\r\n mortgageTerm: number = 0;\r\n\r\n //session storage values for enterprise journey\r\n userRole: string = null;\r\n clientId: string = null;\r\n isClient: boolean = false;\r\n\r\n //Enterprise user\r\n user: ApplicationUserDTO;\r\n showEnterpriseRegistrationModal: boolean = false;\r\n projectName: string = \"\";\r\n //TODO DEV FIN commented out until we know whether there will be an org toggle for dev finance\r\n //showCommercialDeal: boolean = true;\r\n summarySearchResults: LenderResultSummaryDTO[];\r\n initialSummarySearchResults: LenderResultSummaryDTO[];\r\n productLastVerifiedDates = {};\r\n deletedDealLenders: LenderProductPairDTO[];\r\n sliderShown: boolean;\r\n isAssigned: boolean = false;\r\n inActiveDealLender: number = 0;\r\n brokerageOrg: OrganisationDTO;\r\n moveContactBrokerBtnInMiddle: boolean = false;\r\n brokerDetail: string = \"\";\r\n brokerageOrgFilename: string;\r\n selectedUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n isAdmin: boolean = false;\r\n isLender: boolean = false;\r\n isBroker: boolean = false;\r\n\r\n //These are added for new search functinality\r\n existingUsers: UserSimpleDTO[];\r\n newSearch: boolean = false;\r\n existingborrower: boolean;\r\n showClientDetails: boolean = false;\r\n\r\n isLoggingOut: boolean = false;\r\n appName: string;\r\n shareDealDto: ShareDealDTO = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n\r\n toggleEditSearchName: boolean = false;\r\n showProductNote: boolean = false;\r\n productNote: string;\r\n offer: LenderResultSummaryDTO;\r\n loanLabel: string;\r\n displayMsg: string = null;\r\n showMsg: boolean = false;\r\n ShowdeleteSearch: boolean = false;\r\n warningOff: boolean = false;\r\n emailExistsError: boolean = false;\r\n noOfShortlistAllowed: number = 5;\r\n showMessageToborrower: boolean = false;\r\n borrowerMessage: string = \"\";\r\n showContactBrokerModal: boolean = false;\r\n\r\n borrowingEntityTypeOptions = [];\r\n interestRateTypeOptions = [];\r\n loanRepaymentTypeOptions = [];\r\n timeLeftOnLeaseOptions = [];\r\n numberOfPreviousDevelopmentsOptions = [];\r\n personalGuaranteeLevelOptions = [];\r\n maxIndividualUnitPriceOptions = [];\r\n currentUseofBuildingOptions = [];\r\n locationOptions = [];\r\n depositRequiredFromShareholdersOptions = [];\r\n maxHouseSalePriceOptions = [];\r\n maxFlatUnitPriceOptions = [];\r\n maxSqFtSalePriceOptions = [];\r\n maxPercCommercialForMixedUseOptions = [];\r\n maxCommercialFloorspaceOptions = [];\r\n\r\n shareholderDepositRequired = null;\r\n maxHouseSalesPrice = null;\r\n maxFlatUnitPrice = null;\r\n maxSqFtSalePrice = null;\r\n maxSqFtSalePriceFlats = null;\r\n maxPercCommercialForMixedUse = null;\r\n previousDevelopments = null;\r\n personalGuaranteeLevel = null;\r\n\r\n hasSearchChanged: boolean = false;\r\n showFilters: boolean = false;\r\n\r\n isProceedClicked: boolean = false;\r\n isSaveorSaveAsClicked: boolean = false;\r\n productResultList: number;\r\n isSaveAsWthOutIntroducee: boolean = false;\r\n tempSearchName: string = null;\r\n // Flag to disable or enable the Save as button depending on the click.\r\n isClicked: boolean = false;\r\n showSaveResults: number;\r\n //This boolean is used in the shareedmodal.html for all the deals\r\n isDevelopmentFinance: boolean = true;\r\n\r\n isResultScreen: boolean = true;\r\n selecteduserName: string;\r\n sharedSearch: boolean = false;\r\n searchPanelForm: ng.IFormController;\r\n\r\n //This boolean is used in the shareedmodal.html for all the deals\r\n isDeal: boolean = true;\r\n\r\n buildCostIntermediary: number;\r\n contingencyValue: number;\r\n\r\n //Postcode\r\n showPostcodeErrorMessage: boolean = false;\r\n postcodeErrorMsg: string;\r\n isPostcodeChange: boolean = false;\r\n\r\n showSortBy: boolean = false;\r\n hasAccessToDeal: boolean = true;\r\n noAccessToDealMsg: string;\r\n\r\n //LenderReferralSearch\r\n lenderReferralData: MakeReferralMessageRequest =\r\n {} as MakeReferralMessageRequest;\r\n isLenderReferredSearch: boolean = false;\r\n isLenderReferringSearch: boolean = false;\r\n hasLiveSearch: boolean = true;\r\n\r\n hasResultsProcessed: boolean = false;\r\n\r\n //SaveAs functionality\r\n isSaveAsClicked: boolean = false;\r\n saveAsSearchName: string;\r\n reloadSearch: boolean = false;\r\n\r\n //Enterprise journey\r\n showRegisterModal: boolean = false;\r\n showLoginSection: boolean = false;\r\n enterpriseClient: ApplicationUserDTO = {\r\n Id: \"\",\r\n AgreedToTermsAndPP: true,\r\n Roles: [\"Client\"],\r\n } as ApplicationUserDTO;\r\n error: string = \"\";\r\n\r\n // Previously shortlisted/submitted lenders which are not visible on current results because of criteria change\r\n HiddenDealLenderList: DealLenderDTO[] = [];\r\n showExportOptions: boolean = false;\r\n\r\n //Confirm phone number for new client, when they register through enterprise journey from results page\r\n showClientPhoneNumberConfirmationModal: boolean = false;\r\n clientUpdatedContact: string;\r\n confirmClientPhoneNumberForm: ng.IFormController;\r\n clientUpdatedContactErrorMessage: string;\r\n\r\n // Logging in/resetting password\r\n isLoginError: boolean = false;\r\n isResetPasswordSubmitted: boolean = false;\r\n registrationLoginError: string = null;\r\n \r\n filterProperties = [\r\n \"F_IsFirstTimeDeveloper\",\r\n \"F_NumberOfPreviousDevelopments\",\r\n \"F_ShareholderDepositRequired\",\r\n \"F_IsPersonalName\",\r\n \"F_IsOffshoreCompany\",\r\n \"F_IsMainShareholderOverseas\",\r\n \"F_PersonalGuaranteeLevel\",\r\n \"F_HasAdverseCredit\",\r\n \"F_MaxCommercialFloorspace\",\r\n \"F_IsModular\",\r\n \"F_IsAirRights\",\r\n \"F_IsPermittedDevelopmentScheme\",\r\n \"F_IsGradeOneListed\",\r\n \"F_IsGradeTwoListed\",\r\n \"F_MaxHouseSalesPrice\",\r\n \"F_MaxFlatUnitPrice\",\r\n \"F_MaxSqFtSalePrice\",\r\n \"F_MaxSqFtSalePriceFlats\",\r\n \"F_MaxPercCommercialForMixedUse\",\r\n \"F_IsWorkStarted\",\r\n \"F_MaxNumberOfUnits\",\r\n \"F_IsChargeOnAdditionalProperty\",\r\n \"F_IsFixedRate\"\r\n ];\r\n\r\n static $inject = [\r\n \"$route\",\r\n \"$routeParams\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"OrganisationService\",\r\n \"DevFinanceSearchResultsService\",\r\n \"SelectListService\",\r\n \"EventLogService\",\r\n \"LenderService\",\r\n \"DealLenderService\",\r\n \"RoleService\",\r\n \"UserService\",\r\n \"SharedSearchResultsService\",\r\n \"DevFinanceDealService\",\r\n \"DealService\",\r\n \"AuthService\",\r\n \"LenderResultService\",\r\n \"DealClientService\",\r\n \"ProductService\",\r\n 'OrganisationLinkService',\r\n 'SharedDataService'\r\n ];\r\n\r\n constructor(\r\n private $route: ng.route.IRouteService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n public $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private organisationService: OrganisationService,\r\n private devFinanceSearchResultsService: DevFinanceSearchResultsService,\r\n private selectListService: SelectListService,\r\n private eventLogService: EventLogService,\r\n private lenderService: LenderService,\r\n private dealLenderService: DealLenderService,\r\n private roleService: RoleService,\r\n private $user: UserService,\r\n private sharedSearchResultsService: SharedSearchResultsService,\r\n private devFinanceDealService: DevFinanceDealService,\r\n private dealService: DealService,\r\n private $auth: AuthService,\r\n private lenderResultService: LenderResultService,\r\n private dealClientService: DealClientService,\r\n private productService: ProductService,\r\n private organisationLinkService: OrganisationLinkService,\r\n private sharedDataService: SharedDataService\r\n ) {\r\n if (this.$location.path().startsWith(\"/devfinanceshortlistmore\")) {\r\n this.isShortlistingMore = true;\r\n }\r\n\r\n //Hide header banner for borrower on page header\r\n /* if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"userRole\") &&\r\n sessionStorage.getItem(\"userRole\") == \"borrower\" &&\r\n !$cookies.get(\"access_token\")\r\n ) {\r\n document.getElementById(\"header\").style.display = \"none\";\r\n }*/\r\n\r\n if (this.$routeParams.DealId) {\r\n if (/^\\d+$/.test(this.$routeParams.DealId)) {\r\n // Treat the reference as an ID (e.g., fetch data using the ID)\r\n this.searchid = Number(this.$routeParams.DealId);\r\n } else {\r\n // Treat the reference as a unique string (e.g., fetch data using the string)\r\n this.dealUniqueRef = this.$routeParams.DealId;\r\n }\r\n }\r\n\r\n if (this.$routeParams.dealclientuniqueref) {\r\n this.dealClientUniqueRef = this.$routeParams.dealclientuniqueref;\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n this.isLoggedInUser = true;\r\n this.loadingData = true;\r\n this.organisationService\r\n .getOrganisation()\r\n .then((organisation) => {\r\n if (organisation) {\r\n this.orgCode = organisation.IsWhiteLabelled\r\n ? organisation.OrganisationCode\r\n : \"\";\r\n this.showLenderNamesAndLogosOverride =\r\n organisation.ShowLenderNames ?? false;\r\n if (organisation.IsWhiteLabelled) {\r\n this.orgName = organisation.Name.replace(/ /g, \"_\");\r\n } else {\r\n this.orgName = \"Brickflow\";\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n this.loadingData = false;\r\n })\r\n .finally(() => {\r\n //this.loadingData = false;\r\n });\r\n } else {\r\n if (window.self == window.top) {\r\n this.userRole = sessionStorage.getItem(\"userRole\");\r\n this.isClient = this.userRole == \"borrower\";\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n this.clientId = sessionStorage.getItem(\"clientId\");\r\n this.getSearchCriteriaAndResults();\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.guidanceCheckbox = false;\r\n Promise.all([\r\n this.organisationService\r\n .getData(\"userDetails\")\r\n .then((userDetails) => {\r\n if (userDetails) {\r\n this.user = JSON.parse(userDetails);\r\n }\r\n }),\r\n this.organisationService.getData(\"userRole\").then((userRole) => {\r\n if (userRole) {\r\n this.userRole = userRole;\r\n this.isClient = this.userRole == \"borrower\";\r\n }\r\n }),\r\n this.organisationService.getData(\"clientId\").then((clientId) => {\r\n if (clientId) {\r\n this.clientId = clientId;\r\n }\r\n }),\r\n //Try get session storage if running in iframe before getting results\r\n this.organisationService.getData(\"newSearch\").then((newSearch) => {\r\n if (newSearch) {\r\n this.snapshotNewSearch = newSearch == \"true\";\r\n }\r\n }),\r\n ])\r\n .then(() => {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.organisationService.sendDataToParent(\"newSearch\", \"false\");\r\n this.getSearchCriteriaAndResults();\r\n })\r\n .catch((error) => {\r\n // One or both of the promises were rejected, handle the error\r\n console.error(\"Failed to get user data: \", error);\r\n });\r\n }\r\n }\r\n\r\n if (window.self == window.top) {\r\n // let cookieTourStep = this.$cookies.get(\"tourStep\");\r\n // if (cookieTourStep) {\r\n // this.tourState.tourStep = cookieTourStep;\r\n // }\r\n\r\n //if user is logged in, get profile\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.$user.getcurentuserrecord().then((result) => {\r\n this.selectedUser = result;\r\n\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n });\r\n\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n if (this.isAdmin) {\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n });\r\n\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n if (this.isBroker) {\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n });\r\n\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n\r\n if (this.isLender) {\r\n this.hasLiveSearch = false;\r\n this.lenderService.getUserLenderDetails().then((lender) => {\r\n if (lender.HasLiveMarketSearch) {\r\n this.hasLiveSearch = true;\r\n }\r\n });\r\n }\r\n\r\n ///Lender referred search\r\n if (sessionStorage.getItem(\"lenderReferralClient\")) {\r\n this.lenderReferralData.ClientDTO = JSON.parse(\r\n sessionStorage.getItem(\"lenderReferralClient\"),\r\n );\r\n this.isLenderReferringSearch = true;\r\n }\r\n });\r\n\r\n if (this.isShortlistingMore) {\r\n this.lenderService.getDealDeletedLenderIds(this.searchid).then(response => {\r\n this.deletedDealLenders = response;\r\n }).finally(() => {\r\n this.getSearchCriteriaAndResults();\r\n });\r\n } else {\r\n this.getSearchCriteriaAndResults();\r\n }\r\n });\r\n } else {\r\n this.isClient = true; // if the user isn't logged in then this is the enterprise journey and should be treated as a borrower/client\r\n }\r\n\r\n // this.updateGuidanceState();\r\n\r\n // $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n // this.updateGuidanceState();\r\n // });\r\n\r\n let logoutUnregister = $rootScope.$on(\r\n \"logout\",\r\n (event: ng.IAngularEvent) => {\r\n this.isLoggingOut = true;\r\n },\r\n );\r\n\r\n $scope.$on(\"$destroy\", logoutUnregister);\r\n\r\n // $rootScope.$on(\"nextTour\", (event: ng.IAngularEvent) => {\r\n // this.tourNext();\r\n // });\r\n // $rootScope.$on(\"backTour\", (event: ng.IAngularEvent) => {\r\n // this.tourBack();\r\n // });\r\n // $rootScope.$on(\"skipTour\", (event: ng.IAngularEvent) => {\r\n // this.tourSkip();\r\n // });\r\n }\r\n\r\n this.numberOfPreviousDevelopmentsOptions =\r\n this.selectListService.GetNumberOfPreviousDevelopments();\r\n this.depositRequiredFromShareholdersOptions =\r\n this.selectListService.GetShareholderDepositRequired();\r\n this.personalGuaranteeLevelOptions =\r\n this.selectListService.GetPersonalGuaranteeLevels();\r\n this.maxHouseSalePriceOptions =\r\n this.selectListService.GetMaxHouseSalePrices();\r\n this.maxFlatUnitPriceOptions =\r\n this.selectListService.GetMaxFlatUnitPrices();\r\n this.maxSqFtSalePriceOptions =\r\n this.selectListService.GetMaxSqFtSalePrices();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.maxCommercialFloorspaceOptions = this.selectListService.GetMaxCommercialFloorspaceOptions();\r\n }\r\n\r\n /**\r\n * Gets the search results and criteria for selected search\r\n * @param none\r\n */\r\n getSearchCriteriaAndResults() {\r\n if (window.self == window.top) {\r\n this.snapshotNewSearch = sessionStorage.getItem(\"newSearch\") == \"true\";\r\n sessionStorage.setItem(\"newSearch\", \"false\");\r\n }\r\n if (this.searchid) {\r\n this.loadingData = true;\r\n this.devFinanceSearchResultsService\r\n .getSearchCriteriaAndResultsByDealId(\r\n this.searchid,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n if (this.summarySearchResults != null) {\r\n const productIds = this.summarySearchResults.map((product) => product.ProductID);\r\n this.getProductLastVerifiedDates(productIds);\r\n }\r\n })\r\n .then(() => {\r\n this.getSearchLenderCount();\r\n if (this.isLoggedInUser) this.getSelectedProducts();\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n .finally(() => {\r\n if (this.loanCriteria) {\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.loadingData = false;\r\n }\r\n this.hasResultsProcessed = true;\r\n });\r\n } else if (this.dealUniqueRef) {\r\n this.loadingData = true;\r\n this.devFinanceSearchResultsService\r\n .getSearchCriteriaAndResultsByDealUniqueRef(\r\n this.dealUniqueRef,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n if (this.summarySearchResults != null) {\r\n const productIds = this.summarySearchResults.map((product) => product.ProductID);\r\n this.getProductLastVerifiedDates(productIds);\r\n }\r\n })\r\n .then(() => {\r\n this.getSearchLenderCount();\r\n if (this.loanCriteria) this.getSelectedProducts();\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n .finally(() => {\r\n if (this.loanCriteria) {\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.loadingData = false;\r\n }\r\n this.hasResultsProcessed = true;\r\n });\r\n } else if (this.dealClientUniqueRef) {\r\n this.loadingData = true;\r\n this.devFinanceSearchResultsService\r\n .getSearchCriteriaAndResultsByDealClientUniqueRef(\r\n this.dealClientUniqueRef,\r\n this.snapshotNewSearch,\r\n )\r\n .then((results) => {\r\n this.postResultsProcessing(results);\r\n })\r\n .then(() => {\r\n this.getSearchLenderCount();\r\n if (this.loanCriteria) this.getSelectedProducts();\r\n\r\n if (\r\n sessionStorage.getItem(\"LoanCriteria\") &&\r\n (this.$rootScope as any).previousRoute.startsWith(\"/compare\")\r\n ) {\r\n this.comparisonList = JSON.parse(\r\n sessionStorage.getItem(\"ComparisonList\"),\r\n );\r\n\r\n //Removing lsd data saved for compare view.\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n }\r\n })\r\n .catch((error) => { })\r\n .finally(() => {\r\n this.isSearch =\r\n this.loanCriteria &&\r\n this.loanCriteria.Status == CaseStatusEnum.Search;\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.loadingData = false;\r\n this.hasResultsProcessed = true;\r\n });\r\n }\r\n }\r\n\r\n checkDeletedLender(lenderId: string, productId: string): boolean {\r\n if (this.isShortlistingMore && this.deletedDealLenders) {\r\n const deletedLender = this.deletedDealLenders.find(deletedLender => deletedLender.LenderId === String(lenderId));\r\n\r\n if (deletedLender) {\r\n return deletedLender.ProductId === String(productId);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n postResultsProcessing(results) {\r\n if (results.HasNoAccessToDeal) {\r\n this.hasAccessToDeal = false;\r\n if (this.isClient) {\r\n this.noAccessToDealMsg =\r\n \"Please contact your broker in order to access this case.\";\r\n } else {\r\n this.noAccessToDealMsg = \"Error retrieving deal.\";\r\n }\r\n } else {\r\n this.summarySearchResults = this.initialSummarySearchResults = results.Results;\r\n this.loanCriteria = results.CriteriaDto;\r\n\r\n if(this.isLoggedInUser ){\r\n this.validateAccessAndRedirect();\r\n }\r\n \r\n this.sortSummaryResults();\r\n\r\n if (this.loanCriteria.LoanTermReq && this.loanCriteria.LoanTermReq > 0) {\r\n this.mortgageTerm = this.loanCriteria.LoanTermReq / 12;\r\n }\r\n\r\n if (this.isLoggedInUser) {\r\n if (this.dealClientUniqueRef) {\r\n if (this.isClient) {\r\n this.eventLogService.logPageLoad(\r\n \"AFTER-ENTERPRISE-LEAD-REGISTRATION-USING-EMAIL-LINK\",\r\n this.orgCode,\r\n this.selectedUser.UserName,\r\n \"Client\",\r\n this.loanCriteria?.OrganisationLinkId,\r\n this.loanCriteria.ProductType,\r\n \"\",\r\n this.loanCriteria?.Id,\r\n );\r\n }\r\n } else {\r\n if (this.loanCriteria.LenderReferralLenderId)\r\n this.isLenderReferredSearch = true;\r\n\r\n // Showing confirm client phone number modal once client register through result page\r\n if (this.isClient && sessionStorage.getItem('showConfirmClientPhoneNo') == 'true') {\r\n this.showClientPhoneNumberConfirmationModal = true;\r\n this.clientUpdatedContact = this.loanCriteria?.DealClients[0].Client.PhoneNumber;\r\n }\r\n\r\n // Expanding a 'new search' panel for first time search execution\r\n if (window.self == window.top && sessionStorage.getItem(\"newSearch\")) {\r\n this.sliderShown = (this.$rootScope as any).previousRoute.startsWith(\"/compare\") || this.showClientPhoneNumberConfirmationModal ? false : true;\r\n sessionStorage.removeItem(\"newSearch\");\r\n }\r\n }\r\n } else {\r\n if (this.$location.path().startsWith(\"/e/devfinanceresults\")) {\r\n this.populateEnterpriseClientValue(\"LENDERRESULTS\");\r\n }\r\n\r\n if (this.dealClientUniqueRef) {\r\n if (this.$routeParams.showOnlyRegister == \"false\")\r\n this.isClient = true;\r\n this.populateEnterpriseClientValue(\"LENDERRESULTS-USING-EMAIL-LINK\");\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n getSearchLenderCount() {\r\n this.lenderService\r\n .getTotalLenders(ProductFamilyEnum.Development,this.loanCriteria.BrokerOrganisationId)\r\n .then((result: number) => {\r\n this.totalLender = result;\r\n });\r\n }\r\n\r\n getSelectedProducts() {\r\n if (this.summarySearchResults && this.summarySearchResults.length > 0) {\r\n this.dealLenderService\r\n .fetchDealLendersByDealId(this.dealClientUniqueRef || this.dealUniqueRef ? this.loanCriteria.Id : this.searchid)\r\n .then((results) => {\r\n this.dealLenders = results;\r\n })\r\n .then(() => {\r\n this.comparisonList = this.summarySearchResults.filter((result) => {\r\n const isDealLender = this.dealLenders.find(\r\n (dealLender) => dealLender.ProductId === result.ProductID,\r\n );\r\n if (isDealLender) {\r\n result.DealLenderStatus = isDealLender.Status;\r\n }\r\n return (result.IsDealLender = Boolean(isDealLender));\r\n });\r\n\r\n // Previously shortlisted/submitted lenders which are not visible on current results because of criteria change\r\n this.HiddenDealLenderList = this.dealLenders.filter(l =>\r\n !this.summarySearchResults.some(s => l.ProductId === s.ProductID)\r\n );\r\n\r\n if (this.comparisonList.length > 0) {\r\n var inActiveDealLenderList = this.comparisonList.filter(\r\n (ia) =>\r\n ia.DealLenderStatus == CaseLenderStateEnum.Rejected ||\r\n ia.DealLenderStatus == CaseLenderStateEnum.Withdrawn,\r\n );\r\n this.inActiveDealLender = inActiveDealLenderList.length;\r\n }\r\n\r\n if (\r\n sessionStorage.getItem(\"LoanCriteria\") &&\r\n (this.$rootScope as any).previousRoute.startsWith(\"/compare\")\r\n ) {\r\n if (sessionStorage.getItem(\"actualcomparisonList\")) {\r\n var selectedProducts = sessionStorage.getItem(\r\n \"actualcomparisonList\",\r\n );\r\n this.comparisonList = JSON.parse(selectedProducts);\r\n sessionStorage.removeItem(\"actualcomparisonList\");\r\n } else {\r\n this.comparisonList = JSON.parse(\r\n sessionStorage.getItem(\"ComparisonList\"),\r\n );\r\n }\r\n if (this.inActiveDealLender > 0) {\r\n this.comparisonList = this.comparisonList.concat(\r\n inActiveDealLenderList,\r\n );\r\n }\r\n\r\n //Removing lsd data saved for compare view.\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n getOrganisationAndBrokerDetails() {\r\n if (!this.isLoggedInUser && !this.isAdmin && !this.isBroker) {\r\n this.loadingData = true;\r\n this.organisationService\r\n .getOrganisationAndBrokerByDealId(this.loanCriteria.Id)\r\n .then((response) => {\r\n if (response && response.Organisation != null) {\r\n this.brokerageOrg = response.Organisation;\r\n\r\n if (response.Organisation.IsBrickflow) {\r\n this.moveContactBrokerBtnInMiddle = true;\r\n } else {\r\n if (response.Broker != null) {\r\n this.brokerDetail = `${response.Broker.FullName} (${response.Broker.Email})`;\r\n }\r\n\r\n if (this.brokerageOrg.IsWhiteLabelled) {\r\n this.orgName = this.brokerageOrg.Name.replace(/ /g, \"_\");\r\n }\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n getUsersBelongToBrokerOrAdmin() {\r\n this.$user\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n });\r\n }\r\n\r\n // updateGuidanceState() {\r\n // this.tourEnabled = this.sharedSearchResultsService.updateGuidanceState(\r\n // this.guidanceCheckbox,\r\n // );\r\n // }\r\n\r\n // getGuidanceSwitchState() {\r\n // return this.sharedSearchResultsService.getGuidanceSwitchState();\r\n // }\r\n\r\n // recordGuidanceCookie() {\r\n // this.sharedSearchResultsService.recordGuidanceCookie(this.guidanceCheckbox);\r\n // this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n // }\r\n\r\n // tourNext(): void {\r\n // this.tourState.tourStep++;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // }\r\n\r\n // tourBack(): void {\r\n // this.tourState.tourStep--;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // }\r\n\r\n // tourSkip(): void {\r\n // this.tourEnabled = false;\r\n // this.$cookies.put(\"tourEnabled\", \"false\");\r\n // this.$cookies.remove(\"tourStep\");\r\n // }\r\n\r\n // startTour(): void {\r\n // this.tourState.tourStep = 1;\r\n // this.tourState.tourTotalSteps = 0;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // this.tourEnabled = true;\r\n // this.$cookies.put(\"tourEnabled\", \"true\");\r\n // }\r\n\r\n /**\r\n * Saves the new search name on the edit.\r\n * @param none\r\n */\r\n doRenameSearch() {\r\n var request: SaveDevFinanceSearchRequest = {\r\n DealDto: this.loanCriteria,\r\n ShareDealDto: this.shareDealDto,\r\n OrgCode: this.orgCode,\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n if (this.searchid) {\r\n this.devFinanceDealService.saveDevFinanceSearchReturnsId(request)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n } else if (this.dealUniqueRef) {\r\n this.devFinanceDealService.saveDevFinanceSearchReturnsUniqueRef(request)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n } else {\r\n this.toggleEditSearchName = false;\r\n }\r\n }\r\n\r\n toggleLenderComparisonSelection(item: LenderResultSummaryDTO, index: number) {\r\n\r\n let comparisonMatches: LenderResultSummaryDTO[] =\r\n this.comparisonList.filter((result, index) => {\r\n return result.ProductID === item.ProductID;\r\n });\r\n\r\n if (!comparisonMatches || comparisonMatches.length === 0) {\r\n this.comparisonList.push(item);\r\n this.eventLogService.logEvent(\r\n `SHORTLISTING-RESULT`,\r\n EventLogEnum.Shortlisting,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n item.ProductID.toString(),\r\n \"\"\r\n );\r\n } else {\r\n if (this.isShortlistingMore && item.IsDealLender && (this.loanCriteria.Status != CaseStatusEnum.Search && this.loanCriteria.Status != CaseStatusEnum.NewCase))\r\n return;\r\n comparisonMatches.forEach((value, index) => {\r\n this.comparisonList.splice(this.comparisonList.indexOf(value), 1);\r\n });\r\n this.eventLogService.logEvent(\r\n `DESELECTING-SHORTLISTED-RESULT`,\r\n EventLogEnum.Shortlisting,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n item.ProductID.toString(),\r\n \"\"\r\n );\r\n }\r\n //This is user for shortlisting pdf\r\n this.prepareDataForShortlistPdf();\r\n }\r\n\r\n //This is used in shortlisting pdf\r\n prepareDataForShortlistPdf() {\r\n this.loanCriteria.ComparisonList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n }\r\n\r\n comparisonContains(item: LenderResultSummaryDTO): boolean {\r\n return !!this.comparisonList.find((result, index) => {\r\n return result.ProductID === item.ProductID;\r\n });\r\n }\r\n\r\n selectionOrderNumber(item: LenderResultSummaryDTO) {\r\n var activeProductList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n\r\n var hiddenProduct = this.HiddenDealLenderList.filter(hl => hl.Status != CaseLenderStateEnum.Rejected && hl.Status != CaseLenderStateEnum.Withdrawn);\r\n var hiddenProductLength = this.isShortlistingMore ? hiddenProduct.length : 0;\r\n\r\n var order =\r\n activeProductList.map((item) => item.ProductID).indexOf(item.ProductID) + hiddenProductLength +\r\n 1;\r\n if (order === 0) {\r\n return \" \";\r\n }\r\n\r\n return order;\r\n }\r\n\r\n /**\r\n * Processes the clicking of the \"View Eligibility\" anchor/button and index to show on the row number\r\n * @param item BridgingLenderResultSummaryDTO\r\n */\r\n viewEligibility(item: LenderResultSummaryDTO) {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.showProductNote = true;\r\n this.offer = item;\r\n this.loanLabel = item.LoanLabel;\r\n this.productNote = item.AdditionalProductInfo;\r\n }\r\n\r\n /**\r\n *Marks a selected search as a deleted\r\n * @param\r\n */\r\n deleteSearch() {\r\n if (this.$routeParams.DealId) {\r\n this.dealService\r\n .markasdeleted(this.$routeParams.DealId)\r\n .then((response) => {\r\n this.displayMsg = \"Search is successfully deleted\";\r\n this.showMsg = true;\r\n this.ShowdeleteSearch = true;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n this.showMsg = true;\r\n });\r\n }\r\n }\r\n\r\n closeDeleteModal() {\r\n this.showMsg = false;\r\n this.displayMsg = null;\r\n this.ShowdeleteSearch = false;\r\n this.warningOff = true;\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n viewSingleLoan(item: LenderResultSummaryDTO) {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.warningOff = true;\r\n //Storing the actual comparisonList to local storage so that to recover it later when we comeback to result screen from compare screen.\r\n sessionStorage.setItem(\r\n \"actualcomparisonList\",\r\n JSON.stringify(this.comparisonList),\r\n );\r\n this.comparisonList = [];\r\n\r\n this.comparisonList.push(item);\r\n this.goCompare();\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n }\r\n\r\n goCompare() {\r\n this.warningOff = true;\r\n\r\n this.sharedSearchResultsService.clearStorageDataForCompareView();\r\n\r\n let comparisonList = this.comparisonList.filter(\r\n (cl) =>\r\n cl.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n cl.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n\r\n sessionStorage.setItem(\"ComparisonList\", JSON.stringify(comparisonList));\r\n sessionStorage.setItem(\"LoanCriteria\", JSON.stringify(this.loanCriteria));\r\n\r\n if (this.dealClientUniqueRef) {\r\n if (!this.isLoggedInUser) {\r\n this.dealUniqueRef = this.loanCriteria.UniqueRef;\r\n //This property is used in compare view controller to find previous route \r\n sessionStorage.setItem(\"DealClientUniqueRef\", this.dealClientUniqueRef);\r\n } else {\r\n this.searchid = this.loanCriteria.Id;\r\n }\r\n }\r\n\r\n\r\n if (this.searchid) {\r\n this.$location.path(\"compare/\" + this.searchid + \"/\" + 0 + \"/\" + true);\r\n } else {\r\n this.$location.path(\"compare/\" + this.dealUniqueRef + \"/\" + 0 + \"/\" + true);\r\n }\r\n }\r\n\r\n showBookMeetingButton() {\r\n return (\r\n !this.isLoggedInUser &&\r\n this.isClient &&\r\n this.brokerDetail == \"\" &&\r\n this.brokerageOrg != null\r\n );\r\n }\r\n\r\n bookMeeting() {\r\n this.$auth\r\n .getHubspotDeveloperBookMeetingWithSearch()\r\n .then((hubSpotUrl: string) => {\r\n window.open(hubSpotUrl);\r\n });\r\n }\r\n\r\n sendMessageToBroker(message) {\r\n this.loadingData = true;\r\n this.borrowerMessage = null;\r\n this.organisationService\r\n .sendBorrowerMessageToSearchBroker(\r\n this.loanCriteria.Id,\r\n message,\r\n this.loanCriteria.DealClients[0].Client.FirstName,\r\n this.loanCriteria.DealClients[0].Client.LastName,\r\n this.loanCriteria.DealClients[0].Client.Email,\r\n ProductTypeEnum.Development,\r\n \"Results\",\r\n )\r\n .then((results) => {\r\n if (results) {\r\n this.displayMsg = `Message has been sent successfully.`;\r\n this.showMessageToborrower = true;\r\n } else {\r\n this.displayMsg = `There is problem sending a message, Please try later.`;\r\n this.showMessageToborrower = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n closeContactBrokerModal() {\r\n this.showContactBrokerModal = false;\r\n this.showMessageToborrower = false;\r\n this.displayMsg = null;\r\n }\r\n\r\n getTotalShortlistedLenders() {\r\n var activeDealLenders = this.comparisonList.filter(\r\n (al) =>\r\n al.DealLenderStatus != CaseLenderStateEnum.Rejected &&\r\n al.DealLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n\r\n var hiddenProduct = this.HiddenDealLenderList.filter(hl => hl.Status != CaseLenderStateEnum.Rejected && hl.Status != CaseLenderStateEnum.Withdrawn);\r\n var hiddenProductLength = this.isShortlistingMore ? hiddenProduct.length : 0;\r\n\r\n return activeDealLenders.length + hiddenProductLength;\r\n }\r\n\r\n logPdfDownload(eventName) {\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n );\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n changeSearch() {\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n this.warningOff = true;\r\n sessionStorage.setItem(\"skip\", \"true\");\r\n if (!this.isLoggedInUser && (this.dealUniqueRef || this.dealClientUniqueRef)) {\r\n if (this.dealClientUniqueRef) sessionStorage.setItem('previousRoute', 'referredsearchdeal')\r\n var url = `/e/devfinancecriteria/${this.loanCriteria.UniqueRef}`;\r\n if (this.loanCriteria.OrganisationLinkId > 0) {\r\n url = `${url}/${this.loanCriteria.OrganisationLinkId}`;\r\n }\r\n this.go(url);\r\n }\r\n else if (this.searchid) {\r\n this.go(\"/devfinancecriteria/\" + this.searchid);\r\n } else {\r\n this.go(\"/devfinancecriteria\");\r\n }\r\n }\r\n\r\n newloan() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/devfinancecriteria/0\");\r\n }\r\n\r\n updateSearchViaSlider(isAdminDebugValueChanged: boolean = false): void {\r\n if (this.searchPanelForm.$valid && !this.showPostcodeErrorMessage) {\r\n if (this.loanCriteria.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing) {\r\n if (this.loanCriteria.PurchasePrice <= 0) return;\r\n }\r\n\r\n if (this.loanCriteria.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n if (this.loanCriteria.Currentvalue <= 0) return;\r\n }\r\n\r\n if (this.loanCriteria.GDV <= 0) return;\r\n\r\n this.loadingData = true;\r\n this.hasSearchChanged = true;\r\n\r\n this.clearSelected();\r\n\r\n this.updateCriteriaAndGetResults(\r\n isAdminDebugValueChanged && this.isAdmin ? false : true,\r\n );\r\n }\r\n }\r\n\r\n clearSelected() {\r\n if (this.isShortlistingMore) {\r\n this.comparisonList = this.comparisonList.filter(item =>\r\n this.summarySearchResults.some(result => result.ProductID == item.ProductID)\r\n );\r\n\r\n const dealLenders = this.initialSummarySearchResults.filter(result =>\r\n result.IsDealLender && !result.IsDeleted\r\n );\r\n\r\n dealLenders.forEach(dealLender => {\r\n if (!this.comparisonList.some(item => item.ProductID === dealLender.ProductID)) {\r\n this.comparisonList.push(dealLender);\r\n }\r\n });\r\n } else {\r\n this.comparisonList = this.comparisonList.filter(item =>\r\n this.summarySearchResults.some(result => result.ProductID == item.ProductID)\r\n );\r\n }\r\n }\r\n\r\n updateCriteriaAndGetResults(criteriaChanged: boolean, updateLoanLabels: boolean = false) {\r\n this.devFinanceDealService.updateSearchCriteriaAndGetResults(this.loanCriteria, criteriaChanged, this.debug1, this.isPostcodeChange, this.isShortlistingMore).then((results: UpdateDevFinanceSearchGetResultResponse) => {\r\n if (this.isPostcodeChange) {\r\n if (results.CriteriaLocation != null) {\r\n this.loanCriteria.Locations = results.CriteriaLocation;\r\n this.summarySearchResults = results.Results;\r\n this.sortSummaryResults();\r\n\r\n } else {\r\n this.postcodeErrorMsg = results.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n } else {\r\n this.summarySearchResults = results.Results;\r\n this.sortSummaryResults();\r\n }\r\n }).catch((error) => {\r\n\r\n }).finally(() => {\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.clearSelected();\r\n this.isPostcodeChange = false;\r\n\r\n if (updateLoanLabels) {\r\n this.updateLoanLabels();\r\n }\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n getSearchResultCount() {\r\n return this.sharedSearchResultsService.getSearchResultCount(\r\n this.summarySearchResults,\r\n );\r\n }\r\n\r\n onPersonalGuaranteeLevelOptionsChange(e: PersonalGuaranteeLevelEnum) {\r\n switch (e) {\r\n case PersonalGuaranteeLevelEnum.UpTo20Percent:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = 0.2;\r\n break;\r\n case PersonalGuaranteeLevelEnum.TwentyOneTo35Percent:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = 0.35;\r\n break;\r\n case PersonalGuaranteeLevelEnum.ThirtySixTo50Percent:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = 0.5;\r\n break;\r\n case PersonalGuaranteeLevelEnum.OneHundredPercent:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = 1.0;\r\n break;\r\n default:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = null;\r\n break;\r\n }\r\n }\r\n\r\n getPersonalGuaranteeLevelOptions() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_PersonalGuaranteeLevel) {\r\n case 0.2:\r\n value = PersonalGuaranteeLevelEnum.UpTo20Percent;\r\n break;\r\n case 0.35:\r\n value = PersonalGuaranteeLevelEnum.TwentyOneTo35Percent;\r\n break;\r\n case 0.5:\r\n value = PersonalGuaranteeLevelEnum.ThirtySixTo50Percent;\r\n break;\r\n case 1.0:\r\n value = PersonalGuaranteeLevelEnum.OneHundredPercent;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n applyFilters() {\r\n this.loadingData = true;\r\n this.showFilters = false;\r\n this.updateCriteriaAndGetResults(false);\r\n }\r\n\r\n clearClientFilters() {\r\n this.loanCriteria.F_IsFirstTimeDeveloper = null;\r\n this.loanCriteria.F_NumberOfPreviousDevelopments = null;\r\n this.loanCriteria.F_ShareholderDepositRequired = null;\r\n this.shareholderDepositRequired = null;\r\n this.loanCriteria.F_IsPersonalName = null;\r\n this.loanCriteria.F_IsOffshoreCompany = null;\r\n this.loanCriteria.F_IsMainShareholderOverseas = null;\r\n this.loanCriteria.F_PersonalGuaranteeLevel = null;\r\n this.personalGuaranteeLevel = null;\r\n this.loanCriteria.F_HasAdverseCredit = null;\r\n this.loanCriteria.F_MaxCommercialFloorspace = null;\r\n }\r\n\r\n showClearForClientFilters() {\r\n if (\r\n this.loanCriteria.F_IsFirstTimeDeveloper != null ||\r\n this.loanCriteria.F_NumberOfPreviousDevelopments != null ||\r\n this.loanCriteria.F_ShareholderDepositRequired != null ||\r\n this.loanCriteria.F_IsPersonalName != null ||\r\n this.loanCriteria.F_IsOffshoreCompany != null ||\r\n this.loanCriteria.F_IsMainShareholderOverseas != null ||\r\n this.loanCriteria.F_PersonalGuaranteeLevel != null ||\r\n this.loanCriteria.F_HasAdverseCredit != null ||\r\n this.loanCriteria.F_MaxCommercialFloorspace != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n toggleCheckbox(variableName) {\r\n if (\r\n this.loanCriteria[variableName] === null ||\r\n this.loanCriteria[variableName] === false\r\n ) {\r\n this.loanCriteria[variableName] = true;\r\n } else {\r\n this.loanCriteria[variableName] = null;\r\n }\r\n }\r\n\r\n clearPropertyFilters() {\r\n this.loanCriteria.F_IsAirRights = null;\r\n this.loanCriteria.F_IsModular = null;\r\n this.loanCriteria.F_IsPermittedDevelopmentScheme = null;\r\n this.loanCriteria.F_IsGradeOneListed = null;\r\n this.loanCriteria.F_IsGradeTwoListed = null;\r\n this.loanCriteria.F_MaxHouseSalesPrice = null;\r\n this.loanCriteria.F_MaxFlatUnitPrice = null;\r\n this.loanCriteria.F_MaxNumberOfUnits = null;\r\n this.loanCriteria.F_MaxPercCommercialForMixedUse = null;\r\n this.loanCriteria.F_MaxSqFtSalePrice = null;\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = null;\r\n this.loanCriteria.F_IsWorkStarted = null;\r\n this.maxHouseSalesPrice = null;\r\n this.maxFlatUnitPrice = null;\r\n this.maxSqFtSalePrice = null;\r\n this.maxPercCommercialForMixedUse = null;\r\n this.maxSqFtSalePriceFlats = null;\r\n this.previousDevelopments = null;\r\n }\r\n\r\n showClearForPropertyFilters() {\r\n if (\r\n this.loanCriteria.F_IsAirRights != null ||\r\n this.loanCriteria.F_IsModular != null ||\r\n this.loanCriteria.F_IsPermittedDevelopmentScheme != null ||\r\n this.loanCriteria.F_IsGradeOneListed != null ||\r\n this.loanCriteria.F_IsGradeTwoListed != null ||\r\n this.loanCriteria.F_MaxHouseSalesPrice != null ||\r\n this.loanCriteria.F_MaxFlatUnitPrice != null ||\r\n this.loanCriteria.F_MaxNumberOfUnits != null ||\r\n this.loanCriteria.F_MaxPercCommercialForMixedUse != null ||\r\n this.loanCriteria.F_MaxSqFtSalePrice != null ||\r\n this.loanCriteria.F_IsWorkStarted != null ||\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearFinanceFilters() {\r\n this.loanCriteria.F_IsChargeOnAdditionalProperty = null;\r\n this.loanCriteria.F_IsFixedRate = null;\r\n }\r\n\r\n showClearForFinanceFilters() {\r\n if (\r\n this.loanCriteria.F_IsChargeOnAdditionalProperty != null ||\r\n this.loanCriteria.F_IsFixedRate != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearAllFilters() {\r\n this.clearClientFilters();\r\n this.clearPropertyFilters();\r\n this.clearFinanceFilters();\r\n }\r\n\r\n debugSearch() {\r\n const stringJSON = JSON.stringify(this.loanCriteria);\r\n navigator.clipboard\r\n .writeText(stringJSON)\r\n .then()\r\n .catch((e) => console.log(e));\r\n }\r\n\r\n onClickFilterCancel() {\r\n this.filterProperties.forEach(\r\n (e) => (this.loanCriteria[e] = this.tempLoanCriteria[e]),\r\n );\r\n\r\n this.shareholderDepositRequired = null;\r\n this.personalGuaranteeLevel = null;\r\n this.maxHouseSalesPrice = null;\r\n this.maxFlatUnitPrice = null;\r\n this.maxSqFtSalePrice = null;\r\n this.maxSqFtSalePriceFlats = null;\r\n this.maxPercCommercialForMixedUse = null;\r\n }\r\n\r\n checkFilterSelected(property: string) {\r\n return this.sharedSearchResultsService.checkFilterSelected(\r\n property,\r\n this.tempLoanCriteria,\r\n );\r\n }\r\n\r\n getDisplayTextForProperty(property) {\r\n if (property == \"F_MaxNumberOfUnits\") {\r\n return `Max ${this.loanCriteria.F_MaxNumberOfUnits} Units`;\r\n } else {\r\n return this.sharedSearchResultsService.getDisplayTextForProperty(\r\n property,\r\n );\r\n }\r\n }\r\n\r\n getPropertyValue(property) {\r\n let propertyValue = this.loanCriteria[property];\r\n switch (property) {\r\n case \"F_ShareholderDepositRequired\":\r\n return this.selectListService\r\n .GetShareholderDepositRequired()\r\n .find((item) => item.key === this.getShareholderDepositRequired())\r\n ?.displayName;\r\n case \"F_PersonalGuaranteeLevel\":\r\n return this.selectListService\r\n .GetPersonalGuaranteeLevels()\r\n .find((item) => item.key === this.getPersonalGuaranteeLevelOptions())\r\n ?.displayName;\r\n case \"F_MaxHouseSalesPrice\":\r\n return this.selectListService\r\n .GetMaxHouseSalePrices()\r\n .find((item) => item.key === this.getMaxHouseSalesPrice())\r\n ?.displayName;\r\n case \"F_MaxFlatUnitPrice\":\r\n return this.selectListService\r\n .GetMaxFlatUnitPrices()\r\n .find((item) => item.key === this.getMaxFlatUnitPrice())?.displayName;\r\n case \"F_MaxSqFtSalePrice\":\r\n return this.selectListService\r\n .GetMaxSqFtSalePrices()\r\n .find((item) => item.key === this.getMaxSqFtSalePrice())?.displayName;\r\n case \"F_MaxSqFtSalePriceFlats\":\r\n return this.selectListService\r\n .GetMaxSqFtSalePrices()\r\n .find((item) => item.key === this.getMaxSqFtSalePriceFlats())\r\n ?.displayName;\r\n case \"F_NumberOfPreviousDevelopments\":\r\n return this.selectListService\r\n .GetNumberOfPreviousDevelopments()\r\n .find((item) => item.key === this.getPreviousDevelopments())\r\n ?.displayName;\r\n case \"F_MaxNumberOfUnits\":\r\n return propertyValue;\r\n case \"F_MaxCommercialFloorspace\":\r\n return this.selectListService\r\n .GetMaxCommercialFloorspaceOptions()\r\n .find((item) => item.key === this.tempLoanCriteria.F_MaxCommercialFloorspace)\r\n ?.displayName;\r\n default:\r\n return propertyValue;\r\n }\r\n }\r\n\r\n filterPropertyToText(property: string) {\r\n if (property === \"F_MaxNumberOfUnits\") return;\r\n\r\n let value = this.tempLoanCriteria[property];\r\n if (typeof value == \"boolean\" && value == true) {\r\n return;\r\n } else if (value != null && typeof value != \"boolean\") {\r\n return `: ${this.getPropertyValue(property)}`;\r\n } else if (value == null) {\r\n return;\r\n }\r\n return false;\r\n }\r\n\r\n countFiltersSelected() {\r\n let count = 0;\r\n count = this.sharedSearchResultsService.countFiltersSelected(\r\n this.tempLoanCriteria,\r\n this.filterProperties,\r\n );\r\n return count;\r\n }\r\n\r\n /*saveEnterpriseClientAndRenameDeal() {\r\n this.loadingData = true;\r\n\r\n this.$user.checkEmailExists(this.user.Email).then((response) => {\r\n if (!response) {\r\n let userFullName = this.user.FullName;\r\n let spaceIndex = userFullName.indexOf(' ');\r\n\r\n let firstName = '';\r\n let lastName = '';\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(' '));\r\n lastName = userFullName.substring(userFullName.indexOf(' ') + 1);\r\n }\r\n\r\n // Set up Client dto\r\n var clientDto = {\r\n FirstName: firstName,\r\n LastName: lastName,\r\n PhoneNumber: this.user.PhoneNumber,\r\n Email: this.user.Email,\r\n BrokerOrganisationId: this.brokerageOrg.Id,\r\n PostalAddress: {\r\n AddressLine1: '',\r\n AddressLine2: '',\r\n AddressLine3: '',\r\n AddressLine4: '',\r\n PostCode: ''\r\n } as PostalAddress\r\n } as ClientDTO;\r\n\r\n var currentDate = new Date();\r\n this.loanCriteria.Name = this.projectName ? this.projectName : firstName + ' ' + lastName + ' Loan Search ' + currentDate.getDate() + \"/\" + (currentDate.getMonth() + 1) + \"/\" + currentDate.getFullYear()\r\n\r\n var request: SaveEnterpriseClientAndRenameSearchRequest = {\r\n BridgingDealDto: null,\r\n CommercialDealDto: null,\r\n ClientDto: clientDto,\r\n ProductFamily: ProductFamilyEnum.Development,\r\n DevFinanceDealDto: this.loanCriteria\r\n }\r\n\r\n this.dealService.saveEnterpriseClientAndRenameDeal(request).then((response) => {\r\n if (response) {\r\n document.getElementById('body').style.overflow = \"auto\";\r\n this.showEnterpriseRegistrationModal = false;\r\n this.loanCriteria = response.DevFinanceDealDto;\r\n if (window.self == window.top) {\r\n sessionStorage.setItem('clientId', this.loanCriteria.DealClients[0].Client.Id.toString());\r\n } else {\r\n this.organisationService.sendDataToParent('clientId', this.loanCriteria.DealClients[0].Client.Id.toString());\r\n }\r\n\r\n this.$user.sendEventToHubspot(this.user, \"ENTERPRISE-CONTACT-REGISTERED\", false, this.orgCode, this.userRole, this.loanCriteria && this.loanCriteria.OrganisationLinkId != null ? this.loanCriteria.OrganisationLinkId : 0, this.loanCriteria.ProductType, this.loanCriteria ? this.loanCriteria.Id : 0);\r\n\r\n // For Google analytics tracking\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'results_gating_form',\r\n 'loan_product_family': this.productService.getProductFamilyTextForGa(this.loanCriteria.ProductFamily),\r\n 'loan_product_type': this.productService.getProductTypeTextForGa(this.loanCriteria.ProductType, this.loanCriteria.IsFamilyInResidence)\r\n });\r\n }\r\n\r\n }).finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.emailExistsError = true;\r\n this.loadingData = false;\r\n }\r\n });\r\n\r\n\r\n }*/\r\n\r\n gotoSignInPage() {\r\n this.$location.path(\"/login\");\r\n }\r\n\r\n goToLink(url) {\r\n var baseUrl = window.location.href.split(\"#!\")[0] + \"#!\";\r\n var newUrl = baseUrl + url;\r\n window.open(newUrl, \"_blank\");\r\n }\r\n\r\n /**\r\n * Opens a 'share a search with client' modal if search do not have client attached to.\r\n * @param none\r\n */\r\n saveResultsForShareSearchToClient() {\r\n if (!this.isSaveAsClicked) {\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.saveSaveAsSearch();\r\n }\r\n this.newSearch = false;\r\n }\r\n\r\n showShareSearchModal() {\r\n this.newSearch = true;\r\n\r\n this.shareDealDto = {\r\n DealId: this.searchid,\r\n DealName: this.isSaveAsClicked ? \"\" : this.loanCriteria?.Name,\r\n ShowLenderNamesAndLogos: this.loanCriteria?.ShowLenderInfoBrokerOverride,\r\n EmailLinkToClient: false,\r\n AccessLevel: CaseAccessLevelEnum.FullAccess,\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n\r\n this.shareDealDto.ClientDto = {\r\n FirstName: \"\",\r\n LastName: \"\",\r\n Email: \"\",\r\n PhoneNumber: \"\",\r\n } as ClientDTO;\r\n }\r\n\r\n /**\r\n * Saves the search or saves the search and create a case.\r\n * @param createCase (boolean set to true when promoting search to case)\r\n */\r\n\r\n //TODO: this functon does not need a productResultList parameter but as views have been shared with devfinance we are passing it\r\n register(createCase: boolean = false, productResultList: number) {\r\n this.loadingData = true;\r\n if (this.isShortlistingMore) {\r\n if (this.validateWithdrawnLendersUnique() == true) {\r\n this.dealLenderService.shortlistMoreLenders(this.loanCriteria.Id, this.getDealLenders(this.comparisonList), this.hasSearchChanged).then((response) => {\r\n }).then(() => {\r\n this.getSelectedProducts();\r\n }).finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.loadingData = false;\r\n }\r\n } else {\r\n if (\r\n this.shareDealDto &&\r\n this.shareDealDto.DealName &&\r\n this.shareDealDto.DealName.length > 0\r\n ) {\r\n this.loanCriteria.Name = this.shareDealDto.DealName;\r\n }\r\n\r\n var request: SaveDevFinanceSearchRequest = {\r\n DealDto: this.loanCriteria,\r\n ShareDealDto: null,\r\n OrgCode: \"\",\r\n EnterpriseClientDto: null,\r\n };\r\n\r\n this.devFinanceDealService\r\n .saveDevFinanceSearchReturnsId(request)\r\n .then((response) => {\r\n this.loanCriteria.Id = response as number;\r\n this.loadingData = false;\r\n\r\n // Creating the case is done on the casedashboard for deals\r\n if (createCase) {\r\n this.$location.path(\r\n \"/devfinancecasedashboard/\" + this.loanCriteria.Id + \"/\" + true,\r\n );\r\n }\r\n\r\n var shortlistDealLenders = this.getDealLenders(this.comparisonList);\r\n\r\n this.dealLenderService\r\n .addUpdatelistreturnonlyids(shortlistDealLenders)\r\n .then((response) => {\r\n if (this.dealLenders != null) {\r\n let deallenders = this.dealLenders.filter(\r\n (lender) => response.indexOf(lender.Id) === -1,\r\n );\r\n\r\n deallenders.forEach((lender) =>\r\n this.dealLenderService.markasdeleted(lender.Id),\r\n );\r\n }\r\n })\r\n .finally(() => {\r\n this.getSelectedProducts();\r\n this.isClicked = false;\r\n this.newSearch = false;\r\n this.isProceedClicked = false;\r\n this.showSaveResults = null;\r\n this.loadingData = false;\r\n });\r\n })\r\n .catch((response) => {\r\n //TODO BRIDGING - capture if an error has occurred and process it\r\n //this.isError = true;\r\n this.isProceedClicked = false;\r\n })\r\n .finally(() => { });\r\n }\r\n }\r\n\r\n /**\r\n * updates a seach with introducee details and saves it and sends emil to client if 'notifyBorrower' is set to true.\r\n * @param notifyBorrower\r\n */\r\n\r\n sendResultsToClient(notifyBorrower) {\r\n if (this.isSaveAsClicked) {\r\n this.saveSaveAsSearch(true);\r\n } else {\r\n this.loadingData = true;\r\n this.dealService\r\n .shareDealWithClient(this.shareDealDto)\r\n .then(() => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.shareDealDto.ClientDto.FirstName +\r\n \" \" +\r\n this.shareDealDto.ClientDto.LastName;\r\n //this.loanCriteria.DealClients[0] = this.shareDealDto.ClientDto;\r\n this.loanCriteria.Name = this.shareDealDto.DealName;\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.loadingData = false;\r\n this.isAssigned = true;\r\n this.reloadSearch = true;\r\n })\r\n .finally(() => {\r\n delete this.shareDealDto;\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n getDealLenders(selectedLenders: LenderResultSummaryDTO[]) {\r\n var lendersList: DealLenderDTO[] = [];\r\n\r\n if (this.dealClientUniqueRef || this.dealUniqueRef) {\r\n this.searchid = this.loanCriteria.Id;\r\n }\r\n\r\n selectedLenders.forEach(({ ProductID, LenderID, GrossLoan }) => {\r\n var dealLender: DealLenderDTO;\r\n\r\n if (this.dealLenders) {\r\n dealLender = this.dealLenders.find(\r\n (dl) =>\r\n dl.DealId === this.searchid &&\r\n dl.ProductId === ProductID &&\r\n dl.LenderId === LenderID,\r\n );\r\n }\r\n\r\n if (!dealLender) {\r\n dealLender = {\r\n DealId: this.searchid,\r\n ProductId: ProductID,\r\n LenderId: LenderID,\r\n Status: CaseLenderStateEnum.Shortlisted,\r\n OriginalTotalGrossLoan: GrossLoan,\r\n } as DealLenderDTO;\r\n }\r\n\r\n lendersList.push(dealLender);\r\n });\r\n\r\n var unselecteLenderList = [];\r\n\r\n if (this.dealLenders) {\r\n unselecteLenderList = this.dealLenders.filter(dl => !lendersList.some(ll => ll.ProductId === dl.ProductId && ll.LenderId === dl.LenderId) && (dl.Status == CaseLenderStateEnum.Rejected || dl.Status == CaseLenderStateEnum.Withdrawn));\r\n }\r\n\r\n if (unselecteLenderList.length > 0) {\r\n unselecteLenderList.forEach((l) => {\r\n l.IsDeleted = true;\r\n lendersList.push(l);\r\n });\r\n }\r\n\r\n return lendersList;\r\n }\r\n\r\n /** closes share results modal*/\r\n cancelNewSearch() {\r\n this.newSearch = false;\r\n this.shareDealDto.ClientDto = null;\r\n this.existingborrower = null;\r\n this.showClientDetails = false;\r\n this.selecteduserName = null;\r\n this.isSaveAsClicked = false;\r\n this.sharedSearch = false;\r\n if (this.tempSearchName) {\r\n this.loanCriteria.Name = this.tempSearchName;\r\n this.tempSearchName = \"\";\r\n }\r\n }\r\n\r\n openSendResultsToBorrowerModal() {\r\n var client = this.loanCriteria.DealClients[0][\"Client\"]; // TODO Deal FUTURE- always want to assume there's one for now until there's a redesign of sharing\r\n this.shareDealDto.DealId = this.loanCriteria.Id;\r\n this.shareDealDto.DealName = this.loanCriteria.Name;\r\n this.shareDealDto.IsApplicant = true;\r\n this.shareDealDto.IsPrimary = true;\r\n this.shareDealDto.ClientDto = {\r\n FirstName: client.FirstName,\r\n LastName: client.LastName,\r\n Email: client.Email,\r\n PhoneNumber: client.PhoneNumber,\r\n ClientUserId: client.ClientUserId,\r\n } as ClientDTO;\r\n this.existingborrower = null;\r\n this.newSearch = true;\r\n this.sharedSearch = true;\r\n }\r\n\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n this.loadingData = true;\r\n this.shareDealDto.IsApplicant = true;\r\n this.shareDealDto.IsPrimary = true;\r\n //Look up client's account details\r\n this.$user.searchByEmail(userName).then((users) => {\r\n this.shareDealDto.ClientDto.FirstName = users[0].FirstName;\r\n this.shareDealDto.ClientDto.Email = users[0].Email;\r\n this.shareDealDto.ClientDto.LastName = users[0].LastName;\r\n this.shareDealDto.ClientDto.PhoneNumber = users[0].PhoneNumber;\r\n this.shareDealDto.ClientDto.ClientUserId = users[0].Id;\r\n this.showClientDetails = true;\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n /**\r\n * Sends email to client attached to the search\r\n */\r\n sendShareSearchEmailToClient() {\r\n this.loadingData = true;\r\n this.shareDealDto.EmailLinkToClient = true;\r\n this.dealService\r\n .shareDealWithClient(this.shareDealDto)\r\n .then(() => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.shareDealDto.ClientDto.FirstName +\r\n \" \" +\r\n this.shareDealDto.ClientDto.LastName;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.loadingData = false;\r\n this.sharedSearch = false;\r\n });\r\n }\r\n\r\n applyForLoan() {\r\n this.isProceedClicked = true;\r\n this.register(true, this.productResultList);\r\n }\r\n\r\n returnToCase() {\r\n if (this.isShortlistingMore) {\r\n // copy newly selected products/lenders to caselender\r\n this.dealLenderService\r\n .shortlistMoreLenders(\r\n this.loanCriteria.Id,\r\n this.getDealLenders(this.comparisonList),\r\n this.hasSearchChanged,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n //sending 'Promote' as true if search has changed & 'NewShortlist' as true if isShortlistingMore\r\n this.$location.path(\r\n \"/devfinancecasedashboard/\" +\r\n this.loanCriteria.Id +\r\n \"/\" +\r\n null +\r\n \"/\" +\r\n true +\r\n \"/\" +\r\n this.hasSearchChanged,\r\n );\r\n }\r\n });\r\n } else {\r\n this.dealLenderService\r\n .updateShortlistedLenders(this.getDealLenders(this.comparisonList))\r\n .then((response) => {\r\n this.$location.path(\r\n \"/devfinancecasedashboard/\" + this.loanCriteria.Id,\r\n );\r\n });\r\n }\r\n }\r\n\r\n toggleShowLenderNamesBrokerOverride() {\r\n if (this.searchPanelForm.$valid && !this.showPostcodeErrorMessage) {\r\n this.updateCriteriaAndGetResults(false, true);\r\n }\r\n }\r\n\r\n mortgageTermToLoanTerm(): void {\r\n this.loanCriteria.LoanTermReq = this.mortgageTerm * 12;\r\n }\r\n\r\n /**Update the loan label in the comparison results based on the loan label returned in the results\r\n * Primary purpose is to update the loan label when the show lender names button is toggled\r\n * */\r\n updateLoanLabels() {\r\n for (var i = 0; i < this.comparisonList.length; i++) {\r\n let resultIndex = this.summarySearchResults.findIndex(\r\n (item) => item.ProductID == this.comparisonList[i].ProductID,\r\n );\r\n\r\n if (resultIndex > -1) {\r\n this.comparisonList[i].LoanLabel =\r\n this.summarySearchResults[resultIndex].LoanLabel;\r\n }\r\n }\r\n\r\n //This is used in shortlisting pdf\r\n this.prepareDataForShortlistPdf();\r\n }\r\n\r\n datasetupOnMaxLoanRequiredChange() {\r\n this.loanCriteria = this.dealService.dataSetupOnMaxLoanRequiredChange(\r\n this.loanCriteria,\r\n );\r\n this.updateSearchViaSlider();\r\n }\r\n\r\n showContactbrokerButton() {\r\n if (\r\n this.brokerageOrg != null &&\r\n this.loanCriteria != null &&\r\n this.loanCriteria.DealClients != null &&\r\n this.loanCriteria.DealClients.length > 0 &&\r\n this.loanCriteria.DealClients[0]?.Client != null &&\r\n this.loanCriteria.DealClients[0].Client.Email.length > 0\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n getPreviousDevelopments() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_NumberOfPreviousDevelopments) {\r\n case 1:\r\n value = PreviousDevelopmentsEnum.One;\r\n break;\r\n case 2:\r\n value = PreviousDevelopmentsEnum.Two;\r\n break;\r\n case 3:\r\n value = PreviousDevelopmentsEnum.Three;\r\n break;\r\n case 4:\r\n value = PreviousDevelopmentsEnum.FourOrMore;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getShareholderDepositRequired() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_ShareholderDepositRequired) {\r\n case 0:\r\n value = ShareholderDepositRequiredEnum.None;\r\n break;\r\n case 0.25:\r\n value = ShareholderDepositRequiredEnum.UpTo25Percent;\r\n break;\r\n case 0.5:\r\n value = ShareholderDepositRequiredEnum.TwentyFiveTo50Percent;\r\n break;\r\n case 1.0:\r\n value = ShareholderDepositRequiredEnum.FiftyPercentPlus;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onShareholderDepositRequiredChange(e: ShareholderDepositRequiredEnum) {\r\n switch (e) {\r\n case ShareholderDepositRequiredEnum.None:\r\n this.loanCriteria.F_ShareholderDepositRequired = 0;\r\n break;\r\n case ShareholderDepositRequiredEnum.UpTo25Percent:\r\n this.loanCriteria.F_ShareholderDepositRequired = 0.25;\r\n break;\r\n case ShareholderDepositRequiredEnum.TwentyFiveTo50Percent:\r\n this.loanCriteria.F_ShareholderDepositRequired = 0.5;\r\n break;\r\n case ShareholderDepositRequiredEnum.FiftyPercentPlus:\r\n this.loanCriteria.F_ShareholderDepositRequired = 1.0;\r\n break;\r\n default:\r\n this.loanCriteria.F_ShareholderDepositRequired = null;\r\n break;\r\n }\r\n }\r\n\r\n onMaxHouseSalesPriceChange(e: MaxHouseSalePriceEnum) {\r\n switch (e) {\r\n case MaxHouseSalePriceEnum.UpTo1Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 1000000;\r\n break;\r\n case MaxHouseSalePriceEnum.UpTo2Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 2000000;\r\n break;\r\n case MaxHouseSalePriceEnum.UpTo5Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 5000000;\r\n break;\r\n case MaxHouseSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxHouseSalesPrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxHouseSalesPrice = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxHouseSalesPrice() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxHouseSalesPrice) {\r\n case 1000000:\r\n value = MaxHouseSalePriceEnum.UpTo1Million;\r\n break;\r\n case 2000000:\r\n value = MaxHouseSalePriceEnum.UpTo2Million;\r\n break;\r\n case 5000000:\r\n value = MaxHouseSalePriceEnum.UpTo5Million;\r\n break;\r\n case -999:\r\n value = MaxHouseSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onMaxFlatUnitPriceChange(e: MaxFlatUnitPriceEnum) {\r\n switch (e) {\r\n case MaxFlatUnitPriceEnum.UpTo1Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 1000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.UpTo2Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 2000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.UpTo3Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 3000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.NoMax:\r\n this.loanCriteria.F_MaxFlatUnitPrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxFlatUnitPrice = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxFlatUnitPrice() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxFlatUnitPrice) {\r\n case 1000000:\r\n value = MaxFlatUnitPriceEnum.UpTo1Million;\r\n break;\r\n case 2000000:\r\n value = MaxFlatUnitPriceEnum.UpTo2Million;\r\n break;\r\n case 3000000:\r\n value = MaxFlatUnitPriceEnum.UpTo3Million;\r\n break;\r\n case -999:\r\n value = MaxFlatUnitPriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onMaxSqFtSalePriceChange(e: MaxSqFtSalePriceEnum) {\r\n switch (e) {\r\n case MaxSqFtSalePriceEnum.UpTo850:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 850;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1000:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 1000;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1500:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 1500;\r\n break;\r\n case MaxSqFtSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxSqFtSalePrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxSqFtSalePrice = null;\r\n break;\r\n }\r\n }\r\n\r\n onMaxSqFtFlatsSalePriceChange(e: MaxSqFtSalePriceEnum) {\r\n switch (e) {\r\n case MaxSqFtSalePriceEnum.UpTo850:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 850;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1000:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 1000;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1500:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 1500;\r\n break;\r\n case MaxSqFtSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxSqFtSalePrice() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxSqFtSalePrice) {\r\n case 850:\r\n value = MaxSqFtSalePriceEnum.UpTo850;\r\n break;\r\n case 1000:\r\n value = MaxSqFtSalePriceEnum.UpTo1000;\r\n break;\r\n case 1500:\r\n value = MaxSqFtSalePriceEnum.UpTo1500;\r\n break;\r\n case -999:\r\n value = MaxSqFtSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getMaxSqFtSalePriceFlats() {\r\n var value = null;\r\n switch (this.tempLoanCriteria.F_MaxSqFtSalePriceFlats) {\r\n case 850:\r\n value = MaxSqFtSalePriceEnum.UpTo850;\r\n break;\r\n case 1000:\r\n value = MaxSqFtSalePriceEnum.UpTo1000;\r\n break;\r\n case 1500:\r\n value = MaxSqFtSalePriceEnum.UpTo1500;\r\n break;\r\n case -999:\r\n value = MaxSqFtSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n CalcPurchaseAdditionalCosts(): number {\r\n if (this.loanCriteria) {\r\n var res: number = 0;\r\n\r\n if (this.loanCriteria.StampDutyLandTax) {\r\n res += Number(this.loanCriteria.StampDutyLandTax);\r\n }\r\n if (this.loanCriteria.SalesAgentFees) {\r\n res += Number(this.loanCriteria.SalesAgentFees);\r\n }\r\n if (this.loanCriteria.PurchaseLegalFees) {\r\n res += Number(this.loanCriteria.PurchaseLegalFees);\r\n }\r\n\r\n if (this.loanCriteria.OwnOrPurchase == OwnOrPurchaseEnum.Own) {\r\n if (this.loanCriteria.LandTotalOtherCosts) {\r\n res += Number(this.loanCriteria.LandTotalOtherCosts);\r\n }\r\n }\r\n\r\n if (this.loanCriteria.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing) {\r\n if (this.loanCriteria.PurchaseCosts) {\r\n res += Number(this.loanCriteria.PurchaseCosts);\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n }\r\n\r\n isSelectedResult(offer: LenderResultSummaryDTO, index: number) {\r\n return this.comparisonContains(offer);\r\n }\r\n\r\n isResultAvailableToSelect(offer: LenderResultSummaryDTO) {\r\n return (\r\n offer.IsCaseLender &&\r\n offer.CaseLenderStatus != CaseLenderStateEnum.Shortlisted\r\n );\r\n }\r\n\r\n contingencyChanged() {\r\n this.calculateContingency();\r\n }\r\n\r\n updateLoanRequiredValue() {\r\n if (this.loanCriteria.MaxLoanRequired) {\r\n this.loanCriteria.NetLoanRequired = 0;\r\n this.updateSearchViaSlider();\r\n } else {\r\n this.updateSearchViaSlider();\r\n }\r\n }\r\n\r\n calculateContingency() {\r\n if (this.loanCriteria.IncludesContingency) {\r\n this.contingencyValue =\r\n this.loanCriteria.BuildCosts -\r\n this.loanCriteria.BuildCosts /\r\n (1 + Number(this.loanCriteria.Contingency));\r\n }\r\n this.calculateTotalBuildCost();\r\n }\r\n\r\n calculateTotalBuildCost() {\r\n if (this.loanCriteria.IncludesContingency) {\r\n this.loanCriteria.BuildCosts =\r\n Number(this.loanCriteria.BuildCosts) - this.contingencyValue;\r\n }\r\n\r\n this.updateSearchViaSlider();\r\n }\r\n\r\n getRegionByPostcode() {\r\n if (\r\n this.loanCriteria.PostcodeSearchString &&\r\n this.loanCriteria.PostcodeSearchString.replace(\" \", \"\").length >= 2\r\n ) {\r\n if (\r\n this.dealService.isValidPostcodeString(\r\n this.loanCriteria.PostcodeSearchString,\r\n )\r\n ) {\r\n this.showPostcodeErrorMessage = false;\r\n this.isPostcodeChange = true;\r\n this.updateSearchViaSlider();\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n }\r\n }\r\n\r\n calculateMonthsSinceOrigPurchase() {\r\n let date1 = new Date(this.loanCriteria.OriginalPurchaseDate);\r\n let date2 = new Date();\r\n let months;\r\n months = (date2.getFullYear() - date1.getFullYear()) * 12;\r\n months -= date1.getMonth();\r\n months += date2.getMonth();\r\n return months;\r\n }\r\n\r\n sortByField(field) {\r\n this.loanCriteria.SortBy = field;\r\n this.updateCriteriaAndGetResults(false, false);\r\n this.showSortBy = !this.showSortBy;\r\n }\r\n\r\n sortSummaryResults() {\r\n switch (this.loanCriteria.SortBy) {\r\n case SortByEnum.ROCE:\r\n this.summarySearchResults.sort(\r\n (a, b) => b.ROCE - a.ROCE || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.TrueMonthlyCost:\r\n this.summarySearchResults.sort(\r\n (a, b) => a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.NetLoanSize:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n b.NetLoan - a.NetLoan || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.LenderName:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.LoanLabel.localeCompare(b.LoanLabel) ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.InterestRate:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.Interest - b.Interest || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.ArrangementFee:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.ArrangementFee - b.ArrangementFee ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.DepositEquity:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.Deposit - b.Deposit || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.LTGDV:\r\n this.lenderResultService\r\n .sortProductsByLTGDV(this.summarySearchResults)\r\n .then((sortedResults) => {\r\n this.summarySearchResults = sortedResults;\r\n })\r\n .catch((error) => {\r\n console.error(\"Error sorting by LTGDV:\", error);\r\n });\r\n break;\r\n default:\r\n this.summarySearchResults.sort((a, b) => {\r\n if (a.NetLoan < b.NetLoan) return 1;\r\n if (a.NetLoan > b.NetLoan) return -1;\r\n\r\n if (a.TrueMonthlyCost > b.TrueMonthlyCost) return 1;\r\n if (a.TrueMonthlyCost < b.TrueMonthlyCost) return -1;\r\n\r\n return 0;\r\n });\r\n this.loanCriteria.SortBy = SortByEnum.NetLoanSize;\r\n }\r\n\r\n for (var i = 0; i < this.summarySearchResults.length; i++) {\r\n this.summarySearchResults[i].SelectedRowNumber = i + 1;\r\n }\r\n }\r\n\r\n isFieldZero(fieldName) {\r\n if (this.loanCriteria) {\r\n const fieldValue = this.loanCriteria[fieldName];\r\n if (fieldValue == null || fieldValue === \"0\" || fieldValue === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n submitLenderReferral() {\r\n this.loadingData = true;\r\n this.lenderReferralData.DealId = this.loanCriteria.Id;\r\n this.dealClientService\r\n .submitLenderReferral(this.lenderReferralData)\r\n .then((response) => {\r\n if (response) {\r\n this.displayMsg = \"Your referral has been submitted.\";\r\n this.showMsg = true;\r\n this.isLenderReferredSearch = true;\r\n } else {\r\n this.displayMsg = \"Error while making a referral, please try later.\";\r\n this.showMsg = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n this.lenderReferralData = null;\r\n sessionStorage.removeItem(\"lenderReferralData\");\r\n });\r\n }\r\n\r\n onClickSaveAs() {\r\n this.isSaveAsClicked = true;\r\n\r\n if (this.isAdmin || this.isBroker) {\r\n if (!this.shareDealDto) {\r\n this.shareDealDto = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n }\r\n this.shareDealDto.DealName = \"\";\r\n this.showShareSearchModal();\r\n } else {\r\n this.showSaveResults = 3;\r\n }\r\n }\r\n\r\n saveSaveAsSearch(attachClient = false) {\r\n this.loadingData = true;\r\n let newSearchName = this.isBroker || this.isAdmin ? this.shareDealDto.DealName : this.saveAsSearchName;\r\n\r\n if (newSearchName.length == 0) {\r\n newSearchName = this.loanCriteria.Name + ' (Copy)';\r\n }\r\n\r\n var request: SaveAsSearchRequest = {\r\n ShareDealDto: attachClient ? this.shareDealDto : null,\r\n ProductFamily: this.loanCriteria.ProductFamily,\r\n SearchId: this.loanCriteria.Id,\r\n NewSearchName: newSearchName,\r\n };\r\n\r\n this.dealService\r\n .saveSaveAsSearch(request)\r\n .then((result) => {\r\n this.displayMsg = `${newSearchName} search has been saved to your dashboard.`;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.cancelNewSearch();\r\n this.loadingData = false;\r\n this.isSaveAsClicked = false;\r\n this.shareDealDto = {\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n this.saveAsSearchName = \"\";\r\n this.showSaveResults = null;\r\n this.showMsg = true;\r\n });\r\n }\r\n\r\n reloadPage() {\r\n if (this.reloadSearch) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n /** Redirects to the user dashboard */\r\n goToUserDashboard() {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n\r\n // Enterprise widget\r\n openRegisterModal() {\r\n this.showRegisterModal = true;\r\n }\r\n\r\n onEditSearchNameClick() {\r\n this.toggleEditSearchName = !this.toggleEditSearchName;\r\n }\r\n\r\n /*onClickEligibleConfirm() {\r\n this.loadingData = true;\r\n this.loanCriteria.DealClients[0].Client.PhoneNumber =\r\n this.enterpriseClient.PhoneNumber;\r\n this.clientService\r\n .addUpdatereturnonlyid(this.loanCriteria.DealClients[0].Client)\r\n .then((response) => {\r\n this.showEligibleModal = false;\r\n window.scrollTo(0, 0);\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }*/\r\n\r\n onSortbyClick() {\r\n this.closeFilterOptions();\r\n this.closeExportDropdown();\r\n this.showSortBy = !this.showSortBy;\r\n }\r\n\r\n onFilterClick() {\r\n this.closeSortByDropdown();\r\n this.closeExportDropdown();\r\n this.showFilters = !this.showFilters;\r\n }\r\n\r\n onExportClick() {\r\n this.prepareDataForShortlistPdf();\r\n this.closeSortByDropdown();\r\n this.closeFilterOptions();\r\n this.showExportOptions = !this.showExportOptions;\r\n }\r\n\r\n getSelectedSortByOptionText() {\r\n if (this.loanCriteria) {\r\n switch (this.loanCriteria.SortBy) {\r\n case SortByEnum.TrueMonthlyCost:\r\n return \"True Monthly Cost\";\r\n case SortByEnum.NetLoanSize:\r\n return \"Net Loan Size\";\r\n case SortByEnum.LenderCosts:\r\n return \"Lender Costs (Est.)\";\r\n case SortByEnum.LenderName:\r\n return \"Lender Name (A-Z)\";\r\n case SortByEnum.InterestRate:\r\n return \"Interest Rate\";\r\n case SortByEnum.ArrangementFee:\r\n return \"Arrangement Fee\";\r\n case SortByEnum.DepositEquity:\r\n return \"Est. Deposit/Equity\";\r\n case SortByEnum.ROCE:\r\n return \"ROCE\";\r\n case SortByEnum.LTGDV:\r\n return \"LTGDV\";\r\n default:\r\n return \"\";\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n createAccount() {\r\n this.loadingData = true;\r\n this.enterpriseClient.OrgUniqueRef = this.brokerageOrg.UniqueRef;\r\n this.$user\r\n .registerEnterpriseUserAndSaveShortlisteResults(this.enterpriseClient, this.getDealLenders(this.comparisonList))\r\n .then((user) => {\r\n // clean up session storage\r\n if (window.self == window.top) {\r\n sessionStorage.removeItem(\"clientId\");\r\n sessionStorage.removeItem(\"userRole\");\r\n } else {\r\n this.organisationService.sendDataToParent(\"clientId\", \"\");\r\n this.organisationService.sendDataToParent(\"userRole\", \"\");\r\n }\r\n this.login(\"ENTERPRISE-LEAD-REGISTERED-FROM-RESULTS-PAGE\", EventLogEnum.EnterpriseUserRegistration);\r\n })\r\n .catch((response) => {\r\n this.error = \"Error while registering an account, please try again later.\";\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n login(eventIdentifier: string = \"ENTERPRISE-CONTACT-LOGGEDIN-FROM-RESULTS-PAGE\", eventType: EventLogEnum = EventLogEnum.EnterpriseUserLogin) {\r\n this.loadingData = true;\r\n if (!this.$cookies.get(\"access_token\")) {\r\n this.$auth\r\n .login(\r\n this.enterpriseClient.UserName,\r\n this.enterpriseClient.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n this.error =\"\";\r\n this.$user.getcurentuserrecord().then((response) => {\r\n this.eventLogService.logEvent(\r\n eventIdentifier,\r\n eventType,\r\n this.loanCriteria.ProductType,\r\n this.loanCriteria.Id,\r\n \"\",\r\n \"\",\r\n this.loanCriteria.DealClients[0]?.Client.Id?.toString()\r\n );\r\n\r\n (this.$rootScope as any).currentUser = response;\r\n this.$cookies.put(\"user_firstname\", response.FirstName, {\r\n expires: expiry,\r\n });\r\n (this.$rootScope as any).selectedUser = response;\r\n this.$rootScope.$broadcast(\"login\"); //tell everyone you have logged in\r\n if (eventType == EventLogEnum.EnterpriseUserRegistration) sessionStorage.setItem('showConfirmClientPhoneNo', 'true');\r\n this.$location.path(`/devfinanceresults/${this.loanCriteria.Id}`);\r\n });\r\n }).catch((response) => {\r\n this.isLoginError = true;\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n onClickLogin() {\r\n this.saveShortlistedLenders();\r\n this.login();\r\n }\r\n\r\n saveShortlistedLenders() {\r\n var shortlistDealLenders = this.getDealLenders(this.comparisonList);\r\n this.dealLenderService\r\n .updateShortlistedLenders(shortlistDealLenders)\r\n .then((response) => { });\r\n }\r\n\r\n populateEnterpriseClientValue(eventType) {\r\n if (this.loanCriteria.DealClients[0] != null) {\r\n this.enterpriseClient.FirstName =\r\n this.loanCriteria.DealClients[0].Client.FirstName;\r\n this.enterpriseClient.LastName =\r\n this.loanCriteria.DealClients[0].Client.LastName;\r\n this.enterpriseClient.Email =\r\n this.loanCriteria.DealClients[0].Client.Email;\r\n this.enterpriseClient.UserName =\r\n this.loanCriteria.DealClients[0].Client.Email;\r\n this.enterpriseClient.DealClientUniqueRef = this.loanCriteria.DealClients[0].UniqueRef;\r\n this.enterpriseClient.OrgCode = this.orgCode;\r\n this.enterpriseClient.PhoneNumber =\r\n this.loanCriteria.DealClients[0].Client.PhoneNumber;\r\n if (this.loanCriteria.DealClients[0].Client.ClientUserId) {\r\n this.showRegisterModal = true;\r\n this.showLoginSection = true;\r\n }\r\n\r\n if (this.loanCriteria.OrganisationLinkId) {\r\n this.organisationLinkService\r\n .getOrganisationLinkLogoByLinkIdAndLogPageLoadEvent(Number(this.loanCriteria.OrganisationLinkId), eventType, this.loanCriteria.Id, this.loanCriteria.ProductType, this.loanCriteria.DealClients[0]?.Client?.Email, this.loanCriteria.DealClients[0]?.Client?.Id.toString())\r\n .then((logoUrl) => {\r\n if (logoUrl) {\r\n var imgs = document.getElementsByTagName(\"img\");\r\n imgs[0].src = logoUrl\r\n }\r\n });\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n eventType,\r\n this.orgCode,\r\n this.loanCriteria.DealClients.length > 0\r\n ? this.loanCriteria.DealClients[0].Client.Email\r\n : \"\",\r\n \"Client\",\r\n this.loanCriteria.OrganisationLinkId != null\r\n ? this.loanCriteria.OrganisationLinkId\r\n : 0,\r\n this.loanCriteria?.ProductType,\r\n \"\",\r\n this.loanCriteria?.Id,\r\n this.loanCriteria.DealClients.length > 0\r\n ? this.loanCriteria.DealClients[0].Client.Id.toString()\r\n : null,\r\n );\r\n }\r\n\r\n //Todo Roopa: do we need a broker details?\r\n this.getOrganisationAndBrokerDetails();\r\n }\r\n }\r\n\r\n returnShortlistedDealLenderStatusText(item: LenderResultSummaryDTO) {\r\n if (this.checkDeletedLender(item.LenderID.toString(), item.ProductID.toString())) {\r\n return \"Previously Deleted\";\r\n }\r\n\r\n if (item.IsDealLender && (this.loanCriteria.Status != CaseStatusEnum.Search && this.loanCriteria.Status != CaseStatusEnum.NewCase && this.loanCriteria.Status != CaseStatusEnum.ReadyToSubmit)) {\r\n switch (item.DealLenderStatus) {\r\n case CaseLenderStateEnum.Shortlisted:\r\n return \"Shortlisted\";\r\n case CaseLenderStateEnum.Received:\r\n return \"Awaiting DIP\";\r\n case CaseLenderStateEnum.Offered:\r\n return \"DIP Received\";\r\n case CaseLenderStateEnum.Rejected:\r\n return \"Lender Rejected\";\r\n case CaseLenderStateEnum.Withdrawn:\r\n return \"Lender Withdrawn\";\r\n default:\r\n break\r\n }\r\n }\r\n }\r\n\r\n isProceedButtonDisabled(): boolean {\r\n\r\n if (this.isShortlistingMore) {\r\n if (this.validateWithdrawnLendersUnique() == false)\r\n return true;\r\n }\r\n\r\n const validLenders = this.comparisonList?.filter(\r\n (item) =>\r\n item.DealLenderStatus !== CaseLenderStateEnum.Rejected &&\r\n item.DealLenderStatus !== CaseLenderStateEnum.Withdrawn\r\n ) || [];\r\n \r\n if (\r\n !validLenders ||\r\n validLenders.length < 1 ||\r\n validLenders.length > this.noOfShortlistAllowed ||\r\n this.isProceedClicked == true\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n onSaveClick() {\r\n if (this.isAssigned) {\r\n this.isSaveorSaveAsClicked = true;\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.showShareSearchModal();\r\n }\r\n }\r\n\r\n getProductLastVerifiedDates(productIds: number[]) {\r\n this.productService.getLastVerifiedDates(productIds).then((response) => {\r\n productIds.forEach(id => {\r\n if (response[id] != null) {\r\n this.productLastVerifiedDates[id] = this.formatDate(response[id]);\r\n }\r\n })\r\n });\r\n }\r\n\r\n formatDate = (dateString) => {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString('en-GB');\r\n };\r\n\r\n validateWithdrawnLendersUnique(): boolean {\r\n if (this.isShortlistingMore) {\r\n const matchingHiddenDeallender = this.HiddenDealLenderList.filter(dl =>\r\n this.comparisonList.some(l => dl.LenderId === l.LenderID && dl.ProductId != l.ProductID && l.DealLenderStatus != CaseLenderStateEnum.Withdrawn) && dl.Status == CaseLenderStateEnum.Withdrawn\r\n );\r\n\r\n const matchingDeallender = this.dealLenders?.filter(dl =>\r\n this.comparisonList.some(l => dl.LenderId === l.LenderID && dl.ProductId != l.ProductID && l.DealLenderStatus != CaseLenderStateEnum.Withdrawn) && dl.Status == CaseLenderStateEnum.Withdrawn\r\n );\r\n\r\n if (matchingHiddenDeallender.length > 0 || (matchingDeallender && matchingDeallender.length > 0)) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n closeFilterOptions() {\r\n this.showFilters = false;\r\n }\r\n\r\n closeSortByDropdown() {\r\n this.showSortBy = false;\r\n }\r\n\r\n closeExportDropdown() {\r\n this.showExportOptions = false;\r\n }\r\n\r\n goToNewSearch() {\r\n this.sharedDataService.cleanLenderReferralSessionStorage();\r\n // If the current user is a broker and doesn't have a subscription then don't allow them to create a new search\r\n if (this.isBroker && !this.selectedUser.HasActiveSubscription) {\r\n return;\r\n }\r\n\r\n if (!this.loadingData) {\r\n (this.$rootScope as any).loanCriteria = null;\r\n\r\n this.$location.path(\"/allloans\");\r\n }\r\n }\r\n\r\n updateClientContactInfoAndNotifyBroker(){\r\n if(this.loanCriteria !=null && this.loanCriteria.DealClients != null){\r\n this.dealClientService.UpdateClientContactInfoAndNotifyBroker(this.clientUpdatedContact, this.loanCriteria?.Id,this.loanCriteria.DealClients[0].Client.Id).then((response) => {\r\n this.showClientPhoneNumberConfirmationModal = false;\r\n this.sliderShown = true;\r\n }).catch((response) => {\r\n this.error = \"There was an error updating the contact. Please try again later.\"\r\n })\r\n .finally(() => {\r\n sessionStorage.removeItem('showConfirmClientPhoneNo');\r\n });\r\n } else {\r\n sessionStorage.removeItem('showConfirmClientPhoneNo');\r\n this.showClientPhoneNumberConfirmationModal = false;\r\n this.sliderShown = true;\r\n }\r\n }\r\n\r\n getOrgName(){\r\n if(this.orgName){\r\n return this.orgName.replace(/_/g, \" \");\r\n }\r\n return \"\";\r\n }\r\n\r\n /**Sends an email to the email address for the user to reset their password */\r\n sendResetPasswordEmail() {\r\n this.loadingData = true;\r\n this.$auth\r\n .resetPassword(this.enterpriseClient.Email)\r\n .then((response) => {\r\n this.isLoginError = false;\r\n this.isResetPasswordSubmitted = true;\r\n this.registrationLoginError = null;\r\n })\r\n .catch((error) => {\r\n this.registrationLoginError = \"There was an error sending the password reset email. Please try again later.\";\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n getRequiredRolesOptions(){\r\n return this.dealService.getRequiredRolesOptions();\r\n }\r\n\r\n validateAccessAndRedirect(){\r\n //Do not allow the connect user to access the deal\r\n if(this.loanCriteria.IsReferredToConnect && this.selectedUser.IsConnectUser){\r\n this.$location.path(`/devfinancecasedashboard/${this.loanCriteria.Id}`)\r\n }else{\r\n if((this.loanCriteria.Status != CaseStatusEnum.NewCase && this.loanCriteria.Status != CaseStatusEnum.Search && !this.isShortlistingMore)){\r\n this.dealLenderService\r\n .fetchDealLendersByDealId( this.loanCriteria.Id)\r\n .then((results) => {\r\n if(results && results.filter(dl => !dl.IsDeleted && dl.Status != CaseLenderStateEnum.Withdrawn && dl.Status != CaseLenderStateEnum.Rejected).length >= 5 && results.filter(dl => !dl.IsDeleted && dl.IsBidAccepted)){\r\n if (this.isAdmin || this.isBroker) {\r\n this.$location.path(\"/dealforum/\" + this.loanCriteria.Id)\r\n }\r\n else {\r\n this.$location.path(`/userdashboard`)\r\n }\r\n }else{\r\n this.$location.path(`/devfinanceshortlistmore/${this.loanCriteria.Id}`)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { LenderResultDTO } from \"@js/DTO/DevelopmentFinance/LenderResultDTO.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\n\r\nexport class EnquiryController {\r\n registeringAccount: boolean;\r\n registrationform: FormData;\r\n error: string;\r\n\r\n loanCriteria: DevelopmentInputDTO;\r\n selectedResult: LenderResultDTO;\r\n\r\n enquireAfterRegistration: boolean;\r\n\r\n //newUser: RegistrationRequestDTO = {\r\n // Email: \"\", FirstName: \"\", LastName: \"\"\r\n //} as RegistrationRequestDTO;\r\n\r\n newUser: any = {};\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"$httpParamSerializerJQLike\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $httpParamSerializerJQLike: ng.IHttpParamSerializer,\r\n private $auth: AuthService,\r\n private $roleService: RoleService,\r\n ) {\r\n // rootScope.title = \"Registration\";\r\n if ($cookies.get(\"access_token\")) {\r\n $location.path(\"dashboard\");\r\n }\r\n\r\n this.loanCriteria = (this.$rootScope as any).loanCriteria;\r\n this.selectedResult = (this.$rootScope as any).selectedResult;\r\n\r\n if (this.$routeParams.enquire !== undefined) {\r\n this.enquireAfterRegistration = true;\r\n }\r\n }\r\n\r\n registerAccount() {\r\n this.registeringAccount = true;\r\n if (this.newUser.ConfirmPassword !== this.newUser.Password) {\r\n this.error = \"Passwords do not match\";\r\n }\r\n // send registration\r\n this.$auth\r\n .registerAccount(this.newUser)\r\n .then((response) => {\r\n if (this.enquireAfterRegistration) {\r\n this.$location.path(\"/enquiry\");\r\n } else {\r\n this.$location.path(\"/yourresults\");\r\n }\r\n })\r\n .catch((response) => {\r\n this.error =\r\n \"It looks like there was a problem registering. Please try again in a moment.\";\r\n })\r\n .finally(() => {\r\n this.registeringAccount = false;\r\n });\r\n\r\n //if (this.selectedUser.Id == null) {\r\n // this.selectedUser.Id = \"\";\r\n // this.selectedUser.Roles = [];\r\n // this.selectedUser.Roles.push(\"Client\");\r\n //}\r\n //if (!this.selectedUser.UserName) {\r\n // this.selectedUser.UserName = this.selectedUser.Email; //set user name to be same as email address for now\r\n //}\r\n //this.loanCriteria.User = this.selectedUser;\r\n //this.loanCriteria.SaveQueryAndResults = true;\r\n //// this.$user.addUpdate(this.selectedUser).then((response) => {\r\n //this.$lenderresultservice.fetchMatchingResults(this.loanCriteria, false, false, 4).then((response) => {\r\n // this.selectedUser.Id = response.UserId;\r\n // this.showsaveinfo = false;\r\n //});\r\n }\r\n\r\n clearRegistration() {\r\n this.registeringAccount = false;\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport {\r\n SaveEnterpriseClientAndRenameSearchRequest,\r\n SaveEnterpriseClientAndRenameSearchResponse\r\n} from \"@js/DTO/Messages/Deal/SaveEnterpriseClientAndRenameSearchMessage.cs.d\";\r\nimport { LinkTypeEnum } from \"@js/models/enum/LinkTypeEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { EnterpriseService } from \"@js/services/EnterpriseService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { ClientService } from \"@js/services/ClientService\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\ndeclare const window: Window & { dataLayer: any[] };\r\n\r\nexport class EnterpriseLeadCaptureController {\r\n loadingData: boolean = false;\r\n resultsCount: Number;\r\n enterpriseClient: ApplicationUserDTO;\r\n projectName: string;\r\n errorMessage: string = \"\";\r\n emailExistsError: boolean = false;\r\n dealDetails: SaveEnterpriseClientAndRenameSearchResponse;\r\n showContactForm = false;\r\n orgCode: string;\r\n enterpriseLinkLogo: string;\r\n totalLenders: number = null;\r\n isWidget: boolean = false;\r\n isMobileView: boolean = false;\r\n iFrame: boolean = false;\r\n organisationLinkId: number = null;\r\n enterpriseLinkType: string;\r\n leadCaptureForm: ng.IFormController;\r\n showEnterpriseRegistrationModal: boolean = false;\r\n showRegisterModal: boolean = false;\r\n showLoginSection: boolean = false;\r\n\r\n // Logging in/resetting password\r\n isLoginError: boolean = false;\r\n isResetPasswordSubmitted: boolean = false;\r\n registrationLoginError: string = null;\r\n\r\n acceptTerms: boolean = false;\r\n\r\n hasEnterpriseClient:boolean = false;\r\n phoneNumber:number;\r\n newUrl: string;\r\n message: string;\r\n showMessageModal: boolean = false;\r\n organisation: OrganisationDTO;\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"OrganisationService\",\r\n \"DealService\",\r\n \"UserService\",\r\n \"ProductService\",\r\n \"LenderService\",\r\n \"EventLogService\",\r\n \"EnterpriseService\",\r\n \"AuthService\",\r\n \"$q\",\r\n \"ClientService\"\r\n ];\r\n\r\n constructor(\r\n public $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private organisationService: OrganisationService,\r\n private dealService: DealService,\r\n private userService: UserService,\r\n private productService: ProductService,\r\n private lenderService: LenderService,\r\n private eventLogService: EventLogService,\r\n private enterpriseService: EnterpriseService,\r\n private $auth: AuthService,\r\n protected $q: ng.IQService,\r\n private clientService: ClientService\r\n ) {\r\n\r\n\r\n if (window.self == window.top) {\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n }\r\n\r\n this.getSearchResultsCountByUniqueRefAndLogPageLoadEvent();\r\n\r\n if (window.self == window.top) {\r\n this.enterpriseLinkType = sessionStorage.getItem(\"enterpriseLinkType\");\r\n } else {\r\n this.organisationService.getData(\"enterpriseLinkType\").then((linkType) => {\r\n if (linkType) {\r\n this.enterpriseLinkType = linkType;\r\n }\r\n }).catch((error) => {\r\n console.error(\"Failed to get user data: \", error);\r\n });\r\n }\r\n\r\n if (this.$routeParams.context == 'widget' && window.self != window.top) {\r\n document.getElementById(\"footer\").style.display = \"none\";\r\n this.isWidget = true;\r\n } else if (window.innerWidth <= 480 && window.self == window.top) {\r\n this.isMobileView = true;\r\n } else if (window.self != window.top) {\r\n this.iFrame = true;\r\n }\r\n\r\n }\r\n\r\n getNumberOfLenders() {\r\n this.lenderService.getTotalLenders(ProductFamilyEnum.None, this.organisation.Id).then((totalLenders: number) => {\r\n this.totalLenders = Math.floor(totalLenders / 5) * 5;\r\n\r\n const trustboxRef = document.getElementById(\"trustbox\");\r\n\r\n if (trustboxRef && (window as any).Trustpilot) {\r\n (window as any).Trustpilot.loadFromElement(trustboxRef);\r\n }\r\n });\r\n }\r\n\r\n getSearchResultsCountByUniqueRefAndLogPageLoadEvent() {\r\n this.loadingData = true;\r\n this.errorMessage = \"\";\r\n this.dealService\r\n .getSearchResultsCountByUniqueRefAndLogPageLoadEvent(this.$routeParams.uniqueRef, this.orgCode)\r\n .then((response) => {\r\n this.resultsCount = response.TotalResultsCount;\r\n this.organisationLinkId = response.DealUniqueLinkId;\r\n var imgs = document.getElementsByTagName(\"img\");\r\n this.enterpriseLinkLogo = this.organisationLinkId != null && response.DealUniqueLinkLogoUrl? response.DealUniqueLinkLogoUrl : imgs[0].src;\r\n this.projectName = response.DealName;\r\n this.organisation = response.Organisation;\r\n this.getNumberOfLenders();\r\n\r\n if(response.EnterpriseClient){\r\n this.hasEnterpriseClient = true;\r\n this.enterpriseClient = {} as ApplicationUserDTO;\r\n this.enterpriseClient.FullName = `${response.EnterpriseClient.FirstName} ${response.EnterpriseClient.LastName}`;\r\n if(response.EnterpriseClient.PhoneNumber) this.phoneNumber = Number(response.EnterpriseClient.PhoneNumber);\r\n this.enterpriseClient.Email = response.EnterpriseClient.Email;\r\n }\r\n this.showContactForm = true;\r\n })\r\n .catch((response) => {\r\n this.errorMessage = \"Error while loading page, please try later.\";\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n onViewLoansClicked() {\r\n this.loadingData = true;\r\n this.errorMessage = \"\";\r\n this.emailExistsError = false;\r\n this.userService.checkEmailExists(this.enterpriseClient.Email).then((response) => {\r\n if (!response) {\r\n this.saveEnterpriseClientAndRenameDeal();\r\n } else {\r\n this.emailExistsError = true;\r\n this.loadingData = false;\r\n }\r\n });\r\n }\r\n\r\n\r\n saveEnterpriseClientAndRenameDeal(isLogin: boolean = false): ng.IPromise {\r\n let defer = this.$q.defer();\r\n let userFullName = this.enterpriseClient.FullName;\r\n let spaceIndex = userFullName.indexOf(\" \");\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n lastName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(\" \"));\r\n lastName = userFullName.substring(userFullName.indexOf(\" \") + 1);\r\n }\r\n\r\n // Set up Client dto\r\n var clientDto = {\r\n FirstName: firstName,\r\n LastName: lastName,\r\n PhoneNumber: this.phoneNumber?.toString(),\r\n Email: this.enterpriseClient.Email,\r\n PostalAddress: {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress,\r\n } as ClientDTO;\r\n\r\n var request: SaveEnterpriseClientAndRenameSearchRequest = {\r\n DealUniqueref: this.$routeParams.uniqueRef,\r\n DealNewName: this.projectName,\r\n ClientDto: clientDto,\r\n };\r\n\r\n this.dealService\r\n .saveEnterpriseClientAndRenameDeal(request)\r\n .then((response) => {\r\n if (response) {\r\n this.dealDetails = response;\r\n if (window.self == window.top) {\r\n sessionStorage.setItem(\r\n \"clientId\",\r\n this.dealDetails.ClientId.toString(),\r\n );\r\n } else {\r\n this.organisationService.sendDataToParent(\r\n \"clientId\",\r\n this.dealDetails.ClientId.toString(),\r\n );\r\n }\r\n\r\n // For Google analytics tracking\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event: \"results_gating_form\",\r\n loan_product_family:\r\n this.productService.getProductFamilyTextForGa(\r\n this.dealDetails.ProductFamily,\r\n ),\r\n loan_product_type: this.productService.getProductTypeTextForGa(\r\n this.dealDetails.ProductType,\r\n this.dealDetails.IsFamilyInResidence,\r\n ),\r\n });\r\n\r\n if (!isLogin) {\r\n this.userService.sendEventToHubspot(\r\n this.enterpriseClient,\r\n \"ENTERPRISE-LEAD-DETAILS-COLLECTED\",\r\n false,\r\n this.orgCode,\r\n UserRoleEnum.Client,\r\n this.dealDetails.OrganisationLinkId != null\r\n ? this.dealDetails.OrganisationLinkId\r\n : 0,\r\n this.dealDetails.ProductType,\r\n this.dealDetails.DealId,\r\n null,\r\n this.dealDetails.ClientId.toString()\r\n );\r\n\r\n let resultPageurl = this.getResultsPageUrl();\r\n this.goToLink(resultPageurl, true);\r\n } \r\n\r\n defer.resolve(response as SaveEnterpriseClientAndRenameSearchResponse);\r\n }\r\n }).catch((response) => {\r\n this.errorMessage = \"Error while saving details, please try later.\";\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getResultsPageUrl() {\r\n var url = \"\";\r\n switch (this.dealDetails.ProductFamily) {\r\n case ProductFamilyEnum.Bridging:\r\n url = `/e/bridgingresults/${this.$routeParams.uniqueRef}`;\r\n break;\r\n case ProductFamilyEnum.Commercial:\r\n url = `/e/commercialresults/${this.$routeParams.uniqueRef}`;\r\n break;\r\n case ProductFamilyEnum.Development:\r\n url = `/e/devfinanceresults/${this.$routeParams.uniqueRef}`;\r\n break;\r\n default:\r\n break;\r\n }\r\n return url;\r\n }\r\n\r\n showSignInModal() {\r\n if (!this.isWidget && !this.isMobileView && !this.iFrame) {\r\n this.enterpriseClient.UserName = this.enterpriseClient.Email;\r\n this.showEnterpriseRegistrationModal = true;\r\n this.showRegisterModal = true;\r\n this.showLoginSection = true;\r\n document.getElementById(\"body\").style.overflow = \"hidden\";\r\n } else {\r\n this.saveEnterpriseClientAndRenameDeal(true).then((response) => {\r\n var redirectUrl = this.getLoginRedirectUrl();\r\n (this.$rootScope as any).loginRedirectPath = redirectUrl;\r\n this.goToLink(`/e/login/${this.dealDetails.ProductFamily}/${this.$routeParams.uniqueRef}/${this.dealDetails.ClientId}/${this.enterpriseClient.Email}`);\r\n });\r\n }\r\n }\r\n\r\n onClickLogin() {\r\n this.login();\r\n }\r\n\r\n login() {\r\n this.loadingData = true;\r\n if (!this.$cookies.get(\"access_token\")) {\r\n this.$auth\r\n .login(\r\n this.enterpriseClient.UserName,\r\n this.enterpriseClient.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n this.isLoginError = false;\r\n\r\n this.userService.getcurentuserrecord().then((response) => {\r\n (this.$rootScope as any).currentUser = response;\r\n this.$cookies.put(\"user_firstname\", response.FirstName, {\r\n expires: expiry,\r\n });\r\n (this.$rootScope as any).selectedUser = response;\r\n\r\n this.saveEnterpriseClientAndRenameDeal(true).then(() => {\r\n this.userService.sendEventToHubspot(\r\n this.enterpriseClient,\r\n \"ENTERPRISE-LEAD-LOGGEDIN-FROM-LEADCAPTURE-PAGE\",\r\n false,\r\n this.orgCode,\r\n UserRoleEnum.Client,\r\n this.dealDetails.OrganisationLinkId != null\r\n ? this.dealDetails.OrganisationLinkId\r\n : 0,\r\n this.dealDetails.ProductType,\r\n this.dealDetails.DealId,\r\n null,\r\n this.dealDetails.ClientId.toString()\r\n );\r\n\r\n // link user to the client record\r\n this.clientService.updateClientWithUserId(this.dealDetails.ClientId);\r\n\r\n this.$rootScope.$broadcast(\"login\"); //tell everyone you have logged in\r\n var redirectUrl = this.getLoginRedirectUrl();\r\n this.$location.path(redirectUrl);\r\n })\r\n });\r\n })\r\n .catch((response) => {\r\n this.isLoginError = true;\r\n this.enterpriseClient.Password = null;\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n // User may have logged in on a different browser/tab\r\n this.saveEnterpriseClientAndRenameDeal(true).then(() => {\r\n var redirectUrl = this.getLoginRedirectUrl();\r\n this.$location.path(redirectUrl);\r\n });\r\n }\r\n }\r\n\r\n goToLink(url, isResultsLink = false) {\r\n var baseUrl = window.location.href.split(\"#!\")[0] + \"#!\";\r\n this.newUrl = baseUrl + url;\r\n this.message = isResultsLink? 'view your results': 'sign in';\r\n\r\n if(isResultsLink) this.hasEnterpriseClient = true;\r\n\r\n var newWindow = window.open(this.newUrl, \"_blank\");\r\n\r\n if (!newWindow || newWindow.closed || typeof newWindow.closed === 'undefined') {\r\n this.showMessageModal = true;\r\n } \r\n }\r\n\r\n openLink(){\r\n window.open(this.newUrl, \"_blank\");\r\n this.showMessageModal = false;\r\n }\r\n\r\n goToPreviousEnterprisePage() {\r\n\r\n if (this.enterpriseLinkType) {\r\n if(this.isWidget){\r\n switch (Number(this.enterpriseLinkType)) {\r\n case LinkTypeEnum.Development:\r\n path = this.organisationLinkId != null? `/allloans/${this.organisationLinkId}/widget/${LinkTypeEnum.Development}`: `/allloans/0/widget/${LinkTypeEnum.Development}`;\r\n break;\r\n case LinkTypeEnum.Bridging:\r\n path = this.organisationLinkId != null? `/allloans/${this.organisationLinkId}/widget/${LinkTypeEnum.Bridging}`: `/allloans/0/widget/${LinkTypeEnum.Bridging}`;\r\n break;\r\n case LinkTypeEnum.Commercial:\r\n path = this.organisationLinkId != null? `/allloans/${this.organisationLinkId}/widget/${LinkTypeEnum.Commercial}`: `/allloans/0/widget/${LinkTypeEnum.Commercial}`;\r\n break;\r\n case LinkTypeEnum.AllLoans:\r\n path = this.organisationLinkId != null? `/allloans/${this.organisationLinkId}/widget`: `/allloans/0/widget`;\r\n break;\r\n default:\r\n break;\r\n }\r\n this.$location.path(path);\r\n\r\n }else{\r\n switch (Number(this.enterpriseLinkType)) {\r\n case LinkTypeEnum.Development:\r\n this.organisationLinkId != null ? this.$location.path(`/e/devfinancecriteria/0/${this.organisationLinkId}`) : this.$location.path(\"/e/devfinancecriteria\"); \r\n break;\r\n case LinkTypeEnum.Bridging:\r\n this.organisationLinkId != null ? this.$location.path(`/e/bridgingcriteria/0/${this.organisationLinkId}`) : this.$location.path(\"/e/bridgingcriteria\");\r\n break;\r\n case LinkTypeEnum.Commercial:\r\n this.organisationLinkId != null ? this.$location.path(`/e/commercialcriteria/0/${this.organisationLinkId}`) : this.$location.path(\"/e/commercialcriteria\")\r\n break;\r\n case LinkTypeEnum.AllLoans:\r\n var path = \"/allloans\";\r\n if (this.organisationLinkId != null) {\r\n path = `/allloans/${this.organisationLinkId}`; \r\n } \r\n this.$location.path(path);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getLoginRedirectUrl(): string {\r\n var redirectUrl = '';\r\n\r\n switch (Number(this.enterpriseService.getProductFamily())) {\r\n case ProductFamilyEnum.Development:\r\n redirectUrl = `/devfinanceresults/${this.$routeParams.uniqueRef}`;\r\n break;\r\n case ProductFamilyEnum.Bridging:\r\n redirectUrl = `/bridgingresults/${this.$routeParams.uniqueRef}`;\r\n break;\r\n case ProductFamilyEnum.Commercial:\r\n redirectUrl = `/commercialresults/${this.$routeParams.uniqueRef}`;\r\n break;\r\n default:\r\n redirectUrl = '/userdashboard';\r\n break;\r\n }\r\n\r\n return redirectUrl;\r\n }\r\n\r\n\r\n\r\n /**Sends an email to the email address for the user to reset their password */\r\n sendResetPasswordEmail() {\r\n this.loadingData = true;\r\n this.$auth\r\n .resetPassword(this.enterpriseClient.Email)\r\n .then((response) => {\r\n this.isLoginError = false;\r\n this.isResetPasswordSubmitted = true;\r\n this.registrationLoginError = null;\r\n })\r\n .catch((error) => {\r\n this.registrationLoginError = error;\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n footerSignInClicked(){\r\n var redirectUrl = this.getLoginRedirectUrl();\r\n if(this.projectName){\r\n this.dealService.renameDeal(this.$routeParams.uniqueRef,this.projectName).then(() => {\r\n (this.$rootScope as any).loginRedirectPath = redirectUrl;\r\n if(this.dealDetails){\r\n this.goToLink(`/e/login/${this.dealDetails.ProductFamily}/${this.$routeParams.uniqueRef}`);\r\n }else{\r\n this.goToLink(`/e/login/${Number(this.enterpriseService.getProductFamily())}/${this.$routeParams.uniqueRef}`);\r\n }\r\n });\r\n }else{\r\n (this.$rootScope as any).loginRedirectPath = redirectUrl;\r\n this.goToLink(`/e/login/${Number(this.enterpriseService.getProductFamily())}/${this.$routeParams.uniqueRef}`);\r\n }\r\n }\r\n}\r\n","import { FeaturePriceService } from \"@js/services/FeaturePriceService\";\r\n\r\nexport class FeaturePriceController {\r\n //processing: boolean = false;\r\n //selectedFeaturePriceData: FeaturePriceDTO[];\r\n //showFilter: boolean;\r\n //newFeaturePrice: FeaturePriceDTO;\r\n //tempFeaturePrice: FeaturePriceDTO;\r\n //addOrEditForm: ng.IFormController;\r\n\r\n //selectedFeature: any;\r\n //currentDate: Date = new Date();\r\n //newFeature = false;\r\n //editFeature = false;\r\n //messageDeleteModal = false;\r\n //showInvalidStartDate = false;\r\n //showInvalidEndDate = false;\r\n //showAllFeaturePrice = false;\r\n //startDateErrorMsg: string = null;\r\n //endDateErrorMsg: string = null;\r\n\r\n //features: Array<{ id: number, name: string }> = [{ id: 1, name: 'Development Finance' }, { id: 2, name: 'Bridging Finance' }];\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"FeaturePriceService\",\r\n ];\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private featurePriceService: FeaturePriceService,\r\n ) {}\r\n\r\n // getSelectedFeaturePrice() {\r\n // this.featurePriceService.getFeaturePriceByFeature(this.selectedFeature.id, this.showAllFeaturePrice).then((response) => {\r\n // this.selectedFeaturePriceData = response;\r\n // })\r\n // }\r\n\r\n // onFeatureChange(featureSelected) {\r\n // this.showAllFeaturePrice = false;\r\n // this.selectedFeature = featureSelected;\r\n // this.getSelectedFeaturePrice();\r\n // }\r\n\r\n // createFeaturePrice() {\r\n // this.newFeaturePrice = { Feature: this.selectedFeature.id } as FeaturePriceDTO;\r\n // this.newFeature = true;\r\n // }\r\n\r\n // /**\r\n // * Function to save the newly added feature price.\r\n // * @param featurePrice\r\n // */\r\n // saveFeaturePrice(featurePrice: FeaturePriceDTO) {\r\n // if (featurePrice.EndDateTime == null) {\r\n // var found = this.selectedFeaturePriceData.find(function (featurePrice) {\r\n // return featurePrice.EndDateTime == null;\r\n // });\r\n\r\n // if (found) {\r\n // this.endDateErrorMsg = \"You already have default price for this feature,Please select a end date.\"\r\n // this.showInvalidEndDate = true;\r\n // return;\r\n // }\r\n // }\r\n\r\n // featurePrice.EndDateTime == null ? featurePrice.IsDefault = true : featurePrice.IsDefault = false;\r\n // this.processing = true;\r\n // this.featurePriceService.addUpdatereturnonlyid(featurePrice).then((response) => {\r\n // this.processing = false;\r\n // this.newFeature = false;\r\n // this.editFeature = false;\r\n // this.showInvalidEndDate = false;\r\n // if (!this.newFeaturePrice.Id) {\r\n // this.selectedFeaturePriceData.push(this.newFeaturePrice);\r\n // } else {\r\n // this.selectedFeaturePriceData = this.selectedFeaturePriceData.filter(price => price.Id != this.newFeaturePrice.Id);\r\n // this.selectedFeaturePriceData.push(this.newFeaturePrice);\r\n // }\r\n // this.newFeaturePrice = undefined;\r\n // }).catch((response) => {\r\n // this.processing = false;\r\n // });\r\n // }\r\n\r\n // /**\r\n // * Function to edit the selected feature price.\r\n // * @param featurePrice\r\n // */\r\n // editFeaturePrice(featurePrice: FeaturePriceDTO) {\r\n // this.newFeaturePrice = { ...featurePrice };\r\n // this.editFeature = true;\r\n // }\r\n\r\n // /**\r\n // * Function to confirm selected feature price for deletion.\r\n // * @param featurePrice\r\n // */\r\n // confirmRemoveFeaturePrice(featurePrice: FeaturePriceDTO) {\r\n // this.tempFeaturePrice = { ...featurePrice };\r\n // this.messageDeleteModal = true;\r\n // }\r\n\r\n // /**\r\n // * Function to mark the selected feature price as deleted.\r\n // * @param featurePrice\r\n // */\r\n // removeFeaturePrice(featurePrice: FeaturePriceDTO) {\r\n // this.featurePriceService.markasdeleted(featurePrice.Id).then((response) => {\r\n // if (response) {\r\n // this.selectedFeaturePriceData = this.selectedFeaturePriceData.filter(price => price.Id != featurePrice.Id);\r\n // this.messageDeleteModal = false;\r\n // }\r\n // });\r\n // }\r\n\r\n // /**\r\n // * Function to check for valid start date..\r\n // * @param endDate\r\n // */\r\n\r\n // CheckForValidStartdate(startdate) {\r\n // var found = this.selectedFeaturePriceData.find(function (featurePrice) {\r\n // return startdate >= featurePrice.StartDateTime && startdate <= featurePrice.EndDateTime;\r\n // });\r\n // console.log(startdate == this.currentDate);\r\n // if (startdate != this.currentDate && startdate < this.currentDate) {\r\n // this.startDateErrorMsg = \"Start date should be greater or equal to today's date.\"\r\n // this.showInvalidStartDate = true\r\n // } else if (found) {\r\n // this.startDateErrorMsg = \"Start date should not fall between other feature price dates.\"\r\n // this.showInvalidStartDate = true\r\n // } else {\r\n // this.startDateErrorMsg = null;\r\n // this.showInvalidStartDate = false;\r\n // }\r\n\r\n // }\r\n\r\n // /**\r\n // * Function to check for valid end date..\r\n // * @param endDate\r\n // */\r\n\r\n // CheckForValidEnddate(enddate) {\r\n // var found = this.selectedFeaturePriceData.find(function (featurePrice) {\r\n // return enddate <= featurePrice.StartDateTime && enddate >= featurePrice.EndDateTime ;\r\n // });\r\n\r\n // if (enddate != null && enddate < this.currentDate) {\r\n // this.endDateErrorMsg = \"End date should be greater or equal to today's date.\"\r\n // this.showInvalidEndDate = true\r\n // } else if (enddate != null && enddate < this.newFeaturePrice.StartDateTime) {\r\n // this.endDateErrorMsg = \"End date should be greater or equal to start date.\"\r\n // this.showInvalidEndDate = true\r\n // } else if (found) {\r\n // this.endDateErrorMsg = \"End date should not fall between other feature price dates.\"\r\n // this.showInvalidEndDate = true;\r\n // } else {\r\n // var defaultval = this.selectedFeaturePriceData.find(function (featurePrice) {\r\n // return featurePrice.EndDateTime == null && featurePrice.Id != this.newFeaturePrice.Id;\r\n // });\r\n\r\n // if (defaultval) {\r\n // if (this.newFeaturePrice.StartDateTime >= defaultval.StartDateTime) {\r\n // this.endDateErrorMsg = \"Selected start and end date is covered in other default feature price dates.\"\r\n // this.showInvalidEndDate = true;\r\n // }\r\n\r\n // } else {\r\n // this.startDateErrorMsg = null;\r\n // this.showInvalidEndDate = false;\r\n // }\r\n // }\r\n // }\r\n\r\n // closeModal() {\r\n // this.newFeature = false;\r\n // this.editFeature = false;\r\n // this.showInvalidEndDate = false;\r\n // this.showInvalidStartDate = false;\r\n // }\r\n}\r\n","import { FeedBackDTO } from \"@js/DTO/FeedBackDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { FeedBackService } from \"@js/services/FeedBackService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\n\r\nexport class FeedBackController {\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"FeedBackService\",\r\n \"OrganisationService\",\r\n \"FileAttachmentService\",\r\n \"RoleService\",\r\n ];\r\n\r\n feedBackDTO: FeedBackDTO;\r\n organisation: OrganisationDTO;\r\n fullAvatarUrl: string = \"\";\r\n showReplySection: boolean = false;\r\n dataLoading: boolean = false;\r\n isDeal: boolean = true;\r\n reviewerFullName: string;\r\n reviewerOrganisationName: string;\r\n reviewerOrganisationUrl: string;\r\n reviewerProfileUrl: string;\r\n reviewerInitil: string;\r\n responseUserOrgName: string;\r\n dealName: string;\r\n isLender: boolean;\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private feedBackService: FeedBackService,\r\n private organisationService: OrganisationService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private roleService: RoleService,\r\n ) {\r\n if (this.$location.path().startsWith(\"/casefeedback\")) {\r\n this.isDeal = false;\r\n }\r\n\r\n this.feedBackService\r\n .getFeedBackAndReviewerDetails(\r\n Number(this.$routeParams.FeedBackId),\r\n Number(this.$routeParams.DealLenderId),\r\n this.isDeal,\r\n )\r\n .then((response) => {\r\n this.feedBackDTO = response.feedBackDTO;\r\n this.reviewerFullName = response.ReviewerFullName;\r\n this.reviewerOrganisationName = response.ReviewerOrganisationName;\r\n this.reviewerOrganisationUrl = response.ReviewerOrganisationUrl;\r\n this.reviewerProfileUrl = response.ReviewerProfileUrl;\r\n this.reviewerInitil = response.ReviewerInitil;\r\n this.responseUserOrgName = response.ResponseUserOrgName;\r\n this.dealName = response.DealName;\r\n this.checkingIfUserIsLender();\r\n });\r\n }\r\n\r\n checkingIfUserIsLender() {\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n });\r\n }\r\n\r\n submitReplyToFeedBack() {\r\n this.dataLoading = true;\r\n this.feedBackService\r\n .sendFeedBackReply(\r\n this.feedBackDTO,\r\n Number(this.$routeParams.DealLenderId),\r\n this.isDeal,\r\n )\r\n .then((response) => {\r\n this.$location.path(\"/userdashboard\");\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /** Redirects to the user dashboard */\r\n goToUserDashboard() {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n}\r\n","import { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\n\r\nexport class FileAttachmentController {\r\n selectedSection: string;\r\n\r\n objects: FileAttachmentDTO[];\r\n selectedObject: FileAttachmentDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n fileattachmentForm: ng.IFormController;\r\n //subfileattachmentForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"FileAttachmentService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $fileattachmentservice: FileAttachmentService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$fileattachmentservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: FileAttachmentDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as FileAttachmentDTO;\r\n }\r\n\r\n save() {\r\n this.$fileattachmentservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: FileAttachmentDTO[] = this.objects.filter(\r\n (value, index) => {\r\n return value.Id == response;\r\n },\r\n );\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.fileattachmentForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$fileattachmentservice\r\n .delete(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.fileattachmentForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseLenderDTO } from \"@js/DTO/CaseLenderDTO.cs.d\";\r\nimport { CaseLenderMessageDTO } from \"@js/DTO/CaseLenderMessageDTO.cs.d\";\r\nimport { DealLenderMessageDTO } from \"@js/DTO/Deal/DealLenderMessageDTO.cs.d\";\r\nimport { FeedBackDTO } from \"@js/DTO/FeedBackDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { InterestRateTypeEnum } from \"@js/models/enum/InterestRateTypeEnum.cs.d\";\r\nimport { MessageRoleEnum } from \"@js/models/enum/MessageRoleEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseLenderMessageService } from \"@js/services/CaseLenderMessageService\";\r\nimport { CaseLenderService } from \"@js/services/CaseLenderService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { FeedBackService } from \"@js/services/FeedBackService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class HeadsOfTermsController {\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"LenderService\",\r\n \"CaseService\",\r\n \"CaseLenderService\",\r\n \"RoleService\",\r\n \"CaseLenderMessageService\",\r\n \"FileAttachmentService\",\r\n \"$window\",\r\n \"SelectListService\",\r\n \"FeedBackService\",\r\n \"UserService\",\r\n \"AuthService\",\r\n \"ProductService\",\r\n ];\r\n\r\n isDevelopmentFinance: boolean = true;\r\n dataLoading: boolean = false; // Controls showing the data loading \"spinner\"\r\n caseLenders: CaseLenderDTO[];\r\n showInformationMessage: boolean = false;\r\n messageContent: string;\r\n feedbackMessageToLender: string;\r\n\r\n showDirection: boolean = false;\r\n\r\n toggleFeedbackSection: boolean = false;\r\n toggleHoTDetailSection: boolean = false;\r\n toggleRejectSection: boolean = false;\r\n toggleWithdrawSection: boolean = false;\r\n isLender: boolean = false;\r\n isBroker: boolean = false;\r\n isAdmin: boolean = false;\r\n isClient: boolean = false;\r\n\r\n // show different sections to Lender based on which button clicked on Case Dashboard\r\n showFeedbackSectionLender: boolean = false;\r\n showHoTDetailSectionLender: boolean = false;\r\n showRejectSectionLender: boolean = false;\r\n showWithdrawSectionLender: boolean = false;\r\n\r\n showTsAndCsModal: boolean = false;\r\n showTsAndCsForm: boolean = false;\r\n sendingMessage: boolean = false;\r\n goToUserDashboard: boolean = false;\r\n\r\n currentCase: CaseDTO;\r\n currentCaseLender: CaseLenderDTO;\r\n grossLoanCalcVal: number = 0;\r\n builLoanCalcVal: number = 0;\r\n landLoanCalcVal: number = 0;\r\n monetaryLAFee: number = 0;\r\n monetaryLEFee: number = 0;\r\n lenderTask: string = \"\";\r\n netBuildLoanCalcVal: number = 0;\r\n\r\n isRejectClicked: boolean = false;\r\n isWithdrawClicked: boolean = false;\r\n isConfirmClicked: boolean = false;\r\n isSubmitClicked: boolean = false;\r\n\r\n //Lender Message\r\n newChatMessage: string = \"\";\r\n showFullMessageId: number;\r\n\r\n //files\r\n fileUpload: FileAttachmentDTO[];\r\n uploadingFiles: FileUploadProgressDTO[];\r\n openModal: boolean = false;\r\n module = ModuleEnum.DIP;\r\n\r\n showFullLenderMessage = false;\r\n showFullBorrowerMessage = false;\r\n InterestRateTypeOptions = [];\r\n\r\n showLenderFeedBackModal: boolean = false;\r\n showBrokerFeedBackModal: boolean = false;\r\n feedBackDTO: FeedBackDTO;\r\n prevPath: string;\r\n\r\n brokerName: string;\r\n brokerOrganisationName: string;\r\n\r\n //Deleteing a chat message\r\n selectedDealLenderMessageDto: DealLenderMessageDTO;\r\n showdeleteChatMessageModal: boolean = false;\r\n showConfirmDeleteButton: boolean = false;\r\n\r\n currentUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n productTypeText: string = null;\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private lenderService: LenderService,\r\n private caseService: CaseService,\r\n private caseLenderService: CaseLenderService,\r\n private roleService: RoleService,\r\n private caseLenderMessageService: CaseLenderMessageService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private selectListService: SelectListService,\r\n private feedBackService: FeedBackService,\r\n private userService: UserService,\r\n private $auth: AuthService,\r\n private productService: ProductService,\r\n ) {\r\n this.feedBackDTO = {} as FeedBackDTO;\r\n if (\r\n this.$routeParams.openModule &&\r\n this.$routeParams.openModule == \"withdraw\"\r\n ) {\r\n this.toggleWithdrawSection = true;\r\n } else if (\r\n this.$routeParams.openModule &&\r\n this.$routeParams.openModule == \"reject\"\r\n ) {\r\n this.toggleRejectSection = true;\r\n } else if (this.$routeParams.openModule) {\r\n this.toggleFeedbackSection = true;\r\n }\r\n\r\n if (this.$routeParams.CaseId && this.$routeParams.CaseLenderId) {\r\n this.dataLoading = true;\r\n\r\n this.caseService\r\n .fetch(this.$routeParams.CaseId)\r\n .then((response) => {\r\n this.currentCase = response;\r\n\r\n if (this.currentCase) {\r\n this.caseLenderService\r\n .fetchByCaseId(\r\n this.$routeParams.CaseId,\r\n this.roleService.getIsLenderVisible(),\r\n this.$routeParams.CaseLenderId,\r\n )\r\n .then((response) => {\r\n this.caseLenders = response;\r\n if (this.$routeParams.CaseLenderId) {\r\n this.currentCaseLender = this.caseLenders.find(\r\n (caseLender) => {\r\n return caseLender.Id == this.$routeParams.CaseLenderId;\r\n },\r\n );\r\n this.fileUpload = this.currentCase.Attachments.filter((f) => {\r\n return f.CaseLenderId == this.$routeParams.CaseLenderId;\r\n });\r\n //this.recalculateArrangementPercent(); // this actually re-calculates the arrangement fee not the % - function name is wrong\r\n // this.recalculateExitPercent(); // this actually re-calculates the exit fee not the % - function name is wrong\r\n this.calculateGrossLoanValVal();\r\n this.calculateBuildLoadCalcVal();\r\n this.calculateLandLoanCalcVal();\r\n // this.calculatemonetaryLAFee();\r\n //this.calculatemonetaryLEFee();\r\n }\r\n });\r\n this.caseService.updateCaseState(\r\n this.currentCase.Id,\r\n this.currentCase.CaseStatus,\r\n );\r\n this.lenderTask = sessionStorage.getItem(\"lenderTask\");\r\n if (this.lenderTask != null && this.lenderTask.length > 0) {\r\n switch (this.lenderTask) {\r\n case \"reject\":\r\n this.showRejectSectionLender = true;\r\n break;\r\n case \"withdraw\":\r\n this.showWithdrawSectionLender = true;\r\n break;\r\n case \"feedback\":\r\n this.showFeedbackSectionLender = true;\r\n this.updateCaseLenderMessageReadDatetime();\r\n break;\r\n case \"terms\":\r\n this.showHoTDetailSectionLender = true;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.productTypeText = this.productService.getProductTypeFullName(\r\n ProductTypeEnum.Development,\r\n );\r\n } else {\r\n if ((this.$rootScope as any).selectedUser) {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.getCurrentUserAndRoles();\r\n });\r\n }\r\n\r\n this.InterestRateTypeOptions = this.selectListService.GetInterestRateType();\r\n }\r\n\r\n /**Process the Send Feedback button being clicked */\r\n /* sendFeedbackClicked() {\r\n this.caseLenderService.sendFeedbackToBorrower(this.currentCaseLender, this.currentCase.DevelopmentInput.OwnerUser).then((response) => {\r\n //this.caseLenders = this.caseLenders.filter(lender => lender.Id != this.currentCaseLender.Id);\r\n //this.caseLenders.push(response);\r\n this.messageContent = 'Your feedback has been sent to the borrower.';\r\n this.goToUserDashboard = true;\r\n }).catch((error) => {\r\n this.messageContent = 'Sorry, something went wrong while sending feedback to the borrower. Please try again.';\r\n }).finally(() => {\r\n this.showInformationMessage = true;\r\n })\r\n }*/\r\n\r\n /**Calculate the Total Net Loan */\r\n calculateTotalNetLoan() {\r\n var totalNetLoan: number = 0;\r\n if (\r\n this.currentCaseLender &&\r\n this.currentCaseLender.BuildLoan &&\r\n this.currentCaseLender.LandLoan\r\n ) {\r\n totalNetLoan =\r\n +this.currentCaseLender.BuildLoan + +this.currentCaseLender.LandLoan;\r\n totalNetLoan = Math.round(totalNetLoan * 100) / 100;\r\n }\r\n return totalNetLoan;\r\n }\r\n\r\n checkingIfUserIsLender() {\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n });\r\n }\r\n\r\n checkingIfUerIsBroker() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isBroker()\r\n .then((response) => {\r\n this.isBroker = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsAdmin() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isAdminUser()\r\n .then((response) => {\r\n this.isAdmin = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n checkingIfUserIsClient() {\r\n this.dataLoading = true;\r\n this.roleService\r\n .isClientUser()\r\n .then((response) => {\r\n this.isClient = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n /**Calculate total lender costs */\r\n totalLenderCosts() {\r\n var lenderCosts: number = 0;\r\n\r\n if (this.currentCaseLender) {\r\n lenderCosts =\r\n +this.currentCaseLender.LenderArrangementFee +\r\n +this.currentCaseLender.LenderExitFee +\r\n +this.currentCaseLender.InterestCoverAllocation;\r\n }\r\n return lenderCosts;\r\n }\r\n\r\n /**Calculate Arrangement Amount */\r\n recalculateArrangementAmount() {\r\n if (this.currentCaseLender && this.currentCaseLender.TotalGrossLoan) {\r\n //const element = event.currentTarget as HTMLInputElement\r\n //const value = parseFloat(element.value)\r\n\r\n //this.currentCaseLender.LenderArrangementFee = value;\r\n\r\n this.currentCaseLender.LenderArrangementFeePercent =\r\n (this.currentCaseLender.LenderArrangementFee * 100) /\r\n this.currentCaseLender.TotalGrossLoan;\r\n this.currentCaseLender.LenderArrangementFeePercent = parseFloat(\r\n this.currentCaseLender.LenderArrangementFeePercent.toFixed(2),\r\n );\r\n\r\n this.totalLenderCosts();\r\n }\r\n }\r\n\r\n /**Calculate borrower equity\r\n (Puchase Price - land loan)\r\n */\r\n calculateBorrowerEquity() {\r\n var borrowerEquity: number = 0;\r\n\r\n if (\r\n this.currentCase &&\r\n this.currentCase.DevelopmentInput.CI_Dev_OrigPP &&\r\n this.currentCaseLender &&\r\n this.currentCaseLender.LandLoan\r\n ) {\r\n borrowerEquity =\r\n this.currentCase.DevelopmentInput.CI_Dev_OrigPP -\r\n this.currentCaseLender.LandLoan;\r\n }\r\n return Number(borrowerEquity);\r\n }\r\n\r\n /**Calculate true cost */\r\n calculateTrueCost(): number {\r\n if (this.currentCaseLender) {\r\n var trueCost: number =\r\n +this.currentCaseLender.InterestRate / 12 +\r\n (+this.currentCaseLender.LenderArrangementFeePercent +\r\n +this.currentCaseLender.LenderExitFeePercent) /\r\n +this.currentCase.DevelopmentInput.CI_Dev_LoanTermReq;\r\n return trueCost;\r\n }\r\n }\r\n\r\n /**Re-calculate arrangement percent */\r\n recalculateArrangementPercent() {\r\n //const element = event.currentTarget as HTMLInputElement\r\n //const value = parseFloat(element.value)\r\n if (this.currentCaseLender && this.currentCaseLender.TotalGrossLoan) {\r\n //this.currentCaseLender.LenderArrangementFeePercent = value;\r\n this.currentCaseLender.LenderArrangementFee =\r\n (this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderArrangementFeePercent) /\r\n 100;\r\n this.currentCaseLender.LenderArrangementFee =\r\n Math.round(this.currentCaseLender.LenderArrangementFee * 100) / 100;\r\n this.totalLenderCosts();\r\n }\r\n }\r\n\r\n /**Recalculate Exit Amount */\r\n recalculateExitAmount() {\r\n const element = event.currentTarget as HTMLInputElement;\r\n const value = parseFloat(element.value);\r\n if (this.currentCaseLender && this.currentCaseLender.TotalGrossLoan) {\r\n this.currentCaseLender.LenderExitFee = value;\r\n\r\n this.currentCaseLender.LenderExitFeePercent =\r\n (this.currentCaseLender.LenderExitFee * 100) /\r\n this.currentCaseLender.TotalGrossLoan;\r\n /*this.currentCaseLender.LenderExitFeePercent = parseInt(this.currentCaseLender.LenderExitFeePercent.toFixed(2));*/\r\n this.currentCaseLender.LenderExitFeePercent =\r\n Math.round(this.currentCaseLender.LenderExitFeePercent * 100) / 100;\r\n this.totalLenderCosts();\r\n }\r\n }\r\n\r\n /**Recalculate Exit Percent */\r\n recalculateExitPercent() {\r\n //const element = event.currentTarget as HTMLInputElement\r\n //const value = parseFloat(element.value)\r\n if (\r\n this.currentCaseLender &&\r\n this.currentCaseLender.TotalGrossLoan &&\r\n this.currentCaseLender.LenderExitFeePercent\r\n ) {\r\n //this.currentCaseLender.LenderExitFeePercent = value;\r\n this.currentCaseLender.LenderExitFee =\r\n (this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderExitFeePercent) /\r\n 100;\r\n this.currentCaseLender.LenderExitFee =\r\n Math.round(this.currentCaseLender.LenderExitFee * 100) / 100;\r\n this.totalLenderCosts();\r\n }\r\n }\r\n\r\n /** Redirects to the case dashboard */\r\n goToCaseDashboard() {\r\n this.showFeedbackSectionLender = false;\r\n this.showHoTDetailSectionLender = false;\r\n this.showRejectSectionLender = false;\r\n this.showWithdrawSectionLender = false;\r\n if (\r\n this.isBroker &&\r\n !this.currentCaseLender.IsLenderReviewComplete &&\r\n (this.currentCaseLender.CaseLenderState == CaseLenderStateEnum.Offered ||\r\n this.currentCaseLender.CaseLenderState ==\r\n CaseLenderStateEnum.Rejected ||\r\n this.currentCaseLender.CaseLenderState == CaseLenderStateEnum.Withdrawn)\r\n ) {\r\n this.prevPath = \"casedashboard\";\r\n this.feedBackDTO.IsLenderFeedback = true;\r\n this.showLenderFeedBackModal = true;\r\n } else {\r\n this.$location.path(\"/casedashboard/\" + this.currentCase.Id);\r\n }\r\n }\r\n\r\n /** Close modal after send feedback */\r\n closeModal() {\r\n this.showDirection = false;\r\n this.showTsAndCsModal = false;\r\n this.showInformationMessage = false;\r\n this.isConfirmClicked = false;\r\n this.showdeleteChatMessageModal = false;\r\n if (this.goToUserDashboard) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n this.goToUserDashboard = false;\r\n this.showFeedbackSectionLender = false;\r\n this.showHoTDetailSectionLender = false;\r\n this.showRejectSectionLender = false;\r\n this.showWithdrawSectionLender = false;\r\n }\r\n\r\n if (this.prevPath) {\r\n if (this.isLender) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(`/${this.prevPath}/${this.currentCase.Id}`);\r\n }\r\n }\r\n }\r\n\r\n goToLending() {\r\n if (\r\n this.isBroker &&\r\n !this.currentCaseLender.IsLenderReviewComplete &&\r\n (this.currentCaseLender.CaseLenderState == CaseLenderStateEnum.Offered ||\r\n this.currentCaseLender.CaseLenderState ==\r\n CaseLenderStateEnum.Rejected ||\r\n this.currentCaseLender.CaseLenderState == CaseLenderStateEnum.Withdrawn)\r\n ) {\r\n this.prevPath = \"lending\";\r\n this.feedBackDTO.IsLenderFeedback = true;\r\n this.showLenderFeedBackModal = true;\r\n } else {\r\n this.$location.path(\"/lending/\" + this.currentCase.Id);\r\n }\r\n }\r\n\r\n saveUpdatedCaseLender(): void {\r\n //TODO JLH debug this process, seems a bit odd\r\n this.caseLenderService\r\n .addUpdate(this.currentCaseLender)\r\n .then((response) => {\r\n //TODO JLH debug this process, seems a bit odd\r\n this.caseLenders = this.caseLenders.filter(\r\n (lender) => lender.Id != this.currentCaseLender.Id,\r\n );\r\n this.caseLenders.push(response);\r\n\r\n this.messageContent = \"Your changes have been saved.\";\r\n this.showInformationMessage = true;\r\n });\r\n }\r\n\r\n /** Process the Lender button being clicked*/\r\n lenderClicked() {\r\n (this.$rootScope as any).isLender = false; // TODO JLH why is this being set to false? What if the user is a lender?\r\n this.$location.path(\"/lending/\" + this.currentCase.Id);\r\n }\r\n\r\n /** Process the Reject button being clicked*/\r\n rejectClicked(): void {\r\n this.isRejectClicked = true;\r\n this.caseLenderService\r\n .rejectCase(this.currentCaseLender)\r\n .then((response) => {\r\n this.currentCaseLender.CaseLenderState = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"The borrower has been notified you have rejected their application.\";\r\n //TODO JLH debug this process, seems a bit odd\r\n this.caseLenders = this.caseLenders.filter(\r\n (lender) => lender.Id != this.currentCaseLender.Id,\r\n );\r\n this.caseLenders.push(this.currentCaseLender);\r\n })\r\n .catch((error) => {\r\n this.messageContent = \"Sorry, something went wrong. Please try again.\";\r\n this.isRejectClicked = false;\r\n })\r\n .finally(() => {\r\n this.goToUserDashboard = true;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentCase.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n /**Process the Withdraw button being clicked */\r\n withdrawClicked(): void {\r\n this.isWithdrawClicked = true;\r\n this.caseLenderService\r\n .withdrawHoT(this.currentCaseLender)\r\n .then((response) => {\r\n //TODO JLH what is being returned here? the whole case?\r\n this.currentCaseLender.CaseLenderState = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.messageContent =\r\n \"The borrower has been notified you have withdrawn terms for their application.\";\r\n //TODO JLH debug this process, seems a bit odd\r\n this.caseLenders = this.caseLenders.filter(\r\n (lender) => lender.Id != this.currentCaseLender.Id,\r\n );\r\n this.caseLenders.push(this.currentCaseLender);\r\n })\r\n .catch((error) => {\r\n this.messageContent = \"Sorry, something went wrong. Please try again.\";\r\n this.isWithdrawClicked = false;\r\n })\r\n .finally(() => {\r\n this.goToUserDashboard = true;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentCase.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n /**Process the Submit button being clicked */\r\n submitClicked() {\r\n this.isConfirmClicked = true;\r\n this.showTsAndCsModal = true;\r\n }\r\n\r\n /**Heads of Terms Submit button clicked event */\r\n submitHoTClicked() {\r\n // Close the Heads of Terms' Terms and Conditions modal\r\n this.showTsAndCsModal = false;\r\n this.sendingMessage = true;\r\n // Submit the Heads of Terms\r\n this.caseLenderService\r\n .submitHoT(this.currentCaseLender, this.currentCaseLender.CaseLenderState)\r\n .then((response) => {\r\n this.currentCaseLender.CaseLenderState = response.CaseLenderState;\r\n this.brokerName = response.DealBrokerName;\r\n this.brokerOrganisationName = response.DealBrokerOrganisationName;\r\n this.caseLenders = this.caseLenders.filter(\r\n (lender) => lender.Id != this.currentCaseLender.Id,\r\n );\r\n this.caseLenders.push(this.currentCaseLender);\r\n this.messageContent =\r\n \"Thank you for submitting a Decision in Principle.\";\r\n this.goToUserDashboard = true;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while submitting your Decision in Principle. Please try again.\";\r\n this.isConfirmClicked = false;\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.currentCaseLender.IsBrokerReviewComplete ||\r\n this.currentCase.BrokerOrganisationId == null ||\r\n !this.isLender\r\n ? (this.showInformationMessage = true)\r\n : this.showBrokerFeedBack();\r\n });\r\n }\r\n\r\n showBrokerFeedBack() {\r\n this.feedBackDTO.IsBrokerFeedback = true;\r\n this.showBrokerFeedBackModal = true;\r\n }\r\n\r\n /**\r\n * Process the Send Feedback button being clicked\r\n * @param message\r\n */\r\n /* sendlenderFeedbackClicked() {\r\n this.caseLenderService.sendFeedbackToLender(this.currentCaseLender).then((response) => {\r\n this.messageContent = `Your feedback has been sent to ${this.currentCaseLender.LoanLabel != null ? this.currentCaseLender.LoanLabel:'the lender'}.`;\r\n this.feedbackMessageToLender = '';\r\n this.showInformationMessage = true;\r\n }).catch((error) => {\r\n this.messageContent = 'Sorry, something went wrong while sending feedback to lender. Please try again.';\r\n });\r\n }*/\r\n\r\n /**\r\n * Process the Apply button being clicked\r\n * @param currentCaseLender\r\n */\r\n applyClicked(selectedCaseLender: CaseLenderDTO) {\r\n // Show the Terms and Conditions modal\r\n this.showTsAndCsModal = true;\r\n }\r\n\r\n /**Process the Submit Terms and Conditions button being clicked */\r\n submitTsAndCsClicked() {\r\n this.isSubmitClicked = true;\r\n this.showTsAndCsModal = false;\r\n\r\n this.$location.path(\"/payment/\" + this.currentCase.Id);\r\n\r\n //TODO JLH need to wait for payment to be complete before actually applying ideally\r\n\r\n this.caseLenderService\r\n .applyToLender(this.currentCaseLender.CaseId, this.currentCaseLender.Id)\r\n .then((response) => {\r\n this.currentCaseLender.CaseLenderState = response.CaseLenderState;\r\n })\r\n .finally(() => {\r\n this.messageContent = `Thank you for submitting an application with ${\r\n this.currentCaseLender.LoanLabel != null\r\n ? this.currentCaseLender.LoanLabel\r\n : \"this lender\"\r\n }.`;\r\n this.showInformationMessage = true;\r\n });\r\n }\r\n\r\n calculateGrossLoanValVal() {\r\n if (\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan >= 0 &&\r\n this.currentCase.DevelopmentInput.CI_GDVCalculated != null &&\r\n this.currentCase.DevelopmentInput.CI_GDVCalculated >= 0\r\n ) {\r\n this.grossLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.TotalGrossLoan /\r\n this.currentCase.DevelopmentInput.CI_GDVCalculated) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n\r\n if (\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n if (\r\n this.currentCaseLender.LenderArrangementFeePercent != null &&\r\n this.currentCaseLender.LenderArrangementFeePercent > 0\r\n ) {\r\n this.calculatemonetaryLAFee();\r\n } else {\r\n if (\r\n this.currentCaseLender.LenderArrangementFee != null &&\r\n this.currentCaseLender.LenderArrangementFee > 0\r\n ) {\r\n this.calculatemonetaryLAPercent();\r\n }\r\n }\r\n\r\n if (\r\n this.currentCaseLender.LenderExitFeePercent != null &&\r\n this.currentCaseLender.LenderExitFeePercent > 0\r\n ) {\r\n this.calculatemonetaryLEFee();\r\n } else {\r\n if (\r\n this.currentCaseLender.LenderExitFee != null &&\r\n this.currentCaseLender.LenderExitFee > 0\r\n ) {\r\n this.calculatemonetaryLEPercent();\r\n }\r\n }\r\n } else {\r\n this.currentCaseLender.LenderArrangementFeePercent = 0;\r\n this.currentCaseLender.LenderArrangementFee = 0;\r\n this.currentCaseLender.LenderExitFeePercent = 0;\r\n this.currentCaseLender.LenderExitFee = 0;\r\n }\r\n }\r\n\r\n calculateBuildLoadCalcVal() {\r\n if (\r\n this.currentCaseLender.BuildLoan != null &&\r\n this.currentCaseLender.BuildLoan >= 0\r\n ) {\r\n this.builLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.BuildLoan / this.CalcTotalBuild()) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n }\r\n\r\n calculateLandLoanCalcVal() {\r\n if (\r\n this.currentCaseLender.LandLoan != null &&\r\n this.currentCaseLender.LandLoan >= 0\r\n ) {\r\n this.landLoanCalcVal = parseFloat(\r\n (\r\n (this.currentCaseLender.LandLoan /\r\n this.currentCase.DevelopmentInput.CI_Dev_OrigPP) *\r\n 100\r\n ).toFixed(2),\r\n );\r\n }\r\n }\r\n\r\n calculatemonetaryLAFee() {\r\n if (\r\n this.currentCaseLender.LenderArrangementFeePercent != null &&\r\n this.currentCaseLender.LenderArrangementFeePercent > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderArrangementFee =\r\n Math.round(\r\n this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderArrangementFeePercent *\r\n 100,\r\n ) / 100;\r\n } else {\r\n this.currentCaseLender.LenderArrangementFee = 0;\r\n }\r\n }\r\n\r\n calculatemonetaryLAPercent() {\r\n if (\r\n this.currentCaseLender.LenderArrangementFee != null &&\r\n this.currentCaseLender.LenderArrangementFee > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderArrangementFeePercent =\r\n this.currentCaseLender.LenderArrangementFee /\r\n this.currentCaseLender.TotalGrossLoan;\r\n\r\n this.currentCaseLender.LenderArrangementFeePercent = parseFloat(\r\n this.currentCaseLender.LenderArrangementFeePercent.toFixed(4),\r\n );\r\n } else {\r\n this.currentCaseLender.LenderArrangementFeePercent = 0;\r\n }\r\n }\r\n\r\n calculatemonetaryLEFee() {\r\n if (\r\n this.currentCaseLender.LenderExitFeePercent != null &&\r\n this.currentCaseLender.LenderExitFeePercent > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderExitFee =\r\n Math.round(\r\n this.currentCaseLender.TotalGrossLoan *\r\n this.currentCaseLender.LenderExitFeePercent *\r\n 100,\r\n ) / 100;\r\n } else {\r\n this.currentCaseLender.LenderExitFee = 0;\r\n }\r\n }\r\n\r\n calculatemonetaryLEPercent() {\r\n if (\r\n this.currentCaseLender.LenderExitFee != null &&\r\n this.currentCaseLender.LenderExitFee > 0 &&\r\n this.currentCaseLender.TotalGrossLoan != null &&\r\n this.currentCaseLender.TotalGrossLoan > 0\r\n ) {\r\n this.currentCaseLender.LenderExitFeePercent =\r\n this.currentCaseLender.LenderExitFee /\r\n this.currentCaseLender.TotalGrossLoan;\r\n this.currentCaseLender.LenderExitFeePercent = parseFloat(\r\n this.currentCaseLender.LenderExitFeePercent.toFixed(4),\r\n );\r\n } else {\r\n this.currentCaseLender.LenderExitFeePercent = 0;\r\n }\r\n }\r\n\r\n CalcTotalBuild(): number {\r\n var res: number = this.CalcAdditionalBuild();\r\n if (\r\n this.currentCase &&\r\n this.currentCase.DevelopmentInput.CI_Dev_BuildCosts\r\n ) {\r\n res += Number(this.currentCase.DevelopmentInput.CI_Dev_BuildCosts);\r\n }\r\n\r\n res += this.calcContingencyCost();\r\n return res;\r\n }\r\n\r\n CalcAdditionalBuild(): number {\r\n var res: number = 0;\r\n if (this.currentCase.DevelopmentInput.DI_BreakDownBuildCosts) {\r\n if (this.currentCase.DevelopmentInput.CI_Dev_ProfPlanning) {\r\n res += Number(this.currentCase.DevelopmentInput.CI_Dev_ProfPlanning);\r\n }\r\n if (this.currentCase.DevelopmentInput.CI_Dev_ProfQS) {\r\n res += Number(this.currentCase.DevelopmentInput.CI_Dev_ProfQS);\r\n }\r\n if (this.currentCase.DevelopmentInput.DI_BuildProjectManag) {\r\n res += Number(this.currentCase.DevelopmentInput.DI_BuildProjectManag);\r\n }\r\n if (this.currentCase.DevelopmentInput.CI_Dev_S106CIL) {\r\n res += Number(this.currentCase.DevelopmentInput.CI_Dev_S106CIL);\r\n }\r\n if (this.currentCase.DevelopmentInput.DI_BuildMechEng) {\r\n res += Number(this.currentCase.DevelopmentInput.DI_BuildMechEng);\r\n }\r\n if (this.currentCase.DevelopmentInput.DI_BuildStrucEng) {\r\n res += Number(this.currentCase.DevelopmentInput.DI_BuildStrucEng);\r\n }\r\n if (this.currentCase.DevelopmentInput.DI_BuildPartyWall) {\r\n res += Number(this.currentCase.DevelopmentInput.DI_BuildPartyWall);\r\n }\r\n if (this.currentCase.DevelopmentInput.DI_BuildLandscaping) {\r\n res += Number(this.currentCase.DevelopmentInput.DI_BuildLandscaping);\r\n }\r\n if (this.currentCase.DevelopmentInput.DI_BuildWarranty) {\r\n res += Number(this.currentCase.DevelopmentInput.DI_BuildWarranty);\r\n }\r\n if (this.currentCase.DevelopmentInput.DI_BuildDemolition) {\r\n res += Number(this.currentCase.DevelopmentInput.DI_BuildDemolition);\r\n }\r\n if (this.currentCase.DevelopmentInput.DI_BuildOtherCosts) {\r\n res += Number(this.currentCase.DevelopmentInput.DI_BuildOtherCosts);\r\n }\r\n } else {\r\n if (this.currentCase.DevelopmentInput.CI_Dev_AdditionalOngoingCosts) {\r\n res += Number(\r\n this.currentCase.DevelopmentInput.CI_Dev_AdditionalOngoingCosts,\r\n );\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n calcContingencyCost(): number {\r\n var res: number = 0;\r\n if (\r\n this.currentCase.DevelopmentInput.CI_Dev_Contingency &&\r\n this.currentCase.DevelopmentInput.CI_Dev_BuildCosts\r\n ) {\r\n res =\r\n this.currentCase.DevelopmentInput.CI_Dev_Contingency *\r\n this.currentCase.DevelopmentInput.CI_Dev_BuildCosts;\r\n return res;\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Process the Send Feedback button being clicked\r\n * @param message\r\n */\r\n sendChatMessage() {\r\n this.dataLoading = true;\r\n\r\n let CaseChatMessage = {\r\n Message: this.newChatMessage,\r\n CaseId: this.$routeParams.CaseId,\r\n CaseLenderId: this.$routeParams.CaseLenderId,\r\n SenderRole: this.getSenderMessageRole(),\r\n RecipientRoles: this.isLender ? 10 : 4,\r\n } as CaseLenderMessageDTO;\r\n\r\n this.caseLenderMessageService\r\n .addUpdate(CaseChatMessage)\r\n .then((caseChatMessageResponse) => {\r\n this.currentCaseLender.CaseLenderMessage.push(caseChatMessageResponse);\r\n this.newChatMessage = null;\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while sending feedback. Please try again.\";\r\n }).finally(() =>{\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n showFullChatMessage(index) {\r\n this.showFullMessageId = index;\r\n }\r\n\r\n updateCaseLenderMessageReadDatetime() {\r\n this.caseLenderMessageService\r\n .updateCaseLenderMessageReadDatetime(this.$routeParams.CaseLenderId)\r\n .then((caseLenderMessageResponse) => {})\r\n .catch((error) => {});\r\n }\r\n\r\n onFileSelect(files: FileAttachmentDTO[], module: ModuleEnum) {\r\n if (files.length > 0) {\r\n this.fileAttachmentService\r\n .UploadFileLstInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.$routeParams.CaseId,\r\n this.fileUpload,\r\n module,\r\n this.$routeParams.CaseLenderId,\r\n )\r\n .then((result) => {\r\n this.openModal = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: FileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.fileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n deleteFile(file: FileAttachmentDTO) {\r\n this.fileUpload.splice(this.fileUpload.indexOf(file), 1);\r\n this.fileAttachmentService.markasdeleted(file.Id).then((result) => {}); //remove on the server\r\n }\r\n\r\n getRateTypeText(e: InterestRateTypeEnum) {\r\n switch (e) {\r\n case InterestRateTypeEnum.Fixed:\r\n return \"Fixed\";\r\n case InterestRateTypeEnum.Variable:\r\n return \"Variable\";\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n addClass(star: number, id: string) {\r\n this.feedBackService.addClass(star, id);\r\n }\r\n\r\n removeClass(star: number, id: string, rating) {\r\n this.feedBackService.removeClass(star, id, rating);\r\n }\r\n\r\n isFeedBackFormDisabled() {\r\n return this.feedBackService.isFeedBackFormDisabled(\r\n this.isLender,\r\n this.feedBackDTO,\r\n );\r\n }\r\n\r\n updateRating(star, rating) {\r\n this.feedBackDTO = this.feedBackService.updateRating(\r\n star,\r\n rating,\r\n this.feedBackDTO,\r\n );\r\n }\r\n\r\n submitFeedBack() {\r\n if (this.isLender) {\r\n this.feedBackDTO.OrganisationId = this.currentCase.BrokerOrganisationId;\r\n this.feedBackDTO.BrokerUserId = this.currentCase.BrokerUserId;\r\n } else {\r\n this.feedBackDTO.LenderId = this.currentCaseLender.LenderId;\r\n }\r\n\r\n this.feedBackService\r\n .addFeedBack(this.feedBackDTO, this.currentCaseLender.Id, false)\r\n .then((response) => {\r\n if (this.isLender) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(`/${this.prevPath}/${this.currentCase.Id}`);\r\n }\r\n });\r\n }\r\n\r\n onClickDeleteMessageButton(message: DealLenderMessageDTO) {\r\n this.showdeleteChatMessageModal = true;\r\n this.messageContent = \"Are you sure you want to delete a selected message?\";\r\n this.selectedDealLenderMessageDto = message;\r\n this.showConfirmDeleteButton = true;\r\n }\r\n\r\n deleteChatMessage() {\r\n this.dataLoading = true;\r\n this.caseLenderMessageService\r\n .markasdeleted(this.selectedDealLenderMessageDto.Id)\r\n .then((response) => {\r\n this.currentCaseLender.CaseLenderMessage =\r\n this.currentCaseLender.CaseLenderMessage.filter(\r\n (x) => x.Id != this.selectedDealLenderMessageDto.Id,\r\n );\r\n })\r\n .catch((error) => {\r\n this.messageContent =\r\n \"Sorry, something went wrong while deleting message. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.showdeleteChatMessageModal = false;\r\n delete this.selectedDealLenderMessageDto;\r\n this.showConfirmDeleteButton = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n getSenderMessageRole() {\r\n if (this.isLender) {\r\n return MessageRoleEnum.Lender;\r\n } else if (this.isBroker) {\r\n return MessageRoleEnum.Broker;\r\n } else if (this.isAdmin) {\r\n return MessageRoleEnum.Admin;\r\n } else if (this.isClient) {\r\n return MessageRoleEnum.Client;\r\n }\r\n }\r\n\r\n getCurrentUserAndRoles() {\r\n this.dataLoading = true;\r\n this.userService\r\n .getcurentuserrecord()\r\n .then((result) => {\r\n this.currentUser = result;\r\n\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n });\r\n\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n });\r\n\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n });\r\n\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n if (!this.isLender) {\r\n this.toggleFeedbackSection = true;\r\n this.updateCaseLenderMessageReadDatetime();\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n isCurrentUserAllowedToSendChat(){\r\n if(this.toggleFeedbackSection||this.showFeedbackSectionLender){\r\n return true\r\n }\r\n return false;\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { DealCompletionDTO } from \"@js/DTO/DealCompletionDTO.cs.d\";\r\nimport { LenderDTO } from \"@js/DTO/LenderDTO.cs\";\r\nimport {\r\n BrokerAppraisal,\r\n BrokerAppraisalLender,\r\n} from \"@js/DTO/Messages/BrokerAppraisalMessage.cs.d\";\r\nimport {\r\n MakeReferralMessageRequest,\r\n LenderAppraisal,\r\n} from \"@js/DTO/Messages/MakeReferralMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { WebConfigDTO } from \"@js/DTO/WebConfigDTO.cs.d\";\r\nimport { AccountService } from \"@js/services/AccountService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\nimport { DealCompletionService } from \"@js/services/DealCompletionService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { LicenseService } from \"@js/services/LicenseService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class IndexController {\r\n fetchingResults: boolean = false;\r\n isPrimaryApplicant: boolean = true;\r\n\r\n user: ApplicationUserDTO;\r\n role: string;\r\n pageTitle: string;\r\n menuShrunk: boolean = false;\r\n errors: any[];\r\n copyrighttext: string;\r\n cookieMessageSeen: boolean;\r\n openShare: boolean;\r\n\r\n //Refer a friend\r\n referFriendName: string;\r\n referFriendSurname: string;\r\n referFriendEmail: string;\r\n\r\n //Generic share\r\n shareName: string;\r\n shareEmail: string;\r\n shareFriendsEmail: string;\r\n shareBody: string;\r\n\r\n //universal email send functions\r\n sendingsharemessage: boolean;\r\n sentsharemessage: boolean;\r\n\r\n //is Broker admin\r\n isAdminBroker: boolean = false;\r\n\r\n isIntroducer: boolean = false;\r\n isBroker: boolean = false;\r\n isLender: boolean = false;\r\n // is white labelling Org\r\n isWhiteLabelled: boolean = false;\r\n\r\n guidanceCheckbox: boolean = true;\r\n ShowHome: boolean = false;\r\n\r\n showMenu: boolean = false;\r\n\r\n showContactPopup: boolean = false;\r\n favIcon: HTMLLinkElement;\r\n title: HTMLLinkElement;\r\n companyWebsite: string;\r\n showContent: boolean = true;\r\n companyName: string = \"Brickflow\";\r\n companyUrlMenuIcon: string = null;\r\n footerTextFL: string;\r\n footerTextSL: string;\r\n footerTextTL: string;\r\n termsAndConditionsLink: string;\r\n privecyLink: string;\r\n cookiePolicyLink: string;\r\n productCode: string;\r\n nameInitial: string;\r\n openProfileImageSelection: boolean;\r\n brokerOrgNumber: string\r\n\r\n displayIfInactiveSubscription: boolean = false;\r\n showBanner: boolean = false;\r\n viewProfileRole: string; // the role displayed on profile menu : \"view your ___ profile\"\r\n isNormalBroker: boolean = false;\r\n orgAdminEmail: string;\r\n\r\n isAssigningBrokerToOrg: boolean = false;\r\n isLegacyUser: boolean = false;\r\n\r\n hubspotContactUsBookMeeting: string = \"\";\r\n\r\n headerBackgroundColour: string = \"\";\r\n\r\n //deal completion\r\n brokerAppraisals: BrokerAppraisal[] = [];\r\n newDealCompletion = {} as DealCompletionDTO;\r\n appraisalLenders: BrokerAppraisalLender[] = [];\r\n appraisalCompletionForm: ng.IFormController;\r\n appraisalName: string = \"\";\r\n showAppraisalNameDropdown: boolean = false;\r\n showAppraisalCompletionModal: boolean = false;\r\n filteredBrokerAppraisals: BrokerAppraisal[] = [];\r\n sendDealCompletionError: string = \"\";\r\n maxCompletionDate: Date = new Date();\r\n dataLoading: boolean = false;\r\n\r\n //Make a referral\r\n makeReferralForm: ng.IFormController;\r\n showMakeReferralModal: boolean = false;\r\n isSearchAttached?: boolean;\r\n isExistingSearch?: boolean;\r\n lenderReferralData: MakeReferralMessageRequest;\r\n lenderReferralClientFullName: string;\r\n message: string;\r\n showSubmitLenderReferralResponse: boolean = false;\r\n submitLenderReferralError: boolean = false;\r\n filteredLenderAppraisals: LenderAppraisal[] = [];\r\n lenderAppraisals: LenderAppraisal[] = [];\r\n hasLiveMarketSearch: boolean = false;\r\n isLenderReferralActive: boolean = false;\r\n contactDetails: string;\r\n\r\n loggedinUserLenderDetails: LenderDTO;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"AccountService\",\r\n \"CaseService\",\r\n \"OrganisationService\",\r\n \"FileAttachmentService\",\r\n \"UserService\",\r\n \"FileAttachmentService\",\r\n \"PaymentService\",\r\n \"ProductService\",\r\n \"DealCompletionService\",\r\n \"LicenseService\",\r\n \"DealClientService\",\r\n \"LenderService\"\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $auth: AuthService,\r\n protected roleService: RoleService,\r\n private $accountservice: AccountService,\r\n private caseService: CaseService,\r\n private organisationService: OrganisationService,\r\n private fileAttachedService: FileAttachmentService,\r\n private userService: UserService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private $paymentService: PaymentService,\r\n private productService: ProductService,\r\n private dealCompletionService: DealCompletionService,\r\n private licenseService: LicenseService,\r\n private dealClientService: DealClientService,\r\n private lenderService: LenderService\r\n ) {\r\n this.setAuthorisation();\r\n\r\n // Used for test site to keep banner hidden\r\n if (localStorage.getItem(\"isTestBannerHidden\")) {\r\n if (localStorage.getItem(\"isTestBannerHidden\") == \"true\") {\r\n this.roleService.isTestBannerHidden = true;\r\n }\r\n }\r\n\r\n\r\n var d = new Date();\r\n (this.$rootScope as any).formSaved = true;\r\n this.footerTextTL =\r\n \"Copyright © Property Funding Hub Limited \" + d.getFullYear();\r\n\r\n this.$auth.getHubspotContactUsBookMeeting().then((hubSpotUrl: string) => {\r\n this.hubspotContactUsBookMeeting = hubSpotUrl;\r\n });\r\n\r\n this.$accountservice.getFooterWebConfigValue().then((val: WebConfigDTO) => {\r\n this.termsAndConditionsLink = val.TermsAndConditionsURL;\r\n this.privecyLink = val.PrivecyURL;\r\n this.cookiePolicyLink = val.CookiePolicyURL;\r\n this.headerBackgroundColour = val.HeaderBackgroundColour;\r\n });\r\n //$suppliers.fetchAll().then((response) => {\r\n // response.forEach((supplier, index) => {\r\n // if (!supplier.Coordinates) {\r\n // this.$http.get(\"https://nominatim.openstreetmap.org/search?q=\" + encodeURIComponent(supplier.Postcode) + \"&format=json\").then((response) => {\r\n // supplier.Coordinates = response.data[0].lat + \",\" + response.data[0].lon;\r\n // this.$suppliers.addUpdate(supplier);\r\n // });\r\n // }\r\n // });\r\n //});\r\n\r\n if ($scope) {\r\n $rootScope.$on(\"login\", (event: ng.IAngularEvent) => {\r\n this.roleService.IsAdminUser = false;\r\n this.roleService.IsLenderUserOrAbove = false;\r\n this.roleService.IsClientUserOrAbove = false;\r\n this.roleService.IsIntroducer = false;\r\n this.ShowHome = false;\r\n this.CalcShowHome();\r\n // this.showHubSpotChat();\r\n });\r\n\r\n $rootScope.$on(\"error\", (event: ng.IAngularEvent, data) => {\r\n if (!this.errors) {\r\n this.errors = [];\r\n }\r\n\r\n this.errors.push(data);\r\n });\r\n\r\n $rootScope.$on(\"clearerrors\", (event: ng.IAngularEvent, page: string) => {\r\n this.clearErrors(page);\r\n });\r\n\r\n if (window.self == window.top) {\r\n $scope.$on(\"$viewContentLoaded\", (event, next, current) => {\r\n this.cookieMessage();\r\n this.getGuidanceSwitchState();\r\n });\r\n\r\n $scope.$on(\"$routeChangeStart\", (event, next, current) => {\r\n this.setAuthorisation();\r\n this.getLeadGeneratorName();\r\n });\r\n }\r\n\r\n $scope.$on(\"$routeChangeSuccess\", (event, current, previous) => {\r\n if (window.self == window.top)\r\n this.isAssigningBrokerToOrg =\r\n sessionStorage.getItem(\"assignUserToOrg\") == \"true\";\r\n ($scope as any).ctrl.pageTitle = current.$$route.page;\r\n ($scope as any).ctrl.openSection = current.$$route.section;\r\n if (\r\n $location.path() === \"usermanagement\" ||\r\n $location.path() === \"rolemanagement\"\r\n ) {\r\n ($scope as any).ctrl.roleService.isAdminUser().then((isAdmin) => {\r\n if (!isAdmin) {\r\n $location.path(\"/login\");\r\n }\r\n });\r\n }\r\n\r\n this.favIcon = document.querySelector(\"#appIcon\");\r\n this.title = document.querySelector(\"#title\");\r\n this.companyUrlMenuIcon = this.favIcon ? this.favIcon.href : null;\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n ($scope as any).ctrl.$auth.setIsLoggedIn(true);\r\n\r\n ($scope as any).ctrl.userService\r\n .getcurentuserrecord()\r\n .then((response) => {\r\n ($scope as any).ctrl.user = response;\r\n (this.$rootScope as any).selectedUser = response;\r\n\r\n this.nameInitial = response.FirstName.charAt(0);\r\n this.isLegacyUser = response.IsLegacyUser;\r\n\r\n if (\r\n response.ProfilePictureUrl &&\r\n response.ProfilePictureUrl.length > 0\r\n ) {\r\n this.fileAttachedService\r\n .getFileUri(response.ProfilePictureUrl)\r\n .then((result) => {\r\n ($scope as any).ctrl.user.ProfilePictureFullUrl = result;\r\n (\r\n this.$rootScope as any\r\n ).selectedUser.ProfilePictureFullUrl = result;\r\n });\r\n }\r\n\r\n this.buildFooterText(response);\r\n this.isAdminBroker = response.IsOrganisationAdmin;\r\n this.isNormalBroker =\r\n response.OrganisationId && !response.IsOrganisationAdmin;\r\n\r\n // If the user hasn't followed a whitelabelled link then \"whitelabel\" based on the user\r\n if (!$cookies.get(\"org_code\")) {\r\n organisationService\r\n .getOrganisation()\r\n .then((org: OrganisationDTO) => {\r\n this.userService.fileSelected =\r\n org.LogoURL != null &&\r\n org.LogoURL.length > 0 &&\r\n org.HasWhiteLabelAddOnPaid == true &&\r\n org.IsWhiteLabelled == true\r\n ? org.LogoURL\r\n : \"img/BrickFlow_Logo_RGB_Blue.svg\";\r\n this.isWhiteLabelled =\r\n org.HasWhiteLabelAddOnPaid && org.IsWhiteLabelled;\r\n this.companyWebsite =\r\n org.HasWhiteLabelAddOnPaid == true &&\r\n org.IsWhiteLabelled == true\r\n ? org.CompanyURL\r\n : \"https://brickflow.com\";\r\n\r\n if (\r\n org.LogoURL != null &&\r\n org.LogoURL.length > 0 &&\r\n org.HasWhiteLabelAddOnPaid &&\r\n org.IsWhiteLabelled\r\n ) {\r\n this.favIcon.href = org.FaviconURL;\r\n this.companyUrlMenuIcon = org.FaviconURL\r\n ? this.favIcon.href\r\n : null;\r\n\r\n sessionStorage.setItem(\"companyLogoUrl\", org.LogoURL);\r\n }\r\n\r\n this.companyName = org.Name;\r\n\r\n this.brokerOrgNumber = org.PhoneNumber;\r\n\r\n sessionStorage.setItem(\r\n \"companyWebsite\",\r\n this.companyWebsite,\r\n );\r\n\r\n if (!this.isWhiteLabelled) {\r\n if (\r\n !(this.$rootScope as any).selectedUser\r\n .DefaultBrokerOrganisationId\r\n ) {\r\n this.loadHubSpotChat();\r\n } else {\r\n if ((window as any).HubSpotConversations) {\r\n (window as any).HubSpotConversations.widget.remove();\r\n }\r\n }\r\n this.removeLSData();\r\n } else {\r\n if ((window as any).HubSpotConversations) {\r\n (window as any).HubSpotConversations.widget.remove();\r\n }\r\n\r\n if (\r\n org.OrganisationTermForApp != null &&\r\n org.OrganisationTermForApp.length > 0\r\n ) {\r\n sessionStorage.setItem(\r\n \"applicationName\",\r\n org.OrganisationTermForApp,\r\n );\r\n $rootScope.$broadcast(\r\n \"applicationNameChanged\",\r\n org.OrganisationTermForApp,\r\n );\r\n this.title.innerHTML = org.OrganisationTermForApp;\r\n }\r\n }\r\n });\r\n } else {\r\n if (\r\n !location.pathname.startsWith(\"/otmx\") &&\r\n !location.pathname.startsWith(\"/lnhn\")\r\n ) {\r\n if (\r\n location.pathname.replace(\"/\", \"\") != null &&\r\n location.pathname.replace(\"/\", \"\").length > 0\r\n ) {\r\n this.getOrganisationForWhiteLabelledUrl(response);\r\n }\r\n } else {\r\n this.removeLSData();\r\n }\r\n }\r\n\r\n this.roleService.GetUserRoles().then((roles) => {\r\n this.setViewProfileRole(roles);\r\n this.CalcShowHome();\r\n\r\n if (roles.find((x) => x.toLowerCase() == \"broker\")) {\r\n this.isPrimaryApplicant = false;\r\n this.isBroker = true;\r\n\r\n if (!this.isBroker || response.HasActiveSubscription) {\r\n sessionStorage.setItem(\"isValidLicense\", \"true\");\r\n } else {\r\n sessionStorage.setItem(\"isValidLicense\", \"false\");\r\n this.displayIfInactiveSubscription = this.showBanner = true;\r\n }\r\n\r\n this.organisationService\r\n .getOrganisationAdmin(this.user.OrganisationId)\r\n .then((response) => {\r\n this.orgAdminEmail = response;\r\n });\r\n }\r\n\r\n (this.$rootScope as any).userRoles = roles;\r\n\r\n //Commenting a below code as we no more using a redirectiong a legacyuser to landing page\r\n /* this.roleService.isIntroducerOnly().then((isIntroducerOnly: boolean) => {\r\n if (!this.roleService.IsAdminUser && !this.roleService.IsLender && !isIntroducerOnly && !this.roleService.IsClient) {\r\n if (response.IsLegacyUser && current.$$route.page != 'Landing' && current.$$route.page != 'Promo' && current.$$route.page != 'Broker Registration' && current.$$route.page != 'Registration' && current.$$route.page != 'Criteria' && current.$$route.page != 'Lender Results') {\r\n $location.path(\"/landing\");\r\n }\r\n } else if (sessionStorage.getItem('userOrgUniqueRef') != null && current.$$route.page != 'Broker Registration') {\r\n $location.path(\"/registerbroker\");\r\n }\r\n });*/\r\n });\r\n });\r\n } else {\r\n // default brickflow settings\r\n this.userService.fileSelected = \"img/BrickFlow_Logo_RGB_Blue.svg\";\r\n this.companyWebsite = \"https://brickflow.com\";\r\n //Below code is for displaying the application name\r\n if (\r\n !location.pathname.startsWith(\"/otmx\") &&\r\n !location.pathname.startsWith(\"/lnhn\")\r\n ) {\r\n if (\r\n location.pathname.replace(\"/\", \"\") != null &&\r\n location.pathname.replace(\"/\", \"\").length > 0\r\n ) {\r\n this.getOrganisationForWhiteLabelledUrl(null);\r\n } else {\r\n this.buildFooterText(null);\r\n this.loadHubSpotChat();\r\n if (window.self == window.top) this.removeLSData();\r\n this.favIcon.href = \"favicon.ico\";\r\n this.title.innerHTML = \"Brickflow\";\r\n }\r\n } else {\r\n this.buildFooterText(null);\r\n if (window.self == window.top) this.removeLSData();\r\n }\r\n }\r\n\r\n //keep track of last path\r\n //if (previous) {\r\n // (this.$rootScope as any).previousPath = previous.$$route.originalPath;\r\n // console.log(\"Last path: \" + previous.$$route.originalPath);\r\n //}\r\n //if (current) {\r\n // (this.$rootScope as any).currentPath = current.$$route.originalPath;\r\n // console.log(\"Currrent path: \" + current.$$route.originalPath);\r\n //}\r\n });\r\n if (window.self == window.top) {\r\n $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n this.updateGuidanceState();\r\n });\r\n $rootScope.$on(\"showContactPopup\", (event: ng.IAngularEvent) => {\r\n this.showContactPopup = !this.showContactPopup;\r\n });\r\n }\r\n\r\n /* if ($cookies.get('access_token')) {\r\n this.showHubSpotChat();\r\n }*/\r\n }\r\n }\r\n\r\n whiteLabeling(organisationId: number) {\r\n if (organisationId) {\r\n this.organisationService.fetch(organisationId).then((organisation) => {\r\n if (\r\n organisation &&\r\n organisation.IsWhiteLabelled == true &&\r\n organisation.HasWhiteLabelAddOnPaid == true &&\r\n organisation.LogoURL\r\n ) {\r\n this.fileAttachedService\r\n .getFileUri(organisation.LogoURL)\r\n .then((result) => {\r\n this.userService.fileSelected = result;\r\n });\r\n } else {\r\n this.userService.fileSelected = \"img/BrickFlow_Logo_RGB_Blue.svg\";\r\n }\r\n });\r\n }\r\n }\r\n\r\n contactPopup(): void {\r\n this.showContactPopup = !this.showContactPopup;\r\n }\r\n\r\n cookieMessage() {\r\n if (!this.$cookies.get(\"cookieMessageSeen\")) {\r\n this.cookieMessageSeen = false;\r\n } else {\r\n this.cookieMessageSeen = true;\r\n }\r\n return this.cookieMessageSeen;\r\n }\r\n cookieConsented() {\r\n this.cookieMessageSeen = true;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n this.$cookies.put(\"cookieMessageSeen\", \"true\", { expires: expiryDate });\r\n }\r\n\r\n updateGuidanceState() {\r\n this.guidanceCheckbox =\r\n this.$cookies.get(\"guidance\") === \"on\" ||\r\n this.$cookies.get(\"guidance\") === undefined;\r\n }\r\n\r\n getGuidanceSwitchState() {\r\n if (!this.$cookies.get(\"guidance\")) {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"on\") {\r\n this.guidanceCheckbox = true;\r\n } else if (this.$cookies.get(\"guidance\") === \"off\") {\r\n this.guidanceCheckbox = false;\r\n } else {\r\n this.guidanceCheckbox = true;\r\n }\r\n return this.guidanceCheckbox;\r\n }\r\n\r\n recordGuidanceCookie() {\r\n var guidanceSwitchState: string;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n if (this.guidanceCheckbox == true) {\r\n guidanceSwitchState = \"on\";\r\n } else {\r\n guidanceSwitchState = \"off\";\r\n }\r\n this.$cookies.put(\"guidance\", guidanceSwitchState, { expires: expiryDate });\r\n this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n }\r\n\r\n setAuthorisation() {\r\n if (\r\n this.$cookies.get(\"access_token\") &&\r\n !this.$http.defaults.headers.common.Authorization\r\n ) {\r\n this.$http.defaults.headers.common.Authorization =\r\n \"Bearer \" + this.$cookies.get(\"access_token\");\r\n }\r\n }\r\n\r\n clearErrors(page: string) {\r\n if (this.errors) {\r\n this.errors = this.errors.filter((value: any, index: number) => {\r\n return value.page !== page;\r\n });\r\n }\r\n }\r\n dismissError(index: number) {\r\n this.errors.splice(index, 1);\r\n }\r\n\r\n isMobile(): boolean {\r\n return window.innerWidth <= 451;\r\n }\r\n\r\n /* displayDot() {\r\n var display = false; \r\n var hasLicense = this.user.LicenseMasterId != null;\r\n if (!this.user.LicenseMasterId && !this.user.SubscriptionStatus) {\r\n this.$paymentService.getLicense().then((response) => {\r\n var licenseData = response;\r\n if (response != null && response.Status != LicenseMasterStatusEnum.PreSubscription && response.Status != LicenseMasterStatusEnum.None) {\r\n this.user.SubscriptionStatus = licenseData.Status;\r\n var invalidLicense = this.user.SubscriptionStatus != LicenseMasterStatusEnum.PaidUp && this.user.SubscriptionStatus != LicenseMasterStatusEnum.PreCancel && this.user.SubscriptionStatus != LicenseMasterStatusEnum.PaymentProcessing;\r\n this.displayIfInactiveSubscription = this.showBanner = invalidLicense;\r\n } else {\r\n var invalidLicense = this.user.SubscriptionStatus != LicenseMasterStatusEnum.PaidUp && this.user.SubscriptionStatus != LicenseMasterStatusEnum.PreCancel && this.user.SubscriptionStatus != LicenseMasterStatusEnum.PaymentProcessing;\r\n var display = !hasLicense || invalidLicense;\r\n this.displayIfInactiveSubscription = this.showBanner = display;\r\n }\r\n });\r\n } else {\r\n var invalidLicense = this.user.SubscriptionStatus != LicenseMasterStatusEnum.PaidUp && this.user.SubscriptionStatus != LicenseMasterStatusEnum.PreCancel && this.user.SubscriptionStatus != LicenseMasterStatusEnum.PaymentProcessing;\r\n var display = !hasLicense || invalidLicense;\r\n this.displayIfInactiveSubscription = this.showBanner = display;\r\n }\r\n\r\n }*/\r\n\r\n CalcShowHome() {\r\n if ((this.$scope as any).ctrl.$auth.getIsLoggedIn() == false) {\r\n this.ShowHome = false;\r\n } else {\r\n if (\r\n (this.roleService.isAdminUser && this.pageTitle == \"Dashboard\") ||\r\n (this.roleService.isClientUser &&\r\n this.pageTitle == \"Client Dashboard\") ||\r\n (this.roleService.isLenderUser && this.pageTitle == \"Lenders\")\r\n ) {\r\n this.ShowHome = false;\r\n } else {\r\n this.ShowHome = true;\r\n }\r\n }\r\n }\r\n\r\n GoHome() {\r\n if ((this.$scope as any).ctrl.$auth.getIsLoggedIn() == false) {\r\n return false;\r\n }\r\n\r\n this.roleService.goHomeBasedOnUser();\r\n }\r\n\r\n go(path: string) {\r\n this.$location.path(path);\r\n }\r\n\r\n newloan() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/criteria\");\r\n }\r\n\r\n sendShare(): void {\r\n this.sendingsharemessage = true;\r\n this.sentsharemessage = false;\r\n\r\n this.$accountservice\r\n .SendLoansAdvertEmail(\r\n this.shareName,\r\n this.shareEmail,\r\n this.shareFriendsEmail,\r\n this.shareBody,\r\n )\r\n .then((response2) => {\r\n this.sendingsharemessage = false;\r\n this.sentsharemessage = true;\r\n });\r\n }\r\n\r\n logout() {\r\n let broadcastResult = this.$rootScope.$broadcast(\"logout\");\r\n\r\n if (broadcastResult.defaultPrevented) return;\r\n\r\n this.displayIfInactiveSubscription = false; //hide red dot\r\n\r\n delete this.user;\r\n this.$auth.logout();\r\n // this.showHubSpotChat();\r\n }\r\n\r\n newBlankCase() {\r\n this.fetchingResults = true;\r\n this.caseService\r\n .newBlankCase(this.user, this.isPrimaryApplicant)\r\n .then((newBlankCaseDto) => {\r\n if (newBlankCaseDto && newBlankCaseDto.NewCaseId) {\r\n this.$location.path(\"/casedashboard/\" + newBlankCaseDto.NewCaseId);\r\n this.fetchingResults = false;\r\n }\r\n });\r\n }\r\n\r\n /**Main menu link clicked (3 bricks icon button) */\r\n /**todo: add else outer statement for button to work when user is not logged in (not working at the moment)\r\n * else inner statement (userdashboard one) should do something similar to showHomeDashboard() method in \"userdashboardcontroller.ts\"\r\n */\r\n mainMenuLinkClicked() {\r\n if (this.$auth.isLoggedIn) {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n\r\n if (this.roleService.IsAdminUser == true) {\r\n this.go(\"/dashboard\");\r\n } else {\r\n /*clearing a session storage in case lender has set a data while referring search*/\r\n sessionStorage.removeItem(\"lenderReferralClient\");\r\n this.go(\"/\");\r\n }\r\n } else {\r\n this.go(\"/\");\r\n }\r\n }\r\n\r\n goToNewUserDashboard() {\r\n // TODO - Temporary code JLH\r\n this.go(\"/userdashboard2\");\r\n }\r\n\r\n homePageClicked() {\r\n let broadcastResult = this.$rootScope.$broadcast(\"logout\");\r\n if (broadcastResult.defaultPrevented) return;\r\n window.location.href = this.companyWebsite;\r\n }\r\n\r\n showHubSpotChat() {\r\n this.organisationService\r\n .getOrganisation()\r\n .then((userOrganisation: OrganisationDTO) => {\r\n // Hide the hubspot chat feature if the user's organisation is white-labelled\r\n if (\r\n userOrganisation.IsWhiteLabelled == true &&\r\n userOrganisation.HasWhiteLabelAddOnPaid == true &&\r\n (window as any).HubSpotConversations\r\n ) {\r\n (window as any).HubSpotConversations.widget.remove();\r\n } else {\r\n if ((window as any).HubSpotConversations) {\r\n (window as any).HubSpotConversations.widget.load();\r\n }\r\n }\r\n });\r\n }\r\n\r\n /* Below code is to include chat script */\r\n loadHubSpotChat() {\r\n if ((window as any).HubSpotConversations) {\r\n (window as any).HubSpotConversations.widget.load();\r\n } else {\r\n const node = document.createElement(\"script\");\r\n node.src = \"//js.hs-scripts.com/7081779.js\";\r\n node.type = \"text/javascript\";\r\n document.getElementsByTagName(\"head\")[0].appendChild(node);\r\n }\r\n }\r\n\r\n removeLSData() {\r\n sessionStorage.removeItem(\"applicationName\");\r\n sessionStorage.removeItem(\"companyWebsite\");\r\n sessionStorage.removeItem(\"companyLogoUrl\");\r\n }\r\n\r\n getOrganisationForWhiteLabelledUrl(user: ApplicationUserDTO) {\r\n this.showContent = false;\r\n this.organisationService\r\n .getOrganisationByOrgCode(location.pathname.replace(\"/\", \"\"))\r\n .then((userOrganisation: OrganisationDTO) => {\r\n if (userOrganisation != null) {\r\n if (\r\n userOrganisation.HasWhiteLabelAddOnPaid == true &&\r\n userOrganisation.IsWhiteLabelled == true &&\r\n userOrganisation.OrganisationTermForApp != null &&\r\n userOrganisation.OrganisationTermForApp.length > 0\r\n ) {\r\n if (window.self == window.top) {\r\n sessionStorage.setItem(\r\n \"applicationName\",\r\n userOrganisation.OrganisationTermForApp,\r\n );\r\n } else {\r\n this.organisationService.sendDataToParent(\r\n \"applicationName\",\r\n userOrganisation.OrganisationTermForApp,\r\n );\r\n }\r\n } else {\r\n sessionStorage.removeItem(\"applicationName\");\r\n }\r\n\r\n if (window.self == window.top && userOrganisation.CompanyURL) {\r\n sessionStorage.setItem(\r\n \"companyWebsite\",\r\n userOrganisation.CompanyURL,\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"companyWebsite\");\r\n }\r\n\r\n if (window.self == window.top && userOrganisation.LogoURL) {\r\n sessionStorage.setItem(\"companyLogoUrl\", userOrganisation.LogoURL);\r\n } else {\r\n sessionStorage.removeItem(\"companyLogoUrl\");\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.showContent = true;\r\n this.buildFooterText(user);\r\n });\r\n }\r\n\r\n buildShareMsg() {\r\n let lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n this.shareBody =\r\n \"Hi,\\n\\nI've just been trying out \" +\r\n lsd +\r\n \" - it’s a comparison site for specialist property finance, its's fast and it's really useful. You should check it out.\";\r\n } else {\r\n this.shareBody =\r\n \"Hi, \\n\\nI've just been trying out Brickflow - it’s a comparison site for specialist property finance, its's fast and it's really useful. You should check it out.\";\r\n }\r\n }\r\n\r\n buildFooterText(user: ApplicationUserDTO) {\r\n var lsd;\r\n if (window.self == window.top)\r\n lsd = sessionStorage.getItem(\"applicationName\");\r\n if (!user && lsd != null) {\r\n this.footerTextFL = `${lsd} is designed to be used by brokers and property investors to source and apply for funding. It’s a collaborative project management tool, where you can store information and invite your colleagues to participate to make the application process quicker and easier.`;\r\n this.footerTextSL = null;\r\n } else {\r\n if (user && (user.IsOrganisationAdmin || user.OrganisationId > 0)) {\r\n this.footerTextFL =\r\n \"Property Funding Hub Limited (t/a Brickflow) is designed to be used by mortgage brokers to source and apply for specialist property finance for their clients.\";\r\n this.footerTextSL = null;\r\n } else if (\r\n user &&\r\n user.OrganisationReferralId != null &&\r\n user.OrganisationReferralId > 0\r\n ) {\r\n this.footerTextFL = `${lsd} is designed to be used by brokers and property investors to source and apply for funding. It’s a collaborative project management tool, where you can store information and invite your colleagues to participate to make the application process quicker and easier.`;\r\n this.footerTextSL = null;\r\n } else {\r\n this.footerTextFL =\r\n \"Property Funding Hub Limited (t/a Brickflow) is designed to be used by corporate borrowers (Limited Companies or Incorporated Partnerships) to compare and apply for specialist property finance loans.\";\r\n this.footerTextSL =\r\n \"Brickflow is not an advisory business and does not give advice. It can deal with purely factual inquiries and provide information but it will not give an opinion or recommendation in any circumstances.\";\r\n }\r\n }\r\n }\r\n\r\n isLoggedIn(): boolean {\r\n return this.$auth.getIsLoggedIn();\r\n }\r\n\r\n /**\r\n * Called when a profile picture has been selected\r\n * @param files\r\n */\r\n onFileSelect(files) {\r\n this.fileAttachmentService.uploadFileAndReturnURI(files).then((result) => {\r\n // Make a copy of the main profile object so that the main page doesn't get updated at the same time\r\n //this.user = Utils.deepCopy(this.profile);\r\n\r\n this.user.ProfilePictureUrl = result.FileLocation;\r\n\r\n this.userService.addUpdate(this.user).then((userResponse) => {\r\n // TODO - JLH - I don't like that I'm getting the profile again - but the addupdate function isn't returning the roles in the user dto which causes them to disappear if you save again.\r\n this.userService\r\n .getcurentuserrecord()\r\n .then((user: ApplicationUserDTO) => {\r\n this.user = user;\r\n\r\n this.fileAttachedService\r\n .getFileUri(this.user.ProfilePictureUrl)\r\n .then((result) => {\r\n this.user.ProfilePictureFullUrl = result;\r\n });\r\n\r\n // Update the profile cookie so that the rest of the application can be aware of the profile changes\r\n this.$auth.setProfileCookie(this.user);\r\n });\r\n\r\n this.openProfileImageSelection = false;\r\n });\r\n });\r\n }\r\n\r\n toggleBanner() {\r\n this.showBanner = !this.showBanner;\r\n }\r\n\r\n setViewProfileRole(roles: string[]) {\r\n if (roles.find((x) => x.toLowerCase() == \"admin\"))\r\n this.viewProfileRole = \"administrator\";\r\n else if (roles.find((x) => x.toLowerCase() == \"client\"))\r\n this.viewProfileRole = \"borrower\";\r\n else if (roles.find((x) => x.toLowerCase() == \"broker\"))\r\n this.viewProfileRole = \"broker\";\r\n else if (roles.find((x) => x.toLowerCase() == \"lender\")) {\r\n this.viewProfileRole = \"lender\";\r\n this.isLender = true;\r\n this.lenderService\r\n .getUserLenderDetails()\r\n .then((response) => {\r\n this.loggedinUserLenderDetails = response;\r\n this.hasLiveMarketSearch = response.HasLiveMarketSearch;\r\n this.isLenderReferralActive = response.IsLenderReferralActive;\r\n })\r\n .finally(() => {\r\n if (this.hasLiveMarketSearch && this.isLenderReferralActive) {\r\n this.$auth.getReferralContactDetails().then((response) => {\r\n this.contactDetails = response;\r\n });\r\n }\r\n });\r\n } else this.viewProfileRole = \"\";\r\n }\r\n\r\n getLeadGeneratorName() {\r\n if (!this.$cookies.get(\"leadgeneratorname\")) {\r\n const expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 1);\r\n\r\n this.productService.getLeadGeneratorName().then((response) => {\r\n this.$cookies.put(\"leadgeneratorname\", response, {\r\n expires: expiryDate,\r\n });\r\n });\r\n }\r\n }\r\n\r\n getFilteredBrokerAppraisals() {\r\n if (this.appraisalName != null && this.appraisalName.length > 0) {\r\n this.filteredBrokerAppraisals = this.brokerAppraisals.filter(\r\n (appraisal) =>\r\n appraisal.AppraisalName != null &&\r\n appraisal.AppraisalName.toLowerCase().indexOf(\r\n this.appraisalName.toLowerCase(),\r\n ) !== -1,\r\n );\r\n } else {\r\n this.filteredBrokerAppraisals = this.brokerAppraisals;\r\n }\r\n\r\n this.showAppraisalNameDropdown = true;\r\n }\r\n\r\n onSelectingAppraisalName(item: BrokerAppraisal) {\r\n this.appraisalName = item.AppraisalName;\r\n this.showAppraisalNameDropdown = false;\r\n this.newDealCompletion.AppraisalId = item.AppraisalId;\r\n this.newDealCompletion.AppraisalType = item.IsDeal ? \"Deal\" : \"Case\";\r\n this.appraisalLenders = [];\r\n this.appraisalCompletionForm.LenderId.$setPristine();\r\n this.appraisalCompletionForm.LenderId.$setUntouched();\r\n }\r\n\r\n sendDealCompletionEmail() {\r\n this.dataLoading = true;\r\n this.dealCompletionService\r\n .sendDealCompletionEmail(this.newDealCompletion)\r\n .then((response) => {\r\n if (response) {\r\n this.showAppraisalCompletionModal = false;\r\n } else {\r\n this.sendDealCompletionError =\r\n \"Your message could not be delivered. Please reach out to Brickflow so that we can investigate.\";\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n onClickOfCompletion() {\r\n var modalContent = document.getElementsByClassName(\"modal-content\");\r\n if (modalContent.length <= 0) {\r\n this.showAppraisalNameDropdown = false;\r\n this.newDealCompletion = {} as DealCompletionDTO;\r\n this.appraisalName = \"\";\r\n this.sendDealCompletionError = \"\";\r\n this.appraisalLenders = [];\r\n this.showAppraisalCompletionModal = !this.showAppraisalCompletionModal;\r\n this.dataLoading = true;\r\n this.dealCompletionService\r\n .getBrokerAppraisalDetails()\r\n .then((response) => {\r\n this.filteredBrokerAppraisals = this.brokerAppraisals =\r\n response.BrokerAppraisals;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n closeAppraisalNameListDropDown() {\r\n event.stopPropagation();\r\n if (this.showAppraisalNameDropdown && !this.dataLoading) {\r\n this.showAppraisalNameDropdown = false;\r\n }\r\n }\r\n\r\n onClickOfCaseNameElement() {\r\n event.stopPropagation();\r\n if (!this.dataLoading)\r\n this.showAppraisalNameDropdown = !this.showAppraisalNameDropdown;\r\n }\r\n\r\n populateAppraisalLenders() {\r\n if (\r\n this.appraisalName.length > 0 &&\r\n this.filteredBrokerAppraisals.length > 0\r\n ) {\r\n this.appraisalLenders = this.filteredBrokerAppraisals.find(\r\n (b) => b.AppraisalName == this.appraisalName,\r\n ).AppraisalLenders;\r\n } else {\r\n this.appraisalLenders = [];\r\n }\r\n }\r\n\r\n onClickOfMakeAReferral() {\r\n var modalContent = document.getElementsByClassName(\"modal-content\");\r\n if (modalContent.length <= 0) {\r\n this.lenderReferralData = {} as MakeReferralMessageRequest;\r\n this.appraisalName = \"\";\r\n this.showAppraisalNameDropdown = false;\r\n this.isSearchAttached = null;\r\n this.isExistingSearch = null;\r\n this.lenderReferralClientFullName = \"\";\r\n this.showSubmitLenderReferralResponse = false;\r\n this.submitLenderReferralError = false;\r\n this.showMakeReferralModal = !this.showMakeReferralModal;\r\n this.dataLoading = true;\r\n this.userService\r\n .getLenderAppraisals()\r\n .then((response) => {\r\n this.filteredLenderAppraisals = this.lenderAppraisals = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n submitLenderReferral() {\r\n this.dataLoading = true;\r\n this.populateFirstAndLastNameForClient();\r\n if (!this.isSearchAttached) this.lenderReferralData.DealId = null;\r\n this.dealClientService\r\n .submitLenderReferral(this.lenderReferralData)\r\n .then((response) => {\r\n if (response) {\r\n this.message = \"Your referral has been submitted.\";\r\n this.showSubmitLenderReferralResponse = true;\r\n } else {\r\n this.message = \"Error while making a referral, please try later.\";\r\n this.showSubmitLenderReferralResponse = true;\r\n this.submitLenderReferralError = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n goToLoanTypeSelectionPage() {\r\n this.populateFirstAndLastNameForClient();\r\n sessionStorage.setItem(\r\n \"lenderReferralClient\",\r\n JSON.stringify(this.lenderReferralData.ClientDTO),\r\n );\r\n this.$auth.setHasValidStatustoShowShareSearchModal(\r\n true,\r\n );\r\n this.showMakeReferralModal = false;\r\n this.$location.path(\"/allloans\");\r\n }\r\n\r\n populateFirstAndLastNameForClient() {\r\n let userFullName = this.lenderReferralClientFullName;\r\n let spaceIndex = userFullName.indexOf(\" \");\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(\" \"));\r\n lastName = userFullName.substring(userFullName.indexOf(\" \") + 1);\r\n }\r\n\r\n this.lenderReferralData.ClientDTO.FirstName = firstName;\r\n this.lenderReferralData.ClientDTO.LastName = lastName;\r\n }\r\n\r\n closeLenderReferralModal() {\r\n this.showMakeReferralModal = false;\r\n if (\r\n this.$location.path().startsWith(\"/bridgingresults\") ||\r\n this.$location.path().startsWith(\"/commercialresults\") ||\r\n this.$location.path().startsWith(\"/devfinanceresults\")\r\n ) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n onLenderSelectingSearchName(item: LenderAppraisal) {\r\n this.showAppraisalNameDropdown = false;\r\n this.appraisalName = item.DealName;\r\n this.lenderReferralData.DealId = item.DealId;\r\n }\r\n\r\n getFilteredLenderAppraisals() {\r\n if (this.appraisalName != null && this.appraisalName.length > 0) {\r\n this.filteredLenderAppraisals = this.lenderAppraisals.filter(\r\n (appraisal) =>\r\n appraisal.DealName != null &&\r\n appraisal.DealName.toLowerCase().indexOf(\r\n this.appraisalName.toLowerCase(),\r\n ) !== -1,\r\n );\r\n } else {\r\n this.filteredLenderAppraisals = this.lenderAppraisals;\r\n }\r\n\r\n this.showAppraisalNameDropdown = true;\r\n }\r\n\r\n hideHeader() {\r\n if (\r\n !this.$cookies.get(\"access_token\") &&\r\n (this.$location.path().startsWith(\"/e/bridgingcriteria\") ||\r\n this.$location.path().startsWith(\"/e/commercialcriteria\") ||\r\n this.$location.path().startsWith(\"/e/devfinancecriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\") || this.$location.path().startsWith(\"/e/enterpriseleadcapture\"))\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideFooter() {\r\n if (!this.$cookies.get(\"access_token\") && this.$location.path().includes('widget') && window.self != window.top && \r\n (this.$location.path().startsWith(\"/e/bridgingcriteria\") ||\r\n this.$location.path().startsWith(\"/e/commercialcriteria\") ||\r\n this.$location.path().startsWith(\"/e/devfinancecriteria\") ||\r\n this.$location.path().startsWith(\"/allloans\"))) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isResultsPage(){\r\n if (\r\n this.$location.path().startsWith(\"/referredSearch\") ||\r\n this.$location.path().startsWith(\"/resultsExternalAPI\") ||\r\n this.$location.path().startsWith(\"/exitloanresults\") ||\r\n this.$location.path().startsWith(\"/bridgingresults\") ||\r\n this.$location.path().startsWith(\"/bridgingshortlistmore\") ||\r\n this.$location.path().startsWith(\"/referredsearchdeal\") ||\r\n this.$location.path().startsWith(\"/referredsearchcommercial\") ||\r\n this.$location.path().startsWith(\"/referredsearchdevfinance\") ||\r\n this.$location.path().startsWith(\"/commercialresults\") ||\r\n this.$location.path().startsWith(\"/commercialshortlistmore\") ||\r\n this.$location.path().startsWith(\"/devfinanceresults\") ||\r\n this.$location.path().startsWith(\"/devfinanceshortlistmore\") ||\r\n this.$location.path().startsWith(\"/results\") ||\r\n this.$location.path().startsWith(\"/shortlistmore\") ||\r\n this.$location.path().startsWith(\"/e/bridgingresults\") ||\r\n this.$location.path().startsWith(\"/e/commercialresults\") ||\r\n this.$location.path().startsWith(\"/e/devfinanceresults\") \r\n ) {\r\n\r\n return true;\r\n }else{\r\n return false;\r\n }\r\n }\r\n\r\n showSignInButton(){\r\n if(this.$location.path().startsWith(\"/e/bridgingresults\") ||\r\n this.$location.path().startsWith(\"/e/commercialresults\") ||\r\n this.$location.path().startsWith(\"/e/devfinanceresults\")) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n goToNewSearch() {\r\n this.$location.path(\"/allloans\");\r\n }\r\n}\r\n\r\n","export const enum ApplicantRoleEnum {\r\n Developer = 0,\r\n Introducer = 1,\r\n Broker = 2,\r\n Lender = 3,\r\n Agent = 4,\r\n Other = 5,\r\n}\r\n","export const enum IntroducerTypeEnum {\r\n Accountant = 1,\r\n Architect = 2,\r\n Broker = 3,\r\n Builder = 4,\r\n Developer = 5,\r\n EstateOrLandAgent = 6,\r\n IFA = 7,\r\n ProjectManager = 8,\r\n PropertyManager = 9,\r\n QuantitySurveyor = 10,\r\n Solicitor = 11,\r\n Trustee = 12,\r\n Other = 13,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { OrganisationLinkDTO } from \"@js/DTO/OrgnisationLinkDTO.cs.d\";\r\nimport { ApplicantRoleEnum } from \"@js/models/enum/ApplicantRoleEnum.cs.d\";\r\nimport { IntroducerTypeEnum } from \"@js/models/enum/IntroducerTypeEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { ClientService } from \"@js/services/ClientService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\nexport class InitialRegistrationController {\r\n selectedType: number;\r\n\r\n RoleEnum = {\r\n All: 0,\r\n DevelopmentFinance: 1,\r\n BridgingFinance: 2,\r\n Clients: 3,\r\n };\r\n\r\n user: ApplicationUserDTO;\r\n client: ClientDTO;\r\n isBroker: boolean = false;\r\n projectName: string;\r\n\r\n error: string = \"\";\r\n registrationForm: ng.IFormController;\r\n isBorrower: boolean = false;\r\n panelHeaderText: string;\r\n dataLoading: boolean = false;\r\n totalLenders: number = 0;\r\n orgLogo: string = \"\";\r\n testimonialText: string = \"\";\r\n testimonalCustomer: string = \"\";\r\n showTsAndCs: boolean = false;\r\n acceptTerms: boolean = false;\r\n acceptDataTerms: boolean = false;\r\n showPrivacyPolicy: boolean = false;\r\n orgCode: string;\r\n headingAdjustment: string;\r\n organisation: OrganisationDTO;\r\n userRole: UserRoleEnum;\r\n organisationLink: OrganisationLinkDTO;\r\n clientId: string;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$location\",\r\n \"UserService\",\r\n \"OrganisationService\",\r\n \"$rootScope\",\r\n \"LenderService\",\r\n \"$cookies\",\r\n \"EventLogService\",\r\n \"ClientService\",\r\n \"OrganisationLinkService\",\r\n ];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private userService: UserService,\r\n private organisationService: OrganisationService,\r\n public $rootScope: ng.IRootScopeService,\r\n private lenderService: LenderService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private eventLogService: EventLogService,\r\n private clientService: ClientService,\r\n private organisationLinkService: OrganisationLinkService,\r\n ) {\r\n this.setBrokerOrBorrower()\r\n .then(() => {\r\n if (this.$routeParams.isBroker == \"broker\") {\r\n this.isBroker = true;\r\n sessionStorage.setItem(\"userRole\", UserRoleEnum.Broker.toString());\r\n //TODO Change for New pricing\r\n window.location.assign(\"https://brickflow.com/pricing\");\r\n } else if (this.$routeParams.isBroker == \"borrower\") {\r\n this.$location.path(\"/borrowerinitialregistration\");\r\n } else if (\r\n this.$location.path().startsWith(\"/borrowerinitialregistration\")\r\n ) {\r\n if (this.$routeParams[\"Type\"] == \"bridging\") {\r\n this.$location.path(\"/e/bridgingcriteria\");\r\n } else {\r\n this.$location.path(\"/e/devfinancecriteria\");\r\n }\r\n } else {\r\n //TODO Change for New pricing\r\n window.location.assign(\"https://brickflow.com/pricing\");\r\n }\r\n\r\n this.getNumberOfLenders();\r\n\r\n //var orgCode;\r\n\r\n if (window.self == window.top) {\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n }\r\n\r\n if (this.orgCode) {\r\n this.initialRegisterEventLog(this.orgCode);\r\n\r\n this.organisationService\r\n .getOrganisationByOrgCode(this.orgCode)\r\n .then((organisation: OrganisationDTO) => {\r\n this.organisation = organisation;\r\n if (this.organisation && organisation.LogoURL) {\r\n this.orgLogo = organisation.LogoURL;\r\n }\r\n });\r\n } else {\r\n this.organisationService\r\n .getBrickflowBrokerOrg()\r\n .then((organisation: OrganisationDTO) => {\r\n this.organisation = organisation;\r\n });\r\n this.initialRegisterEventLog(\"\");\r\n }\r\n\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"userDetails\")) {\r\n let data = sessionStorage.getItem(\"userDetails\");\r\n this.user = JSON.parse(data);\r\n }\r\n }\r\n\r\n var applicationName = this.getApplicationName();\r\n\r\n if (this.isBroker == true) {\r\n this.panelHeaderText =\r\n \"Welcome to \" + applicationName + \" for Brokers\";\r\n if (!this.user) {\r\n this.user = {\r\n Roles: [\"Broker\", \"Introducer\"],\r\n IsOrganisationAdmin: true,\r\n ApplicantDefinedRole: ApplicantRoleEnum.Introducer,\r\n ApplicantDefinedRoleIntroducer: IntroducerTypeEnum.Broker,\r\n } as ApplicationUserDTO;\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(\"Failed to get initialize data: \", error);\r\n });\r\n }\r\n\r\n async getUserRole(): Promise {\r\n if (window.self == window.top) {\r\n this.userRole = parseInt(sessionStorage.getItem(\"userRole\")) as UserRoleEnum;\r\n } else {\r\n this.organisationService.getData(\"userRole\").then((result) => {\r\n this.userRole = parseInt(result) as UserRoleEnum;\r\n });\r\n }\r\n }\r\n\r\n async setBrokerOrBorrower() {\r\n await this.getUserRole();\r\n this.isBroker = this.userRole === UserRoleEnum.Broker;\r\n this.isBorrower = this.userRole === UserRoleEnum.Client;\r\n }\r\n\r\n async initialRegisterEventLog(orgCode, organisationLinkId = null) {\r\n if (window.self == window.top) {\r\n if (sessionStorage.getItem(\"clientId\")) {\r\n this.eventLogService.logPageLoad(\r\n \"INITIALREGISTER\",\r\n orgCode,\r\n \"\",\r\n sessionStorage.getItem(\"userRole\"),\r\n organisationLinkId,\r\n this.$routeParams[\"Type\"] == \"bridging\"\r\n ? ProductTypeEnum.Bridging\r\n : ProductTypeEnum.Development,\r\n undefined,\r\n undefined,\r\n sessionStorage.getItem(\"clientId\"),\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"INITIALREGISTER\",\r\n orgCode,\r\n \"\",\r\n sessionStorage.getItem(\"userRole\"),\r\n organisationLinkId,\r\n this.$routeParams[\"Type\"] == \"bridging\"\r\n ? ProductTypeEnum.Bridging\r\n : ProductTypeEnum.Development,\r\n );\r\n }\r\n } else {\r\n var userRole;\r\n userRole = await this.organisationService.getData(\"userRole\");\r\n var clientId: string = null;\r\n clientId = await this.organisationService.getData(\"clientId\");\r\n if (clientId) {\r\n this.eventLogService.logPageLoad(\r\n \"INITIALREGISTER\",\r\n orgCode,\r\n \"\",\r\n sessionStorage.getItem(\"userRole\"),\r\n organisationLinkId,\r\n this.$routeParams[\"Type\"] == \"bridging\"\r\n ? ProductTypeEnum.Bridging\r\n : ProductTypeEnum.Development,\r\n undefined,\r\n undefined,\r\n clientId,\r\n );\r\n } else {\r\n this.eventLogService.logPageLoad(\r\n \"INITIALREGISTER\",\r\n orgCode,\r\n \"\",\r\n sessionStorage.getItem(\"userRole\"),\r\n organisationLinkId,\r\n this.$routeParams[\"Type\"] == \"bridging\"\r\n ? ProductTypeEnum.Bridging\r\n : ProductTypeEnum.Development,\r\n );\r\n }\r\n }\r\n }\r\n\r\n saveUserdetails() {\r\n this.dataLoading = true;\r\n let emailExists;\r\n\r\n this.userService\r\n .checkEmailExists(this.user.Email)\r\n .then((result) => {\r\n emailExists = result;\r\n return this.organisationService.getData(\"userRole\");\r\n })\r\n .then((role) => {\r\n if (window.self === window.top) {\r\n this.userRole = parseInt(sessionStorage.getItem(\"userRole\")) as UserRoleEnum;\r\n } else {\r\n this.userRole = parseInt(role) as UserRoleEnum;\r\n }\r\n return this.organisationService.getData(\"clientId\");\r\n })\r\n .then((id) => {\r\n if (window.self === window.top) {\r\n this.clientId = sessionStorage.getItem(\"clientId\");\r\n } else {\r\n this.clientId = id;\r\n }\r\n if (emailExists == false) {\r\n this.processUserDetails(this.userRole, this.clientId);\r\n } else {\r\n this.error = \"Email address is already in use, please sign in.\";\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(\"An error occurred in saveUserdetails:\", error);\r\n this.error =\r\n \"An error occurred while processing your request. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n processUserDetails(userRole, clientId) {\r\n this.error = \"\";\r\n if (this.isBroker) {\r\n this.user.Roles = [\"Broker\", \"Introducer\"];\r\n this.user.IsOrganisationAdmin = true;\r\n (this.user.ApplicantDefinedRole = ApplicantRoleEnum.Introducer),\r\n (this.user.ApplicantDefinedRoleIntroducer = IntroducerTypeEnum.Broker);\r\n } else {\r\n this.user.Roles = [\"Client\"];\r\n }\r\n if (window.self == window.top) {\r\n sessionStorage.setItem(\"userDetails\", JSON.stringify(this.user));\r\n sessionStorage.setItem(\"projectname\", this.projectName);\r\n this.userService.sendEventToHubspot(\r\n this.user,\r\n \"PREREGISTER\",\r\n false,\r\n this.orgCode,\r\n parseInt(sessionStorage.getItem(\"userRole\")) as UserRoleEnum,\r\n this.organisationLink && this.organisationLink.IsEnabled\r\n ? this.organisationLink.Id\r\n : 0,\r\n this.$routeParams[\"Type\"] == \"bridging\"\r\n ? ProductTypeEnum.Bridging\r\n : ProductTypeEnum.Development,\r\n undefined,\r\n undefined,\r\n this.clientId,\r\n );\r\n } else {\r\n this.organisationService.sendDataToParent(\r\n \"userDetails\",\r\n JSON.stringify(this.user),\r\n );\r\n this.organisationService.sendDataToParent(\r\n \"projectname\",\r\n this.projectName,\r\n );\r\n this.userService.sendEventToHubspot(\r\n this.user,\r\n \"PREREGISTER\",\r\n false,\r\n this.orgCode,\r\n this.userRole,\r\n this.organisationLink && this.organisationLink.IsEnabled\r\n ? this.organisationLink.Id\r\n : 0,\r\n this.$routeParams[\"Type\"] == \"bridging\"\r\n ? ProductTypeEnum.Bridging\r\n : ProductTypeEnum.Development,\r\n undefined,\r\n undefined,\r\n this.clientId,\r\n );\r\n }\r\n\r\n if (this.isBroker) {\r\n this.organisationService\r\n .brokerSignUpJourneyG0Email(this.user.Email, this.user.FullName)\r\n .then((response) => {});\r\n }\r\n\r\n if (this.isBroker) {\r\n this.$location.path(\"/promo/true\");\r\n } else {\r\n (this.$rootScope as any).loanCriteria = null;\r\n if (this.selectedType == 1) {\r\n this.$location.path(\"/devfinancecriteria\");\r\n } else if (this.selectedType == 0) {\r\n this.saveUserDataToClientTable().then(() => {\r\n this.$location.path(\"/newsearchselection/all\");\r\n });\r\n } else if (this.selectedType == 2) {\r\n this.saveUserDataToClientTable().then(() => {\r\n this.$location.path(\"/bridgingcriteria\");\r\n });\r\n }\r\n }\r\n }\r\n\r\n back() {\r\n this.$location.path(\"/landingV3\");\r\n }\r\n\r\n isiframe() {\r\n if (window.self == window.top) return false;\r\n return true;\r\n }\r\n\r\n getApplicationName() {\r\n if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"applicationName\") != null\r\n ) {\r\n return sessionStorage.getItem(\"applicationName\");\r\n } else {\r\n return \"Brickflow\";\r\n }\r\n }\r\n\r\n getNumberOfLenders() {\r\n var productType = ProductFamilyEnum.None;\r\n\r\n if (this.selectedType == this.RoleEnum.BridgingFinance) {\r\n productType = ProductFamilyEnum.Bridging;\r\n } else if (this.selectedType == this.RoleEnum.DevelopmentFinance) {\r\n productType = ProductFamilyEnum.Development;\r\n }\r\n\r\n if (productType == ProductFamilyEnum.None) {\r\n this.lenderService\r\n .getTotalLenders(ProductFamilyEnum.None)\r\n .then((response: number) => {\r\n this.totalLenders = Math.floor(response);\r\n });\r\n } else {\r\n this.lenderService\r\n .getTotalLenders(productType)\r\n .then((response: number) => {\r\n this.totalLenders = Math.floor(response);\r\n });\r\n }\r\n }\r\n\r\n genUUID() {\r\n let S4 = () =>\r\n Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n let guid = `${S4()}${S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;\r\n return guid.toLowerCase();\r\n }\r\n\r\n saveUserDataToClientTable() {\r\n return new Promise(async (resolve, reject) => {\r\n let userFullName = this.user.FullName;\r\n let spaceIndex = userFullName.indexOf(\" \");\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(\" \"));\r\n lastName = userFullName.substring(userFullName.indexOf(\" \") + 1);\r\n }\r\n\r\n var clientDto = {\r\n FirstName: firstName,\r\n LastName: lastName,\r\n PhoneNumber: this.user.PhoneNumber,\r\n Email: this.user.Email,\r\n BrokerOrganisationId: this.organisation.Id,\r\n PostalAddress: {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress,\r\n } as ClientDTO;\r\n\r\n //if (localStorage.getItem('clientId')) {\r\n // clientDto.Id = Number(localStorage.getItem('clientId'));\r\n //}\r\n\r\n try {\r\n this.clientService.addUpdatereturnonlyid(clientDto).then((response) => {\r\n if (window.self == window.top) {\r\n sessionStorage.setItem(\"clientId\", response.toString());\r\n } else {\r\n this.organisationService.sendDataToParent(\r\n \"clientId\",\r\n response.toString(),\r\n );\r\n }\r\n });\r\n resolve();\r\n } catch (error) {\r\n console.error(\"An error occurred:\", error);\r\n Promise.reject(error);\r\n }\r\n });\r\n }\r\n\r\n gotoSignInPage() {\r\n this.$location.path(\"/login\");\r\n }\r\n}\r\n","import { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class IntroducerController {\r\n firstTime: boolean = false;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"DevelopmentInputService\",\r\n \"UserService\",\r\n \"CaseService\",\r\n \"RoleService\",\r\n \"AuthService\",\r\n ];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private $user: UserService,\r\n private $CaseService: CaseService,\r\n private roleService: RoleService,\r\n private authService: AuthService,\r\n ) {\r\n if (this.$routeParams.status === \"new\") {\r\n this.firstTime = true;\r\n }\r\n }\r\n\r\n continueToLogin() {\r\n (this.$rootScope as any) = null;\r\n this.go(\"/login\");\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n}\r\n","import { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\n\r\nexport class LandingController {\r\n caseId: number;\r\n case: CaseDTO;\r\n disablepayment: boolean = false;\r\n message: string = \"\";\r\n modal: boolean = false;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$scope\",\r\n \"$location\",\r\n \"PaymentService\",\r\n \"CaseService\",\r\n \"$cookies\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n private $location: ng.ILocationService,\r\n private $paymentService: PaymentService,\r\n private caseService: CaseService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private roleService: RoleService,\r\n ) {\r\n //Check if the user is logged in\r\n if (\r\n this.$cookies.get(\"access_token\") != null ||\r\n this.$cookies.get(\"access_token\") != undefined\r\n ) {\r\n if (this.roleService.isAdminUser) {\r\n this.$location.path(\"/dashboard\");\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n }\r\n }\r\n\r\n goToLoginPage() {\r\n this.$location.path(\"/login\");\r\n }\r\n\r\n goToWelcomePage() {\r\n this.$location.path(\"/landingV3\");\r\n }\r\n\r\n goToAgentLandingPage() {\r\n this.$location.path(\"/agentlanding\");\r\n }\r\n}\r\n","import { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\nexport class LandingV3Controller {\r\n applicationName: string = \"Brickflow\";\r\n isWhiteLabelled: boolean = false;\r\n\r\n static $inject = [\"$location\", \"$cookies\", \"$routeParams\"];\r\n\r\n constructor(\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n ) {\r\n // Clear out any pre-existing data\r\n //localStorage.removeItem('userRole'); //JS userRole will be set on navigation by no removing we fix BF-1866\r\n sessionStorage.removeItem(\"userDetails\");\r\n sessionStorage.removeItem(\"projectname\");\r\n sessionStorage.removeItem(\"selectedPackage\");\r\n sessionStorage.removeItem(\"addAddon\");\r\n sessionStorage.removeItem(\"productType\");\r\n sessionStorage.removeItem(\"clientId\");\r\n\r\n // Show a header if it is hidden\r\n document.getElementById(\"header\").style.display = \"flex\";\r\n //Show 'Sign/Register' button if it is hidden.\r\n document.getElementById(\"signIn\").style.display = \"flex\";\r\n\r\n if (this.$routeParams.introducercode) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams.introducercode, {\r\n expires: expiryDate,\r\n });\r\n }\r\n }\r\n\r\n proceedAsDeveloper() {\r\n sessionStorage.setItem(\"userRole\", UserRoleEnum.Client.toString());\r\n\r\n this.nextStep();\r\n\r\n this.$location.path(\"/allloans\");\r\n }\r\n\r\n proceedAsBroker() {\r\n //TODO Change for New pricing\r\n window.location.assign(\"https://brickflow.com/pricing\");\r\n /*sessionStorage.setItem('userRole', 'broker');\r\n\r\n this.nextStep();\r\n \r\n this.$location.path('/initialregister');*/\r\n }\r\n\r\n nextStep() {\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.$location.path(\"/promo\");\r\n }\r\n //else {\r\n // this.$location.path('/initialregister');\r\n //}\r\n }\r\n\r\n getApplicationName() {\r\n if (sessionStorage.getItem(\"applicationName\") != null) {\r\n return sessionStorage.getItem(\"applicationName\");\r\n } else {\r\n return \"Brickflow\";\r\n }\r\n }\r\n\r\n getLogo() {\r\n if (sessionStorage.getItem('companyLogoUrl') != null) {\r\n this.isWhiteLabelled = true;\r\n return sessionStorage.getItem('companyLogoUrl');\r\n } else {\r\n this.isWhiteLabelled = false;\r\n return '../../img/BrickFlow_Logo_RGB_Blue_Icon.svg';\r\n }\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\n\r\nexport class LeadGenPromoController {\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"AuthService\",\r\n ];\r\n\r\n licenseCount: number = 0;\r\n showAddLaterButton: boolean = true;\r\n currentUser: ApplicationUserDTO;\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private authService: AuthService,\r\n ) {\r\n if (this.$routeParams.licensecount) {\r\n this.licenseCount = this.$routeParams.licensecount;\r\n }\r\n\r\n this.authService.getUpdatedProfile().then((prof) => {\r\n this.currentUser = prof;\r\n });\r\n }\r\n\r\n addLaterClicked() {\r\n if (\r\n this.licenseCount > 1 &&\r\n (this.currentUser.SubscriptionStatus == LicenseMasterStatusEnum.PaidUp ||\r\n this.currentUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PaymentProcessing)\r\n ) {\r\n this.$location.path(\"/assignlicenses\");\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n }\r\n\r\n bookCall() {\r\n window.open(\r\n \"https://brickflow.com/brokers/brickflow-enterprise/book-a-demo\",\r\n );\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { LenderDTO } from \"@js/DTO/LenderDTO.cs.d\";\r\nimport { ImportProductResponse } from \"@js/DTO/Messages/ImportProductMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { ProductDTO } from \"@js/DTO/ProductDTO.cs.d\";\r\nimport { LenderProductTypeEnum } from \"@js/models/enum/LenderProductTypeEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class LenderController {\r\n canSeeMultipleLenders: boolean = false;\r\n selectedSection: string;\r\n\r\n objects: LenderDTO[];\r\n selectedObject: LenderDTO;\r\n tempSelectedObject: LenderDTO;\r\n userSearchResults: ApplicationUserDTO[];\r\n //user: ApplicationUserDTO;\r\n userName: string;\r\n userSelected: string;\r\n fetchingResults: boolean;\r\n showFilter: boolean;\r\n editLogo: boolean = false;\r\n\r\n selectedObjectProduct: ProductDTO;\r\n\r\n logoURL: string = \"\";\r\n\r\n // Upload Logos\r\n\r\n fileUpload: FileAttachmentDTO[];\r\n fileUploadPlaning: FileAttachmentDTO[];\r\n fileUploadTeam: FileAttachmentDTO[];\r\n fileUploadProperties: FileAttachmentDTO[];\r\n uploadingFiles: FileUploadProgressDTO[];\r\n renamingFile: FileAttachmentDTO;\r\n\r\n newLenderPopup: boolean = false;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n lenderForm: ng.IFormController;\r\n\r\n file: Blob;\r\n\r\n step: number;\r\n\r\n editLenderName: boolean = false;\r\n updateRating: boolean = false;\r\n updatePreferredBrokers: boolean = false;\r\n\r\n timestamp: Date;\r\n\r\n multiPartForm1: ng.IFormController;\r\n multiPartForm2: ng.IFormController;\r\n multiPartForm3: ng.IFormController;\r\n multiPartForm4: ng.IFormController;\r\n multiPartForm5: ng.IFormController;\r\n multiPartForm6: ng.IFormController;\r\n multiPartForm7: ng.IFormController;\r\n\r\n totalRate: number;\r\n\r\n //array describing form sections\r\n formSectionNames = [\r\n {\r\n label: \"Lender Details\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Overview\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Location\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Development Specs\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Industry\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Liabilities\",\r\n visible: true,\r\n },\r\n {\r\n label: \"Fees\",\r\n visible: true,\r\n },\r\n ];\r\n\r\n showLenderUpload: boolean = false;\r\n addLenders: boolean = true;\r\n updateLenders: boolean = true;\r\n disableProducts: boolean = false;\r\n dataLoading: boolean = false;\r\n importFile: any = false;\r\n\r\n assignedLenderUsers: ApplicationUserDTO[];\r\n selectLenderUserId: string = null;\r\n selectedLenderUser: ApplicationUserDTO;\r\n showEditLenderUserModal: boolean = false;\r\n isEditLenderUser: boolean = false;\r\n lenderUserProductType: {}[] = [];\r\n isSavingLenderUser: boolean = false;\r\n\r\n confirmChangingLenderAdmin: boolean = false;\r\n confirmLenderAdminDeletion: boolean = false;\r\n displayMessage: string;\r\n deleteLenderUserClicked: boolean = false;\r\n lendersavemessage: string;\r\n error: string = \"\";\r\n filterType: string = \"\";\r\n\r\n showSimulatedResults = false;\r\n simulatedResponse: ImportProductResponse;\r\n productTypeOptions = [];\r\n productFamilyOptions = [];\r\n filteredProductTypeOptions = [];\r\n refurbLevelOptions = [];\r\n EPCRatingOptions = [];\r\n acceptableEWS1GradeTypeOptions = [];\r\n locationOptions = [];\r\n tradingEntityOptions = [];\r\n valuationMethodOptions = [];\r\n\r\n duplicateProductModal: boolean = false;\r\n productForDuplication: ProductDTO;\r\n duplicateProductIndex: number;\r\n productRef: string = \"\";\r\n\r\n organisations: OrganisationDTO[] = [];\r\n nonConnectOrganisations: OrganisationDTO[] = [];\r\n selectedBrokers: OrganisationDTO[] = [];\r\n isValidSelection: boolean;\r\n preferredPackagersText: string;\r\n modalTextChanged: boolean = false;\r\n\r\n portalLinkSettingChanged: boolean = false;\r\n currentPortalLinkSetting: boolean = false;\r\n\r\n showEditProductNotesAndSnapshot: boolean = false;\r\n editedLenderProductFamily: ProductFamilyEnum = null;\r\n\r\n minLastVerifiedDate: Date = new Date(\"Jan 01 1900\");\r\n maxLastVerifiedDate: Date = null;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n \"LenderService\",\r\n \"ProductService\",\r\n \"Upload\",\r\n \"$location\",\r\n \"RoleService\",\r\n \"UserService\",\r\n \"FileAttachmentService\",\r\n \"SelectListService\",\r\n \"OrganisationService\",\r\n \"$sce\",\r\n ];\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $lenderservice: LenderService,\r\n private $productservice: ProductService,\r\n private $uploadservice: any,\r\n private $location: ng.ILocationService,\r\n private $roleservice: RoleService,\r\n private $user: UserService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private selectListService: SelectListService,\r\n private organisationService: OrganisationService,\r\n private $sce: ng.ISCEService,\r\n ) {\r\n if (this.$roleservice.isBrokerOrABove()) {\r\n this.canSeeMultipleLenders = true;\r\n }\r\n\r\n this.organisationService.fetchAll().then((response) => {\r\n this.organisations = response;\r\n this.organisations.sort(function (a, b) {\r\n var textA = a.Name.toUpperCase();\r\n var textB = b.Name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n });\r\n this.nonConnectOrganisations = this.organisations.filter(o => !o.IsConnectMember)\r\n });\r\n\r\n this.updateObjects();\r\n //init\r\n this.step = 1;\r\n this.updatetimestamp();\r\n this.fetchAllUsers();\r\n this.userName = \"\";\r\n this.showFilter = false;\r\n\r\n this.productTypeOptions = this.selectListService.GetProductTypeOptions();\r\n this.productFamilyOptions =\r\n this.selectListService.GetProductFamilyOptions();\r\n this.refurbLevelOptions =\r\n this.selectListService.GetRefurbishmentLevelOptions(true);\r\n this.EPCRatingOptions = this.selectListService.GetEPCRating();\r\n this.acceptableEWS1GradeTypeOptions =\r\n this.selectListService.GetEWS1GradeType();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.tradingEntityOptions =\r\n this.selectListService.GetBorrowingEntityTypeOptions();\r\n\r\n this.valuationMethodOptions = this.selectListService.GetValuationMethodOptions();\r\n }\r\n\r\n onFileSelect(files) {\r\n if (files.length > 0) {\r\n this.fileAttachmentService\r\n .uploadFileAndReturnURI(files)\r\n .then((result) => {\r\n this.selectedObject.LogoURL = result.FileLocation;\r\n // this.$lenderservice.addUpdate(this.selectedObject);\r\n this.getLogoURL(this.selectedObject.LogoURL);\r\n this.editLogo = true;\r\n });\r\n }\r\n }\r\n\r\n getLogoURL(url: string) {\r\n this.fileAttachmentService.getFileUri(url).then((result) => {\r\n this.logoURL = result;\r\n });\r\n }\r\n\r\n fetchAllUsers() {\r\n this.fetchingObject = true;\r\n this.$user\r\n .getLenderUsersUnassigned(\"\")\r\n .then((response) => {\r\n this.userSearchResults = response;\r\n })\r\n .finally(() => {\r\n this.fetchingObject = false;\r\n });\r\n }\r\n\r\n fetchAssignedLenderUsers() {\r\n this.fetchingObject = true;\r\n this.$user\r\n .getUsersByLenderId(this.selectedObject.Id)\r\n .then((response) => {\r\n this.assignedLenderUsers = response;\r\n })\r\n .finally(() => {\r\n this.fetchingObject = false;\r\n });\r\n }\r\n\r\n changeUser() {\r\n this.showFilter = !this.showFilter;\r\n }\r\n\r\n userLookupById(userId: string): string {\r\n const found = this.userSearchResults.find((user) => user.Id === userId);\r\n\r\n if (found) {\r\n return (this.userName = found.UserName);\r\n } else {\r\n return (this.userName = \"\");\r\n }\r\n }\r\n\r\n updatetimestamp(): void {\r\n this.timestamp = new Date();\r\n }\r\n back(): void {\r\n if (this.step > 0) {\r\n this.step--;\r\n }\r\n }\r\n\r\n next(): void {\r\n if (this.step < 7) {\r\n this.step++;\r\n }\r\n }\r\n cancel(): void {\r\n this.$location.path(\"/lenders/\");\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n updateIsEnabled(product: ProductDTO, isEnabled) {\r\n product.IsEnabled = isEnabled;\r\n this.$productservice.addUpdatereturnonlyid(product).then((result) => { });\r\n }\r\n\r\n selectObject(object: LenderDTO) {\r\n this.selectedBrokers = [];\r\n this.selectedObject = object;\r\n this.fetchAssignedLenderUsers();\r\n this.selectedSection = \"details\";\r\n this.editLenderName = false;\r\n this.userSelected = \"\";\r\n this.userLookupById(object.UserId);\r\n this.preferredPackagersText = this.selectedObject.PreferredPackagersText;\r\n\r\n if (this.selectedObject.LogoURL) {\r\n this.getLogoURL(this.selectedObject.LogoURL);\r\n } else {\r\n this.logoURL = \"\";\r\n }\r\n\r\n this.currentPortalLinkSetting = this.selectedObject.UsePortalUrl;\r\n\r\n this.getPreferredOrgs();\r\n }\r\n\r\n createObject() {\r\n //Add new lender\r\n this.selectedObject = {\r\n Products: [] as ProductDTO[],\r\n HasLiveMarketSearch: true,\r\n HasDevelopmentFinanceSearch: true,\r\n HasBridgingSearch: true,\r\n HasCommercialSearch: true,\r\n IsLenderReferralActive: true,\r\n } as LenderDTO;\r\n this.editLenderName = true;\r\n this.currentPortalLinkSetting = false;\r\n }\r\n\r\n userLookup(userSearchTerm: string) {\r\n if (userSearchTerm === \"\") {\r\n this.fetchAllUsers();\r\n } else {\r\n this.fetchingResults = true;\r\n this.$user\r\n .getLenderUsersUnassigned(userSearchTerm)\r\n .then((response) => {\r\n this.userSearchResults = response;\r\n })\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n }\r\n\r\n updateLenderUser(id: string) {\r\n this.selectedObject.UserId = id;\r\n this.$lenderservice\r\n .addUpdate(this.selectedObject)\r\n .then((response) => { })\r\n .finally(() => {\r\n this.showFilter = false;\r\n delete this.userSelected;\r\n });\r\n }\r\n\r\n editLender(SelectedLender: LenderDTO) {\r\n this.editLenderName = true;\r\n this.editLogo = false;\r\n this.tempSelectedObject = { ...SelectedLender };\r\n }\r\n\r\n cancelLenderUpdate(SelectedLender: LenderDTO) {\r\n this.selectedObject = this.tempSelectedObject;\r\n this.getPreferredOrgs();\r\n this.getLogoURL(this.selectedObject.LogoURL);\r\n this.preferredPackagersText = this.selectedObject.PreferredPackagersText;\r\n this.editLenderName = false;\r\n this.error = \"\";\r\n }\r\n\r\n saveLender(newLender: boolean = false) {\r\n if (\r\n this.selectedObject.UsePortalUrl &&\r\n (this.selectedObject.PortalUrl == null ||\r\n this.selectedObject.PortalUrl.length == 0)\r\n ) {\r\n this.editLenderName = true;\r\n this.error = \"If portal link is enabled, please include a portal link.\";\r\n return;\r\n }\r\n\r\n if (this.portalLinkSettingChanged) {\r\n if (!this.currentPortalLinkSetting && this.selectedObject.UsePortalUrl) {\r\n this.selectedObject.PortalUrlActiveDateTime = new Date();\r\n }\r\n if (this.currentPortalLinkSetting && !this.selectedObject.UsePortalUrl) {\r\n this.selectedObject.PortalUrlActiveDateTime = null;\r\n }\r\n }\r\n const existingSelection =\r\n this.selectedObject && this.selectedObject.Id ? true : false;\r\n const duplicateLender = this.objects.find(\r\n (x) => x.Name == this.selectedObject.Name,\r\n );\r\n if (\r\n (!duplicateLender || newLender == false) &&\r\n this.fetchingObjects == false\r\n ) {\r\n this.fetchingObjects = true;\r\n this.selectedObject.PreferredPackagersText = this.preferredPackagersText;\r\n this.$lenderservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((id) => {\r\n this.selectedObject.Id = id;\r\n //this.selectedObject.UserId = this.user.Id;\r\n if (!existingSelection) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n const orgIds = this.selectedBrokers.map((broker) => broker.Id);\r\n\r\n this.currentPortalLinkSetting = this.selectedObject.UsePortalUrl;\r\n\r\n return this.$lenderservice.updatePreferredOrgs(\r\n this.selectedObject.Id,\r\n orgIds,\r\n );\r\n })\r\n .finally(() => {\r\n this.editLenderName = false;\r\n this.fetchingObjects = false;\r\n this.updateRating = false;\r\n this.updatePreferredBrokers = false;\r\n this.error = \"\";\r\n this.editedLenderProductFamily = null;\r\n this.showEditProductNotesAndSnapshot = false;\r\n this.lenderForm.$setPristine();\r\n });\r\n } else {\r\n this.editLenderName = false;\r\n this.error = \"\";\r\n this.selectedObject = duplicateLender;\r\n }\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$lenderservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n if (this.filterType != \"\") {\r\n //TODO: need to fix this to use product type instead\r\n this.objects = this.objects.filter((lender) => {\r\n return lender.Products.some((product) => {\r\n return product.LI_LoanFamily == Number(this.filterType);\r\n });\r\n });\r\n }\r\n\r\n if (!this.canSeeMultipleLenders && this.objects.length > 0) {\r\n //need to select first item as no ability to select\r\n this.selectObject(this.objects[0]);\r\n }\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n this.editLenderName = false;\r\n });\r\n }\r\n\r\n delete() {\r\n if (this.fetchingObjects !== true) {\r\n this.fetchingObjects = true;\r\n this.$lenderservice\r\n .markasdeleted(this.selectedObject.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.lenderForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n }\r\n\r\n uploadProductFile(file, isSimulated) {\r\n this.dataLoading = true;\r\n let url =\r\n \"/api/lender/importproducts?addLender=\" +\r\n this.addLenders +\r\n \"&updateLender=\" +\r\n this.updateLenders +\r\n \"&disableProducts=\" +\r\n this.disableProducts +\r\n \"&isSimulated=\" +\r\n isSimulated;\r\n this.$uploadservice\r\n .upload({\r\n url: url,\r\n data: { file: file },\r\n })\r\n .then(\r\n (response) => {\r\n if (isSimulated) {\r\n this.simulatedResponse = response.data;\r\n this.showSimulatedResults = true;\r\n } else {\r\n this.updateObjects();\r\n this.showLenderUpload = false;\r\n this.showSimulatedResults = false;\r\n }\r\n this.dataLoading = false;\r\n },\r\n (response) => {\r\n // console.log('Error status: ' + resp.status);\r\n },\r\n (event) => {\r\n // $scope.linkedInUploadProgress = 100.0 * parseFloat(evt.loaded) / parseFloat(evt.total);\r\n // console.log('progress: ' + $scope.linkedInUploadProgress + '% ' + evt.config.data.file.name);\r\n },\r\n );\r\n }\r\n\r\n formChanged(): void {\r\n (this.$rootScope as any).formSaved = false;\r\n }\r\n\r\n removeProduct(product: ProductDTO) {\r\n if (product.Id > 0) {\r\n this.$productservice.markasdeleted(product.Id).then((response) => {\r\n if (response) {\r\n this.selectedObject.Products.splice(\r\n this.selectedObject.Products.indexOf(product),\r\n 1,\r\n );\r\n this.selectObject(this.selectedObject);\r\n this.lenderForm.$setPristine();\r\n }\r\n });\r\n } else {\r\n //never saved so just remove\r\n this.selectedObject.Products.splice(\r\n this.selectedObject.Products.indexOf(product),\r\n 1,\r\n );\r\n this.selectedObjectProduct = null;\r\n this.selectObject(this.selectedObject);\r\n this.lenderForm.$setPristine();\r\n }\r\n }\r\n\r\n createProduct() {\r\n this.step = 1;\r\n this.selectedObjectProduct = {\r\n LenderId: this.selectedObject.Id,\r\n LI_LoanProduct: ProductTypeEnum.Development,\r\n } as ProductDTO;\r\n }\r\n\r\n selectProduct(productId: number) {\r\n this.step = 1;\r\n this.$productservice.fetch(productId).then((response) => {\r\n this.selectedObjectProduct = response;\r\n this.maxLastVerifiedDate = response.LastVerifiedDate;\r\n //this.totalRate = this.selectedObjectProduct.LI_Dev_TotRate * 100;\r\n // this.selectedLocations = this.selectedProduct.Location.split(\", \");\r\n });\r\n }\r\n\r\n saveProduct(product: ProductDTO) {\r\n this.$productservice\r\n .isProductRefUnique(product.ProductRef, product.Id)\r\n .then((result) => {\r\n if (!result) {\r\n this.error = \"Product Reference is not unique\";\r\n return;\r\n }\r\n this.fetchingObject = true;\r\n // product.Location = this.selectedLocations.join(\",\");\r\n if (this.selectedObject.Id) {\r\n // product.LI_Dev_TotRate = this.totalRate / 100;\r\n this.$productservice\r\n .addUpdatereturnonlyid(product)\r\n .then((response) => {\r\n product.Id = response;\r\n this.fetchingObject = false;\r\n\r\n // Find the product in the selectedObject.Products list\r\n let existingProductIndex = this.selectedObject.Products.findIndex(\r\n (p) => p.Id === product.Id,\r\n );\r\n\r\n if (existingProductIndex !== -1) {\r\n // Update the existing product if found\r\n this.selectedObject.Products[existingProductIndex] = product;\r\n } else {\r\n // Otherwise, add the new product to the list\r\n this.selectedObject.Products.push(product);\r\n }\r\n\r\n this.selectedObjectProduct = undefined;\r\n })\r\n .catch((response) => {\r\n this.fetchingObject = false;\r\n });\r\n if (!this.selectedObjectProduct.Id) {\r\n this.selectedObject.Products.push(this.selectedObjectProduct);\r\n }\r\n } else {\r\n this.fetchingObject = false;\r\n this.lenderForm.$setDirty();\r\n }\r\n });\r\n }\r\n\r\n duplicateProduct(\r\n product: ProductDTO,\r\n index: number,\r\n productRef: string = \"\",\r\n ) {\r\n let newProduct = {} as ProductDTO;\r\n (Object as any).assign(newProduct, product);\r\n\r\n delete newProduct.Id;\r\n delete newProduct.LastUpdatedDateTime;\r\n delete newProduct.CreatedDateTime;\r\n delete newProduct.IsEnabled;\r\n\r\n this.$productservice.isProductRefUnique(productRef).then((result) => {\r\n //If producRef is not unique (or error) then do not duplicate product\r\n if (!result) {\r\n this.error = \"Product Reference is not unique\";\r\n return;\r\n }\r\n\r\n newProduct.ProductRef = productRef;\r\n\r\n this.selectedObject.Products.splice(index, 0, newProduct);\r\n\r\n this.$productservice.addUpdatereturnonlyid(newProduct).then((result) => {\r\n this.selectedObject.Products[index].Id = result;\r\n });\r\n\r\n this.error = \"\";\r\n this.duplicateProductModal = false;\r\n });\r\n }\r\n\r\n sum(a: number, b: number): number {\r\n return a + b;\r\n }\r\n\r\n carriageReturnCheck(event) {\r\n if (event.key === 'Enter') {\r\n this.selectedObjectProduct.AdditionalProductInfo += '\\n';\r\n }\r\n }\r\n\r\n lenderKeyDown(event, field: string) {\r\n if (event.key === \"Enter\") {\r\n let position = event.target.selectionStart;\r\n if (this.selectedObject[field]) {\r\n this.selectedObject[field] = [this.selectedObject[field].slice(0, position), \"\\n\", this.selectedObject[field].slice(position)].join(\"\");\r\n\r\n setTimeout(() => {\r\n event.target.setSelectionRange(position + 1, position + 1);\r\n }, 0);\r\n } else {\r\n this.preferredPackagersText = \"\\n\";\r\n }\r\n }\r\n }\r\n\r\n updateCustomerServiceRating(star) {\r\n if (this.selectedObject.RatingCustomerService == 1 && star == 1) {\r\n this.selectedObject.RatingCustomerService = 0;\r\n this.updateRating = true;\r\n } else {\r\n this.selectedObject.RatingCustomerService = star;\r\n this.updateRating = true;\r\n }\r\n }\r\n\r\n updateSpeedRating(star) {\r\n if (this.selectedObject.RatingSpeed == 1 && star == 1) {\r\n this.selectedObject.RatingSpeed = 0;\r\n this.updateRating = true;\r\n } else {\r\n this.selectedObject.RatingSpeed = star;\r\n this.updateRating = true;\r\n }\r\n }\r\n\r\n updateFlexibilityRating(star) {\r\n if (this.selectedObject.RatingFlexibility == 1 && star == 1) {\r\n this.selectedObject.RatingFlexibility = 0;\r\n this.updateRating = true;\r\n } else {\r\n this.selectedObject.RatingFlexibility = star;\r\n this.updateRating = true;\r\n }\r\n }\r\n\r\n updateUserRating(star) {\r\n if (this.selectedObject.RatingUserRating == 1 && star == 1) {\r\n this.selectedObject.RatingUserRating = 0;\r\n this.updateRating = true;\r\n } else {\r\n this.selectedObject.RatingUserRating = star;\r\n this.updateRating = true;\r\n }\r\n }\r\n\r\n addClass(star: number, id: string) {\r\n let elementId = \"\";\r\n for (let i = 1; i <= star; i++) {\r\n elementId = id + i;\r\n document.getElementById(elementId).classList.add(\"selected\");\r\n }\r\n }\r\n\r\n removeClass(star: number, id: string, rating) {\r\n let elementId = \"\";\r\n if (rating == undefined) {\r\n rating = 0;\r\n }\r\n for (let i = star; i > rating; i--) {\r\n elementId = id + i;\r\n document.getElementById(elementId).classList.remove(\"selected\");\r\n }\r\n }\r\n\r\n removeLenderLogo() {\r\n this.selectedObject.LogoURL = null;\r\n this.logoURL = null;\r\n this.lenderForm.$setDirty();\r\n }\r\n\r\n //calculateTotalRate() {\r\n // this.totalRate = parseFloat(((this.selectedObjectProduct.LI_Margin * 100) + (this.selectedObjectProduct.LI_CoF * 100)).toFixed(2));\r\n //}\r\n\r\n totalRateValue() {\r\n return parseFloat(\r\n (\r\n this.selectedObjectProduct.LI_Margin * 100 +\r\n this.selectedObjectProduct.LI_CoF * 100\r\n ).toFixed(2),\r\n );\r\n }\r\n\r\n selectLenderUser(lenderUser: ApplicationUserDTO) {\r\n if (lenderUser) {\r\n this.selectedLenderUser = { ...lenderUser };\r\n this.initLenderUserProductType();\r\n\r\n this.isEditLenderUser = true;\r\n } else {\r\n this.selectedLenderUser = {} as ApplicationUserDTO;\r\n this.isEditLenderUser = false;\r\n }\r\n\r\n this.showEditLenderUserModal = true;\r\n }\r\n\r\n isLenderUserEmpty() {\r\n for (let key in this.selectedLenderUser) {\r\n if (this.selectedLenderUser.hasOwnProperty(key) && key !== \"$$hashKey\") {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n initLenderUserProductType() {\r\n if (!this.selectedLenderUser.LenderProductTypes) {\r\n this.selectedLenderUser.LenderProductTypes = 0;\r\n } else {\r\n for (let i = 1; i >= 0; i *= 2) {\r\n if (this.selectedLenderUser.LenderProductTypes >= i) {\r\n //number is in enum sum, add it to object\r\n if (this.selectedLenderUser.LenderProductTypes & i) {\r\n this.lenderUserProductType[i] = true;\r\n } else {\r\n this.lenderUserProductType[i] = false;\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateLenderUserProductTypes(item: LenderProductTypeEnum) {\r\n this.selectedLenderUser.LenderProductTypes =\r\n this.selectedLenderUser.LenderProductTypes > 0\r\n ? this.selectedLenderUser.LenderProductTypes\r\n : 0;\r\n\r\n if (item == LenderProductTypeEnum.All) {\r\n if (this.lenderUserProductType[item] == false) {\r\n this.selectedLenderUser.LenderProductTypes -= item;\r\n } else {\r\n this.lenderUserProductType.forEach((value, index) => {\r\n this.lenderUserProductType[index] = false;\r\n });\r\n\r\n this.selectedLenderUser.LenderProductTypes = 0;\r\n\r\n this.lenderUserProductType[item] = true;\r\n this.selectedLenderUser.LenderProductTypes += item;\r\n }\r\n } else {\r\n //if we are setting item to false and item exists, remove it, else add it\r\n if (this.lenderUserProductType[item] === true) {\r\n this.selectedLenderUser.LenderProductTypes += item;\r\n } else if (this.selectedLenderUser.LenderProductTypes > 0) {\r\n this.selectedLenderUser.LenderProductTypes -= item;\r\n }\r\n }\r\n }\r\n\r\n isLenderUserProductTypeEmpty() {\r\n if (this.lenderUserProductType.length === 0) return true;\r\n\r\n for (let i = 0; i < this.lenderUserProductType.length; i++) {\r\n let value = this.lenderUserProductType[i];\r\n if (value !== undefined && value !== null && value !== false) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n saveLenderUser() {\r\n var validUser = true;\r\n this.isSavingLenderUser = true;\r\n this.selectedLenderUser.LenderId = this.selectedObject.Id;\r\n\r\n if (!this.selectedLenderUser.IsLenderAdmin) {\r\n let lenderAdmin = this.assignedLenderUsers.find(\r\n (l) => l.IsLenderAdmin && l.Id != this.selectedLenderUser.Id,\r\n );\r\n if (!lenderAdmin) {\r\n this.lendersavemessage = `Please ensure this lender has at least one admin user.`;\r\n this.isSavingLenderUser = false;\r\n validUser = false;\r\n }\r\n }\r\n\r\n if (validUser) {\r\n this.$user\r\n .saveLenderUser(this.selectedLenderUser, !this.isEditLenderUser)\r\n .then((response) => {\r\n if (response) {\r\n this.isSavingLenderUser = false;\r\n this.isEditLenderUser = false;\r\n this.lenderUserProductType = [];\r\n this.showEditLenderUserModal = false;\r\n } else {\r\n if (this.isEditLenderUser) {\r\n this.lendersavemessage = `There is problem updating ${this.selectedLenderUser.FullName} details, Please try later.`;\r\n } else {\r\n this.lendersavemessage = `There is problem adding ${this.selectedLenderUser.FullName}, Please try later.`;\r\n }\r\n }\r\n this.fetchAssignedLenderUsers();\r\n });\r\n }\r\n }\r\n\r\n cancelEditLenderUserModal() {\r\n this.selectedLenderUser = undefined;\r\n this.lenderUserProductType = [];\r\n this.showEditLenderUserModal = false;\r\n this.error = \"\";\r\n }\r\n\r\n onClickOfMakeAdimn(lenderUser: ApplicationUserDTO) {\r\n this.selectedLenderUser = lenderUser;\r\n this.displayMessage = `Are you sure you wish to make ${lenderUser.FullName} admin for this lender?`;\r\n this.confirmChangingLenderAdmin = true;\r\n }\r\n\r\n setLenderAsAdmin() {\r\n this.selectedLenderUser.IsLenderAdmin = true;\r\n this.$user.setLenderAsAdmin(this.selectedLenderUser.Id).then((response) => {\r\n if (response) {\r\n this.confirmChangingLenderAdmin = false;\r\n } else {\r\n this.lendersavemessage = `There is problem converting ${this.selectedLenderUser.FullName} to admin, Please try later`;\r\n }\r\n this.fetchAssignedLenderUsers();\r\n });\r\n }\r\n\r\n onClickOfDeleteLenderUser(lenderUser: ApplicationUserDTO) {\r\n this.selectedLenderUser = lenderUser;\r\n let lenderAdmin = this.assignedLenderUsers.find(\r\n (l) => l.IsLenderAdmin && l.Id != lenderUser.Id,\r\n );\r\n if (this.selectedLenderUser.IsLenderAdmin && !lenderAdmin) {\r\n this.displayMessage = `Please assign a new Admin User before deleting ${lenderUser.FullName}.`;\r\n } else {\r\n this.displayMessage = `Are you sure you wish to remove ${lenderUser.FullName}?`;\r\n this.deleteLenderUserClicked = true;\r\n }\r\n this.confirmLenderAdminDeletion = true;\r\n }\r\n\r\n deleteLenderUser() {\r\n if (this.deleteLenderUserClicked) {\r\n this.$user.removeLenderUser(this.selectedLenderUser.Id).then((response) => {\r\n this.fetchAssignedLenderUsers();\r\n this.confirmLenderAdminDeletion = false;\r\n this.deleteLenderUserClicked = false;\r\n })\r\n } else {\r\n this.confirmLenderAdminDeletion = false;\r\n }\r\n }\r\n\r\n closeLenderUserDeleteModal() {\r\n this.confirmChangingLenderAdmin = false;\r\n this.confirmLenderAdminDeletion = false;\r\n this.deleteLenderUserClicked = false;\r\n this.lendersavemessage = \"\";\r\n }\r\n\r\n onIsLenderAdminChange() {\r\n if (!this.selectedLenderUser.IsLenderAdmin && this.isEditLenderUser) {\r\n let selectedUserFrom = this.assignedLenderUsers.find(\r\n (l) => l.Id == this.selectedLenderUser.Id,\r\n );\r\n let lenderAdmin = this.assignedLenderUsers.find(\r\n (l) => l.IsLenderAdmin && l.Id != this.selectedLenderUser.Id,\r\n );\r\n if (selectedUserFrom?.IsLenderAdmin && !lenderAdmin) {\r\n this.error = `Please assign a new Admin User.`;\r\n }\r\n } else if (this.selectedLenderUser.IsLenderAdmin) {\r\n this.error = \"\";\r\n }\r\n }\r\n\r\n lenderUserChanged() {\r\n this.initLenderUserProductType();\r\n }\r\n\r\n getProductName(key: number): string {\r\n let names: string[] = [];\r\n let totalKey = 0;\r\n\r\n for (let item of this.productTypeOptions) {\r\n if ((key & item.key) === item.key && item.key !== 0) {\r\n names.push(item.displayName);\r\n totalKey |= item.key;\r\n }\r\n }\r\n\r\n if (totalKey === ProductTypeEnum.Bridging) {\r\n return \"Bridging\";\r\n }\r\n\r\n return names.join(\", \");\r\n }\r\n\r\n onFamilyChange(): void {\r\n this.filteredProductTypeOptions = this.productTypeOptions.filter((item) => {\r\n return this.productTypeBelongToFamily(item);\r\n });\r\n\r\n switch (this.selectedObjectProduct.LI_LoanFamily) {\r\n case ProductFamilyEnum.Bridging:\r\n this.selectedObjectProduct.LI_LoanProduct &= ProductTypeEnum.Bridging;\r\n break;\r\n case ProductFamilyEnum.Development:\r\n this.selectedObjectProduct.LI_LoanProduct &=\r\n ProductTypeEnum.Development;\r\n break;\r\n case ProductFamilyEnum.Commercial:\r\n this.selectedObjectProduct.LI_LoanProduct &=\r\n ProductTypeEnum.CommercialAll;\r\n break;\r\n case ProductFamilyEnum.None:\r\n this.selectedObjectProduct.LI_LoanProduct &= ProductTypeEnum.None;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (\r\n this.selectedObjectProduct.LI_LoanProduct === 0 ||\r\n isNaN(this.selectedObjectProduct.LI_LoanProduct)\r\n ) {\r\n this.selectedObjectProduct.LI_LoanProduct = null;\r\n }\r\n }\r\n\r\n productTypeBelongToFamily(item): boolean {\r\n switch (this.selectedObjectProduct.LI_LoanFamily) {\r\n case ProductFamilyEnum.Bridging:\r\n return (item.key & ProductTypeEnum.Bridging) !== 0;\r\n case ProductFamilyEnum.Development:\r\n return item.key === ProductTypeEnum.Development;\r\n case ProductFamilyEnum.Commercial:\r\n return (item.key & ProductTypeEnum.CommercialAll) !== 0;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n productIsValid(): boolean {\r\n const forms = [\r\n this.multiPartForm1,\r\n this.multiPartForm2,\r\n this.multiPartForm3,\r\n this.multiPartForm4,\r\n this.multiPartForm5,\r\n this.multiPartForm6,\r\n this.multiPartForm7,\r\n ];\r\n\r\n var productError;\r\n\r\n if (\r\n this.selectedObjectProduct.LI_LoanFamily == ProductFamilyEnum.Commercial || (this.selectedObjectProduct.LI_LoanFamily && (this.selectedObjectProduct.LI_LoanProduct & ProductTypeEnum.BridgingPreconstruction || this.selectedObjectProduct.LI_LoanProduct & ProductTypeEnum.BridgingDeveloperExit || this.selectedObjectProduct.LI_LoanProduct & ProductTypeEnum.BridgingPurchaseOrRefinance))\r\n ) {\r\n this.error = null;\r\n return true;\r\n }\r\n\r\n if (\r\n (this.multiPartForm6 &&\r\n this.multiPartForm6.$dirty &&\r\n !this.selectedObjectProduct.LI_Dev_ArrFeeIncBrokFee) ||\r\n Number(this.selectedObjectProduct.LI_Dev_ArrFeeIncBrokFee) <= 0\r\n ) {\r\n productError = this.error =\r\n \"Arrangement Fee total % must be greater than 0\";\r\n } else {\r\n this.error = null;\r\n }\r\n\r\n return productError == null;\r\n }\r\n\r\n validateSelection() {\r\n this.isValidSelection = this.selectedBrokers.length <= 3;\r\n this.updatePreferredBrokers = true;\r\n }\r\n\r\n getSelectedBrokersString() {\r\n if (this.selectedBrokers == null || this.selectedBrokers.length == 0) {\r\n return \"\";\r\n }\r\n return this.selectedBrokers\r\n .map(function (item) {\r\n return item.Name;\r\n })\r\n .join(\", \");\r\n }\r\n\r\n getPreferredOrgs(): void {\r\n this.selectedBrokers = [];\r\n this.$lenderservice\r\n .getSelectedLenderPreferredOrgs(this.selectedObject.Id)\r\n .then((response) => {\r\n return response.map((x) => x.Id);\r\n })\r\n .then((ids) => {\r\n this.organisations.forEach((org: OrganisationDTO) => {\r\n (org as any).ticked = false;\r\n ids.forEach((id: number) => {\r\n if (org.Id == id) {\r\n this.selectedBrokers.push(org);\r\n (org as any).ticked = true;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n trustedHtml(plainText) {\r\n return this.$sce.trustAsHtml(plainText);\r\n }\r\n\r\n validatePortalLink() {\r\n if (this.selectedObject.PortalUrl) {\r\n let url = this.selectedObject.PortalUrl;\r\n if (!/^https?:\\/\\//i.test(url)) {\r\n url = 'http://' + url;\r\n }\r\n window.open(url, '_blank');\r\n }\r\n };\r\n\r\n /**\r\n * Display a modal to edit details that are specific at a product family level\r\n * @param productFamily\r\n */\r\n showEditLenderProductFamilyModal(productFamily: ProductFamilyEnum) {\r\n this.tempSelectedObject = { ...this.selectedObject };\r\n this.editedLenderProductFamily = productFamily;\r\n this.showEditProductNotesAndSnapshot = true;\r\n }\r\n\r\n /** Close the lender's product family edit modal and cancel/undo changes */\r\n cancelEditLenderProductFamilyModal() {\r\n this.selectedObject = this.tempSelectedObject;\r\n this.editedLenderProductFamily = null;\r\n this.showEditProductNotesAndSnapshot = false;\r\n this.error = \"\";\r\n }\r\n}\r\n\r\n","import { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { RegistrationRequestDTO } from \"@js/DTO/RegistrationRequestDTO.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { LenderResultService } from \"@js/services/LenderResultService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { ClientService } from \"@js/services/ClientService\"\r\nimport { DealClientService } from \"@js/services/DealClientService\"\r\n\r\n\r\nexport class LoginController {\r\n dataLoading: boolean = false;\r\n username: string;\r\n password: string;\r\n\r\n // For password reset;\r\n tempUsername: string;\r\n tempPassword: string;\r\n email: string;\r\n resetEmail: string;\r\n\r\n resetSubmitted: boolean;\r\n resettingPassword: boolean;\r\n\r\n registrationSubmitted: boolean;\r\n registeringAccount: boolean;\r\n registerAccountForm: FormData;\r\n passwordResetForm: boolean = true;\r\n loginform: FormData;\r\n error: string;\r\n newUser: RegistrationRequestDTO = {\r\n Email: \"\",\r\n FirstName: \"\",\r\n LastName: \"\",\r\n } as RegistrationRequestDTO;\r\n confirmEmailAddress: string;\r\n newPassword: string = null;\r\n verifyNewPassword: string = null;\r\n\r\n showPostRestPasswordScreen: boolean = false;\r\n\r\n loanCriteria: DevelopmentInputDTO;\r\n autoLogin: boolean = false;\r\n applicationName: string;\r\n\r\n orgUniqueRef: string;\r\n isBorrower: boolean = false;\r\n\r\n //Parameters passed from enterprise\r\n isEnterprise: boolean = false;\r\n productFamily: ProductFamilyEnum = null;\r\n dealUniqueRef: string = null;\r\n clientId: number = null;\r\n\r\n static $inject = [\r\n \"CaseService\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"$httpParamSerializerJQLike\",\r\n \"LenderResultService\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"UserService\",\r\n \"OrganisationService\",\r\n \"ClientService\",\r\n \"DealClientService\"\r\n ];\r\n\r\n static searchInProgress: boolean = false;\r\n\r\n constructor(\r\n private $CaseService: CaseService,\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $httpParamSerializerJQLike: ng.IHttpParamSerializer,\r\n private $lenderresultservice: LenderResultService,\r\n private $auth: AuthService,\r\n private $roleService: RoleService,\r\n private $user: UserService,\r\n private organisationService: OrganisationService,\r\n private clientService: ClientService,\r\n private dealClientService: DealClientService\r\n\r\n ) {\r\n\r\n if (this.$location.path().startsWith('/e/login')) {\r\n this.isEnterprise = true;\r\n this.productFamily = Number(this.$routeParams.productFamily);\r\n this.dealUniqueRef = this.$routeParams.dealUniqueRef;\r\n if(this.$routeParams.clientId) this.clientId = Number(this.$routeParams.clientId);\r\n if(this.$routeParams.emailAddress) this.username = this.$routeParams.emailAddress;\r\n\r\n }\r\n\r\n //if (localStorage.getItem('userRole')) {\r\n // this.isBorrower = localStorage.getItem('userRole') == 'borrower';\r\n //}\r\n\r\n // // Show a header if it is hidden\r\n document.getElementById(\"header\").style.display = \"flex\";\r\n // //Hiding 'Sign/Register' button.\r\n document.getElementById(\"signIn\").style.display = \"none\";\r\n\r\n // rootScope.title = \"Login\";\r\n if (this.$routeParams.tempUser && this.$routeParams.tempPassword) {\r\n this.tempUsername = this.$routeParams.tempUser;\r\n this.tempPassword = this.$routeParams.tempPassword;\r\n if (this.$routeParams.userStatus == \"new\") {\r\n this.autoLogin = true;\r\n //If this is a half registered user, log in using details in route params\r\n this.loginThenResetPassword(this.tempPassword);\r\n } else {\r\n //Get Application name depending on the user\r\n this.organisationService\r\n .getOrgApplicationNameByUserName(this.tempUsername)\r\n .then((applicationName: string) => {\r\n this.applicationName = applicationName;\r\n if (this.applicationName != \"Brickflow\") {\r\n sessionStorage.setItem(\"applicationName\", this.applicationName);\r\n\r\n if ((window as any).HubSpotConversations) {\r\n (window as any).HubSpotConversations.widget.remove();\r\n }\r\n }\r\n this.showPostRestPasswordScreen = true;\r\n });\r\n }\r\n } else if ($cookies.get(\"access_token\")) {\r\n this.$roleService.goHomeBasedOnUser();\r\n }\r\n\r\n // If we have an introducer code set, let's store a cookie.\r\n if (this.$routeParams.introducercode) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams.introducercode, {\r\n expires: expiryDate,\r\n });\r\n } else if (this.$routeParams[\"ic\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams[\"ic\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n if (this.$routeParams[\"orgc\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"org_code\", this.$routeParams[\"orgc\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n if (this.$routeParams[\"orgref\"]) {\r\n this.orgUniqueRef = this.$routeParams[\"orgref\"];\r\n sessionStorage.setItem(\"assignUserToOrg\", \"true\");\r\n }\r\n\r\n this.loanCriteria = (this.$rootScope as any).loanCriteria;\r\n }\r\n\r\n login() {\r\n (this.$rootScope as any).formSaved = true;\r\n this.loginThenResetPassword(null);\r\n }\r\n\r\n goToRegister() {\r\n if (\r\n (this.$rootScope as any).loginRedirectPath &&\r\n (this.$rootScope as any).loginRedirectPath.includes(\"/securitycheck\")\r\n ) {\r\n var url = (this.$rootScope as any).loginRedirectPath;\r\n var introducerCode = url.replace(\"/securitycheck/\", \"\");\r\n\r\n if (introducerCode) {\r\n this.$location.path(\"/registershareholder/\" + introducerCode);\r\n } else {\r\n this.$location.path(\"/landingV3\");\r\n }\r\n } else {\r\n this.username = null;\r\n this.password = null;\r\n this.$location.path(\"/landingV3\");\r\n }\r\n }\r\n\r\n //this handles a normal login and a login where the password needs restting at same time\r\n private loginThenResetPassword(newPassword: string) {\r\n this.dataLoading = true;\r\n this.$auth\r\n .login(\r\n newPassword ? this.tempUsername : this.username,\r\n newPassword ? this.tempPassword : this.password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n //if a new password change it ie on resetpassword\r\n if (newPassword) {\r\n this.$auth.changePassword(this.tempPassword, newPassword);\r\n }\r\n this.$auth\r\n .getProfile()\r\n .then((response) => {\r\n this.$cookies.put(\"user_firstname\", response.FirstName, {\r\n expires: expiry,\r\n });\r\n\r\n (this.$rootScope as any).selectedUser = response;\r\n\r\n this.$rootScope.$broadcast(\"login\"); //tell everyone you have logged in\r\n this.$roleService.GetUserRoles(true).then((result) => {\r\n if (this.isEnterprise) { \r\n if(this.$routeParams.emailAddress && this.$routeParams.clientId){\r\n this.clientService.updateClientWithUserId(this.clientId);\r\n this.gotoResultsPage();\r\n }else{\r\n this.dealClientService.addCurrentUserToDeal(this.$routeParams.dealUniqueRef).then((response) => {\r\n this.gotoResultsPage();\r\n });\r\n }\r\n }\r\n else {\r\n //if there's a loanCriteria, create search to persist on system\r\n if (this.loanCriteria) {\r\n this.loanCriteria.UserId = response.Id;\r\n this.loanCriteria.User = response;\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 4,\r\n false,\r\n \"\",\r\n response.Email,\r\n response.PhoneNumber,\r\n \"\",\r\n )\r\n .then((response) => {\r\n if (this.loanCriteria.SaveCase === true) {\r\n //case creation\r\n this.$CaseService\r\n .promotesearchtocase(\r\n response.Id,\r\n (this.$rootScope as any)\r\n .selectedResultForAttachingToCase.Id,\r\n (this.$rootScope as any).productResultList,\r\n )\r\n .then((success) => {\r\n if (LoginController.searchInProgress) {\r\n this.$location.path(\"/results/\" + response.Id);\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n LoginController.searchInProgress = false;\r\n });\r\n } else {\r\n if (LoginController.searchInProgress) {\r\n this.$location.path(\"/results/\" + response.Id);\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n LoginController.searchInProgress = false;\r\n }\r\n });\r\n } else {\r\n var targeturl = this.$location.search().targeturl;\r\n\r\n if (targeturl) {\r\n this.$location.search({});\r\n this.$location.path(targeturl);\r\n }\r\n // Check to see if we should load the admin dashboard or the end user dashboard.\r\n else if (\r\n this.$location.path().startsWith(\"/loginandreturnto\")\r\n ) {\r\n //return back to the page it came from\r\n (this.$rootScope as any).back();\r\n } else if (\r\n (this.$rootScope as any).loginRedirectPath &&\r\n !(this.$rootScope as any).loginRedirectPath.includes(\"/login\")\r\n ) {\r\n const loginRedirectPath = (this.$rootScope as any)\r\n .loginRedirectPath;\r\n (this.$rootScope as any).loginRedirectPath = undefined;\r\n this.$location.path(loginRedirectPath);\r\n } else if (this.orgUniqueRef != null) {\r\n this.$location.path(\"/registerbroker/\" + this.orgUniqueRef);\r\n } else {\r\n this.$roleService.goHomeBasedOnUser();\r\n }\r\n }\r\n }\r\n\r\n });\r\n\r\n this.$user.sendEventToHubspot(response, null, true);\r\n })\r\n .catch((response) => {\r\n this.error = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n })\r\n .catch((response) => {\r\n this.error = response;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n openResetModal() {\r\n this.resetEmail = this.username;\r\n this.resettingPassword = true;\r\n }\r\n\r\n resetPassword() {\r\n this.passwordResetForm = true;\r\n this.dataLoading = true;\r\n //this.username = null;\r\n //this.password = null;\r\n //this.login();\r\n this.$auth\r\n .resetPassword(this.resetEmail)\r\n .then((response) => {\r\n this.resetSubmitted = true;\r\n this.resettingPassword = false;\r\n })\r\n .catch((error) => {\r\n this.passwordResetForm = error;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n postResetPassword() {\r\n //login thenchange the password then\r\n if (this.verifyNewPassword == this.newPassword) {\r\n this.loginThenResetPassword(this.newPassword);\r\n }\r\n }\r\n\r\n clearPasswordReset() {\r\n this.resettingPassword = false;\r\n this.resetSubmitted = false;\r\n }\r\n\r\n gotoResultsPage(){\r\n var redirectUrl = '';\r\n\r\n switch (this.productFamily) {\r\n case ProductFamilyEnum.Development:\r\n redirectUrl = `/devfinanceresults/${this.dealUniqueRef}`;\r\n break;\r\n case ProductFamilyEnum.Bridging:\r\n redirectUrl = `/bridgingresults/${this.dealUniqueRef}`;\r\n break;\r\n case ProductFamilyEnum.Commercial:\r\n redirectUrl = `/commercialresults/${this.dealUniqueRef}`;\r\n break;\r\n default:\r\n redirectUrl = '/userdashboard';\r\n break;\r\n }\r\n\r\n this.$location.path(redirectUrl);\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseLenderDTO } from \"@js/DTO/CaseLenderDTO.cs.d\";\r\nimport { CaseNoteDTO } from \"@js/DTO/CaseNoteDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { LenderResultDTO } from \"@js/DTO/DevelopmentFinance/LenderResultDTO.cs.d\";\r\nimport { LenderResultMinimalDTO } from \"@js/DTO/DevelopmentFinance/LenderResultMinimalDTO.cs.d\";\r\nimport { LenderResultSummaryDTO } from \"@js/DTO/DevelopmentFinance/LenderResultSummaryDTO.cs.d\";\r\nimport { DevelopmentWithNoLoginDTO } from \"@js/DTO/DevelopmentWithNoLoginDTO.cs.d\";\r\nimport { LenderResultSetDTO } from \"@js/DTO/LenderResultSet.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { SelectedResultDTO } from \"@js/DTO/SelectedResultDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { MaxFlatUnitPriceEnum } from \"@js/models/enum/MaxFlatUnitPriceEnum.cs.d\";\r\nimport { MaxHouseSalePriceEnum } from \"@js/models/enum/MaxHouseSalePriceEnum.cs.d\";\r\nimport { MaxSqFtSalePriceEnum } from \"@js/models/enum/MaxSqFtSalePriceEnum.cs.d\";\r\nimport { PersonalGuaranteeLevelEnum } from \"@js/models/enum/PersonalGuaranteeLevelEnum.cs.d\";\r\nimport { PreviousDevelopmentsEnum } from \"@js/models/enum/PreviousDevelopmentsEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { ShareholderDepositRequiredEnum } from \"@js/models/enum/ShareholderDepositRequiredEnum.cs.d\";\r\nimport { SortByEnum } from \"@js/models/enum/SortByEnum.cs.d\";\r\nimport { AccountService } from \"@js/services/AccountService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { BridgingSearchService } from \"@js/services/BridgingSearchService\";\r\nimport { CaseLenderService } from \"@js/services/CaseLenderService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseNoteService } from \"@js/services/CaseNoteService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { ClientService } from \"@js/services/ClientService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { DevelopmentInputWithNoLoginService } from \"@js/services/DevelopmentInputWithNoLoginService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { IntroducerService } from \"@js/services/IntroducerService\";\r\nimport { InviteService } from \"@js/services/InviteService\";\r\nimport { LenderResultService } from \"@js/services/LenderResultService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { LoginController } from \"./LoginController\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\ninterface ResultArrayMobile {\r\n name: string;\r\n array: LenderResultMinimalDTO[];\r\n template: string;\r\n headerTemplate: string;\r\n order: number;\r\n}\r\n\r\nexport class LenderResultScreenController {\r\n loadingData: boolean = false;\r\n\r\n // tourState: any = {\r\n // tourStep: 1,\r\n // tourTotalSteps: 0,\r\n // };\r\n // tourEnabled: boolean = false;\r\n\r\n assistanceSlider: boolean = true;\r\n offer: LenderResultSummaryDTO;\r\n\r\n totalLender: number = 0;\r\n\r\n enquiryOpen: boolean;\r\n enquiryEmail: string;\r\n enquiryBody: string;\r\n enquiryTelephone: string;\r\n sentmessage: boolean = false;\r\n sendingmessage: boolean = false;\r\n firstTime: boolean = true;\r\n\r\n fetchingMatches: boolean;\r\n fetchingLargest: boolean;\r\n fetchingMezzanine: boolean;\r\n fetchingEquity: boolean;\r\n\r\n mezzanineLenders: boolean;\r\n equityLenders: boolean;\r\n guidanceCheckbox: boolean = true;\r\n showVideo: boolean = false;\r\n isSearch: boolean = true;\r\n isMaximumLoanRequired: boolean = true;\r\n tempLoanRequired: number;\r\n showHelpText: boolean = true;\r\n productIdAttachedToCase: number;\r\n\r\n loanCriteria: DevelopmentInputDTO;\r\n\r\n results: LenderResultSetDTO;\r\n\r\n matchingResults: LenderResultMinimalDTO[];\r\n largestResults: LenderResultMinimalDTO[];\r\n mezzanineResults: LenderResultDTO[];\r\n equityResults: LenderResultDTO[];\r\n allResults: ResultArrayMobile[] = [];\r\n selectedResultArray: LenderResultDTO[];\r\n\r\n summarySearchResults: LenderResultSummaryDTO[];\r\n\r\n selectedResult: LenderResultDTO;\r\n selectedResultForAttachingToCase: LenderResultMinimalDTO;\r\n\r\n comparisonList: LenderResultMinimalDTO[] = [];\r\n summaryComparisonList: LenderResultSummaryDTO[] = [];\r\n totProjCosts: number;\r\n showsaveinfo: boolean = false;\r\n selectedUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n hideusername: boolean = true;\r\n caseid: number = null;\r\n searchid: number = null;\r\n uniqueId: string = null;\r\n\r\n hideCaseCreation: boolean = false;\r\n loanLabel: string;\r\n limitmatches: boolean = true;\r\n limitlargestmatches: boolean = true;\r\n showSaveResults: number;\r\n warningOff: boolean = false;\r\n doubleWarningOff: boolean = false;\r\n currentCase: CaseDTO;\r\n currentProductOnCase: string;\r\n caseUpdated: boolean = false;\r\n switchingProduct: boolean = false;\r\n productResultList: number;\r\n productId: number;\r\n caseLenders: CaseLenderDTO[];\r\n caseLendersNotInResults: CaseLenderDTO[];\r\n filterLenderNames: string[] = [];\r\n\r\n sliderShown: boolean;\r\n updatedResultsWithSlider: boolean = false;\r\n\r\n rowsShown: number = 4;\r\n emailJourneyStarted: boolean = true;\r\n searchNameCache: string;\r\n\r\n //Introducers\r\n clientFirstName: string;\r\n clientSurname: string;\r\n clientEmail: string;\r\n notifyBorrower: boolean = true;\r\n\r\n // confirmation before leave\r\n confirmSaving: boolean = false;\r\n prevPath: string;\r\n\r\n loanCriteriaWithoutCredentials: DevelopmentInputDTO;\r\n showProductNote: boolean = false;\r\n productNote: string;\r\n\r\n savePressed: boolean = false;\r\n\r\n //Capture name and email address & send results to unregistered searcher\r\n newUserCaptureForm: FormData;\r\n newUser: ApplicationUserDTO = {} as ApplicationUserDTO;\r\n //captureFirstName: string;\r\n //captureSurname: string;\r\n //captureEmail: string;\r\n //applicantDefinedRole: ApplicantRoleEnum;\r\n agreedToBeEmailed: boolean = false;\r\n error: string = \"\";\r\n // Flag to disable or enable the Save as button depending on the click.\r\n isClicked: boolean = false;\r\n showContactBrokerModal: boolean = false;\r\n hasAccessToDeal: boolean = true;\r\n\r\n //Carousel\r\n carouselData: string[] = [\r\n \"Brickflow is the quickest and easiest way to apply for development finance.\",\r\n \"To protect borrowers, we only work with the UK's most reputable and financially secure lenders.\",\r\n \"We work with mainstream & challenger banks, as well as specialist development lenders.\",\r\n \"The results below are estimates based on critera provided to us by our lenders.\",\r\n \"To get a Lender Approved Decision in Principle (DIP), select up to 3x loan options below and click Proceed.\",\r\n ];\r\n carouselStep: number = 0;\r\n\r\n //For admins accessing client accounts\r\n clientUsernameBeingAccessed: string;\r\n\r\n toggleEditSearchName: boolean = false;\r\n\r\n isBlankSearch: boolean = false;\r\n\r\n isAdmin: boolean = false;\r\n debug1: boolean = false;\r\n\r\n showActionPanel: boolean = false;\r\n\r\n isLoggedInUser: boolean = false;\r\n isLegacyUser: boolean = false;\r\n\r\n isProceedClicked: boolean = false;\r\n isDIPClicked: boolean = false;\r\n\r\n tempSearchName: string = null;\r\n\r\n isLoggingOut: boolean = false;\r\n\r\n //These are added for new search functinality\r\n existingUsers: UserSimpleDTO[];\r\n isNewSearch: boolean;\r\n newSearch: boolean = false;\r\n existingborrower: boolean;\r\n clientPhoneNumber: string;\r\n showClientDetails: boolean = false;\r\n isBroker: boolean = false;\r\n clientId: string = null;\r\n isreferredSearch: boolean = false;\r\n isIntroducer: boolean = false;\r\n isIntroduceronly: boolean = false;\r\n isLender: boolean = false;\r\n searchName: string = null;\r\n searchReference: string;\r\n newSearchId: number;\r\n\r\n //Accordion\r\n accordionShow: boolean[] = [];\r\n showRequestEmailForm: boolean = false;\r\n requestMessageReason: string = \"\";\r\n message: boolean = false;\r\n messageContent: string;\r\n sendingMessage: boolean = false;\r\n\r\n appName: string;\r\n\r\n guid: string = null;\r\n isSaveorSaveAsClicked: boolean = false;\r\n showOnlyRegisterButton: boolean = false;\r\n noOfShortlistAllowed: number = 5;\r\n emailClient: boolean = false;\r\n displayMsg: string = null;\r\n showMsg: boolean = false;\r\n showMsgToAdminOrBroker: boolean = false;\r\n ShowdeleteSearch: boolean = false;\r\n newLeadFirstName: string;\r\n newLeadLastName: string;\r\n newLeadEmail: string;\r\n isResultScreen: boolean = true;\r\n isSaveClientSearch: boolean = false;\r\n selecteduserName: string;\r\n\r\n isClient: boolean = false;\r\n\r\n numberOfPreviousDevelopmentsOptions = [];\r\n depositRequiredFromShareholdersOptions = [];\r\n personalGuaranteeLevelOptions = [];\r\n maxHouseSalePriceOptions = [];\r\n maxFlatUnitPriceOptions = [];\r\n maxSqFtSalePriceOptions = [];\r\n maxPercCommercialForMixedUseOptions = [];\r\n locationOptions = [];\r\n maxCommercialFloorspaceOptions\r\n\r\n shareholderDepositRequired = null;\r\n personalGuaranteeLevel = null;\r\n maxHouseSalesPrice = null;\r\n maxFlatUnitPrice = null;\r\n maxSqFtSalePrice = null;\r\n maxSqFtSalePriceFlats = null;\r\n maxPercCommercialForMixedUse = null;\r\n tempLoanCriteria = null;\r\n previousDevelopments = null;\r\n\r\n showFilters: boolean = false;\r\n isFilterUpdate: boolean = false;\r\n showSortBy: boolean = false;\r\n\r\n isShortlistingMore: boolean = false;\r\n\r\n showContactLender: boolean = false;\r\n shareForm: ng.IFormController;\r\n shareFirstName: string;\r\n shareNote: string;\r\n lenderEmail: string;\r\n shareEmailSubject: string;\r\n sharedSearch: boolean = false;\r\n dataLoading: boolean = false;\r\n isSaveAsWthOutIntroducee: boolean = false;\r\n hasSearchChanged: boolean = false;\r\n hasCriteriaChanged: boolean = false;\r\n orgCode: string;\r\n orgName: string;\r\n brokerDetail: string = \"\";\r\n reloadSearch: boolean = false;\r\n brokerageOrg: OrganisationDTO;\r\n brokerageOrgFilename: string;\r\n showMessageToborrower: boolean = false;\r\n borrowerMessage: string = \"\";\r\n user: ApplicationUserDTO;\r\n moveContactBrokerBtnInMiddle: boolean = false;\r\n clientOrganisationPhoneNumber: string;\r\n showBridgingEligibility: boolean = false;\r\n isBridging: boolean = false;\r\n isOldDevFinance: boolean = true;\r\n showLenderNamesAndLogosOverride: boolean = false;\r\n userRole: string;\r\n userDetails: string;\r\n userLenderId: number = null;\r\n\r\n //New enterprise journey\r\n showEnterpriseRegistrationModal: boolean = false;\r\n projectName: string = \"\";\r\n registrationForm: ng.IFormController;\r\n emailExistsError: boolean = false;\r\n enterpriseClientId: string = \"\";\r\n\r\n snapshotNewSearch: boolean = false;\r\n showPostcodeErrorMessage: boolean = false;\r\n postcodeErrorMsg: string;\r\n\r\n hasResultsProcessed: boolean = false;\r\n\r\n //SaveAs functionality\r\n isSaveAsClicked: boolean = false;\r\n saveAsSearchName: string;\r\n\r\n filterProperties = [\r\n \"F_IsFirstTimeDeveloper\",\r\n \"F_NumberOfPreviousDevelopments\",\r\n \"F_ShareholderDepositRequired\",\r\n \"F_IsPersonalName\",\r\n \"F_IsOffshoreCompany\",\r\n \"F_IsMainShareholderOverseas\",\r\n \"F_PersonalGuaranteeLevel\",\r\n \"F_HasAdverseCredit\",\r\n \"F_MaxCommercialFloorspace\",\r\n \"F_IsAirRights\",\r\n \"F_IsModular\",\r\n \"F_IsPermittedDevelopmentScheme\",\r\n \"F_IsGradeOneListed\",\r\n \"F_IsGradeTwoListed\",\r\n \"F_MaxHouseSalesPrice\",\r\n \"F_MaxFlatUnitPrice\",\r\n \"F_MaxNumberOfUnits\",\r\n //\"F_MaxPercCommercialForMixedUse\",\r\n \"F_MaxSqFtSalePrice\",\r\n \"F_MaxSqFtSalePriceFlats\",\r\n \"F_IsWorkStarted\",\r\n \"F_IsChargeOnAdditionalProperty\",\r\n \"F_IsFixedRate\",\r\n ];\r\n\r\n static $inject = [\r\n \"$route\",\r\n \"$routeParams\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"LenderResultService\",\r\n \"UserService\",\r\n \"CaseService\",\r\n \"DevelopmentInputService\",\r\n \"DevelopmentInputWithNoLoginService\",\r\n \"IntroducerService\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"FileAttachmentService\",\r\n \"LenderService\",\r\n \"CaseMemberService\",\r\n \"InviteService\",\r\n \"OrganisationService\",\r\n \"AccountService\",\r\n \"CaseNoteService\",\r\n \"PaymentService\",\r\n \"SelectListService\",\r\n \"CaseLenderService\",\r\n \"UserService\",\r\n \"EventLogService\",\r\n \"BridgingSearchService\",\r\n \"ClientService\",\r\n ];\r\n\r\n constructor(\r\n private $route: ng.route.IRouteService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n public $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $lenderresultservice: LenderResultService,\r\n private $user: UserService,\r\n private $CaseService: CaseService,\r\n private $DevelopmentInputService: DevelopmentInputService,\r\n private $DevelopmentInputWithNoLoginService: DevelopmentInputWithNoLoginService,\r\n private $IntroducerService: IntroducerService,\r\n private $auth: AuthService,\r\n private roleService: RoleService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private lenderService: LenderService,\r\n private caseMemberService: CaseMemberService,\r\n private inviteService: InviteService,\r\n private organisationService: OrganisationService,\r\n private $accountservice: AccountService,\r\n private caseNoteService: CaseNoteService,\r\n private paymentService: PaymentService,\r\n private selectListService: SelectListService,\r\n private caseLenderService: CaseLenderService,\r\n private userService: UserService,\r\n private eventLogService: EventLogService,\r\n private bridingSearchService: BridgingSearchService,\r\n private clientService: ClientService,\r\n ) {\r\n if (this.$location.path().startsWith(\"/shortlistmore\")) {\r\n this.isShortlistingMore = true;\r\n }\r\n\r\n if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"userRole\") &&\r\n sessionStorage.getItem(\"userRole\") == \"borrower\" &&\r\n !$cookies.get(\"access_token\")\r\n ) {\r\n document.getElementById(\"header\").style.display = \"none\";\r\n } else if ($cookies.get(\"access_token\")) {\r\n document.getElementById(\"header\").style.display = \"flex\";\r\n }\r\n\r\n //Get CaseId & SearchId from route params. If the case don't have id, display the change serach menu\r\n if (this.$routeParams.CaseId) {\r\n this.caseid = Number(this.$routeParams.CaseId);\r\n this.isSearch = false;\r\n } else {\r\n this.isSearch = true;\r\n }\r\n\r\n if (this.$routeParams.SearchId) {\r\n this.searchid = Number(this.$routeParams.SearchId);\r\n } else {\r\n if (window.self == window.top && $cookies.get(\"access_token\"))\r\n // Expanding a 'new search' panel for first time search execution\r\n this.sliderShown = (this.$rootScope as any).previousRoute.startsWith(\"/compare\") ? false : true;\r\n }\r\n if (this.$routeParams.uniqueId) {\r\n this.uniqueId = this.$routeParams.uniqueId;\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n //This block is to navigate a broker to userdashboard when they do not have a license.\r\n if (sessionStorage.getItem(\"isValidLicense\") == \"false\") {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n this.isLoggedInUser = true;\r\n this.assistanceSlider = false; //assistance-slider open the fist time you access to the case\r\n this.loadingData = true;\r\n this.organisationService\r\n .getOrganisation()\r\n .then((organisation) => {\r\n if (organisation) {\r\n if (!organisation.IsBrickflow) {\r\n this.clientOrganisationPhoneNumber = organisation.PhoneNumber;\r\n }\r\n this.orgCode = organisation.IsWhiteLabelled\r\n ? organisation.OrganisationCode\r\n : \"\";\r\n this.showLenderNamesAndLogosOverride =\r\n organisation.ShowLenderNames ?? false;\r\n if (organisation.IsWhiteLabelled) {\r\n this.orgName = organisation.Name.replace(/ /g, \"_\");\r\n } else {\r\n this.orgName = \"Brickflow\";\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n //not logged in so show the agree terms box every time\r\n this.selectedUser.LenderResultsTermsAgreed = false;\r\n this.determineSearchSource();\r\n if (window.self == window.top) {\r\n this.userRole = sessionStorage.getItem(\"userRole\");\r\n this.isClient = this.userRole == \"borrower\";\r\n this.user = JSON.parse(sessionStorage.getItem(\"userDetails\"));\r\n this.orgCode = this.$cookies.get(\"org_code\");\r\n this.enterpriseClientId = sessionStorage.getItem(\"clientId\");\r\n } else {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.guidanceCheckbox = false;\r\n Promise.all([\r\n this.organisationService\r\n .getData(\"userDetails\")\r\n .then((userDetails) => {\r\n if (userDetails) {\r\n this.user = JSON.parse(userDetails);\r\n }\r\n }),\r\n this.organisationService.getData(\"userRole\").then((userRole) => {\r\n if (userRole) {\r\n this.userRole = userRole;\r\n this.isClient = this.userRole == \"borrower\";\r\n }\r\n }),\r\n this.organisationService.getData(\"clientId\").then((clientId) => {\r\n if (clientId) {\r\n this.enterpriseClientId = clientId;\r\n }\r\n }),\r\n this.organisationService.getData(\"newSearch\").then((newSearch) => {\r\n this.snapshotNewSearch = newSearch == \"true\";\r\n }),\r\n ])\r\n .then(() => {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n this.organisationService.sendDataToParent(\"newSearch\", \"false\");\r\n })\r\n .catch((error) => {\r\n console.error(\"Failed to get user data: \", error);\r\n });\r\n }\r\n }\r\n\r\n this.getSearchLenderCount();\r\n\r\n // if (window.self == window.top) {\r\n // let cookieTourStep = this.$cookies.get(\"tourStep\");\r\n // if (cookieTourStep) {\r\n // this.tourState.tourStep = cookieTourStep;\r\n // }\r\n // }\r\n\r\n if (this.caseid && this.caseid > 0) {\r\n this.getCase();\r\n }\r\n //else if (this.searchid) {\r\n // this.getCaseFromSearch(this.searchid);\r\n //} else {\r\n else {\r\n this.$CaseService.updateTubeMap(null);\r\n }\r\n\r\n if (window.self == window.top && sessionStorage.getItem(\"userDetails\")) {\r\n this.showOnlyRegisterButton = true;\r\n }\r\n\r\n //if user is logged in, get profile\r\n if (window.self == window.top && this.$cookies.get(\"access_token\")) {\r\n this.$user.getcurentuserrecord().then((result) => {\r\n this.selectedUser = result;\r\n\r\n this.isLegacyUser = this.selectedUser.IsLegacyUser;\r\n\r\n this.roleService.isClientUser().then((response) => {\r\n this.isClient = response;\r\n\r\n if (this.clientOrganisationPhoneNumber && !this.isClient) {\r\n this.clientOrganisationPhoneNumber = null;\r\n }\r\n });\r\n\r\n this.roleService.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n if (this.isAdmin) {\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n });\r\n\r\n this.roleService.isBroker().then((response) => {\r\n this.isBroker = response;\r\n if (this.isBroker) {\r\n this.getUsersBelongToBrokerOrAdmin();\r\n }\r\n });\r\n\r\n this.roleService.isIntroducer().then((response) => {\r\n this.isIntroducer = response;\r\n });\r\n\r\n this.roleService.isIntroducerOnly().then((response) => {\r\n this.isIntroduceronly = response;\r\n });\r\n\r\n this.roleService.isLenderUser().then((response) => {\r\n this.isLender = response;\r\n if (this.isLender) {\r\n this.$user.getCurrentUserLender().then((response) => {\r\n this.userLenderId = response;\r\n });\r\n }\r\n });\r\n\r\n this.determineSearchSource();\r\n });\r\n }\r\n\r\n // if (window.self == window.top) this.updateGuidanceState();\r\n\r\n this.checkShowBridgingEligibility();\r\n\r\n $scope.$on(\"$locationChangeStart\", (event: ng.IAngularEvent) => {\r\n /*this.paymentService.getLicense().then((response) => {\r\n var license: LicenseMasterDTO = response;\r\n\r\n if (license.Status == LicenseMasterStatusEnum.PaidUp\r\n || license.Status == LicenseMasterStatusEnum.PaymentProcessing\r\n || license.Status == LicenseMasterStatusEnum.PreCancel) {\r\n this.saveChanges(event);\r\n }\r\n });*/\r\n\r\n if (\r\n this.selectedUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PaidUp ||\r\n this.selectedUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PaymentProcessing ||\r\n this.selectedUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PreCancel\r\n ) {\r\n this.saveChanges(event);\r\n }\r\n });\r\n\r\n let logoutUnregister = $rootScope.$on(\r\n \"logout\",\r\n (event: ng.IAngularEvent) => {\r\n this.isLoggingOut = true;\r\n /* this.paymentService.getLicense().then((response) => {\r\n var license: LicenseMasterDTO = response;\r\n \r\n if (license.Status == LicenseMasterStatusEnum.PaidUp\r\n || license.Status == LicenseMasterStatusEnum.PaymentProcessing\r\n || license.Status == LicenseMasterStatusEnum.PreCancel) {\r\n this.saveChanges(event);\r\n }\r\n });*/\r\n\r\n if (\r\n this.selectedUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PaidUp ||\r\n this.selectedUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PaymentProcessing ||\r\n this.selectedUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PreCancel\r\n ) {\r\n this.saveChanges(event);\r\n }\r\n },\r\n );\r\n\r\n if (window.self == window.top) {\r\n $scope.$on(\"$destroy\", logoutUnregister);\r\n\r\n // $rootScope.$on(\"guidanceStateChanged\", (event: ng.IAngularEvent) => {\r\n // this.updateGuidanceState();\r\n // });\r\n\r\n // $rootScope.$on(\"nextTour\", (event: ng.IAngularEvent) => {\r\n // this.tourNext();\r\n // });\r\n // $rootScope.$on(\"backTour\", (event: ng.IAngularEvent) => {\r\n // this.tourBack();\r\n // });\r\n // $rootScope.$on(\"skipTour\", (event: ng.IAngularEvent) => {\r\n // this.tourSkip();\r\n // });\r\n }\r\n\r\n // Set the broker information on the new user object\r\n if (\r\n this.$routeParams.brokerOrgUniqueRef !== undefined &&\r\n this.$routeParams.brokerOrgUniqueRef != \"null\" &&\r\n this.$routeParams.brokerUserId !== undefined &&\r\n this.$routeParams.brokerUserId != \"null\"\r\n ) {\r\n this.organisationService\r\n .getOrganisationIdByUniqueRef(this.$routeParams.brokerOrgUniqueRef)\r\n .then((brokerOrgId: number) => {\r\n this.newUser.OrganisationReferralId = brokerOrgId;\r\n this.newUser.DefaultBrokerOrganisationId = brokerOrgId;\r\n });\r\n }\r\n\r\n this.getAppName();\r\n\r\n this.numberOfPreviousDevelopmentsOptions =\r\n this.selectListService.GetNumberOfPreviousDevelopments();\r\n this.depositRequiredFromShareholdersOptions =\r\n this.selectListService.GetShareholderDepositRequired();\r\n this.personalGuaranteeLevelOptions =\r\n this.selectListService.GetPersonalGuaranteeLevels();\r\n this.maxHouseSalePriceOptions =\r\n this.selectListService.GetMaxHouseSalePrices();\r\n this.maxFlatUnitPriceOptions =\r\n this.selectListService.GetMaxFlatUnitPrices();\r\n this.maxSqFtSalePriceOptions =\r\n this.selectListService.GetMaxSqFtSalePrices();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n this.maxCommercialFloorspaceOptions = this.selectListService.GetMaxCommercialFloorspaceOptions();\r\n }\r\n\r\n getRequiredRoles(isCaseDashboard: boolean) {\r\n if (isCaseDashboard) return `['Admin', 'Client', 'Broker', 'Introducer']`;\r\n return `['Admin', 'Client', 'Broker', 'Introducer', 'Lender']`;\r\n }\r\n\r\n saveChanges(event: ng.IAngularEvent) {\r\n if (!(this.isBroker && (this.$routeParams.uniqueId || this.searchid))) {\r\n if (this.warningOff) {\r\n this.warningOff = false;\r\n return;\r\n } else {\r\n if (\r\n !this.showSaveResults &&\r\n !this.searchid &&\r\n !this.doubleWarningOff &&\r\n this.isLoggedInUser\r\n ) {\r\n this.prevPath = this.$location.url();\r\n event.preventDefault();\r\n this.confirmSaving = true;\r\n //var leaveWithoutSave = confirm(\"Are you sure you want to leave this page without saving your results?\")\r\n }\r\n }\r\n }\r\n }\r\n\r\n cancelSavingResults() {\r\n event.preventDefault();\r\n this.confirmSaving = false;\r\n if (\r\n this.loanCriteria.SearchName &&\r\n !this.loanCriteria.SearchName.startsWith(\"My Development Finance Search\")\r\n ) {\r\n this.isSaveorSaveAsClicked = true;\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.showSaveResults = 1;\r\n }\r\n }\r\n\r\n cancelSaving() {\r\n this.warningOff = true;\r\n this.confirmSaving = false;\r\n\r\n if (this.isLoggingOut == true) {\r\n this.isLoggingOut = false;\r\n this.$auth.logout();\r\n } else {\r\n this.$location.path(this.prevPath);\r\n }\r\n }\r\n\r\n determineSearchSource() {\r\n //if called from third party api\r\n if (this.$location.path().startsWith(\"/resultsExternalAPI\")) {\r\n if (\r\n this.$routeParams.uniqeId !== undefined &&\r\n this.$routeParams.uniqeId != \"null\"\r\n ) {\r\n //read back data using\r\n this.$lenderresultservice\r\n .fetchByUniqueRef(this.$routeParams.uniqeId, 20)\r\n .then((results) => {\r\n (this.$rootScope as any).loanCriteria = results.DevelopmentInput;\r\n this.loanCriteria = (this.$rootScope as any).loanCriteria;\r\n if (this.loanCriteria) {\r\n this.newUser.FirstName = this.loanCriteria.IntroduceeFirstName;\r\n this.newUser.LastName = this.loanCriteria.IntroduceeSurname;\r\n this.newUser.Email = this.loanCriteria.IntroduceeEmail;\r\n this.newUser.PhoneNumber = this.loanCriteria.IntroduceePhone;\r\n this.tempLoanRequired = this.loanCriteria.CI_Dev_LoanReq;\r\n if (this.loanCriteria.CI_Dev_LoanReq > 0) {\r\n this.isMaximumLoanRequired = false;\r\n }\r\n this.isDIPClicked = this.loanCriteria.IsFullCase;\r\n }\r\n //check if associated user if so makes sense to login to give full functionality\r\n if (this.loanCriteria.UserId) {\r\n if (\r\n this.$cookies.get(\"access_token\") === null ||\r\n this.$cookies.get(\"access_token\") === undefined\r\n ) {\r\n if (this.loanCriteria.UserId == \"User Not logged in\") {\r\n this.warningOff = true;\r\n this.doubleWarningOff = true;\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/loginandreturnto/\");\r\n } else {\r\n this.$location.path(\"/loginandreturnto/\");\r\n }\r\n }\r\n }\r\n if (results.LenderResultSet) {\r\n this.matchingResults = results.LenderResultSet.MatchingResults;\r\n this.allResults.push({\r\n order: 1,\r\n name: \"Matching Results\",\r\n template:\r\n \"/views/partials/lender-results-mobile-table-row.html\",\r\n headerTemplate:\r\n \"/views/partials/lender-results-mobile-table-header.html\",\r\n array: this.matchingResults,\r\n });\r\n\r\n this.largestResults = results.LenderResultSet.LargestLoanResults;\r\n this.allResults.push({\r\n order: 2,\r\n name: \"Alternative Options\",\r\n template:\r\n \"/views/partials/lender-results-mobile-largest-table-row.html\",\r\n headerTemplate:\r\n \"/views/partials/lender-results-mobile-largest-table-header.html\",\r\n array: this.largestResults,\r\n });\r\n\r\n this.summarySearchResults =\r\n results.LenderResultSet.CombinedSummaryResultSet;\r\n\r\n this.sortSummaryResults();\r\n }\r\n })\r\n .finally(() => {\r\n this.fetchingLargest = false;\r\n this.fetchingMatches = false;\r\n this.hasResultsProcessed = true;\r\n });\r\n }\r\n }\r\n //if called from introduced client link\r\n else if (this.$location.path().startsWith(\"/referredSearch\")) {\r\n if (\r\n this.$routeParams.uniqueId !== undefined &&\r\n this.$routeParams.uniqueId != \"null\"\r\n ) {\r\n this.isreferredSearch = true;\r\n if (this.$routeParams.showOnlyRegister == \"true\") {\r\n this.showOnlyRegisterButton = true;\r\n sessionStorage.setItem(\"userRole\", UserRoleEnum.Broker.toString());\r\n }\r\n //Pull DevelopmentInputWithNoLogin search results\r\n this.$DevelopmentInputWithNoLoginService\r\n .fetchByUniqueId(this.$routeParams.uniqueId)\r\n .then((results) => {\r\n if (!results) {\r\n if (this.isLoggedInUser) {\r\n this.displayMsg = `Changes have been made to this search by your client, you will now be taken back to your user dashboard`;\r\n } else {\r\n this.displayMsg = `Please contact your broker in order to access this case.`;\r\n }\r\n\r\n this.showMsgToAdminOrBroker = true;\r\n } else {\r\n this.loanCriteria = {} as DevelopmentInputDTO;\r\n (Object).assign(this.loanCriteria, results);\r\n\r\n //Prefill client details for popup\r\n this.confirmSaving = false;\r\n this.newUser.FirstName = results.IntroduceeFirstName;\r\n this.newUser.LastName = results.IntroduceeSurname;\r\n this.newUser.Email = results.IntroduceeEmail;\r\n this.newUser.PhoneNumber = results.IntroduceePhone;\r\n\r\n if (this.loanCriteria) {\r\n this.isDIPClicked = this.loanCriteria.IsFullCase;\r\n this.tempLoanRequired = this.loanCriteria.CI_Dev_LoanReq;\r\n if (this.loanCriteria.CI_Dev_LoanReq > 0) {\r\n this.isMaximumLoanRequired = false;\r\n }\r\n if (this.isClient) {\r\n this.loanCriteria.UserId = this.loanCriteria.UserId\r\n ? this.loanCriteria.UserId\r\n : this.selectedUser.Id;\r\n this.loanCriteria.User = this.loanCriteria.User\r\n ? this.loanCriteria.User\r\n : this.selectedUser;\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n }\r\n }\r\n\r\n if (this.$routeParams.showOnlyRegister == \"false\") {\r\n this.isClient = true;\r\n this.loanCriteria.SaveQueryAndResults = false;\r\n }\r\n\r\n if (this.isBroker || this.isAdmin) {\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n }\r\n\r\n this.updateResults();\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n this.hasResultsProcessed = true;\r\n });\r\n }\r\n\r\n if (\r\n this.$routeParams.brokerOrgUniqueRef !== undefined &&\r\n this.$routeParams.brokerOrgUniqueRef != \"null\" &&\r\n this.$routeParams.brokerUserId !== undefined &&\r\n this.$routeParams.brokerUserId != \"null\"\r\n ) {\r\n if (this.selectedUser) {\r\n if (\r\n this.selectedUser.OrganisationReferralId == null &&\r\n this.selectedUser.DefaultBrokerOrganisationId == null\r\n ) {\r\n this.organisationService\r\n .getOrganisationIdByUniqueRef(\r\n this.$routeParams.brokerOrgUniqueRef,\r\n )\r\n .then((orgId: number) => {\r\n this.selectedUser.OrganisationReferralId = orgId;\r\n this.selectedUser.DefaultBrokerOrganisationId = orgId;\r\n this.$user.addUpdate(this.selectedUser);\r\n });\r\n }\r\n }\r\n }\r\n } else if (this.$location.path().startsWith(\"/securitycheck\")) {\r\n this.$location.path(\"/casedashboard/\" + this.$routeParams.caseId);\r\n }\r\n //if called with a saved entry\r\n else if (this.searchid) {\r\n this.loadingData = true;\r\n this.$DevelopmentInputService\r\n .fetch(this.searchid)\r\n .then((loanCriteria) => {\r\n if (loanCriteria.IsFullCase && this.isLoggedInUser && this.isClient) {\r\n this.$DevelopmentInputService\r\n .isUserHasAccessToCase(this.searchid)\r\n .then((response) => {\r\n if (!response) {\r\n this.hasAccessToDeal = false;\r\n this.displayMsg =\r\n \"Please contact your broker in order to access this case.\";\r\n this.showMsgToAdminOrBroker = true;\r\n } else {\r\n this.postLoanCriteriaRetrieveProcessing(loanCriteria);\r\n }\r\n });\r\n } else {\r\n this.postLoanCriteriaRetrieveProcessing(loanCriteria);\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n // We are no more storing loanCriteria as rootscope property when navigating to compare page.\r\n if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"LoanCriteria\") &&\r\n (this.$rootScope as any).previousRoute.startsWith(\"/compare\")\r\n ) {\r\n this.loanCriteria = JSON.parse(sessionStorage.getItem(\"LoanCriteria\"));\r\n } else {\r\n // Pull our loan criteria from rootScope.\r\n this.loanCriteria = (this.$rootScope as any).loanCriteria;\r\n }\r\n\r\n // This block handles the reloading results for borrower(with out login) on refresh of page\r\n if (\r\n !this.loanCriteria &&\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"loanCriteria\") &&\r\n !this.isLoggedInUser\r\n ) {\r\n this.loanCriteria = JSON.parse(sessionStorage.getItem(\"loanCriteria\"));\r\n } else if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"loanCriteria\")\r\n ) {\r\n sessionStorage.removeItem(\"loanCriteria\");\r\n }\r\n\r\n if (this.loanCriteria) {\r\n this.tempLoanRequired = this.loanCriteria.CI_Dev_LoanReq;\r\n if (this.loanCriteria.CI_Dev_LoanReq > 0) {\r\n this.isMaximumLoanRequired = false;\r\n }\r\n this.isDIPClicked = this.loanCriteria.IsFullCase;\r\n }\r\n\r\n if (!this.loanCriteria) {\r\n this.$location.path(\"/\");\r\n } else {\r\n if (this.selectedUser) {\r\n this.loanCriteria.User = this.selectedUser;\r\n this.loanCriteria.UserId = this.selectedUser.Id;\r\n }\r\n\r\n if (\r\n !this.loanCriteria.Id &&\r\n window.self == window.top &&\r\n this.loanCriteria.SearchName &&\r\n !sessionStorage.getItem(\"searchuser\") &&\r\n (this.isAdmin || this.isBroker)\r\n ) {\r\n this.loadingData = true;\r\n this.$DevelopmentInputService\r\n .saveSearch(this.loanCriteria)\r\n .then((loanCriteria) => {\r\n this.warningOff = true;\r\n this.go(\"/results/\" + loanCriteria);\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"searchuser\")\r\n ) {\r\n let data = sessionStorage.getItem(\"searchuser\");\r\n let userdetails = JSON.parse(data);\r\n this.clientFirstName = userdetails.clientFirstName;\r\n this.clientSurname = userdetails.clientSurname;\r\n this.clientEmail = userdetails.clientEmail;\r\n this.clientPhoneNumber = userdetails.clientPhoneNumber;\r\n this.clientId = userdetails.clientId;\r\n this.existingborrower = userdetails.existingborrower;\r\n this.loanCriteria.SearchName = userdetails.searchName;\r\n if (this.existingborrower) {\r\n this.showClientDetails = true;\r\n this.loanCriteria.User = userdetails.clientUser;\r\n this.loanCriteria.UserId = this.clientId;\r\n } else {\r\n this.loanCriteria.User = this.selectedUser;\r\n this.loanCriteria.UserId = this.selectedUser.Id;\r\n }\r\n\r\n sessionStorage.removeItem(\"searchuser\");\r\n\r\n this.sendResultsToClient(false, true);\r\n }\r\n\r\n if (\r\n !this.loanCriteria.SearchName ||\r\n this.loanCriteria.SearchName.length == 0\r\n ) {\r\n this.loanCriteria.SearchName = this.defaultSearchName();\r\n }\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.updateResults();\r\n }\r\n }\r\n }\r\n\r\n assistanceSliderCall() {\r\n return this.assistanceSlider;\r\n }\r\n\r\n recalcCosts(updatedField: string): void {\r\n switch (updatedField) {\r\n case \"CI_Dev_BuildCosts\":\r\n this.recalcCostPerArea();\r\n break;\r\n case \"CI_Dev_Contingency\":\r\n this.recalcCostPerArea();\r\n break;\r\n case \"DC_AreaAcquisition\":\r\n this.recalcCostPerArea();\r\n break;\r\n }\r\n }\r\n\r\n recalcCostPerArea(): void {\r\n let res: number = 0;\r\n //Case 4 - recalc cost per sq. m\r\n if (\r\n this.loanCriteria.CI_Dev_BuildCosts &&\r\n this.loanCriteria.CI_Dev_Contingency &&\r\n this.loanCriteria.DC_AreaAcquisition\r\n ) {\r\n res =\r\n (this.loanCriteria.CI_Dev_BuildCosts *\r\n (1 + Number(this.loanCriteria.CI_Dev_Contingency))) /\r\n this.loanCriteria.DC_AreaAcquisition;\r\n this.loanCriteria.DC_BuildCostPerArea = res;\r\n\r\n if (\r\n this.loanCriteria.CI_EndPropType === PropertyTypeEnum.MixedUse ||\r\n this.loanCriteria.CI_EndPropType === PropertyTypeEnum.Residential\r\n ) {\r\n this.loanCriteria.DI_AreaSalesAreaResidential =\r\n this.loanCriteria.DC_AreaAcquisition;\r\n }\r\n if (this.loanCriteria.CI_EndPropType != PropertyTypeEnum.Residential) {\r\n this.loanCriteria.DI_AreaSalesAreaCommercial =\r\n this.loanCriteria.DC_AreaAcquisition;\r\n }\r\n }\r\n }\r\n\r\n newloan() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/criteria/0/0/1\");\r\n }\r\n\r\n getTubeMapValue() {\r\n return this.$CaseService.getTubeMap();\r\n }\r\n\r\n updateResults(saveResults?: boolean, updateLoanLabels: boolean = false) {\r\n Promise.all([\r\n this.organisationService.getData(\"userDetails\").then((userDetails) => {\r\n if (userDetails) {\r\n this.userDetails = userDetails;\r\n this.user = JSON.parse(userDetails);\r\n }\r\n }),\r\n this.organisationService.getData(\"userRole\").then((userRole) => {\r\n if (userRole) {\r\n this.userRole = userRole;\r\n this.isClient = userRole == \"borrower\";\r\n }\r\n }),\r\n\r\n //Check if is a new search when inside iframe\r\n this.organisationService.getData(\"newSearch\").then((newSearch) => {\r\n if (newSearch) {\r\n this.snapshotNewSearch = newSearch == \"true\";\r\n }\r\n }),\r\n ])\r\n .then(() => {\r\n this.organisationService.sendDataToParent(\"newSearch\", \"false\");\r\n const originalSaveState = this.loanCriteria.SaveQueryAndResults;\r\n // If saveResults is set, override it temporarily.\r\n if (saveResults !== undefined) {\r\n this.loanCriteria.SaveQueryAndResults = false;\r\n }\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n this.fetchingLargest = true;\r\n this.fetchingMatches = true;\r\n\r\n //Determine whether we have a blank search & show message\r\n if (\r\n (this.loanCriteria.CI_Dev_OrigPP == 0 &&\r\n this.loanCriteria.CI_EndPropType == 0 &&\r\n this.loanCriteria.CI_GDV == 0 &&\r\n this.loanCriteria.CI_Dev_LoanReq == 0) ||\r\n this.loanCriteria.CI_GDV == 0 ||\r\n this.loanCriteria.CI_Dev_BuildTerm == 0 ||\r\n this.loanCriteria.CI_Dev_BuildCosts == 0 ||\r\n this.loanCriteria.CI_Dev_LoanTermReq == 0\r\n ) {\r\n this.isBlankSearch = true;\r\n this.loadingData = false;\r\n } else {\r\n this.isBlankSearch = false;\r\n let selectedResults: SelectedResultDTO[] =\r\n this.loanCriteria.SelectedResults || [];\r\n let rootScopeLoanCriteriaId = (this.$rootScope as any)?.loanCriteria\r\n ?.Id;\r\n\r\n if (\r\n window.self == window.top &&\r\n sessionStorage.getItem(\"LoanCriteria\") &&\r\n (this.$rootScope as any).previousRoute.startsWith(\"/compare\")\r\n ) {\r\n selectedResults = JSON.parse(\r\n sessionStorage.getItem(\"LoanCriteria\"),\r\n ).SelectedResults;\r\n //Removing the lsd data saved for compare view.\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n }\r\n\r\n if (\r\n !this.selectedUser.NewUserEmailJourneyStarted &&\r\n !this.searchid &&\r\n this.selectedUser.ApplicantDefinedRole == 0 &&\r\n !this.$routeParams.uniqueId\r\n ) {\r\n this.emailJourneyStarted = false;\r\n } else if (this.$routeParams.uniqueId) {\r\n this.emailJourneyStarted = true;\r\n } else {\r\n this.emailJourneyStarted = true;\r\n }\r\n\r\n var orgCode;\r\n\r\n if (window.self == window.top) {\r\n orgCode = this.$cookies.get(\"org_code\");\r\n } else {\r\n orgCode = location.pathname.replace(\"/\", \"\");\r\n }\r\n\r\n if (orgCode) {\r\n this.loanCriteria.ReferralOrgCode = orgCode;\r\n }\r\n\r\n if (window.self == window.top) {\r\n if (\r\n sessionStorage.getItem(\"userDetails\") &&\r\n sessionStorage.getItem(\"userRole\")\r\n ) {\r\n let role = sessionStorage.getItem(\"userRole\") == \"broker\";\r\n let data = sessionStorage.getItem(\"userDetails\");\r\n this.populateNewLeadInfo(role, data);\r\n }\r\n\r\n //Check if new search (not in iframe)\r\n this.snapshotNewSearch =\r\n sessionStorage.getItem(\"newSearch\") == \"true\";\r\n sessionStorage.setItem(\"newSearch\", \"false\");\r\n } else {\r\n if (this.userRole && this.userDetails) {\r\n let role = this.userRole == \"broker\";\r\n this.populateNewLeadInfo(role, this.userDetails);\r\n }\r\n }\r\n\r\n var criteriaChanged =\r\n this.hasCriteriaChanged || this.snapshotNewSearch;\r\n sessionStorage.setItem(\"newSearch\", \"false\");\r\n this.hasCriteriaChanged = false;\r\n this.snapshotNewSearch = false;\r\n\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 0,\r\n false,\r\n \"\",\r\n \"\",\r\n \"\",\r\n this.GetSelectedLabel(),\r\n this.emailJourneyStarted,\r\n this.debug1,\r\n this.roleService.getIsLenderVisible(),\r\n this.newLeadFirstName,\r\n this.newLeadEmail,\r\n this.orgCode,\r\n this.isreferredSearch,\r\n this.userRole,\r\n this.userDetails,\r\n criteriaChanged,\r\n )\r\n .then((results) => {\r\n this.results = results;\r\n if (!this.isLoggedInUser && !this.$routeParams.showOnlyRegister) {\r\n if (!this.user && !this.enterpriseClientId) {\r\n this.showEnterpriseRegistrationModal = true;\r\n document.getElementById(\"body\").style.overflow = \"hidden\";\r\n }\r\n }\r\n\r\n if (this.results.DevelopmentInputWithNoLoginUniqueRef) {\r\n this.loanCriteria.UniqueRef =\r\n this.results.DevelopmentInputWithNoLoginUniqueRef;\r\n\r\n if (!this.isLoggedInUser) {\r\n this.getOrganisationAndBrokerDetails();\r\n sessionStorage.setItem(\r\n \"loanCriteria\",\r\n JSON.stringify(this.loanCriteria),\r\n );\r\n if (!this.user && this.enterpriseClientId) {\r\n this.addClientAndRenameDeal();\r\n }\r\n }\r\n this.eventLogService.logPageLoad(\r\n \"LENDERRESULTS\",\r\n this.orgCode,\r\n this.loanCriteria?.IntroduceeEmail,\r\n \"borrower\",\r\n this.loanCriteria.OrganisationLinkId != null\r\n ? this.loanCriteria.OrganisationLinkId\r\n : 0,\r\n ProductTypeEnum.Development,\r\n this.loanCriteria?.UniqueRef,\r\n );\r\n }\r\n\r\n if (!this.isLoggedInUser && this.$routeParams.showOnlyRegister) {\r\n this.getOrganisationAndBrokerDetails();\r\n this.eventLogService.logPageLoad(\r\n \"LENDERRESULTS-USING-EMAIL-LINK\",\r\n this.orgCode,\r\n this.loanCriteria?.IntroduceeEmail,\r\n \"borrower\",\r\n this.loanCriteria.OrganisationLinkId != null\r\n ? this.loanCriteria.OrganisationLinkId\r\n : 0,\r\n ProductTypeEnum.Development,\r\n this.$routeParams.uniqueId,\r\n );\r\n }\r\n\r\n if (\r\n this.isLoggedInUser &&\r\n results.Id > 0 &&\r\n this.isClient &&\r\n this.$location.path().startsWith(\"/referredSearch\") &&\r\n this.$routeParams.uniqueId !== undefined &&\r\n this.$routeParams.uniqueId != \"null\"\r\n ) {\r\n this.eventLogService.logPageLoad(\r\n \"AFTER-BORROWER-REGISTRATION\",\r\n this.orgCode,\r\n this.selectedUser.UserName,\r\n \"borrower\",\r\n this.loanCriteria.OrganisationLinkId,\r\n ProductTypeEnum.Development,\r\n this.$routeParams.uniqueId,\r\n );\r\n this.go(\"/results/\" + results.Id);\r\n }\r\n\r\n this.matchingResults = results.MatchingResults;\r\n this.largestResults = results.LargestLoanResults;\r\n this.allResults.push({\r\n order: 1,\r\n name: \"Matching Results\",\r\n array: this.matchingResults,\r\n template:\r\n \"/views/partials/lender-results-mobile-table-row.html\",\r\n headerTemplate:\r\n \"/views/partials/lender-results-mobile-table-header.html\",\r\n });\r\n this.allResults.push({\r\n order: 2,\r\n name: \"Alternative Options\",\r\n array: this.largestResults,\r\n template:\r\n \"/views/partials/lender-results-mobile-largest-table-row.html\",\r\n headerTemplate:\r\n \"/views/partials/lender-results-mobile-largest-table-header.html\",\r\n });\r\n\r\n this.summarySearchResults = results.CombinedSummaryResultSet;\r\n\r\n this.sortSummaryResults();\r\n\r\n if (\r\n rootScopeLoanCriteriaId &&\r\n selectedResults &&\r\n selectedResults.length > 0\r\n ) {\r\n this.loanCriteria.SelectedResults = selectedResults;\r\n }\r\n\r\n if (\r\n this.searchid &&\r\n !this.selectedUser.NewUserEmailJourneyStarted &&\r\n this.selectedUser.ApplicantDefinedRole == 0\r\n ) {\r\n this.$lenderresultservice\r\n .startNewUserSearchEmail(\r\n this.loanCriteria.UniqueRef,\r\n results.MatchingResults.length,\r\n results.LargestLoanResults.length,\r\n )\r\n .then((results) => {\r\n if (results) {\r\n this.selectedUser.NewUserEmailJourneyStarted = true;\r\n }\r\n });\r\n }\r\n this.restoreSelectedItems(selectedResults);\r\n })\r\n .catch((error) => {\r\n //this.matchingResults = [];\r\n //this.largestResults = [];\r\n })\r\n .finally(() => {\r\n this.fetchingLargest = false;\r\n this.fetchingMatches = false;\r\n this.loanCriteria.SaveQueryAndResults = originalSaveState;\r\n\r\n if (updateLoanLabels) {\r\n this.updateLoanLabels();\r\n }\r\n\r\n this.loadingData = false;\r\n this.isFilterUpdate = false;\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n // One or both of the promises were rejected, handle the error\r\n console.error(\"Failed to get user data: \", error);\r\n });\r\n }\r\n\r\n /**Update the loan label in the comparison results based on the loan label returned in the results\r\n * Primary purpose is to update the loan label when the show lender names button is toggled\r\n * */\r\n updateLoanLabels() {\r\n for (var i = 0; i < this.comparisonList.length; i++) {\r\n let resultIndex = this.summarySearchResults.findIndex(\r\n (item) => item.ProductID == this.comparisonList[i].SeniorProductID,\r\n );\r\n\r\n if (resultIndex > -1) {\r\n this.comparisonList[i].LoanLabel =\r\n this.summarySearchResults[resultIndex].LoanLabel;\r\n }\r\n }\r\n\r\n //This is user for shortlisting pdf\r\n this.prepareDataForShortlistPdf();\r\n }\r\n\r\n populateNewLeadInfo(role, data) {\r\n let userdetails = JSON.parse(data);\r\n let userFullName = userdetails.FullName;\r\n let spaceIndex = userFullName.indexOf(\" \");\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(\" \"));\r\n lastName = userFullName.substring(userFullName.indexOf(\" \") + 1);\r\n }\r\n\r\n this.newLeadFirstName = firstName;\r\n this.newLeadLastName = lastName;\r\n this.newLeadEmail = userdetails.Email;\r\n }\r\n\r\n restoreSelectedItems(selectedResults: SelectedResultDTO[]) {\r\n if (selectedResults) {\r\n selectedResults.forEach((item, index) => {\r\n let match;\r\n var found = false;\r\n // first compare whether the selectedResultDTO is already an active caseLender record, if so it MUST be kept\r\n if (this.caseLenders) {\r\n found = this.caseLenders.some((cl) => cl.ProductID == item.ProductId);\r\n }\r\n\r\n if (!found) {\r\n found = this.summarySearchResults.some(\r\n (result) =>\r\n result.ProductID === item.ProductId &&\r\n result.CaseLenderStatus != CaseLenderStateEnum.Rejected &&\r\n result.CaseLenderStatus != CaseLenderStateEnum.Withdrawn,\r\n );\r\n }\r\n // Keeping this here rather than using summarySearchResults (above) because otherwise comparison etc stops working as it relies on using LenderResultMinimalDTO\r\n if (found) {\r\n if (item.MenuId === 1) {\r\n match = this.matchingResults.find(\r\n (result) =>\r\n result.SeniorProductID === item.ProductId &&\r\n result.CalculatedBasedOnMatchingLoan === true,\r\n );\r\n } else if (item.MenuId === 2) {\r\n match = this.largestResults.find(\r\n (result) =>\r\n result.SeniorProductID === item.ProductId &&\r\n result.CalculatedBasedOnMatchingLoan === false,\r\n );\r\n }\r\n }\r\n\r\n if (match) {\r\n /* 'this.isFilterUpdate' condition is to fix the issue with wrong number display beside toggle button when using filter*/\r\n if (this.isFilterUpdate) {\r\n var comparematch = this.comparisonList.filter(\r\n (result) => result.SeniorProductID == item.ProductId,\r\n );\r\n var index = this.comparisonList.indexOf(comparematch[0]);\r\n if (index !== -1) {\r\n this.comparisonList[index] = match;\r\n } else {\r\n this.comparisonList.push(match);\r\n }\r\n } else {\r\n this.comparisonList.push(match);\r\n }\r\n\r\n if (index === 0) {\r\n this.selectedResultForAttachingToCase = match;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n //Show whose account is being accessed if admin is accessing client\r\n getEmailOfClientBeingAccessed(): string {\r\n if (\r\n this.selectedUser &&\r\n this.loanCriteria &&\r\n this.selectedUser.Id !== this.loanCriteria.UserId\r\n ) {\r\n return this.loanCriteria.OwnerUser;\r\n }\r\n }\r\n\r\n indexPopup(methodName: string) {\r\n this.$rootScope.$broadcast(methodName);\r\n }\r\n\r\n agreeTerms() {\r\n if (!this.selectedUser.Id) {\r\n //new user who opted in to receiving emails, socapture details\r\n this.loadingData = true;\r\n this.newUser.UserName = this.newUser.Email;\r\n this.newUser.LenderResultsTermsAgreed = true;\r\n this.newUser.AgreedToTermsAndPP = true;\r\n this.newUser.Roles = [\"Client\"];\r\n\r\n var orgCode;\r\n if (window.self == window.top) {\r\n orgCode = this.$cookies.get(\"org_code\");\r\n } else {\r\n orgCode = location.pathname.replace(\"/\", \"\");\r\n }\r\n if (orgCode) {\r\n this.newUser.ReferralOrgCode = orgCode;\r\n }\r\n\r\n // If we have an introducer code, let's set it.\r\n if (this.$cookies.get(\"introducer_code\")) {\r\n this.newUser.IntroducerCode = this.$cookies.get(\"introducer_code\");\r\n this.createTemporalyUser();\r\n } else {\r\n if (this.$cookies.get(\"invite_code\")) {\r\n this.guid = this.$cookies.get(\"invite_code\");\r\n }\r\n this.inviteService\r\n .checkIfRegisterUserWasInvited(this.newUser.Email, this.guid)\r\n .then((result) => {\r\n this.newUser.IntroducerCode = result;\r\n this.createTemporalyUser();\r\n });\r\n }\r\n } else if (\r\n this.selectedUser.Id &&\r\n !this.selectedUser.NewUserEmailJourneyStarted &&\r\n this.selectedUser.ApplicantDefinedRole == 0\r\n ) {\r\n this.loadingData = true;\r\n this.selectedUser.LenderResultsTermsAgreed = true;\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.loadingData = true;\r\n this.$user\r\n .addUpdate(this.selectedUser)\r\n .then((response) => {\r\n this.loanCriteria.UserId = this.selectedUser.Id;\r\n this.loanCriteria.User = this.selectedUser;\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n this.loanCriteria.SelectedResults = [];\r\n if (this.selectedUser.OrganisationReferralId != null) {\r\n this.loanCriteria.BrokerOrganisationId =\r\n this.selectedUser.OrganisationReferralId;\r\n }\r\n\r\n this.$DevelopmentInputService\r\n .saveSearch(this.loanCriteria)\r\n .then((savedSearchId) => {\r\n this.warningOff = true;\r\n this.go(\"/results/\" + savedSearchId);\r\n });\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n } else {\r\n //Logged in user, persist agreement to terms; persist that terms agreed.\r\n this.loadingData = true;\r\n this.selectedUser.LenderResultsTermsAgreed = true;\r\n\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.loadingData = true;\r\n this.$user\r\n .addUpdate(this.selectedUser)\r\n .then((response) => { })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n //if user is not logged in, make a note in rootScope not to show this message during this session\r\n if (!this.selectedUser.Id) {\r\n (this.$rootScope as any).lenderResultsIntroSeen = true;\r\n }\r\n }\r\n\r\n createTemporalyUser() {\r\n this.$user\r\n .createtemporaryuser(this.newUser)\r\n .then((user) => {\r\n this.newUser.ApplicantDefinedRole == 0;\r\n this.newUser.Roles = [];\r\n this.newUser.Roles.push(\"Client\");\r\n (this.$rootScope as any).selectedUser = user;\r\n this.$auth\r\n .login(\r\n this.newUser.Email,\r\n user.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n\r\n this.$cookies.put(\"user_firstname\", user.FirstName, {\r\n expires: expiry,\r\n });\r\n //Add loan to newly created temporary account\r\n this.loanCriteria.UserId = user.Id;\r\n this.loanCriteria.User = user;\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n this.loanCriteria.SelectedResults = [];\r\n\r\n this.loanCriteria.BrokerOrganisationId =\r\n user.DefaultBrokerOrganisationId;\r\n\r\n if (\r\n this.$routeParams.brokerUserId !== undefined &&\r\n this.$routeParams.brokerUserId != \"null\"\r\n ) {\r\n this.loanCriteria.BrokerUserId = this.$routeParams.brokerUserId;\r\n }\r\n\r\n if (this.$cookies.get(\"invite_code\")) {\r\n this.inviteService.checkIfInvitedIsUser(\r\n this.$cookies.get(\"invite_code\"),\r\n user.Id,\r\n );\r\n }\r\n\r\n this.$DevelopmentInputService\r\n .saveSearch(this.loanCriteria)\r\n .then((savedSearchId) => {\r\n this.warningOff = true;\r\n this.go(\"/results/\" + savedSearchId);\r\n });\r\n });\r\n })\r\n .catch((response) => {\r\n this.error = response.data;\r\n this.newUser.LenderResultsTermsAgreed = false;\r\n this.newUser.AgreedToTermsAndPP = false;\r\n (this.$rootScope as any).lenderResultsIntroSeen = false;\r\n this.loadingData = false;\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n lenderResultsIntroSeen(): boolean {\r\n if ((this.$rootScope as any).lenderResultsIntroSeen) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n captureNewUserEmail(): void {\r\n this.loadingData = true;\r\n }\r\n\r\n getCase() {\r\n this.loadingData = true;\r\n this.$CaseService\r\n .fetch(this.$routeParams.CaseId)\r\n .then((result) => {\r\n this.currentCase = result;\r\n this.productId = result.ProductID;\r\n this.productResultList = result.ProductResultList;\r\n this.caseLenderService\r\n .fetchByCaseId(this.currentCase.Id)\r\n .then((result) => {\r\n if (result) {\r\n this.caseLenders = result.filter(\r\n (cl) =>\r\n cl.CaseLenderState != CaseLenderStateEnum.Withdrawn &&\r\n cl.CaseLenderState != CaseLenderStateEnum.Rejected,\r\n );\r\n }\r\n });\r\n if (result.CaseStatus == 0 || result.CaseStatus == 1) {\r\n this.$CaseService.updateTubeMap(CaseStatusEnum.InProgress);\r\n } else {\r\n this.$CaseService.updateTubeMap(result.CaseStatus);\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n getCaseFromSearch(searchId: number) {\r\n this.$CaseService\r\n .getcasefromsearch(searchId)\r\n .then((result) => {\r\n this.currentCase = result;\r\n this.caseid = result.Id;\r\n if (this.caseid) {\r\n this.isDIPClicked = true;\r\n }\r\n this.productId = result.ProductID;\r\n this.productResultList = result.ProductResultList;\r\n\r\n if (result.CaseStatus == 0 || result.CaseStatus == 1) {\r\n this.$CaseService.updateTubeMap(CaseStatusEnum.InProgress);\r\n } else {\r\n this.$CaseService.updateTubeMap(result.CaseStatus);\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n // updateGuidanceState() {\r\n // this.guidanceCheckbox =\r\n // this.$cookies.get(\"guidance\") === \"on\" ||\r\n // this.$cookies.get(\"guidance\") === undefined;\r\n\r\n // // Update tour settings\r\n // let tourEnabled = this.$cookies.get(\"tourEnabled\");\r\n // if (\r\n // (tourEnabled == \"true\" || tourEnabled === undefined) &&\r\n // this.guidanceCheckbox\r\n // ) {\r\n // this.tourEnabled = true;\r\n // } else {\r\n // this.tourEnabled = false;\r\n // }\r\n\r\n // //if (this.guidanceCheckbox) {\r\n // // this.startTour();\r\n // //}\r\n // }\r\n\r\n // turnOffGuidance() {\r\n // this.guidanceCheckbox = false;\r\n // var expiryDate = new Date();\r\n // expiryDate.setDate(expiryDate.getDate() + 365);\r\n // this.$cookies.put(\"guidance\", \"off\", { expires: expiryDate });\r\n // this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n // }\r\n\r\n // getGuidanceSwitchState() {\r\n // if (!this.$cookies.get(\"guidance\")) {\r\n // this.guidanceCheckbox = true;\r\n // } else if (this.$cookies.get(\"guidance\") === \"on\") {\r\n // this.guidanceCheckbox = true;\r\n // } else if (this.$cookies.get(\"guidance\") === \"off\") {\r\n // this.guidanceCheckbox = false;\r\n // } else {\r\n // this.guidanceCheckbox = true;\r\n // }\r\n // return this.guidanceCheckbox;\r\n // }\r\n\r\n // recordGuidanceCookie() {\r\n // var guidanceSwitchState: string;\r\n // var expiryDate = new Date();\r\n // expiryDate.setDate(expiryDate.getDate() + 365);\r\n // if (this.guidanceCheckbox == true) {\r\n // guidanceSwitchState = \"on\";\r\n // } else {\r\n // guidanceSwitchState = \"off\";\r\n // }\r\n // this.$cookies.put(\"guidance\", guidanceSwitchState, { expires: expiryDate });\r\n // this.$rootScope.$broadcast(\"guidanceStateChanged\");\r\n // }\r\n\r\n //updateCase(offer: LenderResultMinimalDTO, productResultList: number) {\r\n // this.switchingProduct = true;\r\n // this.selectedResultForAttachingToCase = offer;\r\n // this.caseUpdated = true;\r\n // this.loadingData = true;\r\n // this.$CaseService.setProductOnCase(this.caseid, this.selectedResultForAttachingToCase.Id, productResultList).then((response) => {\r\n // if (response === true) {\r\n // this.currentProductOnCase = this.selectedResultForAttachingToCase.LoanLabel;\r\n // this.productId = this.selectedResultForAttachingToCase.Id;\r\n // this.productResultList = productResultList;\r\n // }\r\n // }).finally(() => {\r\n // this.loadingData = false;\r\n // this.switchingProduct = false;\r\n // this.returnToCase();\r\n // });\r\n //}\r\n\r\n setSelectedItem(offer: LenderResultMinimalDTO) {\r\n this.matchingResults.forEach((item) => {\r\n item.SelectedItem = false;\r\n });\r\n this.largestResults.forEach((item) => {\r\n item.SelectedItem = false;\r\n });\r\n offer.SelectedItem = true;\r\n this.selectedResultForAttachingToCase = offer;\r\n }\r\n\r\n toggleMezzanine() {\r\n this.mezzanineLenders = !this.mezzanineLenders;\r\n this.fetchingMezzanine = true;\r\n // Do some stuff\r\n }\r\n\r\n toggleEquity() {\r\n this.equityLenders = !this.equityLenders;\r\n this.fetchingEquity = true;\r\n // Do some stuff\r\n }\r\n\r\n comparisonContains(item: LenderResultSummaryDTO): boolean {\r\n var match = this.getLenderResultMinimalDTO(item);\r\n\r\n let found = !!this.comparisonList.find((result, index) => {\r\n return result === match;\r\n });\r\n\r\n if (found) {\r\n }\r\n\r\n return found;\r\n }\r\n\r\n checkLender(item: LenderResultSummaryDTO): boolean {\r\n if (this.userLenderId == item.LenderID) return true;\r\n return false;\r\n }\r\n\r\n selectionOrderNumber(item: LenderResultSummaryDTO) {\r\n //let found = !!this.comparisonList.find((result, index) => {\r\n // return result === item;\r\n //});\r\n var match = this.getLenderResultMinimalDTO(item);\r\n var order = this.comparisonList.indexOf(match) + 1;\r\n\r\n if (order === 0) {\r\n return \" \";\r\n }\r\n\r\n /* Adds number of active applications */\r\n return (\r\n order +\r\n (this.caseLendersNotInResults ? this.caseLendersNotInResults.length : 0)\r\n );\r\n }\r\n\r\n toggleLenderComparisonSelection(item: LenderResultSummaryDTO) {\r\n /** This will check if the result shared with new user is active */\r\n var isActive = this.isResultActive();\r\n\r\n if (isActive) {\r\n // Find Lender offer within the original arrays to use on the compare view\r\n var match = this.getLenderResultMinimalDTO(item);\r\n\r\n var menuId = match.CalculatedBasedOnMatchingLoan === true ? 1 : 2;\r\n\r\n if (this.loanCriteria) {\r\n if (!this.loanCriteria.SelectedResults) {\r\n this.loanCriteria.SelectedResults = [];\r\n }\r\n let selectedResultMatches: SelectedResultDTO[] =\r\n this.loanCriteria.SelectedResults.filter((result, index) => {\r\n return (\r\n result.ProductId === match.SeniorProductID &&\r\n result.MenuId === menuId\r\n );\r\n });\r\n\r\n let comparisonMatches: LenderResultMinimalDTO[] =\r\n this.comparisonList.filter((result, index) => {\r\n return result === match;\r\n });\r\n\r\n // Handle selected results for comparison or selection.\r\n if (!selectedResultMatches || selectedResultMatches.length === 0) {\r\n this.loanCriteria.SelectedResults.push({\r\n ProductId: match.SeniorProductID,\r\n DevelopmentInputId: this.loanCriteria.Id,\r\n MenuId: menuId,\r\n } as SelectedResultDTO);\r\n // If this is the first item, let's mark it as the selectedItem\r\n if (this.loanCriteria.SelectedResults.length === 1) {\r\n this.productResultList = menuId;\r\n this.setSelectedItem(match);\r\n }\r\n } else {\r\n selectedResultMatches.forEach((value, index) => {\r\n this.loanCriteria.SelectedResults.splice(\r\n this.loanCriteria.SelectedResults.indexOf(value),\r\n 1,\r\n );\r\n });\r\n }\r\n\r\n if (!comparisonMatches || comparisonMatches.length === 0) {\r\n this.comparisonList.push(match);\r\n this.eventLogService.logEvent(\r\n `SHORTLISTING-RESULT`,\r\n EventLogEnum.Shortlisting,\r\n ProductTypeEnum.Development,\r\n this.$routeParams.uniqueId ? 0 : this.loanCriteria.Id,\r\n this.$routeParams.uniqueId ? this.$routeParams.uniqueId : \"\",\r\n item.ProductID.toString()\r\n );\r\n } else {\r\n comparisonMatches.forEach((value, index) => {\r\n this.comparisonList.splice(this.comparisonList.indexOf(value), 1);\r\n });\r\n this.eventLogService.logEvent(\r\n `DESELECTING-SHORTHLISTED-RESULT`,\r\n EventLogEnum.Shortlisting,\r\n ProductTypeEnum.Development,\r\n this.$routeParams.uniqueId ? 0 : this.loanCriteria.Id,\r\n this.$routeParams.uniqueId ? this.$routeParams.uniqueId : \"\",\r\n item.ProductID.toString()\r\n );\r\n }\r\n }\r\n }\r\n\r\n this.loanCriteria.ComparisonList = this.comparisonList;\r\n }\r\n\r\n viewOffer(offer: LenderResultDTO) {\r\n this.selectedResult = offer;\r\n }\r\n\r\n goCompare() {\r\n /** This will check if the result shared with new user is active */\r\n var isActive = this.isResultActive();\r\n if (isActive) {\r\n this.warningOff = true;\r\n //We are setting this value to avoid displaying save modal while navigating to compare screen without saving search\r\n this.doubleWarningOff = true;\r\n // Makeing sure all the old data is deleted\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"UniqueId\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n sessionStorage.removeItem(\"TempSavedResults\");\r\n\r\n sessionStorage.setItem(\r\n \"ComparisonList\",\r\n JSON.stringify(this.getSummaryComparisonList()),\r\n );\r\n sessionStorage.setItem(\"LoanCriteria\", JSON.stringify(this.loanCriteria));\r\n\r\n if (this.uniqueId) {\r\n sessionStorage.setItem(\"UniqueId\", this.uniqueId);\r\n }\r\n\r\n // temporarily put all results into saved results so the comparison controller can use them.\r\n\r\n let allResults: LenderResultMinimalDTO[] = [];\r\n this.matchingResults.forEach((result) => {\r\n allResults.push(result);\r\n });\r\n this.largestResults.forEach((result) => {\r\n allResults.push(result);\r\n });\r\n\r\n sessionStorage.setItem(\"TempSavedResults\", JSON.stringify(allResults));\r\n\r\n if (this.searchid && this.caseid) {\r\n this.$location.path(\"compare/\" + this.searchid + \"/\" + this.caseid);\r\n } else if (this.searchid) {\r\n this.$location.path(\"compare/\" + this.searchid);\r\n } else {\r\n this.$location.path(\"compare/\");\r\n }\r\n }\r\n }\r\n\r\n viewSingleLoan(item: LenderResultSummaryDTO) {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.warningOff = true;\r\n\r\n //Removed in favour of summaryComparisonList\r\n //this.comparisonList = [];\r\n\r\n //// Find Lender offer within the original arrays to use on the compare view\r\n //var match = this.getLenderResultMinimalDTO(item);\r\n\r\n //this.comparisonList.push(match);\r\n\r\n this.summaryComparisonList = [];\r\n this.summaryComparisonList.push(item);\r\n\r\n this.goCompare();\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n }\r\n\r\n /**\r\n * Processes the clicking of the \"View Eligibility\" anchor/button and index to show on the row number\r\n * @param item and index\r\n */\r\n viewEligibility(item: LenderResultSummaryDTO) {\r\n event.preventDefault(); // prevents default behaviour of href\r\n this.showProductNote = true;\r\n this.offer = item;\r\n this.loanLabel = item.LoanLabel;\r\n this.productNote = item.AdditionalProductInfo;\r\n }\r\n\r\n returnToCase() {\r\n if (this.comparisonList.length > 0) {\r\n this.loadingData = true;\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 0,\r\n false,\r\n \"\",\r\n \"\",\r\n \"\",\r\n this.GetSelectedLabel(),\r\n )\r\n .then((response) => {\r\n if (this.isShortlistingMore) {\r\n // copy newly selected products/lenders to caselender\r\n this.$CaseService\r\n .shortlistMoreLenders(this.caseid, this.hasSearchChanged)\r\n .then((response) => {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n });\r\n } else {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n }\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n goWarningOff(path): void {\r\n this.warningOff = true;\r\n LoginController.searchInProgress = true;\r\n (this.$rootScope as any).loginRedirectPath = this.$location.url();\r\n this.go(path);\r\n }\r\n\r\n backToClientSearches(): void {\r\n (this.$rootScope as any).clientUsernameBeingViewed =\r\n this.loanCriteria.OwnerUser;\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.go(\"/userdashboard\");\r\n }\r\n\r\n //setSelectedResultsFromComparisonList() {\r\n // this.loanCriteria.SelectedResults = this.comparisonList.map((item, index) => {\r\n // return {\r\n // DevelopmentInputId: item.DevelopmentInputID,\r\n // ProductId: item.SeniorProductID,\r\n // MenuId: null\r\n // } as SelectedResultDTO;\r\n // });\r\n //}\r\n\r\n register(\r\n createCase: boolean = false,\r\n productResultList: number,\r\n introducingAClient?: boolean,\r\n preventRedirect?: boolean,\r\n ) {\r\n this.loadingData = true;\r\n this.isProceedClicked = true;\r\n // Set the selected or \"preferred\" result.\r\n productResultList = this.productResultList;\r\n\r\n //this.setSelectedResultsFromComparisonList();\r\n (this.$rootScope as any).productResultList = productResultList;\r\n if (!this.selectedUser.Id || this.selectedUser.Id === null) {\r\n (this.$rootScope as any).selectedResultForAttachingToCase =\r\n this.selectedResultForAttachingToCase;\r\n this.loanCriteria.SaveCase = createCase;\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n var path: string = \"/register\";\r\n\r\n if (\r\n this.$routeParams.brokerOrgUniqueRef !== undefined &&\r\n this.$routeParams.brokerOrgUniqueRef != \"null\" &&\r\n this.$routeParams.brokerUserId !== undefined &&\r\n this.$routeParams.brokerUserId != \"null\"\r\n ) {\r\n path +=\r\n \"/\" +\r\n this.$routeParams.brokerOrgUniqueRef +\r\n \"/\" +\r\n this.$routeParams.brokerUserId;\r\n }\r\n\r\n this.$location.path(path);\r\n } else {\r\n this.loanCriteria.UserId = this.loanCriteria.UserId\r\n ? this.loanCriteria.UserId\r\n : this.selectedUser.Id;\r\n this.loanCriteria.User = this.loanCriteria.User\r\n ? this.loanCriteria.User\r\n : this.selectedUser;\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n this.loanCriteria.SaveCase = createCase;\r\n if (this.isLender) {\r\n this.loanCriteria.LenderUserId = this.selectedUser.Id;\r\n }\r\n // if broker info has been sent to the page then set this to the search\r\n if (\r\n this.$routeParams.brokerOrgUniqueRef !== undefined &&\r\n this.$routeParams.brokerOrgUniqueRef != \"null\"\r\n ) {\r\n this.organisationService\r\n .getOrganisationIdByUniqueRef(this.$routeParams.brokerOrgUniqueRef)\r\n .then((orgId: number) => {\r\n this.loanCriteria.BrokerOrganisationId = orgId;\r\n\r\n if (\r\n this.$routeParams.brokerUserId !== undefined &&\r\n this.$routeParams.brokerUserId != \"null\"\r\n ) {\r\n this.loanCriteria.BrokerUserId = this.$routeParams.brokerUserId;\r\n } else {\r\n this.$user\r\n .GetOrganisationAdminUserId(orgId)\r\n .then((adminUserId: string) => {\r\n this.loanCriteria.BrokerUserId = adminUserId;\r\n });\r\n }\r\n\r\n // Save Search\r\n this.saveSearch(createCase, productResultList, preventRedirect);\r\n });\r\n } else {\r\n // Save Search\r\n this.saveSearch(createCase, productResultList, preventRedirect);\r\n }\r\n if (createCase == true) {\r\n this.loanCriteria.IsFullCase = true;\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n }\r\n }\r\n }\r\n\r\n saveSearch(\r\n createCase: boolean,\r\n productResultList: number,\r\n preventRedirect?: boolean,\r\n ) {\r\n if (this.selectedResultForAttachingToCase) {\r\n this.loanCriteria.SelectedProduct =\r\n this.selectedResultForAttachingToCase.LI_LoanProduct;\r\n }\r\n this.loadingData = true;\r\n // We always want to save at this point.\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n if (this.searchName != null && this.searchName.length > 0) {\r\n this.loanCriteria.SearchName = this.searchName;\r\n }\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 0,\r\n false,\r\n \"\",\r\n \"\",\r\n \"\",\r\n this.GetSelectedLabel(),\r\n )\r\n .then((response) => {\r\n this.tempLoanCriteria = { ...this.loanCriteria };\r\n if (createCase === true) {\r\n //case creation\r\n //this.sendEnquiry();\r\n this.$CaseService\r\n .promoteandmigratetodeal(\r\n response.Id,\r\n this.selectedResultForAttachingToCase.LI_LoanProduct,\r\n productResultList,\r\n )\r\n .then((newCaseId) => {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n this.$cookies.remove(\"caseLandingDontShowAgain\");\r\n //this.$CaseService.getcasefromsearch(response.Id).then((caseobject) => {\r\n if (newCaseId) {\r\n this.$location.path(\r\n \"/devfinancecasedashboard/\" + newCaseId + \"/\" + true,\r\n );\r\n } else {\r\n this.isProceedClicked = false;\r\n }\r\n //});\r\n })\r\n .catch((response) => {\r\n this.isProceedClicked = false;\r\n });\r\n } else {\r\n //if (introducingAClient) {\r\n // this.introducerSendResultsToClient(response.Id);\r\n //} else {\r\n\r\n if (!preventRedirect) {\r\n if (\r\n (this.isSaveorSaveAsClicked || this.isSaveClientSearch) &&\r\n this.selectedUser.TemporaryAccount != true\r\n ) {\r\n this.doubleWarningOff = true;\r\n this.showSaveResults = null;\r\n\r\n if (this.prevPath) {\r\n this.$location.path(this.prevPath);\r\n } else {\r\n this.$location.path(\"/results/\" + response.Id);\r\n }\r\n } else {\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n }\r\n\r\n //}\r\n }\r\n })\r\n .catch((response) => {\r\n this.isProceedClicked = false;\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n this.isClicked = false;\r\n this.isProceedClicked = false;\r\n this.newSearch = false;\r\n });\r\n }\r\n\r\n // TODO JLH - don't think this is in use\r\n sendEnquiry(): void {\r\n this.sendingmessage = true;\r\n this.sentmessage = false;\r\n this.enquiryTelephone = this.selectedUser.PhoneNumber;\r\n this.enquiryEmail = this.selectedUser.Email;\r\n this.enquiryBody =\r\n \"Please send me more information about loan option \" +\r\n this.GetSelectedLabel();\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 0,\r\n true,\r\n this.enquiryBody,\r\n this.enquiryEmail,\r\n this.enquiryTelephone,\r\n this.GetSelectedLabel(),\r\n )\r\n .then((response2) => {\r\n this.sendingmessage = false;\r\n this.sentmessage = true;\r\n });\r\n }\r\n\r\n private GetSelectedLabel() {\r\n var selectedlabel = \"\";\r\n if (\r\n this.selectedResultForAttachingToCase &&\r\n this.selectedResultForAttachingToCase.LoanLabel\r\n ) {\r\n selectedlabel = this.selectedResultForAttachingToCase.LoanLabel;\r\n }\r\n return selectedlabel;\r\n }\r\n\r\n saveUser(): void {\r\n if (this.selectedUser.Id == null) {\r\n this.selectedUser.Id = \"\";\r\n this.selectedUser.Roles = [];\r\n this.selectedUser.Roles.push(\"Client\");\r\n }\r\n if (!this.selectedUser.UserName) {\r\n this.selectedUser.UserName = this.selectedUser.Email; //set user name to be same as email address for now\r\n }\r\n this.loanCriteria.User = this.selectedUser;\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n // this.$user.addUpdate(this.selectedUser).then((response) => {\r\n this.loadingData = true;\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 0,\r\n false,\r\n \"\",\r\n \"\",\r\n \"\",\r\n this.GetSelectedLabel(),\r\n )\r\n .then((response) => {\r\n this.selectedUser.Id = response.UserId;\r\n this.showsaveinfo = false;\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n // tourNext(): void {\r\n // this.tourState.tourStep++;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // }\r\n // tourBack(): void {\r\n // this.tourState.tourStep--;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // }\r\n\r\n // tourSkip(): void {\r\n // this.tourEnabled = false;\r\n // this.$cookies.put(\"tourEnabled\", \"false\");\r\n // this.$cookies.remove(\"tourStep\");\r\n // }\r\n\r\n // startTour(): void {\r\n // this.tourState.tourStep = 1;\r\n // this.tourState.tourTotalSteps = 0;\r\n // this.$cookies.put(\"tourStep\", this.tourState.tourStep);\r\n // this.tourEnabled = true;\r\n // this.$cookies.put(\"tourEnabled\", \"true\");\r\n // }\r\n\r\n applyForLoan(offer, productResultList: number) {\r\n /** This will check if the result shared with new user is active */\r\n var isActive = this.isResultActive();\r\n if (isActive) {\r\n //this.productResultList = productResultList;\r\n //this.SetSelectedItem(offer);\r\n if (\r\n this.searchid &&\r\n this.loanCriteria.SearchName.startsWith(\"My Development Finance Search\")\r\n ) {\r\n this.showSaveResults = 2;\r\n } else if (this.searchid) {\r\n this.register(true, this.productResultList);\r\n } else {\r\n if (\r\n this.clientFirstName != null ||\r\n this.clientSurname != null ||\r\n this.clientEmail != null ||\r\n this.clientPhoneNumber != null\r\n ) {\r\n this.loanCriteria.IntroduceeFirstName = this.clientFirstName;\r\n this.loanCriteria.IntroduceeSurname = this.clientSurname;\r\n this.loanCriteria.IntroduceeEmail = this.clientEmail;\r\n this.loanCriteria.IntroduceePhone = this.clientPhoneNumber;\r\n }\r\n\r\n this.showSaveResults = 2;\r\n }\r\n }\r\n }\r\n\r\n showSaveResultsPopup() {\r\n this.showSaveResults = 1;\r\n }\r\n\r\n showSaveCasePopup() {\r\n this.showSaveResults = 2;\r\n }\r\n\r\n changeSearch() {\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n (this.$rootScope as any).snapshotLoanCriteria = this.loanCriteria;\r\n this.warningOff = true;\r\n sessionStorage.setItem(\"skip\", \"true\");\r\n if (this.caseid) {\r\n this.go(\"/criteria/\" + this.searchid + \"/\" + this.caseid);\r\n } else if (this.searchid) {\r\n this.go(\"/criteria/\" + this.searchid);\r\n } else if (this.isreferredSearch) {\r\n this.$location.path(\r\n \"/referredsearchcriteria/\" +\r\n this.$routeParams.uniqueId +\r\n \"/\" +\r\n 0 +\r\n \"/\" +\r\n 1,\r\n );\r\n } else {\r\n this.go(\"/criteria\");\r\n }\r\n }\r\n\r\n debugSearch() {\r\n const stringJSON = JSON.stringify(this.loanCriteria);\r\n navigator.clipboard\r\n .writeText(stringJSON)\r\n .then()\r\n .catch((e) => console.log(e));\r\n }\r\n\r\n /**Processing for Net Loan Required input field OnBlur */\r\n netLoanRequiredOnBlur() {\r\n //wait to the debounce to update ng-model\r\n setTimeout(() => {\r\n // When the Net Loan required amount is empty or 0 then set the Maximum Loan required toggle to TRUE\r\n if (\r\n !this.loanCriteria.CI_Dev_LoanReq ||\r\n this.loanCriteria.CI_Dev_LoanReq == 0 ||\r\n String(this.loanCriteria.CI_Dev_LoanReq) == \"\"\r\n ) {\r\n this.isMaximumLoanRequired = true;\r\n }\r\n }, 1000);\r\n }\r\n\r\n updateSearchViaSlider(isAdminDebugValueChanged: boolean = false): void {\r\n /** This will check if the result shared with new user is active */\r\n var isActive = this.isResultActive();\r\n if (isActive && !this.showPostcodeErrorMessage) {\r\n this.loadingData = true;\r\n\r\n // Set criteria properties to 0 that have been cleared by the user e.g. backspace or delete has been used\r\n if (\r\n (!this.loanCriteria.CI_Dev_LoanReq &&\r\n this.loanCriteria.CI_Dev_LoanReq != 0) ||\r\n String(this.loanCriteria.CI_Dev_LoanReq) == \"\"\r\n ) {\r\n this.loanCriteria.CI_Dev_LoanReq = 0;\r\n }\r\n\r\n if (\r\n (!this.loanCriteria.CI_Dev_LoanTermReq &&\r\n this.loanCriteria.CI_Dev_LoanTermReq != 0) ||\r\n String(this.loanCriteria.CI_Dev_LoanTermReq) == \"\"\r\n ) {\r\n this.loanCriteria.CI_Dev_LoanTermReq = 0;\r\n }\r\n\r\n if (\r\n (!this.loanCriteria.CI_Dev_BuildTerm &&\r\n this.loanCriteria.CI_Dev_BuildTerm != 0) ||\r\n String(this.loanCriteria.CI_Dev_BuildTerm) == \"\"\r\n ) {\r\n this.loanCriteria.CI_Dev_BuildTerm = 0;\r\n }\r\n\r\n if (\r\n (!this.loanCriteria.CI_GDV && this.loanCriteria.CI_GDV != 0) ||\r\n String(this.loanCriteria.CI_GDV) == \"\"\r\n ) {\r\n this.loanCriteria.CI_GDV = 0;\r\n }\r\n\r\n if (\r\n (!this.loanCriteria.CI_Dev_BuildCosts &&\r\n this.loanCriteria.CI_Dev_BuildCosts != 0) ||\r\n String(this.loanCriteria.CI_Dev_BuildCosts) == \"\"\r\n ) {\r\n this.loanCriteria.CI_Dev_BuildCosts = 0;\r\n }\r\n\r\n this.updatedResultsWithSlider =\r\n this.hasSearchChanged =\r\n this.hasCriteriaChanged =\r\n true;\r\n\r\n if (isAdminDebugValueChanged && this.isAdmin) {\r\n this.hasCriteriaChanged = false;\r\n }\r\n\r\n this.clearSelected();\r\n\r\n this.updateResults();\r\n }\r\n }\r\n\r\n clearSelected() {\r\n this.comparisonList = [];\r\n\r\n this.loanCriteria.SelectedResults = [];\r\n }\r\n\r\n cancelSavePopup() {\r\n this.showSaveResults = null;\r\n this.loanCriteria.SearchName = this.searchNameCache;\r\n }\r\n\r\n /* saveAs() {\r\n this.isClicked = true;\r\n this.isSaveorSaveAsClicked = true;\r\n delete this.loanCriteria.Id;\r\n delete this.loanCriteria.IsFullCase;\r\n delete this.loanCriteria.UniqueRef;\r\n this.register(false, this.productResultList);\r\n }*/\r\n\r\n doRenameSearch() {\r\n //this.register(false, this.productResultList, false, true);\r\n if (this.$routeParams.SearchId) {\r\n this.$DevelopmentInputService\r\n .addUpdate(this.loanCriteria)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n } else if (\r\n this.$routeParams.uniqueId !== undefined &&\r\n this.$routeParams.uniqueId != \"null\"\r\n ) {\r\n var result = {} as DevelopmentWithNoLoginDTO;\r\n (Object).assign(result, this.loanCriteria);\r\n this.$DevelopmentInputWithNoLoginService\r\n .saveChangesToReferredSearch(result, this.$routeParams.uniqueId)\r\n .then((response) => {\r\n this.toggleEditSearchName = false;\r\n });\r\n } else {\r\n this.toggleEditSearchName = false;\r\n }\r\n }\r\n\r\n emailChange() {\r\n if (this.error) {\r\n this.error = \"\";\r\n }\r\n }\r\n\r\n videotour() {\r\n this.showVideo = true;\r\n }\r\n\r\n videopause(id) {\r\n this.showVideo = false;\r\n let containerElement = document.getElementById(id);\r\n let iframe_tag = containerElement.querySelector(\"iframe\");\r\n if (iframe_tag) {\r\n let iframeSrc = iframe_tag.src;\r\n iframe_tag.src = iframeSrc;\r\n }\r\n }\r\n\r\n updateLoanRequiredValue() {\r\n if (this.isMaximumLoanRequired) {\r\n if (this.loanCriteria.CI_Dev_LoanReq) {\r\n this.tempLoanRequired = this.loanCriteria.CI_Dev_LoanReq;\r\n }\r\n this.loanCriteria.CI_Dev_LoanReq = 0;\r\n this.updateSearchViaSlider();\r\n } else {\r\n this.loanCriteria.CI_Dev_LoanReq = this.tempLoanRequired;\r\n this.updateSearchViaSlider();\r\n }\r\n }\r\n\r\n /**\r\n * Finds the product in the Summary DTO and matches it to the original LenderResultMinimalDTOs\r\n * This is needed following the resdesign of the Search Results view and to keep the other views\r\n * functioning with minimal refactoring/impact\r\n * @param summaryDTO\r\n */\r\n getLenderResultMinimalDTO(summaryDTO: LenderResultSummaryDTO) {\r\n // Find Lender offer within the original arrays to use on the compare view\r\n let match: LenderResultMinimalDTO;\r\n if (summaryDTO.IsMatching === true) {\r\n match = this.matchingResults.find(\r\n (result) => result.SeniorProductID === summaryDTO.ProductID,\r\n );\r\n } else if (summaryDTO.IsMatching === false) {\r\n match = this.largestResults.find(\r\n (result) => result.SeniorProductID === summaryDTO.ProductID,\r\n );\r\n }\r\n\r\n // Overriding the loan label with the Lender Generic name\r\n match.LoanLabel = summaryDTO.LoanLabel;\r\n\r\n return match;\r\n }\r\n\r\n CalcProfessionalCostsAndCharges(): number {\r\n if (this.loanCriteria) {\r\n var res: number = 0;\r\n if (this.loanCriteria.DI_BreakDownBuildCosts) {\r\n if (this.loanCriteria.CI_Dev_ProfPlanning) {\r\n res += Number(this.loanCriteria.CI_Dev_ProfPlanning);\r\n }\r\n if (this.loanCriteria.CI_Dev_ProfQS) {\r\n res += Number(this.loanCriteria.CI_Dev_ProfQS);\r\n }\r\n if (this.loanCriteria.DI_BuildProjectManag) {\r\n res += Number(this.loanCriteria.DI_BuildProjectManag);\r\n }\r\n if (this.loanCriteria.CI_Dev_S106CIL) {\r\n res += Number(this.loanCriteria.CI_Dev_S106CIL);\r\n }\r\n if (this.loanCriteria.DI_BuildMechEng) {\r\n res += Number(this.loanCriteria.DI_BuildMechEng);\r\n }\r\n if (this.loanCriteria.DI_BuildStrucEng) {\r\n res += Number(this.loanCriteria.DI_BuildStrucEng);\r\n }\r\n if (this.loanCriteria.DI_BuildPartyWall) {\r\n res += Number(this.loanCriteria.DI_BuildPartyWall);\r\n }\r\n if (this.loanCriteria.DI_BuildLandscaping) {\r\n res += Number(this.loanCriteria.DI_BuildLandscaping);\r\n }\r\n if (this.loanCriteria.DI_BuildWarranty) {\r\n res += Number(this.loanCriteria.DI_BuildWarranty);\r\n }\r\n if (this.loanCriteria.DI_BuildDemolition) {\r\n res += Number(this.loanCriteria.DI_BuildDemolition);\r\n }\r\n if (this.loanCriteria.DI_BuildOtherCosts) {\r\n res += Number(this.loanCriteria.DI_BuildOtherCosts);\r\n }\r\n } else {\r\n if (this.loanCriteria.CI_Dev_AdditionalOngoingCosts) {\r\n res += Number(this.loanCriteria.CI_Dev_AdditionalOngoingCosts);\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n }\r\n\r\n CalcPurchaseAdditionalCosts(): number {\r\n if (this.loanCriteria) {\r\n var res: number = 0;\r\n\r\n if (this.loanCriteria.CI_Dev_SDLT) {\r\n res += Number(this.loanCriteria.CI_Dev_SDLT);\r\n }\r\n if (this.loanCriteria.DI_PurchaseAgentFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseAgentFees);\r\n }\r\n if (this.loanCriteria.DI_PurchaseLegalFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseLegalFees);\r\n }\r\n if (this.loanCriteria.DI_PurchaseOtherFees) {\r\n res += Number(this.loanCriteria.DI_PurchaseOtherFees);\r\n }\r\n\r\n return res;\r\n }\r\n }\r\n\r\n /**Close the search summary panel */\r\n showSearchSummary(show: boolean) {\r\n (this.$rootScope as any).hideSearchSummary = !show;\r\n this.sliderShown = show;\r\n }\r\n\r\n contingencyChanged() {\r\n this.recalcCosts(\"CI_Dev_Contingency\");\r\n this.updateSearchViaSlider();\r\n }\r\n\r\n getSearchResultCount() {\r\n if (this.summarySearchResults) {\r\n return this.summarySearchResults.length;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n getSearchLenderCount() {\r\n this.lenderService\r\n .getTotalLenders(ProductFamilyEnum.Development)\r\n .then((result) => {\r\n this.totalLender = result;\r\n });\r\n }\r\n\r\n /** user lookup for newsearch popup */\r\n userLookupForNewSearch(userSearchTerm: string) {\r\n this.loadingData = true;\r\n this.$user\r\n .searchByEmail(userSearchTerm)\r\n .then((response) => {\r\n if (this.isBroker) {\r\n this.existingUsers = response.filter(\r\n (x) =>\r\n x.OrganisationReferralId == this.selectedUser.OrganisationId &&\r\n !x.OrganisationId &&\r\n !x.IsOrganisationAdmin,\r\n );\r\n } else {\r\n this.existingUsers = response;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n /** closes new search pop up*/\r\n cancelNewSearch() {\r\n this.newSearch = false;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n delete this.clientId;\r\n this.existingborrower = null;\r\n this.showClientDetails = false;\r\n this.selecteduserName = null;\r\n this.sharedSearch = false;\r\n if (this.tempSearchName) {\r\n this.loanCriteria.SearchName = this.tempSearchName;\r\n this.tempSearchName = \"\";\r\n }\r\n }\r\n\r\n sendResultsToClient(notifyBorrower, reloadSearch = false) {\r\n if (this.isSaveAsClicked) {\r\n this.saveSaveAsSearch(true);\r\n } else {\r\n this.loadingData = true;\r\n this.newSearch = false;\r\n this.existingborrower = null;\r\n this.showClientDetails = false;\r\n if (this.searchName != null && this.searchName.length > 0) {\r\n this.loanCriteria.SearchName = this.searchName;\r\n }\r\n\r\n this.userService\r\n .getUserDetailsByEmailIfExists(this.clientEmail)\r\n .then((user: ApplicationUserDTO) => {\r\n if (user == null) {\r\n this.loanCriteria.UserId = null;\r\n this.$IntroducerService\r\n .sendResultsToClient(\r\n this.loanCriteria,\r\n this.clientFirstName,\r\n this.clientSurname,\r\n this.clientEmail,\r\n notifyBorrower,\r\n this.clientPhoneNumber,\r\n )\r\n .then((success) => {\r\n this.searchReference = success;\r\n if (reloadSearch) {\r\n this.warningOff = true;\r\n this.go(\"/referredSearch/\" + this.searchReference);\r\n } else {\r\n this.showSaveResults = 6;\r\n }\r\n });\r\n } else {\r\n this.loanCriteria.User = user;\r\n this.clientId = user.Id;\r\n this.$DevelopmentInputService\r\n .sendResultsToExistingClient(\r\n this.loanCriteria,\r\n this.clientFirstName,\r\n this.clientSurname,\r\n this.clientEmail,\r\n this.clientId,\r\n notifyBorrower,\r\n this.clientPhoneNumber,\r\n )\r\n .then((success) => {\r\n this.newSearchId = success;\r\n if (reloadSearch) {\r\n this.warningOff = true;\r\n this.go(\"/results/\" + this.newSearchId);\r\n } else {\r\n this.showSaveResults = 7;\r\n }\r\n });\r\n }\r\n })\r\n .finally(() => {\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n delete this.clientId;\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n /* sendResultsToExistingClient(notifyBorrower: boolean = true) {\r\n\r\n this.$DevelopmentInputService.sendResultsToExistingClient(this.loanCriteria, this.clientFirstName, this.clientSurname, this.clientEmail, this.clientId, notifyBorrower, this.clientPhoneNumber).then((success) => {\r\n this.newSearchId = success;\r\n this.loadingData = false;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n delete this.clientId;\r\n this.showSaveResults = 7; \r\n });\r\n }\r\n\r\n introducerSendResultsToClient(notifyBorrower: boolean = true) {\r\n // remove the user id because otherwise the client won't be able to see the search on their dashboard\r\n this.loanCriteria.UserId = null;\r\n this.$IntroducerService.sendResultsToClient(this.loanCriteria, this.clientFirstName, this.clientSurname, this.clientEmail, notifyBorrower, this.clientPhoneNumber).then((success) => {\r\n this.loadingData = false;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n\r\n if (this.isBroker) {\r\n this.searchReference = success;\r\n this.showSaveResults = 6;\r\n } else {\r\n this.showSaveResults = 5;\r\n }\r\n\r\n });\r\n }\r\n */\r\n\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n //Look up client's account details\r\n this.loadingData = true;\r\n this.$user.searchByEmail(userName).then((users) => {\r\n console.log(users);\r\n console.log(users[0].FirstName);\r\n this.clientFirstName = users[0].FirstName;\r\n this.clientEmail = users[0].Email;\r\n this.clientSurname = users[0].LastName;\r\n this.clientPhoneNumber = users[0].PhoneNumber;\r\n this.clientId = users[0].Id;\r\n this.showClientDetails = true;\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n clearInputFields() {\r\n this.clientFirstName = null;\r\n this.clientEmail = null;\r\n this.clientSurname = null;\r\n this.clientPhoneNumber = null;\r\n this.showClientDetails = false;\r\n this.selecteduserName = null;\r\n }\r\n\r\n // These functions are for the FAQ slider\r\n\r\n toggleAccordion(id: number) {\r\n if (!this.accordionShow[id]) {\r\n this.accordionShow[id] = true;\r\n } else {\r\n this.accordionShow[id] = !this.accordionShow[id];\r\n }\r\n }\r\n\r\n requestEmail(reason): void {\r\n this.showRequestEmailForm = true;\r\n this.requestMessageReason = reason;\r\n this.message = true;\r\n this.messageContent = \"\";\r\n }\r\n\r\n closeModal() {\r\n this.message = false;\r\n }\r\n\r\n sendRequestEmail() {\r\n this.showRequestEmailForm = false;\r\n this.loadingData = true;\r\n this.sendingMessage = true;\r\n\r\n if (this.currentCase) {\r\n this.$accountservice\r\n .RequestAssistanceReview(this.requestMessageReason, this.currentCase.Id)\r\n .then((response) => {\r\n this.showMessage(\r\n `${this.appName} have been notified that you require assistance and will be in touch shortly to help.`,\r\n );\r\n\r\n let caseNote = {\r\n CaseId: this.currentCase.Id,\r\n UserId: this.selectedUser.Id,\r\n NoteText: \"You have requested \" + this.requestMessageReason + \".\",\r\n ExpandNote: false,\r\n } as CaseNoteDTO;\r\n\r\n this.caseNoteService.addUpdate(caseNote);\r\n })\r\n .catch((error) => {\r\n this.showMessage(\r\n \"Sorry, something went wrong while sending your email. Please try again.\",\r\n );\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.loadingData = false;\r\n });\r\n } else if (this.searchid) {\r\n this.$lenderresultservice\r\n .RequestAssistance(this.requestMessageReason, this.searchid)\r\n .then((response) => {\r\n this.showMessage(\r\n `${this.appName} have been notified that you require assistance and will be in touch shortly to help.`,\r\n );\r\n })\r\n .catch((error) => {\r\n this.showMessage(\r\n \"Sorry, something went wrong while sending your email. Please try again.\",\r\n );\r\n })\r\n .finally(() => {\r\n this.sendingMessage = false;\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n showMessage(message: string) {\r\n this.messageContent = message;\r\n }\r\n\r\n hideRequestAssistance(): boolean {\r\n return !this.searchid;\r\n }\r\n\r\n // End of functions for the FAQ slider\r\n\r\n getAppName() {\r\n let lsd = null;\r\n if (window.self == window.top)\r\n lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n this.appName = lsd;\r\n } else {\r\n this.appName = \"Brickflow\";\r\n }\r\n }\r\n\r\n defaultSearchName() {\r\n var currentdate = new Date();\r\n return (\r\n \"My Development Finance Search \" +\r\n currentdate.getDate() +\r\n \"/\" +\r\n (currentdate.getMonth() + 1) +\r\n \"/\" +\r\n currentdate.getFullYear()\r\n );\r\n }\r\n\r\n fillHalfRegisterForm() {\r\n let name = new Date().toLocaleString().replace(/ |,|:|\\/|/g, \"\");\r\n this.newUser.Email = `${name}@test.com`;\r\n this.newUser.FirstName = name;\r\n this.newUser.LastName = \"t\";\r\n this.newUser.PhoneNumber = \"12345677\";\r\n this.newUser.ApplicantDefinedRole = 0;\r\n }\r\n\r\n registerNow() {\r\n (this.$rootScope as any).loanCriteria = this.loanCriteria;\r\n this.cancelSaving();\r\n this.$location.path(\"promo\");\r\n }\r\n\r\n sendShareSearchEmailToClient() {\r\n this.dataLoading = true;\r\n if (this.$routeParams.uniqueId) {\r\n this.$DevelopmentInputWithNoLoginService\r\n .isResultActive(this.$routeParams.uniqueId)\r\n .then((results) => {\r\n if (results) {\r\n this.$DevelopmentInputWithNoLoginService\r\n .sendEmailToNewUser(\r\n this.$routeParams.uniqueId,\r\n this.loanCriteria.ShowLenderNamesToBorrower,\r\n true,\r\n )\r\n .then((response) => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.loanCriteria.IntroduceeFirstName +\r\n \" \" +\r\n this.loanCriteria.IntroduceeSurname;\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.dataLoading = false;\r\n })\r\n .catch((error) => {\r\n this.displayMsg =\r\n \"Sorry, something went wrong. Please try again.\";\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.displayMsg = `Changes have been made to this search by your client, you will now be taken back to your user dashboard`;\r\n this.newSearch = false;\r\n this.showMsgToAdminOrBroker = true;\r\n this.dataLoading = false;\r\n }\r\n });\r\n } else {\r\n this.$DevelopmentInputService\r\n .sendEmailToExistingUser(\r\n this.$routeParams.SearchId,\r\n this.loanCriteria.ShowLenderNamesToBorrower,\r\n true,\r\n )\r\n .then((response) => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.loanCriteria.IntroduceeFirstName +\r\n \" \" +\r\n this.loanCriteria.IntroduceeSurname;\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.dataLoading = false;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n this.newSearch = false;\r\n this.newSearch = false;\r\n this.showMsg = true;\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n deleteSearch() {\r\n if (this.$routeParams.SearchId) {\r\n this.$DevelopmentInputService\r\n .markasdeleted(this.$routeParams.SearchId)\r\n .then((response) => {\r\n this.displayMsg = \"Search is successfully deleted\";\r\n this.showMsg = true;\r\n this.ShowdeleteSearch = true;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n this.showMsg = true;\r\n });\r\n } else {\r\n /** This will check if the result shared with new user is active */\r\n this.$DevelopmentInputWithNoLoginService\r\n .isResultActive(this.$routeParams.uniqueId)\r\n .then((results) => {\r\n if (!results) {\r\n this.displayMsg = `Changes have been made to this search by your client, you will now be taken back to your user dashboard`;\r\n this.showMsgToAdminOrBroker = true;\r\n } else {\r\n this.$DevelopmentInputWithNoLoginService\r\n .markasdeleted(this.loanCriteria.Id)\r\n .then((response) => {\r\n this.displayMsg = \"Search is successfully deleted\";\r\n this.showMsg = true;\r\n this.ShowdeleteSearch = true;\r\n })\r\n .catch((error) => {\r\n this.displayMsg =\r\n \"Sorry, something went wrong. Please try again.\";\r\n this.showMsg = true;\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n closeDeleteModal() {\r\n this.showMsg = false;\r\n this.displayMsg = null;\r\n this.ShowdeleteSearch = false;\r\n this.warningOff = true;\r\n this.$auth.clearSelectedNavMenuAndFilterStorageData();\r\n this.go(\"/userdashboard\");\r\n }\r\n\r\n onDIPClick(item: LenderResultSummaryDTO) {\r\n this.isDIPClicked = true;\r\n\r\n this.toggleLenderComparisonSelection(item);\r\n\r\n if (\r\n this.searchid &&\r\n this.loanCriteria.SearchName.startsWith(\"My Loan Search\")\r\n ) {\r\n this.showSaveResults = 2;\r\n } else if (this.searchid) {\r\n this.register(true, this.productResultList);\r\n this.warningOff = false;\r\n } else if (this.loanCriteria.SearchName) {\r\n this.register(true, this.productResultList);\r\n this.doubleWarningOff = true;\r\n } else {\r\n this.showSaveResults = 2;\r\n }\r\n }\r\n\r\n /* onClickSaveAs() {\r\n this.showSaveResults = 3;\r\n this.tempSearchName = this.loanCriteria.SearchName;\r\n this.loanCriteria.SearchName = '';\r\n }*/\r\n\r\n onClickSaveAs() {\r\n this.isSaveAsClicked = true;\r\n if (this.isAdmin || this.isBroker) {\r\n this.tempSearchName = this.loanCriteria.SearchName;\r\n this.loanCriteria.SearchName = \"\";\r\n this.showShareSearchModal();\r\n } else {\r\n this.showSaveResults = 3;\r\n }\r\n }\r\n\r\n saveAsWthOutIntroducee() {\r\n this.isSaveAsWthOutIntroducee = true;\r\n this.tempSearchName = this.loanCriteria.SearchName;\r\n this.loanCriteria.SearchName = \"\";\r\n this.showShareSearchModal();\r\n }\r\n\r\n saveChangesToReferredSearch() {\r\n var result = {} as DevelopmentWithNoLoginDTO;\r\n this.loadingData = true;\r\n (Object).assign(result, this.loanCriteria);\r\n this.$DevelopmentInputWithNoLoginService\r\n .saveChangesToReferredSearch(result, this.$routeParams.uniqueId)\r\n .then((savedSearchId) => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n change() {\r\n if ((this.newUser as any).ConfirmPassword === this.newUser.Password) {\r\n this.error = \"\";\r\n } else {\r\n this.error = \"Passwords do not match\";\r\n }\r\n }\r\n\r\n getUsersBelongToBrokerOrAdmin() {\r\n this.loadingData = true;\r\n this.$user\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n });\r\n }\r\n\r\n saveResultsClicked() {\r\n if (this.prevPath) {\r\n this.isSaveorSaveAsClicked = false;\r\n } else {\r\n this.isSaveorSaveAsClicked = true;\r\n }\r\n this.register(false, this.productResultList);\r\n }\r\n\r\n checkShowBridgingEligibility() {\r\n return this.$auth.getShowBridgingEligibility();\r\n }\r\n\r\n showBookMeetingButton() {\r\n return (\r\n !this.isLoggedInUser &&\r\n this.isClient &&\r\n this.brokerDetail == \"\" &&\r\n this.brokerageOrg != null\r\n );\r\n }\r\n\r\n bookMeeting() {\r\n this.$auth\r\n .getHubspotDeveloperBookMeetingWithSearch()\r\n .then((hubSpotUrl: string) => {\r\n window.open(hubSpotUrl);\r\n });\r\n }\r\n\r\n onShareholderDepositRequiredChange(e: ShareholderDepositRequiredEnum) {\r\n switch (e) {\r\n case ShareholderDepositRequiredEnum.None:\r\n this.loanCriteria.F_ShareholderDepositRequired = 0;\r\n break;\r\n case ShareholderDepositRequiredEnum.UpTo25Percent:\r\n this.loanCriteria.F_ShareholderDepositRequired = 0.25;\r\n break;\r\n case ShareholderDepositRequiredEnum.TwentyFiveTo50Percent:\r\n this.loanCriteria.F_ShareholderDepositRequired = 0.5;\r\n break;\r\n case ShareholderDepositRequiredEnum.FiftyPercentPlus:\r\n this.loanCriteria.F_ShareholderDepositRequired = 1.0;\r\n break;\r\n default:\r\n this.loanCriteria.F_ShareholderDepositRequired = null;\r\n break;\r\n }\r\n }\r\n\r\n getShareholderDepositRequired() {\r\n var value = null;\r\n switch (this.loanCriteria.F_ShareholderDepositRequired) {\r\n case 0:\r\n value = ShareholderDepositRequiredEnum.None;\r\n break;\r\n case 0.25:\r\n value = ShareholderDepositRequiredEnum.UpTo25Percent;\r\n break;\r\n case 0.5:\r\n value = ShareholderDepositRequiredEnum.TwentyFiveTo50Percent;\r\n break;\r\n case 1.0:\r\n value = ShareholderDepositRequiredEnum.FiftyPercentPlus;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getPreviousDevelopments() {\r\n var value = null;\r\n switch (this.loanCriteria.F_NumberOfPreviousDevelopments) {\r\n case 1:\r\n value = PreviousDevelopmentsEnum.One;\r\n break;\r\n case 2:\r\n value = PreviousDevelopmentsEnum.Two;\r\n break;\r\n case 3:\r\n value = PreviousDevelopmentsEnum.Three;\r\n break;\r\n case 4:\r\n value = PreviousDevelopmentsEnum.FourOrMore;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onPersonalGuaranteeLevelOptionsChange(e: PersonalGuaranteeLevelEnum) {\r\n switch (e) {\r\n case PersonalGuaranteeLevelEnum.UpTo20Percent:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = 0.2;\r\n break;\r\n case PersonalGuaranteeLevelEnum.TwentyOneTo35Percent:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = 0.35;\r\n break;\r\n case PersonalGuaranteeLevelEnum.ThirtySixTo50Percent:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = 0.5;\r\n break;\r\n case PersonalGuaranteeLevelEnum.OneHundredPercent:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = 1.0;\r\n break;\r\n default:\r\n this.loanCriteria.F_PersonalGuaranteeLevel = null;\r\n break;\r\n }\r\n }\r\n\r\n getPersonalGuaranteeLevelOptions() {\r\n var value = null;\r\n switch (this.loanCriteria.F_PersonalGuaranteeLevel) {\r\n case 0.2:\r\n value = PersonalGuaranteeLevelEnum.UpTo20Percent;\r\n break;\r\n case 0.35:\r\n value = PersonalGuaranteeLevelEnum.TwentyOneTo35Percent;\r\n break;\r\n case 0.5:\r\n value = PersonalGuaranteeLevelEnum.ThirtySixTo50Percent;\r\n break;\r\n case 1.0:\r\n value = PersonalGuaranteeLevelEnum.OneHundredPercent;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onMaxHouseSalesPriceChange(e: MaxHouseSalePriceEnum) {\r\n switch (e) {\r\n case MaxHouseSalePriceEnum.UpTo1Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 1000000;\r\n break;\r\n case MaxHouseSalePriceEnum.UpTo2Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 2000000;\r\n break;\r\n case MaxHouseSalePriceEnum.UpTo5Million:\r\n this.loanCriteria.F_MaxHouseSalesPrice = 5000000;\r\n break;\r\n case MaxHouseSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxHouseSalesPrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxHouseSalesPrice = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxHouseSalesPrice() {\r\n var value = null;\r\n switch (this.loanCriteria.F_MaxHouseSalesPrice) {\r\n case 1000000:\r\n value = MaxHouseSalePriceEnum.UpTo1Million;\r\n break;\r\n case 2000000:\r\n value = MaxHouseSalePriceEnum.UpTo2Million;\r\n break;\r\n case 5000000:\r\n value = MaxHouseSalePriceEnum.UpTo5Million;\r\n break;\r\n case -999:\r\n value = MaxHouseSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onMaxFlatUnitPriceChange(e: MaxFlatUnitPriceEnum) {\r\n switch (e) {\r\n case MaxFlatUnitPriceEnum.UpTo1Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 1000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.UpTo2Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 2000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.UpTo3Million:\r\n this.loanCriteria.F_MaxFlatUnitPrice = 3000000;\r\n break;\r\n case MaxFlatUnitPriceEnum.NoMax:\r\n this.loanCriteria.F_MaxFlatUnitPrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxFlatUnitPrice = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxFlatUnitPrice() {\r\n var value = null;\r\n switch (this.loanCriteria.F_MaxFlatUnitPrice) {\r\n case 1000000:\r\n value = MaxFlatUnitPriceEnum.UpTo1Million;\r\n break;\r\n case 2000000:\r\n value = MaxFlatUnitPriceEnum.UpTo2Million;\r\n break;\r\n case 3000000:\r\n value = MaxFlatUnitPriceEnum.UpTo3Million;\r\n break;\r\n case -999:\r\n value = MaxFlatUnitPriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n onMaxSqFtSalePriceChange(e: MaxSqFtSalePriceEnum) {\r\n switch (e) {\r\n case MaxSqFtSalePriceEnum.UpTo850:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 850;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1000:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 1000;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1500:\r\n this.loanCriteria.F_MaxSqFtSalePrice = 1500;\r\n break;\r\n case MaxSqFtSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxSqFtSalePrice = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxSqFtSalePrice = null;\r\n break;\r\n }\r\n }\r\n\r\n onMaxSqFtFlatsSalePriceChange(e: MaxSqFtSalePriceEnum) {\r\n switch (e) {\r\n case MaxSqFtSalePriceEnum.UpTo850:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 850;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1000:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 1000;\r\n break;\r\n case MaxSqFtSalePriceEnum.UpTo1500:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = 1500;\r\n break;\r\n case MaxSqFtSalePriceEnum.NoMax:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = -999;\r\n break;\r\n default:\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = null;\r\n break;\r\n }\r\n }\r\n\r\n getMaxSqFtSalePrice() {\r\n var value = null;\r\n switch (this.loanCriteria.F_MaxSqFtSalePrice) {\r\n case 850:\r\n value = MaxSqFtSalePriceEnum.UpTo850;\r\n break;\r\n case 1000:\r\n value = MaxSqFtSalePriceEnum.UpTo1000;\r\n break;\r\n case 1500:\r\n value = MaxSqFtSalePriceEnum.UpTo1500;\r\n break;\r\n case -999:\r\n value = MaxSqFtSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getMaxSqFtSalePriceFlats() {\r\n var value = null;\r\n switch (this.loanCriteria.F_MaxSqFtSalePriceFlats) {\r\n case 850:\r\n value = MaxSqFtSalePriceEnum.UpTo850;\r\n break;\r\n case 1000:\r\n value = MaxSqFtSalePriceEnum.UpTo1000;\r\n break;\r\n case 1500:\r\n value = MaxSqFtSalePriceEnum.UpTo1500;\r\n break;\r\n case -999:\r\n value = MaxSqFtSalePriceEnum.NoMax;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n applyFilters() {\r\n this.loadingData = true;\r\n this.showFilters = false;\r\n this.isFilterUpdate = true;\r\n this.clearSelected();\r\n this.updateResults();\r\n\r\n if (this.loanCriteria.Id) {\r\n if (\r\n this.$routeParams.uniqueId !== undefined &&\r\n this.$routeParams.uniqueId != \"null\"\r\n ) {\r\n var result = {} as DevelopmentWithNoLoginDTO;\r\n (Object).assign(result, this.loanCriteria);\r\n this.$DevelopmentInputWithNoLoginService\r\n .saveChangesToReferredSearch(result, this.$routeParams.uniqueId)\r\n .catch((error) => {\r\n this.displayMsg =\r\n \"Sorry, something went wrong and your filters were not saved. Please try again.\";\r\n this.showMsg = true;\r\n });\r\n } else {\r\n this.$DevelopmentInputService\r\n .saveSearch(this.loanCriteria)\r\n .catch((error) => {\r\n this.displayMsg =\r\n \"Sorry, something went wrong and your filters were not saved. Please try again.\";\r\n this.showMsg = true;\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearClientFilters() {\r\n this.loanCriteria.F_IsFirstTimeDeveloper = null;\r\n this.loanCriteria.F_NumberOfPreviousDevelopments = null;\r\n this.loanCriteria.F_ShareholderDepositRequired = null;\r\n this.shareholderDepositRequired = null;\r\n this.loanCriteria.F_IsPersonalName = null;\r\n this.loanCriteria.F_IsOffshoreCompany = null;\r\n this.loanCriteria.F_IsMainShareholderOverseas = null;\r\n this.loanCriteria.F_PersonalGuaranteeLevel = null;\r\n this.personalGuaranteeLevel = null;\r\n this.loanCriteria.F_HasAdverseCredit = null;\r\n this.loanCriteria.F_MaxCommercialFloorspace = null;\r\n }\r\n\r\n showClearForClientFilters() {\r\n if (\r\n this.loanCriteria.F_IsFirstTimeDeveloper != null ||\r\n this.loanCriteria.F_NumberOfPreviousDevelopments != null ||\r\n this.loanCriteria.F_ShareholderDepositRequired != null ||\r\n this.loanCriteria.F_IsPersonalName != null ||\r\n this.loanCriteria.F_IsOffshoreCompany != null ||\r\n this.loanCriteria.F_IsMainShareholderOverseas != null ||\r\n this.loanCriteria.F_PersonalGuaranteeLevel != null ||\r\n this.loanCriteria.F_HasAdverseCredit != null ||\r\n this.loanCriteria.F_MaxCommercialFloorspace != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearPropertyFilters() {\r\n this.loanCriteria.F_IsAirRights = null;\r\n this.loanCriteria.F_IsModular = null;\r\n this.loanCriteria.F_IsPermittedDevelopmentScheme = null;\r\n this.loanCriteria.F_IsGradeOneListed = null;\r\n this.loanCriteria.F_IsGradeTwoListed = null;\r\n this.loanCriteria.F_MaxHouseSalesPrice = null;\r\n this.loanCriteria.F_MaxFlatUnitPrice = null;\r\n this.loanCriteria.F_MaxNumberOfUnits = null;\r\n //this.loanCriteria.F_MaxPercCommercialForMixedUse = null;\r\n this.loanCriteria.F_MaxSqFtSalePrice = null;\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats = null;\r\n this.loanCriteria.F_IsWorkStarted = null;\r\n this.maxHouseSalesPrice = null;\r\n this.maxFlatUnitPrice = null;\r\n this.maxSqFtSalePrice = null;\r\n this.maxPercCommercialForMixedUse = null;\r\n this.maxSqFtSalePriceFlats = null;\r\n this.previousDevelopments = null;\r\n }\r\n\r\n showClearForPropertyFilters() {\r\n if (\r\n this.loanCriteria.F_IsAirRights != null ||\r\n this.loanCriteria.F_IsModular != null ||\r\n this.loanCriteria.F_IsPermittedDevelopmentScheme != null ||\r\n this.loanCriteria.F_IsGradeOneListed != null ||\r\n this.loanCriteria.F_IsGradeTwoListed != null ||\r\n this.loanCriteria.F_MaxHouseSalesPrice != null ||\r\n this.loanCriteria.F_MaxFlatUnitPrice != null ||\r\n this.loanCriteria.F_MaxNumberOfUnits != null ||\r\n //this.loanCriteria.F_MaxPercCommercialForMixedUse != null ||\r\n this.loanCriteria.F_MaxSqFtSalePrice != null ||\r\n this.loanCriteria.F_IsWorkStarted != null ||\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearFinanceFilters() {\r\n this.loanCriteria.F_IsChargeOnAdditionalProperty = null;\r\n this.loanCriteria.F_IsFixedRate = null;\r\n this.loanCriteria.F_InterestRateBasis = null;\r\n this.loanCriteria.F_IsBank = null;\r\n }\r\n\r\n showClearForFinanceFilters() {\r\n if (\r\n this.loanCriteria.F_IsChargeOnAdditionalProperty != null ||\r\n this.loanCriteria.F_IsFixedRate != null ||\r\n this.loanCriteria.F_InterestRateBasis != null ||\r\n this.loanCriteria.F_IsBank != null\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearAllFilters() {\r\n this.clearClientFilters();\r\n this.clearPropertyFilters();\r\n this.clearFinanceFilters();\r\n }\r\n\r\n onClickFilterCancel() {\r\n this.loanCriteria.F_IsFirstTimeDeveloper =\r\n this.tempLoanCriteria.F_IsFirstTimeDeveloper;\r\n this.loanCriteria.F_NumberOfPreviousDevelopments =\r\n this.tempLoanCriteria.F_NumberOfPreviousDevelopments;\r\n this.loanCriteria.F_ShareholderDepositRequired =\r\n this.tempLoanCriteria.F_ShareholderDepositRequired;\r\n this.loanCriteria.F_IsPersonalName = this.tempLoanCriteria.F_IsPersonalName;\r\n this.loanCriteria.F_IsOffshoreCompany =\r\n this.tempLoanCriteria.F_IsOffshoreCompany;\r\n this.loanCriteria.F_IsMainShareholderOverseas =\r\n this.tempLoanCriteria.F_IsMainShareholderOverseas;\r\n this.loanCriteria.F_PersonalGuaranteeLevel =\r\n this.tempLoanCriteria.F_PersonalGuaranteeLevel;\r\n this.loanCriteria.F_IsAirRights = this.tempLoanCriteria.F_IsAirRights;\r\n this.loanCriteria.F_IsModular = this.tempLoanCriteria.F_IsModular;\r\n this.loanCriteria.F_IsPermittedDevelopmentScheme =\r\n this.tempLoanCriteria.F_IsPermittedDevelopmentScheme;\r\n this.loanCriteria.F_IsGradeOneListed =\r\n this.tempLoanCriteria.F_IsGradeOneListed;\r\n this.loanCriteria.F_IsGradeTwoListed =\r\n this.tempLoanCriteria.F_IsGradeTwoListed;\r\n this.loanCriteria.F_MaxHouseSalesPrice =\r\n this.tempLoanCriteria.F_MaxHouseSalesPrice;\r\n this.loanCriteria.F_MaxFlatUnitPrice =\r\n this.tempLoanCriteria.F_MaxFlatUnitPrice;\r\n this.loanCriteria.F_MaxNumberOfUnits =\r\n this.tempLoanCriteria.F_MaxNumberOfUnits;\r\n // this.loanCriteria.F_MaxPercCommercialForMixedUse =\r\n // this.tempLoanCriteria.F_MaxPercCommercialForMixedUse;\r\n this.loanCriteria.F_MaxSqFtSalePrice =\r\n this.tempLoanCriteria.F_MaxSqFtSalePrice;\r\n this.loanCriteria.F_MaxSqFtSalePriceFlats =\r\n this.tempLoanCriteria.F_MaxSqFtSalePriceFlats;\r\n this.loanCriteria.F_IsWorkStarted = this.tempLoanCriteria.F_IsWorkStarted;\r\n this.loanCriteria.F_IsChargeOnAdditionalProperty =\r\n this.tempLoanCriteria.F_IsChargeOnAdditionalProperty;\r\n this.loanCriteria.F_IsFixedRate = this.tempLoanCriteria.F_IsFixedRate;\r\n this.loanCriteria.F_InterestRateBasis =\r\n this.tempLoanCriteria.F_InterestRateBasis;\r\n this.loanCriteria.F_IsBank = this.tempLoanCriteria.F_IsBank;\r\n }\r\n\r\n checkFilterSelected(property: string) {\r\n let value = this.loanCriteria[property];\r\n if (typeof value === \"boolean\" && value === true) {\r\n return true;\r\n } else if (value != null && typeof value != \"boolean\") {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n filterPropertyToText(property: string) {\r\n let value = this.loanCriteria[property];\r\n if (typeof value == \"boolean\" && value == true) {\r\n return;\r\n } else if (value != null && typeof value != \"boolean\") {\r\n return `: ${this.getPropertyValue(property)}`;\r\n }\r\n return false;\r\n }\r\n\r\n getDisplayTextForProperty(property) {\r\n switch (property) {\r\n case \"F_IsFirstTimeDeveloper\":\r\n return \"1st Time Dev\";\r\n case \"F_ShareholderDepositRequired\":\r\n return \"Shareholder Deposit\";\r\n case \"F_IsPersonalName\":\r\n return \"Personal Name\";\r\n case \"F_IsOffshoreCompany\":\r\n return \"Non-UK Company\";\r\n case \"F_IsMainShareholderOverseas\":\r\n return \"Client Based Overseas\";\r\n case \"F_PersonalGuaranteeLevel\":\r\n return \"PG\";\r\n case \"F_IsAirRights\":\r\n return \"Air Rights Scheme\";\r\n case \"F_IsModular\":\r\n return \"Modular\";\r\n case \"F_IsPermittedDevelopmentScheme\":\r\n return \"PD Scheme\";\r\n case \"F_IsGradeOneListed\":\r\n return \"Grade 1 Listed\";\r\n case \"F_IsGradeTwoListed\":\r\n return \"Grade 2 Listed\";\r\n case \"F_MaxHouseSalesPrice\":\r\n return \"Max Sales Price (Houses)\";\r\n case \"F_MaxSqFtSalePrice\":\r\n return \"Max £/sq.ft (Houses)\";\r\n case \"F_MaxSqFtSalePriceFlats\":\r\n return \"Max £/sq.ft (Flats)\";\r\n case \"F_MaxFlatUnitPrice\":\r\n return \"Max Sales Price (Flats)\";\r\n // case \"F_MaxPercCommercialForMixedUse\":\r\n // return \"Max Commercial or Mixed Use\";\r\n case \"F_NumberOfPreviousDevelopments\":\r\n return \"Previous Developments\";\r\n case \"F_MaxNumberOfUnits\":\r\n return `Max Units`;\r\n case \"F_IsWorkStarted\":\r\n return \"Works Commenced\";\r\n case \"F_IsChargeOnAdditionalProperty\":\r\n return \"Additional Security\";\r\n case \"F_IsFixedRate\":\r\n return \"Fixed Rate\";\r\n case \"F_HasAdverseCredit\":\r\n return \"Adv. Credit\";\r\n case \"F_MaxCommercialFloorspace\":\r\n return \"Com. Floorspace (max %)\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n getPropertyValue(property) {\r\n let propertyValue = this.loanCriteria[property];\r\n switch (property) {\r\n case \"F_ShareholderDepositRequired\":\r\n return this.selectListService\r\n .GetShareholderDepositRequired()\r\n .find((item) => item.key === this.getShareholderDepositRequired())\r\n ?.displayName;\r\n case \"F_PersonalGuaranteeLevel\":\r\n return this.selectListService\r\n .GetPersonalGuaranteeLevels()\r\n .find((item) => item.key === this.getPersonalGuaranteeLevelOptions())\r\n ?.displayName;\r\n case \"F_MaxHouseSalesPrice\":\r\n return this.selectListService\r\n .GetMaxHouseSalePrices()\r\n .find((item) => item.key === this.getMaxHouseSalesPrice())\r\n ?.displayName;\r\n case \"F_MaxFlatUnitPrice\":\r\n return this.selectListService\r\n .GetMaxFlatUnitPrices()\r\n .find((item) => item.key === this.getMaxFlatUnitPrice())?.displayName;\r\n case \"F_MaxSqFtSalePrice\":\r\n return this.selectListService\r\n .GetMaxSqFtSalePrices()\r\n .find((item) => item.key === this.getMaxSqFtSalePrice())?.displayName;\r\n case \"F_MaxSqFtSalePriceFlats\":\r\n return this.selectListService\r\n .GetMaxSqFtSalePrices()\r\n .find((item) => item.key === this.getMaxSqFtSalePriceFlats())\r\n ?.displayName;\r\n case \"F_NumberOfPreviousDevelopments\":\r\n return this.selectListService\r\n .GetNumberOfPreviousDevelopments()\r\n .find((item) => item.key === this.getPreviousDevelopments())\r\n ?.displayName;\r\n case \"F_MaxNumberOfUnits\":\r\n return propertyValue;\r\n case \"F_MaxCommercialFloorspace\":\r\n return this.selectListService\r\n .GetMaxCommercialFloorspaceOptions()\r\n .find((item) => item.key === this.loanCriteria.F_MaxCommercialFloorspace)\r\n ?.displayName;\r\n default:\r\n return propertyValue;\r\n }\r\n }\r\n\r\n countFiltersSelected() {\r\n let count = 0;\r\n if (this.loanCriteria) {\r\n this.filterProperties.forEach((property) => {\r\n if (this.checkFilterSelected(property)) {\r\n count++;\r\n }\r\n });\r\n }\r\n return count;\r\n }\r\n\r\n splitCamelCase(str) {\r\n return str\r\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\r\n .replace(/([A-Z])([A-Z][a-z])/g, \"$1 $2\");\r\n }\r\n\r\n showShareSearchModal() {\r\n this.newSearch = true;\r\n this.loanCriteria.ShowLenderNamesToBorrower =\r\n this.loanCriteria.ShowLenderInfoBrokerOverride;\r\n }\r\n\r\n isShareNoteFormComplete(): boolean {\r\n if (\r\n this.shareEmailSubject == \"undefined\" ||\r\n this.shareEmailSubject == null ||\r\n this.shareEmailSubject.length == 0\r\n ) {\r\n return false;\r\n }\r\n if (\r\n this.shareNote == \"undefined\" ||\r\n this.shareNote == null ||\r\n this.shareNote.length == 0\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n openSendToLender(item: LenderResultSummaryDTO) {\r\n this.shareFirstName = item.ContactUserFirstName;\r\n this.lenderEmail = item.ContactUserEmail;\r\n this.showContactLender = true;\r\n }\r\n\r\n sendToLender() {\r\n this.loadingData = true;\r\n this.$lenderresultservice\r\n .sendNoteToLender(\r\n this.lenderEmail,\r\n this.shareEmailSubject,\r\n this.shareNote,\r\n )\r\n .then((success) => {\r\n this.showContactLender = false;\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n /** This will check if the result shared with new user is active */\r\n isResultActive() {\r\n if (this.$routeParams.uniqueId && this.isBroker) {\r\n this.$DevelopmentInputWithNoLoginService\r\n .isResultActive(this.$routeParams.uniqueId)\r\n .then((results) => {\r\n if (results) {\r\n return true;\r\n } else {\r\n this.displayMsg = `Changes have been made to this search by your client, you will now be taken back to your user dashboard`;\r\n this.showMsgToAdminOrBroker = true;\r\n }\r\n });\r\n }\r\n return true;\r\n }\r\n\r\n toggleLenderContactDetails(item: LenderResultSummaryDTO) {\r\n if (item.ShowLenderUserDetails == false) {\r\n this.summarySearchResults.forEach(\r\n (offer) => (offer.ShowLenderUserDetails = false),\r\n );\r\n }\r\n item.ShowLenderUserDetails = !item.ShowLenderUserDetails;\r\n }\r\n\r\n openSendResultsToBorrowerModal() {\r\n if (this.loanCriteria.ShowLenderNamesToBorrower == null) {\r\n this.organisationService.getOrganisation().then((org) => {\r\n this.loanCriteria.ShowLenderNamesToBorrower = org.ShowLenderNames;\r\n });\r\n }\r\n\r\n this.existingborrower = null;\r\n this.clientFirstName = this.loanCriteria.IntroduceeFirstName;\r\n this.clientSurname = this.loanCriteria.IntroduceeSurname;\r\n this.clientEmail = this.loanCriteria.IntroduceeEmail;\r\n this.clientPhoneNumber = this.loanCriteria.IntroduceePhone;\r\n this.newSearch = true;\r\n this.sharedSearch = true;\r\n }\r\n\r\n saveResultsForShareSearchToClient() {\r\n if (!this.isSaveAsClicked) {\r\n this.isSaveClientSearch = true;\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.saveSaveAsSearch();\r\n }\r\n }\r\n\r\n getLenderNames(): string {\r\n if (this.filterLenderNames.length === 1) {\r\n return \"lender \" + this.filterLenderNames[0];\r\n } else {\r\n return \"lenders \" + this.filterLenderNames.join(\", \");\r\n }\r\n }\r\n\r\n isLendersFiltered(): boolean {\r\n //If the search is empty return true\r\n if (!this.summarySearchResults && this.caseLenders) return true;\r\n\r\n if (!this.caseLenders) return false;\r\n\r\n //For all products that have been submitted for DIP and active, check if in the search\r\n return !this.caseLenders.every((lender) => {\r\n if (\r\n lender.CaseLenderState !== CaseLenderStateEnum.Withdrawn &&\r\n lender.CaseLenderState !== CaseLenderStateEnum.Rejected\r\n ) {\r\n const match = this.summarySearchResults.some(\r\n (summarySearchResult) =>\r\n lender.ProductID === summarySearchResult.ProductID,\r\n );\r\n if (!match) {\r\n if (this.filterLenderNames.indexOf(lender.LenderName) === -1) {\r\n this.filterLenderNames.push(lender.LenderName);\r\n }\r\n }\r\n return match;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n getTotalShortlistedLenders() {\r\n if (this.caseLenders) {\r\n this.caseLendersNotInResults = this.caseLenders.filter(\r\n (cl) =>\r\n !this.comparisonList.some(\r\n (compare) => compare.SeniorProductID == cl.ProductID,\r\n ),\r\n );\r\n\r\n return (\r\n this.comparisonList.length +\r\n (this.caseLendersNotInResults ? this.caseLendersNotInResults.length : 0)\r\n );\r\n } else {\r\n return this.comparisonList.length;\r\n }\r\n }\r\n\r\n reloadPage() {\r\n window.location.reload();\r\n }\r\n\r\n sendMessageToBroker(message) {\r\n this.loadingData = true;\r\n this.borrowerMessage = null;\r\n var newLeadFirstName = null,\r\n newLeadLastName = null,\r\n newLeadEmail = null;\r\n\r\n if (this.$location.path().startsWith(\"/referredSearch\")) {\r\n newLeadFirstName = this.newUser.FirstName;\r\n newLeadLastName = this.newUser.LastName;\r\n newLeadEmail = this.newUser.Email;\r\n } else if (this.enterpriseClientId) {\r\n newLeadFirstName = this.loanCriteria.IntroduceeFirstName;\r\n newLeadLastName = this.loanCriteria.IntroduceeSurname;\r\n newLeadEmail = this.loanCriteria.IntroduceeEmail;\r\n } else {\r\n newLeadFirstName = this.newLeadFirstName;\r\n newLeadLastName = this.newLeadLastName;\r\n newLeadEmail = this.newLeadEmail;\r\n }\r\n\r\n this.organisationService\r\n .sendBorrowerMessageToSearchBroker(\r\n 0,\r\n message,\r\n newLeadFirstName,\r\n newLeadLastName,\r\n newLeadEmail,\r\n ProductTypeEnum.Development,\r\n \"RESULTSSCREEN\",\r\n this.loanCriteria.UniqueRef,\r\n )\r\n .then((results) => {\r\n if (results) {\r\n this.displayMsg = `Message has been sent successfully.`;\r\n this.showMessageToborrower = true;\r\n } else {\r\n this.displayMsg = `There is problem sending a message, Please try later.`;\r\n this.showMessageToborrower = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n closeContactBrokerModal() {\r\n this.showContactBrokerModal = false;\r\n this.showMessageToborrower = false;\r\n this.displayMsg = null;\r\n }\r\n\r\n logPdfDownload(eventName) {\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n ProductTypeEnum.Development,\r\n this.$routeParams.uniqueId ? 0 : this.loanCriteria.Id,\r\n this.$routeParams.uniqueId ? this.$routeParams.uniqueId : \"\",\r\n );\r\n }\r\n\r\n calculateMonthsSinceOrigPurchase() {\r\n let date1 = new Date(this.loanCriteria.CI_Dev_DateOfOrigPurch);\r\n let date2 = new Date();\r\n let months;\r\n months = (date2.getFullYear() - date1.getFullYear()) * 12;\r\n months -= date1.getMonth();\r\n months += date2.getMonth();\r\n return months;\r\n }\r\n\r\n saveEnterpriseClientAndRenameDeal() {\r\n this.loadingData = true;\r\n\r\n this.userService.checkEmailExists(this.user.Email).then((response) => {\r\n if (!response) {\r\n let userFullName = this.user.FullName;\r\n let spaceIndex = userFullName.indexOf(\" \");\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(\" \"));\r\n lastName = userFullName.substring(userFullName.indexOf(\" \") + 1);\r\n }\r\n\r\n this.loanCriteria.IntroduceeFirstName = firstName;\r\n this.loanCriteria.IntroduceeSurname = lastName;\r\n this.loanCriteria.IntroduceeEmail = this.user.Email;\r\n this.loanCriteria.IntroduceePhone = this.user.PhoneNumber;\r\n\r\n var currentDate = new Date();\r\n this.loanCriteria.SearchName = this.projectName;\r\n\r\n var result = {} as DevelopmentWithNoLoginDTO;\r\n (Object).assign(result, this.loanCriteria);\r\n this.$DevelopmentInputWithNoLoginService\r\n .saveChangesToReferredSearch(\r\n result,\r\n this.loanCriteria.UniqueRef,\r\n true,\r\n )\r\n .then((response) => {\r\n this.showEnterpriseRegistrationModal = false;\r\n document.getElementById(\"body\").style.overflow = \"auto\";\r\n if (window.self == window.top) {\r\n sessionStorage.setItem(\"userDetails\", JSON.stringify(this.user));\r\n } else {\r\n this.organisationService.sendDataToParent(\r\n \"userDetails\",\r\n JSON.stringify(this.user),\r\n );\r\n }\r\n\r\n this.userService.sendEventToHubspot(\r\n this.user,\r\n \"ENTERPRISE-CONTACT-REGISTERED\",\r\n false,\r\n this.brokerageOrg?.OrganisationCode,\r\n UserRoleEnum.Client,\r\n this.loanCriteria && this.loanCriteria.OrganisationLinkId != null\r\n ? this.loanCriteria.OrganisationLinkId\r\n : 0,\r\n ProductTypeEnum.Development,\r\n 0,\r\n this.loanCriteria.UniqueRef,\r\n );\r\n this.populateNewLeadInfo(\"borrower\", JSON.stringify(this.user));\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n } else {\r\n this.emailExistsError = true;\r\n this.loadingData = false;\r\n }\r\n });\r\n }\r\n\r\n addClientAndRenameDeal() {\r\n this.loadingData = true;\r\n var result = {} as DevelopmentWithNoLoginDTO;\r\n (Object).assign(result, this.loanCriteria);\r\n this.$DevelopmentInputWithNoLoginService\r\n .addClientToSearch(\r\n result,\r\n this.loanCriteria.UniqueRef,\r\n Number(this.enterpriseClientId),\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.loanCriteria.IntroduceeFirstName = response.IntroduceeFirstName;\r\n this.loanCriteria.IntroduceeSurname = response.IntroduceeSurname;\r\n this.loanCriteria.IntroduceeEmail = response.IntroduceeEmail;\r\n this.loanCriteria.IntroduceePhone = response.IntroduceePhone;\r\n this.loanCriteria.SearchName = response.SearchName;\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n\r\n gotoSignInPage() {\r\n this.$location.path(\"/login\");\r\n }\r\n\r\n goToLink(url) {\r\n var baseUrl = window.location.href.split(\"#!\")[0] + \"#!\";\r\n var newUrl = baseUrl + url;\r\n window.open(newUrl, \"_blank\");\r\n }\r\n\r\n toggleShowLenderNamesBrokerOverride() {\r\n // this.loanCriteria.ShowLenderInfoBrokerOverride = !this.loanCriteria.ShowLenderInfoBrokerOverride;\r\n this.comparisonList = [];\r\n this.updateResults(undefined, true);\r\n }\r\n\r\n showContactBrokerAndExportButton() {\r\n if (\r\n this.brokerageOrg != null &&\r\n this.loanCriteria != null &&\r\n this.loanCriteria.IntroduceeEmail != null &&\r\n this.loanCriteria.IntroduceeEmail.length > 0\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n //This is used in shortlisting pdf\r\n prepareDataForShortlistPdf() {\r\n this.loanCriteria.ComparisonList = this.comparisonList;\r\n }\r\n\r\n getRegionByPostcode() {\r\n if (\r\n this.loanCriteria.PostcodeSearchString &&\r\n this.loanCriteria.PostcodeSearchString.replace(\" \", \"\").length >= 2\r\n ) {\r\n if (\r\n this.$DevelopmentInputService.isValidPostcodeString(\r\n this.loanCriteria.PostcodeSearchString,\r\n )\r\n ) {\r\n this.dataLoading = true;\r\n this.$DevelopmentInputService\r\n .getRegionByPostcode(this.loanCriteria.PostcodeSearchString)\r\n .then((response) => {\r\n if (response.Location != null) {\r\n this.loanCriteria.CI_Dev_Locations = response.Location;\r\n this.showPostcodeErrorMessage = false;\r\n this.updateSearchViaSlider();\r\n } else {\r\n this.postcodeErrorMsg = response.PostCodeErrorMessage;\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.postcodeErrorMsg =\r\n \"At least one letter and one number must be entered e.g. SW1.\";\r\n this.showPostcodeErrorMessage = true;\r\n }\r\n }\r\n }\r\n\r\n isSelectedResult(offer: LenderResultSummaryDTO, index: number) {\r\n return this.comparisonContains(offer) && !offer.IsCaseLender;\r\n }\r\n\r\n isResultAvailableToSelect(offer: LenderResultSummaryDTO) {\r\n return offer.IsCaseLender;\r\n }\r\n\r\n getOrganisationAndBrokerDetails() {\r\n if (!this.isLoggedInUser && !this.isAdmin && !this.isBroker) {\r\n this.loadingData = true;\r\n this.organisationService\r\n .getOrganisationAndBrokerByUniqueRef(this.loanCriteria.UniqueRef)\r\n .then((response) => {\r\n if (response && response.Organisation != null) {\r\n this.brokerageOrg = response.Organisation;\r\n\r\n if (response.Organisation.IsBrickflow) {\r\n this.moveContactBrokerBtnInMiddle = true;\r\n } else {\r\n if (response.Broker != null) {\r\n this.brokerDetail = `${response.Broker.FullName} (${response.Broker.Email})`;\r\n }\r\n\r\n if (this.brokerageOrg.IsWhiteLabelled) {\r\n this.orgName = this.brokerageOrg.Name.replace(/ /g, \"_\");\r\n }\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n this.loadingData = false;\r\n });\r\n }\r\n }\r\n\r\n sortByField(field) {\r\n this.loanCriteria.SortBy = field;\r\n this.sortSummaryResults();\r\n this.saveSearch(false, this.productResultList, true);\r\n this.showSortBy = !this.showSortBy;\r\n }\r\n\r\n sortSummaryResults() {\r\n switch (this.loanCriteria.SortBy) {\r\n case SortByEnum.ROCE:\r\n this.summarySearchResults.sort(\r\n (a, b) => b.ROCE - a.ROCE || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.TrueMonthlyCost:\r\n this.summarySearchResults.sort(\r\n (a, b) => a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.NetLoanSize:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n b.NetLoan - a.NetLoan || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.LenderName:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.LoanLabel.localeCompare(b.LoanLabel) ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.InterestRate:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.Interest - b.Interest || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.ArrangementFee:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.ArrangementFee - b.ArrangementFee ||\r\n a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.DepositEquity:\r\n this.summarySearchResults.sort(\r\n (a, b) =>\r\n a.Deposit - b.Deposit || a.TrueMonthlyCost - b.TrueMonthlyCost,\r\n );\r\n break;\r\n case SortByEnum.LTGDV:\r\n this.$lenderresultservice\r\n .sortProductsByLTGDV(this.summarySearchResults)\r\n .then((sortedResults) => {\r\n this.summarySearchResults = sortedResults;\r\n })\r\n .catch((error) => {\r\n console.error(\"Error sorting by LTGDV:\", error);\r\n });\r\n break;\r\n default:\r\n this.summarySearchResults.sort((a, b) => {\r\n if (a.NetLoan < b.NetLoan) return 1;\r\n if (a.NetLoan > b.NetLoan) return -1;\r\n\r\n if (a.TrueMonthlyCost > b.TrueMonthlyCost) return 1;\r\n if (a.TrueMonthlyCost < b.TrueMonthlyCost) return -1;\r\n\r\n return 0;\r\n });\r\n this.loanCriteria.SortBy = SortByEnum.NetLoanSize;\r\n }\r\n\r\n for (var i = 0; i < this.summarySearchResults.length; i++) {\r\n this.summarySearchResults[i].SelectedRowNumber = i + 1;\r\n }\r\n }\r\n\r\n postLoanCriteriaRetrieveProcessing(loanCriteria) {\r\n this.loanCriteria = loanCriteria;\r\n this.tempLoanRequired = this.loanCriteria.CI_Dev_LoanReq;\r\n if (this.loanCriteria.CI_Dev_LoanReq > 0) {\r\n this.isMaximumLoanRequired = false;\r\n }\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n this.isDIPClicked = this.loanCriteria.IsFullCase;\r\n\r\n this.updateResults(false);\r\n }\r\n\r\n saveSaveAsSearch(attachClient = false) {\r\n this.loadingData = true;\r\n\r\n let newSearchName =\r\n this.isBroker || this.isAdmin\r\n ? this.loanCriteria.SearchName\r\n : this.saveAsSearchName;\r\n\r\n let shareDealDto = {\r\n DealId: this.searchid,\r\n DealName: newSearchName,\r\n ShowLenderNamesAndLogos:\r\n this.loanCriteria?.ShowLenderNamesToBorrower ?? false,\r\n EmailLinkToClient: this.emailClient,\r\n AccessLevel: CaseAccessLevelEnum.FullAccess,\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n\r\n shareDealDto.ClientDto = {\r\n FirstName: this.clientFirstName,\r\n LastName: this.clientSurname,\r\n Email: this.clientEmail,\r\n PhoneNumber: this.clientPhoneNumber,\r\n ClientUserId: this.clientId,\r\n } as ClientDTO;\r\n\r\n this.$CaseService\r\n .saveSaveAsSearch(this.loanCriteria.Id, shareDealDto, attachClient)\r\n .then((result) => {\r\n this.displayMsg = `${newSearchName} search has been saved to your dashboard.`;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n })\r\n .finally(() => {\r\n this.cancelNewSearch();\r\n this.loadingData = false;\r\n this.isSaveAsClicked = false;\r\n this.saveAsSearchName = \"\";\r\n this.showSaveResults = null;\r\n this.showMsg = true;\r\n });\r\n }\r\n\r\n returnShortlistedDealLenderStatusText(item: LenderResultSummaryDTO) {\r\n if (item.IsCaseLender && (this.currentCase.CaseStatus != CaseStatusEnum.Search && this.currentCase.CaseStatus != CaseStatusEnum.NewCase && this.currentCase.CaseStatus != CaseStatusEnum.ReadyToSubmit)) {\r\n switch (item.CaseLenderStatus) {\r\n case CaseLenderStateEnum.Shortlisted:\r\n return \"Shortlisted\";\r\n case CaseLenderStateEnum.Received:\r\n return \"Awaiting DIP\";\r\n case CaseLenderStateEnum.Offered:\r\n return \"DIP Received\";\r\n case CaseLenderStateEnum.Rejected:\r\n return \"Lender Rejected\";\r\n case CaseLenderStateEnum.Withdrawn:\r\n return \"Lender Withdrawn\";\r\n default:\r\n break\r\n }\r\n }\r\n }\r\n\r\n onFilterClick() {\r\n //This is added to show only applied filters on pill\r\n if (this.showFilters && !this.isLoggedInUser) {\r\n this.loanCriteria = { ...this.tempLoanCriteria };\r\n }\r\n this.showFilters = !this.showFilters;\r\n }\r\n\r\n onSortbyClick() {\r\n this.showSortBy = !this.showSortBy;\r\n }\r\n\r\n getSelectedSortByOptionText() {\r\n if (this.loanCriteria) {\r\n switch (this.loanCriteria.SortBy) {\r\n case SortByEnum.TrueMonthlyCost:\r\n return \"True Monthly Cost\";\r\n case SortByEnum.NetLoanSize:\r\n return \"Net Loan Size\";\r\n case SortByEnum.LenderCosts:\r\n return \"Lender Costs (Est.)\";\r\n case SortByEnum.LenderName:\r\n return \"Lender Name (A-Z)\";\r\n case SortByEnum.InterestRate:\r\n return \"Interest Rate\";\r\n case SortByEnum.ArrangementFee:\r\n return \"Arrangement Fee\";\r\n case SortByEnum.DepositEquity:\r\n return \"Est. Deposit/Equity\";\r\n case SortByEnum.ROCE:\r\n return \"ROCE\";\r\n case SortByEnum.LTGDV:\r\n return \"LTGDV\";\r\n default:\r\n return \"\";\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n getSummaryComparisonList() {\r\n\r\n this.summaryComparisonList = [];\r\n for (var i = 0; i < this.comparisonList.length; i++) {\r\n let resultIndex = this.summarySearchResults.findIndex(\r\n (item) => item.ProductID == this.comparisonList[i].SeniorProductID,\r\n );\r\n\r\n if (resultIndex > -1) {\r\n this.summaryComparisonList.push(this.summarySearchResults[resultIndex]);\r\n }\r\n }\r\n\r\n return this.summaryComparisonList;\r\n\r\n }\r\n\r\n isProceedButtonDisabled(): boolean {\r\n if (\r\n !this.comparisonList ||\r\n this.comparisonList.length < 1 ||\r\n this.comparisonList.length > this.noOfShortlistAllowed ||\r\n this.isProceedClicked == true\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n onSaveClick() {\r\n if (this.loanCriteria.IntroduceeEmail) {\r\n this.isSaveorSaveAsClicked = true;\r\n this.register(false, this.productResultList);\r\n } else {\r\n this.showShareSearchModal();\r\n }\r\n }\r\n\r\n}\r\n","import { PaymentService } from \"@js/services/PaymentService\";\r\n\r\nexport class ManageLicenseController {\r\n isCancelClicked: boolean = false;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"PaymentService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $paymentService: PaymentService,\r\n ) {}\r\n\r\n updatePrice() {\r\n this.$paymentService.updatePlanPrice().then((response) => {});\r\n }\r\n\r\n cancelSubscription() {\r\n this.$paymentService.cancelSubscription(\"\").then((response) => {\r\n this.isCancelClicked = true;\r\n });\r\n }\r\n\r\n gotoProfilePage() {\r\n this.$location.path(\"/profile\");\r\n }\r\n}\r\n","export const enum StatusEnum {\r\n Invited = 1,\r\n Accepted = 2,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { CaseSummaryDTO } from \"@js/DTO/CaseSummaryDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { DevelopmentWithNoLoginDTO } from \"@js/DTO/DevelopmentWithNoLoginDTO.cs.d\";\r\nimport { IntroducerSimpleDTO } from \"@js/DTO/IntroducerSimpleDTO.cs.d\";\r\nimport { InviteDTO } from \"@js/DTO/InviteDTO.cs.d\";\r\nimport { LicenseMasterDTO } from \"@js/DTO/LicenseMasterDTO.cs.d\";\r\nimport { ModuleAppFeatureDTO } from \"@js/DTO/ModuleAppFeatureDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { StatusEnum } from \"@js/models/enum/StatusEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { CaseSummaryService } from \"@js/services/CaseSummaryService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { DevelopmentInputWithNoLoginService } from \"@js/services/DevelopmentInputWithNoLoginService\";\r\nimport { IntroducerService } from \"@js/services/IntroducerService\";\r\nimport { IntroducerSimpleService } from \"@js/services/IntroducerSimpleService\";\r\nimport { InviteService } from \"@js/services/InviteService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { LicenseService } from \"@js/services/LicenseService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class NewDashboardController {\r\n dataLoading: boolean = false;\r\n showBrokerWelcomeMessage: boolean = false;\r\n orgAdminName: string;\r\n orgAdminEmail: string;\r\n\r\n //Introducers\r\n introducerFirstLogin: boolean = false;\r\n introduceClientModal: number = null;\r\n isProcessingSend: boolean = false; // to control disabling of send button on introduce a borrower modal\r\n clientFirstName: string;\r\n clientSurname: string;\r\n clientEmail: string;\r\n clientPhoneNumber: string;\r\n notifyBorrower: boolean = true;\r\n introducedUsers: ApplicationUserDTO[];\r\n hideCaseCreation: boolean = false;\r\n fetchingResults: boolean = false;\r\n savedResults: DevelopmentInputDTO[];\r\n unsavedIntroducedSearches: DevelopmentWithNoLoginDTO[];\r\n savedIntroducedSearches: DevelopmentInputDTO[] = [];\r\n savedCases: DevelopmentInputDTO[];\r\n allResults: DevelopmentInputDTO[];\r\n selectedResult: number;\r\n caseSummaryList: CaseSummaryDTO[];\r\n /*otherUsersCaseList: CaseSummaryDTO[];*/\r\n lenderName: string;\r\n selectedUser: ApplicationUserDTO;\r\n userSearchResults: ApplicationUserDTO[];\r\n adminUser: boolean = false;\r\n isBroker: boolean = false;\r\n isLender: boolean = false;\r\n isPrimaryApplicant: boolean = true;\r\n isBorrower: boolean = false;\r\n userRolesMessage: string;\r\n currentUser: ApplicationUserDTO = null;\r\n selecteduserName: string = null;\r\n OtherUsers: string[] = null;\r\n newSearchName: string;\r\n link: string;\r\n introducerSimpleDetails: IntroducerSimpleDTO;\r\n\r\n introducerId: number;\r\n\r\n confirmName: boolean = false;\r\n copyCase: number;\r\n caseName: string;\r\n caseId: number;\r\n newShareholders: CaseMemberDTO[];\r\n seeInviteBorrower: boolean = false;\r\n\r\n clientAdminTools: boolean = false;\r\n\r\n showSetPasswordModal: boolean = false;\r\n verifyNewPassword: string;\r\n passwordSetSuccess: boolean = false;\r\n registrationForm: FormData;\r\n modal: ng.IFormController;\r\n\r\n invite: InviteDTO;\r\n invitedUsers: InviteDTO[] = [];\r\n\r\n introducerErrorDisplayed: boolean = false;\r\n applyCaseStatusFilter: boolean = false;\r\n\r\n orderColumn: string = \"LastUpdatedDateTime\";\r\n isAscButton: boolean[] = [true, true, true, true, true, true, true, true];\r\n isAsc: boolean = true;\r\n\r\n locations: Array<{ id: number; value: string }> = [\r\n { id: 0, value: \"Any\" },\r\n { id: 1, value: \"London\" },\r\n { id: 2, value: \"North West\" },\r\n { id: 4, value: \"Midlands\" },\r\n { id: 8, value: \"East of England\" },\r\n { id: 16, value: \"South East\" },\r\n { id: 32, value: \"South West\" },\r\n { id: 64, value: \"North East\" },\r\n { id: 128, value: \"Wales\" },\r\n { id: 256, value: \"Scotland\" },\r\n { id: 512, value: \"Northern Ireland\" },\r\n ];\r\n propertyTypes: Array<{ id: number; value: string }> = [\r\n { id: 0, value: \"Any\" },\r\n { id: 1, value: \"Residential\" },\r\n { id: 2, value: \"Mixed Use\" },\r\n { id: 2048, value: \"Licenced HMO\" },\r\n { id: 4, value: \"Hotel\" },\r\n { id: 8, value: \"Leisure\" },\r\n { id: 16, value: \"Care Home\" },\r\n { id: 32, value: \"Medical\" },\r\n { id: 64, value: \"Office\" },\r\n { id: 128, value: \"Retail\" },\r\n { id: 256, value: \"Light Industrial\" },\r\n { id: 512, value: \"Student\" },\r\n { id: 1024, value: \"Heavy Industrial\" },\r\n { id: 4096, value: \"Land without Planning\" },\r\n { id: 8192, value: \"Education\" },\r\n { id: 16384, value: \"Retirement\" },\r\n ];\r\n\r\n caseStatuses: Array<{ id: number; value: string; order: number }> = [\r\n { id: -1, value: \"Search\", order: 1 },\r\n { id: 0, value: \"New Case\", order: 2 },\r\n { id: 1, value: \"In Progress\", order: 3 },\r\n { id: 2, value: \"Under Review\", order: 4 },\r\n { id: 3, value: \"Ready To Submit\", order: 5 },\r\n { id: 4, value: \"Submitted To Lenders For DIP\", order: 6 },\r\n { id: 5, value: \"Applied\", order: 7 },\r\n { id: 10, value: \"Credit Approved\", order: 8 },\r\n { id: 11, value: \"With Professionals\", order: 9 },\r\n { id: 6, value: \"Completed\", order: 10 },\r\n { id: 7, value: \"Dormant\", order: 11 },\r\n { id: 9, value: \"Submitted To Lenders Pending Review\", order: 12 },\r\n ];\r\n\r\n lenderCaseStatuses: Array<{ id: number; value: string; order: number }> = [\r\n { id: 0, value: \"Shortlisted\", order: 1 },\r\n { id: 1, value: \"Received\", order: 2 },\r\n { id: 2, value: \"Offered\", order: 3 },\r\n { id: 3, value: \"Rejected\", order: 4 },\r\n { id: 4, value: \"Withdrawn\", order: 5 },\r\n { id: 10, value: \"Applied\", order: 6 },\r\n ];\r\n\r\n clientCaseNameFilter: string = null;\r\n statusFilter: CaseStatusEnum = null;\r\n\r\n isProceedClicked: boolean = false;\r\n\r\n userOrganisation: OrganisationDTO = null;\r\n\r\n isBrokerNIntroducer: boolean = false;\r\n showOrgModal: boolean = false;\r\n welcomeSetting: boolean = false;\r\n popupHeader: string;\r\n\r\n appPackagePrices: AppPackagePricingDTO[];\r\n isSelected: boolean = false;\r\n selectedProduct: AppPackagePricingDTO = null;\r\n showPaymentModal: boolean = false;\r\n moduleAppFeatures: ModuleAppFeatureDTO[];\r\n moduleFeatureCount: number = 0;\r\n selecteFeatureCount: number = 0;\r\n licenseStatus: LicenseMasterStatusEnum = LicenseMasterStatusEnum.PaidUp;\r\n selectedProductList: AppPackagePricingDTO[] = [];\r\n billingFrequency: Array<{ id: number; value: string }> = [\r\n { id: 1, value: \"Monthly\" },\r\n { id: 2, value: \"Yearly\" },\r\n ];\r\n selectedBillingFrequency: number;\r\n\r\n referrerOptions = [];\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"DevelopmentInputService\",\r\n \"DevelopmentInputWithNoLoginService\",\r\n \"UserService\",\r\n \"CaseService\",\r\n \"RoleService\",\r\n \"AuthService\",\r\n \"IntroducerService\",\r\n \"IntroducerSimpleService\",\r\n \"CaseSummaryService\",\r\n \"LenderService\",\r\n \"$cookies\",\r\n \"CaseMemberService\",\r\n \"InviteService\",\r\n \"OrganisationService\",\r\n \"PaymentService\",\r\n \"LicenseService\",\r\n \"SelectListService\",\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private $DevelopmentInputWithNoLoginService: DevelopmentInputWithNoLoginService,\r\n private $user: UserService,\r\n private $CaseService: CaseService,\r\n private roleService: RoleService,\r\n private authService: AuthService,\r\n private $IntroducerService: IntroducerService,\r\n private $IntroducerSimpleService: IntroducerSimpleService,\r\n private $CaseSummaryService: CaseSummaryService,\r\n private $LenderService: LenderService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $applicantservice: CaseMemberService,\r\n private inviteService: InviteService,\r\n private organisationService: OrganisationService,\r\n private $paymentService: PaymentService,\r\n private licenseService: LicenseService,\r\n private selectListService: SelectListService,\r\n ) {\r\n this.initialise();\r\n\r\n if ((this.$rootScope as any).openWelcomeBrokerModal) {\r\n this.authService.getadminProfile().then((result) => {\r\n if (result) {\r\n this.orgAdminName = result.UserName;\r\n this.orgAdminEmail = result.Email;\r\n this.showBrokerWelcomeMessage = true;\r\n }\r\n });\r\n }\r\n\r\n this.referrerOptions = this.selectListService.GetReferrerOptions();\r\n }\r\n\r\n initialise() {\r\n //Introducers\r\n this.introducerFirstLogin = (this.$rootScope as any).introducerFirstLogin;\r\n\r\n //get type of user\r\n this.roleService.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.adminUser = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n this.isPrimaryApplicant = false;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"lender\").length > 0) {\r\n this.isLender = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"client\").length > 0) {\r\n this.isBorrower = true;\r\n }\r\n\r\n //This is do hide introduced search\r\n if (\r\n this.isBroker &&\r\n result.filter((x) => x.toLowerCase() == \"introducer\").length > 0\r\n ) {\r\n this.isBrokerNIntroducer = true;\r\n }\r\n\r\n this.userRolesMessage = this.generateUserRoleString();\r\n\r\n this.authService.getUpdatedProfile().then((prof) => {\r\n this.currentUser = prof;\r\n if ((this.$rootScope as any)?.currentUser?.SubscriptionStatus) {\r\n (this.$rootScope as any).currentUser.SubscriptionStatus =\r\n this.currentUser.SubscriptionStatus;\r\n }\r\n this.organisationService.getOrganisation().then((response) => {\r\n if (response.Id != 0) {\r\n this.userOrganisation = response;\r\n }\r\n\r\n this.popupHeader = \"Customise Premium Features\";\r\n\r\n // only display the broker admin welcome modal once we've retrieved the org info, otherwise there is a delay in showing the company name\r\n if (prof.IsOrganisationAdmin) {\r\n if (\r\n prof.DisplayOrganisationAdminWelcomepage &&\r\n !sessionStorage.getItem(\"showwelcome\")\r\n ) {\r\n //temp comment to show payment engine modal\r\n // this.showOrgModal = prof.DisplayOrganisationAdminWelcomepage;\r\n this.welcomeSetting = !prof.DisplayOrganisationAdminWelcomepage;\r\n sessionStorage.setItem(\"showwelcome\", \"show\");\r\n }\r\n }\r\n });\r\n\r\n if (this.$routeParams.licensemasterId) {\r\n this.licenseService\r\n .fetch(this.$routeParams.licensemasterId)\r\n .then((license: LicenseMasterDTO) => {\r\n this.licenseStatus = license.Status;\r\n if (\r\n license.Status == LicenseMasterStatusEnum.Unpaid ||\r\n license.Status == LicenseMasterStatusEnum.PayFailure ||\r\n license.Status == LicenseMasterStatusEnum.PaidUp\r\n ) {\r\n this.showPaymentModal = true;\r\n }\r\n });\r\n }\r\n\r\n // get invited list of users\r\n this.inviteService\r\n .getInvitedBorrowers(this.currentUser.Id)\r\n .then((result) => {\r\n this.invitedUsers = result;\r\n });\r\n\r\n if (this.isLender) {\r\n //this.$LenderService.getLenderDetailsByUserId(this.currentUser.Id).then((results) => {\r\n // this.lenderName = results.Name;\r\n //});\r\n }\r\n\r\n //If half-registered user hasn't set a password, then prompt them to set one\r\n if (this.currentUser.TemporaryAccount === true) {\r\n this.showSetPasswordModal = true;\r\n }\r\n\r\n //Get my introducer's details\r\n this.$IntroducerSimpleService.getintroducerdetails().then((i) => {\r\n this.introducerSimpleDetails = i;\r\n });\r\n\r\n this.introducerId = prof.RegisteredIntroducerId;\r\n if (prof.RegisteredIntroducerId) {\r\n this.updateIntroducedSearches(prof.RegisteredIntroducerId);\r\n //this.updateIntroducedClientList(prof.RegisteredIntroducerId);\r\n }\r\n\r\n //newdashboard\r\n if ((this.$rootScope as any).clientUsernameBeingViewed) {\r\n this.updateResults();\r\n } else {\r\n //this.$CaseSummaryService.getmycasesandsearches(this.currentUser.UserName).then((results) => {\r\n // this.caseSummaryList = results;\r\n //});\r\n\r\n this.selecteduserName = this.currentUser.UserName;\r\n }\r\n });\r\n });\r\n }\r\n\r\n viewClientsDashboard(userName: string) {\r\n //Look up client's account details\r\n this.dataLoading = true;\r\n this.$user.searchByEmail(userName).then((users) => {\r\n this.selectedUser = users[0];\r\n this.selecteduserName = users[0].Email;\r\n (this.$rootScope as any).clientUsernameBeingViewed = users[0].Email;\r\n this.updateResults();\r\n this.clientAdminTools = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n exitClientView(): void {\r\n (this.$rootScope as any).clientUsernameBeingViewed = null;\r\n this.selecteduserName = this.currentUser.UserName;\r\n this.updateResults();\r\n this.clientAdminTools = true;\r\n }\r\n\r\n userLookup(userSearchTerm: string) {\r\n this.fetchingResults = true;\r\n this.$user\r\n .searchByEmail(userSearchTerm)\r\n .then((response) => {\r\n if (this.isBroker && this.currentUser.IsOrganisationAdmin) {\r\n this.userSearchResults = response.filter(\r\n (x) =>\r\n x.OrganisationReferralId == this.currentUser.OrganisationId ||\r\n x.OrganisationId == this.currentUser.OrganisationId,\r\n );\r\n } else if (this.isBroker) {\r\n this.userSearchResults = response.filter(\r\n (x) =>\r\n x.OrganisationReferralId == this.currentUser.OrganisationId &&\r\n !x.OrganisationId &&\r\n !x.IsOrganisationAdmin,\r\n );\r\n } else {\r\n this.userSearchResults = response;\r\n }\r\n })\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n\r\n saveBlankSearch() {\r\n this.fetchingResults = true;\r\n\r\n let newDTO = {} as DevelopmentInputDTO;\r\n newDTO.OwnerUser = this.selecteduserName;\r\n newDTO.UserId = this.selectedUser.Id;\r\n newDTO.SaveQueryAndResults = true;\r\n\r\n var currentdate = new Date();\r\n newDTO.SearchName = this.newSearchName\r\n ? this.newSearchName\r\n : \"My Loan Search \" +\r\n currentdate.getDate() +\r\n \"/\" +\r\n (currentdate.getMonth() + 1) +\r\n \"/\" +\r\n currentdate.getFullYear();\r\n\r\n newDTO.CI_Dev_Contingency = 0.05;\r\n newDTO.CI_Dev_BuildTerm = 12;\r\n newDTO.CI_Dev_LoanTermReq = 18;\r\n newDTO.CI_Dev_DateOfOrigPurch = new Date();\r\n\r\n this.$DevelopmentInputservice\r\n .addBlankSearch(newDTO)\r\n .then((response) => {\r\n let newCaseSummary = {\r\n CaseName: response.SearchName,\r\n CaseStatus: CaseStatusEnum.Search,\r\n DevelopmentInputID: response.Id,\r\n Client: this.adminUser ? response.OwnerUser : \"\", // The user should always be an admin when adding a blank search but adding the check anyway\r\n PropertyType: response.CI_EndPropType,\r\n Location: response.CI_Dev_Locations,\r\n LandCost: response.Dev_TotLndCostAdj,\r\n BuildCost: response.Dev_TotBuildCostsAdj,\r\n GDV: response.CI_GDVCalculated,\r\n } as CaseSummaryDTO;\r\n this.caseSummaryList.push(newCaseSummary);\r\n })\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n\r\n newBlankCase() {\r\n this.fetchingResults = true;\r\n this.$CaseService\r\n .newBlankCase(this.currentUser, this.isPrimaryApplicant)\r\n .then((newBlankCaseDto) => {\r\n if (newBlankCaseDto && newBlankCaseDto.NewCaseId) {\r\n this.viewCase(newBlankCaseDto.NewCaseId);\r\n this.fetchingResults = false;\r\n }\r\n });\r\n }\r\n\r\n updateResults() {\r\n this.fetchingResults = true;\r\n\r\n if (this.selecteduserName) {\r\n this.selecteduserName = this.selecteduserName;\r\n } else if ((this.$rootScope as any).clientUsernameBeingViewed) {\r\n this.selecteduserName = (\r\n this.$rootScope as any\r\n ).clientUsernameBeingViewed;\r\n } else {\r\n this.selecteduserName = this.currentUser.UserName;\r\n }\r\n\r\n if (this.selecteduserName !== this.currentUser.UserName) {\r\n this.$user.searchByEmail(this.selecteduserName).then((users) => {\r\n this.selectedUser = users[0];\r\n });\r\n }\r\n\r\n //this.$CaseSummaryService.getmycasesandsearches(this.selecteduserName, this.clientCaseNameFilter, this.statusFilter).then((results) => {\r\n // this.caseSummaryList = results;\r\n //}).catch((error) => {\r\n\r\n //}).finally(() => {\r\n // this.fetchingResults = false;\r\n //});\r\n }\r\n\r\n updateIntroducedSearches(RegisteredIntroducerId: number) {\r\n if (!RegisteredIntroducerId) {\r\n return;\r\n }\r\n this.$DevelopmentInputWithNoLoginService\r\n .fetchByIntroducerId(RegisteredIntroducerId)\r\n .then((results) => {\r\n this.unsavedIntroducedSearches = results.filter(\r\n (r) => r.IntroducedSearchStatus < 2,\r\n );\r\n let savedIntroducedSearchesIdentified = results.filter(\r\n (r) => r.IntroducedSearchStatus >= 2,\r\n );\r\n if (savedIntroducedSearchesIdentified.length > 0) {\r\n this.$DevelopmentInputservice\r\n .fetchByIntroducerId(RegisteredIntroducerId)\r\n .then((devInputResults) => {\r\n this.savedIntroducedSearches = devInputResults;\r\n });\r\n }\r\n\r\n this.updateIntroducedClientList();\r\n });\r\n }\r\n\r\n updateIntroducedClientList() {\r\n this.$user.getintroducees(this.currentUser.Id).then((introducedUsers) => {\r\n this.introducedUsers = introducedUsers;\r\n });\r\n }\r\n ApplyFilterOnUsers() {\r\n this.clientAdminTools = false;\r\n this.savedResults = this.allResults.filter(\r\n (x) => !x.IsFullCase && x.OwnerUser == this.selecteduserName,\r\n );\r\n this.savedCases = this.allResults.filter(\r\n (x) => x.IsFullCase && x.OwnerUser == this.selecteduserName,\r\n );\r\n (this.$rootScope as any).clientUsernameBeingViewed = this.selecteduserName;\r\n }\r\n\r\n makeCase(loanCriteriaId: number, isPrimaryApplicant) {\r\n this.isProceedClicked = true;\r\n this.$CaseService\r\n .promotesearchtocase(loanCriteriaId, null, null, isPrimaryApplicant)\r\n .then((newCaseId: number) => {\r\n if (newCaseId) {\r\n this.viewCase(newCaseId);\r\n } else {\r\n this.isProceedClicked = false;\r\n }\r\n })\r\n .catch((response) => {\r\n this.isProceedClicked = false;\r\n });\r\n }\r\n // changed for newcasedashboard\r\n delete(\r\n loanCriteriaId: number,\r\n loanType: number,\r\n index: number,\r\n caseId: number,\r\n ) {\r\n switch (loanType) {\r\n case 0:\r\n //Full case and Saved search\r\n this.$DevelopmentInputservice\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n if (caseId) {\r\n this.$CaseService.markasdeleted(caseId).then((success) => {});\r\n }\r\n })\r\n .finally(() => {\r\n this.caseSummaryList = this.caseSummaryList.filter(\r\n (caseSummary) => caseSummary.DevelopmentInputID != loanCriteriaId,\r\n );\r\n });\r\n\r\n break;\r\n case 2:\r\n //Introducer: Referred search, not claimed by introducee yet\r\n this.$DevelopmentInputWithNoLoginService\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n this.unsavedIntroducedSearches.splice(index, 1);\r\n })\r\n .finally(() => {\r\n this.caseSummaryList = this.caseSummaryList.filter(\r\n (caseSummary) => caseSummary.DevelopmentInputID != loanCriteriaId,\r\n );\r\n });\r\n break;\r\n case 3:\r\n //Introducer: Referred search, claimed by introducee\r\n this.$DevelopmentInputservice\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n this.savedIntroducedSearches.splice(index, 1);\r\n });\r\n break;\r\n }\r\n }\r\n\r\n // changed for newcasedashboard\r\n deleteForCaseSumarry(\r\n loanCriteriaId: number,\r\n loanType: number,\r\n index: number,\r\n caseId: number,\r\n ) {\r\n switch (loanType) {\r\n case 0:\r\n //Full case and Saved search\r\n this.$DevelopmentInputservice\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n if (caseId) {\r\n this.$CaseService.markasdeleted(caseId).then((success) => {});\r\n }\r\n })\r\n .finally(() => {\r\n this.caseSummaryList = this.caseSummaryList.filter(\r\n (caseSummary) => caseSummary.DevelopmentInputID != loanCriteriaId,\r\n );\r\n });\r\n\r\n break;\r\n case 2:\r\n //Introducer: Referred search, not claimed by introducee yet\r\n this.$DevelopmentInputWithNoLoginService\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {})\r\n .finally(() => {\r\n this.caseSummaryList = this.caseSummaryList.filter(\r\n (caseSummary) => caseSummary.DevelopmentInputID != loanCriteriaId,\r\n );\r\n });\r\n break;\r\n }\r\n }\r\n\r\n viewCase(caseId: number) {\r\n //this.$CaseService.getcasefromsearch(developmentId).then((result) => {\r\n //if (result)\r\n this.$location.path(\"/casedashboard/\" + caseId);\r\n //});\r\n }\r\n\r\n //this is not used any more\r\n viewCaseByDIId(newCaseId: number) {\r\n this.$location.path(\"/casedashboard/\" + newCaseId);\r\n }\r\n\r\n viewResults(caseSummary: CaseSummaryDTO) {\r\n if (caseSummary.CaseStatus != CaseStatusEnum.Search && caseSummary.CaseID) {\r\n //this.$CaseService.getcasefromsearch(caseSummary.DevelopmentInputID).then((result) => {\r\n //need to tweak a bit when we have all the case status.\r\n //this.$CaseService.updateTubeMap(result.CaseStatus);\r\n this.$location.path(\r\n \"/results/\" + caseSummary.DevelopmentInputID + \"/\" + caseSummary.CaseID,\r\n );\r\n //});\r\n } else if (caseSummary.UniqueRef != null) {\r\n this.$location.path(\"/referredSearch/\" + caseSummary.UniqueRef);\r\n } else if (caseSummary.DevelopmentInputID) {\r\n this.$location.path(\"/results/\" + caseSummary.DevelopmentInputID);\r\n }\r\n }\r\n\r\n viewIntroducedResults(loanCriteria: DevelopmentWithNoLoginDTO) {\r\n this.$location.path(\"/referredSearch/\" + loanCriteria.UniqueRef);\r\n }\r\n\r\n openModal(developmentInput: CaseSummaryDTO) {\r\n this.confirmName = true;\r\n this.copyCase = developmentInput.DevelopmentInputID;\r\n this.caseId = developmentInput.CaseID;\r\n this.$DevelopmentInputservice\r\n .fetch(developmentInput.DevelopmentInputID)\r\n .then((result) => {\r\n this.caseName = result.SearchName + \" - Copy\";\r\n });\r\n }\r\n\r\n copy() {\r\n this.$DevelopmentInputservice\r\n .copyCase(this.copyCase, this.caseName)\r\n .then((response) => {\r\n let newCaseId = response;\r\n if (newCaseId) {\r\n this.$applicantservice.copyShareholder(this.caseId, newCaseId);\r\n this.viewCase(newCaseId);\r\n }\r\n })\r\n .finally(() => {\r\n this.fetchingResults = false;\r\n });\r\n }\r\n\r\n cancel() {\r\n this.confirmName = false;\r\n delete this.copyCase;\r\n }\r\n\r\n newloan() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n this.$location.path(\"/criteria/0/0/1\");\r\n }\r\n\r\n registerIntroducer() {\r\n this.$location.path(\"/registerintroducer\");\r\n }\r\n\r\n introduceClient() {\r\n this.isProcessingSend = true;\r\n this.invite = {\r\n FirstName: this.clientFirstName,\r\n Email: this.clientEmail,\r\n LastName: this.clientSurname,\r\n InviteerUserId: this.currentUser.Id,\r\n UserId: null,\r\n PhoneNumber: this.clientPhoneNumber,\r\n Status: StatusEnum.Invited,\r\n } as InviteDTO;\r\n\r\n this.inviteService.addUpdate(this.invite).then((response) => {\r\n this.invitedUsers.push(response);\r\n\r\n this.$IntroducerService\r\n .introduceClient(\r\n response.FirstName,\r\n response.Email,\r\n response.LastName,\r\n response.PhoneNumber,\r\n response.guid,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 2;\r\n this.dataLoading = false;\r\n this.isProcessingSend = false;\r\n })\r\n .finally(() => {\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n });\r\n });\r\n }\r\n\r\n inviteBorrower() {\r\n this.invite = {\r\n FirstName: this.clientFirstName,\r\n Email: this.clientEmail,\r\n LastName: this.clientSurname,\r\n InviteerUserId: this.currentUser.Id,\r\n UserId: null,\r\n PhoneNumber: this.clientPhoneNumber,\r\n Status: StatusEnum.Invited,\r\n } as InviteDTO;\r\n\r\n this.inviteService.addUpdate(this.invite).then((response) => {\r\n this.invitedUsers.push(response);\r\n\r\n this.$user.GetUserOrganisation().then((result) => {\r\n if (this.invite && result) {\r\n this.organisationService\r\n .inviteBorrowers(this.invite, result.UniqueRef)\r\n .then((success) => {\r\n this.introduceClientModal = 9;\r\n this.dataLoading = false;\r\n })\r\n .finally(() => {\r\n this.introduceClientModal = 9;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n sendLinkToUser() {\r\n this.$IntroducerService\r\n .sendLinkToUser(\r\n this.currentUser.FirstName,\r\n this.currentUser.Email,\r\n this.currentUser.Id,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 6;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n copyLinkToClipboard() {\r\n this.$IntroducerService\r\n .copyLinkToClipboard(this.currentUser.Id)\r\n .then((response) => {\r\n this.link = response.toString();\r\n navigator.clipboard.writeText(this.link);\r\n this.introduceClientModal = 7;\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n close() {\r\n this.introduceClientModal = null;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n }\r\n\r\n introducerSendResultsToClient(id: number, notifyBorrower: boolean = false) {\r\n this.dataLoading = true;\r\n this.$DevelopmentInputservice.fetch(id).then((response) => {\r\n this.$IntroducerService\r\n .sendResultsToClient(\r\n response,\r\n this.clientFirstName,\r\n this.clientSurname,\r\n this.clientEmail,\r\n notifyBorrower,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 4;\r\n })\r\n .catch((reason) => {\r\n this.introducerErrorDisplayed = true;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n });\r\n });\r\n }\r\n\r\n introducerRefreshSearchesAndClients() {\r\n //Trigger a refresh to show results\r\n this.updateIntroducedSearches(this.introducerId);\r\n this.clientAdminTools = true;\r\n }\r\n\r\n go(path) {\r\n this.$location.path(path);\r\n }\r\n\r\n completeAccount() {\r\n this.currentUser.TemporaryAccount = false;\r\n this.currentUser.Roles = [];\r\n this.currentUser.Roles.push(\"Client\");\r\n if (this.currentUser.ApplicantDefinedRole == 0) {\r\n this.currentUser.NewUserEmailJourneyStarted = true;\r\n }\r\n this.$user.addUpdate(this.currentUser).then((response) => {\r\n this.passwordSetSuccess = true;\r\n });\r\n }\r\n\r\n afterSetPasswordContinue() {\r\n //User needs to be logged out and logged in again\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.authService.logout(false);\r\n }\r\n this.authService\r\n .login(\r\n this.currentUser.Email,\r\n this.currentUser.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n this.$cookies.put(\"user_firstname\", this.currentUser.FirstName, {\r\n expires: expiry,\r\n });\r\n this.showSetPasswordModal = false;\r\n this.initialise();\r\n });\r\n }\r\n\r\n /**\r\n * Order alphabetically\r\n * @param column\r\n * @param index\r\n */\r\n order(column: string, index: number) {\r\n this.isAscButton[index] = !this.isAscButton[index];\r\n this.isAsc = this.isAscButton[index];\r\n this.orderColumn = column;\r\n\r\n this.caseSummaryList.sort((rowA: CaseSummaryDTO, rowB: CaseSummaryDTO) => {\r\n let rowAValue = rowA[column];\r\n let rowBValue = rowB[column];\r\n\r\n if (rowAValue == rowBValue) {\r\n return 0;\r\n }\r\n\r\n return this.isAsc\r\n ? rowAValue < rowBValue\r\n ? -1\r\n : 1\r\n : rowAValue < rowBValue\r\n ? 1\r\n : -1;\r\n });\r\n }\r\n\r\n /**\r\n * Order numerically\r\n * @param column\r\n * @param index\r\n */\r\n orderNumber(column, index: number) {\r\n this.isAscButton[index] = !this.isAscButton[index];\r\n this.isAsc = this.isAscButton[index];\r\n this.orderColumn = column;\r\n\r\n this.caseSummaryList.sort((rowA: CaseSummaryDTO, rowB: CaseSummaryDTO) => {\r\n let rowAValue = rowA[column];\r\n let rowBValue = rowB[column];\r\n\r\n return this.isAsc ? rowAValue - rowBValue : rowBValue - rowAValue;\r\n });\r\n }\r\n\r\n /**\r\n * Order by the display value e.g. for enums\r\n * @param column\r\n * @param index\r\n */\r\n orderByDisplayValue(column: string, index: number) {\r\n this.isAscButton[index] = !this.isAscButton[index];\r\n this.isAsc = this.isAscButton[index];\r\n this.orderColumn = column;\r\n\r\n var lookup: Array<{ id: number; value: string }>;\r\n\r\n switch (column) {\r\n case \"PropertyType\": {\r\n lookup = this.propertyTypes;\r\n break;\r\n }\r\n case \"Location\": {\r\n lookup = this.locations;\r\n break;\r\n }\r\n default: {\r\n //Error - undefined sort column\r\n }\r\n }\r\n\r\n this.caseSummaryList.sort((rowA: CaseSummaryDTO, rowB: CaseSummaryDTO) => {\r\n let rowAValue = lookup.find((a) => a.id == rowA[column]).value;\r\n let rowBValue = lookup.find((b) => b.id == rowB[column]).value;\r\n\r\n if (rowAValue == rowBValue) {\r\n return 0;\r\n }\r\n\r\n return this.isAsc\r\n ? rowAValue < rowBValue\r\n ? -1\r\n : 1\r\n : rowAValue < rowBValue\r\n ? 1\r\n : -1;\r\n });\r\n }\r\n\r\n /**\r\n * Order by a specified numeric order\r\n * @param column\r\n * @param index\r\n */\r\n orderByOrderNumber(column: string, index: number) {\r\n this.isAscButton[index] = !this.isAscButton[index];\r\n this.isAsc = this.isAscButton[index];\r\n this.orderColumn = column;\r\n\r\n var lookup: Array<{ id: number; value: string; order: number }>;\r\n\r\n switch (column) {\r\n case \"CaseStatus\": {\r\n lookup = this.caseStatuses;\r\n break;\r\n }\r\n case \"CaseLenderState\": {\r\n lookup = this.lenderCaseStatuses;\r\n break;\r\n }\r\n default: {\r\n //Error - undefined sort column\r\n }\r\n }\r\n\r\n this.caseSummaryList.sort((rowA: CaseSummaryDTO, rowB: CaseSummaryDTO) => {\r\n let rowAOrder = lookup.find((a) => a.id == rowA[column]).order;\r\n let rowBOrder = lookup.find((b) => b.id == rowB[column]).order;\r\n\r\n return this.isAsc ? rowAOrder - rowBOrder : rowBOrder - rowAOrder;\r\n });\r\n }\r\n\r\n /**\r\n * Opens the Share search modal\r\n * @param item\r\n */\r\n openShareSearchModal(item: CaseSummaryDTO) {\r\n this.selectedResult = item.DevelopmentInputID;\r\n this.introduceClientModal = 3;\r\n\r\n if (\r\n this.roleService.isAdminUser &&\r\n item.ClientEmail != this.currentUser.UserName\r\n ) {\r\n this.clientFirstName = item.ClientFirstName;\r\n this.clientSurname = item.ClientSurname;\r\n this.clientEmail = item.ClientEmail;\r\n } else {\r\n this.clientFirstName = \"\";\r\n this.clientSurname = \"\";\r\n this.clientEmail = \"\";\r\n }\r\n }\r\n\r\n showResultButton(caseStatus: CaseStatusEnum) {\r\n if (\r\n caseStatus == CaseStatusEnum.SubmittedToLendersForHoT ||\r\n caseStatus == CaseStatusEnum.Applied ||\r\n caseStatus == CaseStatusEnum.CreditApproved ||\r\n caseStatus == CaseStatusEnum.Completed ||\r\n caseStatus == CaseStatusEnum.WithProfessionals\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n closeWelcomePopup() {\r\n if (\r\n this.currentUser.DisplayOrganisationAdminWelcomepage ==\r\n this.welcomeSetting\r\n ) {\r\n this.currentUser.DisplayOrganisationAdminWelcomepage =\r\n !this.welcomeSetting;\r\n this.$user.addUpdate(this.currentUser).then((userResponse) => {\r\n this.showOrgModal = false;\r\n });\r\n } else {\r\n this.showOrgModal = false;\r\n }\r\n }\r\n\r\n fillRegisterForm() {\r\n this.currentUser.Location = 1;\r\n this.currentUser.Password = \"test\";\r\n (this.currentUser as any).ConfirmPassword = \"test\";\r\n }\r\n\r\n generateUserRoleString() {\r\n var str = \"Your role: \";\r\n\r\n if (this.adminUser) {\r\n str += \"Admin \";\r\n } else if (this.isBroker) {\r\n if (this.isBrokerNIntroducer) {\r\n str += \"Broker and Introducer \";\r\n } else {\r\n str += \"Broker \";\r\n }\r\n } else if (this.isLender) {\r\n str += \"Lender \";\r\n if (this.lenderName) {\r\n str += \"(\" + this.lenderName + \")\";\r\n }\r\n } else if (this.isBorrower) {\r\n str += \"Borrower \";\r\n if (this.userOrganisation?.Name?.length > 0) {\r\n str +=\r\n \"(Your Broker Organisation: \" + this.userOrganisation?.Name + \")\";\r\n }\r\n }\r\n return str;\r\n }\r\n}\r\n","import { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseLenderService } from \"@js/services/CaseLenderService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { CaseSummaryService } from \"@js/services/CaseSummaryService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { DevelopmentInputWithNoLoginService } from \"@js/services/DevelopmentInputWithNoLoginService\";\r\nimport { IntroducerService } from \"@js/services/IntroducerService\";\r\nimport { IntroducerSimpleService } from \"@js/services/IntroducerSimpleService\";\r\nimport { InviteService } from \"@js/services/InviteService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { LicenseService } from \"@js/services/LicenseService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { TaskItemService } from \"@js/services/TaskItemService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class NewSearchSelectionsController {\r\n selectedRole: number;\r\n\r\n RoleEnum = {\r\n All: 0,\r\n DevelopmentFinance: 1,\r\n BridgingFinance: 2,\r\n Clients: 3,\r\n };\r\n\r\n selectedNavMenu: number;\r\n brokerageOrg: OrganisationDTO;\r\n hasBridging: boolean = false;\r\n hasCommercial: boolean = false;\r\n dataLoading: boolean = false;\r\n selectedProduct: string = null;\r\n userDetails: string = null;\r\n\r\n isCommercialOwnerOccupiedActive: boolean = false;\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"DevelopmentInputService\",\r\n \"DevelopmentInputWithNoLoginService\",\r\n \"UserService\",\r\n \"CaseService\",\r\n \"RoleService\",\r\n \"AuthService\",\r\n \"IntroducerService\",\r\n \"IntroducerSimpleService\",\r\n \"CaseSummaryService\",\r\n \"LenderService\",\r\n \"$cookies\",\r\n \"CaseMemberService\",\r\n \"InviteService\",\r\n \"OrganisationService\",\r\n \"PaymentService\",\r\n \"LicenseService\",\r\n \"CaseLenderService\",\r\n \"UserService\",\r\n \"TaskItemService\",\r\n \"SelectListService\",\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $DevelopmentInputService: DevelopmentInputService,\r\n private $DevelopmentInputWithNoLoginService: DevelopmentInputWithNoLoginService,\r\n private $user: UserService,\r\n private $CaseService: CaseService,\r\n private roleService: RoleService,\r\n private authService: AuthService,\r\n private $IntroducerService: IntroducerService,\r\n private $IntroducerSimpleService: IntroducerSimpleService,\r\n private $CaseSummaryService: CaseSummaryService,\r\n private $LenderService: LenderService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $applicantservice: CaseMemberService,\r\n private inviteService: InviteService,\r\n private organisationService: OrganisationService,\r\n private $paymentService: PaymentService,\r\n private licenseService: LicenseService,\r\n private caseLenderService: CaseLenderService,\r\n private userService: UserService,\r\n private taskItemService: TaskItemService,\r\n private selectListService: SelectListService,\r\n ) {\r\n this.authService.isCommercialOwnerOccupiedActive().then((response) => {\r\n this.isCommercialOwnerOccupiedActive = response;\r\n });\r\n\r\n this.getUser()\r\n .then(() => {\r\n (this.$rootScope as any).isInvitedAndHasReadonlyAccess = false;\r\n\r\n if (this.$routeParams[\"Type\"] == \"bridging\") {\r\n this.selectedRole = this.RoleEnum.BridgingFinance;\r\n this.selectedNavMenu = this.RoleEnum.BridgingFinance;\r\n } else {\r\n this.selectedRole = this.RoleEnum.All;\r\n this.selectedNavMenu = this.RoleEnum.All;\r\n }\r\n\r\n if (window.self == window.top && $cookies.get(\"access_token\")) {\r\n this.organisationService\r\n .getOrganisationProductAccess()\r\n .then((response) => {\r\n this.hasBridging = response.HasBridging;\r\n this.hasCommercial = response.HasCommercial;\r\n this.checkProductSelected();\r\n });\r\n } else {\r\n if (\r\n !location.pathname.startsWith(\"/otmx\") &&\r\n !location.pathname.startsWith(\"/lnhn\")\r\n ) {\r\n var orgCode = location.pathname.replace(\"/\", \"\");\r\n if (orgCode && orgCode.length > 0) {\r\n this.organisationService\r\n .getOrganisationByOrgCode(location.pathname.replace(\"/\", \"\"))\r\n .then((org) => {\r\n this.hasBridging = org?.HasBridging;\r\n this.hasCommercial = org?.HasCommercialMortgage;\r\n this.checkProductSelected();\r\n });\r\n } else {\r\n //This is for borrower belong to BF org\r\n this.hasBridging = true;\r\n this.hasCommercial = true;\r\n }\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(\"Failed to get initialize data: \", error);\r\n });\r\n }\r\n\r\n async getUser(): Promise {\r\n if (window.self == window.top) {\r\n this.userDetails = sessionStorage.getItem(\"userDetails\");\r\n } else {\r\n this.userDetails = await this.organisationService.getData(\"userDetails\");\r\n }\r\n }\r\n\r\n goToNewDevFinanceSearch(productSelected: boolean = false) {\r\n if (productSelected || this.userDetails) {\r\n if (this.hasBridging) {\r\n //localStorage.removeItem('selectedProduct');\r\n this.$location.path(\"/criteria\");\r\n }\r\n } else {\r\n this.selectedProduct = \"devFinance\";\r\n this.$location.path(\"/borrowerinitialregistration\");\r\n }\r\n }\r\n\r\n goToNewBridgingSearch(productSelected: boolean = false) {\r\n if (productSelected || this.userDetails) {\r\n if (this.hasBridging) {\r\n //localStorage.removeItem('selectedProduct');\r\n this.$location.path(\"/bridgingcriteria\");\r\n }\r\n } else {\r\n sessionStorage.setItem(\"selectedProduct\", \"bridging\");\r\n this.$location.path(\"/bridgingcriteria\");\r\n }\r\n }\r\n\r\n goToNewCommercialSearch() {\r\n if (this.userDetails) {\r\n if (this.hasCommercial) {\r\n this.$location.path(\"/commercialcriteria\");\r\n }\r\n }\r\n }\r\n\r\n goToNewPurchaseOrRefinanceSearch(productSelected: boolean = false) {\r\n if (productSelected || sessionStorage.getItem(\"userDetails\")) {\r\n if (this.hasBridging) {\r\n sessionStorage.removeItem(\"selectedProduct\");\r\n this.$location.path(\"/purchaserefinancecriteria\");\r\n }\r\n } else {\r\n this.selectedProduct = \"purchaseOrRefinance\";\r\n this.$location.path(\"/bridgingcriteria\");\r\n }\r\n }\r\n\r\n checkProductSelected() {\r\n switch (this.selectedProduct) {\r\n case null:\r\n break;\r\n case \"devFinance\":\r\n this.goToNewDevFinanceSearch(true);\r\n break;\r\n case \"bridging\":\r\n this.goToNewBridgingSearch(true);\r\n break;\r\n case \"purchaseOrRefinance\":\r\n this.goToNewPurchaseOrRefinanceSearch(true);\r\n break;\r\n default:\r\n return;\r\n }\r\n }\r\n}\r\n","export const enum OrganisationTypeEnum {\r\n General = 0,\r\n Broker = 1,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { InvitedBrokerDTO } from \"@js/DTO/InvitedBrokerDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { OrganisationLinkDTO } from \"@js/DTO/OrgnisationLinkDTO.cs.d\";\r\nimport { PageWithTotalCountDTO } from \"@js/DTO/PageWithTotalCountDTO.cs.d\";\r\nimport { BrokerNetworkEnum } from \"@js/models/enum/BrokerNetworkEnum.cs\";\r\nimport { CRMEnum } from \"@js/models/enum/CRMEnum.cs\";\r\nimport { LinkTypeEnum } from \"@js/models/enum/LinkTypeEnum.cs.d\";\r\nimport { OrganisationTypeEnum } from \"@js/models/enum/OrganisationTypeEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { ListItem, SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport angular from \"angular\";\r\nimport { OrganisationLinkService } from \"@js/services/OrganisationLinkService\"\r\n\r\nexport class OrganisationsController {\r\n organisations: PageWithTotalCountDTO;\r\n selectedOrganisation: OrganisationDTO;\r\n originalOrganisation: OrganisationDTO;\r\n currentUser: ApplicationUserDTO;\r\n\r\n //invite users\r\n newUser: InvitedBrokerDTO;\r\n users: InvitedBrokerDTO[] = [];\r\n showModal: boolean = false;\r\n\r\n //rename Email\r\n renamingItem: InvitedBrokerDTO;\r\n newName: InvitedBrokerDTO = {\r\n Email: null,\r\n FirstName: null,\r\n };\r\n tempdata: InvitedBrokerDTO;\r\n //Brokers\r\n organisationAdminId: string;\r\n organisationAdmin: ApplicationUserDTO;\r\n organisationUsers: ApplicationUserDTO[];\r\n organisationUsersExceptAdmin: ApplicationUserDTO[];\r\n licensedOrganisationUsers: ApplicationUserDTO[];\r\n // temp storing user while deleteing\r\n confirmDeleteUser: ApplicationUserDTO;\r\n\r\n uniqueLinks: OrganisationLinkDTO[];\r\n selectedUniqueLink: OrganisationLinkDTO;\r\n\r\n page: number = 1;\r\n rolepageid: any;\r\n userFilter: string = \"\";\r\n countperpage: number = 10;\r\n\r\n loadingRoles: boolean;\r\n error: boolean;\r\n isInvalidForm: boolean;\r\n\r\n logoURL: string;\r\n\r\n deleteMessage: string;\r\n\r\n deleteConfirmMessage: string;\r\n\r\n registrationForm: ng.IFormController;\r\n\r\n addEmail: ng.IFormController;\r\n\r\n deleteConfirmation: boolean;\r\n messageDeleteModal: boolean;\r\n goToUserDashboard: boolean;\r\n brokerUserDelete: boolean = false;\r\n\r\n //toggle to control the Broker user section\r\n showBrokerUsers: boolean = false;\r\n\r\n profileEdit: ApplicationUserDTO;\r\n showEdit: boolean = false;\r\n isAdmin: boolean;\r\n newname: string;\r\n // Show and hide a input field to add users.\r\n hideInput: boolean = false;\r\n showErrorMsg: boolean = false;\r\n errorMsg: string;\r\n imageErrorMsg: string;\r\n\r\n // Indicates when org is saving\r\n isProcessingOrgSave: boolean = false;\r\n\r\n // Indicates when invites are being sent\r\n isProcessingInvites: boolean = false;\r\n\r\n // Indicates when saving a broker profile\r\n isProcessingProfileSave: boolean = false;\r\n\r\n orgFilter: string = \"\";\r\n\r\n allActiveAppPackagePrices: AppPackagePricingDTO[];\r\n selectedProductList: AppPackagePricingDTO[] = [];\r\n licenseEndDate: Date;\r\n quantity = 1;\r\n\r\n ShowIsBrickflow: boolean = true;\r\n buttonColor: string = \"#304b9a\";\r\n message: string;\r\n messageTitle: string;\r\n widgetModal: boolean = false;\r\n showLeadGenLicenseActive: boolean = false;\r\n leadGeneratorName: string;\r\n\r\n teamSizeOptions = [];\r\n linkTypeOptions = [];\r\n\r\n isAddonSelected: boolean = false;\r\n licenseStatusText: string;\r\n whiteLabelledUrl: string = \"\";\r\n\r\n showTestEmailModal: boolean = false;\r\n showTestEmailSentConfirmation: boolean = false;\r\n testEmails: string;\r\n testEmailBody: string = \"This is a test email.\";\r\n testEmailSubject: string = \"Test email\";\r\n isValidOrgCode: boolean = true;\r\n validateCodeClicked: boolean = false;\r\n fetchingUniqueLinks: boolean = false;\r\n displayMessage: string = \"\";\r\n deleteUniqueLinkClicked: boolean = false;\r\n confirmUniqueLinkDeletion: boolean = false;\r\n isEditUniqueLink: boolean = false;\r\n showEditUniqueLinkModal: boolean = false;\r\n editLogo: boolean = false;\r\n isSavingUniqueLink: boolean = false;\r\n ulsavemessage: string = \"\";\r\n\r\n organisation: OrganisationDTO;\r\n orgCode: string = \"\";\r\n orgLogo: string = \"\";\r\n\r\n //Preview a registration page\r\n previewContent: boolean = true;\r\n showPreview: boolean = false;\r\n\r\n hubspotMessage: string;\r\n isHubspotValid: boolean = false;\r\n missingProperties: string[];\r\n\r\n locationOptions = [];\r\n organisationThemeColour: string;\r\n\r\n // Dropdown to select widget/ enterprise\r\n showDevFinanaceLinkOptions: boolean = false;\r\n showAllLoansLinkOptions: boolean = false;\r\n showBridgingLinkOptions: boolean = false;\r\n showCommercialLinkOptions: boolean = false;\r\n\r\n showLinkOptions: boolean[];\r\n\r\n connectNetworkOrgId: number;\r\n crms = this.selectListService.GetCRMs();\r\n brokerNetworks = this.selectListService.GetBrokerNetworks();\r\n selectedCRMs: ListItem[];\r\n selectedBrokerNetworks: ListItem[];\r\n showMarkAsConnectConfirmationModal: boolean = false;\r\n isMarkAsConnectConfirmed: boolean = false;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"OrganisationService\",\r\n \"FileAttachmentService\",\r\n \"PaymentService\",\r\n \"UserService\",\r\n \"$window\",\r\n \"AuthService\",\r\n \"SelectListService\",\r\n \"OrganisationLinkService\"\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $auth: AuthService,\r\n private $role: RoleService,\r\n private $organisationService: OrganisationService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private $paymentService: PaymentService,\r\n private userService: UserService,\r\n private $window: ng.IWindowService,\r\n private authService: AuthService,\r\n private selectListService: SelectListService,\r\n private organisationLinkService: OrganisationLinkService\r\n ) {\r\n this.loadingRoles = true;\r\n this.deleteConfirmation = false;\r\n this.messageDeleteModal = false;\r\n this.isInvalidForm = true;\r\n\r\n if (sessionStorage.getItem(\"filterText\")) {\r\n this.orgFilter = sessionStorage.getItem(\"filterText\");\r\n sessionStorage.removeItem(\"filterText\");\r\n }\r\n\r\n if (sessionStorage.getItem(\"pageNo\")) {\r\n this.setPage(Number(sessionStorage.getItem(\"pageNo\")));\r\n sessionStorage.removeItem(\"pageNo\");\r\n } else {\r\n this.setPage(1);\r\n }\r\n this.checkForAdmin();\r\n this.authService.getUpdatedProfile().then((prof) => {\r\n this.currentUser = prof;\r\n });\r\n\r\n this.leadGeneratorName = this.$cookies.get(\"leadgeneratorname\");\r\n this.teamSizeOptions = this.selectListService.GetTeamSizeOptions();\r\n this.getWhiteLabelledUrl();\r\n this.getConnectNetworkOrgId();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n }\r\n\r\n onSelectingOrganisation(selectedOrganisation) {\r\n this.selectedOrganisation = selectedOrganisation;\r\n this.originalOrganisation = { ...this.selectedOrganisation };\r\n this.getOrganisationDetail();\r\n this.fetchUniqueLinks();\r\n this.initializeSelectedNetworks();\r\n this.initializeCRMs();\r\n this.ShowIsBrickflow =\r\n selectedOrganisation.IsBrickflow ||\r\n this.organisations.List.every((org) => !org.IsBrickflow);\r\n }\r\n\r\n getLogoURL(url: string) {\r\n if (url) {\r\n this.fileAttachmentService.getFileUri(url).then((result) => {\r\n this.selectedOrganisation.LogoURL = result;\r\n });\r\n }\r\n }\r\n\r\n changeCompanyLogo(files, logoUrl: number) {\r\n this.imageErrorMsg = null;\r\n const allowedExtensions = [\r\n \"jpg\",\r\n \"jpeg\",\r\n \"png\",\r\n \"gif\",\r\n \"bmp\",\r\n \"tif\",\r\n \"tiff\",\r\n \"ico\",\r\n \"jfif\",\r\n \"pjpeg\",\r\n \"pjp\",\r\n \"apng\",\r\n ];\r\n const filteredFiles = files.filter((file) => {\r\n const fileExtension = file.name.split(\".\").pop()?.toLowerCase();\r\n return fileExtension && allowedExtensions.indexOf(fileExtension) !== -1;\r\n });\r\n\r\n if (filteredFiles.length === 0 && files.length > 0) {\r\n this.imageErrorMsg =\r\n \"Invalid file type: SVG and webp formats are not supported\";\r\n return;\r\n }\r\n this.fileAttachmentService\r\n .uploadPublicImage(files, this.selectedOrganisation.OrganisationCode)\r\n .then((imageUrl) => {\r\n if (logoUrl == 1) {\r\n this.selectedOrganisation.LogoURL = imageUrl;\r\n this.orgLogo = imageUrl;\r\n } else {\r\n this.selectedOrganisation.FaviconURL = imageUrl;\r\n }\r\n\r\n this.registrationForm.$setDirty();\r\n });\r\n }\r\n\r\n removeCompanyLogo(removeLogoUrl) {\r\n if (removeLogoUrl) {\r\n this.selectedOrganisation.LogoURL = null;\r\n this.orgLogo = null;\r\n } else {\r\n this.selectedOrganisation.FaviconURL = null;\r\n }\r\n this.registrationForm.$setDirty();\r\n }\r\n\r\n setPage(newPage: number): void {\r\n this.loadingRoles = true;\r\n this.page = newPage;\r\n this.$organisationService\r\n .fetchpage(this.orgFilter, this.page, this.countperpage)\r\n .then((response) => {\r\n this.organisations = response;\r\n\r\n if (sessionStorage.getItem(\"selectedOrganisation\")) {\r\n this.selectedOrganisation = this.organisations.List.find(\r\n (organisation) =>\r\n organisation.UniqueRef ===\r\n sessionStorage.getItem(\"selectedOrganisation\"),\r\n );\r\n this.originalOrganisation = { ...this.selectedOrganisation };\r\n this.getOrganisationDetail();\r\n this.fetchUniqueLinks();\r\n sessionStorage.removeItem(\"selectedOrganisation\");\r\n } else if (this.organisations.List.length == 1) {\r\n this.selectedOrganisation = this.organisations.List[0];\r\n this.originalOrganisation = { ...this.selectedOrganisation };\r\n this.getOrganisationDetail();\r\n this.fetchUniqueLinks();\r\n }\r\n this.loadingRoles = false;\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n this.loadingRoles = false;\r\n });\r\n }\r\n\r\n displayItem(item) {\r\n this.selectedOrganisation = item;\r\n }\r\n\r\n addUser() {\r\n var temp = { ...this.newUser };\r\n this.users.push(temp);\r\n this.newUser.Email = null;\r\n this.newUser.FirstName = null;\r\n this.addEmail.$setPristine();\r\n }\r\n\r\n invite() {\r\n this.isProcessingInvites = true;\r\n\r\n this.$organisationService\r\n .inviteBrokers(this.users, this.selectedOrganisation.UniqueRef)\r\n .finally(() => {\r\n delete this.newUser;\r\n this.users = [];\r\n this.hideInput = false;\r\n this.deleteMessage = \"Invitations have been sent.\";\r\n this.messageDeleteModal = true;\r\n })\r\n .finally(() => {\r\n this.isProcessingInvites = false;\r\n });\r\n }\r\n\r\n removeEmail(item: InvitedBrokerDTO) {\r\n this.users = this.users.filter((x) => x != item);\r\n }\r\n\r\n renameItem(item: InvitedBrokerDTO) {\r\n if (this.renamingItem === undefined) {\r\n this.newName = item;\r\n this.renamingItem = item;\r\n this.tempdata = { ...this.renamingItem };\r\n } else {\r\n delete this.renamingItem;\r\n }\r\n }\r\n\r\n cancelRenaming(item: InvitedBrokerDTO) {\r\n this.users = this.users.filter((x) => x != item);\r\n this.users.push(this.tempdata);\r\n delete this.renamingItem;\r\n this.addEmail.editUserFirstName.$setUntouched();\r\n this.addEmail.editUserEmail.$setUntouched();\r\n }\r\n\r\n renamingItemComplete(item: InvitedBrokerDTO) {\r\n this.users = this.users.filter((x) => x != item);\r\n this.users.push(this.newName);\r\n this.renamingItem = null;\r\n }\r\n\r\n addNewUser() {\r\n if (this.newUser.Email != null && this.newUser.FirstName != null) {\r\n this.addUser();\r\n this.addEmail.newUserFirstName.$setUntouched();\r\n this.addEmail.newUserEmail.$setUntouched();\r\n }\r\n }\r\n\r\n cancelAddingNewUser() {\r\n this.newUser.Email = null;\r\n this.newUser.FirstName = null;\r\n this.addEmail.newUserFirstName.$setUntouched();\r\n this.addEmail.newUserEmail.$setUntouched();\r\n }\r\n\r\n getFocusToInput() {\r\n var getelement = this.$window.document.getElementById(\"newuser\");\r\n getelement.focus();\r\n }\r\n\r\n removeErrors() {\r\n delete this.error;\r\n this.orgCode = this.selectedOrganisation.OrganisationCode;\r\n }\r\n\r\n saveOrganisation(): void {\r\n delete this.error;\r\n this.isProcessingOrgSave = true;\r\n\r\n if (this.selectedOrganisation.IsConnectMember && this.originalOrganisation && !this.originalOrganisation.IsConnectMember && !this.isMarkAsConnectConfirmed) {\r\n this.showMarkAsConnectConfirmationModal = true;\r\n return;\r\n }\r\n\r\n if (this.selectedOrganisation.OrganisationThemeColour && (this.selectedOrganisation.OrganisationThemeColour == \"#304B9A\" || this.selectedOrganisation.OrganisationThemeColour == \"#304b9a\")) {\r\n this.selectedOrganisation.OrganisationThemeColour = \"\";\r\n }\r\n\r\n if (\r\n this.selectedOrganisation.CompanyURL != null &&\r\n this.selectedOrganisation.CompanyURL.replace(/^https?\\:\\/\\//g, \"\")\r\n .length > 0\r\n ) {\r\n if (!/^https?:\\/\\//i.test(this.selectedOrganisation.CompanyURL)) {\r\n this.selectedOrganisation.CompanyURL = `https://${this.selectedOrganisation.CompanyURL}`;\r\n }\r\n }\r\n\r\n if (\r\n this.selectedOrganisation.HasWhiteLabelAddOnPaid &&\r\n this.selectedOrganisation.IsWhiteLabelled\r\n ) {\r\n if (\r\n this.selectedOrganisation.TwitterUrl &&\r\n this.selectedOrganisation.TwitterUrl.length > 0\r\n ) {\r\n if (!/^https?:\\/\\//i.test(this.selectedOrganisation.TwitterUrl)) {\r\n this.selectedOrganisation.TwitterUrl = `https://${this.selectedOrganisation.TwitterUrl}`;\r\n }\r\n }\r\n if (\r\n this.selectedOrganisation.FacebookUrl &&\r\n this.selectedOrganisation.FacebookUrl.length > 0\r\n ) {\r\n if (!/^https?:\\/\\//i.test(this.selectedOrganisation.FacebookUrl)) {\r\n this.selectedOrganisation.FacebookUrl = `https://${this.selectedOrganisation.FacebookUrl}`;\r\n }\r\n }\r\n if (\r\n this.selectedOrganisation.YouTubeUrl &&\r\n this.selectedOrganisation.YouTubeUrl.length > 0\r\n ) {\r\n if (!/^https?:\\/\\//i.test(this.selectedOrganisation.YouTubeUrl)) {\r\n this.selectedOrganisation.YouTubeUrl = `https://${this.selectedOrganisation.YouTubeUrl}`;\r\n }\r\n }\r\n if (\r\n this.selectedOrganisation.LinkedInUrl &&\r\n this.selectedOrganisation.LinkedInUrl.length > 0\r\n ) {\r\n if (!/^https?:\\/\\//i.test(this.selectedOrganisation.LinkedInUrl)) {\r\n this.selectedOrganisation.LinkedInUrl = `https://${this.selectedOrganisation.LinkedInUrl}`;\r\n }\r\n }\r\n }\r\n /* }*/\r\n\r\n this.saveSelectedCRMs();\r\n this.saveSelectedNetworks();\r\n\r\n var isOrgConvertedToConnectMember = this.selectedOrganisation.IsConnectMember && this.originalOrganisation && !this.originalOrganisation.IsConnectMember;\r\n\r\n this.$organisationService\r\n .saveOrganisation(this.selectedOrganisation, isOrgConvertedToConnectMember)\r\n .then((response) => {\r\n if (\r\n this.organisationAdminId &&\r\n this.organisationAdmin.Id != this.organisationAdminId\r\n ) {\r\n this.userService.setBrokerOrgAdmin(\r\n this.selectedOrganisation.Id,\r\n this.organisationAdminId,\r\n );\r\n }\r\n\r\n (this.$rootScope as any).formSaved = true;\r\n let index = this.organisations.List.indexOf(this.selectedOrganisation);\r\n this.organisations.List.splice(index, 1);\r\n this.organisations.List.push(this.selectedOrganisation);\r\n delete this.selectedOrganisation;\r\n if (this.organisations.List.length == 1) {\r\n this.selectedOrganisation = this.organisations.List[0];\r\n }\r\n\r\n this.registrationForm.$setPristine();\r\n this.deleteMessage = \"Your changes have been saved.\";\r\n this.messageDeleteModal = true;\r\n this.goToUserDashboard = true; // When the User closes the pop-up box, they will be redirected to the User Dashboard\r\n })\r\n .catch((response) => {\r\n this.error = response.data;\r\n })\r\n .finally(() => {\r\n this.isProcessingOrgSave = false;\r\n });\r\n }\r\n\r\n validateForm() {\r\n if (this.registrationForm.$invalid) {\r\n let invalidName;\r\n angular.forEach(this.registrationForm.$error, function (field) {\r\n angular.forEach(field, function (errorfield) {\r\n errorfield.$setTouched();\r\n invalidName = errorfield.$name;\r\n });\r\n });\r\n let element = this.$window.document.getElementsByName(\r\n invalidName,\r\n )[0] as unknown as HTMLElement;\r\n element?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n deleteOrganisation() {\r\n this.deleteConfirmation = true;\r\n this.deleteConfirmMessage =\r\n \"Are you sure you want to delete the company\" +\r\n this.selectedOrganisation.Name +\r\n \"?\";\r\n }\r\n\r\n confirmDelete(item: OrganisationDTO) {\r\n delete this.selectedOrganisation;\r\n this.deleteConfirmation = false;\r\n this.$organisationService\r\n .deleteOrganisation(item.Id)\r\n .then((response) => {\r\n this.deleteMessage =\r\n \"The company \" + item.Name + \" has been successfully deleted.\";\r\n this.messageDeleteModal = true;\r\n this.organisations.List = this.organisations.List.filter(\r\n (organisation) => organisation != item,\r\n );\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n this.deleteMessage =\r\n \"Sorry! We had an error deleting the company \" +\r\n item.Name +\r\n \". Please, try again later.\";\r\n this.messageDeleteModal = true;\r\n });\r\n }\r\n\r\n cancelDelete() {\r\n this.deleteConfirmation = false;\r\n }\r\n\r\n closeMessageSuccesfullyDeleted() {\r\n if (this.goToUserDashboard && this.isAdmin) {\r\n this.$location.path(\"/userdashboard\"); // redirects User to User Dashboard\r\n this.goToUserDashboard = false;\r\n }\r\n this.messageDeleteModal = false;\r\n }\r\n\r\n addNewOrganisation() {\r\n this.selectedOrganisation = {\r\n Name: \"\",\r\n OrganisationType: OrganisationTypeEnum.Broker,\r\n HasCommercialMortgage: true,\r\n HasBridging: true,\r\n IsDeleted: false,\r\n } as OrganisationDTO;\r\n this.ShowIsBrickflow = this.organisations.List.every(\r\n (org) => !org.IsBrickflow,\r\n );\r\n this.organisationAdminId = \"\";\r\n this.licensedOrganisationUsers = [];\r\n }\r\n\r\n formValidation(name: string, type: number) {\r\n if (!name || !type) {\r\n this.isInvalidForm = true;\r\n }\r\n\r\n this.isInvalidForm = false;\r\n }\r\n\r\n registerDisabled() {\r\n if (\r\n this.selectedOrganisation &&\r\n this.errorMsg == null &&\r\n !this.isProcessingOrgSave\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n getOrganisationDetail(): void {\r\n this.userService\r\n .getAllOrganisationMembers(this.selectedOrganisation.Id)\r\n .then((orgBrokers: ApplicationUserDTO[]) => {\r\n this.organisationUsers = orgBrokers;\r\n this.organisationAdmin = orgBrokers.find((x) => x.IsOrganisationAdmin);\r\n\r\n this.licensedOrganisationUsers = this.organisationUsers.filter(\r\n (x) => x.SubscriptionStatus > 0 || x.IsOrganisationAdmin,\r\n );\r\n\r\n if (this.organisationAdmin) {\r\n this.organisationAdminId = this.organisationAdmin.Id;\r\n this.organisationUsersExceptAdmin = this.organisationUsers.filter(\r\n (x) => x.Id != this.organisationAdminId,\r\n );\r\n\r\n this.getActivePackagePricingsForTrialLicense();\r\n this.isLeadGenLicenseActive();\r\n }\r\n })\r\n .then(() => {\r\n if (this.organisations.List.length > 1) this.getLicenseStatusText();\r\n });\r\n\r\n this.linkTypeOptions = this.selectListService.GetLinkTypeOptions(\r\n this.selectedOrganisation.HasBridging,\r\n this.selectedOrganisation.HasCommercialMortgage,\r\n );\r\n }\r\n\r\n isLeadGenLicenseActive(): void {\r\n this.$organisationService\r\n .isLeadGenLicenseActive(this.selectedOrganisation.Id)\r\n .then((response) => {\r\n this.showLeadGenLicenseActive = response;\r\n });\r\n }\r\n\r\n deleteBrokerUser(user: ApplicationUserDTO) {\r\n this.deleteConfirmation = true;\r\n this.brokerUserDelete = true;\r\n this.deleteConfirmMessage =\r\n \"Are you sure you want to delete the Broker User\" +\r\n user.FirstName +\r\n \" \" +\r\n user.LastName +\r\n \"?\";\r\n this.confirmDeleteUser = { ...user };\r\n }\r\n\r\n confirmBrokerDelete(item: ApplicationUserDTO) {\r\n this.deleteConfirmation = false;\r\n this.userService\r\n .markasdeleted(item.UserName)\r\n .then((response) => {\r\n this.deleteMessage =\r\n \"Your Broker\" +\r\n item.FirstName +\r\n item.LastName +\r\n \" was successfully deleted!\";\r\n this.messageDeleteModal = true;\r\n this.organisationUsersExceptAdmin =\r\n this.organisationUsersExceptAdmin.filter((user) => user != item);\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n this.deleteMessage =\r\n \"Sorry! We had an error deleting the broker user \" +\r\n item.FirstName +\r\n \" \" +\r\n item.LastName +\r\n \". Please, try again later.\";\r\n this.messageDeleteModal = true;\r\n });\r\n }\r\n\r\n cancelBrokerDelete() {\r\n this.deleteConfirmation = false;\r\n this.brokerUserDelete = false;\r\n }\r\n\r\n updateBrokerUser(user: ApplicationUserDTO): void {\r\n this.profileEdit = user;\r\n this.showEdit = true;\r\n }\r\n\r\n /** Save the user changes */\r\n saveProfile() {\r\n this.isProcessingProfileSave = true;\r\n this.showEdit = false;\r\n this.userService\r\n .addUpdate(this.profileEdit)\r\n .then((userResponse) => {\r\n this.deleteMessage =\r\n this.profileEdit.FirstName +\r\n \" \" +\r\n this.profileEdit.LastName +\r\n \"'s details have been saved\";\r\n this.messageDeleteModal = true;\r\n })\r\n .finally(() => {\r\n this.isProcessingProfileSave = false;\r\n });\r\n }\r\n\r\n closeEditModal() {\r\n this.showEdit = false;\r\n this.profileEdit = null;\r\n }\r\n\r\n checkForAdmin(): void {\r\n this.$role.isAdminUser().then((response) => {\r\n this.isAdmin = response;\r\n });\r\n }\r\n\r\n isHtml(input) {\r\n let isHtml;\r\n this.errorMsg = null;\r\n isHtml = /<[a-z]+\\d?(\\s+[\\w-]+=(\"[^\"]*\"|'[^']*'))*\\s*\\/?>|&#?\\w+;/i.test(\r\n input,\r\n );\r\n if (isHtml) {\r\n this.errorMsg = \"Please remove any special characters from footer text.\";\r\n }\r\n }\r\n\r\n removeNewUserEmail() {\r\n this.newUser.Email = \"\";\r\n }\r\n\r\n go(path: string) {\r\n this.$location.path(path);\r\n }\r\n\r\n goToSettingPage() {\r\n sessionStorage.setItem(\r\n \"selectedOrganisation\",\r\n this.selectedOrganisation.UniqueRef,\r\n );\r\n if (this.orgFilter.length > 0)\r\n sessionStorage.setItem(\"filterText\", this.orgFilter);\r\n if (this.page > 1) sessionStorage.setItem(\"pageNo\", this.page.toString());\r\n this.go(`/settings/${this.organisationAdmin.Id}`);\r\n }\r\n\r\n getActivePackagePricingsForTrialLicense() {\r\n this.allActiveAppPackagePrices = [];\r\n this.$paymentService\r\n .getActivePackagePricingsForTrialLicense(this.organisationAdmin.UserName)\r\n .then((response) => {\r\n this.allActiveAppPackagePrices = response;\r\n });\r\n }\r\n\r\n onChangingPackage(selectedPackage) {\r\n if (\r\n this.selectedProductList != null &&\r\n this.selectedProductList.length > 0\r\n ) {\r\n var found = this.selectedProductList.find(function (product) {\r\n return product.Id == selectedPackage.Id;\r\n });\r\n\r\n if (found) {\r\n this.selectedProductList = this.selectedProductList.filter(\r\n function (e) {\r\n return e.Id != selectedPackage.Id;\r\n },\r\n );\r\n } else {\r\n this.selectedProductList.push(selectedPackage);\r\n }\r\n } else {\r\n this.selectedProductList.push(selectedPackage);\r\n }\r\n }\r\n\r\n assignLicenseToOrganisation() {\r\n this.$organisationService\r\n .assignTrialLicenseToOrg(\r\n this.selectedProductList,\r\n this.licenseEndDate,\r\n this.organisationAdmin.Id,\r\n this.quantity,\r\n true,\r\n this.isAddonSelected,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.deleteMessage = `Trial license has been assigned to ${this.organisationAdmin.FullName}`;\r\n this.messageDeleteModal = true;\r\n this.allActiveAppPackagePrices = [];\r\n this.selectedOrganisation.HasWhiteLabelAddOnPaid =\r\n this.isAddonSelected;\r\n } else {\r\n this.deleteMessage = `Problem while assigning trial license, please try after some time.`;\r\n this.messageDeleteModal = true;\r\n }\r\n });\r\n }\r\n\r\n generateButtonCode() {\r\n if (this.selectedOrganisation.OrganisationCode) {\r\n //var style = `background-color:${this.buttonColor};border-radius: 4px; padding: 0.5rem 1rem;cursor: pointer;outline: none;line-height: 1.3rem;`\r\n //this.message = ``;\r\n this.message = `${this.whiteLabelledUrl}${this.selectedOrganisation.OrganisationCode}#!/e/devfinancecriteria`;\r\n this.messageTitle =\r\n \"Please copy the below URL to include in your website.\";\r\n this.widgetModal = true;\r\n } else if (this.selectedOrganisation.IsBrickflow) {\r\n this.message = `${this.whiteLabelledUrl}#!/e/devfinancecriteria`;\r\n this.messageTitle =\r\n \"Please copy the below URL to include in your website.\";\r\n this.widgetModal = true;\r\n } else {\r\n this.deleteMessage =\r\n \"To access your \" +\r\n this.leadGeneratorName +\r\n \" URL please ensure you have an active White Label add-on and you have completed the URL Company Code in your company settings (under White Label)\";\r\n this.messageDeleteModal = true;\r\n }\r\n }\r\n\r\n generateAllLoansUrl(id: number = null): string {\r\n var url = \"\";\r\n\r\n if (this.selectedOrganisation.OrganisationCode) {\r\n url = `${this.whiteLabelledUrl}${this.selectedOrganisation.OrganisationCode}#!/allloans`;\r\n } else if (this.selectedOrganisation.IsBrickflow) {\r\n url = `${this.whiteLabelledUrl}#!/allloans`;\r\n }\r\n\r\n if (id != null) {\r\n url += `/${id}`;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n generateBridgingCriteriaURL(): string {\r\n if (this.selectedOrganisation.OrganisationCode) {\r\n return `${this.whiteLabelledUrl}${this.selectedOrganisation.OrganisationCode}#!/e/bridgingcriteria`;\r\n } else if (this.selectedOrganisation.IsBrickflow) {\r\n return `${this.whiteLabelledUrl}#!/e/bridgingcriteria`;\r\n }\r\n }\r\n\r\n generateCommercialCriteriaURL(): string {\r\n if (this.selectedOrganisation.OrganisationCode) {\r\n return `${this.whiteLabelledUrl}${this.selectedOrganisation.OrganisationCode}#!/e/commercialcriteria`;\r\n } else if (this.selectedOrganisation.IsBrickflow) {\r\n return `${this.whiteLabelledUrl}#!/e/commercialcriteria`;\r\n }\r\n }\r\n\r\n generateDevFinanceCriteriaURL(): string {\r\n if (this.selectedOrganisation.OrganisationCode) {\r\n return `${this.whiteLabelledUrl}${this.selectedOrganisation.OrganisationCode}#!/e/devfinancecriteria`;\r\n } else if (this.selectedOrganisation.IsBrickflow) {\r\n return `${this.whiteLabelledUrl}#!/e/devfinancecriteria`;\r\n }\r\n }\r\n\r\n generateCriteriaUrl(linkType: LinkTypeEnum, id: number = null): string {\r\n var url = \"\";\r\n\r\n if (linkType == LinkTypeEnum.Bridging) {\r\n url = this.generateBridgingCriteriaURL();\r\n } else if (linkType == LinkTypeEnum.Commercial) {\r\n url = this.generateCommercialCriteriaURL();\r\n } else if (linkType == LinkTypeEnum.Development) {\r\n url = this.generateDevFinanceCriteriaURL();\r\n }\r\n\r\n if (id != null) {\r\n url += \"/0/\" + id;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n generateUniqueLinkCode(linkType: LinkTypeEnum, id: number = null, isWidgetLink: boolean = false) {\r\n if (\r\n (linkType == LinkTypeEnum.Bridging ||\r\n linkType == LinkTypeEnum.Commercial ||\r\n linkType == LinkTypeEnum.Development) && !isWidgetLink\r\n ) {\r\n this.message = this.generateCriteriaUrl(linkType, id);\r\n } else {\r\n this.message = this.generateAllLoansUrl(id);\r\n\r\n if (isWidgetLink) {\r\n this.message += id != null ? \"/widget\" : \"/0/widget\";\r\n\r\n if (linkType == LinkTypeEnum.Bridging ||\r\n linkType == LinkTypeEnum.Commercial ||\r\n linkType == LinkTypeEnum.Development) {\r\n this.message += `/${linkType}`\r\n }\r\n }\r\n }\r\n\r\n if (!isWidgetLink && (this.selectedOrganisation.OrganisationCode || this.selectedOrganisation.IsBrickflow)) {\r\n this.messageTitle =\r\n \"Please copy the below URL to include in your website.\";\r\n this.widgetModal = true;\r\n } else if (isWidgetLink) {\r\n this.messageTitle =\r\n \"Please copy the below widget URL.\";\r\n this.widgetModal = true;\r\n } else {\r\n if (isWidgetLink) {\r\n this.deleteMessage =\r\n \"To access URL please ensure company has an active White Label add-on and completed the URL Company Code in company settings (under White Label).\";\r\n } else {\r\n this.deleteMessage =\r\n \"To access your \" +\r\n this.leadGeneratorName +\r\n \" URL please ensure you have an active White Label add-on and you have completed the URL Company Code in your company settings (under White Label)\";\r\n\r\n }\r\n this.messageDeleteModal = true;\r\n }\r\n }\r\n\r\n generateWidgetURL() {\r\n navigator.clipboard.writeText(\r\n `${location.origin}/${this.selectedOrganisation.OrganisationCode}#/initialregister`,\r\n );\r\n this.message = \"Widget url has been copied to the clipboard\";\r\n this.widgetModal = true;\r\n }\r\n\r\n closeWidgetModal() {\r\n this.widgetModal = false;\r\n this.message = null;\r\n this.messageTitle = null;\r\n }\r\n\r\n copyButtonCodeToClipBoard() {\r\n navigator.clipboard.writeText(this.message);\r\n this.messageTitle = null;\r\n this.message = \"Code has been copied to the clipboard\";\r\n }\r\n\r\n bookCall() {\r\n window.open(\r\n \"https://brickflow.com/brokers/brickflow-enterprise/book-a-demo\",\r\n );\r\n }\r\n\r\n getLicenseStatusText() {\r\n this.allActiveAppPackagePrices = [];\r\n this.userService\r\n .getLicenseStatusText(this.organisationAdmin.UserName)\r\n .then((response) => {\r\n this.licenseStatusText = response;\r\n });\r\n }\r\n\r\n getWhiteLabelledUrl() {\r\n this.authService.getWhiteLabelledUrl().then((response) => {\r\n this.whiteLabelledUrl = response;\r\n });\r\n }\r\n\r\n getConnectNetworkOrgId() {\r\n this.authService.getConnectNetworkOrgId().then((response) => {\r\n this.connectNetworkOrgId = Number(response);\r\n });\r\n }\r\n\r\n\r\n sendTestEmail(): void {\r\n this.$organisationService\r\n .sendTestEmail(\r\n this.testEmails,\r\n this.testEmailSubject,\r\n this.testEmailBody,\r\n this.selectedOrganisation.Id,\r\n )\r\n .then((response: boolean) => {\r\n if (response) {\r\n this.showTestEmailModal = false;\r\n this.showTestEmailSentConfirmation = true;\r\n } else {\r\n this.error = true;\r\n }\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n });\r\n }\r\n\r\n closeTestEmailConfirmation() {\r\n this.showTestEmailSentConfirmation = false;\r\n this.testEmails = null;\r\n }\r\n\r\n validateComanyCode() {\r\n this.validateCodeClicked = true;\r\n if (/^[A-Za-z0-9]*$/.test(this.selectedOrganisation.OrganisationCode)) {\r\n this.$organisationService\r\n .isOrganisationCodeValid(this.selectedOrganisation)\r\n .then((response: boolean) => {\r\n if (response) {\r\n this.isValidOrgCode = true;\r\n } else {\r\n this.isValidOrgCode = false;\r\n }\r\n });\r\n } else {\r\n this.isValidOrgCode = false;\r\n }\r\n }\r\n\r\n fetchUniqueLinks() {\r\n this.fetchingUniqueLinks = true;\r\n this.$organisationService\r\n .getUniqueLinks(this.selectedOrganisation.Id)\r\n .then((response) => {\r\n this.uniqueLinks = response;\r\n })\r\n .finally(() => {\r\n this.fetchingUniqueLinks = false;\r\n });\r\n }\r\n\r\n selectUniqueLink(uniqueLink?: OrganisationLinkDTO) {\r\n if (uniqueLink) {\r\n this.selectedUniqueLink = { ...uniqueLink };\r\n\r\n this.isEditUniqueLink = true;\r\n } else {\r\n this.selectedUniqueLink = {} as OrganisationLinkDTO;\r\n this.selectedUniqueLink.OrganisationId = this.selectedOrganisation.Id;\r\n this.isEditUniqueLink = false;\r\n }\r\n this.showEditUniqueLinkModal = true;\r\n }\r\n\r\n onClickOfDeleteUniqueLink(uniqueLink: OrganisationLinkDTO) {\r\n this.selectedUniqueLink = uniqueLink;\r\n if (this.isAdmin && !this.organisationAdmin) {\r\n this.displayMessage = `Please assign a new Org User before deleting ${this.selectedUniqueLink.LinkName}.`;\r\n } else {\r\n this.displayMessage = `Are you sure you wish to remove ${this.selectedUniqueLink.LinkName}?`;\r\n this.deleteUniqueLinkClicked = true;\r\n }\r\n this.confirmUniqueLinkDeletion = true;\r\n }\r\n\r\n getLinkType(linkTypeEnum: LinkTypeEnum) {\r\n if (linkTypeEnum == 1) return \"Development\";\r\n if (linkTypeEnum == 2) return \"Bridging\";\r\n if (linkTypeEnum == 3) return \"All Loans\";\r\n if (linkTypeEnum == 4) return \"Commercial\";\r\n }\r\n\r\n getLinkDescription(linkDescription) {\r\n return linkDescription === null ? \"\" : linkDescription;\r\n }\r\n\r\n removeUniqueLinkLogo() {\r\n this.selectedUniqueLink.LogoUrl = null;\r\n }\r\n\r\n onFileSelect(files) {\r\n if (files.length > 0) {\r\n this.imageErrorMsg = null;\r\n const allowedExtensions = [\r\n \"jpg\",\r\n \"jpeg\",\r\n \"png\",\r\n \"gif\",\r\n \"bmp\",\r\n \"tif\",\r\n \"tiff\",\r\n \"ico\",\r\n \"jfif\",\r\n \"pjpeg\",\r\n \"pjp\",\r\n \"apng\",\r\n ];\r\n const filteredFiles = files.filter((file) => {\r\n const fileExtension = file.name.split(\".\").pop()?.toLowerCase();\r\n return fileExtension && allowedExtensions.indexOf(fileExtension) !== -1;\r\n });\r\n\r\n if (filteredFiles.length === 0) {\r\n this.imageErrorMsg =\r\n \"Invalid file type: SVG and webp formats are not supported\";\r\n return;\r\n }\r\n\r\n this.fileAttachmentService\r\n .uploadPublicImage(files, this.selectedOrganisation.OrganisationCode)\r\n .then((imageUrl) => {\r\n this.selectedUniqueLink.LogoUrl = imageUrl;\r\n this.editLogo = true;\r\n });\r\n }\r\n }\r\n\r\n isUniqueLinkEmpty() {\r\n if (\r\n this.isNullOrWhitespace(this.selectedUniqueLink.LinkName) ||\r\n this.selectedUniqueLink.LinkType == null\r\n )\r\n return true;\r\n return false;\r\n }\r\n\r\n isNullOrWhitespace(input) {\r\n return !input || !input.trim();\r\n }\r\n\r\n saveUniqueLink() {\r\n this.isSavingUniqueLink = true;\r\n\r\n this.organisationLinkService.addUpdate(this.selectedUniqueLink).then((response) => {\r\n if (response) {\r\n this.isSavingUniqueLink = false;\r\n this.isEditUniqueLink = false;\r\n this.showEditUniqueLinkModal = false;\r\n } else {\r\n this.ulsavemessage = `There is problem saving ${this.selectedUniqueLink.LinkName} details, Please try later.`;\r\n }\r\n this.fetchUniqueLinks();\r\n }).catch((error) => {\r\n this.isSavingUniqueLink = false;\r\n this.ulsavemessage = \"There is a problem. Please try later.\";\r\n console.error(\"Error saving unique link:\", error);\r\n });\r\n }\r\n\r\n deleteUniqueLink() {\r\n if (this.deleteUniqueLinkClicked) {\r\n this.isEditUniqueLink = true;\r\n this.selectedUniqueLink.IsDeleted = true;\r\n this.selectedUniqueLink.IsEnabled = false;\r\n\r\n this.organisationLinkService.addUpdate(this.selectedUniqueLink).then((response) => {\r\n this.fetchUniqueLinks();\r\n this.isEditUniqueLink = false;\r\n this.confirmUniqueLinkDeletion = false;\r\n this.deleteUniqueLinkClicked = false;\r\n });\r\n } else {\r\n this.confirmUniqueLinkDeletion = false;\r\n }\r\n }\r\n\r\n cancelUniqueLinkModal() {\r\n this.selectedUniqueLink = undefined;\r\n this.showEditUniqueLinkModal = false;\r\n this.error = false;\r\n }\r\n\r\n closeUniqueLinkDeleteModal() {\r\n this.confirmUniqueLinkDeletion = false;\r\n this.deleteUniqueLinkClicked = false;\r\n this.ulsavemessage = \"\";\r\n }\r\n\r\n validateKey() {\r\n this.hubspotMessage = null;\r\n this.missingProperties = null;\r\n this.$organisationService\r\n .validateKey(\r\n this.selectedOrganisation.HubspotAccessToken,\r\n this.selectedOrganisation.HubspotPipelineStage,\r\n )\r\n .then((response) => {\r\n this.isHubspotValid = response == \"Access token is valid.\";\r\n this.hubspotMessage = response;\r\n })\r\n .then(() => {\r\n if (this.isHubspotValid) {\r\n this.$organisationService\r\n .getMissingProperties(\r\n this.selectedOrganisation.HubspotAccessToken,\r\n this.selectedOrganisation.HubspotPipelineStage,\r\n )\r\n .then((missingProperties) => {\r\n this.missingProperties = missingProperties;\r\n })\r\n .catch((error) => {\r\n this.hubspotMessage = `Error fetching missing properties: ${error.message}`;\r\n });\r\n } else {\r\n this.missingProperties = null;\r\n }\r\n });\r\n }\r\n\r\n setDefaultOrganisationThemeColour() {\r\n this.selectedOrganisation.OrganisationThemeColour = \"#304B9A\";\r\n this.registrationForm.$setDirty();\r\n }\r\n\r\n closeOtherLinkDropDown(linkType) {\r\n\r\n if (linkType != LinkTypeEnum.Development) {\r\n this.showDevFinanaceLinkOptions = false;\r\n }\r\n\r\n if (linkType != LinkTypeEnum.Bridging) {\r\n this.showBridgingLinkOptions = false;\r\n }\r\n if (linkType != LinkTypeEnum.Commercial) {\r\n this.showCommercialLinkOptions = false;\r\n }\r\n if (linkType != LinkTypeEnum.AllLoans) {\r\n this.showAllLoansLinkOptions = false;\r\n }\r\n\r\n }\r\n\r\n closeUniqueLinkGenerateDropdown(row) {\r\n this.showLinkOptions[row] = false;\r\n }\r\n\r\n closeAllEnterpriseLinkDropdowns() {\r\n this.showDevFinanaceLinkOptions = false;\r\n this.showBridgingLinkOptions = false;\r\n this.showCommercialLinkOptions = false;\r\n this.showAllLoansLinkOptions = false;\r\n }\r\n\r\n initializeSelectedNetworks() {\r\n if (this.selectedOrganisation.BrokerNetworks) {\r\n this.selectedBrokerNetworks = this.selectListService.decodeBitwiseEnum(\r\n this.selectedOrganisation.BrokerNetworks,\r\n this.selectListService.GetBrokerNetworks()\r\n );\r\n } else {\r\n this.selectedBrokerNetworks = [];\r\n }\r\n\r\n this.brokerNetworks.forEach(item => {\r\n (item as any).ticked = false;\r\n\r\n this.selectedBrokerNetworks.forEach((br: ListItem) => {\r\n if (br.key == item.key) {\r\n (item as any).ticked = true;\r\n }\r\n });\r\n });\r\n }\r\n\r\n initializeCRMs() {\r\n if (this.selectedOrganisation.CRMs) {\r\n this.selectedCRMs = this.selectListService.decodeBitwiseEnum(\r\n this.selectedOrganisation.CRMs,\r\n this.selectListService.GetCRMs()\r\n );\r\n } else {\r\n this.selectedCRMs = [];\r\n }\r\n\r\n this.crms.forEach(item => {\r\n (item as any).ticked = false;\r\n\r\n this.selectedCRMs.forEach((crm: ListItem) => {\r\n if (crm.key == item.key) {\r\n (item as any).ticked = true;\r\n }\r\n });\r\n });\r\n }\r\n\r\n saveSelectedNetworks() {\r\n this.selectedOrganisation.BrokerNetworks = this.selectListService.encodeBitwiseEnum(this.selectedBrokerNetworks);\r\n this.registrationForm.$setDirty();\r\n }\r\n\r\n saveSelectedCRMs() {\r\n this.selectedOrganisation.CRMs = this.selectListService.encodeBitwiseEnum(this.selectedCRMs);\r\n this.registrationForm.$setDirty();\r\n }\r\n\r\n isConnectMemberChanged() {\r\n this.showMarkAsConnectConfirmationModal = this.selectedOrganisation.IsConnectMember && this.originalOrganisation && !this.originalOrganisation.IsConnectMember;\r\n }\r\n\r\n OnCancelMarkAsConnect() {\r\n this.selectedOrganisation.IsConnectMember = false;\r\n this.isProcessingOrgSave = false;\r\n this.showMarkAsConnectConfirmationModal = false;\r\n }\r\n\r\n OnConfirmMarkAsConnect() {\r\n if (this.isProcessingOrgSave) {\r\n this.isMarkAsConnectConfirmed = true;\r\n this.showMarkAsConnectConfirmationModal = false;\r\n this.saveOrganisation();\r\n } else {\r\n this.showMarkAsConnectConfirmationModal = false;\r\n }\r\n\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\n\r\nexport class PayFailController {\r\n user: ApplicationUserDTO;\r\n performingAction: boolean;\r\n\r\n static $inject = [\"$scope\", \"$rootScope\", \"$cookies\", \"$location\"];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n ) {}\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { ModuleAppFeatureDTO } from \"@js/DTO/ModuleAppFeatureDTO.cs.d\";\r\nimport { PricingFrequencyEnum } from \"@js/models/enum/PricingFrequencyEnum.cs.d\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class PaymentController {\r\n caseId: number;\r\n case: CaseDTO;\r\n disablepayment: boolean = false;\r\n message: string = \"\";\r\n modal: boolean = false;\r\n isLoggedInUser: boolean = false;\r\n user: ApplicationUserDTO;\r\n\r\n appPackagePrices: AppPackagePricingDTO[];\r\n selectedProduct: AppPackagePricingDTO = null;\r\n selectedProductList: AppPackagePricingDTO[] = [];\r\n productCode: string;\r\n isSelected: boolean = false;\r\n moduleAppFeatures: ModuleAppFeatureDTO[];\r\n moduleFeatureCount: number = 0;\r\n selecteFeatureCount: number = 0;\r\n isBroker: boolean = false;\r\n isBorrower: boolean = false;\r\n billingFrequency: Array<{ id: number; value: string }> = [\r\n { id: 1, value: \"Monthly\" },\r\n { id: 2, value: \"Yearly\" },\r\n ];\r\n selectedPricingFrequency: boolean = false;\r\n selectedPricingFrequencyEnum: PricingFrequencyEnum;\r\n isQuickSearchSelected: boolean = false;\r\n isBookCallSelected: boolean = false;\r\n infoPanelSubheading: string;\r\n infoPanelHeading: string;\r\n panelHeaderText: string;\r\n orderButtonText: string = \"Continue\";\r\n orderButtonDisabled: boolean = false;\r\n showOrderButton: boolean = true;\r\n totalAmountToPay: number = 0;\r\n isAddOnSelected: boolean = false;\r\n whitelabelPrice: number = 0;\r\n leadGeneratorName: string;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"PaymentService\",\r\n \"CaseService\",\r\n \"RoleService\",\r\n \"$cookies\",\r\n \"AuthService\",\r\n \"UserService\",\r\n ];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n public $rootScope: ng.IRootScopeService,\r\n private $location: ng.ILocationService,\r\n private $paymentService: PaymentService,\r\n private caseService: CaseService,\r\n private roleService: RoleService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private authService: AuthService,\r\n private userService: UserService,\r\n ) {\r\n //TODO Change for New pricing\r\n window.location.assign(\"https://brickflow.com/pricing\");\r\n\r\n this.leadGeneratorName = this.$cookies.get(\"leadgeneratorname\");\r\n this.isBroker = sessionStorage.getItem(\"userRole\") == \"broker\";\r\n this.isBorrower = sessionStorage.getItem(\"userRole\") == \"borrower\";\r\n this.user = JSON.parse(sessionStorage.getItem(\"userDetails\"));\r\n\r\n if (\r\n sessionStorage.getItem(\"selectedPackage\") &&\r\n sessionStorage.getItem(\"selectedPackage\") != \"undefined\" &&\r\n sessionStorage.getItem(\"selectedPackage\") != null\r\n ) {\r\n let data = sessionStorage.getItem(\"selectedPackage\");\r\n this.selectedProduct = JSON.parse(data);\r\n this.selectedPricingFrequency =\r\n this.selectedProduct.PricingFrequency == PricingFrequencyEnum.Monthly\r\n ? false\r\n : true;\r\n this.getAddOnPrice(this.selectedProduct.PricingFrequency);\r\n }\r\n\r\n if (sessionStorage.getItem(\"addAddon\")) {\r\n let data = sessionStorage.getItem(\"addAddon\");\r\n this.isAddOnSelected = JSON.parse(data);\r\n }\r\n\r\n if (this.$routeParams.isBroker) {\r\n this.isBroker = true;\r\n }\r\n this.infoPanelHeading =\r\n this.isBroker == true\r\n ? \"Ready to get started?\"\r\n : \"Compare loans from 40+ lenders, in minutes.

Model deals to check their viability, or contact us to secure the best value loan for your next development.\";\r\n this.infoPanelSubheading =\r\n this.isBroker == true\r\n ? \"We understand speed and reliable funding are key to retaining your clients.
\" +\r\n this.getApplicationName() +\r\n \" for Brokers gives you both.\"\r\n : \"\";\r\n this.panelHeaderText =\r\n this.isBroker == true\r\n ? \"Welcome to \" + this.getApplicationName() + \" for Brokers\"\r\n : \"Welcome to \" + this.getApplicationName();\r\n\r\n //if ($cookies.get('access_token')) {\r\n // this.isLoggedInUser = true;\r\n //}\r\n this.getActivePackagePricesForFrequency();\r\n\r\n //this.roleService.GetUserRoles().then((result) => {\r\n // if (result.filter(x => x == \"Broker\").length > 0) {\r\n // this.isBroker = true;\r\n // }\r\n //});\r\n\r\n /* if (this.$routeParams.CaseId && this.$routeParams.CaseId != 'null') {\r\n this.caseId = this.$routeParams.CaseId;\r\n this.email = this.$routeParams.CaseId;\r\n this.caseService.fetch(this.caseId).then(result => {\r\n this.case = result;\r\n \r\n })\r\n }*/\r\n }\r\n\r\n getTubeMapValue() {\r\n return this.caseService.getTubeMap();\r\n }\r\n\r\n makepaymentwithpaypal(caseId: number) {\r\n this.disablepayment = true;\r\n this.$paymentService\r\n .createpayment(caseId)\r\n .then((response) => {\r\n //could be called at c# end at some stage\r\n window.location.assign(response);\r\n })\r\n .catch(() => {\r\n this.disablepayment = false;\r\n });\r\n }\r\n\r\n markAsPaid(caseId: number) {\r\n this.disablepayment = true;\r\n this.case.IsApplicationFeePaid = 1;\r\n this.case.Paid = true;\r\n\r\n this.caseService.addUpdatereturnonlyid(this.case).then((response) => {\r\n this.modal = true;\r\n this.message = \"This case has been marked as paid.\";\r\n });\r\n }\r\n\r\n backToDashboard(): void {\r\n this.$location.path(\"/casedashboard/\" + this.caseId);\r\n }\r\n\r\n getActivePackagePricesForFrequency() {\r\n this.selectedPricingFrequencyEnum = this.getPriceFrequencyEnum();\r\n\r\n this.$paymentService\r\n .getActivePackagePricesForFrequency(\r\n this.selectedPricingFrequencyEnum,\r\n this.isBroker ? UserRoleEnum.Broker : UserRoleEnum.Client,\r\n )\r\n .then((response) => {\r\n this.appPackagePrices = response;\r\n if (!sessionStorage.getItem(\"selectedPackage\")) {\r\n this.selectedProduct = response[0];\r\n }\r\n });\r\n }\r\n\r\n searchNow() {\r\n (this.$rootScope as any).loanCriteria = null;\r\n sessionStorage.setItem(\r\n \"selectedPackage\",\r\n JSON.stringify(this.selectedProduct),\r\n );\r\n this.$location.path(\"/devfinancecriteria\");\r\n }\r\n\r\n signUpNow() {\r\n sessionStorage.setItem(\r\n \"selectedPackage\",\r\n JSON.stringify(this.selectedProduct),\r\n );\r\n if (this.isBroker) {\r\n this.$location.path(\"registerbroker\");\r\n } else {\r\n this.$location.path(\"register\");\r\n }\r\n }\r\n\r\n bookCallNow() {\r\n this.authService\r\n .getHubspotDeveloperBookMeetingNoSearch()\r\n .then((hubSpotUrl: string) => {\r\n window.location.assign(hubSpotUrl);\r\n });\r\n }\r\n\r\n getPriceFrequencyEnum(): PricingFrequencyEnum {\r\n return this.selectedPricingFrequency == false\r\n ? PricingFrequencyEnum.Monthly\r\n : PricingFrequencyEnum.Yearly;\r\n }\r\n\r\n convertEnumToString(value) {\r\n switch (value) {\r\n case PricingFrequencyEnum.Monthly:\r\n return \"month\";\r\n case PricingFrequencyEnum.Yearly:\r\n return \"year\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n getApplicationName() {\r\n if (sessionStorage.getItem(\"applicationName\") != null) {\r\n return sessionStorage.getItem(\"applicationName\");\r\n } else {\r\n return \"Brickflow\";\r\n }\r\n }\r\n\r\n /* This will be used when we have multiple products\r\n onSelectingProduct(selectedProduct) {\r\n this.selectedProduct = { ...selectedProduct };\r\n\r\n this.isQuickSearchSelected = false;\r\n this.isBookCallSelected = false;\r\n if (this.isBroker) {\r\n if (this.selectedProductList != null && this.selectedProductList.length > 0) {\r\n var found = this.selectedProductList.find(function (product) {\r\n return product.AppPackageId == selectedProduct.AppPackageId;\r\n });\r\n\r\n if (found) {\r\n this.selectedProductList = this.selectedProductList.filter(function (e) { return e.AppPackageId != selectedProduct.AppPackageId });\r\n }\r\n\r\n this.selectedProductList.push(this.selectedProduct);\r\n\r\n } else {\r\n this.selectedProductList.push(this.selectedProduct);\r\n }\r\n } else {\r\n this.getModuleQuantityForAppPackage(selectedProduct.AppPackageId);\r\n this.selectedProductList = []\r\n this.selectedProductList.push(this.selectedProduct);\r\n }\r\n\r\n this.isSelected = true;\r\n this.totalAmountToPay = this.calculateTotal(this.selectedProductList);\r\n }\r\n \r\n\r\n isPackageSelected(selectedProduct) {\r\n if (this.isBroker && selectedProduct && this.selectedProductList.length > 0) {\r\n var found = this.selectedProductList.find(function (product) {\r\n return product.Id == selectedProduct.Id;\r\n });\r\n\r\n if (found) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n getModuleQuantityForAppPackage(appPackageId: number) {\r\n this.$paymentService.getModuleQuantityForAppPackage(appPackageId).then((response) => {\r\n this.moduleFeatureCount = response;\r\n if (this.moduleFeatureCount > 0) {\r\n this.$paymentService.getAllModuleAppFeatures().then((response) => {\r\n this.moduleAppFeatures = response;\r\n })\r\n }\r\n });\r\n }\r\n\r\n onSelectingModuleFeature(selectedAppFeature) {\r\n if (!selectedAppFeature.Selected) {\r\n this.selecteFeatureCount++;\r\n } else {\r\n this.selecteFeatureCount--;\r\n }\r\n\r\n selectedAppFeature.Selected = !selectedAppFeature.Selected;\r\n\r\n }\r\n \r\n onSelectingQuickSearch() {\r\n this.isQuickSearchSelected = !this.isQuickSearchSelected;\r\n this.removeSelectedProduct();\r\n }\r\n\r\n onSelectingBookCall() {\r\n this.isBookCallSelected = !this.isBookCallSelected;\r\n this.removeSelectedProduct();\r\n }\r\n\r\n removeSelectedProduct() {\r\n this.selectedProductList = [];\r\n this.selectedProduct = null;\r\n this.isSelected = false;\r\n }*/\r\n\r\n orderButton() {\r\n const currentPath = this.$location.path();\r\n\r\n if (currentPath.startsWith(\"/promo\")) {\r\n this.userService.sendEventToHubspot(\r\n this.user,\r\n \"PACKAGESELECTION\",\r\n false,\r\n this.$cookies.get(\"org_code\"),\r\n parseInt(sessionStorage.getItem(\"userRole\")) as UserRoleEnum,\r\n );\r\n sessionStorage.setItem(\r\n \"selectedPackage\",\r\n JSON.stringify(this.selectedProduct),\r\n );\r\n this.$location.path(\"/addons\");\r\n } else if (currentPath === \"/addons\") {\r\n this.userService.sendEventToHubspot(\r\n this.user,\r\n \"ADDONSELECTION\",\r\n false,\r\n this.$cookies.get(\"org_code\"),\r\n parseInt(sessionStorage.getItem(\"userRole\")) as UserRoleEnum,\r\n );\r\n this.signUpNow();\r\n }\r\n }\r\n\r\n back() {\r\n const currentPath = this.$location.path();\r\n if (currentPath.startsWith(\"/promo\")) {\r\n this.$location.path(\"/initialregister\");\r\n } else if (currentPath === \"/addons\") {\r\n this.$location.path(\"/promo/\" + (this.isBroker ? \"true\" : \"\"));\r\n }\r\n }\r\n\r\n calculateTotal(): number {\r\n return (\r\n Number(\r\n this.selectedProduct?.Quantity * this.selectedProduct?.PriceAmount,\r\n ) + Number(this.isAddOnSelected ? this.whitelabelPrice : 0)\r\n );\r\n }\r\n\r\n emptyBasket() {\r\n this.removeAddOn();\r\n //this.selectedProduct.Quantity = 0;\r\n this.selectedProduct = this.appPackagePrices[0];\r\n sessionStorage.removeItem(\"selectedPackage\");\r\n }\r\n\r\n getAddOnPrice(frequency: PricingFrequencyEnum) {\r\n this.$paymentService.getWhitelabelPrice(frequency).then((response) => {\r\n this.whitelabelPrice = response;\r\n });\r\n }\r\n\r\n addAddOn() {\r\n this.isAddOnSelected = true;\r\n sessionStorage.setItem(\"addAddon\", \"true\");\r\n }\r\n\r\n removeAddOn() {\r\n this.isAddOnSelected = false;\r\n sessionStorage.setItem(\"addAddon\", \"false\");\r\n }\r\n\r\n getContractLengthText(\r\n frequency: PricingFrequencyEnum,\r\n contractLength: number,\r\n ) {\r\n if (contractLength == 1) {\r\n return \"1 Year Plan\";\r\n } else if (contractLength == 2) {\r\n return \"2 Year Plan\";\r\n } else {\r\n return frequency == PricingFrequencyEnum.Monthly\r\n ? \"Monthly Plan\"\r\n : \"Annual Plan\";\r\n }\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\n\r\nexport class PaySucessController {\r\n user: ApplicationUserDTO;\r\n performingAction: boolean;\r\n\r\n static $inject = [\"$scope\", \"$rootScope\", \"$cookies\", \"$location\"];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n ) {}\r\n\r\n gotoDashboard() {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n}\r\n","export class PrivacyController {\r\n orgCode: string;\r\n\r\n static $inject = [\"$routeParams\", \"$scope\", \"$location\"];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n private $location: ng.ILocationService,\r\n ) {\r\n document.getElementById(\"header\").style.display = \"none\";\r\n\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n }\r\n}\r\n","import { LenderDTO } from \"@js/DTO/LenderDTO.cs.d\";\r\nimport { ProductDTO } from \"@js/DTO/ProductDTO.cs.d\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { ProductService } from \"@js/services/ProductService\";\r\n\r\nexport class ProductController {\r\n selectedSection: string;\r\n\r\n objects: ProductDTO[];\r\n selectedObject: ProductDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n lenderRecords: LenderDTO[];\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n productForm: ng.IFormController;\r\n //subproductForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"ProductService\",\r\n \"LenderService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $productservice: ProductService,\r\n private $lenderservice: LenderService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$productservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: ProductDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as ProductDTO;\r\n }\r\n\r\n save() {\r\n this.$productservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: ProductDTO[] = this.objects.filter((value, index) => {\r\n return value.Id == response;\r\n });\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.productForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$productservice.delete(this.selectedObject.Id).then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.productForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n getlenders() {\r\n this.$lenderservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.lenderRecords = response;\r\n })\r\n .finally(() => {});\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n}\r\n","import { ProductStubDTO } from \"@js/DTO/ProductStubDTO.cs.d\";\r\nimport { ProductStubService } from \"@js/services/ProductStubService\";\r\n\r\nexport class ProductStubController {\r\n selectedSection: string;\r\n\r\n objects: ProductStubDTO[];\r\n selectedObject: ProductStubDTO;\r\n\r\n fetchingObjects: boolean;\r\n fetchingObject: boolean;\r\n\r\n //addingSubobject: boolean;\r\n\r\n //subobjects: SubobjectDTO[];\r\n //selectedSubobject: SubobjectDTO;\r\n\r\n //fetchingSubobjects: boolean;\r\n //fetchingSubobject: boolean;\r\n\r\n productstubForm: ng.IFormController;\r\n //subproductstubForm: ng.IFormController;\r\n\r\n static $inject = [\r\n \"$routeParams\",\r\n \"ProductStubService\",\r\n\r\n //'SubobjectService',\r\n ];\r\n //private $subobjectservice: App.Services.SubobjectService\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $productstubservice: ProductStubService,\r\n ) {\r\n this.updateObjects();\r\n }\r\n\r\n updateObjects() {\r\n this.fetchingObjects = true;\r\n\r\n // Fetch all objects.\r\n this.$productstubservice\r\n .fetchAll()\r\n .then((response) => {\r\n this.objects = response;\r\n this.preSelectedItem();\r\n })\r\n .finally(() => {\r\n this.fetchingObjects = false;\r\n });\r\n }\r\n\r\n private preSelectedItem() {\r\n if (this.$routeParams.Id) {\r\n let selectedObject = this.objects.find((value, index) => {\r\n return value.Id === parseInt(this.$routeParams.objectId);\r\n });\r\n\r\n this.selectObject(selectedObject);\r\n }\r\n }\r\n\r\n selectObject(object: ProductStubDTO) {\r\n this.selectedObject = object;\r\n\r\n //this.fetchingSubobjects = true;\r\n //this.$subobjectservice.fetchSubobjectsForObject(object.Id).then((response) => {\r\n // this.subobjects = response;\r\n // this.fetchingSubobjects = false;\r\n //}).catch((response) => {\r\n // this.fetchingSubobjects = false;\r\n //});\r\n\r\n this.selectedSection = \"details\";\r\n }\r\n\r\n createObject() {\r\n this.selectedSection = \"details\";\r\n this.selectedObject = {} as ProductStubDTO;\r\n }\r\n\r\n save() {\r\n this.$productstubservice\r\n .addUpdatereturnonlyid(this.selectedObject)\r\n .then((response) => {\r\n this.selectedObject.Id = response;\r\n if (!this.objects) {\r\n this.objects = [];\r\n }\r\n\r\n let matches: ProductStubDTO[] = this.objects.filter((value, index) => {\r\n return value.Id == response;\r\n });\r\n\r\n if (!matches || matches.length === 0) {\r\n this.objects.push(this.selectedObject);\r\n }\r\n\r\n this.productstubForm.$setPristine();\r\n this.updateObjects();\r\n });\r\n }\r\n\r\n delete() {\r\n this.$productstubservice.delete(this.selectedObject.Id).then((response) => {\r\n if (response) {\r\n this.objects.splice(this.objects.indexOf(this.selectedObject), 1);\r\n this.productstubForm.$setPristine();\r\n delete this.selectedObject;\r\n }\r\n });\r\n }\r\n\r\n //addSubobject() {\r\n // this.selectedSubobject = {\r\n // AssociatedObjectId: this.selectedObject.Id,\r\n // AssociatedObjectName: this.selectedObject.Name\r\n // } as SubobjectDTO;\r\n //}\r\n\r\n //removeSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.deleteSubobject(subobject.Id).then((response) => {\r\n // this.subobjects.splice(this.subobjects.indexOf(this.selectedSubobject), 1);\r\n // delete this.selectedSubobject;\r\n // });\r\n //}\r\n\r\n //cancelUpdateSubobject() {\r\n // delete this.selectedSubobject;\r\n //}\r\n\r\n //updateSubobject(subobject: SubobjectDTO) {\r\n // this.$subobjectservice.addUpdateSubobject(subobject).then((response) => {\r\n // if (this.subobjects.indexOf(subobject) === -1) {\r\n // this.subobjects.push(subobject);\r\n // }\r\n // delete this.selectedSubobject;\r\n // }).catch((response) => {\r\n // delete this.selectedSubobject;\r\n // });\r\n\r\n //}\r\n}\r\n","export class Utils {\r\n public static deepCopy(source: T): T {\r\n return Array.isArray(source)\r\n ? source.map((item) => this.deepCopy(item))\r\n : source instanceof Date\r\n ? new Date(source.getTime())\r\n : source && typeof source === \"object\"\r\n ? Object.getOwnPropertyNames(source).reduce(\r\n (o, prop) => {\r\n Object.defineProperty(\r\n o,\r\n prop,\r\n Object.getOwnPropertyDescriptor(source, prop)!,\r\n );\r\n o[prop] = this.deepCopy(\r\n (source as { [key: string]: any })[prop],\r\n );\r\n return o;\r\n },\r\n Object.create(Object.getPrototypeOf(source)),\r\n )\r\n : (source as T);\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { IntroducerSimpleDTO } from \"@js/DTO/IntroducerSimpleDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { LocationEnum } from \"@js/models/enum/LocationEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { IntroducerSimpleService } from \"@js/services/IntroducerSimpleService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { Utils } from \"@js/Utils\";\r\n\r\nexport class ProfileController {\r\n profile: ApplicationUserDTO = null;\r\n profileEdit: ApplicationUserDTO = null;\r\n\r\n // Booleans to control which fields to display in the edit modal\r\n showEditModal: boolean = false;\r\n isEditIntro: boolean = false;\r\n isEditMiniBio: boolean = false;\r\n isEditOrganisation: boolean = false;\r\n isEditPassword: boolean = false;\r\n isEditContactPrefs: boolean = false;\r\n isEditSystemSettings: boolean = false;\r\n\r\n // Edit password\r\n currentPassword: string;\r\n newPassword: string;\r\n repeatPassword: string;\r\n\r\n // manage errors\r\n error: boolean = false;\r\n errorMessage: string;\r\n\r\n editTitle: string = \"\";\r\n\r\n // Get all introducers\r\n introducerList: IntroducerSimpleDTO[];\r\n userIntroducer: IntroducerSimpleDTO;\r\n userHasIntroducer: boolean = false;\r\n\r\n //get all organisations\r\n organisations: OrganisationDTO[];\r\n userOrganisation: OrganisationDTO;\r\n\r\n // This is the toggle to open the file upload modal\r\n openModal: boolean = false;\r\n\r\n profileForm: FormData;\r\n\r\n fullAvatarUrl: string = \"\";\r\n\r\n loggedIn: boolean = false;\r\n\r\n tinymceOptions: any;\r\n showSystemSetting: boolean = false;\r\n\r\n referrerOptions = [];\r\n locationOptions = [];\r\n\r\n static $inject = [\r\n \"$http\",\r\n \"AuthService\",\r\n \"UserService\",\r\n \"FileAttachmentService\",\r\n \"IntroducerSimpleService\",\r\n \"OrganisationService\",\r\n \"RoleService\",\r\n \"PaymentService\",\r\n \"$location\",\r\n \"$cookies\",\r\n \"SelectListService\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n private $http: ng.IHttpService,\r\n private authService: AuthService,\r\n private userService: UserService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private introducerSimpleService: IntroducerSimpleService,\r\n private organisationService: OrganisationService,\r\n private $roleService: RoleService,\r\n private $paymentService: PaymentService,\r\n private $location: ng.ILocationService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private selectListService: SelectListService,\r\n private roleService : RoleService\r\n ) {\r\n this.tinymceOptions = {\r\n content_style:\r\n \"body {color: #304b9a;font:300 13.33px Roboto,sans-serif;}\",\r\n menubar: false,\r\n height: 300,\r\n branding: false,\r\n statusbar: false,\r\n plugins: [\r\n \"advlist autolink lists link image charmap print preview anchor\",\r\n \"searchreplace visualblocks code fullscreen\",\r\n \"insertdatetime media table paste code help wordcount\",\r\n ],\r\n toolbar:\r\n \"undo redo | formatselect | \" +\r\n \"bold italic backcolor forecolor | alignleft aligncenter \" +\r\n \"alignright alignjustify | bullist numlist outdent indent | preview fullscreen |\" +\r\n \"removeformat | help\",\r\n };\r\n\r\n if (\r\n this.$cookies.get(\"access_token\") != null &&\r\n this.$cookies.get(\"access_token\") != undefined\r\n ) {\r\n this.loggedIn = true;\r\n\r\n this.userService\r\n .getcurentuserrecord()\r\n .then((profile: ApplicationUserDTO) => {\r\n this.profile = profile;\r\n if (this.$location.path().startsWith(\"/managepreferences\") && this.roleService.IsLender == true) {\r\n this.editContactPreferences();\r\n }\r\n this.profileEdit = Utils.deepCopy(this.profile);\r\n this.showSystemSetting = profile.IsOrganisationAdmin;\r\n this.getFileURL(this.profile.ProfilePictureUrl);\r\n // Get the introducer, if there is one\r\n this.introducerSimpleService.fetchAll().then((response) => {\r\n this.introducerList = response;\r\n if (this.profile && this.profile.IntroducerId) {\r\n this.userHasIntroducer = true;\r\n this.userIntroducer = this.introducerList.find(\r\n (x) => x.Id == this.profile.IntroducerId,\r\n );\r\n }\r\n });\r\n this.organisationService.fetchAll().then((response) => {\r\n this.organisations = response;\r\n\r\n if (this.profile && this.profile.OrganisationId) {\r\n this.userOrganisation = this.organisations.find(\r\n (x) => x.Id == this.profile.OrganisationId,\r\n );\r\n }\r\n });\r\n });\r\n }\r\n\r\n this.referrerOptions = this.selectListService.GetReferrerOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n }\r\n\r\n /** Close the edit modal */\r\n closeEditModal() {\r\n this.showEditModal = false;\r\n this.isEditIntro = false;\r\n this.isEditMiniBio = false;\r\n this.isEditPassword = false;\r\n this.isEditContactPrefs = false;\r\n this.editTitle = \"\";\r\n this.isEditOrganisation = false;\r\n this.isEditSystemSettings = false;\r\n\r\n this.profileEdit = null;\r\n delete this.currentPassword;\r\n delete this.newPassword;\r\n delete this.repeatPassword;\r\n this.error = false;\r\n }\r\n\r\n /** Save the profile changes */\r\n saveProfile() {\r\n this.userService.addUpdate(this.profileEdit).then((userResponse) => {\r\n // TODO - JLH - I don't like that I'm getting the profile again - but the addupdate function isn't returning the roles in the user dto which causes them to disappear if you save again.\r\n this.userService\r\n .getcurentuserrecord()\r\n .then((profile: ApplicationUserDTO) => {\r\n this.profile = profile;\r\n\r\n this.getFileURL(this.profile.ProfilePictureUrl);\r\n // Update the profile cookie so that the rest of the application can be aware of the profile changes\r\n this.authService.setProfileCookie(this.profile);\r\n });\r\n\r\n this.closeEditModal();\r\n });\r\n }\r\n\r\n /** Edit the mini bio */\r\n editMiniBio() {\r\n this.isEditMiniBio = true;\r\n this.editTitle = \"Edit Mini Bio\";\r\n this.openEditModal();\r\n }\r\n\r\n /** Edit the intro details */\r\n editIntro() {\r\n this.isEditIntro = true;\r\n this.editTitle = \"Edit Intro\";\r\n this.openEditModal();\r\n }\r\n\r\n /** Edit the default organisation details */\r\n editDefaultOrganisation() {\r\n this.isEditOrganisation = true;\r\n this.editTitle = \"Edit default broker details\";\r\n this.openEditModal();\r\n }\r\n\r\n /** Open the edit modal */\r\n openEditModal() {\r\n // Make a copy of the main profile object so that the main page doesn't get updated at the same time\r\n this.profileEdit = Utils.deepCopy(this.profile);\r\n this.showEditModal = true;\r\n }\r\n\r\n /** Returns the location text based on the profile's Location enum */\r\n getLocationName(): string {\r\n var locationName: string = \"\";\r\n\r\n if (this.profile) {\r\n switch (this.profile.Location) {\r\n case LocationEnum.London:\r\n locationName = \"London\";\r\n break;\r\n case LocationEnum.NorthWest:\r\n locationName = \"North West\";\r\n break;\r\n case LocationEnum.Midlands:\r\n locationName = \"Midlands\";\r\n break;\r\n case LocationEnum.EastofEngland:\r\n locationName = \"East of England\";\r\n break;\r\n case LocationEnum.SouthEast:\r\n locationName = \"South East\";\r\n break;\r\n case LocationEnum.SouthWest:\r\n locationName = \"South West\";\r\n break;\r\n case LocationEnum.NorthEast:\r\n locationName = \"North East\";\r\n break;\r\n case LocationEnum.Wales:\r\n locationName = \"Wales\";\r\n break;\r\n case LocationEnum.Scotland:\r\n locationName = \"Scotland\";\r\n break;\r\n case LocationEnum.NorthernIreland:\r\n locationName = \"Northern Ireland\";\r\n break;\r\n case LocationEnum.ChannelIsland:\r\n locationName = \"Channel Islands\";\r\n break;\r\n default:\r\n locationName = \"\";\r\n }\r\n }\r\n\r\n return locationName;\r\n }\r\n\r\n /**\r\n * Called when a profile picture has been selected\r\n * @param files\r\n */\r\n onFileSelect(files) {\r\n this.fileAttachmentService.uploadFileAndReturnURI(files).then((result) => {\r\n // Make a copy of the main profile object so that the main page doesn't get updated at the same time\r\n this.profileEdit = Utils.deepCopy(this.profile);\r\n //this.profileEdit = { ...this.profile };\r\n\r\n this.profileEdit.ProfilePictureUrl = result.FileLocation;\r\n this.saveProfile();\r\n this.getFileURL(this.profileEdit.ProfilePictureUrl);\r\n });\r\n }\r\n\r\n /**\r\n * Gets the full url for the url specified\r\n * @param url\r\n */\r\n getFileURL(url: string) {\r\n this.fileAttachmentService.getFileUri(url).then((result) => {\r\n this.fullAvatarUrl = result;\r\n });\r\n }\r\n\r\n /**\r\n * return the default organisation selected\r\n */\r\n getSelectedDefaultOrganisationName(id: number) {\r\n if (this.organisations) {\r\n var find = this.organisations.find((x) => x.Id == id);\r\n }\r\n\r\n if (find) {\r\n return find.Name;\r\n } else {\r\n return \"none\";\r\n }\r\n }\r\n\r\n /** Edit the current password */\r\n editPassword() {\r\n this.isEditPassword = true;\r\n this.editTitle = \"Edit password\";\r\n this.openEditModal();\r\n }\r\n\r\n // change passwords\r\n applyPasswordChange() {\r\n this.error = false;\r\n if (\r\n this.newPassword &&\r\n this.repeatPassword &&\r\n this.newPassword === this.repeatPassword\r\n ) {\r\n this.authService\r\n .changePassword(this.currentPassword, this.newPassword)\r\n .then((response) => {\r\n delete this.currentPassword;\r\n delete this.newPassword;\r\n delete this.repeatPassword;\r\n })\r\n .catch(() => {\r\n this.error = true;\r\n this.errorMessage = \"Current password incorrect. Please try again\";\r\n })\r\n .finally(() => {\r\n if (!this.error) {\r\n this.showEditModal = false;\r\n }\r\n });\r\n }\r\n }\r\n\r\n editContactPreferences() {\r\n this.isEditContactPrefs = true;\r\n this.editTitle = \"Edit Contact Preferences\";\r\n this.openEditModal();\r\n }\r\n\r\n editSystemSettings() {\r\n this.isEditSystemSettings = true;\r\n this.editTitle = \"Edit System settings\";\r\n this.openEditModal();\r\n }\r\n\r\n // We no loger need it as we are not useing plantype for organisation.\r\n /* isBasicMode() {\r\n if (this.userOrganisation != null) {\r\n return this.userOrganisation.PlanType == PlanTypeEnum.Basic;\r\n } else {\r\n return false;\r\n }\r\n }*/\r\n\r\n manageLicence() {\r\n this.$location.path(\"/settings\");\r\n }\r\n\r\n viewLicense() {\r\n this.$location.path(\"/license/1\"); // + this.profile.LicenseMasterId);\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AccountService } from \"@js/services/AccountService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\n\r\nexport class ReferFriendController {\r\n currentUser: ApplicationUserDTO = null;\r\n\r\n //Refer a friend\r\n referFriendName: string;\r\n referFriendSurname: string;\r\n referFriendEmail: string;\r\n referFriendBody: string;\r\n\r\n //universal email send functions\r\n sendingrefermessage: boolean;\r\n sentrefermessage: boolean;\r\n\r\n page: number = 1;\r\n referForm1: ng.IFormController;\r\n referForm2: ng.IFormController;\r\n companyWebsite: string;\r\n isBrickflowOrg: boolean = false;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"AccountService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $auth: AuthService,\r\n protected roleService: RoleService,\r\n private $accountservice: AccountService,\r\n ) {\r\n this.$auth.getProfile().then((profile) => {\r\n this.currentUser = profile;\r\n });\r\n this.companyWebsite = sessionStorage.getItem(\"companyWebsite\");\r\n this.isBrickflowOrg = this.companyWebsite == \"https://brickflow.com\";\r\n }\r\n\r\n next() {\r\n if (this.page === 1) {\r\n this.page = 2;\r\n }\r\n }\r\n\r\n back() {\r\n if (this.page === 2) {\r\n this.page = 1;\r\n }\r\n }\r\n\r\n go(path: string) {\r\n this.$location.path(path);\r\n }\r\n\r\n sendRefer(): void {\r\n this.sendingrefermessage = true;\r\n this.sentrefermessage = false;\r\n\r\n this.$accountservice\r\n .SendFriendReferralEmail(\r\n this.currentUser.FirstName,\r\n this.currentUser.LastName,\r\n this.currentUser.Email,\r\n this.referFriendName,\r\n this.referFriendSurname,\r\n this.referFriendEmail,\r\n this.referFriendBody,\r\n )\r\n .then((response2) => {\r\n this.sendingrefermessage = false;\r\n this.sentrefermessage = true;\r\n });\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { IntroducerDTO } from \"@js/DTO/IntroducerDTO.cs.d\";\r\nimport { InvitedBrokerDTO } from \"@js/DTO/InvitedBrokerDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { RegisterOrganisationDTO } from \"@js/DTO/RegisterOrganisationDTO.cs.d\";\r\nimport { ApplicantRoleEnum } from \"@js/models/enum/ApplicantRoleEnum.cs.d\";\r\nimport { IntroducerTypeEnum } from \"@js/models/enum/IntroducerTypeEnum.cs.d\";\r\nimport { OrganisationTypeEnum } from \"@js/models/enum/OrganisationTypeEnum.cs.d\";\r\nimport { PricingFrequencyEnum } from \"@js/models/enum/PricingFrequencyEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { IntroducerService } from \"@js/services/IntroducerService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\nexport class RegistrationBrokerController {\r\n bar: number = 0;\r\n formEntered: boolean[] = [\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n ];\r\n step: number = 1;\r\n stepName: string = \"\";\r\n seats: number = 1;\r\n dataLoading: boolean = false;\r\n progressBar: {\r\n step: number;\r\n label: string;\r\n active: boolean;\r\n complete: boolean;\r\n }[] = [\r\n { step: 1, label: \"About you\", active: false, complete: false },\r\n { step: 2, label: \"About your business\", active: false, complete: false },\r\n {\r\n step: 3,\r\n label: \"More about your business\",\r\n active: false,\r\n complete: false,\r\n },\r\n { step: 4, label: \"Assign licenses\", active: false, complete: false },\r\n ];\r\n\r\n aboutYouSection: boolean = false;\r\n aboutYourBusinessSection: boolean = false;\r\n moreAboutYourBusinessSection: boolean = false;\r\n user: ApplicationUserDTO = {\r\n Roles: [\"Broker\", \"Introducer\"],\r\n IsOrganisationAdmin: true,\r\n ApplicantDefinedRole: ApplicantRoleEnum.Introducer,\r\n ApplicantDefinedRoleIntroducer: IntroducerTypeEnum.Broker,\r\n } as ApplicationUserDTO;\r\n\r\n selectedPackage: AppPackagePricingDTO;\r\n\r\n organization: OrganisationDTO;\r\n userEmails: InvitedBrokerDTO[] = [];\r\n newUser: InvitedBrokerDTO = {\r\n Email: null,\r\n FirstName: null,\r\n };\r\n tempdata: InvitedBrokerDTO;\r\n //tour\r\n welcomeMessage: string =\r\n \"Welcome to the Brickflow for Brokers - to setup your account we need some details on you and your company.\";\r\n tourOrder: number = 1;\r\n\r\n registrationFormStep1: ng.IFormController;\r\n registrationFormStep2: ng.IFormController;\r\n registrationFormStep3: ng.IFormController;\r\n\r\n //display Logos\r\n companyLogo: FileAttachmentDTO;\r\n profileLogo: FileAttachmentDTO;\r\n\r\n error: string;\r\n\r\n // TODO - JLH - what are these variables? can we improve the naming?\r\n //rename Email\r\n renamingItem: InvitedBrokerDTO;\r\n newName: InvitedBrokerDTO;\r\n\r\n passwordError: boolean = false;\r\n\r\n isProcessingRegister: boolean = false;\r\n\r\n // Show and hide a input field to add users.\r\n hideInput: boolean = false;\r\n showErrorMsg: boolean = false;\r\n confirmPassword: string;\r\n selectedProductList: AppPackagePricingDTO[] = [];\r\n\r\n isPayClicked: boolean = false;\r\n\r\n isConvertingExistingUser: boolean = false;\r\n\r\n orgUniqueRef: string;\r\n orgNameToAssign: string;\r\n isProceedClicked: boolean = false;\r\n confirmAssignToOrg: boolean = false;\r\n isAddonselected: boolean = false;\r\n\r\n locationOptions = [];\r\n referrerOptions = [];\r\n\r\n static $inject = [\r\n \"FileAttachmentService\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"RoleService\",\r\n \"$rootScope\",\r\n \"OrganisationService\",\r\n \"AuthService\",\r\n \"IntroducerService\",\r\n \"$window\",\r\n \"UserService\",\r\n \"DevelopmentInputService\",\r\n \"PaymentService\",\r\n \"SelectListService\",\r\n ];\r\n\r\n constructor(\r\n private fileAttachmentService: FileAttachmentService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $roleService: RoleService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $organisation: OrganisationService,\r\n private $auth: AuthService,\r\n private introduceService: IntroducerService,\r\n private $window: ng.IWindowService,\r\n private userService: UserService,\r\n private developmentInputService: DevelopmentInputService,\r\n private $paymentService: PaymentService,\r\n private selectListService: SelectListService,\r\n ) {\r\n //TODO Change for New pricing\r\n window.location.assign(\"https://brickflow.com/pricing\");\r\n\r\n // If we have an introducer code set, let's store a cookie.\r\n if (this.$routeParams[\"ic\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams[\"ic\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n if (this.$routeParams[\"orgc\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"org_code\", this.$routeParams[\"orgc\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n if (this.$routeParams[\"orguniqueref\"]) {\r\n this.orgUniqueRef = this.$routeParams[\"orguniqueref\"];\r\n this.user.IsOrganisationAdmin = false;\r\n\r\n this.$organisation\r\n .getOrganisationByUniqueRef(this.orgUniqueRef)\r\n .then((org: OrganisationDTO) => {\r\n this.orgNameToAssign = org.Name;\r\n });\r\n }\r\n\r\n /* window.onbeforeunload = function (event) {\r\n //console.log(event);\r\n //console.log(this.registrationFormStep1.$invalid);\r\n /*fetch(\"/api/organisation/brokersignupjourneyg2email?brokerEmail=\" + this.user.Email + \"&brokerFirstName=\" + this.user.FirstName + \"&brokerLastName=\" + this.user.LastName, {\r\n method: \"GET\",\r\n keepalive: true,\r\n });*/\r\n //navigator.sendBeacon(\"/api/organisation/brokersignupjourneyg2email?brokerEmail=\" + this.user.Email + \"&brokerFirstName=\" + this.user.FirstName + \"&brokerLastName=\" + this.user.LastName);\r\n /* if (this.user.Email != null && this.user.FirstName != null && this.user.LastName != null ) {\r\n this.$organisation.brokerSignUpJourneyG2Email(this.user.Email, this.user.FirstName, this.user.LastName).then((response) => {\r\n });\r\n }\r\n }*/\r\n\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.userService.getcurentuserrecord().then((result) => {\r\n this.user = result;\r\n\r\n if (this.user.IsLegacyUser || this.orgUniqueRef) {\r\n this.isConvertingExistingUser = this.user.IsLegacyUser;\r\n this.user = result;\r\n\r\n this.user.Roles = [\"Broker\", \"Introducer\"];\r\n\r\n this.user.IsOrganisationAdmin = !this.orgUniqueRef ? true : false;\r\n this.user.ApplicantDefinedRole = ApplicantRoleEnum.Introducer;\r\n this.user.ApplicantDefinedRoleIntroducer = IntroducerTypeEnum.Broker;\r\n } else {\r\n this.$roleService.goHomeBasedOnUser();\r\n }\r\n });\r\n } else {\r\n if (sessionStorage.getItem(\"userDetails\")) {\r\n let data = sessionStorage.getItem(\"userDetails\");\r\n let userdetails = JSON.parse(data);\r\n\r\n let userFullName = userdetails.FullName;\r\n let spaceIndex = userFullName.indexOf(\" \");\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(\" \"));\r\n lastName = userFullName.substring(userFullName.indexOf(\" \") + 1);\r\n }\r\n\r\n this.user.FirstName = firstName;\r\n this.user.LastName = lastName;\r\n this.user.Email = userdetails.Email;\r\n this.user.PhoneNumber = userdetails.PhoneNumber;\r\n }\r\n }\r\n\r\n if (sessionStorage.getItem(\"selectedPackage\")) {\r\n let data = sessionStorage.getItem(\"selectedPackage\");\r\n this.selectedPackage = JSON.parse(data);\r\n }\r\n\r\n this.referrerOptions = this.selectListService.GetReferrerOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n }\r\n\r\n change() {\r\n if (this.confirmPassword) {\r\n if (this.confirmPassword !== this.user.Password) {\r\n this.error = \"Passwords do not match\";\r\n } else {\r\n delete this.error;\r\n }\r\n }\r\n }\r\n\r\n addNewUser() {\r\n if (this.newUser.Email != null && this.newUser.FirstName != null) {\r\n var temp = { ...this.newUser };\r\n this.userEmails.push(temp);\r\n this.newUser.Email = null;\r\n this.newUser.FirstName = null;\r\n // this.registrationForm.newUserFirstName.$setUntouched()\r\n // this.registrationForm.newUserEmail.$setUntouched();\r\n }\r\n }\r\n\r\n removeNewUserEmail(event) {\r\n event.preventDefault();\r\n delete this.newUser;\r\n }\r\n\r\n cancelAddingNewUser() {\r\n this.newUser.Email = null;\r\n this.newUser.FirstName = null;\r\n // this.registrationForm.newUserFirstName.$setUntouched();\r\n //this.registrationForm.newUserEmail.$setUntouched()\r\n }\r\n\r\n getFocusToInput() {\r\n var getelement = this.$window.document.getElementById(\"newuser\");\r\n getelement.focus();\r\n }\r\n\r\n changeCompanyLogo(files) {\r\n if (files.length > 0) {\r\n this.fileAttachmentService\r\n .uploadPublicImage(files, this.organization.OrganisationCode)\r\n .then((result) => {\r\n if (result) {\r\n this.organization.LogoURL = result;\r\n }\r\n });\r\n }\r\n }\r\n\r\n changeProfileLogo(files) {\r\n if (files.length > 0) {\r\n this.fileAttachmentService\r\n .uploadFileAndReturnURI(files)\r\n .then((result) => {\r\n if (result) {\r\n this.profileLogo = result;\r\n }\r\n });\r\n }\r\n }\r\n\r\n registerAccount() {\r\n this.isPayClicked = true;\r\n this.confirmAssignToOrg = false;\r\n this.dataLoading = true;\r\n this.getStepName();\r\n\r\n if (\r\n !this.orgUniqueRef &&\r\n !this.user.IsLegacyUser &&\r\n this.confirmPassword !== this.user.Password\r\n ) {\r\n this.passwordError = true;\r\n this.dataLoading = false;\r\n this.isPayClicked = false;\r\n } else {\r\n this.userService.sendEventToHubspot(\r\n this.user,\r\n this.stepName,\r\n true,\r\n this.$cookies.get(\"org_code\"),\r\n parseInt(sessionStorage.getItem(\"userRole\")) as UserRoleEnum,\r\n );\r\n this.passwordError = false;\r\n this.user.UserName = this.user.Email;\r\n this.userRegistration();\r\n }\r\n }\r\n\r\n userRegistration() {\r\n this.isProcessingRegister = true;\r\n\r\n this.user.ProfilePictureUrl = this.profileLogo\r\n ? this.profileLogo.FileLocation\r\n : null;\r\n\r\n if (this.$cookies.get(\"introducer_code\")) {\r\n this.user.IntroducerCode = this.$cookies.get(\"introducer_code\");\r\n }\r\n\r\n if (this.orgUniqueRef) {\r\n this.$organisation\r\n .registerBroker(this.user, this.orgUniqueRef)\r\n .then((convertedBrokerDto: ApplicationUserDTO) => {\r\n // clean up local storage\r\n sessionStorage.removeItem(\"userDetails\");\r\n sessionStorage.removeItem(\"userRole\");\r\n sessionStorage.removeItem(\"projectname\");\r\n\r\n (this.$rootScope as any).selectedUser = convertedBrokerDto;\r\n\r\n this.$auth\r\n .login(\r\n this.user.Email,\r\n this.user.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n\r\n this.$cookies.put(\"user_firstname\", this.user.FirstName, {\r\n expires: expiry,\r\n });\r\n\r\n this.cleanupAfterConversion();\r\n })\r\n .catch((response) => {\r\n this.error = response.data.Message;\r\n this.isProcessingRegister = false;\r\n });\r\n })\r\n .catch((response) => {\r\n this.error = response.data.ExceptionMessage;\r\n this.isProcessingRegister = false;\r\n this.dataLoading = false;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.organization.OrganisationType = OrganisationTypeEnum.Broker;\r\n this.organization.CommissionPercent = 0.01;\r\n\r\n this.user.Location = this.organization.Location;\r\n\r\n var registerOrgDto: RegisterOrganisationDTO = {\r\n OrganisationDTO: this.organization,\r\n OrganisationAdminUserDTO: this.user,\r\n InviteOrganisationUsers: this.userEmails,\r\n };\r\n\r\n this.$organisation\r\n .registerOrganisationAndAdmin(registerOrgDto)\r\n .then((registerOrganisationDto: RegisterOrganisationDTO) => {\r\n // clean up session storage\r\n sessionStorage.removeItem(\"userDetails\");\r\n sessionStorage.removeItem(\"userRole\");\r\n sessionStorage.removeItem(\"projectname\");\r\n\r\n (this.$rootScope as any).selectedUser =\r\n registerOrganisationDto.OrganisationAdminUserDTO;\r\n\r\n if (\r\n this.$cookies.get(\"access_token\") &&\r\n this.isConvertingExistingUser\r\n ) {\r\n this.cleanupAfterConversion();\r\n } else if (!this.$cookies.get(\"access_token\")) {\r\n // Automatically log in the broker org admin\r\n this.$auth\r\n .login(\r\n this.user.Email,\r\n this.user.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n\r\n this.$cookies.put(\"user_firstname\", this.user.FirstName, {\r\n expires: expiry,\r\n });\r\n\r\n this.onRegistrationComplete();\r\n })\r\n .catch((response) => {\r\n this.error = response.data.Message;\r\n this.isProcessingRegister = false;\r\n });\r\n } else {\r\n this.error = \"logged in but not converting an existing user\";\r\n this.isProcessingRegister = false;\r\n this.dataLoading = false;\r\n }\r\n })\r\n .catch((response) => {\r\n this.error = response.data.ExceptionMessage;\r\n this.isProcessingRegister = false;\r\n this.dataLoading = false;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n onRegistrationComplete() {\r\n if (this.selectedPackage) {\r\n /* this.selectedPackage.Quantity = this.seats;*/\r\n this.selectedProductList.push(this.selectedPackage);\r\n this.createCheckoutSession();\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n }\r\n\r\n cleanupAfterConversion() {\r\n // clear and reset cached data based on the new information\r\n\r\n this.$auth.getProfile().then((response) => {\r\n this.$cookies.put(\"user_firstname\", response.FirstName);\r\n (this.$rootScope as any).selectedUser = response;\r\n });\r\n\r\n (this.$rootScope as any).selectedUser = null;\r\n (this.$rootScope as any).currentUser = null;\r\n\r\n this.$roleService.GetUserRoles(true); //reset user roles\r\n\r\n sessionStorage.setItem(\"isUpgradedUser\", \"true\");\r\n\r\n this.onRegistrationComplete();\r\n }\r\n\r\n registerDisabled() {\r\n if (\r\n this.organization &&\r\n this.organization.Location &&\r\n this.organization.PhoneNumber\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n registerIntroducerByUserId(userId: string): void {\r\n var introducer = {\r\n UserId: userId,\r\n IsIndividual: false,\r\n IntroducerType: IntroducerTypeEnum.Broker,\r\n CompanyName: this.organization.Name,\r\n CompanyURL: this.organization?.CompanyURL,\r\n } as IntroducerDTO;\r\n\r\n this.introduceService\r\n .registerIntroducer(introducer)\r\n .then((success) => {})\r\n .catch((error) => {\r\n this.error =\r\n \"It looks like there was a problem registering you as an introducer. Please try again in a moment.\";\r\n });\r\n }\r\n\r\n removeEmail(item: InvitedBrokerDTO) {\r\n this.userEmails = this.userEmails.filter((x) => x != item);\r\n }\r\n\r\n renameItem(item: InvitedBrokerDTO) {\r\n if (this.renamingItem === undefined) {\r\n this.renamingItem = item;\r\n this.newName = item;\r\n this.tempdata = { ...this.renamingItem };\r\n } else {\r\n delete this.renamingItem;\r\n }\r\n }\r\n\r\n renamingItemComplete(item: InvitedBrokerDTO) {\r\n this.userEmails = this.userEmails.filter((x) => x != item);\r\n this.userEmails.push(this.newName);\r\n this.renamingItem = null;\r\n }\r\n\r\n cancelRenaming(item: InvitedBrokerDTO) {\r\n this.userEmails = this.userEmails.filter((x) => x != item);\r\n this.userEmails.push(this.tempdata);\r\n delete this.renamingItem;\r\n //this.registrationForm.editUserEmail.$setUntouched()\r\n //this.registrationForm.editUserFirstName.$setUntouched()\r\n }\r\n\r\n /* back() {\r\n this.tourOrder--;\r\n this.welcomeMessage = \"Welcome to the Brickflow for Brokers - to setup your account we need some details on you and your company.\";\r\n }\r\n next() {\r\n this.tourOrder++;\r\n this.welcomeMessage = \"Impress your clients with Brickflow Plus; add your company logo and profile picture, to personalise the software.\";\r\n }\r\n */\r\n\r\n fillRegisterForm() {\r\n let name = new Date().toLocaleString().replace(/ |,|:|\\/|/g, \"\");\r\n this.organization.Name = name;\r\n this.organization.CompanyURL = \"www.google.com\";\r\n this.organization.Location = 1;\r\n this.organization.PhoneNumber = \"12345677\";\r\n this.user.Email = `${name}@test.com`;\r\n this.user.FirstName = `${name}Admin`;\r\n this.user.LastName = \"t\";\r\n this.user.PhoneNumber = \"12345677\";\r\n this.user.Referrer = 1;\r\n this.user.Representative = \"None\";\r\n this.organization.FCANumber = \"12344\";\r\n this.organization.TagLine = `${name}tag`;\r\n this.user.Password = \"test\";\r\n this.confirmPassword = \"test\";\r\n }\r\n\r\n next() {\r\n this.getStepName();\r\n\r\n if (!this.user.IsLegacyUser) {\r\n this.userService\r\n .checkEmailExists(this.user.Email)\r\n .then((emailExists: boolean) => {\r\n if (emailExists == true) {\r\n this.error = \"Email address is already in use, please sign in.\";\r\n } else {\r\n this.userService.sendEventToHubspot(\r\n this.user,\r\n this.stepName,\r\n false,\r\n this.$cookies.get(\"org_code\"),\r\n parseInt(sessionStorage.getItem(\"userRole\")) as UserRoleEnum,\r\n );\r\n this.step++;\r\n }\r\n });\r\n } else {\r\n this.userService.sendEventToHubspot(\r\n this.user,\r\n this.stepName,\r\n false,\r\n this.$cookies.get(\"org_code\"),\r\n parseInt(sessionStorage.getItem(\"userRole\")) as UserRoleEnum,\r\n );\r\n this.step++;\r\n }\r\n }\r\n\r\n back() {\r\n this.step--;\r\n }\r\n\r\n proceed() {}\r\n\r\n calculateBarPercentage(index: number, value: string) {\r\n if (!this.formEntered[index] && (value || value != \"\")) {\r\n this.bar += 8;\r\n this.formEntered[index] = !this.formEntered[index];\r\n } else if (\r\n this.formEntered[index] &&\r\n (value == undefined || value == \"\" || value == null)\r\n ) {\r\n this.bar -= 8;\r\n this.formEntered[index] = !this.formEntered[index];\r\n }\r\n }\r\n\r\n isFirstStepValid() {\r\n if (\r\n !this.registrationFormStep1.$invalid &&\r\n !this.error &&\r\n !this.passwordError\r\n ) {\r\n this.progressBar[0].complete = true;\r\n return true;\r\n } else {\r\n this.progressBar[0].complete = false;\r\n return false;\r\n }\r\n }\r\n\r\n isSecondStepValid() {\r\n if (!this.registrationFormStep2.$invalid) {\r\n this.progressBar[1].complete = true;\r\n return true;\r\n } else {\r\n this.progressBar[1].complete = false;\r\n return false;\r\n }\r\n }\r\n\r\n isThirdStepValid() {\r\n if (\r\n !this.registerDisabled() &&\r\n this.user.AgreedToTermsAndPP === true &&\r\n !this.isProcessingRegister &&\r\n !this.registrationFormStep3.$invalid\r\n ) {\r\n this.progressBar[2].complete = true;\r\n return true;\r\n } else {\r\n this.progressBar[2].complete = false;\r\n return false;\r\n }\r\n }\r\n\r\n getTotalCost(): number {\r\n if (this.selectedPackage) {\r\n return this.selectedPackage.PriceAmount * this.seats;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n getPricingFrequency(): string {\r\n var frequencyText = \"Month\";\r\n if (this.selectedPackage) {\r\n switch (this.selectedPackage.PricingFrequency) {\r\n case PricingFrequencyEnum.Yearly: {\r\n frequencyText = \"Year\";\r\n break;\r\n }\r\n case PricingFrequencyEnum.Monthly:\r\n default:\r\n frequencyText = \"Month\";\r\n }\r\n }\r\n return frequencyText;\r\n }\r\n\r\n createCheckoutSession() {\r\n //this.selectedProductList[0].SelectedModuleAppFeature = this.moduleAppFeatures;\r\n // Need to save the search so we can get back to it after payment ($rootscope will lose the data)\r\n if (sessionStorage.getItem(\"addAddon\")) {\r\n this.isAddonselected =\r\n sessionStorage.getItem(\"addAddon\") == \"true\" ? true : false;\r\n }\r\n\r\n if ((this.$rootScope as any).loanCriteria != null) {\r\n (this.$rootScope as any).loanCriteria.UserId = (\r\n this.$rootScope as any\r\n ).selectedUser.Id;\r\n (this.$rootScope as any).loanCriteria.BrokerOrganisationId = (\r\n this.$rootScope as any\r\n ).selectedUser.OrganisationId;\r\n this.developmentInputService\r\n .saveSearch((this.$rootScope as any).loanCriteria)\r\n .then((developmentInputId: number) => {\r\n this.$paymentService\r\n .createCheckoutSession(\r\n this.selectedPackage,\r\n this.isAddonselected,\r\n \"\",\r\n developmentInputId,\r\n )\r\n .then((response) => {\r\n window.location.assign(response.SessionUrl);\r\n });\r\n });\r\n } else {\r\n this.$paymentService\r\n .createCheckoutSession(\r\n this.selectedPackage,\r\n this.isAddonselected,\r\n \"\",\r\n null,\r\n )\r\n .then((response) => {\r\n window.location.assign(response.SessionUrl);\r\n });\r\n }\r\n }\r\n\r\n cancelCheckout() {\r\n if ((this.$rootScope as any).loanCriteria) {\r\n this.$location.path(\"/results\");\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n }\r\n\r\n getApplicationName() {\r\n if (sessionStorage.getItem(\"applicationName\") != null) {\r\n return sessionStorage.getItem(\"applicationName\");\r\n } else {\r\n return \"Brickflow\";\r\n }\r\n }\r\n\r\n getStepName() {\r\n switch (this.step) {\r\n case 1:\r\n this.stepName = \"REGISTRATIONUSERDETAILS\";\r\n break;\r\n case 2:\r\n this.stepName = \"REGISTRATIONCOMPANYDETAILS\";\r\n break;\r\n case 3:\r\n this.stepName = \"REGISTATIONFINALSTEP\";\r\n break;\r\n }\r\n }\r\n}\r\n","export const enum ReferrerEnum {\r\n GoogleSearch = 1,\r\n OtherSearch = 2,\r\n LinkedIn = 3,\r\n Facebook = 4,\r\n Agent = 5,\r\n ExistingUser = 6,\r\n BrickflowConsultant = 7,\r\n Broker = 8,\r\n Developer = 9,\r\n Other = 10,\r\n MassReports = 11,\r\n NimbusMaps = 12,\r\n /** NotSure = 13, */\r\n PressRelease = 13,\r\n TheRodcast = 14,\r\n OTM = 15,\r\n WordOfMouth = 16,\r\n PersonalRecommendation = 17,\r\n Ad = 18,\r\n SocialMedia = 19,\r\n FIBA = 20,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { LenderResultDTO } from \"@js/DTO/DevelopmentFinance/LenderResultDTO.cs.d\";\r\nimport { DevelopmentWithNoLoginDTO } from \"@js/DTO/DevelopmentWithNoLoginDTO.cs.d\";\r\nimport { IntroducerDTO } from \"@js/DTO/IntroducerDTO.cs.d\";\r\nimport { ApplicantRoleEnum } from \"@js/models/enum/ApplicantRoleEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ReferrerEnum } from \"@js/models/enum/ReferrerEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { ClientService } from \"@js/services/ClientService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { DealClientService } from \"@js/services/DealClientService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { DevelopmentInputWithNoLoginService } from \"@js/services/DevelopmentInputWithNoLoginService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { InviteService } from \"@js/services/InviteService\";\r\nimport { LenderResultService } from \"@js/services/LenderResultService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class RegistrationController {\r\n dataLoading: boolean = false;\r\n\r\n openModal: boolean = false;\r\n\r\n registeringAccount: boolean;\r\n registrationFormStep1: ng.IFormController;\r\n registrationFormStep2: ng.IFormController;\r\n\r\n error: string;\r\n passworderror: string;\r\n\r\n loanCriteria: DevelopmentInputDTO;\r\n selectedResult: LenderResultDTO;\r\n loanLabel: string = \"\";\r\n\r\n enquireAfterRegistration: boolean;\r\n\r\n newIntroducer: IntroducerDTO;\r\n\r\n //newUser: RegistrationRequestDTO = {\r\n // Email: \"\", FirstName: \"\", LastName: \"\"\r\n //} as RegistrationRequestDTO;\r\n\r\n newUser: ApplicationUserDTO = {\r\n Id: \"\",\r\n Roles: [\"Client\"],\r\n } as ApplicationUserDTO;\r\n\r\n inviteGuid: string = \"\";\r\n step: number = 1;\r\n profileLogo: string;\r\n selectedPackage: AppPackagePricingDTO;\r\n selectedProductList: AppPackagePricingDTO[] = [];\r\n isPayClicked: boolean = false;\r\n\r\n isConvertingExistingUser: boolean = false;\r\n\r\n redirectToSearch: boolean = false;\r\n\r\n isShareholderRegistration: boolean = false;\r\n\r\n referrerOptions = [];\r\n locationOptions = [];\r\n\r\n showTsAndCs: boolean = false;\r\n showPrivacyPolicy: boolean = false;\r\n orgCode: string;\r\n productFamily: ProductFamilyEnum;\r\n\r\n static $inject = [\r\n \"CaseService\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"$httpParamSerializerJQLike\",\r\n \"LenderResultService\",\r\n \"UserService\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"CaseMemberService\",\r\n \"CaseService\",\r\n \"InviteService\",\r\n \"OrganisationService\",\r\n \"FileAttachmentService\",\r\n \"DevelopmentInputService\",\r\n \"PaymentService\",\r\n \"DevelopmentInputWithNoLoginService\",\r\n \"SelectListService\",\r\n \"ClientService\",\r\n \"DealClientService\",\r\n \"DealService\",\r\n ];\r\n\r\n constructor(\r\n private $CaseService: CaseService,\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $httpParamSerializerJQLike: ng.IHttpParamSerializer,\r\n private $lenderresultservice: LenderResultService,\r\n private $user: UserService,\r\n private $auth: AuthService,\r\n private $roleService: RoleService,\r\n private caseMember: CaseMemberService,\r\n private caseService: CaseService,\r\n private inviteService: InviteService,\r\n private organizationService: OrganisationService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private developmentInputService: DevelopmentInputService,\r\n private $paymentService: PaymentService,\r\n private devInputWithNoLoginService: DevelopmentInputWithNoLoginService,\r\n private selectListService: SelectListService,\r\n private clientService: ClientService,\r\n private dealClientService: DealClientService,\r\n private dealService: DealService,\r\n ) {\r\n // If the user is from security web, prepopulate the information\r\n if (\r\n this.$location.path().startsWith(\"/registershareholder\") ||\r\n this.$routeParams.uniqueId ||\r\n this.$location.path().startsWith(\"/bridgingregistershareholder\") ||\r\n this.$location.path().startsWith(\"/dealregistershareholder\")\r\n ) {\r\n this.isShareholderRegistration = true;\r\n\r\n if (\r\n this.$location.path().startsWith(\"/bridgingregistershareholder\") ||\r\n this.$location.path().startsWith(\"/dealregistershareholder\")\r\n ) {\r\n this.dealClientService\r\n .fetchDealClientByUniqueId(this.$routeParams.uniqueId)\r\n .then((response) => {\r\n if (response.IsVerified) {\r\n this.$location.path(\"/login\");\r\n } else {\r\n this.$user\r\n .checkUserNameExists(response.Client.Email)\r\n .then((userExists: boolean) => {\r\n if (userExists) {\r\n (this.$rootScope as any).loginRedirectPath =\r\n \"/dealsecuritycheck/\" + this.$routeParams.uniqueId;\r\n this.$location.path(\"/login\");\r\n } else {\r\n this.newUser.Email = response.Client.Email;\r\n this.newUser.FirstName = response.Client.FirstName;\r\n this.newUser.LastName = response.Client.LastName;\r\n this.newUser.PhoneNumber = response.Client.PhoneNumber;\r\n this.newUser.OrgUniqueRef = this.$routeParams.brokerOrgUniqueRef;\r\n this.newUser.DealClientUniqueRef = this.$routeParams.uniqueId;\r\n\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n this.caseMember\r\n .fetchCaseMember(this.$routeParams.uniqueId)\r\n .then((response) => {\r\n if (response.IsVerified) {\r\n this.$location.path(\"/login\");\r\n } else {\r\n this.$user\r\n .checkUserNameExists(response.Email)\r\n .then((userExists: boolean) => {\r\n if (userExists) {\r\n (this.$rootScope as any).loginRedirectPath =\r\n \"/securitycheck/\" + this.$routeParams.uniqueId;\r\n this.$location.path(\"/login\");\r\n } else {\r\n this.newUser.Email = response.Email;\r\n this.newUser.FirstName = response.FirstName;\r\n this.newUser.LastName = response.Surname;\r\n this.newUser.PhoneNumber = response.PhoneNumber;\r\n this.newUser.OrgUniqueRef =\r\n this.$routeParams.brokerOrgUniqueRef;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n // if the user is coming through this path, it is a broker invited by organisation to join it.\r\n if (this.$location.path().startsWith(\"/registerbroker\")) {\r\n this.newUser.OrgUniqueRef = this.$routeParams.uniqueRef;\r\n this.newUser.Roles = [\"Broker\", \"Introducer\"];\r\n (this.$rootScope as any).openWelcomeBrokerModal = true;\r\n //console.log((this.$rootScope as any).openWelcomeBrokerModal);\r\n }\r\n\r\n // If a broker invited the user to the platform we assign this broker org on the new user Organisation Referral Id.\r\n if (this.$location.path().startsWith(\"/registerborrower\")) {\r\n this.newUser.OrgUniqueRef = this.$routeParams[\"brokerOrgUniqueRef\"];\r\n }\r\n // if the user is coming through this path, it is a borrower wanting to view a search but they must register first\r\n else if (\r\n (this.$location.path().startsWith(\"/registerwithsearch\") &&\r\n this.$routeParams[\"brokerOrgUniqueRef\"]) ||\r\n (this.$location.path().startsWith(\"/registerwithbridgingsearch\") &&\r\n this.$routeParams[\"brokerOrgUniqueRef\"]) ||\r\n (this.$location.path().startsWith(\"/registerwithdeal\") &&\r\n this.$routeParams[\"brokerOrgUniqueRef\"])\r\n ) {\r\n this.newUser.OrgUniqueRef = this.$routeParams[\"brokerOrgUniqueRef\"];\r\n }\r\n\r\n if (\r\n (this.$location.path().startsWith(\"/registerwithbridgingsearch\") &&\r\n this.$routeParams[\"dealclientuniqueref\"]) ||\r\n (this.$location.path().startsWith(\"/registerwithdeal\") &&\r\n this.$routeParams[\"dealclientuniqueref\"])\r\n ) {\r\n this.newUser.DealClientUniqueRef =\r\n this.$routeParams[\"dealclientuniqueref\"];\r\n this.dealService\r\n .fetchProductFamilyByClientUniqueRef(\r\n this.$routeParams[\"dealclientuniqueref\"],\r\n )\r\n .then((response) => {\r\n this.productFamily = response;\r\n });\r\n }\r\n\r\n // If we have an introducer code set, let's store a cookie.\r\n if (this.$routeParams.introducercode) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams.introducercode, {\r\n expires: expiryDate,\r\n });\r\n } else if (this.$routeParams[\"ic\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams[\"ic\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n if (this.$routeParams[\"orgc\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"org_code\", this.$routeParams[\"orgc\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n if (\r\n !location.pathname.startsWith(\"/otmx\") &&\r\n !location.pathname.startsWith(\"/lnhn\") &&\r\n location.pathname.replace(\"/\", \"\") != null &&\r\n location.pathname.replace(\"/\", \"\").length > 0\r\n ) {\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n }\r\n\r\n if (this.$routeParams[\"invite\"]) {\r\n this.inviteGuid = this.$routeParams[\"invite\"];\r\n }\r\n\r\n this.loanCriteria = (this.$rootScope as any).loanCriteria;\r\n\r\n if (this.$routeParams.enquire !== undefined) {\r\n this.enquireAfterRegistration = true;\r\n }\r\n\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.$user.getcurentuserrecord().then((result) => {\r\n this.newUser = result;\r\n\r\n if (this.newUser.IsLegacyUser) {\r\n this.isConvertingExistingUser = true;\r\n this.newUser = result;\r\n\r\n this.newUser.Roles = [\"Client\"];\r\n\r\n this.newUser.IsOrganisationAdmin = false;\r\n this.newUser.ApplicantDefinedRole = ApplicantRoleEnum.Developer;\r\n this.newUser.ApplicantDefinedRoleIntroducer = null;\r\n } else {\r\n this.$roleService.goHomeBasedOnUser();\r\n }\r\n });\r\n } else {\r\n if (this.$routeParams[\"noLoginUniqueRef\"]) {\r\n this.redirectToSearch = true;\r\n this.devInputWithNoLoginService\r\n .fetchDataByUniqueId(this.$routeParams[\"noLoginUniqueRef\"])\r\n .then((noLoginSearchDto: DevelopmentWithNoLoginDTO) => {\r\n if (noLoginSearchDto) {\r\n if (noLoginSearchDto.IsDeleted) {\r\n this.redirectToSearch = false;\r\n sessionStorage.setItem(\"returningFromdeletedSearch\", \"true\");\r\n }\r\n this.newUser.FirstName = noLoginSearchDto.IntroduceeFirstName;\r\n this.newUser.LastName = noLoginSearchDto.IntroduceeSurname;\r\n this.newUser.Email = noLoginSearchDto.IntroduceeEmail;\r\n this.newUser.PhoneNumber = noLoginSearchDto.IntroduceePhone;\r\n }\r\n });\r\n } else if (\r\n (this.$location.path().startsWith(\"/registerwithbridgingsearch\") &&\r\n this.$routeParams[\"dealclientuniqueref\"]) ||\r\n (this.$location.path().startsWith(\"/registerwithdeal\") &&\r\n this.$routeParams[\"dealclientuniqueref\"])\r\n ) {\r\n this.redirectToSearch = true;\r\n this.clientService\r\n .fetchByDealClientUniqueRef(this.$routeParams[\"dealclientuniqueref\"])\r\n .then((clientDto: ClientDTO) => {\r\n if (clientDto) {\r\n if (clientDto.IsDeleted) {\r\n this.redirectToSearch = false;\r\n sessionStorage.setItem(\"returningFromdeletedSearch\", \"true\");\r\n }\r\n this.newUser.FirstName = clientDto.FirstName;\r\n this.newUser.LastName = clientDto.LastName;\r\n this.newUser.Email = clientDto.Email;\r\n this.newUser.PhoneNumber = clientDto.PhoneNumber;\r\n }\r\n });\r\n } else {\r\n //Grab details to prefill from lender results page\r\n this.newUser.FirstName = (this.$rootScope as any).newUserFirstName;\r\n this.newUser.LastName = (this.$rootScope as any).newUserSurname;\r\n this.newUser.Email = (this.$rootScope as any).newUserEmail;\r\n }\r\n\r\n this.newUser.ApplicantDefinedRole = (this.$rootScope as any).newUserRole;\r\n\r\n if (\r\n this.$location.path().startsWith(\"/registerbroker\") &&\r\n this.$routeParams.uniqueRef !== undefined\r\n ) {\r\n this.newUser.ApplicantDefinedRole = ApplicantRoleEnum.Introducer;\r\n this.newUser.ApplicantDefinedRoleIntroducer = 3;\r\n }\r\n\r\n if (sessionStorage.getItem(\"userDetails\")) {\r\n let data = sessionStorage.getItem(\"userDetails\");\r\n let userdetails = JSON.parse(data);\r\n\r\n let userFullName = userdetails.FullName;\r\n let spaceIndex = userFullName.indexOf(\" \");\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(\" \"));\r\n lastName = userFullName.substring(userFullName.indexOf(\" \") + 1);\r\n }\r\n\r\n this.newUser.FirstName = firstName;\r\n this.newUser.LastName = lastName;\r\n this.newUser.Email = userdetails.Email;\r\n this.newUser.PhoneNumber = userdetails.PhoneNumber;\r\n }\r\n }\r\n\r\n if (\r\n sessionStorage.getItem(\"selectedPackage\") &&\r\n sessionStorage.getItem(\"selectedPackage\") != \"undefined\"\r\n ) {\r\n let data = sessionStorage.getItem(\"selectedPackage\");\r\n this.selectedPackage = JSON.parse(data);\r\n }\r\n\r\n this.referrerOptions = this.selectListService.GetReferrerOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n }\r\n\r\n registerAccount() {\r\n this.registeringAccount = true;\r\n this.dataLoading = true;\r\n this.isPayClicked = true;\r\n if (\r\n !this.isConvertingExistingUser &&\r\n (this.newUser as any).ConfirmPassword !== this.newUser.Password\r\n ) {\r\n this.error = \"Passwords do not match\";\r\n this.dataLoading = false;\r\n this.isPayClicked = false;\r\n } else {\r\n //If has already agreed to terms, let's set this in the new user record\r\n if ((this.$rootScope as any).lenderResultsIntroSeen === true) {\r\n this.newUser.LenderResultsTermsAgreed = true;\r\n }\r\n\r\n this.newUser.UserName = this.newUser.Email; //set user name to be same as email address for now\r\n\r\n // If we have an org code, let's set it.\r\n if (this.$cookies.get(\"org_code\")) {\r\n this.newUser.OrgCode = this.$cookies.get(\"org_code\");\r\n }\r\n // If we have an introducer code, let's set it.\r\n if (this.$cookies.get(\"introducer_code\")) {\r\n this.newUser.IntroducerCode = this.$cookies.get(\"introducer_code\");\r\n this.userRegistration();\r\n } else {\r\n this.inviteService\r\n .checkIfRegisterUserWasInvited(this.newUser.Email, this.inviteGuid)\r\n .then((result) => {\r\n this.newUser.IntroducerCode = result;\r\n this.userRegistration();\r\n });\r\n }\r\n }\r\n }\r\n\r\n userRegistration() {\r\n // send registration\r\n\r\n var broker = this.newUser.Roles.filter((x) => x == \"Broker\");\r\n\r\n // Register Broker User\r\n if (broker != null && broker.length > 0) {\r\n this.organizationService\r\n .registerBroker(this.newUser, this.newUser.OrgUniqueRef)\r\n .then((user) => {\r\n this.login(user);\r\n })\r\n .catch((response) => {\r\n this.error = response.data.Message;\r\n this.registeringAccount = false;\r\n this.dataLoading = false;\r\n })\r\n .finally(() => {\r\n this.registeringAccount = false;\r\n });\r\n } else {\r\n if (this.inviteGuid != null && this.inviteGuid.length > 0) {\r\n this.newUser.InviteCode = this.inviteGuid;\r\n }\r\n\r\n // Register Client User\r\n this.$user\r\n .addUpdateWithOrgUniqueRef(this.newUser)\r\n .then((user) => {\r\n // clean up session storage\r\n sessionStorage.removeItem(\"userDetails\");\r\n sessionStorage.removeItem(\"clientId\");\r\n sessionStorage.removeItem(\"userRole\");\r\n sessionStorage.removeItem(\"projectname\");\r\n\r\n if (\r\n this.$cookies.get(\"access_token\") &&\r\n this.isConvertingExistingUser\r\n ) {\r\n // clear and reset cached data based on the new information\r\n this.$auth.getProfile().then((response) => {\r\n this.$cookies.put(\"user_firstname\", response.FirstName);\r\n (this.$rootScope as any).selectedUser = response;\r\n });\r\n\r\n (this.$rootScope as any).selectedUser = null;\r\n (this.$rootScope as any).currentUser = null;\r\n\r\n this.$roleService.GetUserRoles(true); //reset user roles\r\n\r\n sessionStorage.setItem(\"isUpgradedUser\", \"true\");\r\n\r\n this.onRegistrationComplete();\r\n } else if (!this.$cookies.get(\"access_token\")) {\r\n this.login(user);\r\n } else {\r\n this.error = \"logged in but not converting an existing user\";\r\n this.registeringAccount = false;\r\n this.dataLoading = false;\r\n }\r\n })\r\n .catch((response) => {\r\n this.error = response.data.Message;\r\n this.registeringAccount = false;\r\n this.dataLoading = false;\r\n })\r\n .finally(() => {\r\n this.registeringAccount = false;\r\n });\r\n }\r\n }\r\n\r\n login(user: ApplicationUserDTO) {\r\n (this.$rootScope as any).selectedUser = user;\r\n if (!this.$cookies.get(\"access_token\")) {\r\n this.$auth\r\n .login(\r\n this.newUser.Email,\r\n this.newUser.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n this.$user.getcurentuserrecord().then((response) => {\r\n (this.$rootScope as any).currentUser = response;\r\n });\r\n\r\n let expiry: Date = response;\r\n\r\n this.$cookies.put(\"user_firstname\", user.FirstName, {\r\n expires: expiry,\r\n });\r\n\r\n if (\r\n (this.$location.path().indexOf(\"/registerwithsearch\") !== -1 &&\r\n this.$routeParams[\"noLoginUniqueRef\"]) ||\r\n (this.$location.path().indexOf(\"/registerwithbridgingsearch\") !==\r\n -1 &&\r\n this.$routeParams[\"dealclientuniqueref\"]) ||\r\n (this.$location.path().indexOf(\"/registerwithdeal\") !== -1 &&\r\n this.$routeParams[\"dealclientuniqueref\"])\r\n ) {\r\n if (this.$routeParams[\"noLoginUniqueRef\"]) {\r\n var url =\r\n \"/referredSearch/\" + this.$routeParams[\"noLoginUniqueRef\"];\r\n if (\r\n this.$routeParams[\"brokerOrgUniqueRef\"] &&\r\n this.$routeParams[\"brokerUserId\"]\r\n ) {\r\n url +=\r\n \"/\" +\r\n this.$routeParams[\"brokerOrgUniqueRef\"] +\r\n \"/\" +\r\n this.$routeParams[\"brokerUserId\"];\r\n }\r\n } else if (this.$routeParams[\"searchId\"]) {\r\n var url = \"/bridgingresults/\" + this.$routeParams[\"searchId\"];\r\n if (\r\n this.$routeParams[\"brokerOrgUniqueRef\"] &&\r\n this.$routeParams[\"brokerUserId\"]\r\n ) {\r\n url +=\r\n \"/\" +\r\n this.$routeParams[\"brokerOrgUniqueRef\"] +\r\n \"/\" +\r\n this.$routeParams[\"brokerUserId\"];\r\n }\r\n } else if (this.$routeParams[\"dealclientuniqueref\"]) {\r\n switch (this.productFamily) {\r\n case ProductFamilyEnum.Bridging:\r\n var url =\r\n \"/referredsearchdeal/\" +\r\n this.$routeParams[\"dealclientuniqueref\"];\r\n break;\r\n case ProductFamilyEnum.Commercial:\r\n var url =\r\n \"/referredsearchcommercial/\" +\r\n this.$routeParams[\"dealclientuniqueref\"];\r\n break;\r\n case ProductFamilyEnum.Development:\r\n var url =\r\n \"/referredsearchdevfinance/\" +\r\n this.$routeParams[\"dealclientuniqueref\"];\r\n break;\r\n default:\r\n var url =\r\n \"/referredsearchdeal/\" +\r\n this.$routeParams[\"dealclientuniqueref\"];\r\n break;\r\n }\r\n //if (this.$routeParams['brokerOrgUniqueRef'] && this.$routeParams['brokerUserId']) {\r\n // url += \"/\" + this.$routeParams['brokerOrgUniqueRef'] + \"/\" + this.$routeParams['brokerUserId'];\r\n //}\r\n }\r\n\r\n if (this.redirectToSearch) {\r\n this.$location.path(url);\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n } else if (\r\n this.loanCriteria &&\r\n !(\r\n this.loanCriteria.CI_Dev_OrigPP == 0 &&\r\n this.loanCriteria.CI_EndPropType == 0 &&\r\n this.loanCriteria.CI_GDV == 0 &&\r\n this.loanCriteria.CI_Dev_LoanReq == 0\r\n )\r\n ) {\r\n if (this.selectedPackage) {\r\n this.selectedProductList.push(this.selectedPackage);\r\n this.createCheckoutSession();\r\n } else {\r\n this.loanCriteria.UserId = user.Id;\r\n this.loanCriteria.User = user;\r\n this.loanCriteria.SaveQueryAndResults = true;\r\n var lenderName: string = \"\";\r\n if (this.selectedResult != null) {\r\n lenderName = this.selectedResult.LenderName;\r\n this.loanLabel = this.selectedResult.LoanLabel;\r\n }\r\n\r\n this.$lenderresultservice\r\n .fetchMatchingResults(\r\n this.loanCriteria,\r\n true,\r\n true,\r\n 4,\r\n false,\r\n \"\",\r\n user.Email,\r\n user.PhoneNumber,\r\n lenderName,\r\n )\r\n .then((response) => {\r\n if (this.loanCriteria.SaveCase === true) {\r\n //case creation\r\n this.$CaseService\r\n .promotesearchtocase(\r\n response.Id,\r\n (this.$rootScope as any)\r\n .selectedResultForAttachingToCase.Id,\r\n (this.$rootScope as any).productResultList,\r\n )\r\n .then((response) => {\r\n this.$location.path(\"/userdashboard\");\r\n });\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n });\r\n }\r\n } else if (this.$routeParams.uniqueId) {\r\n if (\r\n this.$location\r\n .path()\r\n .startsWith(\"/bridgingregistershareholder\") ||\r\n this.$location.path().startsWith(\"/dealregistershareholder\")\r\n ) {\r\n this.$location.path(\r\n \"/dealsecuritycheck/\" + this.$routeParams.uniqueId,\r\n );\r\n } else {\r\n this.$location.path(\r\n \"/securitycheck/\" + this.$routeParams.uniqueId,\r\n );\r\n }\r\n } else if (\r\n this.$location.path().indexOf(\"/startprojectappraisal\") !== -1\r\n ) {\r\n this.createNewBlankCase();\r\n } else if (this.$location.path().indexOf(\"/applyfordevloan\") !== -1) {\r\n this.createNewBlankCase(true);\r\n } else {\r\n this.onRegistrationComplete();\r\n }\r\n\r\n if (this.enquireAfterRegistration) {\r\n // Send enquiry and pop up?\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.$auth\r\n .getProfile()\r\n .then((response) => {\r\n this.$roleService.goHomeBasedOnUser();\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n onRegistrationComplete() {\r\n if (this.selectedPackage) {\r\n this.selectedProductList.push(this.selectedPackage);\r\n this.createCheckoutSession();\r\n } else {\r\n if (this.redirectToSearch) {\r\n var url = \"/referredSearch/\" + this.$routeParams[\"noLoginUniqueRef\"];\r\n if (\r\n this.$routeParams[\"brokerOrgUniqueRef\"] &&\r\n this.$routeParams[\"brokerUserId\"]\r\n ) {\r\n url +=\r\n \"/\" +\r\n this.$routeParams[\"brokerOrgUniqueRef\"] +\r\n \"/\" +\r\n this.$routeParams[\"brokerUserId\"];\r\n }\r\n\r\n this.$location.path(url);\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n }\r\n }\r\n\r\n change() {\r\n if (!this.isConvertingExistingUser) {\r\n if ((this.newUser as any).ConfirmPassword === this.newUser.Password) {\r\n this.passworderror = \"\";\r\n } else {\r\n this.passworderror = \"Passwords do not match\";\r\n }\r\n }\r\n }\r\n\r\n emailChange() {\r\n if (this.error) {\r\n this.error = \"\";\r\n }\r\n }\r\n\r\n clearRegistration() {\r\n this.registeringAccount = false;\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n createNewBlankCase(applyForDevLoan: boolean = false) {\r\n this.$auth.getProfile().then((prof) => {\r\n var currentUser: ApplicationUserDTO = prof;\r\n this.$roleService.GetUserRoles().then((result) => {\r\n var isPrimaryApplicant: boolean = true;\r\n\r\n if (result.filter((x) => x == \"Broker\").length > 0) {\r\n isPrimaryApplicant = false;\r\n }\r\n\r\n this.caseService\r\n .newBlankCase(currentUser, isPrimaryApplicant)\r\n .then((newBlankCaseDto) => {\r\n // If applying for a development loan then go to the case dashboard of the new case\r\n if (applyForDevLoan == true) {\r\n this.$location.path(\r\n \"/casedashboard/\" + newBlankCaseDto.NewCaseId,\r\n );\r\n } else {\r\n // If starting a project appraisal then go directly to the appraisal module of the new case\r\n this.$location.path(\r\n \"/criteriaappraisal/\" +\r\n newBlankCaseDto.NewCaseId +\r\n \"/\" +\r\n newBlankCaseDto.NewSearchId,\r\n );\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n fillRegisterForm() {\r\n let name = new Date().toLocaleString().replace(/ |,|:|\\/|/g, \"\");\r\n this.newUser.Email = `${name}@test.com`;\r\n this.newUser.FirstName = name;\r\n this.newUser.LastName = \"t\";\r\n this.newUser.PhoneNumber = \"12345677\";\r\n this.newUser.Location = 1;\r\n this.newUser.ApplicantDefinedRole = 0;\r\n this.newUser.Referrer = 1;\r\n this.newUser.Password = \"test\";\r\n (this.newUser as any).ConfirmPassword = \"test\";\r\n }\r\n\r\n next() {\r\n this.step++;\r\n }\r\n\r\n back() {\r\n this.step--;\r\n }\r\n\r\n changeProfileLogo(files) {\r\n if (files.length > 0) {\r\n this.fileAttachmentService\r\n .uploadFileAndReturnURI(files)\r\n .then((result) => {\r\n if (result) {\r\n this.newUser.ProfilePictureUrl = result.FileLocation;\r\n this.getLogoURL(this.newUser.ProfilePictureUrl);\r\n }\r\n });\r\n }\r\n }\r\n\r\n getLogoURL(url: string) {\r\n this.fileAttachmentService.getFileUri(url).then((result) => {\r\n this.profileLogo = result;\r\n //console.log(this.profileLogo);\r\n });\r\n }\r\n\r\n isFirstStepValid() {\r\n if (\r\n !this.registrationFormStep1.$invalid &&\r\n !(\r\n this.newUser.Referrer == ReferrerEnum.Other &&\r\n this.newUser.ReferrerOther == null\r\n )\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isSecondStepValid() {\r\n if (\r\n !this.registrationFormStep2.$invalid &&\r\n this.newUser.AgreedToTermsAndPP === true &&\r\n !this.passworderror &&\r\n !this.registeringAccount &&\r\n !this.dataLoading\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n createCheckoutSession() {\r\n //this.selectedProductList[0].SelectedModuleAppFeature = this.moduleAppFeatures;\r\n // Need to save the search so we can get back to it after payment ($rootscope will lose the data)\r\n if ((this.$rootScope as any).loanCriteria != null) {\r\n (this.$rootScope as any).loanCriteria.UserId = (\r\n this.$rootScope as any\r\n ).selectedUser.Id;\r\n (this.$rootScope as any).loanCriteria.BrokerOrganisationId = (\r\n this.$rootScope as any\r\n ).selectedUser.OrganisationId;\r\n this.developmentInputService\r\n .saveSearch((this.$rootScope as any).loanCriteria)\r\n .then((developmentInputId: number) => {\r\n this.$paymentService\r\n .createCheckoutSession(\r\n this.selectedPackage,\r\n 1,\r\n \"\",\r\n developmentInputId,\r\n )\r\n .then((response) => {\r\n window.location.assign(response.SessionUrl);\r\n });\r\n });\r\n } else {\r\n this.$paymentService\r\n .createCheckoutSession(this.selectedPackage, 1, \"\", null)\r\n .then((response) => {\r\n window.location.assign(response.SessionUrl);\r\n });\r\n }\r\n }\r\n\r\n cancelCheckout() {\r\n if ((this.$rootScope as any).loanCriteria) {\r\n this.$location.path(\"/results\");\r\n } else {\r\n this.$location.path(\"/userdashboard\");\r\n }\r\n }\r\n\r\n getApplicationName() {\r\n if (sessionStorage.getItem(\"applicationName\") != null) {\r\n return sessionStorage.getItem(\"applicationName\");\r\n } else {\r\n return \"Brickflow\";\r\n }\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { IntroducerDTO } from \"@js/DTO/IntroducerDTO.cs.d\";\r\nimport { IntroducerSimpleDTO } from \"@js/DTO/IntroducerSimpleDTO.cs.d\";\r\nimport { ApplicantRoleEnum } from \"@js/models/enum/ApplicantRoleEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { IntroducerService } from \"@js/services/IntroducerService\";\r\nimport { IntroducerSimpleService } from \"@js/services/IntroducerSimpleService\";\r\nimport { LenderResultService } from \"@js/services/LenderResultService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class RegistrationIntroducerController {\r\n user: ApplicationUserDTO;\r\n introducerSimple: IntroducerSimpleDTO;\r\n introducer: IntroducerDTO;\r\n\r\n registeredAccount: boolean;\r\n registeringAccount: boolean;\r\n registrationForm: FormData;\r\n error: string;\r\n passworderror: string;\r\n\r\n isIntroducer: boolean = false;\r\n adminUser: boolean = false;\r\n SendNewUserEmail: boolean = false;\r\n\r\n newUser: ApplicationUserDTO = {\r\n Id: \"\",\r\n Roles: [\"Introducer\"],\r\n } as ApplicationUserDTO;\r\n\r\n newIntroducer: IntroducerDTO = {} as IntroducerDTO;\r\n\r\n referrerOptions = [];\r\n locationOptions = [];\r\n\r\n static $inject = [\r\n \"CaseService\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"$httpParamSerializerJQLike\",\r\n \"LenderResultService\",\r\n \"UserService\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n \"IntroducerService\",\r\n \"IntroducerSimpleService\",\r\n \"$q\",\r\n \"SelectListService\",\r\n ];\r\n\r\n constructor(\r\n private $CaseService: CaseService,\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $httpParamSerializerJQLike: ng.IHttpParamSerializer,\r\n private $lenderresultservice: LenderResultService,\r\n private $user: UserService,\r\n private $auth: AuthService,\r\n private $roleService: RoleService,\r\n private introducerService: IntroducerService,\r\n private $introducerSimpleService: IntroducerSimpleService,\r\n private $q: ng.IQService,\r\n private selectListService: SelectListService,\r\n ) {\r\n // If we have an introducer code set, let's store a cookie.\r\n if (this.$routeParams.introducercode) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams.introducercode, {\r\n expires: expiryDate,\r\n });\r\n } else if (this.$routeParams[\"ic\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"introducer_code\", this.$routeParams[\"ic\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n\r\n if (this.$routeParams[\"orgc\"]) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n this.$cookies.put(\"org_code\", this.$routeParams[\"orgc\"], {\r\n expires: expiryDate,\r\n });\r\n }\r\n // Determine whether or not the user is logged in.\r\n if ($cookies.get(\"access_token\")) {\r\n this.$auth.getProfile().then((response) => {\r\n this.newIntroducer.UserId = response.Id;\r\n this.user = response;\r\n\r\n this.$roleService.GetRolesIamAMemberOf().then((roles) => {\r\n this.user.Roles = roles;\r\n if (this.user.Roles.find((r) => r === \"Introducer\")) {\r\n this.isIntroducer = true;\r\n }\r\n });\r\n this.$roleService.isBrokerOrABove().then((response) => {\r\n this.adminUser = response;\r\n this.introducerService\r\n .getIntroducerDetailsByUserId(this.user.Id)\r\n .then((response) => {\r\n this.introducerSimple = response;\r\n this.introducer = response;\r\n });\r\n });\r\n });\r\n }\r\n\r\n this.referrerOptions = this.selectListService.GetReferrerOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n }\r\n\r\n doLogin(user: ApplicationUserDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$auth\r\n .login(\r\n this.newUser.Email,\r\n this.newUser.Password,\r\n \"CC022EBE67BE0424EA2A6548B062D2D71\",\r\n )\r\n .then((response) => {\r\n let expiry: Date = response;\r\n this.$cookies.put(\"user_firstname\", user.FirstName, {\r\n expires: expiry,\r\n });\r\n (this.$rootScope as any).selectedUser = user;\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(false);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n registerIntroducer(isRegisteringCurrentUser: boolean): void {\r\n this.registeringAccount = true;\r\n\r\n if ((this.newUser as any).ConfirmPassword !== this.newUser.Password) {\r\n this.error = \"Passwords do not match\";\r\n } else {\r\n //If we are registering a logged in user, set existing user details to go down update route\r\n if (\r\n (this.user && isRegisteringCurrentUser) ||\r\n (this.user && !this.isIntroducer && !this.adminUser)\r\n ) {\r\n this.newUser = this.user;\r\n this.registerIntroducerByUserId(this.user.Id);\r\n } else {\r\n // If we have an org code, let's set it.\r\n if (this.$cookies.get(\"org_code\")) {\r\n this.newUser.OrgCode = this.$cookies.get(\"org_code\");\r\n }\r\n var introduceeId = null;\r\n if (this.isIntroducer && !isRegisteringCurrentUser) {\r\n // Get id of introducee\r\n this.newUser.IntroducerId = this.introducerSimple.Id;\r\n this.newUser.IntroducerCode = this.introducer.IntroducerCode;\r\n introduceeId = this.user.Id;\r\n } else if (\r\n !this.user &&\r\n (isRegisteringCurrentUser == undefined ||\r\n isRegisteringCurrentUser == true)\r\n ) {\r\n // If we have an introducer code, let's set it.\r\n if (this.$cookies.get(\"introducer_code\")) {\r\n this.newUser.IntroducerCode = this.$cookies.get(\"introducer_code\");\r\n }\r\n }\r\n\r\n this.newUser.UserName = this.newUser.Email; //set user name to be same as email address for now\r\n // This is the fix for BF-1244\r\n this.newUser.ApplicantDefinedRole = ApplicantRoleEnum.Introducer;\r\n this.newUser.ApplicantDefinedRoleIntroducer =\r\n this.newIntroducer.IntroducerType;\r\n // send registration\r\n this.$user\r\n .addUpdate(this.newUser)\r\n .then((user) => {\r\n (this.$rootScope as any).selectedUser = user;\r\n\r\n //If this is a new user\r\n if (!this.user) {\r\n this.doLogin(user).then((loginSuccess) => {\r\n // Register introducer\r\n this.registerIntroducerByUserId(user.Id);\r\n });\r\n } else {\r\n // Register another person as introducer\r\n this.registerAnotherIntroducerByUserId(\r\n user.Id,\r\n introduceeId,\r\n this.SendNewUserEmail,\r\n );\r\n }\r\n })\r\n .catch((response) => {\r\n this.error =\r\n \"It looks like there was a problem registering. \" +\r\n response.data.Message;\r\n this.registeringAccount = false;\r\n })\r\n .finally(() => {});\r\n }\r\n }\r\n }\r\n\r\n registerIntroducerByUserId(userId: string): void {\r\n this.newIntroducer.UserId = userId;\r\n this.introducerService\r\n .registerIntroducer(this.newIntroducer)\r\n .then((success) => {\r\n //this.$auth.logout();\r\n //this.go(\"/introducer/new\");\r\n this.go(\"/userdashboard/0/\");\r\n })\r\n .catch((error) => {\r\n this.error =\r\n \"It looks like there was a problem registering you as an introducer. Please try again in a moment.\";\r\n })\r\n .finally(() => {\r\n this.registeringAccount = false;\r\n });\r\n }\r\n\r\n registerAnotherIntroducerByUserId(\r\n userId: string,\r\n introduceeId: string,\r\n sendNewUserEmail: boolean,\r\n ): void {\r\n this.newIntroducer.UserId = userId;\r\n var sendEmail = false;\r\n if (sendNewUserEmail) {\r\n sendEmail = true;\r\n }\r\n\r\n this.introducerService\r\n .registerAnotherIntroducer(this.newIntroducer, introduceeId, sendEmail)\r\n .then((success) => {\r\n this.go(\"/userdashboard\");\r\n })\r\n .catch((error) => {\r\n this.error =\r\n \"It looks like there was a problem registering you as an introducer. Please try again in a moment.\";\r\n })\r\n .finally(() => {\r\n this.registeringAccount = false;\r\n });\r\n }\r\n\r\n change() {\r\n if ((this.newUser as any).ConfirmPassword === this.newUser.Password) {\r\n this.passworderror = \"\";\r\n } else {\r\n this.passworderror = \"Passwords do not match\";\r\n }\r\n }\r\n\r\n go(path): void {\r\n this.$location.path(path);\r\n }\r\n\r\n emailChange() {\r\n if (this.error) {\r\n this.error = \"\";\r\n }\r\n }\r\n}\r\n","import { PageWithTotalCountDTO } from \"@js/DTO/PageWithTotalCountDTO.cs.d\";\r\nimport { RoleDTO } from \"@js/DTO/RoleDTO.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\n\r\nexport class RoleController {\r\n roles: PageWithTotalCountDTO;\r\n selectedRole: RoleDTO;\r\n\r\n page: number = 1;\r\n rolepageid: any;\r\n roleFilter: string;\r\n countperpage: number = 10;\r\n\r\n loadingRoles: boolean;\r\n error: boolean;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $auth: AuthService,\r\n private $role: RoleService,\r\n ) {\r\n this.loadingRoles = true;\r\n this.setPage(1);\r\n }\r\n\r\n setPage(newPage: number): void {\r\n this.loadingRoles = true;\r\n this.page = newPage;\r\n this.$role\r\n .fetchpage(this.roleFilter, this.page, this.countperpage)\r\n .then((response) => {\r\n this.roles = response;\r\n this.loadingRoles = false;\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n this.loadingRoles = false;\r\n });\r\n }\r\n\r\n addNewRole(): void {\r\n this.selectedRole = {\r\n Id: \"\",\r\n Name: \"\",\r\n } as RoleDTO;\r\n }\r\n\r\n formChanged(): void {\r\n (this.$rootScope as any).formSaved = false;\r\n }\r\n\r\n saveRole(): void {\r\n this.$role\r\n .addUpdate(this.selectedRole)\r\n .then((response) => {\r\n if (response) {\r\n if (!this.selectedRole.Id) {\r\n this.setPage(this.page);\r\n }\r\n delete this.selectedRole;\r\n } else {\r\n this.error = true;\r\n }\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n });\r\n }\r\n\r\n deleteRole(): void {\r\n this.$role\r\n .delete(this.selectedRole.Name)\r\n .then((response) => {\r\n if (response) {\r\n this.roles.List.splice(this.roles.List.indexOf(this.selectedRole), 1);\r\n delete this.selectedRole;\r\n } else {\r\n this.error = true;\r\n }\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n });\r\n }\r\n}\r\n","import { SecurityQuestionEnum } from \"@js/models/enum/SecurityQuestionEnum.cs.d\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\n\r\nexport class SecurityCheckController {\r\n dateOfBirth: Date;\r\n email: string;\r\n phone: string;\r\n postcode: string;\r\n answers: number;\r\n error: boolean = false;\r\n\r\n securityValidation: ng.IFormController;\r\n maxDateOfBirth: Date = new Date();\r\n minDateOfBirth: Date = new Date(\"Jan 01 1900\");\r\n uniqueId: string;\r\n showDob: boolean = false;\r\n showPhone: boolean = false;\r\n showPostCode: boolean = false;\r\n\r\n orgUniqueRef: string;\r\n brokerUserId: string;\r\n\r\n static $inject = [\"$routeParams\", \"$location\", \"CaseMemberService\"];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $applicantservice: CaseMemberService,\r\n ) {\r\n this.uniqueId = this.$routeParams.uniqueId;\r\n if (this.$routeParams.orgUniqueRef && this.$routeParams.brokerUserId) {\r\n this.orgUniqueRef = this.$routeParams.orgUniqueRef;\r\n this.brokerUserId = this.$routeParams.brokerUserId;\r\n }\r\n\r\n if (this.uniqueId) {\r\n this.$applicantservice\r\n .fetchCaseMemberAndReturnEmail(this.uniqueId)\r\n .then((response) => {\r\n this.email = response;\r\n });\r\n\r\n this.$applicantservice\r\n .getSecurityQuestions(this.$routeParams.uniqueId)\r\n .then((response) => {\r\n var securityQuestions = parseInt(response) as SecurityQuestionEnum;\r\n\r\n this.showDob =\r\n SecurityQuestionEnum.DateOfBirth ===\r\n (securityQuestions & SecurityQuestionEnum.DateOfBirth);\r\n this.showPostCode =\r\n SecurityQuestionEnum.PostCode ===\r\n (securityQuestions & SecurityQuestionEnum.PostCode);\r\n this.showPhone =\r\n SecurityQuestionEnum.PhoneNumber ===\r\n (securityQuestions & SecurityQuestionEnum.PhoneNumber);\r\n });\r\n }\r\n }\r\n\r\n isValidAnswer() {\r\n this.answers = 0;\r\n\r\n if (this.dateOfBirth) {\r\n this.answers++;\r\n }\r\n\r\n if (this.phone) {\r\n this.answers++;\r\n }\r\n\r\n if (this.postcode) {\r\n this.answers++;\r\n }\r\n\r\n if (\r\n this.answers >= 2 &&\r\n this.securityValidation.$valid &&\r\n !this.securityValidation.$pristine\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n send() {\r\n if (this.uniqueId) {\r\n this.$applicantservice\r\n .securityCheck(\r\n this.uniqueId,\r\n this.phone ? this.phone : null,\r\n this.postcode ? this.postcode : null,\r\n this.dateOfBirth ? this.dateOfBirth : null,\r\n this.orgUniqueRef,\r\n this.brokerUserId,\r\n )\r\n .then((i) => {\r\n var targeturl = this.$location.search().targeturl;\r\n\r\n if (targeturl) {\r\n this.$location.search({});\r\n this.$location.path(targeturl);\r\n } else {\r\n this.$location.path(i);\r\n }\r\n })\r\n .catch(() => {\r\n this.error = true;\r\n });\r\n }\r\n }\r\n}\r\n","export class TermsOfBusinessController {\r\n orgCode: string;\r\n\r\n static $inject = [\"$routeParams\", \"$scope\", \"$location\"];\r\n\r\n constructor(\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $scope: ng.IScope,\r\n private $location: ng.ILocationService,\r\n ) {\r\n document.getElementById(\"header\").style.display = \"none\";\r\n\r\n this.orgCode = location.pathname.replace(\"/\", \"\");\r\n }\r\n}\r\n","import { AddressHistoryDTO } from \"@js/DTO/AddressHistoryDTO.cs.d\";\r\nimport { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { DevelopmentTrackRecordDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentTrackRecordDTO.cs.d\";\r\nimport { ProjectOwnershipDTO } from \"@js/DTO/DevelopmentFinance/ProjectOwnershipDTO.cs.d\";\r\nimport { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { DevelopmentTrackRecordTypeEnum } from \"@js/models/enum/DevelopmentTrackRecordTypeEnum.cs.d\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DevelopmentExperienceService } from \"@js/services/DevelopmentExperienceService\";\r\nimport { DevelopmentTrackRecordService } from \"@js/services/DevelopmentTrackRecordService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { StreetAddressService } from \"@js/services/StreetAddressService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class TrackRecordController {\r\n //case id\r\n caseid: number;\r\n\r\n development: ProjectOwnershipDTO;\r\n developmentTrackRecordType: {}[] = [];\r\n\r\n //navigate for pages\r\n step: number = 3;\r\n applicantNo: number = 0;\r\n devexperienceId: number;\r\n\r\n //current case\r\n case: CaseDTO;\r\n caseTitle: string;\r\n\r\n //user\r\n selectedUser: ApplicationUserDTO;\r\n\r\n //share shareholder\r\n shareContext: number = null;\r\n shareSuplId: number = null;\r\n userFirstName: string;\r\n shareNote: string;\r\n shareFirstName: string;\r\n shareSurname: string;\r\n shareEmail: string;\r\n showShare: boolean = false;\r\n\r\n saving: boolean = false;\r\n saved: boolean = false;\r\n error: boolean = false;\r\n dataLoading: boolean = false;\r\n\r\n //calculations\r\n total: number = 0;\r\n\r\n //modal\r\n message: string = \"\";\r\n modal: boolean = false;\r\n openModal: boolean = false;\r\n\r\n owners: CaseMemberDTO[];\r\n currentApplicant: CaseMemberDTO;\r\n\r\n //files\r\n fileUpload: FileAttachmentDTO[];\r\n uploadingFiles: FileUploadProgressDTO[];\r\n thisModuleSection: ModuleEnum = ModuleEnum.ApplicantDetails;\r\n\r\n //forms\r\n multiPartForm4: ng.IFormController;\r\n multiPartForm7: ng.IFormController;\r\n\r\n //address\r\n previousAddressSearchTerm: string;\r\n searchingForPreviousAddress: boolean = false;\r\n previousAddressPostCodeOptions: PostalAddress[] = [];\r\n showAddHistoryConfirmDelete: boolean = false;\r\n addressHistoryIdToDelete: number;\r\n showAddressHistoryModal: boolean = false;\r\n shareholderAddressHistory: AddressHistoryDTO[] = [];\r\n addressHistoryItem: AddressHistoryDTO;\r\n previousAddressSearchResults: string[];\r\n searchpostcode: string[];\r\n searchterm: string[];\r\n searchresults: string[];\r\n PostCodeOptions: PostalAddress[][] = [];\r\n searchingForAddress: boolean = false;\r\n\r\n //current shareholder\r\n currentShareholder: CaseMemberDTO;\r\n\r\n formattedAcquisitionDate: any[] = [];\r\n\r\n caseMembersWithAccess: CaseMemberDTO[];\r\n selectedClientToShareWith: CaseMemberDTO;\r\n\r\n static $inject = [\r\n \"$location\",\r\n \"RoleService\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"StreetAddressService\",\r\n \"DevelopmentTrackRecordService\",\r\n \"CaseMemberService\",\r\n \"DevelopmentExperienceService\",\r\n \"$routeParams\",\r\n \"CaseService\",\r\n \"FileAttachmentService\",\r\n \"$window\",\r\n \"UserService\",\r\n \"$scope\",\r\n ];\r\n\r\n constructor(\r\n private $location: ng.ILocationService,\r\n private roleService: RoleService,\r\n private $rootScope: ng.IRootScopeService,\r\n protected $q: ng.IQService,\r\n private streetAddressService: StreetAddressService,\r\n private developmenttrackrecordservice: DevelopmentTrackRecordService,\r\n private caseMemberService: CaseMemberService,\r\n private developmentexperienceservice: DevelopmentExperienceService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private caseService: CaseService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private $window: ng.IWindowService,\r\n private userService: UserService,\r\n private $scope: ng.IScope,\r\n ) {\r\n this.developmentexperienceservice\r\n .fetch(this.$routeParams.Id)\r\n .then((response) => {\r\n this.devexperienceId = this.$routeParams.Id;\r\n this.development = response;\r\n /* if (localStorage.getItem('DevelopmentTrackRecords')) {\r\n var data = localStorage.getItem('DevelopmentTrackRecords');\r\n if (data.length > 0) {\r\n var localStorageDevelopmentTrackRecords = JSON.parse(data);\r\n var n = this.development.DevelopmentTrackRecords.length;\r\n\r\n while (n != localStorageDevelopmentTrackRecords.length && localStorageDevelopmentTrackRecords.length > 0) {\r\n this.development.DevelopmentTrackRecords.push(localStorageDevelopmentTrackRecords[n]);\r\n n = this.development.DevelopmentTrackRecords.length;\r\n }\r\n } \r\n }*/\r\n\r\n //Update track record development types#\r\n this.initDevelopmentTrackRecordTypes();\r\n });\r\n\r\n if (this.$routeParams.ApplicantNo) {\r\n this.currentApplicant = this.owners[this.$routeParams.ApplicantNo];\r\n }\r\n\r\n if (this.$routeParams.CaseId) {\r\n this.caseid = this.$routeParams.CaseId;\r\n\r\n this.caseService.fetch(this.caseid).then((result) => {\r\n this.case = result;\r\n this.caseTitle = result.DevelopmentInput.SearchName;\r\n this.fileUpload = result.Attachments;\r\n });\r\n }\r\n\r\n this.userService.getcurentuserrecord().then((result) => {\r\n this.selectedUser = result;\r\n });\r\n\r\n /* $scope.$on('$locationChangeStart', (event: ng.IAngularEvent) => {\r\n localStorage.setItem('DevelopmentTrackRecords', JSON.stringify(this.development.DevelopmentTrackRecords));\r\n });*/\r\n }\r\n\r\n onFileSelect(files: FileAttachmentDTO[], moduleSelected?: string) {\r\n var module = ModuleEnum.DeveloperProfile;\r\n\r\n if (moduleSelected === \"Ownership\") {\r\n module = ModuleEnum.DeveloperProfile;\r\n } else if (moduleSelected === \"Stack\") {\r\n module = ModuleEnum.Track;\r\n } else if (moduleSelected === \"Assets\") {\r\n module = ModuleEnum.AssetsLiabilities;\r\n } else if ((moduleSelected = \"ProofIncome\")) {\r\n module = ModuleEnum.ProofOfIncome;\r\n }\r\n\r\n if (files.length > 0) {\r\n //if case has no id it must be saved first\r\n if (this.caseid < 1) {\r\n this.caseService\r\n .addUpdate(this.case)\r\n .then((response) => {\r\n this.case = response;\r\n this.onFileSelect(files, moduleSelected); //call itself and then exit as should now be saved so should be able to run\r\n return;\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n this.openModal = false;\r\n });\r\n return;\r\n }\r\n\r\n this.dataLoading = true;\r\n this.fileAttachmentService\r\n .UploadFileLstInSync(\r\n files,\r\n this.uploadingFiles,\r\n this.case.Id,\r\n this.fileUpload,\r\n module,\r\n )\r\n .finally(() => {\r\n //this.calculateFilesForThisModule();\r\n this.openModal = false;\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n downloadFile(file: FileAttachmentDTO) {\r\n this.dataLoading = true;\r\n this.fileAttachmentService\r\n .getFileUri(file.FileLocation)\r\n .then((uri) => {\r\n this.$window.open(uri);\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n deleteFile(file: FileAttachmentDTO) {\r\n this.fileUpload.splice(this.fileUpload.indexOf(file), 1);\r\n this.fileAttachmentService.markasdeleted(file.Id).then((result) => {});\r\n }\r\n\r\n calculateTotalFiles(filter: number) {\r\n if (this.fileUpload) {\r\n this.total = this.fileUpload.filter(\r\n (item) => item.Module === filter,\r\n ).length;\r\n }\r\n return this.total;\r\n }\r\n\r\n goToCaseDashboard(blockSave?: boolean): void {\r\n if (this.roleService.IsLender == true) {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n } else {\r\n if (blockSave) {\r\n this.save(true).then((response) => {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n (this.$rootScope as any).formSaved = true;\r\n });\r\n } else {\r\n this.save(false).then(() => {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n });\r\n }\r\n }\r\n }\r\n\r\n //save\r\n save(isFormComplete: boolean): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.saving = true;\r\n\r\n this.caseMemberService\r\n .addUpdatereturnonlyid(this.currentApplicant)\r\n .then((response) => {\r\n this.setAllFormsPristine();\r\n defer.resolve(response as number);\r\n return response;\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n formatDate(unformattedDate) {\r\n if (unformattedDate) {\r\n var formattedDate = new Date(\r\n unformattedDate.getTime() - unformattedDate.getTimezoneOffset() * 60000,\r\n )\r\n .toISOString()\r\n .split(\"T\")[0];\r\n\r\n return formattedDate;\r\n }\r\n }\r\n\r\n getAddressList(app: CaseMemberDTO, index: number, searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions[index] &&\r\n this.PostCodeOptions[index].length > 0\r\n ) {\r\n let addressLookup = this.PostCodeOptions[index].find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n this.currentShareholder.StreetAddress = address;\r\n this.searchterm[index] = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.currentShareholder.StreetAddress.AddressLine1 =\r\n addressLookup.AddressLine2;\r\n this.currentShareholder.StreetAddress.AddressLine2 =\r\n addressLookup.AddressLine3;\r\n this.currentShareholder.StreetAddress.AddressLine3 =\r\n addressLookup.AddressLine4;\r\n this.currentShareholder.StreetAddress.AddressLine4 =\r\n addressLookup.PostCode;\r\n this.currentShareholder.StreetAddress.PostCode =\r\n addressLookup.AddressLine1;\r\n this.searchterm[index] = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.PostCodeOptions[index] = [];\r\n\r\n this.streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions[index] = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n saveDev(): void {\r\n this.saving = true;\r\n\r\n if (\r\n this.development.DevelopmentTrackRecords === null ||\r\n !this.development.DevelopmentTrackRecords\r\n ) {\r\n this.development.DevelopmentTrackRecords = [];\r\n }\r\n\r\n //add a new one\r\n\r\n let newDevelopmentTrackRecord = {\r\n DevelopmentTrackRecordNumber:\r\n this.development.DevelopmentTrackRecords.length + 1,\r\n DevelopmentExperienceId: this.development.Id,\r\n AreaUnit: 1,\r\n DevelopmentTrackRecordType: null,\r\n StreetAddress: {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress,\r\n } as DevelopmentTrackRecordDTO;\r\n\r\n this.development.DevelopmentTrackRecords.push(newDevelopmentTrackRecord);\r\n\r\n this.formattedAcquisitionDate.forEach((d, index) => {\r\n this.development.DevelopmentTrackRecords[index].AcquistionDate = d;\r\n });\r\n\r\n this.developmenttrackrecordservice\r\n .addUpdatelistreturnonlyids(this.development.DevelopmentTrackRecords)\r\n .then((response) => {\r\n //update IDs\r\n this.development.DevelopmentTrackRecords.forEach((x, index) => {\r\n x.Id = response[index];\r\n });\r\n\r\n this.setAllFormsPristine();\r\n this.saved = true;\r\n })\r\n .catch((error) => {\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n }\r\n\r\n //resent forms\r\n setAllFormsPristine(): void {\r\n if (this.multiPartForm4) {\r\n this.multiPartForm4.$setPristine();\r\n }\r\n if (this.multiPartForm7) {\r\n this.multiPartForm7.$setPristine();\r\n }\r\n }\r\n\r\n removeDevelopment(item: DevelopmentTrackRecordDTO) {\r\n if (item.Id > 0) {\r\n this.developmenttrackrecordservice\r\n .markasdeleted(item.Id)\r\n .then((response) => {\r\n if (response) {\r\n this.development.DevelopmentTrackRecords.splice(\r\n this.development.DevelopmentTrackRecords.indexOf(item),\r\n 1,\r\n );\r\n this.formattedAcquisitionDate.splice(\r\n this.development.DevelopmentTrackRecords.indexOf(item),\r\n 1,\r\n );\r\n }\r\n });\r\n } else {\r\n //never saved so just remove\r\n this.development.DevelopmentTrackRecords.splice(\r\n this.development.DevelopmentTrackRecords.indexOf(item),\r\n 1,\r\n );\r\n }\r\n }\r\n\r\n back(): void {\r\n if (this.step > 1) {\r\n this.step--;\r\n this.go(\r\n \"/devexperience/\" +\r\n this.caseid +\r\n \"/\" +\r\n this.devexperienceId +\r\n \"/\" +\r\n this.step,\r\n );\r\n (this.$rootScope as any).formSaved = this.roleService.IsLender;\r\n } else if (this.step <= 1) {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n }\r\n }\r\n\r\n getAddressListArray(app: CaseMemberDTO, index: number, searchTerm: string) {\r\n let foundMatch = false;\r\n\r\n if (\r\n this.PostCodeOptions &&\r\n this.PostCodeOptions[index] &&\r\n this.PostCodeOptions[index].length > 0\r\n ) {\r\n let addressLookup = this.PostCodeOptions[index].find((add) => {\r\n return add.AddressLine1 + \" \" + add.AddressLine2 === searchTerm;\r\n });\r\n\r\n if (addressLookup && !(addressLookup as AddressLookupDTO).IsPostCode) {\r\n foundMatch = true;\r\n\r\n // We've selected an address!\r\n this.streetAddressService\r\n .getFullAddress((addressLookup as AddressLookupDTO).Id)\r\n .then((address) => {\r\n app.StreetAddress = address;\r\n this.searchterm[index] = \"\";\r\n });\r\n } else if (\r\n addressLookup &&\r\n (addressLookup as AddressLookupDTO).IsPostCode\r\n ) {\r\n foundMatch = true;\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].StreetAddress.AddressLine1 = addressLookup.AddressLine2;\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].StreetAddress.AddressLine2 = addressLookup.AddressLine3;\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].StreetAddress.AddressLine3 = addressLookup.AddressLine4;\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].StreetAddress.AddressLine4 = addressLookup.PostCode;\r\n this.development.DevelopmentTrackRecords[index].StreetAddress.PostCode =\r\n addressLookup.AddressLine1;\r\n this.searchterm[index] = \"\";\r\n }\r\n }\r\n\r\n if (searchTerm.length >= 3 && !foundMatch) {\r\n this.searchingForAddress = true;\r\n // Initial search term\r\n this.PostCodeOptions[index] = [];\r\n\r\n this.streetAddressService\r\n .getAddressList(searchTerm)\r\n .then((response) => {\r\n this.PostCodeOptions[index] = response;\r\n })\r\n .finally(() => {\r\n this.searchingForAddress = false;\r\n });\r\n }\r\n }\r\n\r\n initDevelopmentTrackRecordTypes() {\r\n this.development.DevelopmentTrackRecords.forEach((r, index) => {\r\n this.developmentTrackRecordType[index] = {};\r\n for (let i = 1; i >= 0; i *= 2) {\r\n if (r.DevelopmentTrackRecordType >= i) {\r\n //number is in enum sum, add it to object\r\n if (r.DevelopmentTrackRecordType & i) {\r\n this.developmentTrackRecordType[index][i] = true;\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n updateDevelopmentTrackRecordTypes(\r\n index: number,\r\n item: DevelopmentTrackRecordTypeEnum,\r\n ) {\r\n //if we are setting item to false and item exists, remove it, else add it\r\n if (\r\n this.developmentTrackRecordType[index][item] === true &&\r\n !!!(\r\n this.development.DevelopmentTrackRecords[index]\r\n .DevelopmentTrackRecordType & item\r\n )\r\n ) {\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].DevelopmentTrackRecordType += item;\r\n } else {\r\n this.development.DevelopmentTrackRecords[\r\n index\r\n ].DevelopmentTrackRecordType -= item;\r\n }\r\n }\r\n\r\n trackRecordFinish(): void {\r\n this.developmenttrackrecordservice\r\n .addUpdatelistreturnonlyids(this.development.DevelopmentTrackRecords)\r\n .then((response) => {\r\n this.$location.path(\"/casedashboard/\" + this.caseid);\r\n (this.$rootScope as any).formSaved = true;\r\n });\r\n }\r\n\r\n go(path): void {\r\n // Only need to save if user is NOT a lender (everything is in read-only mode for lender)\r\n if (this.roleService.IsLender == true) {\r\n this.$location.path(path);\r\n } else {\r\n this.save(false).then((response) => {\r\n this.devexperienceId = response;\r\n this.$location.path(path);\r\n });\r\n }\r\n }\r\n\r\n openSendToBorrower() {\r\n this.dataLoading = false;\r\n this.shareContext = 11;\r\n this.shareSuplId = this.devexperienceId;\r\n if (this.selectedUser.UserName !== this.case.DevelopmentInput.OwnerUser) {\r\n this.userFirstName = \"\";\r\n } else {\r\n this.userFirstName = this.selectedUser.FirstName;\r\n }\r\n\r\n var message = `Please take a look to the track record. \\n\\nIf you need my help or want me to complete this information with you on a call, then please contact me as soon as possible.`;\r\n\r\n this.shareNote =\r\n `Dear ${\r\n this.shareFirstName != null ? this.shareFirstName + \",\" : \" \" + \",\"\r\n }\\n\\n` + message;\r\n\r\n this.caseMemberService\r\n .fetchcasememberswithaccess(this.case.Id)\r\n .then((response: CaseMemberDTO[]) => {\r\n this.caseMembersWithAccess = response;\r\n\r\n this.showShare = true;\r\n });\r\n }\r\n\r\n sendToBorrower() {\r\n this.dataLoading = true;\r\n this.caseService\r\n .sendNoteToBorrower(\r\n this.selectedClientToShareWith.FirstName,\r\n this.selectedClientToShareWith.Surname,\r\n this.selectedClientToShareWith.Email,\r\n this.shareNote,\r\n this.case.Id,\r\n this.shareContext,\r\n this.shareSuplId,\r\n this.case.DevelopmentExperienceID,\r\n )\r\n .then((success) => {\r\n this.showShare = false;\r\n this.dataLoading = false;\r\n this.selectedClientToShareWith = null;\r\n });\r\n }\r\n\r\n isShareNoteFormComplete(): boolean {\r\n if (!this.selectedClientToShareWith) {\r\n return false;\r\n }\r\n\r\n if (\r\n this.shareNote == \"undefined\" ||\r\n this.shareNote == null ||\r\n this.shareNote.length == 0\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { IntroducerDTO } from \"@js/DTO/IntroducerDTO.cs.d\";\r\nimport { IntroducerSimpleDTO } from \"@js/DTO/IntroducerSimpleDTO.cs.d\";\r\nimport { LenderDTO } from \"@js/DTO/LenderDTO.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { PageWithTotalCountDTO } from \"@js/DTO/PageWithTotalCountDTO.cs.d\";\r\nimport { RoleDTO } from \"@js/DTO/RoleDTO.cs.d\";\r\nimport { LenderProductTypeEnum } from \"@js/models/enum/LenderProductTypeEnum.cs.d\";\r\nimport { AccountSettingService } from \"@js/services/AccountSettingsService\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { FileAttachmentService } from \"@js/services/FIleAttachmentService\";\r\nimport { IntroducerService } from \"@js/services/IntroducerService\";\r\nimport { IntroducerSimpleService } from \"@js/services/IntroducerSimpleService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { PaymentService } from \"@js/services/PaymentService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\n\r\nexport class UserController {\r\n users: PageWithTotalCountDTO;\r\n roles: RoleDTO[];\r\n selectedUser: ApplicationUserDTO;\r\n selectedRole: string = \"\";\r\n uploadingFiles: FileUploadProgressDTO[];\r\n imagePath: string[];\r\n organisations: OrganisationDTO[];\r\n organisationName: string;\r\n\r\n userForm: ng.IFormController;\r\n page: number = 1;\r\n pageid: any;\r\n userFilter: string = \"\";\r\n countperpage: number = 10;\r\n introduceClientModal: number = null;\r\n unique: string;\r\n isBroker: boolean = false;\r\n isLender: boolean = false;\r\n isSelectedUserAdmin: boolean = false;\r\n\r\n introducersList: IntroducerSimpleDTO[];\r\n\r\n currentItemRoleSet: RoleDTO[];\r\n newIntroducer: IntroducerDTO = {} as IntroducerDTO;\r\n\r\n loadingRoles: boolean;\r\n loadingUsers: boolean;\r\n error: boolean;\r\n errorMessage: { user: ApplicationUserDTO; deleteAllWarning: boolean } =\r\n {} as { user: ApplicationUserDTO; deleteAllWarning: boolean };\r\n allActiveAppPackagePrices: AppPackagePricingDTO[];\r\n assignLicense: boolean = true;\r\n selectedProductList: AppPackagePricingDTO[] = [];\r\n licenseEndDate: Date;\r\n message: string;\r\n licenseStatusText: string;\r\n testEmailBody: string = \"This is a test email.\";\r\n testEmailSub: string = \"Test email\";\r\n testEmails: string;\r\n showTestEmailModal: boolean = false;\r\n onSendTestEmailClick: boolean = false;\r\n\r\n referrerOptions = [];\r\n locationOptions = [];\r\n\r\n hasLenderrole: boolean = false;\r\n lenderUserProductType: {}[] = [];\r\n lenders: LenderDTO[];\r\n assignedLenderUsers: ApplicationUserDTO[];\r\n singleLenderAdminError: string = \"\";\r\n\r\n noLicenseToAssignForAdminMessage: string;\r\n\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"$http\",\r\n \"AuthService\",\r\n \"UserService\",\r\n \"RoleService\",\r\n \"DevelopmentInputService\",\r\n \"IntroducerService\",\r\n \"CaseService\",\r\n \"FileAttachmentService\",\r\n \"OrganisationService\",\r\n \"IntroducerSimpleService\",\r\n \"PaymentService\",\r\n \"SelectListService\",\r\n \"AccountSettingService\",\r\n \"LenderService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private $http: ng.IHttpService,\r\n private $auth: AuthService,\r\n private $user: UserService,\r\n private $role: RoleService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private introducerService: IntroducerService,\r\n private caseService: CaseService,\r\n private fileAttachmentService: FileAttachmentService,\r\n private organisationService: OrganisationService,\r\n private introducerSimpleService: IntroducerSimpleService,\r\n private $paymentService: PaymentService,\r\n private selectListService: SelectListService,\r\n private $accountSettingService: AccountSettingService,\r\n private $lenderservice: LenderService,\r\n ) {\r\n this.loadRoles();\r\n this.currentItemRoleSet = [];\r\n this.setPage(1);\r\n this.imagePath = [];\r\n $user.fileSelected = \"img/BrickFlow_Logo_RGB_Blue.svg\";\r\n\r\n //bring all organisations\r\n this.organisationService.fetchAll().then((response) => {\r\n this.organisations = response;\r\n });\r\n\r\n this.getIntroducerUser();\r\n\r\n this.referrerOptions = this.selectListService.GetReferrerOptions();\r\n this.locationOptions = this.selectListService.GetLocations();\r\n }\r\n\r\n clearIntroducer() {\r\n this.selectedUser.IntroducerId = null;\r\n }\r\n\r\n userOpportunityById(userId: number) {\r\n this.organisationService.fetchAll().then((response) => {\r\n const found = response.find((organisation) => organisation.Id === userId);\r\n if (found) {\r\n return (this.organisationName = found.Name);\r\n } else {\r\n return (this.organisationName = \"None\");\r\n }\r\n });\r\n }\r\n\r\n formChanged(): void {\r\n (this.$rootScope as any).formSaved = false;\r\n }\r\n\r\n loadRoles(): void {\r\n this.$role\r\n .fetchAll()\r\n .then((response) => {\r\n this.roles = response.filter((role) => role.Name !== \"None\");\r\n this.loadingRoles = false;\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n this.loadingRoles = false;\r\n });\r\n }\r\n getgroups(): void {\r\n this.currentItemRoleSet = [];\r\n this.roles.forEach((item: RoleDTO) => {\r\n (item as any).ticked = false;\r\n this.selectedUser.Roles.forEach((role: string) => {\r\n if (role == item.Name) {\r\n this.currentItemRoleSet.push(item); //put them in the output object in case not edited\r\n (item as any).ticked = true;\r\n }\r\n });\r\n if (this.selectedUser.IsIntroducer) {\r\n this.getIntroducerDetailsByUserId();\r\n }\r\n });\r\n }\r\n\r\n getIntroducerUser() {\r\n this.introducerSimpleService.fetchAll().then((result) => {\r\n this.introducersList = result;\r\n });\r\n }\r\n\r\n setgroups(): void {\r\n this.selectedUser.Roles = [];\r\n this.currentItemRoleSet.forEach((item: RoleDTO) => {\r\n this.selectedUser.Roles.push(item.Name);\r\n });\r\n }\r\n\r\n isUserBroker() {\r\n this.isBroker =\r\n this.selectedUser.Roles.find((role) => role === \"Broker\") !== undefined;\r\n }\r\n\r\n isUserAdmin() {\r\n this.isSelectedUserAdmin =\r\n this.selectedUser.Roles.find((role) => role === \"Admin\") !== undefined;\r\n }\r\n\r\n isUserLender() {\r\n this.isLender =\r\n this.selectedUser.Roles.find((role) => role === \"Lender\") !== undefined;\r\n }\r\n\r\n setPage(newPage: number): void {\r\n this.loadingUsers = true;\r\n this.page = newPage;\r\n this.$user\r\n .fetchpage(\r\n this.userFilter,\r\n this.page,\r\n this.countperpage,\r\n this.selectedRole,\r\n )\r\n .then((response) => {\r\n this.users = response;\r\n this.loadingUsers = false;\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n this.loadingUsers = false;\r\n });\r\n }\r\n\r\n prevPage(): void {\r\n this.setPage(this.page - 1);\r\n }\r\n\r\n nextPage(): void {\r\n this.setPage(this.page + 1);\r\n }\r\n\r\n addNewUser(): void {\r\n this.hasLenderrole = false;\r\n this.isSelectedUserAdmin = false;\r\n this.userForm.$setPristine();\r\n this.currentItemRoleSet = [];\r\n this.selectedUser = { ShowAutofill: true } as ApplicationUserDTO;\r\n this.lenderUserProductType = [];\r\n this.selectedUser.Roles = [\"Client\"];\r\n this.getgroups();\r\n }\r\n\r\n saveUser(): void {\r\n var validUser = true;\r\n this.error = false;\r\n this.singleLenderAdminError = null;\r\n\r\n if (isNaN(this.selectedUser.IntroducerId)) {\r\n this.selectedUser.IntroducerId = null;\r\n }\r\n\r\n this.setgroups();\r\n if (this.selectedUser.Id == null) {\r\n this.selectedUser.Id = \"\";\r\n }\r\n if (!this.selectedUser.UserName) {\r\n this.selectedUser.UserName = this.selectedUser.Email; //set user name to be same as email address for now\r\n }\r\n\r\n if (\r\n this.hasLenderrole &&\r\n !this.selectedUser.IsLenderAdmin &&\r\n this.selectedUser.LenderId != null\r\n ) {\r\n let lenderAdmin = this.assignedLenderUsers.find(\r\n (l) => l.IsLenderAdmin && l.Id != this.selectedUser.Id,\r\n );\r\n if (!lenderAdmin) {\r\n this.singleLenderAdminError = `Please assign a new Admin User.`;\r\n this.error = true;\r\n validUser = false;\r\n }\r\n }\r\n\r\n if (validUser) {\r\n this.$user\r\n .addUpdate(this.selectedUser)\r\n .then((response) => {\r\n if (response) {\r\n if (!this.selectedUser.Id) {\r\n this.setPage(this.page);\r\n }\r\n // Fetching a user data again to make sure to get a updated data for previous lenderAdmin.\r\n if (this.selectedUser.IsLenderAdmin) {\r\n this.setPage(1);\r\n }\r\n\r\n delete this.selectedUser;\r\n (this.$rootScope as any).formSaved = true;\r\n } else {\r\n this.error = true;\r\n }\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n if (response.data?.ExceptionMessage == \"No license to assign.\") {\r\n this.selectedUser.IsOrganisationAdmin = false;\r\n this.noLicenseToAssignForAdminMessage =\r\n \"There isn't an available license to assign to this user therefore they have not been assigned as the admin for the organisation.\";\r\n }\r\n });\r\n }\r\n }\r\n\r\n deleteUser(): void {\r\n this.$user\r\n .markasdeleted(this.selectedUser.UserName)\r\n .then((response) => {\r\n if (response) {\r\n this.users.List.splice(this.users.List.indexOf(this.selectedUser), 1);\r\n delete this.selectedUser;\r\n } else {\r\n this.error = true;\r\n }\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n });\r\n }\r\n\r\n registerIntroducerByUserId(userId: string, sendEmail: boolean = true): void {\r\n this.newIntroducer.UserId = userId;\r\n this.introducerService\r\n .registerIntroducer(this.newIntroducer, sendEmail)\r\n .then((success) => {\r\n this.selectedUser.IsIntroducer = true;\r\n this.selectedUser.IntroducerCode = success.IntroducerCode;\r\n this.message = \"Selected user has been converted to Introducer\";\r\n this.introduceClientModal = 2;\r\n this.getIntroducerUser();\r\n })\r\n .catch((error) => {\r\n this.error = true;\r\n });\r\n }\r\n\r\n sendLinkToUser() {\r\n this.introducerService\r\n .sendLinkToUser(\r\n this.selectedUser.FirstName,\r\n this.selectedUser.Email,\r\n this.selectedUser.Id,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 4;\r\n });\r\n }\r\n\r\n copyLinkToClipboard() {\r\n this.introducerService\r\n .copyLinkToClipboard(this.selectedUser.Id)\r\n .then((response) => {\r\n this.unique = response.toString();\r\n navigator.clipboard.writeText(this.unique);\r\n this.introduceClientModal = 5;\r\n });\r\n }\r\n\r\n getIntroducerDetailsByUserId() {\r\n this.introducerService\r\n .getIntroducerDetailsByUserId(this.selectedUser.Id)\r\n .then((response) => {\r\n this.selectedUser.IntroducerCode = response.IntroducerCode;\r\n });\r\n }\r\n\r\n extrasettings = {\r\n displayProp: \"Name\",\r\n smartButtonMaxItems: 3,\r\n smartButtonTextConverter: function (itemText: string, originalItem: any) {\r\n return originalItem.Name;\r\n },\r\n scrollable: true,\r\n selectedToTop: true,\r\n enableSearch: true,\r\n };\r\n\r\n checkIntroducerrole(data) {\r\n if (data.Name == \"Introducer\" && data.ticked) {\r\n this.introduceClientModal = 6;\r\n }\r\n\r\n if (data.Name == \"Lender\") {\r\n if (data.ticked == true) {\r\n this.hasLenderrole = true;\r\n this.selectedUser.SendLenderInsightsEmail = true;\r\n this.getAllLenders();\r\n } else {\r\n this.hasLenderrole = false;\r\n this.selectedUser.LenderId = null;\r\n this.selectedUser.IsLenderAdmin = false;\r\n this.selectedUser.LenderProductTypes = 0;\r\n this.selectedUser.SendLenderInsightsEmail = false;\r\n }\r\n }\r\n\r\n if (data.Name == \"Broker\") {\r\n this.isBroker = !this.isBroker;\r\n }\r\n\r\n if (data.Name == \"Admin\") {\r\n this.isSelectedUserAdmin = !this.isSelectedUserAdmin;\r\n }\r\n }\r\n\r\n getActivePackagePricingsForTrialLicense() {\r\n this.allActiveAppPackagePrices = [];\r\n this.$paymentService\r\n .getActivePackagePricingsForTrialLicense(this.selectedUser.UserName)\r\n .then((response) => {\r\n this.allActiveAppPackagePrices = response;\r\n })\r\n .finally(() => {\r\n this.assignLicense = !this.assignLicense;\r\n });\r\n }\r\n\r\n getLicenseStatusText() {\r\n this.allActiveAppPackagePrices = [];\r\n this.$user\r\n .getLicenseStatusText(this.selectedUser.UserName)\r\n .then((response) => {\r\n this.licenseStatusText = response;\r\n });\r\n }\r\n\r\n onSelectingUser(user) {\r\n this.hasLenderrole = false;\r\n this.selectedUser = user;\r\n this.singleLenderAdminError = \"\";\r\n this.noLicenseToAssignForAdminMessage = \"\";\r\n this.hasLenderrole =\r\n this.selectedUser.Roles.find((role) => role === \"Lender\") !== undefined;\r\n if (this.hasLenderrole) {\r\n this.getAllLenders();\r\n this.initLenderUserProductType();\r\n if (this.selectedUser.LenderId) {\r\n this.fetchAllLenderUsers(this.selectedUser.LenderId);\r\n }\r\n }\r\n this.getgroups();\r\n this.isUserBroker();\r\n this.isUserAdmin();\r\n this.isUserLender();\r\n this.getLicenseStatusText();\r\n }\r\n\r\n onChangingPackage(selectedPackage) {\r\n if (\r\n this.selectedProductList != null &&\r\n this.selectedProductList.length > 0\r\n ) {\r\n var found = this.selectedProductList.find(function (product) {\r\n return product.Id == selectedPackage.Id;\r\n });\r\n\r\n if (found) {\r\n this.selectedProductList = this.selectedProductList.filter(\r\n function (e) {\r\n return e.Id != selectedPackage.Id;\r\n },\r\n );\r\n } else {\r\n this.selectedProductList.push(selectedPackage);\r\n }\r\n } else {\r\n this.selectedProductList.push(selectedPackage);\r\n }\r\n }\r\n\r\n assignLicenseToUser() {\r\n this.$user\r\n .assigTrialLicenseToUser(\r\n this.selectedProductList,\r\n this.licenseEndDate,\r\n this.selectedUser.Id,\r\n )\r\n .then((response) => {\r\n if (response) {\r\n this.message = `Trial license has been assigned to ${this.selectedUser.FullName}`;\r\n this.introduceClientModal = 2;\r\n this.allActiveAppPackagePrices = [];\r\n } else {\r\n this.message = `Problem while assigning trial license, please try after some time.`;\r\n this.introduceClientModal = 2;\r\n }\r\n });\r\n }\r\n\r\n goToSettingPage() {\r\n this.$location.path(`/settings/${this.selectedUser.Id}`);\r\n }\r\n\r\n sendTestEmail(): void {\r\n this.$user\r\n .sendTestEmail(this.selectedUser.Email, this.testEmailSub, this.testEmailBody)\r\n .then((response: boolean) => {\r\n if (response) {\r\n this.message = `Test email has been sent to ${this.selectedUser.FullName}`;\r\n this.showTestEmailModal = false;\r\n this.introduceClientModal = 2;\r\n } else {\r\n this.error = true;\r\n }\r\n })\r\n .catch((response) => {\r\n this.error = true;\r\n });\r\n }\r\n\r\n initLenderUserProductType() {\r\n if (!this.selectedUser.LenderProductTypes) {\r\n this.selectedUser.LenderProductTypes = 0;\r\n } else {\r\n for (let i = 1; i >= 0; i *= 2) {\r\n if (this.selectedUser.LenderProductTypes >= i) {\r\n //number is in enum sum, add it to object\r\n if (this.selectedUser.LenderProductTypes & i) {\r\n this.lenderUserProductType[i] = true;\r\n } else {\r\n this.lenderUserProductType[i] = false;\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateLenderUserProductTypes(item: LenderProductTypeEnum) {\r\n this.selectedUser.LenderProductTypes =\r\n this.selectedUser.LenderProductTypes > 0\r\n ? this.selectedUser.LenderProductTypes\r\n : 0;\r\n if (item == LenderProductTypeEnum.All) {\r\n if (this.lenderUserProductType[item] == false) {\r\n this.selectedUser.LenderProductTypes -= item;\r\n } else {\r\n this.lenderUserProductType.forEach((value, index) => {\r\n this.lenderUserProductType[index] = false;\r\n });\r\n\r\n this.selectedUser.LenderProductTypes = 0;\r\n\r\n this.lenderUserProductType[item] = true;\r\n this.selectedUser.LenderProductTypes += item;\r\n }\r\n } else {\r\n //if we are setting item to false and item exists, remove it, else add it\r\n if (this.lenderUserProductType[item] === true) {\r\n this.selectedUser.LenderProductTypes += item;\r\n } else if (this.selectedUser.LenderProductTypes > 0) {\r\n this.selectedUser.LenderProductTypes -= item;\r\n }\r\n }\r\n }\r\n\r\n getAllLenders() {\r\n this.$lenderservice.fetchAll().then((response) => {\r\n this.lenders = response;\r\n });\r\n }\r\n\r\n isLenderUserProductTypeEmpty() {\r\n if (this.lenderUserProductType.length === 0) return true;\r\n\r\n for (let i = 0; i < this.lenderUserProductType.length; i++) {\r\n let value = this.lenderUserProductType[i];\r\n if (value !== undefined && value !== null && value !== false) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n fetchAllLenderUsers(lenderId) {\r\n this.$user.getUsersByLenderId(lenderId).then((response) => {\r\n this.assignedLenderUsers = response;\r\n });\r\n }\r\n\r\n onIsLenderAdminChange() {\r\n if (\r\n !this.selectedUser.IsLenderAdmin &&\r\n this.hasLenderrole &&\r\n this.selectedUser.Id\r\n ) {\r\n let selectedUserFrom = this.assignedLenderUsers.find(\r\n (l) => l.Id == this.selectedUser.Id,\r\n );\r\n let lenderAdmin = this.assignedLenderUsers.find(\r\n (l) => l.IsLenderAdmin && l.Id != this.selectedUser.Id,\r\n );\r\n if (selectedUserFrom?.IsLenderAdmin && !lenderAdmin) {\r\n this.singleLenderAdminError = `Please assign a new Admin User.`;\r\n }\r\n } else if (this.selectedUser.IsLenderAdmin) {\r\n this.singleLenderAdminError = \"\";\r\n }\r\n }\r\n\r\n onExpandingAssignTrialLicense() {\r\n if (this.assignLicense) {\r\n this.getActivePackagePricingsForTrialLicense();\r\n } else {\r\n this.assignLicense = !this.assignLicense;\r\n }\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { CaseSummaryDTO } from \"@js/DTO/CaseSummaryDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { InviteDTO } from \"@js/DTO/InviteDTO.cs.d\";\r\nimport { LicenseMasterDTO } from \"@js/DTO/LicenseMasterDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { CaseAccessLevelEnum } from \"@js/models/enum/CaseAccessLevelEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { LenderProductTypeEnum } from \"@js/models/enum/LenderProductTypeEnum.cs.d\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { StatusEnum } from \"@js/models/enum/StatusEnum.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseLenderService } from \"@js/services/CaseLenderService\";\r\nimport { CaseMemberService } from \"@js/services/CaseMemberService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { CaseSummaryService } from \"@js/services/CaseSummaryService\";\r\nimport { ClientService } from \"@js/services/ClientService\";\r\nimport { BridgingDealService } from \"@js/services/Deal/BridgingDealService\";\r\nimport { DealLenderMessageService } from \"@js/services/Deal/DealLenderMessageService\";\r\nimport { DealLenderService } from \"@js/services/Deal/DealLenderService\";\r\nimport { DealService } from \"@js/services/Deal/DealService\";\r\nimport { DevelopmentInputService } from \"@js/services/DevelopmentInputService\";\r\nimport { DevelopmentInputWithNoLoginService } from \"@js/services/DevelopmentInputWithNoLoginService\";\r\nimport { IntroducerService } from \"@js/services/IntroducerService\";\r\nimport { InviteService } from \"@js/services/InviteService\";\r\nimport { LenderService } from \"@js/services/LenderService\";\r\nimport { LicenseService } from \"@js/services/LicenseService\";\r\nimport { OrganisationService } from \"@js/services/OrganisationService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\nimport { SelectListService } from \"@js/services/SelectListService\";\r\nimport { TaskItemService } from \"@js/services/TaskItemService\";\r\nimport { UserDashboardService } from \"@js/services/UserDashboardService\";\r\nimport { UserService } from \"@js/services/UserService\";\r\nimport { SharedDataService } from \"@js/services/SharedDataService\";\r\nimport { EventLogService } from \"@js/services/EventLogService\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\n\r\n\r\nexport class UserDashboardController {\r\n isPageLoading: boolean = false;\r\n isCardView: boolean = true;\r\n\r\n cardWithOpenMenu = {\r\n id: null,\r\n };\r\n\r\n isSearchesLoading: boolean = false;\r\n searches: CaseSummaryDTO[];\r\n\r\n isDevFinanceProjectsLoading: boolean = false;\r\n isBridgingPreConProjectsLoading: boolean = false;\r\n isCommercialProjectsLoading: boolean = false;\r\n isAllProjectsLoading: boolean = false;\r\n projects: CaseSummaryDTO[];\r\n\r\n actionItem: CaseSummaryDTO;\r\n\r\n confirmSearchToDelete: boolean;\r\n confirmProjectToDelete: boolean;\r\n\r\n confirmCopyProjectName: boolean;\r\n newProjectName: string;\r\n\r\n currentUser: ApplicationUserDTO;\r\n hasEnterpriseLicense: boolean;\r\n\r\n //Share search\r\n newSearch: boolean = false;\r\n isResultScreen: boolean = true;\r\n existingborrower: number = null;\r\n showClientDetails: boolean = false;\r\n existingUsers: UserSimpleDTO[];\r\n clientId: string = null;\r\n loanCriteria: DevelopmentInputDTO;\r\n displayMsg: string;\r\n sharedSearch: boolean = false;\r\n showShareResults: number;\r\n isBridging: boolean = false;\r\n\r\n shareDealDto: ShareDealDTO;\r\n\r\n NavMenuEnum = {\r\n Home: 0,\r\n DevelopmentFinance: 1,\r\n BridgingFinance: 2,\r\n Clients: 3,\r\n CommercialMortgages: 4,\r\n EquityAndMezz: 5\r\n };\r\n\r\n selectedNavMenu: number;\r\n\r\n DashboardTypeEnum = {\r\n Home: 0,\r\n Searches: 1,\r\n Projects: 2,\r\n Introductions: 3,\r\n };\r\n\r\n selectedDashboardType: number;\r\n\r\n //isNewSearchSelect: boolean;\r\n\r\n homeScreenCount: number = 3;\r\n\r\n isAdmin: boolean = false;\r\n isBroker: boolean = false;\r\n isLender: boolean = false;\r\n isBorrower: boolean = false;\r\n isIntroducer: boolean = false;\r\n\r\n shareSearchModal: number = null;\r\n shareSearchErrorDisplayed: boolean = false;\r\n\r\n // Introducer variables\r\n introduceClientModal: number = null;\r\n clientFirstName: string;\r\n clientSurname: string;\r\n clientEmail: string;\r\n clientPhoneNumber: string;\r\n\r\n isProcessingSend: boolean = false;\r\n\r\n invite: InviteDTO;\r\n invitedUsers: InviteDTO[] = [];\r\n\r\n introducedUsers: ApplicationUserDTO[];\r\n\r\n savedIntroducedSearches: DevelopmentInputDTO[] = [];\r\n unsavedIntroducedSearches: DevelopmentInputDTO[] = [];\r\n\r\n clientAdminTools: boolean = false;\r\n userSearchResults: ApplicationUserDTO[];\r\n\r\n selectedUser: ApplicationUserDTO;\r\n selecteduserName: string;\r\n //viewAsClientUserName: string;\r\n viewAsClientFirstName: string;\r\n selectedClientName: string;\r\n //TODO - these need to be related to the enums and moved into a \"LookupService\" so that we're only defining them once\r\n locations: Array<{ id: number; value: string }> = [\r\n { id: 0, value: \"Any\" },\r\n { id: 1, value: \"London\" },\r\n { id: 2, value: \"North West\" },\r\n { id: 4, value: \"Midlands\" },\r\n { id: 8, value: \"East of England\" },\r\n { id: 16, value: \"South East\" },\r\n { id: 32, value: \"South West\" },\r\n { id: 64, value: \"North East\" },\r\n { id: 128, value: \"Wales\" },\r\n { id: 256, value: \"Scotland\" },\r\n { id: 512, value: \"Northern Ireland\" },\r\n ];\r\n propertyTypes: Array<{ id: number; value: string }> = [\r\n { id: 0, value: \"Any\" },\r\n { id: 1, value: \"Residential\" },\r\n { id: 2, value: \"Mixed Use\" },\r\n { id: 2048, value: \"Licenced HMO\" },\r\n { id: 4, value: \"Hotel\" },\r\n { id: 8, value: \"Leisure\" },\r\n { id: 16, value: \"Care Home\" },\r\n { id: 32, value: \"Medical\" },\r\n { id: 64, value: \"Office\" },\r\n { id: 128, value: \"Retail\" },\r\n { id: 256, value: \"Light Industrial\" },\r\n { id: 512, value: \"Student\" },\r\n { id: 1024, value: \"Heavy Industrial\" },\r\n { id: 4096, value: \"Land without Planning\" },\r\n { id: 8192, value: \"Education\" },\r\n { id: 16384, value: \"Retirement\" },\r\n ];\r\n\r\n // end of Introducer variables\r\n\r\n // Start of dashboard search variables\r\n\r\n //caseStatuses: Array<{ id: number, value: string, order: number }> = [{ id: 999, value: 'Search', order: 1 }, { id: 0, value: 'New Project', order: 2 }, { id: 1, value: 'DIP In Progress', order: 3 }, { id: 2, value: 'Under Review', order: 4 }, { id: 3, value: 'Ready To Submit', order: 5 }, { id: 4, value: 'Submitted To Lenders For DIP', order: 6 }, { id: 12, value: 'Ready to be Re-submitted to Lenders For DIP', order: 6 }, { id: 5, value: 'Applied', order: 7 }]; //, { id: 9, value: \"Submitted To Lenders Pending Review\", order: 12 }\r\n lenderCaseStatuses: Array<{ id: number; value: string; order: number }> = [\r\n { id: 1, value: \"Case to review\", order: 2 },\r\n { id: 2, value: \"DIP submitted\", order: 3 },\r\n { id: 3, value: \"Case rejected\", order: 4 },\r\n { id: 4, value: \"DIP withdrawn\", order: 5 },\r\n { id: 10, value: \"DIP submitted and accepted\", order: 6 },\r\n ];\r\n\r\n // Status filter for non-lenders\r\n filterStatuses: Array<{ id: number; value: string; order: number }> = [\r\n { id: 1, value: \"Search\", order: 2 },\r\n { id: 2, value: \"Case in Progress\", order: 3 },\r\n { id: 3, value: \"Submitted to Lender\", order: 4 },\r\n { id: 8, value: \"Ready to Re-Submit to Lenders\", order: 4.5 },\r\n { id: 4, value: \"DIP: Offered\", order: 5 },\r\n { id: 5, value: \"DIP: Rejected\", order: 6 },\r\n { id: 6, value: \"DIP: Withdrawn\", order: 7 },\r\n { id: 7, value: \"Applied to Lender\", order: 8 }\r\n ];\r\n\r\n clientCaseNameFilter: string = null;\r\n statusFilter: number = undefined;\r\n caseStatusFilter: CaseStatusEnum = null;\r\n dipStatusFilter: CaseLenderStateEnum = null;\r\n\r\n // end of dashboard search variables\r\n\r\n licenseStatus: LicenseMasterStatusEnum;\r\n showPaymentModal: boolean;\r\n selectedResult: number;\r\n dataLoading: boolean = false;\r\n introducerErrorDisplayed: boolean = false;\r\n\r\n isUpgradedUser: boolean = false;\r\n isAssignedUserToOrg: boolean = false;\r\n\r\n showLogOutModal: boolean = false;\r\n\r\n addToHubspot: boolean = false;\r\n\r\n selectedSearch: CaseSummaryDTO;\r\n\r\n confirmAssignBrokerSearch: boolean = false;\r\n confirmAssignLenderSearch: boolean = false;\r\n licensedOrganisationBrokers: ApplicationUserDTO[];\r\n lenderUsers: ApplicationUserDTO[];\r\n selectedBroker: ApplicationUserDTO;\r\n selectedLender: ApplicationUserDTO;\r\n lenderList: ApplicationUserDTO[] = [];\r\n showDeletedSearchMessageModal: boolean = false;\r\n borrowerMessage: string = null;\r\n showMessageToborrower: boolean = false;\r\n showContactBrokerModal: boolean = false;\r\n\r\n productTypeOptions = [];\r\n\r\n //hiding and showing briding option.\r\n hasBridging: boolean = false;\r\n\r\n //hiding and showing commercial option.\r\n hasCommercial: boolean = false;\r\n\r\n isDeallockerIntegrationEnabled: boolean = false\r\n\r\n //Hiding menus for every one.\r\n hideDevfinanceMenu: boolean = true;\r\n hideBridgingMenu: boolean = true;\r\n hideCommercialMenu: boolean = true;\r\n\r\n //Hiding search for lenders.\r\n hasLiveSearch: boolean = true;\r\n hideDevelopmentFinanceSearch: boolean = false;\r\n hideBridgingSearch: boolean = false;\r\n hideCommercialSearch: boolean = false;\r\n\r\n // Boolean to send search email to client\r\n emailClient: boolean = false;\r\n\r\n showLenderTerms: boolean = false;\r\n lenderSelectedProject: CaseSummaryDTO;\r\n\r\n isCommercialOwnerOccupiedActive: boolean = false;\r\n goToDealForumClicked: boolean = false;\r\n assignedLenders = {};\r\n\r\n bridgingTotalUnreadMessage: number = 0;\r\n commercialTotalUnreadMessage: number = 0;\r\n devfinanceTotalUnreadMessage: number = 0;\r\n deallockerTabSelected: number = 1;\r\n\r\n static $inject = [\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"DevelopmentInputService\",\r\n \"DevelopmentInputWithNoLoginService\",\r\n \"UserService\",\r\n \"CaseService\",\r\n \"RoleService\",\r\n \"AuthService\",\r\n \"IntroducerService\",\r\n \"CaseSummaryService\",\r\n \"CaseMemberService\",\r\n \"InviteService\",\r\n \"OrganisationService\",\r\n \"LicenseService\",\r\n \"CaseLenderService\",\r\n \"UserService\",\r\n \"TaskItemService\",\r\n \"SelectListService\",\r\n \"ClientService\",\r\n \"DealService\",\r\n \"BridgingDealService\",\r\n \"LenderService\",\r\n \"DealLenderService\",\r\n \"DealLenderMessageService\",\r\n \"UserDashboardService\",\r\n \"SharedDataService\",\r\n \"EventLogService\"\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private $DevelopmentInputService: DevelopmentInputService,\r\n private $DevelopmentInputWithNoLoginService: DevelopmentInputWithNoLoginService,\r\n private $user: UserService,\r\n private $CaseService: CaseService,\r\n private roleService: RoleService,\r\n private authService: AuthService,\r\n private $IntroducerService: IntroducerService,\r\n private $CaseSummaryService: CaseSummaryService,\r\n private $applicantservice: CaseMemberService,\r\n private inviteService: InviteService,\r\n private organisationService: OrganisationService,\r\n private licenseService: LicenseService,\r\n private caseLenderService: CaseLenderService,\r\n private userService: UserService,\r\n private taskItemService: TaskItemService,\r\n private selectListService: SelectListService,\r\n private clientService: ClientService,\r\n private dealService: DealService,\r\n private $bridgingDealService: BridgingDealService,\r\n private $lenderService: LenderService,\r\n private dealLenderService: DealLenderService,\r\n private dealLenderMessageService: DealLenderMessageService,\r\n private userDashboardService: UserDashboardService,\r\n private sharedDataService: SharedDataService,\r\n private eventLogService: EventLogService\r\n ) {\r\n (this.$rootScope as any).isInvitedAndHasReadonlyAccess = false;\r\n\r\n this.dealService.setShowSearchNameAndUserSelectionModal(true);\r\n\r\n this.authService.isCommercialOwnerOccupiedActive().then((response) => {\r\n this.isCommercialOwnerOccupiedActive = response;\r\n });\r\n\r\n if (sessionStorage.getItem(\"returningFromdeletedSearch\")) {\r\n this.showDeletedSearchMessageModal = true;\r\n }\r\n\r\n this.isUpgradedUser = sessionStorage.getItem(\"isUpgradedUser\") == \"true\";\r\n this.isAssignedUserToOrg = sessionStorage.getItem(\"assignUserToOrg\") == \"true\";\r\n\r\n\r\n //This removes most of the localstorage and session storage data.\r\n this.authService.clearStorageData();\r\n\r\n this.productTypeOptions =\r\n this.selectListService.GetProductTypeOptions(true);\r\n\r\n this.isPageLoading = true;\r\n\r\n this.roleService\r\n .GetUserRoles()\r\n .then((result) => {\r\n if (result.filter((x) => x.toLowerCase() == \"admin\").length > 0) {\r\n this.isAdmin = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"broker\").length > 0) {\r\n this.isBroker = true;\r\n }\r\n\r\n if (result.filter((x) => x.toLowerCase() == \"client\").length > 0) {\r\n this.isBorrower = true;\r\n }\r\n if (result.filter((x) => x.toLowerCase() == \"introducer\").length > 0) {\r\n this.isIntroducer = true;\r\n }\r\n\r\n if (result.filter((x) => x.toLowerCase() == \"lender\").length > 0) {\r\n this.isLender = true;\r\n }\r\n\r\n this.authService.getUpdatedProfile().then((prof) => {\r\n this.currentUser = prof;\r\n this.hasEnterpriseLicense = this.currentUser.HasActiveEnterpriseLicense;\r\n\r\n if (this.currentUser.IsConnectUser) {\r\n this.filterStatuses[this.filterStatuses.length] = { id: 10, value: \"Case to Review\", order: 9 }\r\n }\r\n\r\n\r\n if (\r\n this.currentUser != null &&\r\n this.currentUser.IsOrganisationAdmin\r\n ) {\r\n this.getBrokerBelongToOrganisation(this.currentUser.OrganisationId);\r\n }\r\n\r\n if (this.isBroker || this.isBorrower) {\r\n this.hideDevfinanceMenu = false;\r\n this.hideBridgingMenu = false;\r\n this.hideCommercialMenu = false;\r\n this.setHasBridgingAndHasCommercialValue();\r\n } else {\r\n this.hasBridging = true;\r\n this.hasCommercial = true;\r\n if (!this.isAdmin && !this.isIntroducer) {\r\n this.currentLenderProductType();\r\n } else {\r\n this.hideDevfinanceMenu = false;\r\n this.hideBridgingMenu = false;\r\n this.hideCommercialMenu = false;\r\n }\r\n }\r\n\r\n if (this.isAdmin || this.isBroker) {\r\n this.organisationService.getOrganisationProductAccess().then((response) => {\r\n if (this.isAdmin) this.isDeallockerIntegrationEnabled = response.IsDeallockerIntegrationEnabled;\r\n\r\n if ((this.isBroker && response.IsConnectMember) || this.isAdmin) {\r\n this.filterStatuses[this.filterStatuses.length] = { id: 10, value: \"Sent to Packager\", order: 9 }\r\n }\r\n\r\n });\r\n }\r\n\r\n if (this.isLender) {\r\n this.hideDevelopmentFinanceSearch = true;\r\n this.hideBridgingSearch = true;\r\n this.hideCommercialSearch = true;\r\n this.hasLiveSearch = false;\r\n\r\n this.$lenderService.getUserLenderDetails().then((lender) => {\r\n if (lender.HasLiveMarketSearch) {\r\n this.hasLiveSearch = true;\r\n\r\n if (lender.HasBridgingSearch) {\r\n this.hideBridgingMenu = false;\r\n this.hideBridgingSearch = false;\r\n }\r\n if (lender.HasDevelopmentFinanceSearch) {\r\n this.hideDevfinanceMenu = false;\r\n this.hideDevelopmentFinanceSearch = false;\r\n }\r\n if (lender.HasCommercialSearch) {\r\n this.hideCommercialMenu = false;\r\n this.hideCommercialSearch = false;\r\n }\r\n }\r\n });\r\n\r\n this.$user\r\n .getUsersByLenderId(this.currentUser.LenderId)\r\n .then((response) => {\r\n this.lenderUsers = response;\r\n });\r\n }\r\n\r\n if (this.addToHubspot) {\r\n this.userService.sendEventToHubspot(this.currentUser);\r\n }\r\n\r\n if (!(this.$rootScope as any).clientUsernameBeingViewed) {\r\n this.selecteduserName = this.currentUser.UserName;\r\n }\r\n\r\n // this is why I'm getting the update profile within the getuserroles call, I want to know if introducer is their only role\r\n if (result.length == 1 && this.isIntroducer) {\r\n this.showIntroductionsDashboard();\r\n } else {\r\n var goToNavMenu = this.userDashboardService.getGoToNavMenu();\r\n if (goToNavMenu) {\r\n if (goToNavMenu == this.userDashboardService.NavMenuEnum.EquityAndMezz) {\r\n this.showEquityAndMezzDashboard();\r\n }\r\n } else {\r\n this.showHomeDashboard();\r\n }\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.isPageLoading = false;\r\n });\r\n\r\n // Will hit here if the user has come from the payment page\r\n if (this.$routeParams.licensemasterId) {\r\n if (this.$routeParams.licensemasterId == \"0\") {\r\n this.showPaymentModal = true;\r\n } else {\r\n this.licenseService\r\n .fetch(this.$routeParams.licensemasterId)\r\n .then((license: LicenseMasterDTO) => {\r\n this.licenseStatus = license.Status;\r\n if (\r\n license.Status == LicenseMasterStatusEnum.PreSubscription ||\r\n LicenseMasterStatusEnum.None ||\r\n LicenseMasterStatusEnum.Unpaid ||\r\n license.Status == LicenseMasterStatusEnum.PayFailure ||\r\n license.Status == LicenseMasterStatusEnum.PaidUp\r\n ) {\r\n this.showPaymentModal = true;\r\n }\r\n });\r\n }\r\n this.addToHubspot = true;\r\n } else if (this.isAssignedUserToOrg) {\r\n this.showLogOutModal = true;\r\n }\r\n }\r\n\r\n getProjectsAndSearches() {\r\n sessionStorage.setItem(\"selectedNavMenu\", this.selectedNavMenu.toString());\r\n if (\r\n this.isBorrower ||\r\n this.isBroker ||\r\n this.isAdmin ||\r\n this.isIntroducer ||\r\n this.isLender\r\n ) {\r\n //only get searches if user might have any\r\n this.getSearches(this.homeScreenCount);\r\n } else {\r\n this.homeScreenCount = 6; //for lender\r\n }\r\n this.getProjects(this.homeScreenCount);\r\n }\r\n\r\n showHomeDashboard() {\r\n this.selectedDashboardType = this.DashboardTypeEnum.Home;\r\n if (\r\n sessionStorage.getItem(\"selectedNavMenu\") &&\r\n this.isValidPreviousPath()\r\n ) {\r\n this.selectedNavMenu = parseInt(\r\n sessionStorage.getItem(\"selectedNavMenu\"),\r\n );\r\n } else {\r\n this.selectedNavMenu = this.NavMenuEnum.Home;\r\n }\r\n\r\n if (\r\n sessionStorage.getItem(\"clientCaseNameFilter\") &&\r\n this.isValidPreviousPath()\r\n ) {\r\n this.clientCaseNameFilter = sessionStorage.getItem(\r\n \"clientCaseNameFilter\",\r\n );\r\n }\r\n\r\n if (sessionStorage.getItem(\"statusFilter\") && this.isValidPreviousPath()) {\r\n this.statusFilter = parseInt(sessionStorage.getItem(\"statusFilter\"));\r\n this.mapFilterStatus();\r\n }\r\n\r\n this.getProjectsAndSearches();\r\n }\r\n\r\n showEquityAndMezzDashboard() {\r\n this.selectedNavMenu = this.NavMenuEnum.EquityAndMezz;\r\n this.selectedDashboardType = this.DashboardTypeEnum.Home;\r\n this.userDashboardService.resetGoToNavMenu();\r\n }\r\n\r\n showDevelopmentFinanceDashboard() {\r\n this.selectedNavMenu = this.NavMenuEnum.DevelopmentFinance;\r\n this.selectedDashboardType = this.DashboardTypeEnum.Home;\r\n //this.isNewSearchSelect = false;\r\n\r\n this.getProjectsAndSearches();\r\n }\r\n\r\n showBridgingDashboard() {\r\n if (this.hasBridging) {\r\n this.selectedNavMenu = this.NavMenuEnum.BridgingFinance;\r\n this.selectedDashboardType = this.DashboardTypeEnum.Home;\r\n //this.isNewSearchSelect = false;\r\n\r\n //TODO JLH remove\r\n //this.selectedDashboardType = this.DashboardTypeEnum.Home;\r\n\r\n this.getProjectsAndSearches();\r\n }\r\n }\r\n\r\n showCommercialDashboard() {\r\n if (this.hasCommercial) {\r\n this.selectedNavMenu = this.NavMenuEnum.CommercialMortgages;\r\n this.selectedDashboardType = this.DashboardTypeEnum.Home;\r\n // this.isNewSearchSelect = false;\r\n this.getProjectsAndSearches();\r\n }\r\n }\r\n\r\n showDevFinanceSearchDashboard() {\r\n this.selectedDashboardType = this.DashboardTypeEnum.Searches;\r\n //this.isNewSearchSelect = false;\r\n this.getSearches(0);\r\n }\r\n\r\n showProjectDashboard() {\r\n this.selectedDashboardType = this.DashboardTypeEnum.Projects;\r\n //this.isNewSearchSelect = false;\r\n this.getProjects(0);\r\n }\r\n\r\n showIntroductionsDashboard() {\r\n this.isPageLoading = true;\r\n\r\n this.selectedDashboardType = this.DashboardTypeEnum.Introductions;\r\n // this.isNewSearchSelect = false;\r\n\r\n if (this.isIntroducer || this.isAdmin) {\r\n this.getInvitedUsers();\r\n this.getIntroducedBorrowers();\r\n this.getIntroducedSearches(this.currentUser.RegisteredIntroducerId);\r\n }\r\n\r\n this.isPageLoading = false;\r\n }\r\n\r\n checkSearchPermission(): boolean {\r\n if (this.selectedNavMenu == this.NavMenuEnum.Home) {\r\n return true;\r\n }\r\n\r\n if (\r\n this.selectedNavMenu == this.NavMenuEnum.DevelopmentFinance &&\r\n !this.hideDevelopmentFinanceSearch\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n this.selectedNavMenu == this.NavMenuEnum.BridgingFinance &&\r\n !this.hideBridgingSearch\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n this.selectedNavMenu == this.NavMenuEnum.CommercialMortgages &&\r\n !this.hideCommercialSearch\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n getSearches(count: number) {\r\n if (this.dipStatusFilter) {\r\n this.searches = [];\r\n return;\r\n }\r\n\r\n this.isSearchesLoading = true;\r\n\r\n this.searches = [];\r\n\r\n var userName = this.currentUser.UserName;\r\n\r\n if (this.selectedNavMenu == this.NavMenuEnum.DevelopmentFinance) {\r\n this.$CaseSummaryService\r\n .getDevFinanceSearchesForUser(\r\n userName,\r\n this.clientCaseNameFilter,\r\n this.caseStatusFilter,\r\n count,\r\n )\r\n .then((results: CaseSummaryDTO[]) => {\r\n if (this.selectedNavMenu == this.NavMenuEnum.DevelopmentFinance) {\r\n this.searches = results;\r\n this.isSearchesLoading = false;\r\n }\r\n })\r\n .catch((error) => {\r\n this.searches = [];\r\n this.isSearchesLoading = false;\r\n });\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.BridgingFinance) {\r\n this.$CaseSummaryService\r\n .getBridgingSearchesForUser(\r\n userName,\r\n this.clientCaseNameFilter,\r\n this.caseStatusFilter,\r\n count,\r\n )\r\n .then((results: CaseSummaryDTO[]) => {\r\n if (this.selectedNavMenu == this.NavMenuEnum.BridgingFinance) {\r\n this.searches = results;\r\n this.isSearchesLoading = false;\r\n }\r\n })\r\n .catch((error) => {\r\n this.searches = [];\r\n this.isSearchesLoading = false;\r\n });\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.CommercialMortgages) {\r\n this.$CaseSummaryService\r\n .getCommercialSearchesForUser(\r\n userName,\r\n this.clientCaseNameFilter,\r\n this.caseStatusFilter,\r\n count,\r\n )\r\n .then((results: CaseSummaryDTO[]) => {\r\n if (this.selectedNavMenu == this.NavMenuEnum.CommercialMortgages) {\r\n this.searches = results;\r\n this.isSearchesLoading = false;\r\n }\r\n })\r\n .catch((error) => {\r\n this.searches = [];\r\n this.isSearchesLoading = false;\r\n });\r\n } else {\r\n this.$CaseSummaryService\r\n .getAllSearchesForUser(\r\n userName,\r\n this.clientCaseNameFilter,\r\n this.caseStatusFilter,\r\n count,\r\n )\r\n .then((results: CaseSummaryDTO[]) => {\r\n if (this.selectedNavMenu == this.NavMenuEnum.Home) {\r\n this.searches = results;\r\n this.isSearchesLoading = false;\r\n }\r\n })\r\n .catch((error) => {\r\n this.searches = [];\r\n this.isSearchesLoading = false;\r\n });\r\n }\r\n }\r\n /**\r\n * Retrieves projects (appraisals) according to which menu option has been selected\r\n * @param count\r\n */\r\n //TODO: Use this\r\n getDealproject(count: number) { }\r\n /**\r\n * Retrieves projects (appraisals) according to which menu option has been selected\r\n * @param count\r\n */\r\n getProjects(count: number) {\r\n this.projects = [];\r\n\r\n var userName = this.currentUser.UserName;\r\n\r\n if (this.selectedNavMenu == this.NavMenuEnum.DevelopmentFinance) {\r\n this.isDevFinanceProjectsLoading = true;\r\n\r\n this.$CaseSummaryService\r\n .getDevFinanceCasesForUser(\r\n userName,\r\n this.clientCaseNameFilter,\r\n this.caseStatusFilter,\r\n this.dipStatusFilter,\r\n count,\r\n )\r\n .then((results) => {\r\n if (this.selectedNavMenu == this.NavMenuEnum.DevelopmentFinance) {\r\n this.projects = results;\r\n if (this.isLender) {\r\n this.projects.forEach((project) => {\r\n if (\r\n project.ProductType == ProductTypeEnum.Development &&\r\n project.DealID == null &&\r\n project.CaseID != null\r\n ) {\r\n this.setAssignedLender(project.CaseID, true);\r\n } else {\r\n this.setAssignedLender(project.DealID);\r\n }\r\n });\r\n }\r\n this.isDevFinanceProjectsLoading = false;\r\n }\r\n })\r\n .then(() => {\r\n this.getTotalUnreadMessagesPerAppraisal();\r\n })\r\n .catch((error) => {\r\n this.projects = [];\r\n this.isDevFinanceProjectsLoading = false;\r\n });\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.BridgingFinance) {\r\n this.isBridgingPreConProjectsLoading = true;\r\n\r\n this.$CaseSummaryService\r\n .getBridgingCasesForUser(\r\n userName,\r\n this.clientCaseNameFilter,\r\n this.caseStatusFilter,\r\n this.dipStatusFilter,\r\n count,\r\n )\r\n .then((results) => {\r\n if (this.selectedNavMenu == this.NavMenuEnum.BridgingFinance) {\r\n this.projects = results;\r\n if (this.isLender) {\r\n this.projects.forEach((project) => {\r\n this.setAssignedLender(project.DealID);\r\n });\r\n }\r\n this.isBridgingPreConProjectsLoading = false;\r\n }\r\n })\r\n .then(() => {\r\n this.getTotalUnreadMessagesPerAppraisal();\r\n })\r\n .catch((error) => {\r\n this.projects = [];\r\n this.isBridgingPreConProjectsLoading = false;\r\n });\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.CommercialMortgages) {\r\n this.isCommercialProjectsLoading = true;\r\n\r\n this.$CaseSummaryService\r\n .getCommercialCasesForUser(\r\n userName,\r\n this.clientCaseNameFilter,\r\n this.caseStatusFilter,\r\n this.dipStatusFilter,\r\n count,\r\n )\r\n .then((results) => {\r\n if (this.selectedNavMenu == this.NavMenuEnum.CommercialMortgages) {\r\n this.projects = results;\r\n if (this.isLender) {\r\n this.projects.forEach((project) => {\r\n this.setAssignedLender(project.DealID);\r\n });\r\n }\r\n this.isCommercialProjectsLoading = false;\r\n }\r\n })\r\n .then(() => {\r\n this.getTotalUnreadMessagesPerAppraisal();\r\n })\r\n .catch((error) => {\r\n this.projects = [];\r\n this.isCommercialProjectsLoading = false;\r\n });\r\n } else {\r\n this.isAllProjectsLoading = true;\r\n\r\n this.$CaseSummaryService\r\n .getAllCasesForUser(\r\n userName,\r\n this.clientCaseNameFilter,\r\n this.caseStatusFilter,\r\n this.dipStatusFilter,\r\n count,\r\n )\r\n .then((results) => {\r\n if (this.selectedNavMenu == this.NavMenuEnum.Home) {\r\n this.projects = results;\r\n if (this.isLender) {\r\n this.projects.forEach((project) => {\r\n if (\r\n project.ProductType == ProductTypeEnum.Development &&\r\n project.DealID == null &&\r\n project.CaseID != null\r\n ) {\r\n this.setAssignedLender(project.CaseID, true);\r\n } else {\r\n this.setAssignedLender(project.DealID);\r\n }\r\n });\r\n }\r\n this.isAllProjectsLoading = false;\r\n }\r\n })\r\n .then(() => {\r\n this.getTotalUnreadMessagesPerAppraisal();\r\n })\r\n .catch((error) => {\r\n this.projects = [];\r\n this.isAllProjectsLoading = false;\r\n });\r\n }\r\n }\r\n\r\n //toggleCardTableView() {\r\n // // hide any open menus\r\n // this.closeTileMenu();\r\n\r\n // this.isCardView = !this.isCardView;\r\n //}\r\n\r\n getInvitedUsers() {\r\n this.inviteService\r\n .getInvitedBorrowers(this.currentUser.Id)\r\n .then((result) => {\r\n this.invitedUsers = result;\r\n });\r\n }\r\n\r\n getIntroducedBorrowers() {\r\n this.$user.getintroducees(this.currentUser.Id).then((introducedUsers) => {\r\n this.introducedUsers = introducedUsers;\r\n });\r\n }\r\n\r\n getIntroducedSearches(registeredIntroducerId: number) {\r\n if (!registeredIntroducerId) {\r\n return;\r\n }\r\n this.$DevelopmentInputWithNoLoginService\r\n .fetchByIntroducerId(registeredIntroducerId)\r\n .then((results) => {\r\n this.unsavedIntroducedSearches = results.filter(\r\n (r) => r.IntroducedSearchStatus < 2,\r\n );\r\n let savedIntroducedSearchesIdentified = results.filter(\r\n (r) => r.IntroducedSearchStatus >= 2,\r\n );\r\n if (savedIntroducedSearchesIdentified.length > 0) {\r\n this.$DevelopmentInputService\r\n .fetchByIntroducerId(registeredIntroducerId)\r\n .then((devInputResults) => {\r\n this.savedIntroducedSearches = devInputResults;\r\n });\r\n }\r\n\r\n this.getIntroducedBorrowers();\r\n });\r\n }\r\n\r\n filterProjectsAndSearches() {\r\n if (this.clientCaseNameFilter != null)\r\n sessionStorage.setItem(\"clientCaseNameFilter\", this.clientCaseNameFilter);\r\n if (this.statusFilter != null)\r\n sessionStorage.setItem(\"statusFilter\", this.statusFilter.toString());\r\n\r\n //TODO - what is this code doing?!\r\n if (this.selecteduserName) {\r\n this.selecteduserName = this.selecteduserName; // this is baffling!\r\n } else if ((this.$rootScope as any).clientUsernameBeingViewed) {\r\n this.selecteduserName = (\r\n this.$rootScope as any\r\n ).clientUsernameBeingViewed;\r\n } else {\r\n this.selecteduserName = this.currentUser.UserName;\r\n }\r\n\r\n if (this.selecteduserName !== this.currentUser.UserName) {\r\n this.$user.searchByEmail(this.selecteduserName).then((users) => {\r\n this.selectedUser = users[0];\r\n });\r\n }\r\n // end of todo\r\n\r\n this.mapFilterStatus();\r\n\r\n if (this.selectedDashboardType == this.DashboardTypeEnum.Home) {\r\n this.getProjectsAndSearches();\r\n } else if (this.selectedDashboardType == this.DashboardTypeEnum.Searches) {\r\n this.showDevFinanceSearchDashboard();\r\n } else if (this.selectedDashboardType == this.DashboardTypeEnum.Projects) {\r\n this.showProjectDashboard();\r\n }\r\n }\r\n\r\n /**Map the combined status filter dropdown to the correct enum filter (case/caselender) */\r\n mapFilterStatus() {\r\n if (this.statusFilter == undefined || isNaN(this.statusFilter)) {\r\n this.caseStatusFilter = null;\r\n this.dipStatusFilter = null;\r\n return;\r\n }\r\n\r\n if (this.isLender) {\r\n this.caseStatusFilter = null;\r\n this.dipStatusFilter = this.statusFilter;\r\n } else {\r\n switch (this.statusFilter) {\r\n case 1:\r\n this.caseStatusFilter = CaseStatusEnum.Search;\r\n this.dipStatusFilter = null;\r\n break;\r\n case 2:\r\n this.caseStatusFilter = CaseStatusEnum.NewCase;\r\n this.dipStatusFilter = null;\r\n break;\r\n case 3:\r\n this.caseStatusFilter = CaseStatusEnum.SubmittedToLendersForHoT;\r\n this.dipStatusFilter = null;\r\n break;\r\n case 4:\r\n this.caseStatusFilter = null;\r\n this.dipStatusFilter = CaseLenderStateEnum.Offered;\r\n break;\r\n case 5:\r\n this.caseStatusFilter = null;\r\n this.dipStatusFilter = CaseLenderStateEnum.Rejected;\r\n break;\r\n case 6:\r\n this.caseStatusFilter = null;\r\n this.dipStatusFilter = CaseLenderStateEnum.Withdrawn;\r\n break;\r\n case 7:\r\n this.caseStatusFilter = CaseStatusEnum.Applied;\r\n this.dipStatusFilter = null;\r\n break;\r\n case 8:\r\n this.caseStatusFilter = CaseStatusEnum.ReadyToReSubmit;\r\n this.dipStatusFilter = null;\r\n break;\r\n case 9:\r\n this.caseStatusFilter = CaseStatusEnum.SentToPackager;\r\n this.dipStatusFilter = null;\r\n break;\r\n case 0:\r\n default:\r\n this.caseStatusFilter = null;\r\n this.dipStatusFilter = null;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n getCaseStatusText(status: CaseStatusEnum): string {\r\n var displayText = \"\";\r\n\r\n switch (status) {\r\n case CaseStatusEnum.NewCase:\r\n displayText = \"CASE IN PROGRESS\";\r\n break;\r\n case CaseStatusEnum.UnderReview:\r\n displayText = \"UNDER ADMIN REVIEW\";\r\n break;\r\n case CaseStatusEnum.ReadyToSubmit:\r\n displayText = \"READY TO SUBMIT TO LENDERS\";\r\n break;\r\n case CaseStatusEnum.SubmittedToLendersForHoT:\r\n displayText = \"SUBMITTED TO LENDERS FOR DIP\";\r\n break;\r\n case CaseStatusEnum.Applied:\r\n displayText = \"APPLIED TO LENDER\";\r\n break;\r\n case CaseStatusEnum.Completed:\r\n displayText = \"COMPLETE\";\r\n break;\r\n case CaseStatusEnum.SubmittedToLendersPendingReview:\r\n displayText = \"SUBMITTED TO LENDERS PENDING REVIEW\";\r\n break;\r\n case CaseStatusEnum.ReadyToReSubmit:\r\n displayText = \"READY TO BE RE-SUBMITTED TO LENDERS FOR DIP\";\r\n break;\r\n case CaseStatusEnum.SentToPackager:\r\n displayText = this.currentUser == null ? \"\" : this.currentUser.IsConnectUser ? \"SENT BY AR\" : \"SENT TO PACKAGER\";\r\n break;\r\n default:\r\n case CaseStatusEnum.NewCase:\r\n displayText = \"\";\r\n break;\r\n }\r\n\r\n return displayText;\r\n }\r\n\r\n nFormatter(num: number, decimalPlaces: number) {\r\n const lookup = [\r\n { value: 1, symbol: \"\" },\r\n { value: 1e3, symbol: \"k\" },\r\n { value: 1e6, symbol: \"M\" },\r\n { value: 1e9, symbol: \"G\" },\r\n { value: 1e12, symbol: \"T\" },\r\n { value: 1e15, symbol: \"P\" },\r\n { value: 1e18, symbol: \"E\" },\r\n ];\r\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\r\n var item = lookup\r\n .slice()\r\n .reverse()\r\n .find(function (item) {\r\n return num >= item.value;\r\n });\r\n return item\r\n ? (num / item.value).toFixed(decimalPlaces).replace(rx, \"$1\") +\r\n item.symbol\r\n : \"0\";\r\n }\r\n\r\n isDateToday(date: Date) {\r\n if (date) {\r\n const today = new Date();\r\n\r\n if (\r\n today.getFullYear() === date.getFullYear() &&\r\n today.getMonth() === date.getMonth() &&\r\n today.getDate() === date.getDate()\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isDateYesterday(date: Date) {\r\n if (date) {\r\n var yesterday = new Date();\r\n yesterday.setDate(yesterday.getDate() - 1);\r\n\r\n if (\r\n yesterday.getFullYear() === date.getFullYear() &&\r\n yesterday.getMonth() === date.getMonth() &&\r\n yesterday.getDate() === date.getDate()\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getLastUpdated(date: Date): string {\r\n var displayValue: string;\r\n\r\n if (date) {\r\n if (this.isDateToday(date)) {\r\n displayValue = \"Today\";\r\n } else if (this.isDateYesterday(date)) {\r\n displayValue = \"Yesterday\";\r\n } else {\r\n displayValue = date.toLocaleDateString(\"en-GB\", {\r\n day: \"numeric\",\r\n month: \"short\",\r\n year: \"numeric\",\r\n });\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n goToSearchResults(caseSummary: CaseSummaryDTO) {\r\n this.sharedDataService.cleanLenderReferralSessionStorage();\r\n if (caseSummary.ProductType != ProductTypeEnum.Development) {\r\n if (this.isSearchClickable(caseSummary.isOwner)) {\r\n if (\r\n caseSummary.ProductType == ProductTypeEnum.CommercialInvestment ||\r\n caseSummary.ProductType == ProductTypeEnum.CommercialOwnerOccupied\r\n ) {\r\n this.$location.path(\"/commercialresults/\" + caseSummary.DealID);\r\n } else {\r\n this.$location.path(\"/bridgingresults/\" + caseSummary.DealID);\r\n }\r\n }\r\n } else {\r\n if (this.isSearchClickable(caseSummary.isOwner)) {\r\n if (caseSummary.UniqueRef != null) {\r\n this.$DevelopmentInputWithNoLoginService\r\n .isResultActive(caseSummary.UniqueRef)\r\n .then((results) => {\r\n if (!results) {\r\n this.displayMsg = `Changes have been made to this search by your client, your user dashboard will now refresh`;\r\n this.showShareResults = 5;\r\n } else {\r\n this.$location.path(\"/referredSearch/\" + caseSummary.UniqueRef);\r\n }\r\n });\r\n } else if (caseSummary.DevelopmentInputID) {\r\n this.$location.path(\"/results/\" + caseSummary.DevelopmentInputID);\r\n } else if (caseSummary.DealID) {\r\n this.$location.path(\"/devfinanceresults/\" + caseSummary.DealID);\r\n }\r\n }\r\n }\r\n }\r\n\r\n goToProject(project: CaseSummaryDTO) {\r\n this.sharedDataService.cleanLenderReferralSessionStorage();\r\n if (\r\n (this.roleService.IsLender && this.showLenderTerms) ||\r\n !this.roleService.IsLender\r\n ) {\r\n if (this.roleService.IsLender && this.showLenderTerms) {\r\n project = { ...this.lenderSelectedProject };\r\n }\r\n\r\n if (this.roleService.IsLender && this.goToDealForumClicked) {\r\n this.goToDealForum(project);\r\n } else {\r\n if (this.isProjectClickable(project.isInvitedToCase)) {\r\n if (project.isInvitedAndHasReadonlyAccess) {\r\n (this.$rootScope as any).isInvitedAndHasReadonlyAccess = true;\r\n this.$rootScope.$broadcast(\"invitedStatusChange\");\r\n }\r\n if (\r\n project.ProductType == ProductTypeEnum.BridgingPreconstruction ||\r\n project.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n project.ProductType == ProductTypeEnum.BridgingDeveloperExit ||\r\n project.ProductType == ProductTypeEnum.BridgingRefurb\r\n ) {\r\n this.$location.path(\"/bridgingcasedashboard/\" + project.DealID);\r\n } else if (\r\n project.ProductType == ProductTypeEnum.CommercialInvestment ||\r\n project.ProductType == ProductTypeEnum.CommercialOwnerOccupied\r\n ) {\r\n this.$location.path(\"/commercialcasedashboard/\" + project.DealID);\r\n } else if (project.ProductType == ProductTypeEnum.Development) {\r\n if (project.DealID) {\r\n this.$location.path(\"/devfinancecasedashboard/\" + project.DealID);\r\n } else {\r\n this.$location.path(\"/casedashboard/\" + project.CaseID);\r\n }\r\n }\r\n }\r\n }\r\n } else if (this.roleService.IsLender && !this.showLenderTerms) {\r\n this.showLenderTerms = true;\r\n this.lenderSelectedProject = { ...project };\r\n }\r\n }\r\n\r\n goToNewSearch() {\r\n this.sharedDataService.cleanLenderReferralSessionStorage();\r\n // If the current user is a broker and doesn't have a subscription then don't allow them to create a new search\r\n if (this.isBroker && !this.currentUser.HasActiveSubscription) {\r\n return;\r\n }\r\n\r\n if (!this.isPageLoading) {\r\n (this.$rootScope as any).loanCriteria = null;\r\n\r\n if (\r\n this.isAdmin ||\r\n (this.currentUser && this.currentUser.SubscriptionStatus) ||\r\n this.isLender\r\n ) {\r\n this.authService.setHasValidStatustoShowShareSearchModal(\r\n true,\r\n );\r\n }\r\n\r\n if (\r\n this.selectedNavMenu == this.NavMenuEnum.DevelopmentFinance &&\r\n !this.hideDevelopmentFinanceSearch\r\n ) {\r\n this.goToNewDevFinanceSearch();\r\n }\r\n\r\n if (\r\n this.selectedNavMenu == this.NavMenuEnum.BridgingFinance &&\r\n !this.hideBridgingSearch\r\n ) {\r\n this.goToNewBridgingFinanceSearch();\r\n }\r\n\r\n if (\r\n this.selectedNavMenu == this.NavMenuEnum.CommercialMortgages &&\r\n !this.hideCommercialSearch\r\n ) {\r\n this.goToNewCommercialSearch();\r\n }\r\n\r\n if (this.selectedNavMenu == this.NavMenuEnum.Home || this.selectedNavMenu == this.NavMenuEnum.EquityAndMezz) {\r\n this.$location.path(\"/allloans\");\r\n }\r\n }\r\n }\r\n\r\n goToNewProject() {\r\n this.isPageLoading = true;\r\n this.roleService.isBroker().then((isBroker: boolean) => {\r\n this.$CaseService\r\n .newBlankCase(this.currentUser, !isBroker)\r\n .then((newBlankCaseDto) => {\r\n if (newBlankCaseDto && newBlankCaseDto.NewCaseId) {\r\n this.$location.path(\"/casedashboard/\" + newBlankCaseDto.NewCaseId);\r\n }\r\n\r\n this.isPageLoading = false;\r\n });\r\n });\r\n }\r\n\r\n goToNewBridgingSearch() {\r\n if (this.hasBridging) {\r\n this.$location.path(\"/bridgingcriteria/\");\r\n }\r\n }\r\n\r\n goToNewCommercialSearch() {\r\n if (this.hasCommercial) {\r\n this.$location.path(\"/commercialcriteria\");\r\n }\r\n }\r\n\r\n goToAllLoanPage() {\r\n this.$location.path(\"/allloans\");\r\n }\r\n\r\n goToPurchaseOrRefinanceSearch() {\r\n if (this.hasBridging) {\r\n this.$location.path(\"/purchaserefinancecriteria/\");\r\n }\r\n }\r\n\r\n goToNewDevFinanceSearch() {\r\n this.$location.path(\"/devfinancecriteria\");\r\n }\r\n\r\n goToNewBridgingFinanceSearch() {\r\n this.$location.path(\"/bridgingcriteria\");\r\n }\r\n\r\n deleteSearchConfirmation(dataItem) {\r\n this.closeTileMenu();\r\n event.stopPropagation();\r\n this.actionItem = dataItem;\r\n\r\n if (this.actionItem.isDevInputWithNoLogin) {\r\n this.$DevelopmentInputWithNoLoginService\r\n .isResultActive(this.actionItem.UniqueRef)\r\n .then((results) => {\r\n if (!results) {\r\n this.displayMsg = `Changes have been made to this search by your client, your user dashboard will now refresh`;\r\n this.showShareResults = 5;\r\n } else {\r\n this.confirmSearchToDelete = true;\r\n }\r\n });\r\n } else {\r\n this.confirmSearchToDelete = true;\r\n }\r\n }\r\n\r\n showAssignBrokerSearchModal(dataItem) {\r\n this.closeTileMenu();\r\n event.stopPropagation();\r\n this.actionItem = dataItem;\r\n this.confirmAssignBrokerSearch = true;\r\n this.selectedBroker = this.licensedOrganisationBrokers.find(\r\n (b) => b.Id == (this.currentUser?.IsConnectUser && this.actionItem.IsReferredToConnect ? this.actionItem.ConnectUserId : this.actionItem.BrokerUserId),\r\n );\r\n }\r\n\r\n showAssignLenderSearchModal(dataItem) {\r\n this.closeTileMenu();\r\n event.stopPropagation();\r\n this.actionItem = dataItem;\r\n this.getLenderUsersList();\r\n if (\r\n this.actionItem.ProductType == ProductTypeEnum.Development &&\r\n this.actionItem.DealID == null &&\r\n this.actionItem.CaseID != null\r\n ) {\r\n this.caseLenderService\r\n .fetchCaseLender(this.actionItem.CaseID)\r\n .then((response) => {\r\n return this.userService.getUserByUserId(\r\n response.AssignedLenderUserId,\r\n );\r\n })\r\n .then((response) => {\r\n if (response != null) {\r\n this.selectedLender = response;\r\n }\r\n })\r\n .finally(() => {\r\n this.confirmAssignLenderSearch = true;\r\n });\r\n } else {\r\n this.dealLenderService\r\n .fetchDealLender(this.actionItem.DealID)\r\n .then((response) => {\r\n return this.userService.getUserByUserId(\r\n response.AssignedLenderUserId,\r\n );\r\n })\r\n .then((response) => {\r\n if (response != null) {\r\n this.selectedLender = response;\r\n }\r\n })\r\n .finally(() => {\r\n this.confirmAssignLenderSearch = true;\r\n });\r\n }\r\n }\r\n\r\n assignBrokerToSearch(assignBrokerId) {\r\n this.confirmAssignBrokerSearch = false;\r\n this.isPageLoading = true;\r\n\r\n if (\r\n this.actionItem.ProductType == ProductTypeEnum.Development &&\r\n this.actionItem.DealID == null\r\n ) {\r\n if (this.actionItem.CaseID) {\r\n this.$CaseService\r\n .changeBrokerUser(this.actionItem.CaseID, assignBrokerId)\r\n .then((success) => {\r\n if (success) {\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n } else {\r\n this.displayMsg =\r\n \"We were unable to assign the broker to the case at this time, please try again later.\";\r\n this.showShareResults = 4;\r\n }\r\n })\r\n .finally(() => {\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n this.selectedBroker = null;\r\n });\r\n } else {\r\n this.$DevelopmentInputService\r\n .assignBrokerToSearch(\r\n this.actionItem.DevelopmentInputID,\r\n assignBrokerId,\r\n this.actionItem.isDevInputWithNoLogin,\r\n )\r\n .then((success) => {\r\n if (success) {\r\n this.getSearches(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n } else {\r\n this.displayMsg =\r\n \"We were unable to assign the broker to the search at this time, please try again later.\";\r\n this.showShareResults = 4;\r\n }\r\n })\r\n .finally(() => {\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n this.selectedBroker = null;\r\n });\r\n }\r\n } else {\r\n this.dealService\r\n .assignBrokerToDeal(this.actionItem.DealID, assignBrokerId)\r\n .then((success) => {\r\n if (success) {\r\n if (this.actionItem.CaseStatus == CaseStatusEnum.Search) {\r\n this.getSearches(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n } else {\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n }\r\n } else {\r\n this.displayMsg =\r\n \"There was a problem assigning the broker, please try later.\";\r\n this.showShareResults = 4;\r\n }\r\n })\r\n .finally(() => {\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n this.selectedBroker = null;\r\n });\r\n }\r\n }\r\n\r\n assignLenderToSearch(assignLenderId) {\r\n this.confirmAssignLenderSearch = false;\r\n this.isPageLoading = true;\r\n\r\n if (\r\n this.actionItem.ProductType == ProductTypeEnum.Development &&\r\n this.actionItem.DealID == null &&\r\n this.actionItem.CaseID != null\r\n ) {\r\n this.$CaseService\r\n .assignLenderToCase(\r\n this.actionItem.CaseID,\r\n this.currentUser.LenderId,\r\n assignLenderId,\r\n )\r\n .then((success) => {\r\n if (success) {\r\n if (this.actionItem.CaseStatus == CaseStatusEnum.Search) {\r\n this.getSearches(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n } else {\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n }\r\n this.setAssignedLender(this.actionItem.CaseID);\r\n } else {\r\n this.displayMsg =\r\n \"There was a problem assigning the lender, please try later.\";\r\n this.showShareResults = 4;\r\n }\r\n })\r\n .finally(() => {\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n this.selectedLender = null;\r\n this.lenderList = null;\r\n });\r\n } else {\r\n this.dealService\r\n .assignLenderToDeal(\r\n this.actionItem.DealID,\r\n this.currentUser.LenderId,\r\n assignLenderId,\r\n )\r\n .then((success) => {\r\n if (success) {\r\n if (this.actionItem.CaseStatus == CaseStatusEnum.Search) {\r\n this.getSearches(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n } else {\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n }\r\n this.setAssignedLender(this.actionItem.DealID);\r\n } else {\r\n this.displayMsg =\r\n \"There was a problem assigning the lender, please try later.\";\r\n this.showShareResults = 4;\r\n }\r\n })\r\n .finally(() => {\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n this.selectedLender = null;\r\n this.lenderList = null;\r\n });\r\n }\r\n }\r\n\r\n setAssignedLender(caseId: number, oldDevFinance: boolean = false) {\r\n if (oldDevFinance) {\r\n this.caseLenderService\r\n .fetchCaseLender(caseId)\r\n .then((response) => {\r\n return this.userService.getUserByUserId(\r\n response.AssignedLenderUserId,\r\n );\r\n })\r\n .then((response) => {\r\n if (response != null) {\r\n this.assignedLenders[caseId] = response.FullName;\r\n } else {\r\n this.assignedLenders[caseId] = null;\r\n }\r\n })\r\n .catch(() => {\r\n this.assignedLenders[caseId] = null;\r\n });\r\n } else {\r\n this.dealLenderService\r\n .fetchDealLender(caseId)\r\n .then((response) => {\r\n return this.userService.getUserByUserId(\r\n response.AssignedLenderUserId,\r\n );\r\n })\r\n .then((response) => {\r\n if (response != null) {\r\n this.assignedLenders[caseId] = response.FullName;\r\n } else {\r\n this.assignedLenders[caseId] = null;\r\n }\r\n })\r\n .catch(() => {\r\n this.assignedLenders[caseId] = null;\r\n });\r\n }\r\n }\r\n\r\n checkAssignedLender(selectedCase: CaseSummaryDTO) {\r\n if (\r\n selectedCase.ProductType == ProductTypeEnum.Development &&\r\n selectedCase.DealID == null &&\r\n selectedCase.CaseID != null\r\n ) {\r\n return this.assignedLenders[selectedCase.CaseID] != null;\r\n } else {\r\n return this.assignedLenders[selectedCase.DealID] != null;\r\n }\r\n }\r\n\r\n getLenderUsersList() {\r\n this.lenderList = [];\r\n this.lenderUsers?.forEach((user) => {\r\n if (user.IsLenderAdmin) {\r\n this.lenderList.push(user);\r\n } else {\r\n if (\r\n (user.LenderProductTypes & LenderProductTypeEnum.All) ==\r\n LenderProductTypeEnum.All\r\n ) {\r\n this.lenderList.push(user);\r\n }\r\n\r\n if (\r\n (user.LenderProductTypes &\r\n LenderProductTypeEnum.DevelopmentFinance) ==\r\n LenderProductTypeEnum.DevelopmentFinance &&\r\n this.actionItem.ProductType == ProductTypeEnum.Development\r\n ) {\r\n this.lenderList.push(user);\r\n }\r\n\r\n if (\r\n (user.LenderProductTypes & LenderProductTypeEnum.BridgingFinance) ==\r\n LenderProductTypeEnum.BridgingFinance &&\r\n (this.actionItem.ProductType == ProductTypeEnum.Bridging ||\r\n this.actionItem.ProductType ==\r\n ProductTypeEnum.BridgingPreconstruction ||\r\n this.actionItem.ProductType ==\r\n ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n this.actionItem.ProductType == ProductTypeEnum.BridgingRefurb ||\r\n this.actionItem.ProductType ==\r\n ProductTypeEnum.BridgingDeveloperExit)\r\n ) {\r\n this.lenderList.push(user);\r\n }\r\n\r\n if (\r\n (user.LenderProductTypes &\r\n LenderProductTypeEnum.CommercialMortgages) ==\r\n LenderProductTypeEnum.CommercialMortgages &&\r\n (this.actionItem.ProductType == ProductTypeEnum.CommercialAll ||\r\n this.actionItem.ProductType ==\r\n ProductTypeEnum.CommercialInvestment ||\r\n this.actionItem.ProductType ==\r\n ProductTypeEnum.CommercialOwnerOccupied)\r\n ) {\r\n this.lenderList.push(user);\r\n }\r\n }\r\n });\r\n }\r\n\r\n deleteSearch() {\r\n this.confirmSearchToDelete = false;\r\n this.isPageLoading = true;\r\n if (this.actionItem.isDevInputWithNoLogin) {\r\n //Introducer: Referred search, not claimed by introducee yet\r\n this.$DevelopmentInputWithNoLoginService\r\n .markasdeleted(this.actionItem.DevelopmentInputID)\r\n .then((success) => {\r\n this.getSearches(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n })\r\n .finally(() => {\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n });\r\n } else {\r\n if (\r\n this.actionItem.ProductType == ProductTypeEnum.Development &&\r\n this.actionItem.DevelopmentInputID\r\n ) {\r\n //Introducer: Referred search, claimed by introducee\r\n this.$DevelopmentInputService\r\n .markasdeleted(this.actionItem.DevelopmentInputID)\r\n .then((success) => {\r\n this.getSearches(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n })\r\n .finally(() => {\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n });\r\n } else {\r\n this.dealService\r\n .markasdeleted(this.actionItem.DealID)\r\n .then((success) => {\r\n this.getSearches(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n })\r\n .finally(() => {\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n });\r\n }\r\n }\r\n }\r\n\r\n cancelCopyProject() {\r\n this.confirmCopyProjectName = false;\r\n }\r\n\r\n copyProjectConfirmation(dataItem) {\r\n this.closeTileMenu();\r\n event.stopPropagation();\r\n this.actionItem = dataItem;\r\n\r\n this.newProjectName = this.actionItem.CaseName;\r\n\r\n // show popup input for new name\r\n this.confirmCopyProjectName = true;\r\n }\r\n\r\n copyProject() {\r\n this.confirmCopyProjectName = false;\r\n this.isPageLoading = true;\r\n\r\n if (\r\n this.actionItem.ProductType == ProductTypeEnum.Development &&\r\n this.actionItem.DevelopmentInputID\r\n ) {\r\n this.$DevelopmentInputService\r\n .copyCase(this.actionItem.DevelopmentInputID, this.newProjectName)\r\n .then((response) => {\r\n let newCaseId = response;\r\n if (newCaseId) {\r\n this.$applicantservice.copyShareholder(\r\n this.actionItem.CaseID,\r\n newCaseId,\r\n );\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n }\r\n })\r\n .finally(() => {\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n });\r\n } else {\r\n this.dealService\r\n .copyCase(\r\n this.actionItem.DealID,\r\n this.newProjectName,\r\n this.actionItem.ProductType,\r\n )\r\n .then((response) => {\r\n let newCaseId = response;\r\n if (newCaseId) {\r\n //TODO: On monday make getprojects use deal model\r\n this.getDealproject(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n }\r\n })\r\n .finally(() => {\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n });\r\n }\r\n }\r\n\r\n deleteProjectConfirmation(dataItem) {\r\n this.closeTileMenu();\r\n event.stopPropagation();\r\n this.actionItem = dataItem;\r\n\r\n this.confirmProjectToDelete = true;\r\n }\r\n\r\n deleteProject() {\r\n this.confirmProjectToDelete = false;\r\n\r\n if (\r\n this.actionItem.ProductType == ProductTypeEnum.Development &&\r\n this.actionItem.DevelopmentInputID\r\n ) {\r\n //Full case and Saved search\r\n this.$DevelopmentInputService\r\n .markasdeleted(this.actionItem.DevelopmentInputID)\r\n .then((success) => {\r\n if (this.actionItem.CaseID) {\r\n this.$CaseService\r\n .markasdeleted(this.actionItem.CaseID)\r\n .then((success) => { });\r\n }\r\n })\r\n .finally(() => {\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n });\r\n } else {\r\n this.dealService\r\n .markasdeleted(this.actionItem.DealID)\r\n .then((success) => { })\r\n .finally(() => {\r\n this.getProjects(\r\n this.selectedDashboardType == this.DashboardTypeEnum.Home\r\n ? this.homeScreenCount\r\n : 0,\r\n );\r\n this.actionItem = null;\r\n this.isPageLoading = false;\r\n });\r\n }\r\n }\r\n\r\n // START OF INTRODUCTIONS CODE - TO BE REVIEWED WHEN UI IS RE-WORKED\r\n\r\n introduceClient() {\r\n this.isProcessingSend = true;\r\n this.invite = {\r\n FirstName: this.clientFirstName,\r\n Email: this.clientEmail,\r\n LastName: this.clientSurname,\r\n InviteerUserId: this.currentUser.Id,\r\n UserId: null,\r\n PhoneNumber: this.clientPhoneNumber,\r\n Status: StatusEnum.Invited,\r\n } as InviteDTO;\r\n\r\n this.inviteService.addUpdate(this.invite).then((response) => {\r\n this.invitedUsers.push(response);\r\n\r\n this.$IntroducerService\r\n .introduceClient(\r\n response.FirstName,\r\n response.Email,\r\n response.LastName,\r\n response.PhoneNumber,\r\n response.guid,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 2;\r\n this.isPageLoading = false;\r\n this.isProcessingSend = false;\r\n })\r\n .finally(() => {\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n });\r\n });\r\n }\r\n\r\n userLookup(userSearchTerm: string) {\r\n this.isPageLoading = true;\r\n this.$user\r\n .searchByEmail(userSearchTerm)\r\n .then((response) => {\r\n if (this.isBroker && this.currentUser.IsOrganisationAdmin) {\r\n this.userSearchResults = response.filter(\r\n (x) =>\r\n x.OrganisationReferralId == this.currentUser.OrganisationId ||\r\n x.OrganisationId == this.currentUser.OrganisationId,\r\n );\r\n } else if (this.isBroker) {\r\n this.userSearchResults = response.filter(\r\n (x) =>\r\n x.OrganisationReferralId == this.currentUser.OrganisationId &&\r\n !x.OrganisationId &&\r\n !x.IsOrganisationAdmin,\r\n );\r\n } else {\r\n this.userSearchResults = response;\r\n }\r\n })\r\n .finally(() => {\r\n this.isPageLoading = false;\r\n });\r\n }\r\n\r\n exitClientView() {\r\n this.selectedClientName = null;\r\n this.showHomeDashboard();\r\n }\r\n\r\n deleteUnsavedIntroducedSearch(loanCriteriaId: number, index: number) {\r\n //Introducer: Referred search, not claimed by introducee yet\r\n this.$DevelopmentInputWithNoLoginService\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n this.unsavedIntroducedSearches.splice(index, 1);\r\n });\r\n }\r\n\r\n deleteSavedIntroducedSearch(loanCriteriaId: number, index: number) {\r\n //Introducer: Referred search, claimed by introducee\r\n this.$DevelopmentInputService\r\n .markasdeleted(loanCriteriaId)\r\n .then((success) => {\r\n this.savedIntroducedSearches.splice(index, 1);\r\n });\r\n }\r\n\r\n copyLinkToClipboard() {\r\n this.$IntroducerService\r\n .copyLinkToClipboard(this.currentUser.Id)\r\n .then((response) => {\r\n //this.link = response.toString();\r\n navigator.clipboard.writeText(response.toString());\r\n this.introduceClientModal = 7;\r\n });\r\n }\r\n\r\n sendLinkToUser() {\r\n this.$IntroducerService\r\n .sendLinkToUser(\r\n this.currentUser.FirstName,\r\n this.currentUser.Email,\r\n this.currentUser.Id,\r\n )\r\n .then((success) => {\r\n this.introduceClientModal = 6;\r\n });\r\n }\r\n\r\n registerIntroducer() {\r\n this.$location.path(\"/registerintroducer\");\r\n }\r\n\r\n inviteBorrower() {\r\n this.isProcessingSend = true;\r\n this.invite = {\r\n FirstName: this.clientFirstName,\r\n Email: this.clientEmail,\r\n LastName: this.clientSurname,\r\n InviteerUserId: this.currentUser.Id,\r\n UserId: null,\r\n PhoneNumber: this.clientPhoneNumber,\r\n Status: StatusEnum.Invited,\r\n } as InviteDTO;\r\n\r\n this.inviteService.addUpdate(this.invite).then((response) => {\r\n this.invitedUsers.push(response);\r\n\r\n this.$user.GetUserOrganisation().then((result) => {\r\n if (this.invite && result) {\r\n this.organisationService\r\n .inviteBorrowers(this.invite, result.UniqueRef)\r\n .then((success) => {\r\n this.introduceClientModal = 9;\r\n this.dataLoading = false;\r\n })\r\n .finally(() => {\r\n this.introduceClientModal = 9;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n this.isProcessingSend = false;\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n // END OF INTRODUCTIONS CODE - ALL INTRODUCTIONS CODE TO BE REVIEWED WHEN UI IS RE-WORKED\r\n\r\n openShareSearchModal(item: CaseSummaryDTO) {\r\n event.stopPropagation();\r\n this.closeTileMenu();\r\n\r\n // Only get the broker's/admin's users if we haven't already got it\r\n if (!this.existingUsers) {\r\n this.roleService\r\n .isBrokerOrABove()\r\n .then((isBrokerOrAbove: boolean) => {\r\n if (isBrokerOrAbove) {\r\n this.getUserSummariesForBrokerOrAdmin();\r\n }\r\n });\r\n }\r\n\r\n if (\r\n item.ProductType == ProductTypeEnum.Development &&\r\n item.DevelopmentInputID\r\n ) {\r\n this.isBridging = false;\r\n if (item.isDevInputWithNoLogin) {\r\n /** This will check if the result shared with new user is active */\r\n this.$DevelopmentInputWithNoLoginService\r\n .isResultActive(item.UniqueRef)\r\n .then((results) => {\r\n if (!results) {\r\n this.displayMsg = `Changes have been made to this search by your client, your user dashboard will now refresh`;\r\n this.showShareResults = 5;\r\n } else {\r\n this.$DevelopmentInputWithNoLoginService\r\n .fetch(item.DevelopmentInputID)\r\n .then((response) => {\r\n this.selectedSearch = item;\r\n this.loanCriteria = response;\r\n this.selectedResult = item.DevelopmentInputID;\r\n this.shareSearchModal = 3;\r\n this.newSearch = true;\r\n this.sharedSearch = false;\r\n this.existingborrower = null;\r\n\r\n if (this.loanCriteria.ShowLenderNamesToBorrower == null) {\r\n this.organisationService.getOrganisation().then((org) => {\r\n this.loanCriteria.ShowLenderNamesToBorrower =\r\n org.ShowLenderNames;\r\n });\r\n }\r\n\r\n if (\r\n (this.roleService.isAdminUser || this.isBroker) &&\r\n item.ClientEmail != this.currentUser.UserName\r\n ) {\r\n this.clientFirstName = item.ClientFirstName;\r\n this.clientSurname = item.ClientSurname;\r\n this.clientEmail = item.ClientEmail;\r\n this.sharedSearch = true;\r\n } else {\r\n this.clientFirstName = \"\";\r\n this.clientSurname = \"\";\r\n this.clientEmail = \"\";\r\n this.clientPhoneNumber = \"\";\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n this.$DevelopmentInputService\r\n .fetch(item.DevelopmentInputID)\r\n .then((response) => {\r\n this.selectedSearch = item;\r\n this.loanCriteria = response;\r\n this.selectedResult = item.DevelopmentInputID;\r\n this.shareSearchModal = 3;\r\n this.newSearch = true;\r\n this.sharedSearch = false;\r\n this.existingborrower = null;\r\n\r\n if (this.loanCriteria.ShowLenderNamesToBorrower == null) {\r\n this.organisationService.getOrganisation().then((org) => {\r\n this.loanCriteria.ShowLenderNamesToBorrower =\r\n org.ShowLenderNames;\r\n });\r\n }\r\n\r\n if (\r\n (this.roleService.isAdminUser || this.isBroker) &&\r\n item.ClientEmail != this.currentUser.UserName\r\n ) {\r\n this.clientFirstName = item.ClientFirstName;\r\n this.clientSurname = item.ClientSurname;\r\n this.clientEmail = item.ClientEmail;\r\n this.sharedSearch = true;\r\n } else {\r\n this.clientFirstName = \"\";\r\n this.clientSurname = \"\";\r\n this.clientEmail = \"\";\r\n this.clientPhoneNumber = \"\";\r\n }\r\n });\r\n }\r\n } else {\r\n this.isBridging = true;\r\n this.selectedSearch = item;\r\n this.selectedResult = item.DevelopmentInputID;\r\n this.shareSearchModal = 3;\r\n this.newSearch = true;\r\n this.sharedSearch = false;\r\n this.existingborrower = null;\r\n\r\n this.clientService\r\n .fetchListByDealId(item.DealID)\r\n .then((dealClients: ClientDTO[]) => {\r\n this.shareDealDto = {\r\n DealId: item.DealID,\r\n DealName: item.CaseName,\r\n ShowLenderNamesAndLogos: false,\r\n EmailLinkToClient: false,\r\n AccessLevel: CaseAccessLevelEnum.FullAccess,\r\n IsApplicant: true,\r\n IsPrimary: true,\r\n } as ShareDealDTO;\r\n\r\n if (dealClients && dealClients.length > 0) {\r\n var client = dealClients[0]; // TODO - always want to assume there's one for now until there's a redesign of sharing\r\n\r\n this.shareDealDto.ClientDto = {\r\n FirstName: client.FirstName,\r\n LastName: client.LastName,\r\n Email: client.Email,\r\n PhoneNumber: client.PhoneNumber,\r\n ClientUserId: client.ClientUserId,\r\n } as ClientDTO;\r\n\r\n this.sharedSearch = true;\r\n } else {\r\n this.shareDealDto.ClientDto = {\r\n FirstName: \"\",\r\n LastName: \"\",\r\n Email: \"\",\r\n PhoneNumber: \"\",\r\n } as ClientDTO;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /*\r\n introducerSendResultsToClient(notifyBorrower: boolean = true) {\r\n this.dataLoading = true;\r\n this.$IntroducerService.sendResultsToClient(this.selectedSearch, this.clientFirstName, this.clientSurname, this.clientEmail, notifyBorrower).then((success) => {\r\n this.shareSearchModal = 4;\r\n }).catch(reason => {\r\n this.shareSearchErrorDisplayed = true;\r\n }).finally(() => {\r\n this.dataLoading = false;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.selectedSearch;\r\n });\r\n }*/\r\n\r\n introducerRefreshSearchesAndClients() {\r\n this.getIntroducedSearches(this.currentUser.RegisteredIntroducerId);\r\n this.clientAdminTools = true;\r\n }\r\n\r\n updateIntroducedClientList() {\r\n this.$user.getintroducees(this.currentUser.Id).then((introducedUsers) => {\r\n this.introducedUsers = introducedUsers;\r\n });\r\n }\r\n\r\n closeIntroducerClientModal() {\r\n this.introduceClientModal = null;\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n this.introducerErrorDisplayed = false;\r\n }\r\n\r\n closeSearchSearchModal() {\r\n this.shareSearchModal = null;\r\n this.shareSearchErrorDisplayed = false;\r\n delete this.selectedSearch;\r\n }\r\n\r\n isProjectClickable(isInvitedToCase: boolean) {\r\n // To be able to click on a project you must have one of the following:\r\n // 1. Paid up subcription\r\n // 2. Pre-cancel subscription i.e. it's been cancelled but it is still active until the end of the payment period\r\n // 3. subscription Payment processing i.e. they've signed up but the payment is still being processed e.g. DDs\r\n // 4. be a lender (no license required)\r\n // 5. be an admin (no license required)\r\n // 6. be invited to the case\r\n\r\n if (\r\n this.currentUser.SubscriptionStatus == LicenseMasterStatusEnum.PaidUp ||\r\n this.currentUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PreCancel ||\r\n this.currentUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PaymentProcessing ||\r\n this.roleService.IsLender ||\r\n this.roleService.IsAdminUser ||\r\n isInvitedToCase == true\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isSearchClickable(isOwner: boolean) {\r\n // To be able to click on a project you must have one of the following:\r\n // 1. Paid up subcription\r\n // 2. Pre-cancel subscription i.e. it's been cancelled but it is still active until the end of the payment period\r\n // 3. subscription Payment processing i.e. they've signed up but the payment is still being processed e.g. DDs\r\n // 4. be a lender (no license required)\r\n // 5. be an admin (no license required)\r\n // 6. be an owner and a client user - we're assuming here this will identify an invited user. This may need re-work\r\n\r\n if (\r\n this.currentUser.SubscriptionStatus == LicenseMasterStatusEnum.PaidUp ||\r\n this.currentUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PreCancel ||\r\n this.currentUser.SubscriptionStatus ==\r\n LicenseMasterStatusEnum.PaymentProcessing ||\r\n this.roleService.IsLender ||\r\n this.roleService.IsAdminUser ||\r\n (isOwner == true && this.roleService.IsClient)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n signout() {\r\n this.authService.logout(true);\r\n }\r\n\r\n getStatusTextForLender(\r\n caseLenderState: CaseLenderStateEnum,\r\n IsBidAccepted: boolean,\r\n ): string {\r\n var statusText = this.caseLenderService.getStatusTextForLender(\r\n caseLenderState,\r\n IsBidAccepted,\r\n );\r\n return statusText;\r\n }\r\n\r\n /** closes share pop up*/\r\n cancelNewSearch() {\r\n this.newSearch = false;\r\n this.clearInputFields();\r\n }\r\n\r\n clearInputFields() {\r\n this.clientFirstName = null;\r\n this.clientEmail = null;\r\n this.clientSurname = null;\r\n this.clientPhoneNumber = null;\r\n this.showClientDetails = false;\r\n this.selecteduserName = null;\r\n }\r\n\r\n getUserSummariesForBrokerOrAdmin() {\r\n this.$user\r\n .getUserSummariesForBrokerOrAdmin()\r\n .then((response) => {\r\n this.existingUsers = response;\r\n })\r\n .finally(() => { });\r\n }\r\n\r\n getBrokerBelongToOrganisation(orgId): void {\r\n this.userService\r\n .getAllOrganisationMembers(orgId)\r\n .then((orgBrokers: ApplicationUserDTO[]) => {\r\n this.licensedOrganisationBrokers = orgBrokers.filter(\r\n (x) => x.SubscriptionStatus > 0,\r\n );\r\n });\r\n }\r\n\r\n viewClientsDashboardForNewSearch(userName: string) {\r\n //Look up client's account details\r\n this.$user.searchByEmail(userName).then((users) => {\r\n if (\r\n this.selectedSearch.ProductType == ProductTypeEnum.Development &&\r\n this.selectedSearch.DealID == null\r\n ) {\r\n this.clientFirstName = users[0].FirstName;\r\n this.clientEmail = users[0].Email;\r\n this.clientSurname = users[0].LastName;\r\n this.clientPhoneNumber = users[0].PhoneNumber;\r\n this.clientId = users[0].Id;\r\n this.showClientDetails = true;\r\n } else {\r\n this.shareDealDto.IsApplicant = true;\r\n this.shareDealDto.IsPrimary = true;\r\n this.shareDealDto.ClientDto.FirstName = users[0].FirstName;\r\n this.shareDealDto.ClientDto.Email = users[0].Email;\r\n this.shareDealDto.ClientDto.LastName = users[0].LastName;\r\n this.shareDealDto.ClientDto.PhoneNumber = users[0].PhoneNumber;\r\n this.shareDealDto.ClientDto.ClientUserId = users[0].Id;\r\n this.showClientDetails = true;\r\n }\r\n });\r\n }\r\n\r\n sendResultsToClient(notifyBorrower) {\r\n this.dataLoading = true;\r\n this.newSearch = false;\r\n this.existingborrower = null;\r\n this.showClientDetails = false;\r\n\r\n if (\r\n this.selectedSearch.ProductType == ProductTypeEnum.Development &&\r\n this.selectedSearch.DevelopmentInputID\r\n ) {\r\n this.userService\r\n .getUserDetailsByEmailIfExists(this.clientEmail)\r\n .then((user: ApplicationUserDTO) => {\r\n if (user == null) {\r\n this.loanCriteria.UserId = null;\r\n this.$IntroducerService\r\n .sendResultsToClient(\r\n this.loanCriteria,\r\n this.clientFirstName,\r\n this.clientSurname,\r\n this.clientEmail,\r\n notifyBorrower,\r\n this.clientPhoneNumber,\r\n )\r\n .then((success) => {\r\n this.showShareResults = 2;\r\n });\r\n } else {\r\n this.clientId = user.Id;\r\n this.$DevelopmentInputService\r\n .sendResultsToExistingClient(\r\n this.loanCriteria,\r\n this.clientFirstName,\r\n this.clientSurname,\r\n this.clientEmail,\r\n this.clientId,\r\n notifyBorrower,\r\n this.clientPhoneNumber,\r\n )\r\n .then((success) => {\r\n this.showShareResults = 3;\r\n });\r\n }\r\n })\r\n .finally(() => {\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n delete this.clientId;\r\n this.dataLoading = false;\r\n });\r\n } else {\r\n this.dealService\r\n .shareDealWithClient(this.shareDealDto)\r\n .then(() => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.shareDealDto.ClientDto.FirstName +\r\n \" \" +\r\n this.shareDealDto.ClientDto.LastName;\r\n this.showShareResults = 4;\r\n })\r\n .finally(() => {\r\n delete this.shareDealDto;\r\n this.dataLoading = false;\r\n });\r\n }\r\n }\r\n\r\n /* sendResultsToExistingClient(notifyBorrower: boolean = true, showMsgAfterResultSent: boolean = true) {\r\n this.newSearch = false;\r\n this.existingborrower = null;\r\n this.showClientDetails = false;\r\n this.$DevelopmentInputService.sendResultsToExistingClient(this.loanCriteria, this.clientFirstName, this.clientSurname, this.clientEmail, this.clientId, notifyBorrower, this.clientPhoneNumber).then((success) => {\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n delete this.clientId;\r\n this.showShareResults = 3;\r\n });\r\n }\r\n \r\n \r\n introducerSendResultsToClient(notifyBorrower: boolean = true) {\r\n this.newSearch = false;\r\n this.existingborrower = null;\r\n this.showClientDetails = false;\r\n \r\n // remove the user id because otherwise the client won't be able to see the search on their dashboard\r\n this.loanCriteria.UserId = null;\r\n \r\n this.$IntroducerService.sendResultsToClient(this.loanCriteria, this.clientFirstName, this.clientSurname, this.clientEmail, notifyBorrower, this.clientPhoneNumber).then((success) => {\r\n delete this.clientFirstName;\r\n delete this.clientEmail;\r\n delete this.clientSurname;\r\n delete this.clientPhoneNumber;\r\n if (this.isBroker) {\r\n this.showShareResults = 2;\r\n } else {\r\n this.showShareResults = 1;\r\n }\r\n });\r\n }\r\n */\r\n\r\n sendShareSearchEmailToClient() {\r\n this.dataLoading = true;\r\n\r\n if (\r\n this.selectedSearch.ProductType == ProductTypeEnum.Development &&\r\n this.selectedSearch.DevelopmentInputID\r\n ) {\r\n if (\r\n this.loanCriteria.IntroduceeFirstName == null ||\r\n this.loanCriteria.IntroduceeSurname == null\r\n ) {\r\n this.loanCriteria.IntroduceeFirstName = this.clientFirstName;\r\n this.loanCriteria.IntroduceeSurname = this.clientSurname;\r\n }\r\n if (this.selectedSearch.isDevInputWithNoLogin) {\r\n this.$DevelopmentInputWithNoLoginService\r\n .sendEmailToNewUser(\r\n this.loanCriteria.UniqueRef,\r\n this.loanCriteria.ShowLenderNamesToBorrower,\r\n true,\r\n )\r\n .then((response) => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.loanCriteria.IntroduceeFirstName +\r\n \" \" +\r\n this.loanCriteria.IntroduceeSurname;\r\n this.newSearch = false;\r\n this.showShareResults = 4;\r\n this.dataLoading = false;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n this.newSearch = false;\r\n this.showShareResults = 4;\r\n this.dataLoading = false;\r\n })\r\n .finally(() => {\r\n delete this.selectedSearch;\r\n delete this.loanCriteria;\r\n delete this.selectedResult;\r\n delete this.shareSearchModal;\r\n delete this.existingborrower;\r\n delete this.clientFirstName;\r\n delete this.clientSurname;\r\n delete this.clientEmail;\r\n });\r\n } else {\r\n this.$DevelopmentInputService\r\n .sendEmailToExistingUser(\r\n this.loanCriteria.Id,\r\n this.loanCriteria.ShowLenderNamesToBorrower,\r\n true,\r\n )\r\n .then((response) => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.loanCriteria.IntroduceeFirstName +\r\n \" \" +\r\n this.loanCriteria.IntroduceeSurname;\r\n this.newSearch = false;\r\n this.showShareResults = 4;\r\n this.dataLoading = false;\r\n })\r\n .catch((error) => {\r\n this.displayMsg = \"Sorry, something went wrong. Please try again.\";\r\n this.newSearch = false;\r\n this.showShareResults = 4;\r\n this.dataLoading = false;\r\n });\r\n }\r\n } else {\r\n this.shareDealDto.EmailLinkToClient = true;\r\n this.dealService\r\n .shareDealWithClient(this.shareDealDto)\r\n .then(() => {\r\n this.displayMsg =\r\n \"Search results have been sent to \" +\r\n this.shareDealDto.ClientDto.FirstName +\r\n \" \" +\r\n this.shareDealDto.ClientDto.LastName;\r\n this.newSearch = false;\r\n this.showShareResults = 4;\r\n this.dataLoading = false;\r\n })\r\n .finally(() => {\r\n delete this.selectedSearch;\r\n delete this.loanCriteria;\r\n delete this.selectedResult;\r\n delete this.shareSearchModal;\r\n delete this.existingborrower;\r\n delete this.shareDealDto;\r\n });\r\n }\r\n }\r\n\r\n reloadPage() {\r\n window.location.reload();\r\n }\r\n\r\n viewClientsDashboard(userName: string) {\r\n //Look up client's account details\r\n this.dataLoading = true;\r\n this.$user.searchByEmail(userName).then((users) => {\r\n this.showHomeDashboard();\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n sendMessageToBrokerAdmin(message) {\r\n this.dataLoading = true;\r\n this.borrowerMessage = null;\r\n this.organisationService\r\n .sendBorrowerMessageToOrganisationAdmin(\r\n this.currentUser.DefaultBrokerOrganisationId,\r\n message,\r\n this.currentUser.FirstName,\r\n this.currentUser.LastName,\r\n this.currentUser.Email,\r\n ProductTypeEnum.Development,\r\n \"USERDASHBOARD\",\r\n )\r\n .then((results) => {\r\n if (results) {\r\n this.displayMsg = `Message has been sent successfully.`;\r\n this.showMessageToborrower = true;\r\n this.showContactBrokerModal = false;\r\n } else {\r\n this.displayMsg = `There is problem sending a message, Please try later.`;\r\n this.showMessageToborrower = true;\r\n this.showContactBrokerModal = false;\r\n }\r\n })\r\n .finally(() => {\r\n this.dataLoading = false;\r\n });\r\n }\r\n\r\n closeDeletedSearchMessageModal() {\r\n this.showDeletedSearchMessageModal = false;\r\n this.showMessageToborrower = false;\r\n this.showContactBrokerModal = false;\r\n this.displayMsg = null;\r\n sessionStorage.removeItem(\"returningFromdeletedSearch\");\r\n }\r\n\r\n /**\r\n * Toggles the display of the context menu on the tile for searches/cases\r\n * @param id\r\n */\r\n toggleTileMenu(id) {\r\n event.stopPropagation();\r\n this.closeAddMenu();\r\n this.cardWithOpenMenu.id = this.cardWithOpenMenu.id == id ? null : id;\r\n }\r\n\r\n /**\r\n * Toggles the display of the Add Item menu\r\n * @param event\r\n */\r\n toggleAddMenu(event) {\r\n event.stopPropagation();\r\n\r\n if (this.isBroker && !this.currentUser.HasActiveSubscription) {\r\n return;\r\n }\r\n this.closeTileMenu();\r\n\r\n var menu = document\r\n .getElementsByClassName(\"new-item-menu\")\r\n .item(0) as HTMLElement;\r\n\r\n if (menu && (menu.style.display == \"none\" || menu.style.display == \"\")) {\r\n var boundingRect = event.target.getBoundingClientRect();\r\n var offsetHeight = event.target.offsetHeight;\r\n\r\n menu.style.display = \"flex\";\r\n menu.style.left = boundingRect.left - menu.clientWidth - 10 + \"px\";\r\n menu.style.bottom = offsetHeight + \"px\";\r\n } else {\r\n if (menu) {\r\n menu.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n /**Closes the context menu on search/case tiles */\r\n closeTileMenu() {\r\n this.cardWithOpenMenu.id = null;\r\n }\r\n\r\n /**Closes the Add new item menu */\r\n closeAddMenu() {\r\n var menu = document\r\n .getElementsByClassName(\"new-item-menu\")\r\n .item(0) as HTMLElement;\r\n\r\n if (menu) {\r\n menu.style.display = \"none\";\r\n }\r\n }\r\n\r\n /**Closes all context menus */\r\n closeContextMenus() {\r\n this.closeTileMenu();\r\n this.closeAddMenu();\r\n }\r\n\r\n getProductTypeText(\r\n productType: ProductTypeEnum,\r\n isRegulatedBridge: boolean = false,\r\n ) {\r\n if (isRegulatedBridge) {\r\n return \"regulated bridge\";\r\n } else {\r\n var productTypeInfo = this.productTypeOptions.find(\r\n (p) => p.key == productType,\r\n );\r\n\r\n if (productTypeInfo) {\r\n return productTypeInfo.displayName;\r\n }\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /** Determines whether to show the \"no searches\" message on the user dashboard */\r\n showNoSearchesMessage(): boolean {\r\n return this.searches?.length == 0 && !this.isSearchesLoading;\r\n }\r\n\r\n /** Determines whether to show the \"no cases\" message on the user dashboard */\r\n showNoCasesMessage(): boolean {\r\n if (this.selectedNavMenu == this.NavMenuEnum.DevelopmentFinance) {\r\n return this.projects.length == 0 && !this.isDevFinanceProjectsLoading;\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.BridgingFinance) {\r\n return this.projects.length == 0 && !this.isBridgingPreConProjectsLoading;\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.CommercialMortgages) {\r\n return this.projects.length == 0 && !this.isCommercialProjectsLoading;\r\n } else if (\r\n this.selectedNavMenu == this.NavMenuEnum.Home &&\r\n !this.isAllProjectsLoading\r\n ) {\r\n return this.projects.length == 0 && !this.isAllProjectsLoading;\r\n }\r\n }\r\n\r\n /**Determines whether to show the case loading spinner */\r\n showCasesLoadingSpinner(): boolean {\r\n if (this.selectedNavMenu == this.NavMenuEnum.DevelopmentFinance) {\r\n return !this.projects || this.isDevFinanceProjectsLoading;\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.BridgingFinance) {\r\n return !this.projects || this.isBridgingPreConProjectsLoading;\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.CommercialMortgages) {\r\n return !this.projects || this.isCommercialProjectsLoading;\r\n } else if (this.selectedNavMenu == this.NavMenuEnum.Home) {\r\n return !this.projects || this.isAllProjectsLoading;\r\n }\r\n }\r\n\r\n /** Determines whether to show the list of Case cards*/\r\n showCaseCards(): boolean {\r\n return this.projects != null && this.projects != undefined;\r\n }\r\n\r\n returnCaseOrDealId(item: CaseSummaryDTO): number {\r\n if (item.ProductType == ProductTypeEnum.Development && item.CaseID) {\r\n return item.CaseID;\r\n } else {\r\n return item.DealID;\r\n }\r\n }\r\n\r\n returnSearchOrDealId(item: CaseSummaryDTO): number {\r\n if (\r\n item.ProductType == ProductTypeEnum.Development &&\r\n item.DevelopmentInputID\r\n ) {\r\n return item.DevelopmentInputID;\r\n } else {\r\n return item.DealID;\r\n }\r\n }\r\n\r\n setHasBridgingAndHasCommercialValue(): void {\r\n this.organisationService.getOrganisationProductAccess().then((response) => {\r\n this.hasBridging = response.HasBridging;\r\n this.hasCommercial = response.HasCommercial;\r\n this.isDeallockerIntegrationEnabled = response.IsDeallockerIntegrationEnabled;\r\n });\r\n }\r\n\r\n currentLenderProductType(): void {\r\n this.hideBridgingMenu = true;\r\n this.hideDevfinanceMenu = true;\r\n this.hideCommercialMenu = true;\r\n\r\n this.$lenderService.getLenderProductTypes().then((response) => {\r\n if (\r\n this.currentUser != null &&\r\n this.currentUser.LenderProductTypes != null\r\n ) {\r\n // When the current user is a lender admin then they should see all product types that the lender has\r\n if (this.currentUser.IsLenderAdmin) {\r\n if (response == LenderProductTypeEnum.All) {\r\n this.hideBridgingMenu = false;\r\n this.hideDevfinanceMenu = false;\r\n this.hideCommercialMenu = false;\r\n\r\n return;\r\n }\r\n\r\n if (\r\n (response & LenderProductTypeEnum.DevelopmentFinance) ==\r\n LenderProductTypeEnum.DevelopmentFinance\r\n ) {\r\n this.hideDevfinanceMenu = false;\r\n }\r\n\r\n if (\r\n (response & LenderProductTypeEnum.BridgingFinance) ==\r\n LenderProductTypeEnum.BridgingFinance\r\n ) {\r\n this.hideBridgingMenu = false;\r\n }\r\n\r\n if (\r\n (response & LenderProductTypeEnum.CommercialMortgages) ==\r\n LenderProductTypeEnum.CommercialMortgages\r\n ) {\r\n this.hideCommercialMenu = false;\r\n }\r\n\r\n return;\r\n } else {\r\n // If the lender has all product types and the lender user has been set up to see all products types\r\n if (\r\n response == LenderProductTypeEnum.All &&\r\n (this.currentUser.LenderProductTypes & LenderProductTypeEnum.All) ==\r\n LenderProductTypeEnum.All\r\n ) {\r\n this.hideBridgingMenu = false;\r\n this.hideDevfinanceMenu = false;\r\n this.hideCommercialMenu = false;\r\n\r\n return;\r\n }\r\n\r\n if (\r\n (response & LenderProductTypeEnum.DevelopmentFinance) ==\r\n LenderProductTypeEnum.DevelopmentFinance &&\r\n ((this.currentUser.LenderProductTypes &\r\n LenderProductTypeEnum.DevelopmentFinance) ==\r\n LenderProductTypeEnum.DevelopmentFinance ||\r\n (this.currentUser.LenderProductTypes &\r\n LenderProductTypeEnum.All) ==\r\n LenderProductTypeEnum.All)\r\n ) {\r\n this.hideDevfinanceMenu = false;\r\n }\r\n\r\n if (\r\n (response & LenderProductTypeEnum.BridgingFinance) ==\r\n LenderProductTypeEnum.BridgingFinance &&\r\n ((this.currentUser.LenderProductTypes &\r\n LenderProductTypeEnum.BridgingFinance) ==\r\n LenderProductTypeEnum.BridgingFinance ||\r\n (this.currentUser.LenderProductTypes &\r\n LenderProductTypeEnum.All) ==\r\n LenderProductTypeEnum.All)\r\n ) {\r\n this.hideBridgingMenu = false;\r\n }\r\n\r\n if (\r\n (response & LenderProductTypeEnum.CommercialMortgages) ==\r\n LenderProductTypeEnum.CommercialMortgages &&\r\n ((this.currentUser.LenderProductTypes &\r\n LenderProductTypeEnum.CommercialMortgages) ==\r\n LenderProductTypeEnum.CommercialMortgages ||\r\n (this.currentUser.LenderProductTypes &\r\n LenderProductTypeEnum.All) ==\r\n LenderProductTypeEnum.All)\r\n ) {\r\n this.hideCommercialMenu = false;\r\n }\r\n\r\n //if (response == LenderProductTypeEnum.All && (this.currentUser.LenderProductTypes & LenderProductTypeEnum.BridgingFinance) == LenderProductTypeEnum.BridgingFinance && (this.currentUser.LenderProductTypes & LenderProductTypeEnum.DevelopmentFinance) == LenderProductTypeEnum.DevelopmentFinance && (this.currentUser.LenderProductTypes & LenderProductTypeEnum.CommercialMortgages) == LenderProductTypeEnum.CommercialMortgages) {\r\n // this.hideBridgingMenu = false;\r\n // this.hideDevfinanceMenu = false;\r\n // this.hideCommercialMenu = false;\r\n //} else if ((response == LenderProductTypeEnum.All && (this.currentUser.LenderProductTypes & LenderProductTypeEnum.All) == LenderProductTypeEnum.All) || (response == LenderProductTypeEnum.All && this.currentUser.IsLenderAdmin)) {\r\n // this.hideBridgingMenu = false;\r\n // this.hideDevfinanceMenu = false;\r\n // this.hideCommercialMenu = false;\r\n //} else if ((response == LenderProductTypeEnum.BridgingFinance || response == LenderProductTypeEnum.All) && ((this.currentUser.LenderProductTypes & LenderProductTypeEnum.BridgingFinance) == LenderProductTypeEnum.BridgingFinance || this.currentUser.IsLenderAdmin)) {\r\n // this.hideBridgingMenu = false;\r\n //} else if ((response == LenderProductTypeEnum.DevelopmentFinance || response == LenderProductTypeEnum.All) && ((this.currentUser.LenderProductTypes & LenderProductTypeEnum.DevelopmentFinance) == LenderProductTypeEnum.DevelopmentFinance || this.currentUser.IsLenderAdmin)) {\r\n // this.hideDevfinanceMenu = false;\r\n //} else if ((response == LenderProductTypeEnum.CommercialMortgages || response == LenderProductTypeEnum.All) && ((this.currentUser.LenderProductTypes & LenderProductTypeEnum.CommercialMortgages) == LenderProductTypeEnum.CommercialMortgages || this.currentUser.IsLenderAdmin)) {\r\n // this.hideCommercialMenu = false;\r\n //}\r\n //else if (response == LenderProductTypeEnum.DevelopmentFinance && ((this.currentUser.LenderProductTypes & LenderProductTypeEnum.All) == LenderProductTypeEnum.All || this.currentUser.IsLenderAdmin)) {\r\n // this.hideDevfinanceMenu = false;\r\n //} else if (response == LenderProductTypeEnum.BridgingFinance && ((this.currentUser.LenderProductTypes & LenderProductTypeEnum.All) == LenderProductTypeEnum.All || this.currentUser.IsLenderAdmin)) {\r\n // this.hideBridgingMenu = false;\r\n //} else if (response == LenderProductTypeEnum.CommercialMortgages && ((this.currentUser.LenderProductTypes & LenderProductTypeEnum.All) == LenderProductTypeEnum.All || this.currentUser.IsLenderAdmin)) {\r\n // this.hideCommercialMenu = false;\r\n //}\r\n }\r\n }\r\n });\r\n }\r\n\r\n showViewButton(productType: ProductTypeEnum) {\r\n if (\r\n productType == ProductTypeEnum.Development ||\r\n ((productType == ProductTypeEnum.Bridging ||\r\n productType == ProductTypeEnum.BridgingPreconstruction ||\r\n productType == ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n productType == ProductTypeEnum.BridgingRefurb ||\r\n productType == ProductTypeEnum.BridgingDeveloperExit) &&\r\n this.hasBridging) ||\r\n ((productType == ProductTypeEnum.CommercialAll ||\r\n productType == ProductTypeEnum.CommercialInvestment ||\r\n productType == ProductTypeEnum.CommercialOwnerOccupied) &&\r\n this.hasCommercial)\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n onPlusButtonHover(event) {\r\n if (this.isBroker) {\r\n event.currentTarget.children[0].style.display = \"\";\r\n }\r\n }\r\n\r\n goToDealForum(item) {\r\n if (this.isLender) {\r\n if (this.goToDealForumClicked) {\r\n sessionStorage.setItem(\"lenderTask\", \"feedback\");\r\n this.goToDealForumClicked = false;\r\n if (item.ProductType == ProductTypeEnum.Development) {\r\n if (item.DealID) {\r\n this.$location.path(\r\n \"/devfinanceheadsofterm/\" + item.DealID + \"/\" + item.DealLenderId,\r\n );\r\n } else {\r\n this.$location.path(\r\n \"/headsofterm/\" + item.CaseID + \"/\" + item.DealLenderId,\r\n );\r\n }\r\n } else if (\r\n item.ProductType == ProductTypeEnum.CommercialAll ||\r\n item.ProductType == ProductTypeEnum.CommercialInvestment ||\r\n item.ProductType == ProductTypeEnum.CommercialOwnerOccupied\r\n ) {\r\n this.$location.path(\r\n \"/commercialheadsofterm/\" + item.DealID + \"/\" + item.DealLenderId,\r\n );\r\n } else if (\r\n item.ProductType == ProductTypeEnum.BridgingPreconstruction ||\r\n item.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n item.ProductType == ProductTypeEnum.BridgingDeveloperExit ||\r\n item.ProductType == ProductTypeEnum.BridgingRefurb ||\r\n item.ProductType == ProductTypeEnum.Bridging\r\n ) {\r\n this.$location.path(\r\n \"/bridgingheadsofterm/\" + item.DealID + \"/\" + item.DealLenderId,\r\n );\r\n }\r\n } else {\r\n this.goToDealForumClicked = true;\r\n this.lenderSelectedProject = { ...item };\r\n this.showLenderTerms = true;\r\n }\r\n } else {\r\n if (\r\n item.ProductType == ProductTypeEnum.Development &&\r\n item.DealID == null\r\n ) {\r\n this.$location.path(\"/lending/\" + item.CaseID);\r\n } else {\r\n this.$location.path(\"/dealforum/\" + item.DealID);\r\n }\r\n }\r\n }\r\n\r\n getTotalUnreadMessagesPerAppraisal() {\r\n if (this.projects && this.projects.length > 0) {\r\n let appraisalList = this.projects.map((obj) => ({\r\n AppraisalId: obj.DealID != null ? obj.DealID : obj.CaseID,\r\n IsDeal: obj.DealID != null ? true : false,\r\n BrokerUserId: obj.BrokerUserId,\r\n }));\r\n\r\n this.dealLenderMessageService\r\n .getTotalUnreadMessagesPerAppraisal(appraisalList)\r\n .then((response) => {\r\n this.bridgingTotalUnreadMessage =\r\n response.BridgingTotalUnreadMessages;\r\n this.commercialTotalUnreadMessage =\r\n response.CommercialTotalUnreadMessages;\r\n this.devfinanceTotalUnreadMessage =\r\n response.DevFinanceTotalUnreadMessages;\r\n\r\n for (const proj of this.projects) {\r\n const matchingProj =\r\n proj.DealID != null\r\n ? response.AppraisalDataList.find(\r\n (dl) => dl.AppraisalId === proj.DealID && dl.IsDeal,\r\n )\r\n : response.AppraisalDataList.find(\r\n (dl) => dl.AppraisalId === proj.CaseID && !dl.IsDeal,\r\n );\r\n if (matchingProj) {\r\n proj.TotalUnreadMessages = matchingProj.TotalUnreadMessages;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n //If previous path is any one of these then only it restore previous selected navmenu and filter\r\n isValidPreviousPath() {\r\n if (\r\n ((this.$rootScope as any).previousRoute.startsWith(\r\n \"/commercialresults\",\r\n ) ||\r\n (this.$rootScope as any).previousRoute.startsWith(\"/bridgingresults\") ||\r\n (this.$rootScope as any).previousRoute.startsWith(\r\n \"/devfinanceresults\",\r\n ) ||\r\n (this.$rootScope as any).previousRoute.startsWith(\r\n \"/commercialcasedashboard\",\r\n ) ||\r\n (this.$rootScope as any).previousRoute.startsWith(\r\n \"/bridgingcasedashboard\",\r\n ) ||\r\n (this.$rootScope as any).previousRoute.startsWith(\r\n \"/devfinancecasedashboard\",\r\n ) ||\r\n (this.$rootScope as any).previousRoute == \"/\" ||\r\n (this.$rootScope as any).previousRoute.startsWith(\r\n \"/devfinancecriteria\",\r\n ) ||\r\n (this.$rootScope as any).previousRoute.startsWith(\r\n \"/bridgingcriteria\",\r\n ) ||\r\n (this.$rootScope as any).previousRoute.startsWith(\r\n \"/commercialcriteria\",\r\n ) ||\r\n (this.$rootScope as any).previousRoute.startsWith(\"/referredSearch\") ||\r\n (this.$rootScope as any).previousRoute.startsWith(\"/casedashboard\") ||\r\n (this.$rootScope as any).previousRoute.startsWith(\"/results\") ||\r\n (this.$rootScope as any).previousRoute.startsWith(\"/dealforum\") ||\r\n (this.$rootScope as any).previousRoute.startsWith(\"/lending\")) &&\r\n (this.$rootScope as any).previousRoute != \"/\"\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n onSelectingHomeMenu() {\r\n sessionStorage.removeItem(\"selectedNavMenu\");\r\n }\r\n\r\n logExportDownload(eventName, item: CaseSummaryDTO) {\r\n this.eventLogService.logEvent(\r\n eventName,\r\n EventLogEnum.Export,\r\n item.ProductType,\r\n item.DealID ? item.DealID : item.CaseID,\r\n );\r\n }\r\n}\r\n","import { LicenseMasterDTO } from \"@js/DTO/LicenseMasterDTO.cs.d\";\r\nimport { LicenseService } from \"@js/services/LicenseService\";\r\n\r\nexport class UserLicenseController {\r\n licenseMasterId: number = null;\r\n license: LicenseMasterDTO = null;\r\n\r\n dataLoading: boolean = false;\r\n\r\n static $inject = [\"$http\", \"$routeParams\", \"LicenseService\"];\r\n\r\n constructor(\r\n private $http: ng.IHttpService,\r\n private $routeParams: ng.route.IRouteParamsService,\r\n private licenseService: LicenseService,\r\n ) {\r\n if (this.$routeParams.licensemasterid) {\r\n this.dataLoading = true;\r\n this.licenseMasterId = +this.$routeParams.licensemasterid;\r\n\r\n this.licenseService\r\n .fetch(this.$routeParams.licensemasterid)\r\n .then((license: LicenseMasterDTO) => {\r\n this.license = license;\r\n });\r\n }\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AuthService } from \"@js/services/AuthService\";\r\nimport { CaseService } from \"@js/services/CaseService\";\r\nimport { RoleService } from \"@js/services/RoleService\";\r\n\r\nexport class WelcomeController {\r\n static $inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$cookies\",\r\n \"$location\",\r\n \"CaseService\",\r\n \"AuthService\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n private $scope: ng.IScope,\r\n private $rootScope: ng.IRootScopeService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n private $location: ng.ILocationService,\r\n private caseService: CaseService,\r\n private authService: AuthService,\r\n private roleService: RoleService,\r\n ) {\r\n if (this.$cookies.get(\"access_token\")) {\r\n $location.path(\"/userdashboard\");\r\n }\r\n }\r\n\r\n quickSearch() {\r\n this.$location.path(\"/criteria/0/0/1\");\r\n }\r\n\r\n startAppraisal() {\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.createNewBlankCase();\r\n } else {\r\n // Register the user first before creating a blank case\r\n this.$location.path(\"/register/startprojectappraisal\");\r\n }\r\n }\r\n\r\n applyForDevLoan() {\r\n if (this.$cookies.get(\"access_token\")) {\r\n this.createNewBlankCase(true);\r\n } else {\r\n // Register the user first before creating a blank case\r\n this.$location.path(\"/register/applyfordevloan\");\r\n }\r\n }\r\n\r\n goToFindLoan() {\r\n this.$location.path(\"/criteria/0/0/1\");\r\n }\r\n\r\n createNewBlankCase(applyForDevLoan: boolean = false) {\r\n this.authService.getProfile().then((prof) => {\r\n var currentUser: ApplicationUserDTO = prof;\r\n this.roleService.GetUserRoles().then((result) => {\r\n var isPrimaryApplicant: boolean = true;\r\n\r\n if (result.filter((x) => x == \"Broker\").length > 0) {\r\n isPrimaryApplicant = false;\r\n }\r\n\r\n this.caseService\r\n .newBlankCase(currentUser, isPrimaryApplicant)\r\n .then((newBlankCaseDto) => {\r\n if (newBlankCaseDto && newBlankCaseDto.NewCaseId) {\r\n // If applying for a development loan then go to the case dashboard of the new case\r\n if (applyForDevLoan == true) {\r\n this.$location.path(\r\n \"/casedashboard/\" + newBlankCaseDto.NewCaseId,\r\n );\r\n } else {\r\n // If starting a project appraisal then go directly to the appraisal module of the new case\r\n this.$location.path(\r\n \"/criteriaappraisal/\" +\r\n newBlankCaseDto.NewCaseId +\r\n \"/\" +\r\n newBlankCaseDto.NewSearchId,\r\n );\r\n }\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n","import { UserService } from \"@js/services/UserService\";\r\n\r\nexport class UnsubscribeEmailController {\r\n\r\n static $inject = [\r\n '$routeParams',\r\n 'UserService',\r\n ];\r\n\r\n error: boolean = false;\r\n\r\n constructor(private $routeParams: ng.route.IRouteParamsService, private userService:UserService) {\r\n\r\n\r\n if (this.$routeParams.emailCode && this.$routeParams.userId) {\r\n this.userService.unSubscribeFromEmail(this.$routeParams.emailCode, this.$routeParams.userId).then((response) => {\r\n }).catch((response) => {\r\n this.error = true;\r\n });\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\n","import angular from \"angular\";\r\nimport { AccountsController } from \"./controllers/AccountsController\";\r\nimport { AccountSettingsController } from \"./controllers/AccountSettingsController\";\r\nimport { AgentLandingController } from \"./controllers/AgentLandingController\";\r\nimport { AllLoansLandingController } from \"./controllers/AllLoansLandingController\";\r\nimport { ApplicantController } from \"./controllers/ApplicantController\";\r\nimport { ApplicantDetailsController } from \"./controllers/ApplicantDetailsController\";\r\nimport { ApplicationDetailsController } from \"./controllers/ApplicationDetailsController\";\r\nimport { AssignLicensesController } from \"./controllers/AssignLicensesController\";\r\nimport { BorrowerTermsController } from \"./controllers/BorrowerTermsController\";\r\nimport { BridgingCaseController } from \"./controllers/BridgingCaseController\";\r\nimport { BridgingCriteriaController } from \"./controllers/BridgingCriteriaController\";\r\nimport { BridgingHeadsOfTermsController } from \"./controllers/BridgingHeadsOfTermsController\";\r\nimport { BridgingLenderResultScreenController } from \"./controllers/BridgingLenderResultsScreenController\";\r\nimport { CaseController } from \"./controllers/CaseController\";\r\nimport { CaseLenderController } from \"./controllers/CaseLenderController\";\r\nimport { CaseOverviewController } from \"./controllers/CaseOverviewController\";\r\nimport { ClientDashboardController } from \"./controllers/ClientDashboardController\";\r\nimport { CommercialCaseController } from \"./controllers/CommercialCaseController\";\r\nimport { CommercialComparisonController } from \"./controllers/CommercialComparisonController\";\r\nimport { CommercialCriteriaController } from \"./controllers/CommercialCriteriaController\";\r\nimport { CommercialHeadsOfTermsController } from \"./controllers/CommercialHeadsOfTermsController\";\r\nimport { CommercialLenderResultScreenController } from \"./controllers/CommercialLenderResultsScreenController\";\r\nimport { ComparisonController } from \"./controllers/ComparisonController\";\r\nimport { DashboardController } from \"./controllers/DashboardController\";\r\nimport { DealLenderController } from \"./controllers/DealLenderController\";\r\nimport { DealSecurityCheckController } from \"./controllers/DealSecurityCheckController\";\r\nimport { DeveloperExitFinanceComparisonController } from \"./controllers/DeveloperExitFinanceComparisonController\";\r\nimport { DeveloperExitFinanceDevelopmentInputController } from \"./controllers/DeveloperExitFinanceDevelopmentInputController\";\r\nimport { DeveloperExitFinanceDevScheduleInputController } from \"./controllers/DeveloperExitFinanceDevScheduleInputController\";\r\nimport { DeveloperExitFinanceLoanInputController } from \"./controllers/DeveloperExitFinanceLoanInputController\";\r\nimport { DeveloperExitFinanceResultController } from \"./controllers/DeveloperExitFinanceResultController\";\r\nimport { DevelopmentAppraisalScreenController } from \"./controllers/DevelopmentAppraisalScreenController\";\r\nimport { DevelopmentExperienceController } from \"./controllers/DevelopmentExperienceController\";\r\nimport { DevelopmentInputController } from \"./controllers/DevelopmentInputController\";\r\nimport { DevelopmentInputScheduleController } from \"./controllers/DevelopmentInputScheduleController\";\r\nimport { DevelopmentInputScreenController } from \"./controllers/DevelopmentInputScreenController\";\r\nimport { DevelopmentInputWithNoLoginController } from \"./controllers/DevelopmentInputWithNoLoginController\";\r\nimport { DevelopmentTrackRecordController } from \"./controllers/DevelopmentTrackRecordController\";\r\nimport { DevFinanceCaseController } from \"./controllers/DevFinanceCaseController\";\r\nimport { DevFinanceCriteriaController } from \"./controllers/DevFinanceCriteriaController\";\r\nimport { DevFinanceHeadsOfTermsController } from \"./controllers/DevFinanceHeadsOfTermsController\";\r\nimport { DevFinanceLenderResultScreenController } from \"./controllers/DevFinanceLenderResultsScreenController\";\r\nimport { EnquiryController } from \"./controllers/EnquiryController\";\r\nimport { EnterpriseLeadCaptureController } from \"./controllers/EnterpriseLeadCaptureController\";\r\nimport { FeaturePriceController } from \"./controllers/FeaturePriceController\";\r\nimport { FeedBackController } from \"./controllers/FeedBackController\";\r\nimport { FileAttachmentController } from \"./controllers/FileAttachmentController\";\r\nimport { HeadsOfTermsController } from \"./controllers/HeadsOfTermsController\";\r\nimport { IndexController } from \"./controllers/IndexController\";\r\nimport { InitialRegistrationController } from \"./controllers/InitialRegistrationController\";\r\nimport { IntroducerController } from \"./controllers/IntroducerController\";\r\nimport { LandingController } from \"./controllers/LandingController\";\r\nimport { LandingV3Controller } from \"./controllers/LandingV3Controller\";\r\nimport { LeadGenPromoController } from \"./controllers/LeadGenPromoController\";\r\nimport { LenderController } from \"./controllers/LenderController\";\r\nimport { LenderResultScreenController } from \"./controllers/LenderResultScreenController\";\r\nimport { LoginController } from \"./controllers/LoginController\";\r\nimport { ManageLicenseController } from \"./controllers/ManageLicenseController\";\r\nimport { NewDashboardController } from \"./controllers/NewDashboardController\";\r\nimport { NewSearchSelectionsController } from \"./controllers/NewSearchSelectionsController\";\r\nimport { OrganisationsController } from \"./controllers/OrganisationsController\";\r\nimport { PayFailController } from \"./controllers/PayFailController\";\r\nimport { PaymentController } from \"./controllers/PaymentController\";\r\nimport { PaySucessController } from \"./controllers/PaySucessController\";\r\nimport { PrivacyController } from \"./controllers/PrivacyController\";\r\nimport { ProductController } from \"./controllers/ProductController\";\r\nimport { ProductStubController } from \"./controllers/ProductStubController\";\r\nimport { ProfileController } from \"./controllers/ProfileController\";\r\nimport { ReferFriendController } from \"./controllers/ReferFriendController\";\r\nimport { RegistrationBrokerController } from \"./controllers/RegistrationBrokerController\";\r\nimport { RegistrationController } from \"./controllers/RegistrationController\";\r\nimport { RegistrationIntroducerController } from \"./controllers/RegistrationIntroducerController\";\r\nimport { RoleController } from \"./controllers/RoleController\";\r\nimport { SecurityCheckController } from \"./controllers/SecurityCheckController\";\r\nimport { TermsOfBusinessController } from \"./controllers/TermsOfBusinessController\";\r\nimport { TrackRecordController } from \"./controllers/TrackRecordController\";\r\nimport { UserController } from \"./controllers/UserController\";\r\nimport { UserDashboardController } from \"./controllers/UserDashboardController\";\r\nimport { UserLicenseController } from \"./controllers/UserLicenseController\";\r\nimport { WelcomeController } from \"./controllers/WelcomeController\";\r\nimport { UnsubscribeEmailController } from \"./controllers/UnsubscribeEmailController\";\r\n\r\nexport function registerControllers() {\r\n angular\r\n .module(\"ccqapp\")\r\n .controller(\"AccountsController\", AccountsController)\r\n .controller(\"AccountSettingsController\", AccountSettingsController)\r\n .controller(\"AgentLandingController\", AgentLandingController)\r\n .controller(\"AllLoansLandingController\", AllLoansLandingController)\r\n .controller(\"ApplicantController\", ApplicantController)\r\n .controller(\"ApplicantDetailsController\", ApplicantDetailsController)\r\n .controller(\"ApplicationDetailsController\", ApplicationDetailsController)\r\n .controller(\"AssignLicensesController\", AssignLicensesController)\r\n .controller(\"BorrowerTermsController\", BorrowerTermsController)\r\n .controller(\"BridgingCaseController\", BridgingCaseController)\r\n .controller(\"BridgingCriteriaController\", BridgingCriteriaController)\r\n .controller(\r\n \"BridgingHeadsOfTermsController\",\r\n BridgingHeadsOfTermsController,\r\n )\r\n .controller(\r\n \"BridgingLenderResultScreenController\",\r\n BridgingLenderResultScreenController,\r\n )\r\n .controller(\"CaseController\", CaseController)\r\n .controller(\"CaseLenderController\", CaseLenderController)\r\n .controller(\"CaseOverviewController\", CaseOverviewController)\r\n .controller(\"ClientDashboardController\", ClientDashboardController)\r\n .controller(\"CommercialCaseController\", CommercialCaseController)\r\n .controller(\r\n \"CommercialComparisonController\",\r\n CommercialComparisonController,\r\n )\r\n .controller(\"CommercialCriteriaController\", CommercialCriteriaController)\r\n .controller(\r\n \"CommercialHeadsOfTermsController\",\r\n CommercialHeadsOfTermsController,\r\n )\r\n .controller(\r\n \"CommercialLenderResultScreenController\",\r\n CommercialLenderResultScreenController,\r\n )\r\n .controller(\"ComparisonController\", ComparisonController)\r\n .controller(\"DashboardController\", DashboardController)\r\n .controller(\"DealLenderController\", DealLenderController)\r\n .controller(\"DealSecurityCheckController\", DealSecurityCheckController)\r\n .controller(\r\n \"DeveloperExitFinanceComparisonController\",\r\n DeveloperExitFinanceComparisonController,\r\n )\r\n .controller(\r\n \"DeveloperExitFinanceDevelopmentInputController\",\r\n DeveloperExitFinanceDevelopmentInputController,\r\n )\r\n .controller(\r\n \"DeveloperExitFinanceDevScheduleInputController\",\r\n DeveloperExitFinanceDevScheduleInputController,\r\n )\r\n .controller(\r\n \"DeveloperExitFinanceLoanInputController\",\r\n DeveloperExitFinanceLoanInputController,\r\n )\r\n .controller(\r\n \"DeveloperExitFinanceResultController\",\r\n DeveloperExitFinanceResultController,\r\n )\r\n .controller(\r\n \"DevelopmentAppraisalScreenController\",\r\n DevelopmentAppraisalScreenController,\r\n )\r\n .controller(\r\n \"DevelopmentExperienceController\",\r\n DevelopmentExperienceController,\r\n )\r\n .controller(\"DevelopmentInputController\", DevelopmentInputController)\r\n .controller(\r\n \"DevelopmentInputScheduleController\",\r\n DevelopmentInputScheduleController,\r\n )\r\n .controller(\r\n \"DevelopmentInputScreenController\",\r\n DevelopmentInputScreenController,\r\n )\r\n .controller(\r\n \"DevelopmentInputWithNoLoginController\",\r\n DevelopmentInputWithNoLoginController,\r\n )\r\n .controller(\r\n \"DevelopmentTrackRecordController\",\r\n DevelopmentTrackRecordController,\r\n )\r\n .controller(\"DevFinanceCaseController\", DevFinanceCaseController)\r\n .controller(\"DevFinanceCriteriaController\", DevFinanceCriteriaController)\r\n .controller(\r\n \"DevFinanceHeadsOfTermsController\",\r\n DevFinanceHeadsOfTermsController,\r\n )\r\n .controller(\r\n \"DevFinanceLenderResultScreenController\",\r\n DevFinanceLenderResultScreenController,\r\n )\r\n .controller(\"EnquiryController\", EnquiryController)\r\n .controller(\"FeaturePriceController\", FeaturePriceController)\r\n .controller(\"FeedBackController\", FeedBackController)\r\n .controller(\"FileAttachmentController\", FileAttachmentController)\r\n .controller(\"HeadsOfTermsController\", HeadsOfTermsController)\r\n .controller(\"IndexController\", IndexController)\r\n .controller(\"InitialRegistrationController\", InitialRegistrationController)\r\n .controller(\"IntroducerController\", IntroducerController)\r\n .controller(\"LandingController\", LandingController)\r\n .controller(\"LandingV3Controller\", LandingV3Controller)\r\n .controller(\"LeadGenPromoController\", LeadGenPromoController)\r\n .controller(\"LenderController\", LenderController)\r\n .controller(\"LenderResultScreenController\", LenderResultScreenController)\r\n .controller(\"LoginController\", LoginController)\r\n .controller(\"ManageLicenseController\", ManageLicenseController)\r\n .controller(\"NewDashboardController\", NewDashboardController)\r\n .controller(\"NewSearchSelectionsController\", NewSearchSelectionsController)\r\n // .controller(\"OrganisationLinkController\", OrganisationLinkController)\r\n .controller(\"OrganisationsController\", OrganisationsController)\r\n .controller(\"PayFailController\", PayFailController)\r\n .controller(\"PaymentController\", PaymentController)\r\n .controller(\"PaySucessController\", PaySucessController)\r\n .controller(\"PrivacyController\", PrivacyController)\r\n .controller(\"ProductController\", ProductController)\r\n .controller(\"ProductStubController\", ProductStubController)\r\n .controller(\"ProfileController\", ProfileController)\r\n .controller(\"ReferFriendController\", ReferFriendController)\r\n .controller(\"RegistrationBrokerController\", RegistrationBrokerController)\r\n .controller(\"RegistrationController\", RegistrationController)\r\n .controller(\r\n \"RegistrationIntroducerController\",\r\n RegistrationIntroducerController,\r\n )\r\n .controller(\"RoleController\", RoleController)\r\n .controller(\"SecurityCheckController\", SecurityCheckController)\r\n .controller(\"TermsOfBusinessController\", TermsOfBusinessController)\r\n .controller(\"TrackRecordController\", TrackRecordController)\r\n .controller(\"UserController\", UserController)\r\n .controller(\"UserDashboardController\", UserDashboardController)\r\n .controller(\"UserLicenseController\", UserLicenseController)\r\n .controller(\"WelcomeController\", WelcomeController)\r\n .controller(\r\n \"EnterpriseLeadCaptureController\",\r\n EnterpriseLeadCaptureController,\r\n ).controller(\"UnsubscribeEmailController\", UnsubscribeEmailController);\r\n}\r\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { FC, useState } from \"react\";\r\n\r\nexport const TestComponent1: FC = () => {\r\n const [count, setCount] = useState(0);\r\n\r\n return (\r\n
\r\n
\r\n

You have clicked me {count} times.

\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\ninterface Props {\r\n fooBar: number;\r\n baz: string;\r\n}\r\n\r\nexport const TestComponent2: FC = ({ fooBar, baz }) => {\r\n return (\r\n
\r\n

FooBar: {fooBar}

\r\n

Baz: {baz}

\r\n
\r\n );\r\n};\r\n","/**\n * lodash 4.0.1 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['fred', 30], ['barney', 40]]);\n * // => { 'fred': 30, 'barney': 40 }\n */\nfunction fromPairs(pairs) {\n var index = -1,\n length = pairs ? pairs.length : 0,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n}\n\nmodule.exports = fromPairs;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nmodule.exports = baseSome;\n","var arraySome = require('./_arraySome'),\n baseIteratee = require('./_baseIteratee'),\n baseSome = require('./_baseSome'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar assign = require(\"lodash/assign\");\nvar mapValues = require(\"lodash/mapValues\");\nvar some = require(\"lodash/some\");\nvar NgComponent = /** @class */ (function () {\n function NgComponent() {\n this.__isFirstRender = true;\n this.state = {};\n this.props = {};\n }\n /*\n eg. {\n as: {currentValue: [1, 2, 3], previousValue: [1, 2]},\n bs: {currentValue: 42, previousValue: undefined}\n }\n */\n // nb: this method is explicity exposed for unit testing\n NgComponent.prototype.$onChanges = function (changes) {\n var oldProps = this.props;\n // TODO: fix Lodash typings upstream\n var newProps = mapValues(changes, 'currentValue');\n // TODO: implement nextState (which also means implement this.setState)\n var nextProps = assign({}, this.props, newProps);\n if (this.__isFirstRender) {\n assign(this, { props: nextProps });\n this.componentWillMount();\n this.render();\n this.__isFirstRender = false;\n }\n else {\n if (!this.didPropsChange(newProps, oldProps))\n return;\n this.componentWillReceiveProps(nextProps);\n var shouldUpdate = this.shouldComponentUpdate(nextProps, this.state);\n assign(this, { props: nextProps });\n if (!shouldUpdate)\n return;\n this.componentWillUpdate(this.props, this.state);\n this.render();\n this.componentDidUpdate(this.props, this.state);\n }\n };\n NgComponent.prototype.$postLink = function () {\n this.componentDidMount();\n };\n NgComponent.prototype.$onDestroy = function () {\n this.componentWillUnmount();\n };\n NgComponent.prototype.didPropsChange = function (newProps, oldProps) {\n return some(newProps, function (v, k) { return v !== oldProps[k]; });\n };\n /*\n lifecycle hooks\n */\n NgComponent.prototype.componentWillMount = function () { };\n NgComponent.prototype.componentDidMount = function () { };\n NgComponent.prototype.componentWillReceiveProps = function (_props) { };\n NgComponent.prototype.shouldComponentUpdate = function (_nextProps, _nextState) { return true; };\n NgComponent.prototype.componentWillUpdate = function (_props, _state) { };\n NgComponent.prototype.componentDidUpdate = function (_props, _state) { };\n NgComponent.prototype.componentWillUnmount = function () { };\n NgComponent.prototype.render = function () { };\n return NgComponent;\n}());\nexports.default = NgComponent;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar fromPairs = require(\"lodash.frompairs\");\nvar ngcomponent_1 = require(\"ngcomponent\");\nvar React = require(\"react\");\nvar react_dom_1 = require(\"react-dom\");\n/**\n * Wraps a React component in Angular. Returns a new Angular component.\n *\n * Usage:\n *\n * ```ts\n * type Props = { foo: number }\n * class ReactComponent extends React.Component {}\n * const AngularComponent = react2angular(ReactComponent, ['foo'])\n * ```\n */\nfunction react2angular(Class, bindingNames, injectNames) {\n if (bindingNames === void 0) { bindingNames = null; }\n if (injectNames === void 0) { injectNames = []; }\n var names = bindingNames\n || (Class.propTypes && Object.keys(Class.propTypes))\n || [];\n return {\n bindings: fromPairs(names.map(function (_) { return [_, '<']; })),\n controller: ['$element'].concat(injectNames, [/** @class */ (function (_super) {\n __extends(class_1, _super);\n function class_1($element) {\n var injectedProps = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n injectedProps[_i - 1] = arguments[_i];\n }\n var _this = _super.call(this) || this;\n _this.$element = $element;\n _this.isDestroyed = false;\n _this.injectedProps = {};\n injectNames.forEach(function (name, i) {\n _this.injectedProps[name] = injectedProps[i];\n });\n return _this;\n }\n Object.defineProperty(class_1, \"$$ngIsClass\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n class_1.prototype.render = function () {\n if (!this.isDestroyed) {\n react_dom_1.render(React.createElement(Class, __assign({}, this.props, this.injectedProps)), this.$element[0]);\n }\n };\n class_1.prototype.componentWillUnmount = function () {\n this.isDestroyed = true;\n react_dom_1.unmountComponentAtNode(this.$element[0]);\n };\n return class_1;\n }(ngcomponent_1.default))])\n };\n}\nexports.react2angular = react2angular;\n//# sourceMappingURL=index.js.map","import { TestComponent1, TestComponent2 } from \"@react/ReactTest\";\r\nimport angular from \"angular\";\r\nimport { react2angular } from \"react2angular\";\r\n\r\nexport function registerReactComponents() {\r\n angular\r\n .module(\"ccqapp\")\r\n .component(\"testComponent1\", react2angular(TestComponent1))\r\n .component(\r\n \"testComponent2\",\r\n react2angular(TestComponent2, [\"fooBar\", \"baz\"]),\r\n );\r\n}\r\n","import { PageWithTotalCountDTO } from \"@js/DTO/PageWithTotalCountDTO.cs.d\";\r\nimport { BroadcastService } from \"./BroadcastService\";\r\n\r\nexport class BaseService {\r\n protected $baseAddress: string; //base route\r\n protected $broadcastScreen: string;\r\n protected $broadcastBusinessNameSingular: string;\r\n protected $broadcastBusinessNamePlural: string;\r\n\r\n constructor(\r\n protected $http: ng.IHttpService,\r\n protected $cookies: ng.cookies.ICookiesService,\r\n protected $rootScope: ng.IRootScopeService,\r\n protected $q: ng.IQService,\r\n protected $timeout: ng.ITimeoutService,\r\n protected $broadcastservice: BroadcastService,\r\n ) {\r\n this.$broadcastScreen = \"NotSet\";\r\n this.$broadcastBusinessNamePlural = \"NotSet\";\r\n this.$broadcastBusinessNameSingular = \"NotSet\";\r\n }\r\n\r\n //paging with filter\r\n fetchpageneedle(\r\n needle: string,\r\n page: number,\r\n count: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/pagedneedle?needle=\" +\r\n needle +\r\n \"&page=\" +\r\n page +\r\n \"&Count=\" +\r\n count,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as PageWithTotalCountDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n protected fetchAllInternal(\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/list\")\r\n .then((response) => {\r\n defer.resolve(response.data as T[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchAll(): ng.IPromise {\r\n return this.fetchAllInternal(\r\n this.$broadcastScreen,\r\n \"Unable to get a list of \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n protected fetchInternal(\r\n id: IDT,\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetch/\" + id.toString())\r\n .then((response) => {\r\n defer.resolve(response.data as T);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetch(id: IDT): ng.IPromise {\r\n return this.fetchInternal(\r\n id,\r\n this.$broadcastScreen,\r\n \"Unable to get a list of \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n protected countInternal(\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/count\")\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n count(): ng.IPromise {\r\n return this.countInternal(\r\n this.$broadcastScreen,\r\n \"Unable to get count of \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n protected fetchpageInternal(\r\n needle: string,\r\n page: number,\r\n count: number,\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/paged?needle=\" +\r\n needle +\r\n \"&page=\" +\r\n page +\r\n \"&Count=\" +\r\n count,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as PageWithTotalCountDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n fetchpage(\r\n needle: string,\r\n page: number,\r\n count: number,\r\n ): ng.IPromise {\r\n return this.fetchpageInternal(\r\n needle,\r\n page,\r\n count,\r\n this.$broadcastScreen,\r\n \"Unable to get a list of \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n protected processDtoBeforeAddUpdate(dto: T): T {\r\n return dto;\r\n }\r\n\r\n addUpdateInternal(dto: T, screen: string, message: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n dto = this.processDtoBeforeAddUpdate(dto);\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/addupdate\",\r\n JSON.stringify(dto, this.jsonPropertyReplacer),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as T);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n jsonPropertyReplacer(key: string, value: any) {\r\n return value; //can be overidden to disable properties form going up\r\n }\r\n addUpdate(dtos: T): ng.IPromise {\r\n return this.addUpdateInternal(\r\n dtos,\r\n this.$broadcastScreen,\r\n \"Unable to add update \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n addUpdatereturnonlyidInternal(\r\n dto: T,\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n dto = this.processDtoBeforeAddUpdate(dto);\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/addupdatereturnonlyid\",\r\n JSON.stringify(dto, this.jsonPropertyReplacer),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n addUpdatereturnonlyid(dtos: T): ng.IPromise {\r\n return this.addUpdatereturnonlyidInternal(\r\n dtos,\r\n this.$broadcastScreen,\r\n \"Unable to add update \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n addUpdatelistInternal(\r\n dto: T[],\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(this.$baseAddress + \"/addupdatelist\", JSON.stringify(dto))\r\n .then((response) => {\r\n defer.resolve(response.data as T[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n addUpdatelist(dtos: T[]): ng.IPromise {\r\n return this.addUpdatelistInternal(\r\n dtos,\r\n this.$broadcastScreen,\r\n \"Unable to add update list \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n addUpdatelistreturnonlyidsInternal(\r\n dto: T[],\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/addupdatelistreturnonlyid\",\r\n JSON.stringify(dto),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n addUpdatelistreturnonlyids(dtos: T[]): ng.IPromise {\r\n return this.addUpdatelistreturnonlyidsInternal(\r\n dtos,\r\n this.$broadcastScreen,\r\n \"Unable to add update list \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n deleteInternal(\r\n id: IDT,\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .delete(this.$baseAddress + \"/remove/\" + id)\r\n .then(() => {\r\n defer.resolve(true);\r\n })\r\n .catch(() => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(false);\r\n });\r\n return defer.promise;\r\n }\r\n delete(id: IDT): ng.IPromise {\r\n return this.deleteInternal(\r\n id,\r\n this.$broadcastScreen,\r\n \"Unable to delete \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n markasdeletedInternal(\r\n id: IDT,\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .delete(this.$baseAddress + \"/markasdeleted/\" + id + \"/\")\r\n .then(() => {\r\n defer.resolve(true);\r\n })\r\n .catch(() => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(false);\r\n });\r\n return defer.promise;\r\n }\r\n markasdeleted(id: IDT): ng.IPromise {\r\n return this.markasdeletedInternal(\r\n id,\r\n this.$broadcastScreen,\r\n \"Unable to mark as deleted \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n isSavedObject(dto: T): boolean {\r\n return dto && (dto as any).Id && (dto as any).Id > 0;\r\n }\r\n}\r\n","import { AccountDTO } from \"@js/DTO/AccountDTO.cs.d\";\r\nimport { WebConfigDTO } from \"@js/DTO/WebConfigDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\n\r\nexport class AccountService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/account\";\r\n this.$broadcastBusinessNameSingular = \"Account\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n SendLoansAdvertEmail(\r\n name: string,\r\n from: string,\r\n To: string,\r\n themessage: string,\r\n ): ng.IPromise {\r\n themessage = themessage.replace(/\\n/g, \"
\");\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendloansadvertemail?name=\" +\r\n name +\r\n \"&from=\" +\r\n from +\r\n \"&To=\" +\r\n To +\r\n \"&themessage=\" +\r\n themessage,\r\n )\r\n .then((response) => {\r\n let results: boolean = response.data as boolean;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n SendFriendReferralEmail(\r\n username: string,\r\n usersurname: string,\r\n useremail: string,\r\n friendname: string,\r\n friendsurname: string,\r\n friendemail: string,\r\n friendbody: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendfriendreferralemail?username=\" +\r\n username +\r\n \"&usersurname=\" +\r\n usersurname +\r\n \"&useremail=\" +\r\n useremail +\r\n \"&friendname=\" +\r\n friendname +\r\n \"&friendsurname=\" +\r\n friendsurname +\r\n \"&friendemail=\" +\r\n friendemail +\r\n \"&friendbody=\" +\r\n friendbody,\r\n )\r\n .then((response) => {\r\n let results: boolean = response.data as boolean;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n RequestAssistanceReview(\r\n reason: string,\r\n caseid: number,\r\n productFamily: ProductFamilyEnum = ProductFamilyEnum.None,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/requestassistancereview?reason=\" +\r\n reason +\r\n \"&caseid=\" +\r\n caseid +\r\n \"&productFamily=\" +\r\n productFamily,\r\n )\r\n .then((response) => {\r\n let results: boolean = response.data as boolean;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n SendIntroducerRegistrationEmail(\r\n introducerEmail: string,\r\n introducerFirstName: string,\r\n introducerCode: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName = encodeURIComponent(introducerEmail);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendintroducerregistrationemail?introducerEmail=\" +\r\n encodeUserName +\r\n \"&introducerFirstName=\" +\r\n introducerFirstName +\r\n \"&introducerCode=\" +\r\n introducerCode,\r\n )\r\n .then((response) => {\r\n let results: boolean = response.data as boolean;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getFooterWebConfigValue(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getfooterwebconfigvalue\")\r\n .then((response) => {\r\n defer.resolve(response.data as WebConfigDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"getfooterwebconfigvalue\",\r\n \"web config Value failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { LicenseAppPackageDTO } from \"@js/DTO/LicenseAppPackageDTO.cs.d\";\r\nimport { PaymentSessionDTO } from \"@js/DTO/StripeSessionDTO.cs.d\";\r\n\r\nexport class AccountSettingService {\r\n $http: ng.IHttpService;\r\n $cookies: ng.cookies.ICookiesService;\r\n $rootScope: ng.IRootScopeService;\r\n $q: ng.IQService;\r\n $timeout: ng.ITimeoutService;\r\n $baseAddress: string;\r\n\r\n static $inject = [\"$http\", \"$cookies\", \"$rootScope\", \"$q\", \"$timeout\"];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n ) {\r\n this.$http = http;\r\n this.$cookies = cookies;\r\n this.$rootScope = rootScope;\r\n this.$q = q;\r\n this.$timeout = timeout;\r\n this.$baseAddress = \"/api/pay\";\r\n }\r\n\r\n createCheckoutSessionForUnpaid(\r\n products: AppPackagePricingDTO[],\r\n selectedUserName: string = \"\",\r\n isAddOnSelected: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName =\r\n selectedUserName != \"\" ? encodeURIComponent(selectedUserName) : \"\";\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/createcheckoutsessionforunpaid?selectedUserName=\" +\r\n encodeUserName +\r\n \"&isAddOnSelected=\" +\r\n isAddOnSelected,\r\n products,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as PaymentSessionDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n updateSubscription(\r\n products: AppPackagePricingDTO[],\r\n selectedUserName: string,\r\n isAddOnSelected: boolean,\r\n isUpdateWithPrecancel: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName = selectedUserName\r\n ? encodeURIComponent(selectedUserName)\r\n : selectedUserName;\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/updateplanprice?selectedUserName=\" +\r\n encodeUserName +\r\n \"&isAddOnSelected=\" +\r\n isAddOnSelected +\r\n \"&isUpdateWithPrecancel=\" +\r\n isUpdateWithPrecancel,\r\n products,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getSelectedPackagesForCurrentuser(\r\n userName: string = \"\",\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName = userName ? encodeURIComponent(userName) : userName;\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getselectedpackageforcurrentuser?userName=\" +\r\n encodeUserName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as LicenseAppPackageDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n assignLicense(userId: string, orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/assignlicense?userId=\" +\r\n userId +\r\n \"&orgId=\" +\r\n orgId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n unAssignLicense(userId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/unassignlicense?userId=\" + userId)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n updatePreCancelSubscription(\r\n products: AppPackagePricingDTO[],\r\n selectedUserName: string,\r\n isAddOnSelected: boolean,\r\n isUpdateWithPrecancel: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName = selectedUserName\r\n ? encodeURIComponent(selectedUserName)\r\n : selectedUserName;\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/updateprecancelsubscription?selectedUserName=\" +\r\n encodeUserName +\r\n \"&isAddOnSelected=\" +\r\n isAddOnSelected +\r\n \"&isUpdateWithPrecancel=\" +\r\n isUpdateWithPrecancel,\r\n products,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n assignCustomePrice(\r\n customPrice: string,\r\n numberOfLicenses: number,\r\n orgId: number,\r\n isAddOnSelected: boolean,\r\n isMonthlySubscription: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/assigncustomprice?customPrice=\" +\r\n customPrice +\r\n \"&numberOfLicenses=\" +\r\n numberOfLicenses +\r\n \"&orgId=\" +\r\n orgId +\r\n \"&isAddOnSelected=\" +\r\n isAddOnSelected +\r\n \"&isMonthlySubscription=\" +\r\n isMonthlySubscription,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n assignStandardPrice(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/assignstandardprice?orgId=\" + orgId)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n offerLeadGeneratorLicense(\r\n leadGenPackage: LicenseAppPackageDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/offerleadgeneratorlicense\", leadGenPackage)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n offerCustomPrice(\r\n customPrice: string,\r\n numberOfLicenses: number,\r\n orgId: number,\r\n isAddOnSelected: boolean,\r\n isMonthlySubscription: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/offercustomprice?customPrice=\" +\r\n customPrice +\r\n \"&numberOfLicenses=\" +\r\n numberOfLicenses +\r\n \"&orgId=\" +\r\n orgId +\r\n \"&isAddOnSelected=\" +\r\n isAddOnSelected +\r\n \"&isMonthlySubscription=\" +\r\n isMonthlySubscription,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /* addAddOnToLicense(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http.get(this.$baseAddress + \"/addaddontolicense?orgId=\" + orgId).then((response) => {\r\n defer.resolve(response.data as boolean);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n removeAddOnFromLicense(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http.get(this.$baseAddress + \"/removeaddonfromlicense?orgId=\" + orgId).then((response) => {\r\n defer.resolve(response.data as boolean);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }*/\r\n\r\n cancelLeadGeneratorOffer(\r\n selectedleadGenPackageId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/cancelleadgeneratoroffer?selectedleadGenPackageId=\" +\r\n selectedleadGenPackageId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class ApplicantService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/applicant\";\r\n this.$broadcastBusinessNameSingular = \"applicant\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n addOrUpdateCaseMember(\r\n dto: CaseMemberDTO,\r\n sendInviteEmail: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/addorupdatecasemember?sendInviteEmail=\" +\r\n sendInviteEmail,\r\n dto,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseMemberDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"AddOrUpdateCaseMember\",\r\n \"AddOrUpdateCaseMember failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { AssetLiabilityItemDTO } from \"@js/DTO/AssetLiabilityItemDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class AssetLiabilityItemService extends BaseService<\r\n AssetLiabilityItemDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/assetliability\";\r\n this.$broadcastBusinessNameSingular = \"assetliability\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { ApplicationUserBaseDTO } from \"@js/DTO/ApplicationUserBaseDTO.cs.d\";\r\nimport { RegistrationRequestDTO } from \"@js/DTO/RegistrationRequestDTO.cs.d\";\r\n\r\nexport class AuthServiceBase {\r\n testsite: boolean = null;\r\n calledtestsite: boolean = false;\r\n isLoadingTestSite: boolean = true\r\n constructor(\r\n protected $http: ng.IHttpService,\r\n protected $cookies: ng.cookies.ICookiesService,\r\n protected $rootScope: any,\r\n protected $q: ng.IQService,\r\n protected $timeout: ng.ITimeoutService,\r\n private $httpParamSerializerJQLike: ng.IHttpParamSerializer,\r\n ) {}\r\n\r\n // #region Base64\r\n base64encode(input: string): string {\r\n var keyStr =\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\r\n var output: any = \"\";\r\n var chr1: any,\r\n chr2: any,\r\n chr3: any = \"\";\r\n var enc1: any,\r\n enc2: any,\r\n enc3: any,\r\n enc4: any = \"\";\r\n var i = 0;\r\n do {\r\n chr1 = input.charCodeAt(i++);\r\n chr2 = input.charCodeAt(i++);\r\n chr3 = input.charCodeAt(i++);\r\n enc1 = chr1 >> 2;\r\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n enc4 = chr3 & 63;\r\n if (isNaN(chr2)) {\r\n enc3 = enc4 = 64;\r\n } else if (isNaN(chr3)) {\r\n enc4 = 64;\r\n }\r\n output =\r\n output +\r\n keyStr.charAt(enc1) +\r\n keyStr.charAt(enc2) +\r\n keyStr.charAt(enc3) +\r\n keyStr.charAt(enc4);\r\n chr1 = chr2 = chr3 = \"\";\r\n enc1 = enc2 = enc3 = enc4 = \"\";\r\n } while (i < input.length);\r\n return output;\r\n }\r\n\r\n base64decode(input: string): string {\r\n var keyStr =\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n var output: any = \"\";\r\n var chr1: any,\r\n chr2: any,\r\n chr3: any = \"\";\r\n var enc1: any,\r\n enc2: any,\r\n enc3: any,\r\n enc4: any = \"\";\r\n var i = 0;\r\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\r\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\r\n if (base64test.exec(input)) {\r\n window.alert(\r\n \"There were invalid base64 characters in the input text.\\n\" +\r\n \"Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\\n\" +\r\n \"Expect errors in decoding.\",\r\n );\r\n }\r\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n do {\r\n enc1 = keyStr.indexOf(input.charAt(i++));\r\n enc2 = keyStr.indexOf(input.charAt(i++));\r\n enc3 = keyStr.indexOf(input.charAt(i++));\r\n enc4 = keyStr.indexOf(input.charAt(i++));\r\n chr1 = (enc1 << 2) | (enc2 >> 4);\r\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n chr3 = ((enc3 & 3) << 6) | enc4;\r\n output = output + String.fromCharCode(chr1);\r\n if (enc3 !== 64) {\r\n output = output + String.fromCharCode(chr2);\r\n }\r\n if (enc4 !== 64) {\r\n output = output + String.fromCharCode(chr3);\r\n }\r\n chr1 = chr2 = chr3 = \"\";\r\n enc1 = enc2 = enc3 = enc4 = \"\";\r\n } while (i < input.length);\r\n return output;\r\n }\r\n // #endregion\r\n\r\n login(\r\n username: string,\r\n password: string,\r\n clientid: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$cookies.remove(\"user_type\");\r\n this.$cookies.remove(\"user_firstname\");\r\n\r\n this.$http.defaults.headers.common[\"Authorization\"] =\r\n \"Basic \" + this.base64encode(username + \":\" + password);\r\n this.$http({\r\n method: \"POST\",\r\n url: \"/oauth/token\",\r\n data: this.$httpParamSerializerJQLike({\r\n grant_type: \"password\",\r\n username: username,\r\n password: password,\r\n client_id: clientid,\r\n }),\r\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\r\n })\r\n .then((response) => {\r\n let t = new Date();\r\n t.setSeconds(t.getSeconds() + (response.data as any).expires_in);\r\n\r\n this.$cookies.put(\"access_token\", (response.data as any).access_token, {\r\n expires: t,\r\n });\r\n this.$cookies.put(\"access_token_expires\", t.toISOString(), {\r\n expires: t,\r\n });\r\n this.$http.defaults.headers.common.Authorization =\r\n \"Bearer \" + (response.data as any).access_token;\r\n\r\n defer.resolve(t);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n setCredentials(username: string, password: string) {\r\n var authdata = this.base64encode(username + \":\" + password);\r\n this.$rootScope[\"globals\"] = {\r\n currentUser: {\r\n username: username,\r\n authdata: authdata,\r\n },\r\n };\r\n this.$http.defaults.headers.common[\"Authorization\"] = \"Basic \" + authdata; // jshint ignore:line\r\n this.$cookies.putObject(\"globals\", this.$rootScope[\"globals\"]);\r\n }\r\n\r\n clearCredentials() {\r\n this.$rootScope[\"globals\"] = {};\r\n this.$cookies.remove(\"globals\");\r\n this.$cookies.remove(\"profile\");\r\n this.$http.defaults.headers.common.Authorization = \"Basic \";\r\n }\r\n\r\n registerAccount(newUser: RegistrationRequestDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\"/api/users/addupdate\", JSON.stringify(newUser))\r\n .then((response) => {\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(false);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n changePassword(\r\n oldPassword: string,\r\n newPassword: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n \"/api/users/changepassword?oldPassword=\" +\r\n encodeURIComponent(oldPassword) +\r\n \"&newPassword=\" +\r\n encodeURIComponent(newPassword),\r\n )\r\n .then((response) => {\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(false);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n changeEmail(newEmail: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\"/api/users/changeemail?email=\" + newEmail)\r\n .then((response) => {\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(false);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getProfile(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n if (this.$cookies.getObject(\"profile\")) {\r\n defer.resolve(this.$cookies.getObject(\"profile\") as T);\r\n } else {\r\n this.$http\r\n .get(\"/api/users/me\")\r\n .then((response) => {\r\n this.$cookies.putObject(\"profile\", response.data);\r\n defer.resolve(response.data as T);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n }\r\n return defer.promise;\r\n }\r\n getadminProfile(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n if (this.$cookies.getObject(\"profile\")) {\r\n defer.resolve(this.$cookies.getObject(\"profile\") as T);\r\n } else {\r\n this.$http\r\n .get(\"/api/users/meadminstatus\")\r\n .then((response) => {\r\n this.$cookies.putObject(\"profile\", response.data);\r\n defer.resolve(response.data as T);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n }\r\n return defer.promise;\r\n }\r\n\r\n getUserFirstname(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n if (this.$cookies.get(\"user_firstname\")) {\r\n // We have this cached. Let's return it straight away.\r\n defer.resolve(this.$cookies.get(\"user_firstname\") as string);\r\n } else {\r\n // Not cached, let's go fetch the data and cache it, then return.\r\n this.getProfile()\r\n .then((response) => {\r\n //this.$cookies.put('user_type', response.UserType);\r\n this.$cookies.put(\"user_firstname\", response.FirstName);\r\n defer.resolve(response.FirstName);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n }\r\n return defer.promise;\r\n }\r\n logout(): void {\r\n //delete headers\r\n\r\n this.$http.defaults.headers.common[\"Authorization\"] = undefined;\r\n\r\n //set to expire straight away as sometimes doesnt delete\r\n let t = new Date();\r\n t.setSeconds(t.getSeconds());\r\n\r\n this.$cookies.put(\"access_token\", \"\", {\r\n expires: t,\r\n });\r\n this.$cookies.put(\"access_token_expires\", t.toISOString(), {\r\n expires: t,\r\n });\r\n\r\n this.$cookies.remove(\"profile\");\r\n this.$cookies.remove(\"access_token\");\r\n this.$cookies.remove(\"access_token_expires\");\r\n\r\n for (var x in this.$cookies.getAll()) {\r\n this.$cookies.remove(x, { path: \"/\" });\r\n }\r\n\r\n localStorage.clear();\r\n }\r\n\r\n resetPassword(userName: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\"/api/users/passwordreset?userName=\" + userName)\r\n .then((response) => {\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(false);\r\n });\r\n return defer.promise;\r\n }\r\n public AmIATestSite(force: boolean = false) {\r\n if (this.testsite == null || force) {\r\n if (!this.testsite) {\r\n if (this.calledtestsite) {\r\n return false;\r\n }\r\n this.calledtestsite = true;\r\n this.isLoadingTestSite = true;\r\n this.callamIATestSite()\r\n .then((result) => {\r\n this.testsite = result;\r\n })\r\n .catch(() => {\r\n this.testsite = false;\r\n })\r\n .finally(() => {\r\n this.calledtestsite = false;\r\n this.isLoadingTestSite = false;\r\n });\r\n }\r\n } else {\r\n return this.testsite;\r\n }\r\n }\r\n private callamIATestSite(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\"/api/static/amiatestsite\")\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(false);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AuthServiceBase } from \"@js/filesfromccqbase/AuthServiceBase\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { RoleService } from \"./RoleService\";\r\n\r\nexport class AuthService extends AuthServiceBase {\r\n\r\n isValidStatus: boolean;\r\n\r\n static $inject = [\r\n \"$http\",\r\n\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"$httpParamSerializerJQLike\",\r\n \"BroadcastService\",\r\n \"$location\",\r\n \"RoleService\",\r\n ];\r\n\r\n isLoggedIn: boolean = false;\r\n configSettings: { [key: string]: string }[];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n httpParamSerializerJQLike: ng.IHttpParamSerializer,\r\n private $broadcastservice: BroadcastService,\r\n private $location: ng.ILocationService,\r\n protected roleService: RoleService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, httpParamSerializerJQLike);\r\n }\r\n\r\n setProfileCookie(profile: ApplicationUserDTO) {\r\n this.$cookies.putObject(\"profile\", profile);\r\n }\r\n\r\n logout(callLogin: boolean = true) {\r\n //TODO:CHECK THIS possibly meant to be?? this.$cookies.remove(\"token\");\r\n delete (this.$cookies as any).token;\r\n delete (this.$cookies as any).loggedUser;\r\n delete (this.$cookies as any).loggedUserID;\r\n delete (this.$cookies as any).tokenValidTo;\r\n delete (this.$cookies as any).access_token;\r\n this.isLoggedIn = false;\r\n (this.$rootScope as any).selectedUser = null;\r\n (this.$rootScope as any).loanCriteria = null; //reset the loancriteria\r\n (this.$rootScope as any).currentUser = null;\r\n this.roleService.resetUserRoles(); //clear user roles\r\n super.logout();\r\n sessionStorage.clear();\r\n if (callLogin) {\r\n this.$location.path(\"#!/login\");\r\n }\r\n }\r\n\r\n getIsLoggedIn(): boolean {\r\n return this.isLoggedIn;\r\n }\r\n\r\n setIsLoggedIn(isLoggedIn: boolean) {\r\n this.isLoggedIn = isLoggedIn;\r\n }\r\n getUpdatedProfile(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/users/me\")\r\n .then((response) => {\r\n this.$cookies.putObject(\"profile\", response.data);\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getHubspotDeveloperBookMeetingNoSearch(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/gethubspotdeveloperbookmeetingnosearch\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getHubspotDeveloperBookMeetingWithSearch(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/gethubspotdeveloperbookmeetingwithsearch\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getHubspotContactUsBookMeeting(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/gethubspotcontactusbookmeeting\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getWhiteLabelledUrl(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/getwhitelabelledurl\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getShowBridgingLenderSnapshot(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/getshowbridginglendersnapshot\")\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getShowBridgingEligibility(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/getshowbridgingeligibility\")\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getCompanyContactUsEmailAddresss(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/getcompanycontactusemailaddress\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n isCommercialOwnerOccupiedActive(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/iscommercialowneroccupiedactive\")\r\n .then((response) => {\r\n defer.resolve((response.data as string).toLowerCase() == \"true\");\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getReferralContactDetails(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/getreferralcontactdetails\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n clearStorageData() {\r\n sessionStorage.removeItem(\"userRole\");\r\n sessionStorage.removeItem(\"userDetails\");\r\n sessionStorage.removeItem(\"assignUserToOrg\");\r\n sessionStorage.removeItem(\"isUpgradedUser\");\r\n sessionStorage.removeItem(\"skip\");\r\n sessionStorage.removeItem(\"projectname\");\r\n sessionStorage.removeItem(\"selectedPackage\");\r\n sessionStorage.removeItem(\"returningFromdeletedSearch\");\r\n sessionStorage.removeItem(\"addAddon\");\r\n sessionStorage.removeItem(\"selectedProduct\");\r\n sessionStorage.removeItem(\"searchuser\");\r\n sessionStorage.removeItem(\"clientId\");\r\n sessionStorage.removeItem(\"lenderTask\");\r\n sessionStorage.removeItem(\"loanCriteria\");\r\n sessionStorage.removeItem(\"DealClientUniqueRef\");\r\n sessionStorage.removeItem(\"TempSavedResults\");\r\n sessionStorage.removeItem(\"SelectedUser\");\r\n sessionStorage.removeItem(\"UniqueId\");\r\n sessionStorage.removeItem(\"loanCriteria\");\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n sessionStorage.removeItem('previousRoute');\r\n }\r\n\r\n clearSelectedNavMenuAndFilterStorageData() {\r\n sessionStorage.removeItem(\"selectedNavMenu\");\r\n sessionStorage.removeItem(\"clientCaseNameFilter\");\r\n sessionStorage.removeItem(\"statusFilter\");\r\n // Clearing a property value which will show confirm a client phone number modal as soon as they register through enterprise journey.\r\n sessionStorage.removeItem('showConfirmClientPhoneNo');\r\n }\r\n\r\n getHasValidStatustoShowShareSearchModal() {\r\n return this.isValidStatus;\r\n }\r\n\r\n setHasValidStatustoShowShareSearchModal(isValidStatus) {\r\n this.isValidStatus = isValidStatus;\r\n }\r\n \r\n\r\n getConnectNetworkOrgId(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\"/api/static/getconnectnetworkorgid\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n}\r\n","//fetchByCaseId - /fetchByCaseId\r\n\r\nimport { DealDTO } from \"@js/DTO/Deal/DealDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\n//saveAddressHistory - /saveaddresshistory\r\n\r\nexport class BridgingCaseService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/bridgingcase\";\r\n this.$broadcastBusinessNameSingular = \"bridgingcase\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { BridgingSearchResultsResponse } from \"@js/DTO/Messages/BridgingSearchResultMessage.cs.d\";\r\nimport { SearchResultsRequest } from \"@js/DTO/Messages/Deal/SearchResultMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class BridgingSearchService extends BaseService<\r\n BridgingDealDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/bridgingsearch\";\r\n this.$broadcastBusinessNameSingular = \"bridgingsearch\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Gets the search criteria and the search results based on the search criteria ID passed in\r\n * @param criteriaId\r\n * @param criteriaChanged - has the search criteria chaged? Used for snapshotting.\r\n * @param limit - the number of search results to display TODO - is this needed for search results????\r\n * @param debug1\r\n * @param debug2\r\n */\r\n getSearchCriteriaAndResultsByDealId(\r\n dealId: number,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealId: dealId,\r\n DealClientUniqueRef: null,\r\n DealUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n /**\r\n * Gets the search criteria and the search results based on the DealClient UniqueRef passed in\r\n * @param criteriaId\r\n * @param limit - the number of search results to display TODO - is this needed for search results????\r\n * @param debug1\r\n * @param debug2\r\n */\r\n getSearchCriteriaAndResultsByDealClientUniqueRef(\r\n dealClientUniqueRef: string,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealClientUniqueRef: dealClientUniqueRef,\r\n DealUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n /**\r\n * Gets the search criteria and the search results based on the search unique ref passed in\r\n * @param dealUniqueref\r\n * @param criteriaChanged - has the search criteria chaged? Used for snapshotting.\r\n * @param limit - the number of search results to display TODO - is this needed for search results????\r\n * @param debug1\r\n * @param debug2\r\n */\r\n getSearchCriteriaAndResultsByDealUniqueRef(\r\n dealUniqueref: string,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealId: null,\r\n DealUniqueRef: dealUniqueref,\r\n DealClientUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n /**\r\n * Fetches the Bridging Search based on the request passed in\r\n * @param request\r\n */\r\n private getSearchCriteriaAndResults(\r\n request: SearchResultsRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/getsearchcriteriaandresults\",\r\n JSON.stringify(request),\r\n )\r\n .then((response) => {\r\n var res = response.data as BridgingSearchResultsResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { CaseLenderMessageDTO } from \"@js/DTO/CaseLenderMessageDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class CaseLenderMessageService extends BaseService<\r\n CaseLenderMessageDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/caselendermessage\";\r\n this.$broadcastBusinessNameSingular = \"caselendermessage\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n updateCaseLenderMessageReadDatetime(\r\n caseLenderId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/updatecaselendermessagereaddatetime?caseLenderId=\" +\r\n caseLenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"updateCaseLenderMessageReadDatetime\",\r\n \"update CaseLender Message Read Datetime failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { CaseLenderChangedMessageDTO } from \"@js/DTO/CaseLenderChangedMessageDTO.cs.d\";\r\nimport { CaseLenderDTO } from \"@js/DTO/CaseLenderDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\n\r\nexport class CaseLenderService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/caselender\";\r\n this.$broadcastBusinessNameSingular = \"caselender\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n submitHoT(\r\n CaseLender: CaseLenderDTO,\r\n caseLenderState: CaseLenderStateEnum,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress + \"/submitoffer?caseLenderState=\" + caseLenderState,\r\n JSON.stringify(CaseLender),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n rejectCase(\r\n CaseLender: CaseLenderDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(this.$baseAddress + \"/reject\", JSON.stringify(CaseLender))\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n withdrawHoT(\r\n CaseLender: CaseLenderDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(this.$baseAddress + \"/withdraw\", JSON.stringify(CaseLender))\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n accept(CaseLender: CaseLenderDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(this.$baseAddress + \"/accept\", JSON.stringify(CaseLender))\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n cancel(CaseLender: CaseLenderDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(this.$baseAddress + \"/cancel\", JSON.stringify(CaseLender))\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n applyToLender(\r\n CaseId: number,\r\n CaseLenderId: number,\r\n SendEmails: boolean = true,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/apply?caseId=\" +\r\n CaseId +\r\n \"&caseLenderId=\" +\r\n CaseLenderId +\r\n \"&sendEmails=\" +\r\n SendEmails,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n cancelApplication(\r\n caseId: number,\r\n caseLenderId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/cancel?caseId=\" +\r\n caseId +\r\n \"&caseLenderId=\" +\r\n caseLenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendFeedbackToBorrower(\r\n CaseLender: CaseLenderDTO,\r\n CaseOwner: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(\r\n this.$baseAddress + \"/sendfeedbacktoborrower?caseOwner=\" + CaseOwner,\r\n JSON.stringify(CaseLender),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendFeedbackToLender(CaseLender: CaseLenderDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress + \"/sendfeedbacktolender\",\r\n JSON.stringify(CaseLender),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchByCaseId(\r\n CaseId: number,\r\n debug2?: boolean,\r\n CaseLenderId?: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/fetchByCaseId?CaseId=\" +\r\n CaseId +\r\n \"&debug2=\" +\r\n debug2 +\r\n \"&CaseLenderId=\" +\r\n CaseLenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchbycaseID\",\r\n \"Fetchby case id failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchCaseLender(CaseId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchcaselender?CaseId=\" + CaseId)\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchCaseLender\",\r\n \"Fetch caselender id failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getSelectedCaseLender(\r\n Id: number,\r\n showLenderNames: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/selectedcaselender?Id=\" +\r\n Id +\r\n \"&showLenderNames?=\" +\r\n showLenderNames,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"getSelectedCaseLender\",\r\n \"get selected case lender failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getStatusTextForLender(\r\n caseLenderState: CaseLenderStateEnum,\r\n IsBidAccepted: boolean,\r\n ): string {\r\n var statusText = \"\";\r\n switch (caseLenderState) {\r\n case CaseLenderStateEnum.Offered:\r\n case CaseLenderStateEnum.SentToPackager: {\r\n statusText = IsBidAccepted\r\n ? \"DIP submitted and accepted\"\r\n : \"DIP submitted\";\r\n break;\r\n }\r\n case CaseLenderStateEnum.Received:{\r\n statusText = \"Case to review\";\r\n break;\r\n }\r\n case CaseLenderStateEnum.Rejected: {\r\n statusText = \"Case rejected\";\r\n break;\r\n }\r\n case CaseLenderStateEnum.Withdrawn: {\r\n statusText = \"DIP withdrawn\";\r\n break;\r\n }\r\n case CaseLenderStateEnum.Cancelled: {\r\n statusText = \"Application cancelled\";\r\n break;\r\n }\r\n case CaseLenderStateEnum.Applied: {\r\n statusText = \"DIP submitted and accepted\";\r\n break;\r\n }\r\n }\r\n\r\n return statusText;\r\n }\r\n}\r\n","import { CaseMemberDTO } from \"@js/DTO/CaseMemberDTO.cs.d\";\r\nimport { SecurityCheckMessageRequest } from \"@js/DTO/Messages/SecurityCheckMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class CaseMemberService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/applicant\";\r\n this.$broadcastBusinessNameSingular = \"applicant\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n fetchByCaseId(CaseId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchByCaseId?CaseId=\" + CaseId)\r\n .then((response) => {\r\n defer.resolve(response.data as CaseMemberDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchbycaseID\",\r\n \"Fetchby case id failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n inviteApplicant(uniqueId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/inviteApplicant?uniqueId=\" + uniqueId)\r\n .then((response) => {\r\n defer.resolve(response.data as CaseMemberDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"inviteApplicant\",\r\n \"inviteApplicant failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n securityCheck(\r\n uniqueId: string,\r\n phone?: string,\r\n postcode?: string,\r\n dob?: Date,\r\n orgUniqueRef?: string,\r\n brokerUserId?: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n UniqueId: uniqueId,\r\n PhoneNumber: phone,\r\n PostCode: postcode,\r\n DateOfBirth: dob,\r\n OrgUniqueRef: orgUniqueRef,\r\n BrokerUserId: brokerUserId,\r\n } as SecurityCheckMessageRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/securityCheck\", request)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"securityCheck\",\r\n \"securityCheck failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Get the security questions that have been answered\r\n * @param caseMemberId\r\n */\r\n getSecurityQuestions(uniqueId: string) {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getsecurityquestions?uniqueId=\" + uniqueId)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"getsecurityquestions\",\r\n \"getsecurityquestions failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n *Get the email for the shareholder\r\n * @param caseMemberId\r\n */\r\n fetchCaseMemberAndReturnEmail(uniqueId: string) {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/fetchCaseMemberAndReturnEmail?uniqueId=\" +\r\n uniqueId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchCaseMemberAndReturnEmail\",\r\n \"fetchCaseMemberAndReturnEmail failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n *To copy all shareholders from a copied case\r\n * @param CaseId and DevelopmentInputId\r\n */\r\n copyShareholder(caseId: number, newCaseId: number) {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/copyShareholder?caseId=\" +\r\n caseId +\r\n \"&newCaseId=\" +\r\n newCaseId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"copyShareholder\",\r\n \"copyShareholder failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n *fetch shareholder by uniqueId\r\n * @param uniqueId and DevelopmentInputId\r\n */\r\n fetchCaseMember(uniqueId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/FetchCaseMemberAndReturnRegisterInformation?uniqueId=\" +\r\n uniqueId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseMemberDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"FetchCaseMemberAndReturnRegisterInformation\",\r\n \"FetchCaseMemberAndReturnRegisterInformation failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n markAsDeleteAndSetNextCaseMenmberAsPrimary(\r\n caseId: number,\r\n caseMemberId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/MarkAsDeleteAndSetNextCaseMemberAsPrimary?caseId=\" +\r\n caseId +\r\n \"&caseMemberId=\" +\r\n caseMemberId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseMemberDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchbycaseID\",\r\n \"Fetchby case id failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveAddressHistory(\r\n caseMemberId: number,\r\n addressHistory: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(\r\n this.$baseAddress + \"/saveaddresshistory?caseMemberId=\" + caseMemberId,\r\n JSON.stringify(addressHistory),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"saveAddressHistory\",\r\n \"Save Address History failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getWebConfigValue(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getWebConfigValue\")\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"getWebConfigValue\",\r\n \"web config Value failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchcasememberswithaccess(caseId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchcasememberswithaccess?caseId=\" + caseId)\r\n .then((response) => {\r\n defer.resolve(response.data as CaseMemberDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchcasememberswithaccess\",\r\n \"fetchcasememberswithaccess failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { CaseNoteDTO } from \"@js/DTO/CaseNoteDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class CaseNoteService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/casenote\";\r\n this.$broadcastBusinessNameSingular = \"casenote\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { CaseChangedMessageDTO } from \"@js/DTO/CaseChangedMessageDTO.cs.d\";\r\nimport { CaseDTO } from \"@js/DTO/CaseDTO.cs.d\";\r\nimport { CaseNoteDTO } from \"@js/DTO/CaseNoteDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport {\r\n AssignLenderToDealRequest,\r\n AssignLenderToDealResponse,\r\n} from \"@js/DTO/Messages/AssignLenderToDealMessage.cs.d\";\r\nimport { LenderInfo } from \"@js/DTO/Messages/Deal/LendersInfoForSubmitToLenderMessage.cs.d\";\r\nimport { NewBlankCaseDTO } from \"@js/DTO/NewBlankCaseDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { DevelopmentInputService } from \"./DevelopmentInputService\";\r\nimport { RoleService } from \"./RoleService\";\r\nimport { UserService } from \"./UserService\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\n\r\nexport class CaseService extends BaseService {\r\n private caseStatusEnum = {\r\n Search: undefined,\r\n NewCase: 0,\r\n InProgress: 1,\r\n UnderReview: 2,\r\n ReadyToSubmit: 3,\r\n SubmittedToLendersForHoT: 4,\r\n PaymentReceived: 8,\r\n ReadyToReSubmit: 12,\r\n Applied: 5,\r\n CreditApproved: 10,\r\n WithProfessionals: 11,\r\n Completed: 6,\r\n Dormant: 7,\r\n SubmittedToLendersPendingReview: 9,\r\n SentToPackager: 13,\r\n };\r\n\r\n currentLender;\r\n tubeMapStatus;\r\n isProceed: boolean;\r\n task: string;\r\n IsSupplimentInfoFilled: boolean;\r\n\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n \"DevelopmentInputService\",\r\n \"UserService\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n private rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n private $DevelopmentInputservice: DevelopmentInputService,\r\n private $user: UserService,\r\n private $roleService: RoleService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/case\";\r\n this.$broadcastBusinessNameSingular = \"case\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n promotesearchtocase(\r\n searchId: number,\r\n productId: number,\r\n productResultList: number,\r\n isPrimaryApplicant: boolean = true,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/promotesearchtocase?searchId=\" +\r\n searchId +\r\n \"&productId=\" +\r\n productId +\r\n \"&productResultList=\" +\r\n productResultList +\r\n \"&isPrimaryApplicant=\" +\r\n isPrimaryApplicant,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n promoteandmigratetodeal(\r\n searchId: number,\r\n productId: number,\r\n productResultList: number,\r\n isPrimaryApplicant: boolean = true,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/promoteandmigratetodeal?searchId=\" +\r\n searchId +\r\n \"&productId=\" +\r\n productId +\r\n \"&productResultList=\" +\r\n productResultList +\r\n \"&isPrimaryApplicant=\" +\r\n isPrimaryApplicant,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n setProductOnCase(\r\n CaseId: number,\r\n productId: number,\r\n productResultList: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/setproductoncase?caseId=\" +\r\n CaseId +\r\n \"&productId=\" +\r\n productId +\r\n \"&productResultList=\" +\r\n productResultList,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n public updateCaseState(caseId: number, caseStatus: CaseStatusEnum): void {\r\n const caseStatusString: string = Object.keys(this.caseStatusEnum).find(\r\n (key) => this.caseStatusEnum[key] === caseStatus,\r\n );\r\n if (!(this.rootScope as any).caseStateChange) {\r\n (this.rootScope as any).caseStateChange = {};\r\n }\r\n (this.rootScope as any).caseStateChange[caseId] = caseStatusString;\r\n this.rootScope.$broadcast(\"caseStateChange\", {\r\n id: caseId,\r\n status: caseStatusString,\r\n });\r\n }\r\n\r\n public onStateChange(caseId, callback: (caseStatus: string) => void): void {\r\n // TODO JNG Review using a single rootscope listener with an array of callbacks per caseId.\r\n this.rootScope.$on(\r\n \"caseStateChange\",\r\n function (event, statusUpdate: { id: number; status: string }) {\r\n if (statusUpdate.id === caseId) {\r\n callback(statusUpdate.status);\r\n }\r\n },\r\n );\r\n }\r\n\r\n setStatusOnCase(\r\n caseId: number,\r\n caseStatus: CaseStatusEnum,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/setstatusoncase?caseId=\" +\r\n caseId +\r\n \"&caseStatus=\" +\r\n caseStatus,\r\n )\r\n .then((response) => {\r\n //TODO JLH Ideally setstatusoncase should return a CaseChangedMessageDTO and we should use teh status on that to send to updateCaseState\r\n this.updateCaseState(caseId, caseStatus);\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n setApplyStatus(CaseId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/setapplystatus?caseId=\" + CaseId)\r\n .then((response) => {\r\n defer.resolve(response.data as CaseStatusEnum);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getcasefromsearch(searchId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getcasefromsearch?searchId=\" + searchId)\r\n .then((response) => {\r\n defer.resolve(response.data as CaseDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getCaseLenderById(searchId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getcaselenderbyid?searchId=\" + searchId)\r\n .then((response) => {\r\n defer.resolve(response.data as CaseDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n SendPreAppEmail(caseid: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/sendpreappemail?caseid=\" + caseid)\r\n .then((response) => {\r\n let results: boolean = response.data as boolean;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendNoteToBorrower(\r\n clientFirstName: string,\r\n clientSurname: string,\r\n clientEmail: string,\r\n note: string,\r\n caseId: number,\r\n section: number,\r\n suplId: number,\r\n DevelopmentExperienceID: number,\r\n ): ng.IPromise {\r\n note = note.replace(/\\n/g, \"
\");\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendnote?clientFirstName=\" +\r\n clientFirstName +\r\n \"&clientSurname=\" +\r\n clientSurname +\r\n \"&clientEmail=\" +\r\n clientEmail +\r\n \"&Note=\" +\r\n note +\r\n \"&caseId=\" +\r\n caseId +\r\n \"§ion=\" +\r\n section +\r\n \"&suplId=\" +\r\n suplId +\r\n \"&DevelopmentExperienceID=\" +\r\n DevelopmentExperienceID,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getCurrentCase(lender) {\r\n this.currentLender = lender;\r\n return this.currentLender;\r\n }\r\n\r\n requestReview(\r\n caseId: number,\r\n confirmPhoneNumber: string,\r\n requestMessageReason: string,\r\n ) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/requestreview?caseId=\" +\r\n caseId +\r\n \"&confirmPhoneNumber=\" +\r\n confirmPhoneNumber +\r\n \"&requestMessageReason=\" +\r\n requestMessageReason,\r\n )\r\n .then((response) => {\r\n const caseChangedMessage = response.data as CaseChangedMessageDTO;\r\n this.updateCaseState(caseId, caseChangedMessage.CaseState);\r\n defer.resolve(caseChangedMessage);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n requestAdminReview(caseId: number) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/requestAdminReview?caseId=\" + caseId)\r\n .then((response) => {\r\n const caseChangedMessage = response.data as CaseChangedMessageDTO;\r\n this.updateCaseState(caseId, caseChangedMessage.CaseState);\r\n defer.resolve(caseChangedMessage);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n approve(caseId: number) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/approve?caseId=\" + caseId)\r\n .then((response) => {\r\n const caseChangedMessage = response.data as CaseChangedMessageDTO;\r\n this.updateCaseState(caseId, caseChangedMessage.CaseState);\r\n defer.resolve(caseChangedMessage);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n submitToLenders(\r\n caseId: number,\r\n brokerCommission: number,\r\n lendersInfo: LenderInfo[],\r\n brokerPhoneNumber: string,\r\n isBrokerPhoneNumberUpdated: boolean,\r\n ) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/submittolenders?caseId=\" +\r\n caseId +\r\n \"&brokerCommission=\" +\r\n brokerCommission +\r\n \"&brokerPhoneNumber=\" +\r\n brokerPhoneNumber +\r\n \"&isBrokerPhoneNumberUpdated=\" +\r\n isBrokerPhoneNumberUpdated,\r\n lendersInfo,\r\n )\r\n .then((response) => {\r\n const caseChangedMessage = response.data as CaseChangedMessageDTO;\r\n this.updateCaseState(caseId, caseChangedMessage.CaseState);\r\n defer.resolve(caseChangedMessage);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n resubmitToLenders(\r\n caseId: number,\r\n brokerCommission: number,\r\n lendersInfo: LenderInfo[],\r\n brokerPhoneNumber: string,\r\n isBrokerPhoneNumberUpdated: boolean,\r\n hasCriteriaChanged: boolean = false,\r\n ) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/resubmittolenders?caseId=\" +\r\n caseId +\r\n \"&brokerCommission=\" +\r\n brokerCommission +\r\n \"&hasCriteriaChanged=\" +\r\n hasCriteriaChanged +\r\n \"&brokerPhoneNumber=\" +\r\n brokerPhoneNumber +\r\n \"&isBrokerPhoneNumberUpdated=\" +\r\n isBrokerPhoneNumberUpdated,\r\n lendersInfo,\r\n )\r\n .then((response) => {\r\n const caseChangedMessage = response.data as CaseChangedMessageDTO;\r\n this.updateCaseState(caseId, caseChangedMessage.CaseState);\r\n defer.resolve(caseChangedMessage);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n updateTubeMap(caseStatus) {\r\n switch (caseStatus) {\r\n case CaseStatusEnum.Search:\r\n this.tubeMapStatus = 0;\r\n break;\r\n case CaseStatusEnum.NewCase:\r\n this.tubeMapStatus = 2;\r\n break;\r\n case CaseStatusEnum.InProgress:\r\n this.tubeMapStatus = 2;\r\n break;\r\n case CaseStatusEnum.UnderReview:\r\n this.tubeMapStatus = 2;\r\n break;\r\n case CaseStatusEnum.ReadyToSubmit:\r\n this.tubeMapStatus = 3;\r\n break;\r\n case CaseStatusEnum.SubmittedToLendersPendingReview:\r\n this.tubeMapStatus = 2;\r\n break;\r\n case CaseStatusEnum.SubmittedToLendersForHoT:\r\n this.tubeMapStatus = 4;\r\n break;\r\n case CaseStatusEnum.Applied:\r\n this.tubeMapStatus = 4;\r\n break;\r\n case CaseStatusEnum.CreditApproved:\r\n this.tubeMapStatus = 5;\r\n break;\r\n case CaseStatusEnum.WithProfessionals:\r\n this.tubeMapStatus = 6;\r\n break;\r\n case CaseStatusEnum.Completed:\r\n this.tubeMapStatus = 7;\r\n break;\r\n case CaseStatusEnum.Dormant:\r\n this.tubeMapStatus = 7;\r\n break;\r\n default:\r\n this.tubeMapStatus = 1;\r\n }\r\n }\r\n\r\n getTubeMap() {\r\n return this.tubeMapStatus;\r\n }\r\n\r\n getIsProceed() {\r\n return this.isProceed;\r\n }\r\n\r\n setIsProceed(isProceed) {\r\n this.isProceed = isProceed;\r\n }\r\n\r\n //Create a new blank case\r\n newBlankCase(currentUser, isPrimaryApplicant): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var currentdate = new Date();\r\n\r\n var SearchName =\r\n \"My Loan Search \" +\r\n currentdate.getDate() +\r\n \"/\" +\r\n (currentdate.getMonth() + 1) +\r\n \"/\" +\r\n currentdate.getFullYear();\r\n\r\n let newDTO = {} as DevelopmentInputDTO;\r\n newDTO.OwnerUser = currentUser.UserName;\r\n newDTO.UserId = currentUser.Id;\r\n newDTO.SaveQueryAndResults = true;\r\n newDTO.SearchName = SearchName;\r\n newDTO.CI_Dev_Contingency = 0.05;\r\n newDTO.CI_Dev_BuildTerm = 12;\r\n newDTO.CI_Dev_LoanTermReq = 18;\r\n newDTO.CI_Dev_DateOfOrigPurch = new Date();\r\n\r\n // lookup the broker info for the current user and Set the broker info on to the search\r\n this.$user.getBrokerOrganisationId().then((organisationId: number) => {\r\n if (organisationId != null) {\r\n newDTO.BrokerOrganisationId = organisationId;\r\n\r\n this.$roleService.isBroker().then((isBroker: boolean) => {\r\n if (!isBroker) {\r\n this.$user\r\n .GetOrganisationAdminUserId(organisationId)\r\n .then((orgAdminUserId: string) => {\r\n newDTO.BrokerUserId = orgAdminUserId;\r\n });\r\n } else {\r\n newDTO.BrokerUserId = currentUser.Id;\r\n }\r\n });\r\n }\r\n\r\n this.$DevelopmentInputservice.saveSearch(newDTO).then((response) => {\r\n let newBlankCaseDTO = {} as NewBlankCaseDTO;\r\n newBlankCaseDTO.NewSearchId = response;\r\n\r\n newDTO.Id = response;\r\n this.promotesearchtocase(newDTO.Id, null, null, isPrimaryApplicant)\r\n .then((newCaseId: number) => {\r\n newBlankCaseDTO.NewSearchId = response;\r\n newBlankCaseDTO.NewCaseId = newCaseId;\r\n\r\n defer.resolve(newBlankCaseDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(newBlankCaseDTO);\r\n });\r\n });\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Change the broker organisation\r\n * @param caseId\r\n * @param organisationId\r\n */\r\n changeBrokerOrganisation(\r\n caseId: number,\r\n organisationId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/setbrokerorganisation?caseId=\" +\r\n caseId +\r\n \"&organisationId=\" +\r\n organisationId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseNoteDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Change the broker organisation user\r\n * @param caseId\r\n * @param organisationId\r\n */\r\n changeBrokerUser(\r\n caseId: number,\r\n brokerUserId: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/setbrokeruser?caseId=\" +\r\n caseId +\r\n \"&brokerUserId=\" +\r\n brokerUserId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseNoteDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getLenderTask() {\r\n return this.task;\r\n }\r\n\r\n setLenderTask(task) {\r\n this.task = task;\r\n }\r\n\r\n getIsSupplimentInfoFilled() {\r\n return this.IsSupplimentInfoFilled;\r\n }\r\n\r\n setIsSupplimentInfoFilled(IsSupplimentInfoFilled) {\r\n this.IsSupplimentInfoFilled = IsSupplimentInfoFilled;\r\n }\r\n\r\n checkIfUserIsInvited(userId: string, caseId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/isuserinvitedtocase?userId=\" +\r\n userId +\r\n \"&caseId=\" +\r\n caseId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n autofillCase(caseDTO: CaseDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(this.$baseAddress + \"/autofill\", JSON.stringify(caseDTO))\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n shortlistMoreLenders(\r\n caseId: number,\r\n hasCriteriaChanged: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/shortlistmorelenders?caseId=\" +\r\n caseId +\r\n \"&hasCriteriaChanged=\" +\r\n hasCriteriaChanged,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n assignBrokerToCase(\r\n caseId: number,\r\n brokerUserId: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/assignbrokertocase?caseId=\" +\r\n caseId +\r\n \"&brokerUserId=\" +\r\n brokerUserId,\r\n \"\",\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n assignLenderToCase(\r\n caseId: number,\r\n lenderId: number,\r\n lenderUserId: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n DealId: caseId,\r\n LenderId: lenderId,\r\n LenderUserId: lenderUserId,\r\n } as AssignLenderToDealRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/assignlendertocase\", request)\r\n .then((response) => {\r\n var res = response.data as AssignLenderToDealResponse;\r\n defer.resolve(res.IsSuccess);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveSaveAsSearch(\r\n searchId: number,\r\n shareDealDto: ShareDealDTO,\r\n attachClient: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/savesaveassearch?searchId=\" +\r\n searchId +\r\n \"&attachClient=\" +\r\n attachClient,\r\n shareDealDto,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { CaseSummaryDTO } from \"@js/DTO/CaseSummaryDTO.cs.d\";\r\nimport {\r\n GetCasesForUserRequest,\r\n GetCasesForUserResponse,\r\n} from \"@js/DTO/Dashboard/GetCasesForUserMessage.cs.d\";\r\nimport {\r\n GetSearchesForUserRequest,\r\n GetSearchesForUserResponse,\r\n} from \"@js/DTO/Dashboard/GetSearchesForUserMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\n\r\nexport class CaseSummaryService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/dashboard\";\r\n this.$broadcastBusinessNameSingular = \"dashboard\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n ////getmycasesandsearches(username: string, clientCaseNameFilter: string = null, statusFilter: CaseStatusEnum = null, limit: number = 100): ng.IPromise {\r\n //// let defer = this.$q.defer();\r\n //// var encodeUserName = encodeURIComponent(username);\r\n\r\n //// var apiUrl = this.$baseAddress + \"/getcasesandsearches?username=\" + encodeUserName;\r\n\r\n //// if (clientCaseNameFilter != null && clientCaseNameFilter.length > 0) {\r\n //// apiUrl = apiUrl + '&clientCaseName=' + clientCaseNameFilter;\r\n //// }\r\n\r\n //// if (statusFilter != null) {\r\n //// apiUrl = apiUrl + '&status=' + statusFilter;\r\n //// }\r\n\r\n //// apiUrl = apiUrl + '&limit=' + limit;\r\n\r\n //// this.$http.get(apiUrl).then((response) => {\r\n //// defer.resolve(response.data as CaseSummaryDTO[]);\r\n //// }).catch((response) => {\r\n //// this.$broadcastservice.broadcastError(\"Mycasesummary\", \"Mycasesummary by user failed\");\r\n //// defer.reject(response);\r\n //// });\r\n //// return defer.promise;\r\n ////}\r\n\r\n //getmycases(username: string, clientCaseNameFilter: string = null, statusFilter: CaseStatusEnum = null, limit: number = 100): ng.IPromise {\r\n // let defer = this.$q.defer();\r\n // var encodeUserName = encodeURIComponent(username);\r\n\r\n // var apiUrl = this.$baseAddress + \"/getcases?username=\" + encodeUserName;\r\n\r\n // if (clientCaseNameFilter != null && clientCaseNameFilter.length > 0) {\r\n // apiUrl = apiUrl + '&clientCaseName=' + clientCaseNameFilter;\r\n // }\r\n\r\n // if (statusFilter != null) {\r\n // apiUrl = apiUrl + '&status=' + statusFilter;\r\n // }\r\n\r\n // apiUrl = apiUrl + '&limit=' + limit;\r\n\r\n // this.$http.get(apiUrl).then((response) => {\r\n // defer.resolve(response.data as CaseSummaryDTO[]);\r\n // }).catch((response) => {\r\n // this.$broadcastservice.broadcastError(\"Mycasesummary\", \"Mycasesummary by user failed\");\r\n // defer.reject(response);\r\n // });\r\n // return defer.promise;\r\n //}\r\n\r\n //getmysearches(username: string, clientCaseNameFilter: string = null, limit: number = 100): ng.IPromise {\r\n // let defer = this.$q.defer();\r\n\r\n // var encodeUserName = encodeURIComponent(username);\r\n\r\n // var apiUrl = this.$baseAddress + \"/getsearches?username=\" + encodeUserName;\r\n\r\n // if (clientCaseNameFilter != null && clientCaseNameFilter.length > 0) {\r\n // apiUrl = apiUrl + '&clientCaseName=' + clientCaseNameFilter;\r\n // }\r\n\r\n // apiUrl = apiUrl + '&limit=' + limit;\r\n\r\n // this.$http.get(apiUrl).then((response) => {\r\n // defer.resolve(response.data as CaseSummaryDTO[]);\r\n // }).catch((response) => {\r\n // this.$broadcastservice.broadcastError(\"getmysearches\", \"getmysearches by user failed\");\r\n // defer.reject(response);\r\n // });\r\n // return defer.promise;\r\n //}\r\n\r\n /**\r\n * Get development finance searches for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param limit\r\n */\r\n getDevFinanceSearchesForUser(\r\n username: string,\r\n searchText: string = null,\r\n searchFilter: CaseStatusEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getSearchesForUser(\r\n ProductTypeEnum.None,\r\n username,\r\n searchText,\r\n searchFilter,\r\n limit,\r\n ProductFamilyEnum.Development,\r\n );\r\n }\r\n\r\n /**\r\n * Get bridging searches for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param limit\r\n */\r\n getBridgingSearchesForUser(\r\n username: string,\r\n searchText: string = null,\r\n searchFilter: CaseStatusEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getSearchesForUser(\r\n ProductTypeEnum.None,\r\n username,\r\n searchText,\r\n searchFilter,\r\n limit,\r\n ProductFamilyEnum.Bridging,\r\n );\r\n }\r\n\r\n /**\r\n * Get commercial searches for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param limit\r\n */\r\n getCommercialSearchesForUser(\r\n username: string,\r\n searchText: string = null,\r\n searchFilter: CaseStatusEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getSearchesForUser(\r\n ProductTypeEnum.None,\r\n username,\r\n searchText,\r\n searchFilter,\r\n limit,\r\n ProductFamilyEnum.Commercial,\r\n );\r\n }\r\n\r\n /**\r\n * Get All searches, regardless of product type, for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param limit\r\n */\r\n getAllSearchesForUser(\r\n username: string,\r\n searchText: string = null,\r\n statusFilter: CaseStatusEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getSearchesForUser(\r\n ProductTypeEnum.None,\r\n username,\r\n searchText,\r\n statusFilter,\r\n limit,\r\n );\r\n }\r\n\r\n /**\r\n * Get Searches for the parameters specified\r\n * @param productType\r\n * @param username\r\n * @param searchText\r\n * @param statusFilter\r\n * @param limit\r\n * @param productFamily\r\n */\r\n getSearchesForUser(\r\n productType: ProductTypeEnum,\r\n username: string,\r\n searchText: string = null,\r\n statusFilter: CaseStatusEnum = null,\r\n limit: number = 100,\r\n productFamily: ProductFamilyEnum = ProductFamilyEnum.None,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request: GetSearchesForUserRequest = {\r\n ProductType: productType,\r\n ProductFamily: productFamily,\r\n UserName: username,\r\n SearchText: searchText,\r\n StatusFilter: statusFilter,\r\n Limit: limit,\r\n };\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/getsearchesforuser\", JSON.stringify(request))\r\n .then((response) => {\r\n var res = response.data as GetSearchesForUserResponse;\r\n defer.resolve(res.Results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Get development finance cases for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param statusFilter\r\n * @param limit\r\n */\r\n getDevFinanceCasesForUser(\r\n username: string,\r\n searchText: string = null,\r\n statusFilter: CaseStatusEnum = null,\r\n dipStatusFilter: CaseLenderStateEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getCasesForUser(\r\n ProductTypeEnum.None,\r\n username,\r\n searchText,\r\n statusFilter,\r\n dipStatusFilter,\r\n limit,\r\n ProductFamilyEnum.Development,\r\n );\r\n }\r\n\r\n /**\r\n * Get bridging pre-construction cases for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param statusFilter\r\n * @param limit\r\n */\r\n getBridgingPreConstCasesForUser(\r\n username: string,\r\n searchText: string = null,\r\n statusFilter: CaseStatusEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getCasesForUser(\r\n ProductTypeEnum.BridgingPreconstruction,\r\n username,\r\n searchText,\r\n statusFilter,\r\n limit,\r\n );\r\n }\r\n\r\n /**\r\n * Get bridging cases for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param statusFilter\r\n * @param limit\r\n */\r\n getBridgingCasesForUser(\r\n username: string,\r\n searchText: string = null,\r\n statusFilter: CaseStatusEnum = null,\r\n dipStatusFilter: CaseLenderStateEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getCasesForUser(\r\n ProductTypeEnum.None,\r\n username,\r\n searchText,\r\n statusFilter,\r\n dipStatusFilter,\r\n limit,\r\n ProductFamilyEnum.Bridging,\r\n );\r\n }\r\n\r\n /**\r\n * Get commercial cases for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param statusFilter\r\n * @param limit\r\n */\r\n getCommercialCasesForUser(\r\n username: string,\r\n searchText: string = null,\r\n statusFilter: CaseStatusEnum = null,\r\n dipStatusFilter: CaseLenderStateEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getCasesForUser(\r\n ProductTypeEnum.None,\r\n username,\r\n searchText,\r\n statusFilter,\r\n dipStatusFilter,\r\n limit,\r\n ProductFamilyEnum.Commercial,\r\n );\r\n }\r\n\r\n /**\r\n * Get All cases, regardless of product type, for the parameters specified\r\n * @param username\r\n * @param searchText\r\n * @param limit\r\n */\r\n getAllCasesForUser(\r\n username: string,\r\n searchText: string = null,\r\n statusFilter: CaseStatusEnum = null,\r\n dipStatusFilter: CaseLenderStateEnum = null,\r\n limit: number = 100,\r\n ): ng.IPromise {\r\n return this.getCasesForUser(\r\n ProductTypeEnum.None,\r\n username,\r\n searchText,\r\n statusFilter,\r\n dipStatusFilter,\r\n limit,\r\n );\r\n }\r\n\r\n /**\r\n * Get Cases for the parameters specified\r\n * @param productType\r\n * @param username\r\n * @param searchText\r\n * @param statusFilter\r\n * @param limit\r\n * @param productGroup\r\n */\r\n getCasesForUser(\r\n productType: ProductTypeEnum,\r\n username: string,\r\n searchText: string = null,\r\n statusFilter: CaseStatusEnum = null,\r\n dipStatusFilter: CaseLenderStateEnum = null,\r\n limit: number = 100,\r\n productFamily: ProductFamilyEnum = ProductFamilyEnum.None,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request: GetCasesForUserRequest = {\r\n ProductType: productType,\r\n ProductFamily: productFamily,\r\n UserName: username,\r\n SearchText: searchText,\r\n StatusFilter: statusFilter,\r\n Limit: limit,\r\n DipStatus: dipStatusFilter,\r\n };\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/getcasesforuser\", JSON.stringify(request))\r\n .then((response) => {\r\n var res = response.data as GetCasesForUserResponse;\r\n defer.resolve(res.Results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class ClientService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n \"DevelopmentInputService\",\r\n \"UserService\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n private rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/client\";\r\n this.$broadcastBusinessNameSingular = \"client\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Fetch list of ClientDtos of the clients on the Deal\r\n * @param dealId\r\n */\r\n fetchListByDealId(dealId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchbydealid?dealId=\" + dealId)\r\n .then((response) => {\r\n defer.resolve(response.data as ClientDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Fetch ClientDto for the DealClient.UniqueRef\r\n * @param dealId\r\n */\r\n fetchByDealClientUniqueRef(\r\n dealClientUniqueRef: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/fetchbydealclientuniqueref?dealClientUniqueRef=\" +\r\n dealClientUniqueRef,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as ClientDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Schedule Search Abandoned Email\r\n * @param clientId\r\n * @param organisationId\r\n */\r\n scheduleSearchAbandonedEmail(clientId, organisationId): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/schedulesearchabandonedemail?clientId=\" +\r\n clientId +\r\n \"&organisationId=\" +\r\n organisationId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n updateClientWithUserId(clientId): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/updateclientwithuserid?clientId=\" +\r\n clientId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { ComparablePropertyDTO } from \"@js/DTO/ComparablePropertyDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class ComparablePropertyService extends BaseService<\r\n ComparablePropertyDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/comparableproperty\";\r\n this.$broadcastBusinessNameSingular = \"comparableproperty\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","export const enum InterestServicedorRolledEnum {\r\n None = 0,\r\n Serviced = 1,\r\n Rolled = 2,\r\n}\r\n","import { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { SaveBridgingSearchRequest } from \"@js/DTO/Messages/Deal/SaveBridgingSearchMessage.cs.d\";\r\nimport {\r\n UpdateBridgingSearchGetResultResponse,\r\n UpdateBridgingSearchGetResultRequest,\r\n} from \"@js/DTO/Messages/Deal/UpdateBridgingSearchGetResultMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { ExistingPlanningChangeTypeEnum } from \"@js/models/enum/ExistingPlanningChangeTypeEnum.cs.d\";\r\nimport { InterestServicedorRolledEnum } from \"@js/models/enum/InterestServicedorRolledEnum.cs.d\";\r\nimport { LandOrPropertyEnum } from \"@js/models/enum/LandOrPropertyEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeDetailEnum } from \"@js/models/enum/PropertyTypeDetailEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { YesNoMaybe } from \"@js/models/enum/YesNoMaybeEnum.cs.d\";\r\nimport { DealService } from \"./DealService\";\r\nimport { SaveSearchReturnUniqueRefResponse } from \"@js/models/SaveSearchReturnUniqueRef.cs\";\r\n\r\nexport class BridgingDealService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n \"DealService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n private dealService: DealService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/bridgingdeal\";\r\n this.$broadcastBusinessNameSingular = \"bridgingdeal\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Updates the search Deal based on the BridgingDealDTO and returns the search results on the new criteria\r\n * @param criteriaDto\r\n * @param criteriaChanged only set to true when the search criteria changes, and not the filters. This controls data snapshotting.\r\n */\r\n updateSearchCriteriaAndGetResults(\r\n criteriaDto: BridgingDealDTO,\r\n criteriaChanged: boolean = false,\r\n debug1: boolean,\r\n isPostcodeChanged: boolean = false,\r\n isShortlistingMore: boolean = false\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request: UpdateBridgingSearchGetResultRequest = {\r\n BridgingDealDto: criteriaDto,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: 0, //TODO: typings aren't picking up default values\r\n Debug1: debug1, //TODO: typings aren't picking up default values\r\n Debug2: false, //TODO: typings aren't picking up default values\r\n IsPostcodeChange: isPostcodeChanged,\r\n IsShortlistingMore :isShortlistingMore\r\n };\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/updatesearchandgetresults\",\r\n JSON.stringify(request),\r\n )\r\n .then((response) => {\r\n var res = response.data as UpdateBridgingSearchGetResultResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveBridgingSearchReturnsId(\r\n request: SaveBridgingSearchRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/savebridgingsearchreturnsId\", request)\r\n .then((response) => {\r\n var res = response.data as number;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveBridgingSearchReturnsUniqueRef(\r\n request: SaveBridgingSearchRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/savebridgingsearchreturnsuniqueref\", request)\r\n .then((response) => {\r\n var res = response.data as SaveSearchReturnUniqueRefResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getCountries(): ng.IPromise<[]> {\r\n let defer = this.$q.defer<[]>();\r\n this.$http\r\n .get(this.$baseAddress + \"/getcountries\")\r\n .then((response) => {\r\n defer.resolve(response.data as []);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getNationalities(): ng.IPromise<[]> {\r\n let defer = this.$q.defer<[]>();\r\n this.$http\r\n .get(this.$baseAddress + \"/getnationalities\")\r\n .then((response) => {\r\n defer.resolve(response.data as []);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n debugSearch(dealDto: BridgingDealDTO): ng.IPromise<[]> {\r\n let defer = this.$q.defer<[]>();\r\n this.$http\r\n .get(this.$baseAddress + \"/debugSearch\")\r\n .then((response) => {\r\n defer.resolve(response.data as []);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n clearSearchdata(dealDto) {\r\n let tempDealDto = dealDto;\r\n dealDto = {} as BridgingDealDTO;\r\n dealDto.MaxLoanRequired = true;\r\n dealDto.OwnOrPurchase = tempDealDto.OwnOrPurchase;\r\n dealDto.Locations = tempDealDto.Locations;\r\n dealDto.HasIsFamilyInResidence = tempDealDto.HasIsFamilyInResidence;\r\n dealDto.IsFamilyInResidence = tempDealDto.IsFamilyInResidence;\r\n dealDto.ProductType = tempDealDto.ProductType;\r\n dealDto.LoanCompletionType = tempDealDto.LoanCompletionType;\r\n dealDto.PropertyAddress = tempDealDto.PropertyAddress;\r\n\r\n if (!dealDto.HasIsFamilyInResidence) {\r\n dealDto.HasIsFamilyInResidence = tempDealDto.HasIsFamilyInResidence;\r\n dealDto.HasOwnOrPurchase = false;\r\n dealDto.OwnOrPurchase = OwnOrPurchaseEnum.Purchasing;\r\n dealDto.LandOrProperty =\r\n dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance\r\n ? LandOrPropertyEnum.Property\r\n : LandOrPropertyEnum.Land;\r\n dealDto.HasLandOrProperty =\r\n dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance\r\n ? true\r\n : false;\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange(dealDto) {\r\n if (\r\n dealDto.OwnOrPurchase != null &&\r\n dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing\r\n ) {\r\n dealDto.OriginalPurchaseDate = null;\r\n dealDto.Currentvalue = null;\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnLandorPropertyChange(dealDto) {\r\n if (dealDto.ProductType == ProductTypeEnum.BridgingPreconstruction) {\r\n if (dealDto.LandOrProperty == LandOrPropertyEnum.Property) {\r\n dealDto.EndPropertyType = PropertyTypeEnum.None;\r\n dealDto.IsTenantedBuilding = null;\r\n dealDto.BuildingCondition = null;\r\n dealDto.LandTotalOtherCosts = 0;\r\n dealDto.IsMortgaged = false;\r\n dealDto.MortgageCurrentLender = \"\";\r\n dealDto.MortgageCurrentBalance = 0;\r\n } else if (dealDto.LandOrProperty == LandOrPropertyEnum.Land) {\r\n dealDto.PurchaseCosts = 0;\r\n }\r\n } else if (\r\n dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance\r\n ) {\r\n if (dealDto.LandOrProperty == LandOrPropertyEnum.Property) {\r\n dealDto.EndPropertyType = PropertyTypeEnum.Residential;\r\n } else if (dealDto.LandOrProperty == LandOrPropertyEnum.Land) {\r\n dealDto.EndPropertyType = PropertyTypeEnum.None;\r\n dealDto.PropertyTypeDetail = PropertyTypeDetailEnum.None;\r\n dealDto.PropertyTenure = null;\r\n dealDto.IsTenantedBuilding = false;\r\n dealDto.BuildingCostTodate = 0;\r\n dealDto.IsPropertyImprovementDuringLoanTerm = false;\r\n dealDto.IsExistingPlanChange = false;\r\n dealDto.ExistingPlanningChangeType =\r\n ExistingPlanningChangeTypeEnum.None;\r\n dealDto.PurchasePrice = 0;\r\n dealDto.PurchaseCosts = 0;\r\n dealDto.HasCompletionDate = YesNoMaybe.No;\r\n dealDto.CompletionDate = null;\r\n dealDto.NumberOfTenancies = null;\r\n dealDto.GrossAnnualRentalReceipts = null;\r\n dealDto.BuildingCondition = null;\r\n dealDto.Currentvalue = 0;\r\n }\r\n }\r\n\r\n return dealDto;\r\n }\r\n\r\n datasetupOnInterestServiceChange(dealDto) {\r\n if (dealDto.InterestService == InterestServicedorRolledEnum.Rolled) {\r\n dealDto.SourceOfIncome = null;\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnIsTenantedBuildingChange(dealDto: BridgingDealDTO) {\r\n if (!dealDto.IsTenantedBuilding) {\r\n dealDto.NumberOfTenancies = null;\r\n dealDto.GrossAnnualRentalReceipts = null;\r\n if (dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance) {\r\n dealDto.BuildingCondition = null;\r\n }\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnEndPropertyTypeChange(dealDto) {\r\n if (\r\n dealDto.EndPropertyType != PropertyTypeEnum.MixedUse &&\r\n dealDto.EndPropertyType != PropertyTypeEnum.Residential\r\n ) {\r\n dealDto.PropertyTypeDetail = null;\r\n dealDto.HowManyFlats = null;\r\n dealDto.HowManyHouses = null;\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnHasCompletionDateChange(dealDto) {\r\n if (dealDto.HasCompletionDate != 1) {\r\n dealDto.CompletionDate = null;\r\n }\r\n return dealDto;\r\n }\r\n}\r\n","export const enum BorrowingEntityTypeEnum {\r\n None = 0,\r\n Individual = 1,\r\n Company = 2,\r\n SoleTrader = 4,\r\n Partnership = 8,\r\n LLP = 16,\r\n Trust = 32,\r\n SIPPOrSSAS = 64,\r\n OverseasCo = 128,\r\n}\r\n","export const enum TradingPeriodEnum {\r\n None = 0,\r\n LessThanTwoYears = 1,\r\n MoreThanTwoYears = 2,\r\n}\r\n","import { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { SaveCommercialSearchRequest } from \"@js/DTO/Messages/Deal/SaveCommercialSearchMessage.cs.d\";\r\nimport {\r\n UpdateCommercialSearchGetResultResponse,\r\n UpdateCommercialSearchGetResultRequest,\r\n} from \"@js/DTO/Messages/Deal/UpdateCommercialSearchGetResultMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { BorrowingEntityTypeEnum } from \"@js/models/enum/BorrowingEntityTypeEnum.cs.d\";\r\nimport { FixedRateTermEnum } from \"@js/models/enum/FixedRateTermEnum.cs.d\";\r\nimport { InterestRateTypeEnum } from \"@js/models/enum/InterestRateTypeEnum.cs.d\";\r\nimport { LoanCompletionTypeEnum } from \"@js/models/enum/LoanCompletionTypeEnum.cs.d\";\r\nimport { LoanRepaymentTypeEnum } from \"@js/models/enum/LoanRepaymentTypeEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { TimeLeftOnLeaseEnum } from \"@js/models/enum/TimeLeftOnLeaseEnum.cs.d\";\r\nimport { TradingPeriodEnum } from \"@js/models/enum/TradingPeriodEnum.cs.d\";\r\nimport { YesNoMaybe } from \"@js/models/enum/YesNoMaybeEnum.cs.d\";\r\nimport { SaveSearchReturnUniqueRefResponse } from \"@js/models/SaveSearchReturnUniqueRef.cs\";\r\n\r\nexport class CommercialDealService extends BaseService<\r\n CommercialDealDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/commercialdeal\";\r\n this.$broadcastBusinessNameSingular = \"commercialdeal\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Updates the search Deal based on the CommercialDealDTO and returns the search results on the new criteria\r\n * @param criteriaDto\r\n * @param criteriaChanged only set to true when the search criteria changes, and not the filters. This controls data snapshotting.\r\n */\r\n updateSearchCriteriaAndGetResults(\r\n criteriaDto: CommercialDealDTO,\r\n criteriaChanged: boolean = false,\r\n debug1: boolean,\r\n isPostcodeChanged: boolean = false,\r\n isShortlistingMore: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request: UpdateCommercialSearchGetResultRequest = {\r\n CommercialDealDto: criteriaDto,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: 0, //TODO: typings aren't picking up default values\r\n Debug1: debug1, //TODO: typings aren't picking up default values\r\n Debug2: false, //TODO: typings aren't picking up default values\r\n IsPostcodeChange: isPostcodeChanged,\r\n IsShortlistingMore: isShortlistingMore\r\n };\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/updatesearchandgetresults\",\r\n JSON.stringify(request),\r\n )\r\n .then((response) => {\r\n var res = response.data as UpdateCommercialSearchGetResultResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveCommercialSearchReturnsId(\r\n request: SaveCommercialSearchRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/savecommercialsearchreturnsId\", request)\r\n .then((response) => {\r\n var res = response.data as number;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getCountries(): ng.IPromise<[]> {\r\n let defer = this.$q.defer<[]>();\r\n this.$http\r\n .get(this.$baseAddress + \"/getcountries\")\r\n .then((response) => {\r\n defer.resolve(response.data as []);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getNationalities(): ng.IPromise<[]> {\r\n let defer = this.$q.defer<[]>();\r\n this.$http\r\n .get(this.$baseAddress + \"/getnationalities\")\r\n .then((response) => {\r\n defer.resolve(response.data as []);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n debugSearch(dealDto: CommercialDealDTO): ng.IPromise<[]> {\r\n let defer = this.$q.defer<[]>();\r\n this.$http\r\n .get(this.$baseAddress + \"/debugSearch\")\r\n .then((response) => {\r\n defer.resolve(response.data as []);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n initialDataSetUp(dealDto: CommercialDealDTO, productType: ProductTypeEnum) {\r\n dealDto.IsFamilyInResidence = YesNoMaybe.No;\r\n dealDto.HasIsFamilyInResidence = false;\r\n dealDto.HasOwnOrPurchase = false;\r\n dealDto.MaxLoanRequired = true;\r\n dealDto.ProductType = productType;\r\n dealDto.ProductFamily = ProductFamilyEnum.Commercial;\r\n dealDto.OwnOrPurchase = OwnOrPurchaseEnum.Purchasing;\r\n if (productType == ProductTypeEnum.CommercialInvestment) {\r\n dealDto.BorrowingEntityType = BorrowingEntityTypeEnum.Company;\r\n dealDto.CurrentPropertyType = PropertyTypeEnum.MixedUse;\r\n dealDto.TimeLeftOnLease = TimeLeftOnLeaseEnum.OneToThreeYears;\r\n }\r\n dealDto.LoanRepaymentType = LoanRepaymentTypeEnum.Repayment;\r\n dealDto.LoanCompletionType = LoanCompletionTypeEnum.JustCheckingMyOptions;\r\n dealDto.MortgageInterestType = InterestRateTypeEnum.Fixed;\r\n dealDto.FixedRateTerm = FixedRateTermEnum.FiveYear;\r\n dealDto.ShowLenderInfoBrokerOverride = true;\r\n dealDto.hasPostcode = true;\r\n if (productType == ProductTypeEnum.CommercialOwnerOccupied) {\r\n dealDto.BorrowingEntityType = BorrowingEntityTypeEnum.Company;\r\n dealDto.TradingPeriod = TradingPeriodEnum.MoreThanTwoYears;\r\n dealDto.CurrentPropertyType = PropertyTypeEnum.Office;\r\n }\r\n dealDto.IncludesArrangementFee = false;\r\n return dealDto;\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange(dealDto) {\r\n if (\r\n dealDto.OwnOrPurchase != null &&\r\n dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing\r\n ) {\r\n dealDto.OriginalPurchaseDate = null;\r\n dealDto.Currentvalue = null;\r\n }\r\n\r\n if (\r\n dealDto.OwnOrPurchase != null &&\r\n dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own\r\n ) {\r\n dealDto.PurchasePrice = 0;\r\n dealDto.PurchaseCosts = 0;\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnCurrentUseOfBuilding(dealDto) {\r\n if (\r\n dealDto.CurrentPropertyType != null &&\r\n dealDto.CurrentPropertyType == PropertyTypeEnum.HMO\r\n ) {\r\n dealDto.UnitCount = null;\r\n dealDto.TimeLeftOnLease = TimeLeftOnLeaseEnum.OneToThreeYears;\r\n } else if (\r\n dealDto.CurrentPropertyType != null &&\r\n dealDto.CurrentPropertyType == PropertyTypeEnum.MultiUnitFreeholdBlock\r\n ) {\r\n dealDto.BedroomCount = null;\r\n dealDto.TimeLeftOnLease = TimeLeftOnLeaseEnum.OneToThreeYears;\r\n } else if (\r\n dealDto.CurrentPropertyType != null &&\r\n dealDto.CurrentPropertyType != PropertyTypeEnum.MultiUnitFreeholdBlock &&\r\n dealDto.CurrentPropertyType != PropertyTypeEnum.HMO\r\n ) {\r\n dealDto.BedroomCount = null;\r\n dealDto.UnitCount = null;\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnIsTenantedBuildingChange(dealDto: CommercialDealDTO) {\r\n if (!dealDto.IsTenantedBuilding) {\r\n dealDto.NumberOfTenancies = null;\r\n }\r\n return dealDto;\r\n }\r\n\r\n saveCommercialSearchReturnsUniqueRef(\r\n request: SaveCommercialSearchRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/savecommercialsearchreturnsuniqueref\",\r\n request,\r\n )\r\n .then((response) => {\r\n var res = response.data as SaveSearchReturnUniqueRefResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { CommercialSearchResultsResponse } from \"@js/DTO/Messages/Deal/CommercialSearchResultMessage.cs.d\";\r\nimport { SearchResultsRequest } from \"@js/DTO/Messages/Deal/SearchResultMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class CommercialSearchResultsService extends BaseService<\r\n CommercialDealDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/commercialsearchresults\";\r\n this.$broadcastBusinessNameSingular = \"commercialsearchresults\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Gets the search criteria and the search results based on the search criteria ID passed in\r\n * @param criteriaId\r\n * @param criteriaChanged - has the search criteria chaged? Used for snapshotting.\r\n * @param limit - the number of search results to display TODO - is this needed for search results????\r\n * @param debug1\r\n * @param debug2\r\n */\r\n getSearchCriteriaAndResultsByDealId(\r\n dealId: number,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealId: dealId,\r\n DealClientUniqueRef: null,\r\n DealUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n /**\r\n * Gets the search criteria and the search results based on the DealClient UniqueRef passed in\r\n * @param criteriaId\r\n * @param limit - the number of search results to display TODO - is this needed for search results????\r\n * @param debug1\r\n * @param debug2\r\n */\r\n getSearchCriteriaAndResultsByDealClientUniqueRef(\r\n dealClientUniqueRef: string,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealClientUniqueRef: dealClientUniqueRef,\r\n DealUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n /**\r\n * Gets the search criteria and the search results based on the search unique ref passed in\r\n * @param dealUniqueref\r\n * @param criteriaChanged - has the search criteria chaged? Used for snapshotting.\r\n * @param limit - the number of search results to display TODO - is this needed for search results????\r\n * @param debug1\r\n * @param debug2\r\n */\r\n getSearchCriteriaAndResultsByDealUniqueRef(\r\n dealUniqueref: string,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealId: null,\r\n DealUniqueRef: dealUniqueref,\r\n DealClientUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n /**\r\n * Fetches the Commercial Search based on the request passed in\r\n * @param request\r\n */\r\n private getSearchCriteriaAndResults(\r\n request: SearchResultsRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/getsearchcriteriaandresults\",\r\n JSON.stringify(request),\r\n )\r\n .then((response) => {\r\n var res = response.data as CommercialSearchResultsResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DealLenderMessageDTO } from \"@js/DTO/Deal/DealLenderMessageDTO.cs.d\";\r\nimport {\r\n AppraisalData,\r\n TotalUnreadMessagesByAppraisalResponse,\r\n TotalUnreadMessagesByAppraisalRequest,\r\n} from \"@js/DTO/Messages/GetTotalUnReadMessagesByAppraisalMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DealLenderMessageService extends BaseService<\r\n DealLenderMessageDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/deallendermessage\";\r\n this.$broadcastBusinessNameSingular = \"deallendermessage\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n updateDealLenderMessageReadDatetime(\r\n dealLenderId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/updatedeallendermessagereaddatetime?dealLenderId=\" +\r\n dealLenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getTotalUnreadMessagesPerAppraisal(\r\n appraisalDataList: AppraisalData[],\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var request: TotalUnreadMessagesByAppraisalRequest = {\r\n AppraisalDataList: appraisalDataList,\r\n };\r\n this.$http\r\n .post(this.$baseAddress + \"/gettotalunreadmessagesperappraisal\", request)\r\n .then((response) => {\r\n defer.resolve(response.data as TotalUnreadMessagesByAppraisalResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { BridgingHeadsOfTermsController } from \"@js/controllers/BridgingHeadsOfTermsController\";\r\nimport { CommercialHeadsOfTermsController } from \"@js/controllers/CommercialHeadsOfTermsController\";\r\nimport { DevFinanceHeadsOfTermsController } from \"@js/controllers/DevFinanceHeadsOfTermsController\";\r\nimport { CaseLenderChangedMessageDTO } from \"@js/DTO/CaseLenderChangedMessageDTO.cs.d\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs.d\";\r\nimport {\r\n BridgingSubmitOfferRequest,\r\n BridgingSubmitOfferResponse,\r\n} from \"@js/DTO/Messages/Deal/BridgingSubmitOfferMessage.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DealLenderService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/deallender\";\r\n this.$broadcastBusinessNameSingular = \"deallender\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n fetchByDealId(\r\n DealId: number,\r\n debug2?: boolean,\r\n DealLenderId?: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/fetchByDealId?DealId=\" +\r\n DealId +\r\n \"&debug2=\" +\r\n debug2 +\r\n \"&DealLenderId=\" +\r\n DealLenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DealLenderDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchByDealId\",\r\n \"Fetchby deal id failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchDealLender(DealId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchdeallender?DealId=\" + DealId)\r\n .then((response) => {\r\n defer.resolve(response.data as DealLenderDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchDealLender\",\r\n \"fetch Deal Lender failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getSelectedCaseLender(Id: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/selectedcaselender?Id=\" + Id)\r\n .then((response) => {\r\n defer.resolve(response.data as DealLenderDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"getSelectedCaseLender\",\r\n \"get selected case lender failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n submitOffer(\r\n request: BridgingSubmitOfferRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(this.$baseAddress + \"/submitoffer\", JSON.stringify(request))\r\n .then((response) => {\r\n defer.resolve(response.data as BridgingSubmitOfferResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n applyToLender(\r\n dealId: number,\r\n dealLenderId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/apply?dealId=\" +\r\n dealId +\r\n \"&dealLenderId=\" +\r\n dealLenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n cancelApplication(\r\n dealId: number,\r\n dealLenderId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/cancel?dealId=\" +\r\n dealId +\r\n \"&dealLenderId=\" +\r\n dealLenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendProceedDipEmails(\r\n dealId: number,\r\n dealLenderId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendproceeddipemails?dealId=\" +\r\n dealId +\r\n \"&dealLenderId=\" +\r\n dealLenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as void);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n rejectCase(\r\n dealLender: DealLenderDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(this.$baseAddress + \"/reject\", JSON.stringify(dealLender))\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n withdrawHoT(\r\n dealLender: DealLenderDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(this.$baseAddress + \"/withdraw\", JSON.stringify(dealLender))\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n shortlistMoreLenders(\r\n dealId: number,\r\n selectedLenderList: DealLenderDTO[],\r\n hasCriteriaChanged: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/shortlistmorelenders?dealId=\" +\r\n dealId +\r\n \"&hasCriteriaChanged=\" +\r\n hasCriteriaChanged,\r\n selectedLenderList,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n addLenderPortalLinkDetails(\r\n dealLenderId: number,\r\n borrowerDetails: UserSimpleDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/addlenderportallinkdetails?dealLenderId=\" +\r\n dealLenderId,\r\n borrowerDetails,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getRandomIntInclusive(min, max) {\r\n min = Math.ceil(min);\r\n max = Math.floor(max);\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n }\r\n\r\n submitToDeallocker(dealLenderId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http.get(this.$baseAddress + \"/submittodeallocker?dealLenderId=\" + dealLenderId).then((response) => {\r\n defer.resolve(response.data as boolean);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n}\r\n\r\nupdateShortlistedLenders(selectedLenderList: DealLenderDTO[]): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http.put(this.$baseAddress + \"/updateshortlistedlenders\", selectedLenderList).then((response) => {\r\n defer.resolve(response.data as boolean);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n}\r\n\r\n\r\nfetchDealLendersByDealId(\r\n DealId: number\r\n): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/fetchdeallendersbydealId?DealId=\" +\r\n DealId\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DealLenderDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchdeallendersbydealId\",\r\n \"Fetch DealLender by deal id failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n}\r\n\r\n dummyDIP(controller) {\r\n const devFin = controller instanceof DevFinanceHeadsOfTermsController;\r\n const bridging = controller instanceof BridgingHeadsOfTermsController;\r\n const commercial = controller instanceof CommercialHeadsOfTermsController;\r\n\r\n if (devFin || bridging) {\r\n controller.currentCaseLender.TotalGrossLoan = this.getRandomIntInclusive(\r\n 2000,\r\n 1000000,\r\n );\r\n controller.calculateGrossLoanValVal();\r\n controller.currentCaseLender.BuildLoan = this.getRandomIntInclusive(\r\n 2000,\r\n controller.currentCaseLender.TotalGrossLoan,\r\n );\r\n controller.calculateBuildLoadCalcVal();\r\n }\r\n\r\n if (devFin) {\r\n controller.currentCaseLender.LandLoan = this.getRandomIntInclusive(\r\n 2000,\r\n controller.currentCaseLender.BuildLoan,\r\n );\r\n controller.calculateLandLoanCalcVal();\r\n }\r\n\r\n if (commercial) {\r\n controller.currentCaseLender.TotalNetLoan = this.getRandomIntInclusive(\r\n 1000,\r\n 999999,\r\n );\r\n controller.currentCaseLender.LoanToValue =\r\n this.getRandomIntInclusive(0, 100) * 0.01;\r\n controller.currentCaseLender.LenderArrangementFee =\r\n this.getRandomIntInclusive(100, 1000);\r\n controller.calculatemonetaryLAPercent();\r\n controller.currentCaseLender.ProductDuration = this.getRandomIntInclusive(\r\n 1,\r\n 15,\r\n );\r\n } else {\r\n controller.calculateTotalNetLoan();\r\n }\r\n\r\n if (bridging) {\r\n controller.currentCaseLender.TotalNetLoan = this.getRandomIntInclusive(\r\n 2000,\r\n 999999,\r\n );\r\n controller.calculateBorrowerEquity();\r\n }\r\n\r\n if (devFin || bridging) {\r\n controller.currentCaseLender.LenderArrangementFee =\r\n this.getRandomIntInclusive(100, 1000);\r\n controller.calculatemonetaryLAPercent();\r\n controller.calculatemonetaryLAFee();\r\n }\r\n\r\n if (bridging) {\r\n controller.currentCaseLender.MonthlyInterestRate =\r\n this.getRandomIntInclusive(1, 10) * 0.01;\r\n controller.calculateMonthlyInterestRate();\r\n }\r\n\r\n controller.currentCaseLender.InterestRate =\r\n this.getRandomIntInclusive(1, 10) * 0.01;\r\n\r\n if (devFin || bridging) {\r\n controller.currentCaseLender.InterestRateType =\r\n this.getRandomIntInclusive(1, 2);\r\n var types = [\"own SVR\", \"SONIA\"];\r\n controller.currentCaseLender.BasisOfInterestRate =\r\n types[this.getRandomIntInclusive(0, 1)];\r\n } else {\r\n controller.currentCaseLender.MonthlyMortgagePayment =\r\n this.getRandomIntInclusive(200, 9999);\r\n controller.currentCaseLender.EarlyRepaymentCharge = \"Year 1 - 5%\";\r\n controller.currentCaseLender.LoanTerm = this.getRandomIntInclusive(\r\n controller.currentCaseLender.ProductDuration,\r\n 30,\r\n );\r\n }\r\n\r\n if (bridging) {\r\n controller.currentCaseLender.MinimumInterestPeriod =\r\n this.getRandomIntInclusive(1, 12);\r\n }\r\n\r\n if (devFin || bridging) {\r\n controller.currentCaseLender.LenderExitFee = this.getRandomIntInclusive(\r\n 100,\r\n 5000,\r\n );\r\n controller.calculatemonetaryLEPercent();\r\n controller.calculatemonetaryLEFee();\r\n\r\n controller.calculateTrueCost();\r\n controller.currentCaseLender.ProfessionalFeesEstimate =\r\n this.getRandomIntInclusive(100, 5000);\r\n controller.currentCaseLender.LenderAdditionalRequirements = \"none\";\r\n }\r\n\r\n if (bridging) {\r\n controller.currentCaseLender.LoanTerm = this.getRandomIntInclusive(\r\n 1,\r\n 600,\r\n );\r\n }\r\n }\r\n \r\n sendDealToPackagerForReview(dealId: number, dealLenderId: number ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/senddealtopackagerforreview?dealId=\" +\r\n dealId +\r\n \"&dealLenderId=\" +\r\n dealLenderId,)\r\n .then((response) => {\r\n defer.resolve(response.data as CaseLenderChangedMessageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DealNoteDTO } from \"@js/DTO/Deal/DealNoteDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DealNoteService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/dealnote\";\r\n this.$broadcastBusinessNameSingular = \"dealnote\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { DealScheduleDTO } from \"@js/DTO/Deal/DealScheduleDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DealScheduleService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/dealschedule\";\r\n this.$broadcastBusinessNameSingular = \"dealschedule\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { CaseChangedMessageDTO } from \"@js/DTO/CaseChangedMessageDTO.cs.d\";\r\nimport { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { DealDTO } from \"@js/DTO/Deal/DealDTO.cs.d\";\r\nimport { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport {\r\n AssignBrokerToDealRequest,\r\n AssignBrokerToDealResponse,\r\n} from \"@js/DTO/Messages/AssignBrokerToDealMessage.cs.d\";\r\nimport {\r\n AssignLenderToDealRequest,\r\n AssignLenderToDealResponse,\r\n} from \"@js/DTO/Messages/AssignLenderToDealMessage.cs.d\";\r\nimport {\r\n FetchDealRequest,\r\n FetchDealResponse,\r\n} from \"@js/DTO/Messages/Deal/FetchDealMessage.cs.d\";\r\nimport { GetDealUniqueLinkResultsCountDataAndLogPageLoadEventResponse } from \"@js/DTO/Messages/Deal/GetDealUniqueLinkResultsCountDataAndLogPageLoadEventMessage.cs\";\r\nimport {\r\n InvitedUserRequest,\r\n InvitedUserResponse,\r\n} from \"@js/DTO/Messages/Deal/InvitedUserMessage.cs.d\";\r\nimport {\r\n MarkSectionAsCompleteRequest,\r\n MarkSectionAsCompleteResponse,\r\n} from \"@js/DTO/Messages/Deal/MarkSectionAsComplete.cs.d\";\r\nimport {\r\n PromoteSearchToCaseRequest,\r\n PromoteSearchToCaseResponse,\r\n} from \"@js/DTO/Messages/Deal/PromoteSearchToCaseMessage.cs.d\";\r\nimport { SaveAsSearchRequest } from \"@js/DTO/Messages/Deal/SaveAsSearchMessage.cs.d\";\r\nimport { SaveEnterpriseClientAndRenameSearchRequest, SaveEnterpriseClientAndRenameSearchResponse } from \"@js/DTO/Messages/Deal/SaveEnterpriseClientAndRenameSearchMessage.cs.d\";\r\nimport {\r\n ShareDealRequest,\r\n ShareDealResponse,\r\n} from \"@js/DTO/Messages/Deal/ShareDealMessage.cs.d\";\r\nimport { ShareModuleRequest } from \"@js/DTO/Messages/Deal/ShareModuleMessage.cs.d\";\r\nimport { SubmitToLendersRequest } from \"@js/DTO/Messages/Deal/SubmitToLendersMessage.cs.d\";\r\nimport { GetRegionByPostcodeResponse } from \"@js/DTO/Messages/GetRegionByPostcodeMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { DealSummaryDTO } from \"@js/DTO/Deal/DealSummaryDTO.cs.d\"\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs\";\r\n\r\nexport class DealService extends BaseService {\r\n IsSupplimentInfoFilled: boolean;\r\n showModal:boolean;\r\n dealName: string;\r\n previouslySelectedClient:ClientDTO;\r\n \r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n \"$location\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n private $location: ng.ILocationService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/deal\";\r\n this.$broadcastBusinessNameSingular = \"deal\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Shares a deal with a client\r\n * @param shareDealDto\r\n */\r\n shareDealWithClient(shareDealDto: ShareDealDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n ShareDealDto: shareDealDto,\r\n } as ShareDealRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/sharedeal\", request)\r\n .then((response) => {\r\n var res = response.data as ShareDealResponse;\r\n defer.resolve(res.IsSuccess);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets a deal by its unique ref\r\n * @param uniqueRef\r\n */\r\n fetchByUniqueRef(uniqueRef: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchbyuniqueref?dealUniqueRef=\" + uniqueRef)\r\n .then((response) => {\r\n var res = response.data as T;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchProductFamilyByClientUniqueRef(\r\n dealClientUniqueRef: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/fetchproductfamilybyclientuniqueref?dealClientUniqueRef=\" +\r\n dealClientUniqueRef,\r\n )\r\n .then((response) => {\r\n var res = response.data as ProductFamilyEnum;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Assigns a broker to a deal\r\n * @param dealId\r\n * @param brokerUserId\r\n */\r\n assignBrokerToDeal(\r\n dealId: number,\r\n brokerUserId: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n DealId: dealId,\r\n BrokerUserId: brokerUserId,\r\n } as AssignBrokerToDealRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/assignbrokertodeal\", request)\r\n .then((response) => {\r\n var res = response.data as AssignBrokerToDealResponse;\r\n defer.resolve(res.IsSuccess);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Assigns a lender to a deal\r\n * @param dealId\r\n * @param lenderId\r\n * @param lenderUserId\r\n */\r\n assignLenderToDeal(\r\n dealId: number,\r\n lenderId: number,\r\n lenderUserId: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n DealId: dealId,\r\n LenderId: lenderId,\r\n LenderUserId: lenderUserId,\r\n } as AssignLenderToDealRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/assignlendertodeal\", request)\r\n .then((response) => {\r\n var res = response.data as AssignLenderToDealResponse;\r\n defer.resolve(res.IsSuccess);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getIsSupplimentInfoFilled() {\r\n return this.IsSupplimentInfoFilled;\r\n }\r\n\r\n setIsSupplimentInfoFilled(IsSupplimentInfoFilled) {\r\n this.IsSupplimentInfoFilled = IsSupplimentInfoFilled;\r\n }\r\n\r\n submitToLenders(\r\n request: SubmitToLendersRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(this.$baseAddress + \"/submittolenders\", request)\r\n .then((response) => {\r\n var res = response.data as CaseChangedMessageDTO;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchByDealId(\r\n dealId: number,\r\n productFamily: ProductFamilyEnum,\r\n isCaseDashboard: boolean = false\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n DealId: dealId,\r\n ProductFamily: productFamily,\r\n IsCaseDashboardCall: isCaseDashboard\r\n } as FetchDealRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/fetchbydealid\", request)\r\n .then((response) => {\r\n defer.resolve(response.data as FetchDealResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n markSectionAsComplete(\r\n dealId: number,\r\n propertyName: string,\r\n productFamily: ProductFamilyEnum,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n DealId: dealId,\r\n PropertyName: propertyName,\r\n ProductFamily: productFamily,\r\n } as MarkSectionAsCompleteRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/marksectionascomplete\", request)\r\n .then((response) => {\r\n var res = response.data as MarkSectionAsCompleteResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n shareModuleToBorrower(request: ShareModuleRequest): ng.IPromise {\r\n request.Note = request.Note.replace(/\\n/g, \"
\");\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(this.$baseAddress + \"/sharemoduletoborrower\", request)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n copyCase(\r\n dealId: number,\r\n dealName: string,\r\n productType: ProductTypeEnum,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n let productFamily = ProductFamilyEnum.Bridging;\r\n\r\n if ((productType & ProductTypeEnum.CommercialAll) != 0) {\r\n productFamily = ProductFamilyEnum.Commercial;\r\n } else if (productType == ProductTypeEnum.Development) {\r\n productFamily = ProductFamilyEnum.Development;\r\n }\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/copycase?Id=\" +\r\n dealId +\r\n \"&name=\" +\r\n dealName +\r\n \"&productFamily=\" +\r\n productFamily.toString(),\r\n \"\",\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n this.$broadcastservice.broadcastError(\r\n \"savesearch\",\r\n \"Save search failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n checkIfUserIsInvited(\r\n userId: string,\r\n dealId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n UserId: userId,\r\n DealId: dealId,\r\n } as InvitedUserRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/isuserinvitedtodeal\", request)\r\n .then((response) => {\r\n defer.resolve(response.data as InvitedUserResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n promoteSearchToCase(\r\n dealId: number,\r\n productFamily: ProductFamilyEnum,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request = {\r\n DealId: dealId,\r\n ProductFamily: productFamily,\r\n } as PromoteSearchToCaseRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/promotesearchtocase\", request)\r\n .then((response) => {\r\n var res = response.data as PromoteSearchToCaseResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveEnterpriseClientAndRenameDeal(\r\n request: SaveEnterpriseClientAndRenameSearchRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/saveenterpriseclientandrenamedeal\", request)\r\n .then((response) => {\r\n var res = response.data as SaveEnterpriseClientAndRenameSearchResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getRegionByPostcode(\r\n postcodeSearchString: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getregionbypostcode?postcodeSearchString=\" +\r\n postcodeSearchString,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as GetRegionByPostcodeResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n isValidPostcodeString(postcodeSearchString: string) {\r\n if (\r\n /^[A-Za-z]{1,2}[0-9]{1}/.test(postcodeSearchString) &&\r\n postcodeSearchString.replace(\" \", \"\").length <= 7\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isCommercialDealDto(deal: DealDTO): deal is CommercialDealDTO {\r\n return deal.ProductFamily === ProductFamilyEnum.Commercial;\r\n }\r\n\r\n isBridgingDealDto(deal: DealDTO): deal is BridgingDealDTO {\r\n return deal.ProductFamily === ProductFamilyEnum.Bridging;\r\n }\r\n\r\n isDevelopmentFinanceDealDto(\r\n deal: DealDTO,\r\n ): deal is DevelopmentFinanceDealDTO {\r\n return deal.ProductFamily === ProductFamilyEnum.Development;\r\n }\r\n\r\n goToCaseDashboard(dealId: number, productFamily: ProductFamilyEnum) {\r\n switch (productFamily) {\r\n case ProductFamilyEnum.Bridging:\r\n this.$location.path(\"/bridgingcasedashboard/\" + dealId);\r\n break;\r\n case ProductFamilyEnum.Commercial:\r\n this.$location.path(\"/commercialcasedashboard/\" + dealId);\r\n break;\r\n case ProductFamilyEnum.Development:\r\n this.$location.path(\"/devfinancecasedashboard/\" + dealId);\r\n }\r\n }\r\n\r\n dataSetupOnMaxLoanRequiredChange(dealDto) {\r\n if (!dealDto.MaxLoanRequired) {\r\n dealDto.NetLoanRequired = 0;\r\n }\r\n return dealDto;\r\n }\r\n\r\n showBasedOnMainResidence(dealDto): boolean {\r\n return (\r\n dealDto.IsFamilyInResidence != 1 ||\r\n (dealDto.IsFamilyInResidence == 1 &&\r\n (dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n dealDto.ProductType == ProductTypeEnum.BridgingRefurb))\r\n );\r\n }\r\n\r\n saveSaveAsSearch(request: SaveAsSearchRequest): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/savesaveassearch\", request)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getSearchResultsCountByUniqueRefAndLogPageLoadEvent(uniqueRef: string, orgCode: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getsearchresultscountbyuniquerefandlogpageloadevent?uniqueRef=\" +\r\n uniqueRef + \"&orgCode=\" +\r\n orgCode\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as GetDealUniqueLinkResultsCountDataAndLogPageLoadEventResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n renameDeal(dealUniqueRef: string, newName: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/renamedeal?dealUniqueRef=\" +\r\n dealUniqueRef + \"&newName=\" + newName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getDealSummary(dealId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getdealsummary?dealId=\" +\r\n dealId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DealSummaryDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getShowSearchNameAndUserSelectionModal() {\r\n return this.showModal;\r\n }\r\n\r\n setShowSearchNameAndUserSelectionModal(showModal) {\r\n this.showModal = showModal;\r\n }\r\n\r\n getDealName() {\r\n return this.dealName;\r\n }\r\n\r\n setDealName(dealName) {\r\n this.dealName = dealName;\r\n }\r\n\r\n getClient() {\r\n return this.previouslySelectedClient;\r\n }\r\n\r\n setClient(client) {\r\n this.previouslySelectedClient = client;\r\n }\r\n\r\n getRequiredRolesOptions(isCaseDashboard: boolean = false, isReadOnlyDeal: boolean = false){\r\n \r\n if(isCaseDashboard){\r\n return `[{name: 'Lender', disable: true, hide: false},{name: 'Broker', disable: ${isReadOnlyDeal}, hide: false}]`;\r\n }else{\r\n return `[{name: 'Lender', disable: true, hide: false}]`;\r\n }\r\n\r\n }\r\n}\r\n","import { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { SaveDevFinanceSearchRequest } from \"@js/DTO/Messages/Deal/SaveDevFinanceSearchMessage.cs.d\";\r\nimport {\r\n UpdateDevFinanceSearchGetResultRequest,\r\n UpdateDevFinanceSearchGetResultResponse,\r\n} from \"@js/DTO/Messages/Deal/UpdateDevFinanceSearchGetResultMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { BuildProcurementTypeEnum } from \"@js/models/enum/BuildProcurementTypeEnum.cs.d\";\r\nimport { ExitStrategyEnum } from \"@js/models/enum/ExitStrategyEnum.cs.d\";\r\nimport { LoanCompletionTypeEnum } from \"@js/models/enum/LoanCompletionTypeEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { PlanningPermissionTypeEnum } from \"@js/models/enum/PlanningPermissionTypeEnum.cs.d\";\r\nimport { PlanningResponsibilityEnum } from \"@js/models/enum/PlanningResponsibilityEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { TimeLeftOnLeaseEnum } from \"@js/models/enum/TimeLeftOnLeaseEnum.cs.d\";\r\nimport { SaveSearchReturnUniqueRefResponse } from \"@js/models/SaveSearchReturnUniqueRef.cs.d\";\r\n\r\nexport class DevFinanceDealService extends BaseService<\r\n DevelopmentFinanceDealDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/devfinancedeal\";\r\n this.$broadcastBusinessNameSingular = \"devfinancedeal\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Updates the search Deal based on the DevelopmentFinanceDealDTO and returns the search results on the new criteria\r\n * @param criteriaDto\r\n * @param criteriaChanged only set to true when the search criteria changes, and not the filters. This controls data snapshotting.\r\n */\r\n updateSearchCriteriaAndGetResults(\r\n criteriaDto: DevelopmentFinanceDealDTO,\r\n criteriaChanged: boolean = false,\r\n debug1: boolean,\r\n isPostcodeChanged: boolean = false,\r\n isShortlistingMore: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var request: UpdateDevFinanceSearchGetResultRequest = {\r\n DevFinanceDealDto: criteriaDto,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: 0, //TODO: typings aren't picking up default values\r\n Debug1: debug1, //TODO: typings aren't picking up default values\r\n Debug2: false, //TODO: typings aren't picking up default values\r\n IsPostcodeChange: isPostcodeChanged,\r\n IsShortlistingMore:isShortlistingMore\r\n };\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/updatesearchandgetresults\",\r\n JSON.stringify(request),\r\n )\r\n .then((response) => {\r\n var res = response.data as UpdateDevFinanceSearchGetResultResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveDevFinanceSearchReturnsId(\r\n request: SaveDevFinanceSearchRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/savedevfinancesearchreturnsId\", request)\r\n .then((response) => {\r\n var res = response.data as number;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveDevFinanceSearchReturnsUniqueRef(\r\n request: SaveDevFinanceSearchRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/savedevfinancesearchreturnsuniqueref\",\r\n request,\r\n )\r\n .then((response) => {\r\n var res = response.data as SaveSearchReturnUniqueRefResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n debugSearch(dealDto: DevelopmentFinanceDealDTO): ng.IPromise<[]> {\r\n let defer = this.$q.defer<[]>();\r\n this.$http\r\n .get(this.$baseAddress + \"/debugSearch\")\r\n .then((response) => {\r\n defer.resolve(response.data as []);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n clearSearchdata(dealDto) {\r\n let tempDealDto = { ...dealDto };\r\n dealDto = {} as DevelopmentFinanceDealDTO;\r\n dealDto.Id = tempDealDto.Id;\r\n dealDto.HasIsFamilyInResidence = tempDealDto.HasIsFamilyInResidence;\r\n dealDto.IsFamilyInResidence = tempDealDto.IsFamilyInResidence;\r\n dealDto.PropertyAddress = tempDealDto.PropertyAddress;\r\n dealDto = this.initialDataSetUpForDeal(dealDto);\r\n return dealDto;\r\n }\r\n\r\n initialDataSetUpForDeal(dealDto: DevelopmentFinanceDealDTO) {\r\n dealDto.MaxLoanRequired = true;\r\n dealDto.ProductType = ProductTypeEnum.Development;\r\n dealDto.ProductFamily = ProductFamilyEnum.Development;\r\n dealDto.OwnOrPurchase = OwnOrPurchaseEnum.Purchasing;\r\n dealDto.EndPropertyType = PropertyTypeEnum.Residential;\r\n dealDto.LoanCompletionType = LoanCompletionTypeEnum.JustCheckingMyOptions;\r\n dealDto.ShowLenderInfoBrokerOverride = true;\r\n dealDto.hasPostcode = true;\r\n dealDto.PlanningStatusAtEndOfLoan =\r\n PlanningPermissionTypeEnum.DetailedPlanning;\r\n dealDto.PlanningResponsibility = PlanningResponsibilityEnum.Borrower;\r\n dealDto.BuildProcurementType = BuildProcurementTypeEnum.TraditionalContract;\r\n dealDto.ExitStrategy = ExitStrategyEnum.Sale;\r\n dealDto.HasOwnOrPurchase = false;\r\n\r\n return dealDto;\r\n }\r\n\r\n datasetupOnOwnOrPurchaseChange(dealDto) {\r\n if (\r\n dealDto.OwnOrPurchase != null &&\r\n dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Purchasing\r\n ) {\r\n dealDto.OriginalPurchaseDate = null;\r\n dealDto.Currentvalue = null;\r\n dealDto.LandTotalOtherCosts = 0;\r\n }\r\n\r\n if (\r\n dealDto.OwnOrPurchase != null &&\r\n dealDto.OwnOrPurchase == OwnOrPurchaseEnum.Own\r\n ) {\r\n dealDto.PurchaseCosts = 0;\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnCurrentUseOfBuilding(dealDto) {\r\n if (\r\n dealDto.CurrentPropertyType != null &&\r\n dealDto.CurrentPropertyType == PropertyTypeEnum.HMO\r\n ) {\r\n dealDto.UnitCount = null;\r\n dealDto.TimeLeftOnLease = TimeLeftOnLeaseEnum.OneToThreeYears;\r\n } else if (\r\n dealDto.CurrentPropertyType != null &&\r\n dealDto.CurrentPropertyType == PropertyTypeEnum.MultiUnitFreeholdBlock\r\n ) {\r\n dealDto.BedroomCount = null;\r\n dealDto.TimeLeftOnLease = TimeLeftOnLeaseEnum.OneToThreeYears;\r\n } else if (\r\n dealDto.CurrentPropertyType != null &&\r\n dealDto.CurrentPropertyType != PropertyTypeEnum.MultiUnitFreeholdBlock &&\r\n dealDto.CurrentPropertyType != PropertyTypeEnum.HMO\r\n ) {\r\n dealDto.BedroomCount = null;\r\n dealDto.UnitCount = null;\r\n }\r\n return dealDto;\r\n }\r\n\r\n datasetupOnIsTenantedBuildingChange(dealDto: DevelopmentFinanceDealDTO) {\r\n if (!dealDto.IsTenantedBuilding) {\r\n dealDto.NumberOfTenancies = null;\r\n }\r\n return dealDto;\r\n }\r\n}\r\n","import { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { DevFinanceSearchResultsResponse } from \"@js/DTO/Messages/Deal/DevFinanceSearchResultMessage.cs.d\";\r\nimport { SearchResultsRequest } from \"@js/DTO/Messages/Deal/SearchResultMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DevFinanceSearchResultsService extends BaseService<\r\n DevelopmentFinanceDealDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/devfinancesearchresults\";\r\n this.$broadcastBusinessNameSingular = \"devfinancesearchresults\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Gets the search criteria and the search results based on the search criteria ID passed in\r\n * @param criteriaId\r\n * @param criteriaChanged - has the search criteria chaged? Used for snapshotting.\r\n * @param limit - the number of search results to display TODO - is this needed for search results????\r\n * @param debug1\r\n * @param debug2\r\n */\r\n getSearchCriteriaAndResultsByDealId(\r\n dealId: number,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealId: dealId,\r\n DealClientUniqueRef: null,\r\n DealUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n /**\r\n * Gets the search criteria and the search results based on the DealClient UniqueRef passed in\r\n * @param criteriaId\r\n * @param limit - the number of search results to display TODO - is this needed for search results????\r\n * @param debug1\r\n * @param debug2\r\n */\r\n getSearchCriteriaAndResultsByDealClientUniqueRef(\r\n dealClientUniqueRef: string,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealClientUniqueRef: dealClientUniqueRef,\r\n DealUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n getSearchCriteriaAndResultsByDealUniqueRef(\r\n dealUniqueref: string,\r\n criteriaChanged: boolean = false,\r\n limit: number = 0,\r\n debug1: boolean = false,\r\n debug2: boolean = false,\r\n ): ng.IPromise {\r\n var request: SearchResultsRequest = {\r\n DealId: null,\r\n DealUniqueRef: dealUniqueref,\r\n DealClientUniqueRef: null,\r\n ReturnSearchCriteriaDTO: true,\r\n CriteriaChanged: criteriaChanged,\r\n Limit: limit, // TODO is this needed for search results??\r\n Debug1: debug1,\r\n Debug2: debug2,\r\n };\r\n\r\n return this.getSearchCriteriaAndResults(request);\r\n }\r\n\r\n /**\r\n * Fetches the Commercial Search based on the request passed in\r\n * @param request\r\n */\r\n private getSearchCriteriaAndResults(\r\n request: SearchResultsRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/getsearchcriteriaandresults\",\r\n JSON.stringify(request),\r\n )\r\n .then((response) => {\r\n var res = response.data as DevFinanceSearchResultsResponse;\r\n defer.resolve(res);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { ShareDealDTO } from \"@js/DTO/Deal/SearchDealDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { LocationEnum } from \"@js/models/enum/LocationEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\nimport _ from \"lodash\";\r\nimport { OrganisationService } from \"../OrganisationService\";\r\nimport { ProductService } from \"../ProductService\";\r\n\r\nexport class SharedCriteriaService {\r\n dataLoading: boolean;\r\n\r\n \r\n static $inject = [\"$q\", \"ProductService\", \"OrganisationService\"];\r\n \r\n constructor(\r\n private $q: ng.IQService,\r\n private productService: ProductService,\r\n private organisationService: OrganisationService,\r\n ) {}\r\n\r\n /**\r\n * Adding a selected existing user from sharemodel dropdown to shareDealDto\r\n * @param existingUsers\r\n * @param shareDealDto\r\n * @param userName\r\n * @returns updated shareDealDto\r\n */\r\n attachSelectedClientToShareDealDto(\r\n existingUsers: UserSimpleDTO[],\r\n shareDealDto: ShareDealDTO,\r\n userName: string,\r\n ): ShareDealDTO {\r\n var users = existingUsers.filter(\r\n (x) => x.Email && x.Email.indexOf(userName) !== -1,\r\n );\r\n\r\n shareDealDto.IsApplicant = true;\r\n shareDealDto.IsPrimary = true;\r\n\r\n shareDealDto.ClientDto = {\r\n FirstName: users[0].FirstName,\r\n LastName: users[0].LastName,\r\n Email: users[0].Email,\r\n PhoneNumber: users[0].PhoneNumber,\r\n ClientUserId: users[0].Id,\r\n } as ClientDTO;\r\n\r\n return shareDealDto;\r\n }\r\n\r\n /**\r\n * Sets a clientDto value to null\r\n * @param shareDealDto\r\n * @returns updated shareDealDto\r\n */\r\n clearExistingUserOnShareDealDto(shareDealDto): ShareDealDTO {\r\n if (shareDealDto.ClientDto) {\r\n shareDealDto.ClientDto.FirstName = null;\r\n shareDealDto.ClientDto.LastName = null;\r\n shareDealDto.ClientDto.Email = null;\r\n shareDealDto.ClientDto.PhoneNumber = null;\r\n }\r\n\r\n return shareDealDto;\r\n }\r\n\r\n /**\r\n * Returns a default search name depending on product type\r\n * @param shareDealDto\r\n * @returns default search name\r\n */\r\n\r\n defaultSearchName(\r\n productType: ProductTypeEnum,\r\n isRegulatedBridge: boolean = false,\r\n ) {\r\n var currentdate = new Date();\r\n var productTypeDisplayText = \"\";\r\n\r\n if (isRegulatedBridge) {\r\n productTypeDisplayText = \"Regulated Bridge\";\r\n } else {\r\n productTypeDisplayText =\r\n this.productService.getProductTypeDisplayText(productType);\r\n }\r\n\r\n return (\r\n \"My \" +\r\n productTypeDisplayText +\r\n \" Loan Search \" +\r\n currentdate.getDate() +\r\n \"/\" +\r\n (currentdate.getMonth() + 1) +\r\n \"/\" +\r\n currentdate.getFullYear()\r\n );\r\n }\r\n\r\n setNewSearch(dealDto, snapshotDealDto): void {\r\n var criteriaChanged = true;\r\n //Store that this is a new search\r\n if (sessionStorage.getItem(\"skip\") == \"true\") {\r\n criteriaChanged = !_.isEqual(dealDto, snapshotDealDto);\r\n }\r\n\r\n if (window.self == window.top) {\r\n sessionStorage.setItem(\"newSearch\", criteriaChanged.toString());\r\n } else {\r\n this.organisationService.sendDataToParent(\r\n \"newSearch\",\r\n criteriaChanged.toString(),\r\n );\r\n }\r\n }\r\n\r\n setClientDtoDataForEnterpriseSearch(\r\n user: ApplicationUserDTO,\r\n brokerageOrgId: number,\r\n clientDto: ClientDTO,\r\n ): ClientDTO {\r\n let userFullName = user.FullName;\r\n let spaceIndex = userFullName.indexOf(\" \");\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n // if not space has been added to the name then put the whole name in the first name field\r\n if (spaceIndex == -1) {\r\n firstName = userFullName;\r\n } else {\r\n firstName = userFullName.substring(0, userFullName.indexOf(\" \"));\r\n lastName = userFullName.substring(userFullName.indexOf(\" \") + 1);\r\n }\r\n\r\n clientDto = {\r\n FirstName: firstName,\r\n LastName: lastName,\r\n Email: user.Email,\r\n PhoneNumber: user.PhoneNumber,\r\n BrokerOrganisationId: brokerageOrgId,\r\n PostalAddress: {\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n AddressLine3: \"\",\r\n AddressLine4: \"\",\r\n PostCode: \"\",\r\n } as PostalAddress,\r\n } as ClientDTO;\r\n\r\n return clientDto;\r\n }\r\n\r\n getRandomIntInclusive(min, max) {\r\n min = Math.ceil(min);\r\n max = Math.floor(max);\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n }\r\n\r\n getRandomPostcode() {\r\n //TODO This is code that was conflicting during the merge between BorrowerNotifications and DevFinDeal. Leaving here in case it shoudl be re-instated:\r\n //const postcodes = [\r\n // \"SW1A 1AA\", // Buckingham Palace\r\n // \"SW1A 2AA\", // Downing Street\r\n // \"E1 6AN\", // Near Shoreditch, London\r\n // \"B1 1TB\", // Birmingham City Centre\r\n // \"G1 1QX\", // Glasgow City Centre\r\n // \"L1 8JQ\", // Liverpool City Centre\r\n // \"M1 1AG\", // Manchester City Centre\r\n // \"S1 2BJ\", // Sheffield City Centre\r\n // \"NE1 1EE\", // Newcastle City Centre\r\n // \"CF10 1EP\" // Cardiff City Centre\r\n //];\r\n\r\n //const randomIndex = Math.floor(Math.random() * postcodes.length);\r\n //return postcodes[randomIndex];\r\n\r\n var postCodeList = [\r\n \"SW1\",\r\n \"GL1\",\r\n \"BS32\",\r\n \"DH2 1JR\",\r\n \"SR2 9DJ\",\r\n \"LL30 2AS\",\r\n \"PO32 6BT\",\r\n \"M27 5TR\",\r\n \"EH15 3PQ\",\r\n \"WD3 8QB\",\r\n ];\r\n\r\n return postCodeList[this.getRandomIntInclusive(0, 9)];\r\n }\r\n\r\n getRegionByPostcode(postcode) {\r\n var region = {\r\n SW1: LocationEnum.London,\r\n GL1: LocationEnum.SouthWest,\r\n BS32: LocationEnum.SouthWest,\r\n \"DH2 1JR\": LocationEnum.Wales,\r\n \"SR2 9DJ\": LocationEnum.SouthWest,\r\n \"LL30 2AS\": LocationEnum.Wales,\r\n \"PO32 6BT\": LocationEnum.SouthEast,\r\n \"M27 5TR\": LocationEnum.NorthWest,\r\n \"EH15 3PQ\": LocationEnum.Scotland,\r\n \"WD3 8QB\": LocationEnum.EastofEngland,\r\n };\r\n\r\n return region[postcode];\r\n }\r\n\r\n storeEnterpriseLinkType(linkType: string){\r\n if (window.self == window.top) {\r\n sessionStorage.setItem(\r\n \"enterpriseLinkType\",\r\n linkType\r\n );\r\n } else {\r\n this.organisationService.sendDataToParent(\r\n \"enterpriseLinkType\",linkType\r\n );\r\n }\r\n }\r\n\r\n getIsDataLoading() {\r\n return this.dataLoading;\r\n }\r\n\r\n setIsDataLoading(dataLoading) {\r\n this.dataLoading = dataLoading;\r\n }\r\n\r\n }\r\n\r\n// AngularJS service registration\r\n","export const enum AppraisalModuleEnum {\r\n Overview = 0,\r\n Borrower = 1,\r\n Property = 2,\r\n Loan = 3,\r\n}\r\n","export const enum OwnershipRoleEnum {\r\n None = 0,\r\n Director = 1,\r\n Shareholder = 2,\r\n DirectorAndShareholder,\r\n Member = 4,\r\n Partner = 5,\r\n}\r\n","import { DealClientDTO } from \"@js/DTO/Deal/DealClientDTO.cs.d\";\r\nimport { AppraisalModuleEnum } from \"@js/models/enum/AppraisalModuleEnum.cs.d\";\r\nimport { OwnershipRoleEnum } from \"@js/models/enum/OwnershipRoleEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\n\r\nexport class SharedDealService {\r\n tinymceOptions = {\r\n content_style: \"body {color: black;font:300 12px Roboto,sans-serif;}\",\r\n menubar: false,\r\n height: 150,\r\n branding: false,\r\n statusbar: false,\r\n plugins: [\r\n \"advlist autolink lists link image charmap print preview anchor\",\r\n \"searchreplace visualblocks code fullscreen\",\r\n \"insertdatetime media table paste code help wordcount\",\r\n ],\r\n toolbar:\r\n \"undo redo | formatselect | \" +\r\n \"bold italic backcolor forecolor | alignleft aligncenter \" +\r\n \"alignright alignjustify | bullist numlist outdent indent | preview |\" +\r\n \"removeformat | help\",\r\n };\r\n\r\n static $inject = [\"$q\"];\r\n\r\n constructor(private $q: ng.IQService) { }\r\n\r\n disablePersonalDetails(\r\n currentApplicant: DealClientDTO,\r\n personalDetailsForm: ng.IFormController,\r\n ) {\r\n if (currentApplicant == null) return true;\r\n\r\n let selectFields = [currentApplicant.Profile.CountryOfResidence];\r\n\r\n if (personalDetailsForm.$invalid) return true;\r\n\r\n for (let i = 0; i < selectFields.length; i++) {\r\n if (selectFields[i] == \"0\" || selectFields[i] == undefined) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n modifyDateForFrontend(property: Date) {\r\n let receivedDate = new Date(property.getTime());\r\n\r\n receivedDate.setUTCMinutes(\r\n receivedDate.getUTCMinutes() + receivedDate.getTimezoneOffset(),\r\n );\r\n property = receivedDate;\r\n return property;\r\n }\r\n\r\n modifyDateForBackend(property: Date) {\r\n let originalDate = new Date(property.getTime());\r\n\r\n originalDate.setUTCMinutes(\r\n originalDate.getUTCMinutes() - originalDate.getTimezoneOffset(),\r\n );\r\n property = originalDate;\r\n return property;\r\n }\r\n\r\n /**\r\n * Determines when to show/hide the Invite button\r\n * @param shareholder\r\n */\r\n showInviteButton(shareholder: DealClientDTO) {\r\n // If the shareholder has already been verified then don't show the button\r\n if (shareholder.IsVerified) {\r\n return false;\r\n }\r\n\r\n // At least 2 of the security questions should be answered\r\n var count = 0;\r\n\r\n if (shareholder.Client.PhoneNumber) {\r\n count++;\r\n }\r\n\r\n if (shareholder.Client.PostalAddress.PostCode) {\r\n count++;\r\n }\r\n\r\n if (shareholder.Client.DateOfBirth) {\r\n count++;\r\n }\r\n\r\n if (count >= 2) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n nonUkWarningVisible(currentApplicant: DealClientDTO): boolean {\r\n if (\r\n currentApplicant &&\r\n currentApplicant.Profile &&\r\n currentApplicant.Profile.CountryOfResidence\r\n ) {\r\n return (\r\n currentApplicant.Profile.CountryOfResidence !=\r\n \"United Kingdom of Great Britain and Northern Ireland (the)\"\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n constructShareNoteMessage(shareContext, currentUser): string {\r\n var message: string;\r\n var messageStart: string = `Please take a look at the `;\r\n var messageEnd: string =\r\n ` section in your Smart Appraisalâ„¢ and complete as much as you can.\\n\\nIf you would like our help or want us to complete this module with you, please do give me a call on ` +\r\n currentUser.PhoneNumber +\r\n `.`;\r\n\r\n switch (shareContext) {\r\n case AppraisalModuleEnum.Borrower:\r\n message =\r\n \"Please review your Borrower profile and help your broker by completing all of the necessary information.\\n\\nProviding lenders with as much information as possible about your experience helps them to make quicker and more reliable decisions.\\n\\n\";\r\n break;\r\n case AppraisalModuleEnum.Property:\r\n message = messageStart + `\"Property\"` + messageEnd;\r\n break;\r\n case AppraisalModuleEnum.Loan:\r\n message = messageStart + `\"Loan\"` + messageEnd;\r\n break;\r\n case AppraisalModuleEnum.Overview:\r\n message =\r\n \"Please upload the supporting documents associated with your project.\\n\\nAdding supporting documents helps lenders make quicker and more reliable decisions.\";\r\n break;\r\n }\r\n\r\n return message;\r\n }\r\n\r\n addressHistoryComplete(\r\n currentApplicant,\r\n applicantAddressHistory,\r\n missingAddressGaps,\r\n ) {\r\n const gapAllowed = 7 /* Number of days */ * 24 * 60 * 60 * 1000;\r\n const gaps = [];\r\n\r\n // Calculate the target date 3 years ago\r\n const threeYearsAgo = new Date();\r\n threeYearsAgo.setFullYear(threeYearsAgo.getFullYear() - 3);\r\n\r\n let currentTime = currentApplicant.Profile.CurrentAddressFrom;\r\n\r\n // Exit early if the current address already covers 3 years\r\n if (currentTime <= threeYearsAgo) {\r\n return true;\r\n }\r\n\r\n // Sort the applicant address history by FromDate in descending order\r\n applicantAddressHistory.sort(\r\n (a, b) => b.FromDate.getTime() - a.FromDate.getTime(),\r\n );\r\n\r\n let lastToDate = currentTime; // Initialize lastToDate with the current address's FromDate\r\n\r\n // Loop through sorted history to identify gaps\r\n for (const {\r\n FromDate: fromDate,\r\n ToDate: toDate,\r\n } of applicantAddressHistory) {\r\n // Register a gap if one exists between toDate and lastToDate\r\n if (toDate.getTime() + gapAllowed < lastToDate.getTime()) {\r\n gaps.push([new Date(toDate.getTime()), new Date(lastToDate.getTime())]);\r\n }\r\n\r\n lastToDate = fromDate;\r\n }\r\n\r\n // Check for a gap between the earliest FromDate and threeYearsAgo\r\n if (lastToDate > threeYearsAgo) {\r\n gaps.push([threeYearsAgo, lastToDate]);\r\n }\r\n\r\n // Convert the gaps into readable strings\r\n missingAddressGaps = gaps.map(\r\n (gap) =>\r\n `${gap[0].toLocaleDateString()} to ${gap[1].toLocaleDateString()}`,\r\n );\r\n\r\n // Return false if gaps are present, otherwise return true\r\n return gaps.length === 0;\r\n }\r\n\r\n getNextAddressHistoryId(applicantAddressHistory): number {\r\n if (applicantAddressHistory.length == 0) {\r\n return 1;\r\n } else {\r\n // Get the current maximum Id and add one to it for the next ID\r\n var id = Math.max.apply(\r\n Math,\r\n applicantAddressHistory.map(function (a) {\r\n return a.Id;\r\n }),\r\n );\r\n id++;\r\n return id;\r\n }\r\n }\r\n\r\n getAddressAsString(address: PostalAddress) {\r\n var addressAsString: string = \"\";\r\n\r\n addressAsString = this.concatenateAddressLine(\r\n address.AddressLine1,\r\n addressAsString,\r\n );\r\n addressAsString = this.concatenateAddressLine(\r\n address.AddressLine2,\r\n addressAsString,\r\n );\r\n addressAsString = this.concatenateAddressLine(\r\n address.AddressLine3,\r\n addressAsString,\r\n );\r\n addressAsString = this.concatenateAddressLine(\r\n address.AddressLine4,\r\n addressAsString,\r\n );\r\n\r\n return addressAsString;\r\n }\r\n\r\n concatenateAddressLine(addressLine: string, concatenatedAddress: string) {\r\n if (addressLine != null && addressLine.length > 0) {\r\n if (concatenatedAddress.length > 0) {\r\n concatenatedAddress = concatenatedAddress.concat(\", \", addressLine);\r\n } else {\r\n concatenatedAddress = concatenatedAddress.concat(addressLine);\r\n }\r\n }\r\n\r\n return concatenatedAddress;\r\n }\r\n\r\n calculateTotalShareholding(\r\n currentapplicant: DealClientDTO,\r\n applicantList: DealClientDTO[],\r\n ) {\r\n var shareholdingApplicants = applicantList.filter(\r\n (o) =>\r\n o.OwnershipRole != OwnershipRoleEnum.Director &&\r\n o.OwnershipRole != OwnershipRoleEnum.None,\r\n );\r\n var totalShareholding = shareholdingApplicants.reduce(\r\n (accumulator, currentValue) =>\r\n accumulator + Number(currentValue.OwnershipPercentage),\r\n 0,\r\n );\r\n\r\n if (currentapplicant.Id == null || currentapplicant.Id < 1) {\r\n return totalShareholding + Number(currentapplicant.OwnershipPercentage) >\r\n 1\r\n ? true\r\n : false;\r\n } else if (currentapplicant.Id > 0) {\r\n return totalShareholding > 1 ? true : false;\r\n }\r\n }\r\n\r\n getOwnershipPercentageText(currentApplicant, productType) {\r\n if (productType == ProductTypeEnum.CommercialOwnerOccupied) {\r\n if (\r\n currentApplicant.OwnershipRole == OwnershipRoleEnum.Shareholder ||\r\n currentApplicant.OwnershipRole ==\r\n OwnershipRoleEnum.DirectorAndShareholder\r\n ) {\r\n return \"Shareholding\";\r\n } else if (currentApplicant.OwnershipRole == OwnershipRoleEnum.Member) {\r\n return \"Member\";\r\n } else if (currentApplicant.OwnershipRole == OwnershipRoleEnum.Partner) {\r\n return \"Partner\";\r\n }\r\n } else {\r\n return \"Shareholding\";\r\n }\r\n }\r\n\r\n showBasedOnMainResidence(dealDto): boolean {\r\n return (\r\n dealDto.IsFamilyInResidence != 1 ||\r\n (dealDto.IsFamilyInResidence == 1 &&\r\n (dealDto.ProductType == ProductTypeEnum.BridgingPurchaseOrRefinance ||\r\n dealDto.ProductType == ProductTypeEnum.BridgingRefurb))\r\n );\r\n }\r\n\r\n downloadFile(fileUrl: string, fileName: string) {\r\n fetch(fileUrl)\r\n .then(response => response.blob()) // Convert the response to a Blob\r\n .then(blob => {\r\n // Create a temporary URL for the Blob\r\n var blobUrl = window.URL.createObjectURL(blob);\r\n\r\n // Create a hidden element\r\n var link = document.createElement('a');\r\n link.href = blobUrl;\r\n link.download = fileName;\r\n\r\n // Append the link to the body and click it programmatically\r\n document.body.appendChild(link);\r\n link.click();\r\n\r\n // Clean up: Remove the link and revoke the Blob URL\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(blobUrl);\r\n })\r\n }\r\n\r\n getTime(date?: Date): number {\r\n if (!(date instanceof Date) || isNaN(date.getTime())) {\r\n return 0; // Return 0 for invalid dates\r\n }\r\n return date.getTime();\r\n }\r\n\r\n /**\r\n * Tests whether a string is a date and converts it if so - used in JSON.parse\r\n * @param key\r\n * @param value\r\n */\r\n reviver(key, value) {\r\n if (typeof value === \"string\" && (key === \"ToDate\" || key === \"FromDate\")) {\r\n const timestamp = new Date(value).getTime(); // this is a hack to fix native Date.Parse() being overwritten by datejs, which is returns null rather than NaN\r\n\r\n if (!isNaN(timestamp)) {\r\n return new Date(timestamp); // Only return a Date if timestamp is valid\r\n }\r\n\r\n return null; // Return `null` explicitly for invalid dates\r\n }\r\n\r\n return value; // Return the value unchanged for non-date keys\r\n }\r\n}\r\n","import { BridgingDealDTO } from \"@js/DTO/Deal/BridgingDealDTO.cs.d\";\r\nimport { CommercialDealDTO } from \"@js/DTO/Deal/CommercialDealDTO.cs.d\";\r\nimport { DevelopmentFinanceDealDTO } from \"@js/DTO/Deal/DevelopmentFinanceDealDTO.cs.d\";\r\nimport { BridgingPersonalGuaranteeLevelEnum } from \"@js/models/enum/BridgingPersonalGuaranteeLevelEnum.cs.d\";\r\n\r\nexport class SharedSearchResultsService {\r\n static $inject = [\"$q\", \"$cookies\"];\r\n\r\n constructor(\r\n private $q: ng.IQService,\r\n private $cookies: ng.cookies.ICookiesService,\r\n ) { }\r\n\r\n updateGuidanceState(guidanceCheckbox) {\r\n guidanceCheckbox =\r\n this.$cookies.get(\"guidance\") === \"on\" ||\r\n this.$cookies.get(\"guidance\") === undefined;\r\n // Update tour settings\r\n let tourEnabled = this.$cookies.get(\"tourEnabled\");\r\n if (\r\n (tourEnabled == \"true\" || tourEnabled === undefined) &&\r\n guidanceCheckbox\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n getGuidanceSwitchState() {\r\n if (!this.$cookies.get(\"guidance\")) {\r\n return true;\r\n } else if (this.$cookies.get(\"guidance\") === \"on\") {\r\n return true;\r\n } else if (this.$cookies.get(\"guidance\") === \"off\") {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n recordGuidanceCookie(guidanceCheckbox) {\r\n var guidanceSwitchState: string;\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 365);\r\n if (guidanceCheckbox == true) {\r\n guidanceSwitchState = \"on\";\r\n } else {\r\n guidanceSwitchState = \"off\";\r\n }\r\n this.$cookies.put(\"guidance\", guidanceSwitchState, { expires: expiryDate });\r\n }\r\n\r\n clearStorageDataForCompareView() {\r\n // Makeing sure all the old data is deleted\r\n sessionStorage.removeItem(\"LoanCriteria\");\r\n sessionStorage.removeItem(\"DealClientUniqueRef\");\r\n sessionStorage.removeItem(\"ComparisonList\");\r\n sessionStorage.removeItem(\"TempSavedResults\");\r\n }\r\n\r\n getSearchResultCount(summarySearchResults) {\r\n if (summarySearchResults) {\r\n return summarySearchResults.length;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n getPersonalGuaranteeLevelOptions(F_PersonalGuaranteeMax) {\r\n var value = null;\r\n switch (F_PersonalGuaranteeMax) {\r\n case 0.0:\r\n value = BridgingPersonalGuaranteeLevelEnum.None;\r\n break;\r\n case 0.25:\r\n value = BridgingPersonalGuaranteeLevelEnum.OneToTwentyFivePercent;\r\n break;\r\n case 0.5:\r\n value = BridgingPersonalGuaranteeLevelEnum.TwentySixToFiftyPercent;\r\n break;\r\n case 1.0:\r\n value = BridgingPersonalGuaranteeLevelEnum.FiftyOneToOneHundredPercent;\r\n break;\r\n default:\r\n value = null;\r\n break;\r\n }\r\n return value;\r\n }\r\n\r\n getDisplayTextForProperty(property) {\r\n switch (property) {\r\n case \"F_IsFirstTimeDeveloper\":\r\n return \"1st Time Dev\";\r\n case \"F_NumberOfPreviousDevelopments\":\r\n return \"Previous Developments\";\r\n case \"F_IsPersonalName\":\r\n return \"Personal Name\";\r\n case \"F_IsOffshoreCompany\":\r\n return \"Non-UK Company\";\r\n case \"F_IsMainShareholderOverseas\":\r\n return \"Client Based Overseas\";\r\n case \"F_IsGradeOneListed\":\r\n return \"Grade 1 Listed\";\r\n case \"F_IsGradeTwoListed\":\r\n return \"Grade 2 Listed\";\r\n case \"F_MaxHouseSalesPrice\":\r\n return \"Max Sales Price (Houses)\";\r\n case \"F_MaxSqFtSalePrice\":\r\n return \"Max £/sq.ft (Houses)\";\r\n case \"F_MaxSqFtSalePriceFlats\":\r\n return \"Max £/sq.ft (Flats)\";\r\n case \"F_MaxFlatUnitPrice\":\r\n return \"Max Sales Price (Flats)\";\r\n case \"F_IsChargeOnAdditionalProperty\":\r\n return \"Additional Security\";\r\n case \"F_IsFixedRate\":\r\n return \"Fixed Rate\";\r\n case \"F_IsShariaLoan\":\r\n return \"Sharia Loan\";\r\n case \"F_IsSyndicationLoan\":\r\n return \"Syndication Loan\";\r\n case \"F_PersonalGuaranteeMax\":\r\n return \"Personal Guarantee\";\r\n case \"F_IsReBridge\":\r\n return \"Re-Bridge\";\r\n case \"F_IsServicedInterest\":\r\n return \"Serviced Interest\";\r\n case \"F_IsTitleInsurance\":\r\n return \"Title Insurance\";\r\n case \"F_IsIndemnityInsurance\":\r\n return \"Indemnity Insurance\";\r\n case \"F_IsRetypedValuation\":\r\n return \"Retyped Valuation\";\r\n case \"F_MinOwnershipPeriod\":\r\n return \"Min Ownership Period\";\r\n case \"F_IsTimberFrameConstruction\":\r\n return \"Timber Frame Construction\";\r\n case \"F_IsConcreteConstruction\":\r\n return \"Concrete Construction\";\r\n case \"F_MaxNumberOfBedrooms\":\r\n return \"Max Number Of Bedrooms\";\r\n case \"F_MaxIndividualUnitPrice\":\r\n return \"Max Individual Unit Price\";\r\n case \"F_AcceptableEPCRating\":\r\n return \"Acceptable EPC Rating\";\r\n case \"F_EWS1AcceptableType\":\r\n return \"EWS1 acceptable type\";\r\n case \"F_IsInterestOnly\":\r\n return \"Interest Only\";\r\n case \"F_IsCapitalAndRepayment\":\r\n return \"Capital And Interest\";\r\n case \"F_MaxNumberOfUnits\":\r\n return \"Max Number Of Units\";\r\n case \"F_ShareholderDepositRequired\":\r\n return \"Shareholder Deposit Required\";\r\n case \"F_PersonalGuaranteeLevel\":\r\n return \"Personal Guarantee Level\";\r\n case \"F_IsModular\":\r\n return \"Modular Construction\";\r\n case \"F_IsAirRights\":\r\n return \"Air Rights\";\r\n case \"F_IsPermittedDevelopmentScheme\":\r\n return \"Permitted Development Scheme\";\r\n case \"F_MaxPercCommercialForMixedUse\":\r\n return \"Max % Commercial (Mixed Use)\";\r\n case \"F_IsWorkStarted\":\r\n return \"Work Started\";\r\n case \"F_HasAdverseCredit\":\r\n return \"Adv. Credit\";\r\n case \"F_IsBelowMarketValue\":\r\n return \"BMV\";\r\n case \"F_IsAutomatedValuationModel\":\r\n return \"AVM\";\r\n case \"F_IsAuctionPurchase\":\r\n return \"Auction\";\r\n case \"F_ValuationMethod\":\r\n return \"Val. Method\";\r\n case \"F_MaxCommercialFloorspace\":\r\n return \"Com. Floorspace (max %)\";\r\n case \"F_MaxAgeAtStartOfMortgageTerm\":\r\n return \"Max age Start of Mortgage Term\";\r\n case \"F_MaxAgeAtEndOfMortgageTerm\":\r\n return \"Max age End of Mortgage Term\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n countFiltersSelected(\r\n loanCriteria:\r\n | BridgingDealDTO\r\n | CommercialDealDTO\r\n | DevelopmentFinanceDealDTO,\r\n filterProperties: string[],\r\n ) {\r\n let count = 0;\r\n if (loanCriteria) {\r\n filterProperties.forEach((property) => {\r\n if (this.checkFilterSelected(property, loanCriteria)) {\r\n count++;\r\n }\r\n });\r\n }\r\n return count;\r\n }\r\n\r\n checkFilterSelected(\r\n property: string,\r\n loanCriteria:\r\n | BridgingDealDTO\r\n | CommercialDealDTO\r\n | DevelopmentFinanceDealDTO,\r\n ) {\r\n let value = loanCriteria[property];\r\n\r\n if (typeof value === \"boolean\" && value === true) {\r\n return true;\r\n } else if (value != null && !isNaN(value) && typeof value != \"boolean\") {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n// AngularJS service registration\r\n","import { ClientDTO } from \"@js/DTO/ClientDTO.cs.d\";\r\nimport { DealClientDTO } from \"@js/DTO/Deal/DealClientDTO.cs.d\";\r\nimport { GetShareholderEmailAndSecurityQuestionsResponse } from \"@js/DTO/Messages/Deal/GetShareholderEmailAndSecurityQuestionsMessage.cs.d\";\r\nimport { MakeReferralMessageRequest } from \"@js/DTO/Messages/MakeReferralMessage.cs.d\";\r\nimport { SecurityCheckMessageRequest } from \"@js/DTO/Messages/SecurityCheckMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DealClientService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/dealclient\";\r\n this.$broadcastBusinessNameSingular = \"dealclient\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n fetchDealMembersWithAccess(dealId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchdealmemberswithaccess?dealId=\" + dealId)\r\n .then((response) => {\r\n defer.resolve(response.data as ClientDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchdealmemberswithaccess\",\r\n \"fetchdealmemberswithaccess failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n addorUpdateApplicant(\r\n dto: DealClientDTO,\r\n sendInviteEmail: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/addorupdateapplicant?sendInviteEmail=\" +\r\n sendInviteEmail,\r\n dto,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DealClientDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"addOrUpdateDealClient\",\r\n \"addOrUpdateDealClient failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n markAsDeleteAndSetNextApplicantAsPrimary(\r\n dealId: number,\r\n dealClientId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/markasdeleteandsetnextapplicantasprimary?dealId=\" +\r\n dealId +\r\n \"&dealClientId=\" +\r\n dealClientId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DealClientDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"markAsDeleteAndSetNextApplicantAsPrimary\",\r\n \"mark selected client as delete and set next deal client IsPrimary boolen to true\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n inviteApplicant(uniqueId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/inviteapplicant?uniqueId=\" + uniqueId)\r\n .then((response) => {\r\n defer.resolve(response.data as DealClientDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"inviteApplicant\",\r\n \"inviteApplicant failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n *Get the email for the shareholder\r\n * @param caseMemberId\r\n */\r\n getShareholderEmailAndSecurityQuestions(\r\n uniqueId: string,\r\n ): ng.IPromise {\r\n let defer =\r\n this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getshareholderemailandsecurityquestions?uniqueId=\" +\r\n uniqueId,\r\n )\r\n .then((response) => {\r\n defer.resolve(\r\n response.data as GetShareholderEmailAndSecurityQuestionsResponse,\r\n );\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"getDealClientEmailAndSecurityQuestions\",\r\n \"getDealClientEmailAndSecurityQuestions failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n securityCheck(\r\n uniqueId: string,\r\n phone?: string,\r\n postcode?: string,\r\n dob?: Date,\r\n orgUniqueRef?: string,\r\n brokerUserId?: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var dateOfBirthUtc;\r\n if (dob != null) {\r\n var tempDob = new Date();\r\n tempDob.setHours(0, 0, 0, 0);\r\n dateOfBirthUtc = new Date(\r\n tempDob.setUTCFullYear(\r\n dob.getFullYear(),\r\n dob.getMonth(),\r\n dob.getDate(),\r\n ),\r\n );\r\n dateOfBirthUtc.setUTCHours(0);\r\n dateOfBirthUtc.setUTCMinutes(0);\r\n dateOfBirthUtc.setUTCSeconds(0);\r\n dateOfBirthUtc.setUTCMilliseconds(0);\r\n }\r\n\r\n var request = {\r\n UniqueId: uniqueId,\r\n PhoneNumber: phone,\r\n PostCode: postcode,\r\n DateOfBirth: dateOfBirthUtc,\r\n OrgUniqueRef: orgUniqueRef,\r\n BrokerUserId: brokerUserId,\r\n } as SecurityCheckMessageRequest;\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/securityCheck\", request)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"securityCheck\",\r\n \"securityCheck failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n *fetch shareholder by uniqueId\r\n * @param uniqueId\r\n */\r\n fetchDealClientByUniqueId(uniqueId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress + \"/fetchdealclientbyuniqueId?uniqueId=\" + uniqueId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DealClientDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"FetchCaseMemberAndReturnRegisterInformation\",\r\n \"FetchCaseMemberAndReturnRegisterInformation failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n *updates a client, delclient and profile data\r\n * @param uniqueId\r\n */\r\n updateApplicant(dto: DealClientDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(this.$baseAddress + \"/updateapplicantdetails\", dto)\r\n .then((response) => {\r\n defer.resolve(response.data as DealClientDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"UpdateApplicantDetails\",\r\n \"UpdateApplicantDetails failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveAddressHistory(\r\n dealClientId: number,\r\n addressHistory: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .put(\r\n this.$baseAddress + \"/saveaddresshistory?dealClientId=\" + dealClientId,\r\n JSON.stringify(addressHistory),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"saveAddressHistory\",\r\n \"Save Address History failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n submitLenderReferral(\r\n lenderReferralData: MakeReferralMessageRequest,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/submitlenderreferral\",\r\n JSON.stringify(lenderReferralData),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n addCurrentUserToDeal(dealUniqueRef: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/addcurrentusertodeal?dealUniqueRef=\" +\r\n dealUniqueRef,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n UpdateClientContactInfoAndNotifyBroker(updatedContact: string, dealId: number, clientId:number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/updateclientcontactinfoandnotifybroker?updatedContact=\" +\r\n updatedContact +\r\n \"&dealId=\" +\r\n dealId +\r\n \"&clientId=\" + clientId)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DealCompletionDTO } from \"@js/DTO/DealCompletionDTO.cs.d\";\r\nimport { BrokerAppraisalMessageResponse } from \"@js/DTO/Messages/BrokerAppraisalMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DealCompletionService extends BaseService<\r\n DealCompletionDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n private rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/dealcompletion\";\r\n this.$broadcastBusinessNameSingular = \"dealcompletion\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getBrokerAppraisalDetails() {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getbrokerappraisaldetails\")\r\n .then((response) => {\r\n defer.resolve(response.data as BrokerAppraisalMessageResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendDealCompletionEmail(newDealCompletion: DealCompletionDTO) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress + \"/senddealcompletionemail\",\r\n JSON.stringify(newDealCompletion),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DealFileAttachmentDTO } from \"@js/DTO/Deal/DealFileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\n\r\nexport class DealFileAttachmentService extends BaseService<\r\n DealFileAttachmentDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/dealfileattachment\";\r\n this.$broadcastBusinessNameSingular = \"dealfileattachment\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getFileUploadUri(\r\n fileName: string,\r\n fileType: string,\r\n dealId: number,\r\n module: ModuleEnum,\r\n dealLenderId: number,\r\n dealClientId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fileuploaduri\", {\r\n params: {\r\n fileName: fileName,\r\n fileType: fileType,\r\n dealId: dealId,\r\n module: module,\r\n dealLenderId: dealLenderId,\r\n dealClientId: dealClientId,\r\n },\r\n })\r\n .then((response) => {\r\n defer.resolve(response.data as DealFileAttachmentDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getFileUri(fileName: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fileuri?key=\" + fileName)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n renameFile(file: DealFileAttachmentDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(this.$baseAddress + \"/filerename\", JSON.stringify(file))\r\n .then((response) => {\r\n defer.resolve(response.data as DealFileAttachmentDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n UploadFileListInSync(\r\n files,\r\n uploadingFiles: FileUploadProgressDTO[],\r\n objectid: number,\r\n fileLstOutput: DealFileAttachmentDTO[],\r\n module?: ModuleEnum,\r\n caseLenderId?: number,\r\n dealClientId?: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var file = files.pop();\r\n if (!uploadingFiles) {\r\n uploadingFiles = [];\r\n }\r\n if (file) {\r\n let tmpfile: FileUploadProgressDTO = {\r\n uploadingFile: file.name,\r\n uploadPercent: 0,\r\n };\r\n uploadingFiles.push(tmpfile);\r\n //Get link needed to upload file\r\n this.getFileUploadUri(\r\n file.name,\r\n file.type,\r\n objectid,\r\n module,\r\n caseLenderId,\r\n dealClientId,\r\n )\r\n .then((fileattach: DealFileAttachmentDTO) => {\r\n //send file up\r\n // this.$http.put(fileattach.TempUploadURL, files[0], { headers: { 'Content-Type': type }, uploadEventHandlers: {} })\r\n this.$http({\r\n method: \"PUT\",\r\n url: fileattach.TempUploadURL,\r\n data: file,\r\n headers: { \"Content-Type\": file.type },\r\n //eventHandlers: {\r\n // readystatechange: function (event: any) {\r\n // if (event.currentTarget.readyState === 4) {\r\n // }\r\n // }\r\n //},\r\n uploadEventHandlers: {\r\n progress(evt: any) {\r\n tmpfile.uploadPercent = 100.0 * (evt.loaded / evt.total);\r\n },\r\n },\r\n })\r\n .then((response) => {\r\n //file now sent up\r\n //save attachment record to srever\r\n this.addUpdatereturnonlyid(fileattach).then((id) => {\r\n //append to list of files\r\n fileattach.Id = id;\r\n fileLstOutput.push(fileattach);\r\n //remove the object\r\n if (uploadingFiles) {\r\n uploadingFiles.splice(uploadingFiles.indexOf(tmpfile));\r\n //hide uploads of all done\r\n if (uploadingFiles.length === 0) {\r\n uploadingFiles = null;\r\n }\r\n }\r\n });\r\n // this.$scope.$apply();\r\n })\r\n .catch((response) => {\r\n if (uploadingFiles) {\r\n uploadingFiles.splice(uploadingFiles.indexOf(tmpfile));\r\n }\r\n //hide uploads of all done\r\n if (uploadingFiles.length === 0) {\r\n uploadingFiles = null;\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.UploadFileListInSync(\r\n files,\r\n uploadingFiles,\r\n objectid,\r\n fileLstOutput,\r\n module,\r\n caseLenderId,\r\n dealClientId,\r\n );\r\n });\r\n return defer.promise;\r\n } else {\r\n return this.$q.resolve(\"No files to upload.\");\r\n }\r\n }\r\n\r\n /**\r\n * Fetch all file attachments for the deal ID\r\n * @param dealId\r\n */\r\n fetchListByDealId(dealId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchlistbydealid?dealId=\" + dealId)\r\n .then((response) => {\r\n defer.resolve(response.data as DealFileAttachmentDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { ProjectOwnershipDTO } from \"@js/DTO/DevelopmentFinance/ProjectOwnershipDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DevelopmentExperienceService extends BaseService<\r\n ProjectOwnershipDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developmentexperience\";\r\n this.$broadcastBusinessNameSingular = \"developmentexperience\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { DevelopmentInputScheduleDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputScheduleDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DevelopmentInputScheduleService extends BaseService<\r\n DevelopmentInputScheduleDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developmentinputschedule\";\r\n this.$broadcastBusinessNameSingular = \"developmentdnputschedule\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n fetchByCaseId(\r\n DevelopmentId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchByCaseId?DevelopmentId=\" + DevelopmentId)\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentInputScheduleDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"fetchbycaseID\",\r\n \"Fetchby case id failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { GetRegionByPostcodeResponse } from \"@js/DTO/Messages/GetRegionByPostcodeMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DevelopmentInputService extends BaseService<\r\n DevelopmentInputDTO,\r\n number\r\n> {\r\n isValidStatus: boolean;\r\n\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developmentinput\";\r\n this.$broadcastBusinessNameSingular = \"developmentinput\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n fetchByIntroducerId(\r\n IntroducerId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress + \"/fetchByIntroducerId?IntroducerId=\" + IntroducerId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentInputDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n listbyuserid(userId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/listbyuserid?userId=\" + userId)\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentInputDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n listbyusername(username: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/listbyusername?username=\" + username)\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentInputDTO[]);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"listbyuser\",\r\n \"List by user failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n addBlankSearch(dto: DevelopmentInputDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/addblanksearch\",\r\n JSON.stringify(dto, this.jsonPropertyReplacer),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentInputDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"addblanksearch\",\r\n \"Add blank search failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveSearch(dto: DevelopmentInputDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/savesearch\",\r\n JSON.stringify(dto, this.jsonPropertyReplacer),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"savesearch\",\r\n \"Save search failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n copyCase(developmentInputId: number, name: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/copyCase?developmentInputId=\" +\r\n developmentInputId +\r\n \"&name=\" +\r\n name,\r\n \"\",\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"savesearch\",\r\n \"Save search failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendResultsToNewClient(\r\n dto: DevelopmentInputDTO,\r\n clientFirstName: string,\r\n clientSurname: string,\r\n clientEmail: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/sendresultstonewclient?clientFirstName=\" +\r\n clientFirstName +\r\n \"&clientSurname=\" +\r\n clientSurname +\r\n \"&clientEmail=\" +\r\n clientEmail,\r\n JSON.stringify(dto),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendResultsToExistingClient(\r\n dto: DevelopmentInputDTO,\r\n clientFirstName: string,\r\n clientSurname: string,\r\n clientEmail: string,\r\n clientId: string,\r\n notifyClient: boolean,\r\n clientPhoneNumber: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/sendresultstoexistingclient?clientFirstName=\" +\r\n clientFirstName +\r\n \"&clientSurname=\" +\r\n clientSurname +\r\n \"&clientEmail=\" +\r\n clientEmail +\r\n \"&clientId=\" +\r\n clientId +\r\n \"¬ifyClient=\" +\r\n notifyClient +\r\n \"&clientPhoneNumber=\" +\r\n clientPhoneNumber,\r\n JSON.stringify(dto),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendEmailToExistingUser(\r\n searchId: number,\r\n showLenderNameValue: boolean = false,\r\n updateshowLenderName: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendemailtoexistinguser?searchId=\" +\r\n searchId +\r\n \"&showLenderNameValue=\" +\r\n showLenderNameValue +\r\n \"&updateshowLenderName=\" +\r\n updateshowLenderName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getHasValidStatustoShowShareSearchModal() {\r\n return this.isValidStatus;\r\n }\r\n\r\n setHasValidStatustoShowShareSearchModal(isValidStatus) {\r\n this.isValidStatus = isValidStatus;\r\n }\r\n\r\n assignBrokerToSearch(\r\n developmentInputId: number,\r\n brokerUserId: string,\r\n isNoLoginRecord: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/assignbrokertosearch?developmentInputId=\" +\r\n developmentInputId +\r\n \"&brokerUserId=\" +\r\n brokerUserId +\r\n \"&isNoLoginRecord=\" +\r\n isNoLoginRecord,\r\n \"\",\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getRegionByPostcode(\r\n postcodeSearchString: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getregionbypostcode?postcodeSearchString=\" +\r\n postcodeSearchString,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as GetRegionByPostcodeResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n isValidPostcodeString(postcodeSearchString: string) {\r\n if (\r\n /^[A-Za-z]{1,2}[0-9]{1}/.test(postcodeSearchString) &&\r\n postcodeSearchString.replace(\" \", \"\").length <= 7\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isUserHasAccessToCase(searchId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/isuserhasaccesstocase?id=\" + searchId)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DevelopmentWithNoLoginDTO } from \"@js/DTO/DevelopmentWithNoLoginDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DevelopmentInputWithNoLoginService extends BaseService<\r\n DevelopmentWithNoLoginDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developmentinputwithnologin\";\r\n this.$broadcastBusinessNameSingular = \"DevelopmentInputwithnologin\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n fetchByIntroducerId(\r\n IntroducerId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress + \"/fetchByIntroducerId?IntroducerId=\" + IntroducerId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentWithNoLoginDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchByUniqueId(UniqueId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchByUniqueId?UniqueId=\" + UniqueId)\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentWithNoLoginDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendEmailToNewUser(\r\n uniqueId: string,\r\n showLenderNameValue: boolean = false,\r\n updateshowLenderName: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendemailtonewuser?uniqueId=\" +\r\n uniqueId +\r\n \"&showLenderNameValue=\" +\r\n showLenderNameValue +\r\n \"&updateshowLenderName=\" +\r\n updateshowLenderName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveChangesToReferredSearch(\r\n dto: DevelopmentWithNoLoginDTO,\r\n uniqueId: string,\r\n sendEnterpriseEmail: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/savechangestoreferredsearch?uniqueId=\" +\r\n uniqueId +\r\n \"&sendEnterpriseEmail=\" +\r\n sendEnterpriseEmail,\r\n JSON.stringify(dto, this.jsonPropertyReplacer),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"savesearch\",\r\n \"Save search failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n isResultActive(UniqueId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/isresultactive?UniqueId=\" + UniqueId)\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentWithNoLoginDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchDataByUniqueId(\r\n UniqueId: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchDataByUniqueId?UniqueId=\" + UniqueId)\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentWithNoLoginDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n addClientToSearch(\r\n dto: DevelopmentWithNoLoginDTO,\r\n uniqueId: string,\r\n clientId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/addclienttosearch?uniqueId=\" +\r\n uniqueId +\r\n \"&clientId=\" +\r\n clientId,\r\n JSON.stringify(dto, this.jsonPropertyReplacer),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentWithNoLoginDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(\r\n \"AddClientTosearch\",\r\n \"attach client to search failed\",\r\n );\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DevelopmentTrackRecordDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentTrackRecordDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DevelopmentTrackRecordService extends BaseService<\r\n DevelopmentTrackRecordDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developmenttrackrecord\";\r\n this.$broadcastBusinessNameSingular = \"developmenttrackrecord\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { DeveloperExitFinanceDevelopmentInputDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceDevelopmentInputDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DeveloperExitFinanceDevelopmentInputService extends BaseService<\r\n DeveloperExitFinanceDevelopmentInputDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developerexitfinancedevelopmentinput\";\r\n this.$broadcastBusinessNameSingular =\r\n \"developerexitfinancedevelopmentinput\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { DeveloperExitFinanceDevScheduleInputDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceDevScheduleInputDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DeveloperExitFinanceDevScheduleInputService extends BaseService<\r\n DeveloperExitFinanceDevScheduleInputDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developerexitfinancedevscheduleinput\";\r\n this.$broadcastBusinessNameSingular =\r\n \"developerexitfinancedevscheduleinput\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { DeveloperExitFinanceLoanInputDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceLoanInputDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DeveloperExitFinanceLoanInputService extends BaseService<\r\n DeveloperExitFinanceLoanInputDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developerexitfinanceloaninput\";\r\n this.$broadcastBusinessNameSingular = \"developerexitfinanceloaninput\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { DeveloperExitFinanceInputSetDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceInputSetDTO.cs.d\";\r\nimport { DeveloperExitFinanceResultDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceResultDTO.cs.d\";\r\nimport { DeveloperExitFinanceResultSetDTO } from \"@js/DTO/DevelopmentExitFinance/DeveloperExitFinanceResultSetDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DeveloperExitFinanceResultService extends BaseService<\r\n DeveloperExitFinanceResultDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/developerexitfinanceresult\";\r\n this.$broadcastBusinessNameSingular = \"developerexitfinanceresult\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n fetchMatchingResults(\r\n criteria: DeveloperExitFinanceInputSetDTO,\r\n includeSenior: boolean,\r\n includeMez: boolean,\r\n totalNumberOfEachResults: number,\r\n sendResult: boolean,\r\n message: string,\r\n from: string,\r\n telephone: string,\r\n loanLabel: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/listlargestandmatchingset?includeSenior=\" +\r\n includeSenior +\r\n \"&includeMez=\" +\r\n includeMez +\r\n \"&totalNumberOfEachResults=\" +\r\n totalNumberOfEachResults +\r\n \"&sendResult=\" +\r\n sendResult +\r\n \"&message=\" +\r\n message +\r\n \"&from=\" +\r\n from +\r\n \"&telephone=\" +\r\n telephone +\r\n \"&loanLabel=\" +\r\n loanLabel,\r\n JSON.stringify(criteria),\r\n )\r\n .then((response) => {\r\n let results: DeveloperExitFinanceResultSetDTO =\r\n response.data as DeveloperExitFinanceResultSetDTO;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DealScheduleDTO } from \"@js/DTO/Deal/DealScheduleDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class DevFinanceScheduleService extends BaseService<\r\n DealScheduleDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/dealschedule\";\r\n this.$broadcastBusinessNameSingular = \"dealschedule\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { EventLogDTO } from \"@js/DTO/EventLogDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { EventLogEnum } from \"@js/models/enum/EventLogEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\n\r\nexport class EventLogService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n private rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/eventlog\";\r\n this.$broadcastBusinessNameSingular = \"eventlog\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n logPageLoad(\r\n identifier: string,\r\n orgCode: string,\r\n user: string,\r\n userRole: string,\r\n organisationLinkId: number,\r\n productType: ProductTypeEnum = ProductTypeEnum.None,\r\n developmentInputWithNoLoginUniqueRef: string = \"\",\r\n dealId?: number,\r\n clientId: string = \"\",\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/logpageload?identifier=\" +\r\n identifier +\r\n \"&orgCode=\" +\r\n orgCode +\r\n \"&user=\" +\r\n user +\r\n \"&userRole=\" +\r\n userRole +\r\n \"&organisationLinkId=\" +\r\n organisationLinkId +\r\n \"&productType=\" +\r\n productType +\r\n \"&developmentInputWithNoLoginUniqueRef=\" +\r\n developmentInputWithNoLoginUniqueRef +\r\n \"&dealId=\" +\r\n dealId +\r\n \"&clientId=\" +\r\n clientId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n logEvent(\r\n identifier: string,\r\n eventType: EventLogEnum,\r\n productType: ProductTypeEnum,\r\n dealId: number = 0,\r\n devInputWithNoLogin?: string,\r\n param1?: string,\r\n clientId?: string\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/logevent?identifier=\" +\r\n identifier +\r\n \"&eventType=\" +\r\n eventType +\r\n \"&productType=\" +\r\n productType +\r\n \"&dealId=\" +\r\n dealId +\r\n \"&devInputWithNoLogin=\" +\r\n devInputWithNoLogin + \"¶m1=\" + param1\r\n + \"&clientId=\" + clientId \r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { ExternalLinksDTO } from \"@js/DTO/ExternalLinksDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class ExternalLinksService extends BaseService<\r\n ExternalLinksDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/externallinks\";\r\n this.$broadcastBusinessNameSingular = \"externallinks\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { FeatureEnum } from \"@js/models/enum/FeatureEnum.cs.d\";\r\n\r\nexport class FeaturePriceService extends BaseService<\r\n AppPackagePricingDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/featureprice\";\r\n this.$broadcastBusinessNameSingular = \"featureprice\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getFeaturePriceByFeature(\r\n feature: FeatureEnum,\r\n isShowAll,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getfeaturepricebyfeature?feature=\" +\r\n feature +\r\n \"&isShowAll=\" +\r\n isShowAll,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as AppPackagePricingDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { FeedBackDTO } from \"@js/DTO/FeedBackDTO.cs.d\";\r\nimport {\r\n FeedBackMessageResponse,\r\n FeedBackMessageRequest,\r\n} from \"@js/DTO/Messages/FeedBackMessage.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class FeedBackService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n private rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/feedback\";\r\n this.$broadcastBusinessNameSingular = \"feedback\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getFeedBackAndReviewerDetails(\r\n feedBackId: number,\r\n dealLenderId: number,\r\n isDeal: boolean,\r\n ): ng.IPromise {\r\n var request = {\r\n FeedBackId: feedBackId,\r\n DealLeanderId: dealLenderId,\r\n IsDeal: isDeal,\r\n } as FeedBackMessageRequest;\r\n\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/getfeedbackandreviewerdetails\",\r\n JSON.stringify(request),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as FeedBackMessageResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n addFeedBack(\r\n feedBack: FeedBackDTO,\r\n dealLenderId: number,\r\n isDeal: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/addfeedback?dealLenderId=\" +\r\n dealLenderId +\r\n \"&isDeal=\" +\r\n isDeal,\r\n JSON.stringify(feedBack),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as FeedBackMessageResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendFeedBackReply(\r\n feedBack: FeedBackDTO,\r\n dealLenderId: number,\r\n isDeal: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/sendfeedbackreply?dealLenderId=\" +\r\n dealLenderId +\r\n \"&isDeal=\" +\r\n isDeal,\r\n JSON.stringify(feedBack),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as FeedBackMessageResponse);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n addClass(star: number, id: string) {\r\n let elementId = \"\";\r\n for (let i = 1; i <= star; i++) {\r\n elementId = id + i;\r\n document.getElementById(elementId).classList.add(\"selected\");\r\n }\r\n }\r\n\r\n removeClass(star: number, id: string, rating) {\r\n let elementId = \"\";\r\n if (rating == undefined) {\r\n rating = 0;\r\n }\r\n for (let i = star; i > rating; i--) {\r\n elementId = id + i;\r\n document.getElementById(elementId).classList.remove(\"selected\");\r\n }\r\n }\r\n\r\n isFeedBackFormDisabled(isLender: boolean, feedBackDTO: FeedBackDTO) {\r\n if (isLender) {\r\n if (\r\n feedBackDTO != null &&\r\n feedBackDTO.RatingKnowledge != null &&\r\n feedBackDTO.RatingPresentation != null &&\r\n feedBackDTO.RatingResponsiveness != null &&\r\n feedBackDTO.IsAnonymous != null &&\r\n feedBackDTO.HasSpoken != null\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n if (\r\n feedBackDTO != null &&\r\n feedBackDTO.RatingCustomerService > 0 &&\r\n feedBackDTO.RatingSpeed > 0 &&\r\n feedBackDTO.RatingUnderwritingFlexibility > 0 &&\r\n feedBackDTO.HasSpoken != null &&\r\n feedBackDTO.IsAnonymous != null\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n updateRating(star: number, rating: string, feedBackDTO: FeedBackDTO) {\r\n switch (rating) {\r\n case \"RatingCustomerService\":\r\n feedBackDTO.RatingCustomerService =\r\n feedBackDTO != undefined &&\r\n feedBackDTO.RatingCustomerService == 1 &&\r\n star == 1\r\n ? 0\r\n : star;\r\n break;\r\n case \"RatingSpeed\":\r\n feedBackDTO.RatingSpeed =\r\n feedBackDTO != null && feedBackDTO?.RatingSpeed == 1 && star == 1\r\n ? 0\r\n : star;\r\n break;\r\n case \"RatingUnderwritingFlexibility\":\r\n feedBackDTO.RatingUnderwritingFlexibility =\r\n feedBackDTO != null &&\r\n feedBackDTO?.RatingUnderwritingFlexibility == 1 &&\r\n star == 1\r\n ? 0\r\n : star;\r\n break;\r\n case \"RatingPresentation\":\r\n feedBackDTO.RatingPresentation =\r\n feedBackDTO != null &&\r\n feedBackDTO?.RatingPresentation == 1 &&\r\n star == 1\r\n ? 0\r\n : star;\r\n break;\r\n case \"RatingResponsiveness\":\r\n feedBackDTO.RatingResponsiveness =\r\n feedBackDTO != null &&\r\n feedBackDTO?.RatingResponsiveness == 1 &&\r\n star == 1\r\n ? 0\r\n : star;\r\n break;\r\n case \"RatingKnowledge\":\r\n feedBackDTO.RatingKnowledge =\r\n feedBackDTO != null && feedBackDTO?.RatingKnowledge == 1 && star == 1\r\n ? 0\r\n : star;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return feedBackDTO;\r\n }\r\n}\r\n","import { FileAttachmentDTO } from \"@js/DTO/FileAttachmentDTO.cs.d\";\r\nimport { FileUploadProgressDTO } from \"@js/DTO/FileUploadProgressDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { ModuleEnum } from \"@js/models/enum/ModuleEnum.cs.d\";\r\n\r\nexport class FileAttachmentService extends BaseService<\r\n FileAttachmentDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/fileattachment\";\r\n this.$broadcastBusinessNameSingular = \"fileattachment\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getFileUploadUri(\r\n fileName: string,\r\n fileType: string,\r\n casenumber: number,\r\n module: ModuleEnum,\r\n caseLenderId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fileuploaduri\", {\r\n params: {\r\n fileName: fileName,\r\n fileType: fileType,\r\n casenumber: casenumber,\r\n module: module,\r\n caseLenderId: caseLenderId,\r\n },\r\n })\r\n .then((response) => {\r\n defer.resolve(response.data as FileAttachmentDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n // TO upload without case Id\r\n getFileUpload(\r\n fileName: string,\r\n fileType: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fileupload\", {\r\n params: { fileName: fileName, fileType: fileType },\r\n })\r\n .then((response) => {\r\n defer.resolve(response.data as FileAttachmentDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getFileUri(fileName: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n const encodedFileName = encodeURIComponent(fileName);\r\n this.$http\r\n .get(this.$baseAddress + \"/fileuri?key=\" + encodedFileName)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n downloadZip(files: string[]): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/downloadzip\", {\r\n params: { keysString: files.toString() },\r\n })\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n renameFile(file: FileAttachmentDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(this.$baseAddress + \"/filerename\", JSON.stringify(file))\r\n .then((response) => {\r\n defer.resolve(response.data as FileAttachmentDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n UploadFileLstInSync(\r\n files,\r\n uploadingFiles: FileUploadProgressDTO[],\r\n objectid: number,\r\n fileLstOutput: FileAttachmentDTO[],\r\n module?: ModuleEnum,\r\n caseLenderId?: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var file = files.pop();\r\n if (!uploadingFiles) {\r\n uploadingFiles = [];\r\n }\r\n if (file) {\r\n let tmpfile: FileUploadProgressDTO = {\r\n uploadingFile: file.name,\r\n uploadPercent: 0,\r\n };\r\n uploadingFiles.push(tmpfile);\r\n //Get link needed to upload file\r\n this.getFileUploadUri(\r\n file.name,\r\n file.type,\r\n objectid,\r\n module,\r\n caseLenderId,\r\n )\r\n .then((fileattach: FileAttachmentDTO) => {\r\n //send file up\r\n // this.$http.put(fileattach.TempUploadURL, files[0], { headers: { 'Content-Type': type }, uploadEventHandlers: {} })\r\n this.$http({\r\n method: \"PUT\",\r\n url: fileattach.TempUploadURL,\r\n data: file,\r\n headers: { \"Content-Type\": file.type },\r\n //eventHandlers: {\r\n // readystatechange: function (event: any) {\r\n // if (event.currentTarget.readyState === 4) {\r\n // }\r\n // }\r\n //},\r\n uploadEventHandlers: {\r\n progress(evt: any) {\r\n tmpfile.uploadPercent = 100.0 * (evt.loaded / evt.total);\r\n },\r\n },\r\n })\r\n .then((response) => {\r\n //file now sent up\r\n //save attachment record to srever\r\n this.addUpdatereturnonlyid(fileattach).then((id) => {\r\n //append to list of files\r\n fileattach.Id = id;\r\n fileLstOutput.push(fileattach);\r\n //remove the object\r\n if (uploadingFiles) {\r\n uploadingFiles.splice(uploadingFiles.indexOf(tmpfile));\r\n //hide uploads of all done\r\n if (uploadingFiles.length === 0) {\r\n uploadingFiles = null;\r\n }\r\n }\r\n });\r\n // this.$scope.$apply();\r\n })\r\n .catch((response) => {\r\n if (uploadingFiles) {\r\n uploadingFiles.splice(uploadingFiles.indexOf(tmpfile));\r\n }\r\n //hide uploads of all done\r\n if (uploadingFiles.length === 0) {\r\n uploadingFiles = null;\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.UploadFileLstInSync(\r\n files,\r\n uploadingFiles,\r\n objectid,\r\n fileLstOutput,\r\n module,\r\n caseLenderId,\r\n );\r\n });\r\n return defer.promise;\r\n }\r\n }\r\n\r\n uploadFileAndReturnURI(newFile): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var file = newFile.pop();\r\n\r\n if (file) {\r\n let tmpfile: FileUploadProgressDTO = {\r\n uploadingFile: file.name,\r\n uploadPercent: 0,\r\n };\r\n\r\n return this.getFileUpload(file.name, file.type).then(\r\n (fileattach: FileAttachmentDTO) => {\r\n //send file up\r\n this.$http({\r\n method: \"PUT\",\r\n url: fileattach.TempUploadURL,\r\n data: file,\r\n headers: { \"Content-Type\": file.type },\r\n uploadEventHandlers: {\r\n progress(evt: any) {\r\n tmpfile.uploadPercent = 100.0 * (evt.loaded / evt.total);\r\n },\r\n },\r\n }).then((response) => {\r\n defer.resolve(fileattach as FileAttachmentDTO);\r\n });\r\n\r\n return defer.promise;\r\n },\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Upload a file to the public image folder on AWS\r\n * @param newImage\r\n */\r\n uploadPublicImage(newImageFile, orgCode: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var file = newImageFile.pop();\r\n\r\n if (file) {\r\n let tmpfile: FileUploadProgressDTO = {\r\n uploadingFile: file.name,\r\n uploadPercent: 0,\r\n };\r\n\r\n this.getPreSignedPublicImageUrl(file.name, file.type, orgCode).then(\r\n (imageUrl: string) => {\r\n //send file up\r\n this.$http({\r\n method: \"PUT\",\r\n url: imageUrl,\r\n data: file,\r\n headers: { \"Content-Type\": file.type },\r\n uploadEventHandlers: {\r\n progress(evt: any) {\r\n tmpfile.uploadPercent = 100.0 * (evt.loaded / evt.total);\r\n },\r\n },\r\n }).then((response) => {\r\n // remove the pre-signed info from the url\r\n var url = imageUrl.substr(0, imageUrl.indexOf(\"?\"));\r\n defer.resolve(url);\r\n });\r\n },\r\n );\r\n } else {\r\n defer.resolve();\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets a pre-signed url to the public \"image\" folder\r\n * @param fileName\r\n * @param fileType\r\n */\r\n getPreSignedPublicImageUrl(\r\n fileName: string,\r\n fileType: string,\r\n orgCode: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getpublicimageurl\", {\r\n params: { fileName: fileName, fileType: fileType, orgCode: orgCode },\r\n })\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { DevelopmentWithNoLoginDTO } from \"@js/DTO/DevelopmentWithNoLoginDTO.cs.d\";\r\nimport { IntroducerDTO } from \"@js/DTO/IntroducerDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class IntroducerService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/introducer\";\r\n this.$broadcastBusinessNameSingular = \"introducer\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n registerIntroducer(\r\n dto: IntroducerDTO,\r\n sendEmail: boolean = true,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress + \"/register?sendEmail=\" + sendEmail,\r\n JSON.stringify(dto),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as IntroducerDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n registerAnotherIntroducer(\r\n dto: IntroducerDTO,\r\n introduceeID: string,\r\n sendNewEmail: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/registerAsIntroducee?sendEmail=\" +\r\n sendNewEmail +\r\n \"&introduceeID=\" +\r\n introduceeID,\r\n JSON.stringify(dto),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as IntroducerDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n introduceClient(\r\n clientFirstName: string,\r\n clientEmail: string,\r\n clientsurname: string,\r\n clientPhoneNumber: string,\r\n guid?: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedClientEmail = encodeURIComponent(clientEmail);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/introduceclient?clientFirstName=\" +\r\n clientFirstName +\r\n \"&clientEmail=\" +\r\n encodedClientEmail +\r\n \"&clientsurname=\" +\r\n clientsurname +\r\n \"&clientPhoneNumber=\" +\r\n clientPhoneNumber +\r\n \"&guid=\" +\r\n guid,\r\n )\r\n .then((response) => {\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendLinkToUser(\r\n userFirstName: string,\r\n userEmail: string,\r\n userId: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedUserEmail = encodeURIComponent(userEmail);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendLinkToUser?userFirstName=\" +\r\n userFirstName +\r\n \"&userEmail=\" +\r\n encodedUserEmail +\r\n \"&userId=\" +\r\n userId,\r\n )\r\n .then((response) => {\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n copyLinkToClipboard(userId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/copyLinkToClipboard?userId=\" + userId)\r\n .then((response) => {\r\n defer.resolve(response.data as IntroducerDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendResultsToClient(\r\n dto: DevelopmentInputDTO,\r\n clientFirstName: string,\r\n clientSurname: string,\r\n clientEmail: string,\r\n notifyBorrower: boolean,\r\n clientPhoneNumber: string = null,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedClientEmail = encodeURIComponent(clientEmail);\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/sendresultstoclient?clientFirstName=\" +\r\n clientFirstName +\r\n \"&clientSurname=\" +\r\n clientSurname +\r\n \"&clientEmail=\" +\r\n encodedClientEmail +\r\n \"¬ifyBorrower=\" +\r\n notifyBorrower +\r\n \"&clientPhoneNumber=\" +\r\n clientPhoneNumber,\r\n JSON.stringify(dto),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchUnclaimedSearches(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchunclaimedsearches\")\r\n .then((response) => {\r\n defer.resolve(response.data as DevelopmentWithNoLoginDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getIntroducerDetailsByUserId(userId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getintroducerdetailsbyuserid?userId=\" + userId)\r\n .then((response) => {\r\n defer.resolve(response.data as IntroducerDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { IntroducerSimpleDTO } from \"@js/DTO/IntroducerSimpleDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class IntroducerSimpleService extends BaseService<\r\n IntroducerSimpleDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/introducersimple\";\r\n this.$broadcastBusinessNameSingular = \"introducersimple\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getintroducerdetails(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getintroducerdetails\")\r\n .then((response) => {\r\n defer.resolve(response.data as IntroducerSimpleDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { InviteDTO } from \"@js/DTO/InviteDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class InviteService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/invite\";\r\n this.$broadcastBusinessNameSingular = \"invite\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getInvitedBorrowers(userId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getListInvitedBrokers?userId=\" + userId)\r\n .then((response) => {\r\n let results = response.data as InviteDTO[];\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n checkIfInvitedIsUser(\r\n invitationCode: string,\r\n userId: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/checkIfInvitedIsUser?invitationCode=\" +\r\n invitationCode +\r\n \"&userId=\" +\r\n userId,\r\n )\r\n .then((response) => {\r\n let results = response.data as boolean;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n checkIfRegisterUserWasInvited(\r\n inviteEmail: string,\r\n inviteGuid: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeInviteEmail = encodeURIComponent(inviteEmail);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/checkIfRegisterUserWasInvited?inviteEmail=\" +\r\n encodeInviteEmail +\r\n \"&inviteGuid=\" +\r\n inviteGuid,\r\n )\r\n .then((response) => {\r\n let results = response.data as string;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { LenderResultMinimalDTO } from \"@js/DTO/DevelopmentFinance/LenderResultMinimalDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class LenderResultMinimalService extends BaseService<\r\n LenderResultMinimalDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/lenderresultminimal\";\r\n this.$broadcastBusinessNameSingular = \"lenderresult\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { DevelopmentInputDTO } from \"@js/DTO/DevelopmentFinance/DevelopmentInputDTO.cs.d\";\r\nimport { LenderResultDTO } from \"@js/DTO/DevelopmentFinance/LenderResultDTO.cs.d\";\r\nimport { LenderResultSummaryDTO } from \"@js/DTO/DevelopmentFinance/LenderResultSummaryDTO.cs.d\";\r\nimport { LenderResultSetDTO } from \"@js/DTO/LenderResultSet.cs.d\";\r\nimport { LenderResultSetWithInputsDTO } from \"@js/DTO/LenderResultSetWithInputsDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { ApplicantRoleEnum } from \"@js/models/enum/ApplicantRoleEnum.cs.d\";\r\nimport { OrganisationService } from \"./OrganisationService\";\r\n\r\nexport class LenderResultService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n \"OrganisationService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n private organisationService: OrganisationService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/lenderresult\";\r\n this.$broadcastBusinessNameSingular = \"lenderresult\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n fetchMatchingResults(\r\n criteria: DevelopmentInputDTO,\r\n includeSenior: boolean,\r\n includeMez: boolean,\r\n totalNumberOfEachResults: number,\r\n sendResult: boolean,\r\n message: string,\r\n from: string,\r\n telephone: string,\r\n loanLabel: string,\r\n emailJourneyStarted: boolean = true,\r\n debug1?: boolean,\r\n debug2?: boolean,\r\n newLeadFirstName?: string,\r\n newLeadEmail?: string,\r\n orgCode?: string,\r\n isDevelopmentInputWithNoLogin?: boolean,\r\n userRole?: string,\r\n userDetails?: string,\r\n criteriaChanged: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var newLeadFullName = \"\";\r\n var newLeadRole = \"\";\r\n\r\n if (window.self == window.top) {\r\n userRole = sessionStorage.getItem(\"userRole\");\r\n userDetails = sessionStorage.getItem(\"userDetails\");\r\n }\r\n\r\n // if the user isn't logged in and has gone via the registration journey\r\n if (\r\n ((window.self == window.top && !this.$cookies.get(\"access_token\")) ||\r\n window.self != window.top) &&\r\n userRole &&\r\n userDetails\r\n ) {\r\n newLeadRole = userRole;\r\n\r\n if (newLeadRole == \"borrower\") {\r\n var data = userDetails;\r\n var userdetails = JSON.parse(data);\r\n\r\n telephone = userdetails.PhoneNumber;\r\n from = userdetails.Email;\r\n newLeadFullName = userdetails.FullName;\r\n\r\n sendResult = true;\r\n }\r\n }\r\n\r\n if (\r\n ((window.self == window.top && !this.$cookies.get(\"access_token\")) ||\r\n window.self != window.top) &&\r\n userDetails &&\r\n orgCode != null\r\n ) {\r\n var data = userDetails;\r\n var userdetails = JSON.parse(data);\r\n if (userRole && userRole == \"borrower\") {\r\n newLeadRole = userRole;\r\n }\r\n telephone = userdetails.PhoneNumber;\r\n from = userdetails.Email;\r\n newLeadFullName = userdetails.FullName;\r\n\r\n sendResult = true;\r\n }\r\n\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/listlargestandmatchingset?includeSenior=\" +\r\n includeSenior +\r\n \"&includeMez=\" +\r\n includeMez +\r\n \"&totalNumberOfEachResults=\" +\r\n totalNumberOfEachResults +\r\n \"&sendResult=\" +\r\n sendResult +\r\n \"&message=\" +\r\n message +\r\n \"&from=\" +\r\n from +\r\n \"&telephone=\" +\r\n telephone +\r\n \"&loanLabel=\" +\r\n loanLabel +\r\n \"&emailJourneyStarted=\" +\r\n emailJourneyStarted +\r\n \"&debug1=\" +\r\n debug1 +\r\n \"&debug2=\" +\r\n debug2 +\r\n \"&newLeadFirstName=\" +\r\n newLeadFirstName +\r\n \"&newLeadEmail=\" +\r\n newLeadEmail +\r\n \"&newLeadFullName=\" +\r\n newLeadFullName +\r\n \"&newLeadRole=\" +\r\n newLeadRole +\r\n \"&orgCode=\" +\r\n orgCode +\r\n \"&isDevelopmentInputWithNoLogin=\" +\r\n isDevelopmentInputWithNoLogin +\r\n \"&criteriaChanged=\" +\r\n criteriaChanged,\r\n JSON.stringify(criteria),\r\n )\r\n .then((response) => {\r\n let results: LenderResultSetDTO = response.data as LenderResultSetDTO;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n //TODO JLH - doesn't seem to be referenced\r\n introducerSendResultToClient(\r\n criteria: DevelopmentInputDTO,\r\n includeSenior: boolean,\r\n includeMez: boolean,\r\n totalNumberOfEachResults: number,\r\n sendResult: boolean,\r\n message: string,\r\n from: string,\r\n telephone: string,\r\n loanLabel: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/listlargestandmatchingset?includeSenior=\" +\r\n includeSenior +\r\n \"&includeMez=\" +\r\n includeMez +\r\n \"&totalNumberOfEachResults=\" +\r\n totalNumberOfEachResults +\r\n \"&sendResult=\" +\r\n sendResult +\r\n \"&message=\" +\r\n message +\r\n \"&from=\" +\r\n from +\r\n \"&telephone=\" +\r\n telephone +\r\n \"&loanLabel=\" +\r\n loanLabel,\r\n JSON.stringify(criteria),\r\n )\r\n .then((response) => {\r\n let results: LenderResultSetDTO = response.data as LenderResultSetDTO;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n // TODO - JLH - no references so can be deleted?\r\n captureNewUserEmail(\r\n loanCriteria: DevelopmentInputDTO,\r\n captureEmail: string,\r\n captureFirstName: string,\r\n captureSurname: string,\r\n applicantDefinedRole: ApplicantRoleEnum,\r\n ) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/captureNewUserEmail?captureEmail=\" +\r\n captureEmail +\r\n \"&captureFirstName=\" +\r\n captureFirstName +\r\n \"&captureSurname=\" +\r\n captureSurname +\r\n \"&applicantDefinedRole=\" +\r\n applicantDefinedRole,\r\n JSON.stringify(loanCriteria),\r\n )\r\n .then((response) => {\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n ////should retrun a userid of the user it stored the data with\r\n //calcAndStoreResults(criteria: DevelopmentInputDTO): ng.IPromise {\r\n // let defer = this.$q.defer();\r\n // this.$http.put(this.$baseAddress + \"/calcAndStoreResults\", JSON.stringify(criteria)).then((response) => {\r\n // let results: string = response.data as string;\r\n // defer.resolve(results);\r\n // }).catch((response) => {\r\n // defer.reject(response);\r\n // });\r\n // return defer.promise;\r\n //}\r\n\r\n //fetchLargestResults(criteria: DevelopmentInputDTO): ng.IPromise {\r\n // let defer = this.$q.defer();\r\n // this.$http.put(this.$baseAddress + \"/listProductsOfferingLargestLoan\", JSON.stringify(criteria)).then((response) => {\r\n // let results: LenderResultDTO[] = response.data as LenderResultDTO[];\r\n // defer.resolve(results);\r\n // }).catch((response) => {\r\n // defer.reject(response);\r\n // });\r\n // return defer.promise;\r\n //}\r\n\r\n startNewUserSearchEmail(\r\n uniqueRef: string,\r\n matchingResults: number,\r\n largestResults: number,\r\n ) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .put(\r\n this.$baseAddress +\r\n \"/startNewUserEmailJourney?uniqueRef=\" +\r\n uniqueRef +\r\n \"&matchingResults=\" +\r\n matchingResults +\r\n \"&largestResults=\" +\r\n largestResults,\r\n null,\r\n )\r\n .then((response) => {\r\n defer.resolve(true);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchByRelatedClient(\r\n DevelopmentInputId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/listbyDevelopmentInput?DevelopmentInputId=\" +\r\n DevelopmentInputId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as LenderResultDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n fetchByUniqueRef(\r\n UniqueRef: string,\r\n totalNumberOfEachResults: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/listbyuniqueref?UniqueRef=\" +\r\n UniqueRef +\r\n \"&totalNumberOfEachResults=\" +\r\n totalNumberOfEachResults,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as LenderResultSetWithInputsDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n saveResults(\r\n user: ApplicationUserDTO,\r\n proceedWithEnquiry: boolean = false,\r\n selectedResult: LenderResultDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n defer.resolve(true);\r\n\r\n return defer.promise;\r\n }\r\n\r\n RequestAssistance(reason: string, searchid: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/requestassistance?reason=\" +\r\n reason +\r\n \"&searchid=\" +\r\n searchid,\r\n )\r\n .then((response) => {\r\n let results: boolean = response.data as boolean;\r\n defer.resolve(results);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendNoteToLender(\r\n lenderEmail: string,\r\n emailSubject: string,\r\n note: string,\r\n ): ng.IPromise {\r\n note = note.replace(/\\n/g, \"
\");\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/contactLender?lenderEmail=\" +\r\n lenderEmail +\r\n \"&emailSubject=\" +\r\n emailSubject +\r\n \"¬e=\" +\r\n note,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sortProductsByLTGDV(\r\n results: LenderResultSummaryDTO[],\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(this.$baseAddress + \"/sortProductsByLTGDV\", results)\r\n .then((response) => {\r\n defer.resolve(response.data as LenderResultSummaryDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { LenderDTO } from \"@js/DTO/LenderDTO.cs.d\";\r\nimport { LenderInfo } from \"@js/DTO/Messages/Deal/LendersInfoForSubmitToLenderMessage.cs.d\";\r\nimport { GetSelectedProductLendersNameAndIdResponse } from \"@js/DTO/Messages/GetSelectedProductLendersNameAndIdMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { SelectedResultDTO } from \"@js/DTO/SelectedResultDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { LenderProductTypeEnum } from \"@js/models/enum/LenderProductTypeEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { LenderProductPairDTO } from \"@js/DTO/LenderProductPairDTO.cs.d\"\r\n\r\nexport class LenderService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/lender\";\r\n this.$broadcastBusinessNameSingular = \"lender\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getUserLenderDetails(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getuserlenderdetails\")\r\n .then((response) => {\r\n defer.resolve(response.data as LenderDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getAllLenderLogos(lenderId: number[]): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/getlenderlogos\",\r\n JSON.stringify(lenderId, this.jsonPropertyReplacer),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getTotalLenders(\r\n productType: ProductFamilyEnum = ProductFamilyEnum.None, brokerOrgId?: Number\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/gettotallenders?productType=\" + productType +\r\n \"&brokerOrgId=\" +\r\n brokerOrgId)\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getSelectedLendersName(\r\n selectedResults: SelectedResultDTO[],\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/getselectedlendersname\",\r\n JSON.stringify(selectedResults),\r\n )\r\n .then((response) => {\r\n defer.resolve(\r\n response.data as GetSelectedProductLendersNameAndIdResponse,\r\n );\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getSelectedDealLenderNames(\r\n dealId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getselecteddeallendernames?dealId=\" + dealId)\r\n .then((response) => {\r\n defer.resolve(\r\n response.data as GetSelectedProductLendersNameAndIdResponse,\r\n );\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getShortlistedLendersName(\r\n selectedResults: SelectedResultDTO[],\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/getshortlistedlendersname\",\r\n JSON.stringify(selectedResults),\r\n )\r\n .then((response) => {\r\n defer.resolve(\r\n response.data as GetSelectedProductLendersNameAndIdResponse,\r\n );\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getShortlistedDealLenderNames(\r\n dealId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress + \"/getshortlisteddeallendernames?dealId=\" + dealId,\r\n )\r\n .then((response) => {\r\n defer.resolve(\r\n response.data as GetSelectedProductLendersNameAndIdResponse,\r\n );\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getLenderProductTypes(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getlenderproducttypes\")\r\n .then((response) => {\r\n defer.resolve(response.data as LenderProductTypeEnum);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getShortlistedLendersInfoForSubmitToLenders(\r\n shortlistedLenders: Number[],\r\n productType: LenderProductTypeEnum,\r\n isDeal: boolean = true,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/getshortlistedlendersinfoforsubmittolenders?productType=\" +\r\n productType +\r\n \"&isDeal=\" +\r\n isDeal,\r\n shortlistedLenders,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as LenderInfo[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getSelectedLenderPreferredOrgs(\r\n lenderId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getselectedlenderpreferredorgs?lenderId=\" +\r\n lenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n updatePreferredOrgs(\r\n lenderId: number,\r\n orgIds: number[],\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/updatepreferredorgs?lenderId=\" + lenderId,\r\n orgIds,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getLenderPreferredPackagersText(lenderId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getlenderpreferredpackagerstext?lenderId=\" +\r\n lenderId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getLenderPortalLinks(\r\n lenderIds: number[],\r\n ): ng.IPromise<{ [key: number]: string }> {\r\n let defer = this.$q.defer<{ [key: number]: string }>();\r\n this.$http\r\n .post(this.$baseAddress + \"/getlenderportallinks\", lenderIds)\r\n .then((response) => {\r\n defer.resolve(response.data as { [key: number]: string });\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n \r\n getDealDeletedLenderIds(dealId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http.get(this.$baseAddress + \"/getdealdeletedlenderids?dealId=\" + dealId).then((response) => {\r\n defer.resolve(response.data as LenderProductPairDTO[]);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n}\r\n","import { LicenseMasterDTO } from \"@js/DTO/LicenseMasterDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class LicenseService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/license\";\r\n this.$broadcastBusinessNameSingular = \"license\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","export class ModalService {\r\n isModalOpen: boolean = false;\r\n\r\n constructor() {}\r\n\r\n getIsModalOpen() {\r\n return this.isModalOpen;\r\n }\r\n\r\n setIsModalOpen(isModalOpen) {\r\n this.isModalOpen = isModalOpen;\r\n }\r\n}\r\n","import { OrganisationLinkDTO } from \"@js/DTO/OrgnisationLinkDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\n\r\nexport class OrganisationLinkService extends BaseService<\r\nOrganisationLinkDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/organisationlink\";\r\n this.$broadcastBusinessNameSingular = \"organisationlink\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n /**\r\n * Gets the organisationlink and organisation by organisationlink id\r\n * @param organisationLinkId\r\n */\r\n getOrganisationLinkAndOrganisation(\r\n organisationLinkId: string,\r\n orgCode: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getorganisationlinkandorganisation?organisationLinkId=\" +\r\n organisationLinkId +\r\n \"&orgCode=\" +\r\n orgCode,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationLinkDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getOrganisationLinkLogoByLinkIdAndLogPageLoadEvent(\r\n organisationLinkId: number,\r\n eventType: string = \"\",\r\n dealId: number = 0,\r\n productType: ProductTypeEnum = ProductTypeEnum.None,\r\n userEmail: string = \"\",\r\n userClientId: string = \"\"\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getorganisationlinklogobylinkidandLogpageloadevent?organisationLinkId=\" +\r\n organisationLinkId +\r\n \"&eventType=\" +\r\n eventType +\r\n \"&dealId=\" +\r\n dealId +\r\n \"&productType=\" +\r\n productType +\r\n \"&userEmail=\" +\r\n userEmail+\r\n \"&userClientId=\" +\r\n userClientId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n}\r\n","export const enum PlanTypeEnum {\r\n Basic = 0,\r\n Premium = 1,\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { InvitedBrokerDTO } from \"@js/DTO/InvitedBrokerDTO.cs.d\";\r\nimport { InviteDTO } from \"@js/DTO/InviteDTO.cs.d\";\r\nimport { OrganisationAndBrokerDetailsMessage } from \"@js/DTO/Messages/OrganisationAndBrokerDetailsMessage.cs.d\";\r\nimport { OrganisationProductAccessMessageResponse } from \"@js/DTO/Messages/OrganisationProductAccessMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { OrganisationLinkDTO } from \"@js/DTO/OrgnisationLinkDTO.cs.d\";\r\nimport { PageWithTotalCountDTO } from \"@js/DTO/PageWithTotalCountDTO.cs.d\";\r\nimport { RegisterOrganisationDTO } from \"@js/DTO/RegisterOrganisationDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { PlanTypeEnum } from \"@js/models/enum/PlanTypeEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\n\r\nexport class OrganisationService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n brickflowBrokerOrg: OrganisationDTO;\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/organisation\";\r\n this.$broadcastBusinessNameSingular = \"organisation\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n protected fetchpageInternal(\r\n needle: string,\r\n page: number,\r\n count: number,\r\n screen: string,\r\n message: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/organisationPage?needle=\" +\r\n needle +\r\n \"&page=\" +\r\n page +\r\n \"&Count=\" +\r\n count,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as PageWithTotalCountDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n fetchpage(\r\n needle: string,\r\n page: number,\r\n count: number,\r\n ): ng.IPromise {\r\n return this.fetchpageInternal(\r\n needle,\r\n page,\r\n count,\r\n this.$broadcastScreen,\r\n \"Unable to get a list of \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n );\r\n }\r\n\r\n inviteBrokers(\r\n users: InvitedBrokerDTO[],\r\n orgUniqueRef: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/inviteBrokers?orgRef=\" + orgUniqueRef,\r\n JSON.stringify(users),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n inviteBorrowers(\r\n users: InviteDTO,\r\n orgUniqueRef: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/registerBorrower?orgRef=\" + orgUniqueRef,\r\n JSON.stringify(users),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getOrganisationIdByUniqueRef(uniqueRef: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/findOrganisationIdByUniqueRef?uniqueRef=\" +\r\n uniqueRef,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getOrganisationByUniqueRef(uniqueRef: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/findOrganisationByUniqueRef?uniqueRef=\" +\r\n uniqueRef,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Is the Organisation a \"paid up\" i.e. active, premium organisation\r\n * @param orgId\r\n */\r\n isOrgActivePremium(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.fetch(orgId).then((response: OrganisationDTO) => {\r\n // TODO JLH Need to implement the paid up part of this function\r\n var isPaidUpPremium =\r\n response.PlanType == PlanTypeEnum.Premium; /* && isPaidUp*/\r\n defer.resolve(isPaidUpPremium);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Is the supplied organisation a white labelled organisation\r\n * @param orgId\r\n */\r\n isOrgWhiteLabelled(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.fetch(orgId).then((response: OrganisationDTO) => {\r\n var isWhiteLabelled =\r\n response.HasWhiteLabelAddOnPaid == true &&\r\n response.IsWhiteLabelled == true;\r\n defer.resolve(isWhiteLabelled);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n *Display or not the logo\r\n */\r\n showLenderNamesAndLogos(searchId: number = 0, isDeal: boolean = false): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/showLenderNamesAndLogos?searchId=\" + searchId + \"&isDeal=\" + isDeal)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Register a new Organisation, org admin user and invite users to join the organisation\r\n * @param registerOrganisationDto\r\n * returns RegisterOrganisationDTO containing the newly created organisation and org admin\r\n */\r\n registerOrganisationAndAdmin(\r\n registerOrganisationDto: RegisterOrganisationDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/registerorganisation?\",\r\n JSON.stringify(registerOrganisationDto),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as RegisterOrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Register a new Broker and assign it to an organisation, converting it also to Introducer\r\n * @param newUser uniqueRef\r\n * returns ApplicationUserDTO containing the newly created broker\r\n */\r\n registerBroker(\r\n newUser: ApplicationUserDTO,\r\n uniqueRef: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/registerBroker?uniqueRef=\" + uniqueRef,\r\n JSON.stringify(newUser),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Saves the organisation and generates/processes the whitelabelling json file for the organisation\r\n * @param organisationDto\r\n */\r\n saveOrganisation(\r\n organisationDto: OrganisationDTO, isConvertedToConnectMember: boolean = false\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/saveorganisation?isConvertedToConnectMember=\" + isConvertedToConnectMember,\r\n JSON.stringify(organisationDto),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets the organisation relevant to the current user\r\n */\r\n getOrganisation(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getorganisation\")\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets the organisation by the organisation's code\r\n * @param organisationCode\r\n */\r\n getOrganisationByOrgCode(\r\n organisationCode: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/findorganisationbyorgcode?orgcode=\" +\r\n organisationCode,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets the organisation application name\r\n * @param organisationCode\r\n */\r\n getOrgApplicationNameByUserName(userName: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedUserName = encodeURIComponent(userName);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/findorgapplicationnamebyusername?username=\" +\r\n encodedUserName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getAppName() {\r\n let lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n return lsd;\r\n } else {\r\n return \"Brickflow\";\r\n }\r\n }\r\n\r\n deleteOrganisation(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/deleteorganisation?orgId=\" + orgId)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Send email to Broker when they leave inbetween the registration\r\n * @param brokerEmail,brokerFirstName,brokerLastName\r\n */\r\n brokerSignUpJourneyG2Email(\r\n brokerEmail: string,\r\n brokerFirstName: string,\r\n brokerLastName: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedEmail = encodeURIComponent(brokerEmail);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/brokersignupjourneyg2email?brokerEmail=\" +\r\n encodedEmail +\r\n \"&brokerFirstName=\" +\r\n brokerFirstName +\r\n \"&brokerLastName=\" +\r\n brokerLastName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n brokerSignUpJourneyG5Email(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/brokersignupjourneyg5email\")\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n brokerSignUpJourneyG0Email(\r\n brokerEmail: string,\r\n brokerFullName: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedEmail = encodeURIComponent(brokerEmail);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/brokersignupjourneyg0email?brokerEmail=\" +\r\n encodedEmail +\r\n \"&brokerFullName=\" +\r\n brokerFullName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getOrganisationAdmin(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getorganisationadmin?orgId=\" + orgId)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n assignTrialLicenseToOrg(\r\n products: AppPackagePricingDTO[],\r\n licenseEndDate: Date,\r\n orgAdminUserId: string,\r\n quantity: number,\r\n IsFreeTrialForOrg: boolean,\r\n isAddonSelected: boolean,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var licenseEndDateString = null;\r\n if (licenseEndDate != null) {\r\n var templicenseEndDate = new Date();\r\n templicenseEndDate.setHours(0, 0, 0, 0);\r\n var licenseEndDateUtc = new Date(\r\n templicenseEndDate.setUTCFullYear(\r\n licenseEndDate.getFullYear(),\r\n licenseEndDate.getMonth(),\r\n licenseEndDate.getDate(),\r\n ),\r\n );\r\n licenseEndDateString = licenseEndDateUtc.getTime();\r\n }\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/assigntriallicensetoorg?licenseEndDate=\" +\r\n licenseEndDateString +\r\n \"&orgAdminUserId=\" +\r\n orgAdminUserId +\r\n \"&quantity=\" +\r\n quantity +\r\n \"&IsFreeTrialForOrg=\" +\r\n IsFreeTrialForOrg +\r\n \"&isAddonSelected=\" +\r\n isAddonSelected,\r\n JSON.stringify(products),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getBrickflowBrokerOrg(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n if (this.brickflowBrokerOrg) {\r\n defer.resolve(this.brickflowBrokerOrg);\r\n } else {\r\n this.$http\r\n .get(this.$baseAddress + \"/getbrickflowbrokerorg\")\r\n .then((response) => {\r\n this.brickflowBrokerOrg = response.data as OrganisationDTO;\r\n defer.resolve(response.data as OrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n getOrgByUrlIfOrgHasEnterpriseSearchPermission(\r\n orgCode: string,\r\n productFamily: ProductFamilyEnum,\r\n orgLinkId: string = \"\",\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getorgbyurliforghasenterprisesearchpermission?orgCode=\" +\r\n orgCode +\r\n \"&productFamily=\" +\r\n productFamily +\r\n \"&orgLinkId=\" +\r\n orgLinkId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets the organisation admin by the organisation's code\r\n * @param organisationCode\r\n */\r\n getOrganisationAdminByOrgCode(\r\n organisationCode: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/findorganisationadminbyorgcode?orgcode=\" +\r\n organisationCode,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets the organisation licenses\r\n * @param organisationId\r\n */\r\n isLeadGenLicenseActive(organisationId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/isleadgenlicenseactive?organisationId=\" +\r\n organisationId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Send a email to broker attached to search\r\n * @param dealId\r\n * @param message\r\n * @param borrowerFirstName\r\n * @param borrowerLastName\r\n * @param borrowerEmail\r\n * @param productType\r\n * @param screenType\r\n * @param uniqueRef\r\n */\r\n sendBorrowerMessageToSearchBroker(\r\n dealId: number,\r\n message: string,\r\n borrowerFirstName: string,\r\n borrowerLastName: string,\r\n borrowerEmail: string,\r\n productType: ProductTypeEnum,\r\n screenType: string,\r\n uniqueRef: string = \"\",\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendborrowermessagetosearchbroker?dealId=\" +\r\n dealId +\r\n \"&message=\" +\r\n message +\r\n \"&borrowerFirstName=\" +\r\n borrowerFirstName +\r\n \"&borrowerLastName=\" +\r\n borrowerLastName +\r\n \"&borrowerEmail=\" +\r\n borrowerEmail +\r\n \"&productType=\" +\r\n productType +\r\n \"&screenType=\" +\r\n screenType +\r\n \"&uniqueRef=\" +\r\n uniqueRef,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Send a email to organisation admin\r\n * @param organisationId\r\n * @param message\r\n * @param borrowerFirstName\r\n * @param borrowerLastName\r\n * @param borrowerEmail\r\n */\r\n sendBorrowerMessageToOrganisationAdmin(\r\n organisationId: number,\r\n message: string,\r\n borrowerFirstName: string,\r\n borrowerLastName: string,\r\n borrowerEmail: string,\r\n productType: ProductTypeEnum,\r\n screenType: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendborrowermessagetoorganisationadmin?organisationId=\" +\r\n organisationId +\r\n \"&message=\" +\r\n message +\r\n \"&borrowerFirstName=\" +\r\n borrowerFirstName +\r\n \"&borrowerLastName=\" +\r\n borrowerLastName +\r\n \"&borrowerEmail=\" +\r\n borrowerEmail +\r\n \"&productType=\" +\r\n productType +\r\n \"&screenType=\" +\r\n screenType,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n sendTestEmail(\r\n recipientEmailAddress: string,\r\n emailSubject: string,\r\n emailMessage: string,\r\n orgId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendtestemail?recipientEmailAddress=\" +\r\n recipientEmailAddress +\r\n \"&emailSubject=\" +\r\n emailSubject +\r\n \"&emailMessage=\" +\r\n emailMessage +\r\n \"&orgId=\" +\r\n orgId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets a HasBridging and HasCommercialMortgage values from current user organisation\r\n */\r\n getOrganisationProductAccess(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getorganisationproductaccess\")\r\n .then((response) => {\r\n defer.resolve(\r\n response.data as OrganisationProductAccessMessageResponse,\r\n );\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n /**\r\n * @param data\r\n */\r\n sendDataToParent(type: string, data: any): void {\r\n try {\r\n if (window.self !== window.top) {\r\n window.parent.postMessage(\r\n {\r\n type: type,\r\n data,\r\n },\r\n \"*\",\r\n );\r\n } else {\r\n console.log(\r\n \"Not running inside an iframe. Cannot send data to parent.\",\r\n );\r\n }\r\n } catch (error) {\r\n console.error(\"An error occurred:\", error);\r\n }\r\n }\r\n\r\n isOrganisationCodeValid(org: OrganisationDTO): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/isorganisationcodevalid?orgId\",\r\n JSON.stringify(org),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getUniqueLinks(organisationId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress + \"/getuniquelinks?organisationId=\" + organisationId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationLinkDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getData(type: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (window.self !== window.top) {\r\n const messageHandler = (event) => {\r\n if (event.data && event.data.type === `${type}Data`) {\r\n let targetOrigin = event.origin;\r\n if (!targetOrigin || targetOrigin === \"null\") {\r\n targetOrigin = \"*\";\r\n }\r\n (event.source as Window).postMessage(\r\n {\r\n type: \"acknowledgment\",\r\n data: {\r\n message: `${type}Data received and processed`,\r\n originalType: `${type}`,\r\n },\r\n },\r\n targetOrigin,\r\n );\r\n resolve(event.data.data[type]);\r\n window.removeEventListener(\"message\", messageHandler);\r\n }\r\n };\r\n\r\n // remove existing message event listeners\r\n window.removeEventListener(\"message\", messageHandler);\r\n\r\n // add new message event listener\r\n window.addEventListener(\"message\", messageHandler, false);\r\n\r\n // Request data from parent\r\n window.parent.postMessage(\r\n {\r\n type: `request${type}`,\r\n },\r\n \"*\",\r\n );\r\n\r\n setTimeout(() => reject(`Timed out while waiting for ${type}`), 5000);\r\n } else {\r\n resolve(\"\");\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Gets the organisation and broker for attached search\r\n * @param organisationCode\r\n */\r\n getOrganisationAndBrokerByUniqueRef(\r\n uniqueRef: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getorganisationandbrokerbyuniqueRef?uniqueRef=\" +\r\n uniqueRef,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationAndBrokerDetailsMessage);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets the organisation and broker for attached deal\r\n * @param dealId\r\n */\r\n getOrganisationAndBrokerByDealId(\r\n dealId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getorganisationandbrokerbydealid?dealId=\" +\r\n dealId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as OrganisationAndBrokerDetailsMessage);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Checks validity of broker hubpspot integration key\r\n * @param accessToken\r\n * @param pipelineStage\r\n */\r\n validateKey(accessToken: string, pipelineStage: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/validatekey?accessToken=\" +\r\n accessToken +\r\n \"&pipelineStage=\" +\r\n pipelineStage,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Gets missing properties in broker hubpspot integration\r\n * @param accessToken\r\n * @param pipelineStage\r\n */\r\n getMissingProperties(\r\n accessToken: string,\r\n pipelineStage: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getmissingproperties?accessToken=\" +\r\n accessToken +\r\n \"&pipelineStage=\" +\r\n pipelineStage,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n hasValidWhitelabelProperties(organisation) {\r\n if (\r\n organisation != null &&\r\n organisation.OrganisationCode != null &&\r\n organisation.OrganisationCode.length > 0 &&\r\n organisation.HasWhiteLabelAddOnPaid &&\r\n organisation.IsWhiteLabelled\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { LicenseAppPackageDTO } from \"@js/DTO/LicenseAppPackageDTO.cs.d\";\r\nimport { PaymentSessionDTO } from \"@js/DTO/StripeSessionDTO.cs.d\";\r\nimport { PricingFrequencyEnum } from \"@js/models/enum/PricingFrequencyEnum.cs.d\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\nexport class PaymentService {\r\n $http: ng.IHttpService;\r\n $cookies: ng.cookies.ICookiesService;\r\n $rootScope: ng.IRootScopeService;\r\n $q: ng.IQService;\r\n $timeout: ng.ITimeoutService;\r\n $baseAddress: string;\r\n\r\n static $inject = [\"$http\", \"$cookies\", \"$rootScope\", \"$q\", \"$timeout\"];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n ) {\r\n this.$http = http;\r\n this.$cookies = cookies;\r\n this.$rootScope = rootScope;\r\n this.$q = q;\r\n this.$timeout = timeout;\r\n this.$baseAddress = \"/api/pay\";\r\n }\r\n\r\n createpayment(caseId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/createpayment?caseId=\" + caseId)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n //not used yet in this solution\r\n //refundentry(caseId: number): ng.IPromise {\r\n // let defer = this.$q.defer();\r\n // this.$http.get(this.$baseAddress + \"/refundentry?caseId=\" + caseId).then((response) => {\r\n // defer.resolve(response.data as boolean);\r\n // }).catch((response) => {\r\n // defer.reject(response);\r\n // });\r\n // return defer.promise;\r\n //}\r\n\r\n createCheckoutSession(\r\n products: AppPackagePricingDTO,\r\n isAddonselected,\r\n selectedUserName,\r\n developmentInputId,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName =\r\n selectedUserName != \"\" ? encodeURIComponent(selectedUserName) : \"\";\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/createcheckoutsession?isAddonselected=\" +\r\n isAddonselected +\r\n \"&selectedUserName=\" +\r\n encodeUserName +\r\n \"&developmentInputId=\" +\r\n developmentInputId,\r\n products,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as PaymentSessionDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getAllActivePackagePrices(\r\n userName: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName = encodeURIComponent(userName);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getallactivepackageprices?userName=\" +\r\n encodeUserName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as AppPackagePricingDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getActivePackagePricesForFrequency(\r\n frequency: PricingFrequencyEnum,\r\n userRole: UserRoleEnum = UserRoleEnum.None,\r\n ) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getactivepackagepricesforfrequency?frequency=\" +\r\n frequency +\r\n \"&userRole=\" +\r\n userRole,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as AppPackagePricingDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n createPortalSession(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/createportalsession\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n updatePlanPrice(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/updateplanprice\")\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n cancelSubscription(subscriptionId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/cancelsubscription?subscriptionId=\" +\r\n subscriptionId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n unCancelSubscription(subscriptionId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/uncancelsubscription?subscriptionId=\" +\r\n subscriptionId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getModuleQuantityForAppPackage(appPackageId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getmodulequantityforapppackage?appPackageId=\" +\r\n appPackageId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n //getAllModuleAppFeatures(): ng.IPromise {\r\n // let defer = this.$q.defer();\r\n // this.$http.get(this.$baseAddress + \"/getallmoduleappfeatures\").then((response) => {\r\n // defer.resolve(response.data as ModuleAppFeatureDTO[]);\r\n // }).catch((response) => {\r\n // defer.reject(response);\r\n // });\r\n // return defer.promise;\r\n //}\r\n\r\n getLicense(userName: string = \"\"): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName = userName != \"\" ? encodeURIComponent(userName) : \"\";\r\n this.$http\r\n .get(this.$baseAddress + \"/getlicense?userName=\" + encodeUserName)\r\n .then((response) => {\r\n defer.resolve(response.data as LicenseAppPackageDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getTotalUnassignedLicenses(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/gettotalunassignedlicenses\")\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n addLeadGeneratorSubscription(\r\n licenseAppPackage: LicenseAppPackageDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(this.$baseAddress + \"/addleadgeneratorlicense\", licenseAppPackage)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getWhitelabelPrice(frequency: PricingFrequencyEnum): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getwhitelabelprice?frequency=\" + frequency)\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n isSubscriptionCancelable(subscriptionId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/issubscriptioncancelable?subscriptionId=\" +\r\n subscriptionId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n createCheckoutSessionForLeadGen(\r\n leadGenPackage: LicenseAppPackageDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress + \"/createcheckoutsessionforleadgen\",\r\n leadGenPackage,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as PaymentSessionDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n createCheckoutSessionForCustomPrice(\r\n products: LicenseAppPackageDTO,\r\n isAddonselected,\r\n selectedUserName,\r\n developmentInputId,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName =\r\n selectedUserName != \"\" ? encodeURIComponent(selectedUserName) : \"\";\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/createcheckoutsessionforcustomprice?isAddonselected=\" +\r\n isAddonselected +\r\n \"&selectedUserName=\" +\r\n encodeUserName +\r\n \"&developmentInputId=\" +\r\n developmentInputId,\r\n products,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as PaymentSessionDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getActivePackagePricingsForTrialLicense(\r\n userName: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodeUserName = encodeURIComponent(userName);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getactivepackagepricingsfortriallicense?userName=\" +\r\n encodeUserName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as AppPackagePricingDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { ProductDTO } from \"@js/DTO/ProductDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\n\r\nexport class ProductService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/product\";\r\n this.$broadcastBusinessNameSingular = \"product\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getLeadGeneratorName(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getLeadGeneratorName\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n isProductRefUnique(productRef: string, productId: number = 0) {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/isProductRefUnique?productRef=\" +\r\n productRef +\r\n \"&productId=\" +\r\n productId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getProductTypeDisplayText(\r\n productType: ProductTypeEnum,\r\n isRegulatedBridging: boolean = false,\r\n ): string {\r\n let displayText: string;\r\n\r\n switch (productType) {\r\n case ProductTypeEnum.Development:\r\n displayText = \"Development Finance\";\r\n break;\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n displayText = \"Planning Bridge\";\r\n break;\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n displayText = isRegulatedBridging\r\n ? \"Regulated\"\r\n : \"Purchase / Refinance\";\r\n break;\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n displayText = \"Developer Exit\";\r\n break;\r\n case ProductTypeEnum.BridgingRefurb:\r\n displayText = isRegulatedBridging ? \"Regulated\" : \"Refurbishment\";\r\n break;\r\n case ProductTypeEnum.CommercialInvestment:\r\n displayText = \"Commercial Investment\";\r\n break;\r\n case ProductTypeEnum.CommercialOwnerOccupied:\r\n displayText = \"Owner Occupied Mortgage\";\r\n break;\r\n default:\r\n displayText = \"Undefined\";\r\n break;\r\n }\r\n\r\n return displayText;\r\n }\r\n\r\n getProductTypeSearchName(productType: ProductTypeEnum): string {\r\n let displayText: string;\r\n\r\n switch (productType) {\r\n case ProductTypeEnum.Development:\r\n displayText = \"Development Finance\";\r\n break;\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n displayText = \"Planning Bridge\";\r\n break;\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n displayText = \"Purchase / Refinance\";\r\n break;\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n displayText = \"Developer Exit\";\r\n break;\r\n case ProductTypeEnum.BridgingRefurb:\r\n displayText = \"Refurbishment\";\r\n break;\r\n case ProductTypeEnum.CommercialInvestment:\r\n displayText = \"Commercial Investment\";\r\n break;\r\n case ProductTypeEnum.CommercialOwnerOccupied:\r\n displayText = \"Owner Occupied\";\r\n break;\r\n default:\r\n displayText = \"Undefined\";\r\n break;\r\n }\r\n\r\n return displayText;\r\n }\r\n\r\n getProductTypeFullName(productType: ProductTypeEnum): string {\r\n let displayText: string;\r\n\r\n switch (productType) {\r\n case ProductTypeEnum.Development:\r\n displayText = \"Development Finance\";\r\n break;\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n displayText = \"Planning Bridge\";\r\n break;\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n displayText = \"Purchase / Refinance Bridge\";\r\n break;\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n displayText = \"Developer Exit Bridge\";\r\n break;\r\n case ProductTypeEnum.BridgingRefurb:\r\n displayText = \"Refurbishment Bridge\";\r\n break;\r\n case ProductTypeEnum.CommercialInvestment:\r\n displayText = \"Commercial Investment Mortgage\";\r\n break;\r\n case ProductTypeEnum.CommercialOwnerOccupied:\r\n displayText = \"Commercial Owner Occupied Mortgage\";\r\n break;\r\n default:\r\n displayText = \"Undefined\";\r\n break;\r\n }\r\n\r\n return displayText;\r\n }\r\n\r\n getProductFamilyByProductType(\r\n productType: ProductTypeEnum,\r\n ): ProductFamilyEnum {\r\n let productFamily: ProductFamilyEnum;\r\n\r\n switch (productType) {\r\n case ProductTypeEnum.Development:\r\n productFamily = ProductFamilyEnum.Development;\r\n break;\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n productFamily = ProductFamilyEnum.Bridging;\r\n break;\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n productFamily = ProductFamilyEnum.Bridging;\r\n break;\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n productFamily = ProductFamilyEnum.Bridging;\r\n break;\r\n case ProductTypeEnum.BridgingRefurb:\r\n productFamily = ProductFamilyEnum.Bridging;\r\n break;\r\n case ProductTypeEnum.Bridging:\r\n productFamily = ProductFamilyEnum.Bridging;\r\n break;\r\n case ProductTypeEnum.CommercialInvestment:\r\n productFamily = ProductFamilyEnum.Commercial;\r\n break;\r\n case ProductTypeEnum.CommercialOwnerOccupied:\r\n productFamily = ProductFamilyEnum.Commercial;\r\n break;\r\n case ProductTypeEnum.CommercialAll:\r\n productFamily = ProductFamilyEnum.Commercial;\r\n break;\r\n default:\r\n productFamily = ProductFamilyEnum.None;\r\n break;\r\n }\r\n\r\n return productFamily;\r\n }\r\n\r\n /**\r\n * Text to send to google analytics\r\n * @param productType\r\n * @param isRegulatedBridging\r\n */\r\n getProductTypeTextForGa(\r\n productType: ProductTypeEnum,\r\n isRegulatedBridging: boolean = false,\r\n ): string {\r\n let displayText: string;\r\n\r\n switch (productType) {\r\n case ProductTypeEnum.Development:\r\n displayText = \"Development Finance\";\r\n break;\r\n case ProductTypeEnum.BridgingPreconstruction:\r\n displayText = \"Planning Bridge\";\r\n break;\r\n case ProductTypeEnum.BridgingPurchaseOrRefinance:\r\n displayText = isRegulatedBridging\r\n ? \"Purchase / Refinance Regulated\"\r\n : \"Purchase / Refinance\";\r\n break;\r\n case ProductTypeEnum.BridgingDeveloperExit:\r\n displayText = \"Developer Exit\";\r\n break;\r\n case ProductTypeEnum.BridgingRefurb:\r\n displayText = isRegulatedBridging\r\n ? \"Refurbishment Regulated\"\r\n : \"Refurbishment\";\r\n break;\r\n case ProductTypeEnum.CommercialInvestment:\r\n displayText = \"Commercial Investment\";\r\n break;\r\n case ProductTypeEnum.CommercialOwnerOccupied:\r\n displayText = \"Owner Occupied Mortgage\";\r\n break;\r\n default:\r\n displayText = \"Undefined\";\r\n break;\r\n }\r\n\r\n return displayText;\r\n }\r\n\r\n /**\r\n * Text to sent to google analytics\r\n * @param productFamily\r\n */\r\n getProductFamilyTextForGa(productFamily: ProductFamilyEnum): string {\r\n let displayText: string;\r\n\r\n switch (productFamily) {\r\n case ProductFamilyEnum.Development:\r\n displayText = \"Development Finance\";\r\n break;\r\n case ProductFamilyEnum.Bridging:\r\n displayText = \"Bridging\";\r\n break;\r\n case ProductFamilyEnum.Commercial:\r\n displayText = \"Commercial\";\r\n break;\r\n default:\r\n displayText = \"Undefined\";\r\n break;\r\n }\r\n\r\n return displayText;\r\n }\r\n\r\n getLastVerifiedDates(productIds: number[]) {\r\n let defer = this.$q.defer<{ [key: number]: Date }>();\r\n\r\n this.$http.post(this.$baseAddress + \"/getlastverifieddates\", productIds)\r\n .then((response) => {\r\n defer.resolve(response.data as { [key: number]: Date });\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n}\r\n","import { ProductStubDTO } from \"@js/DTO/ProductStubDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class ProductStubService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/productstub\";\r\n this.$broadcastBusinessNameSingular = \"productstub\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { QualificationsDTO } from \"@js/DTO/QualificationsDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class QualificationsService extends BaseService<\r\n QualificationsDTO,\r\n number\r\n> {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/qualifications\";\r\n this.$broadcastBusinessNameSingular = \"qualifications\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { RoleDTO } from \"@js/DTO/RoleDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class RoleService extends BaseService {\r\n userroles: string[] = null;\r\n public IsAdminUser: boolean = false;\r\n public IsLenderUserOrAbove: boolean = false;\r\n public IsBrokerUserOrAbove: boolean = false;\r\n public IsClientUserOrAbove: boolean = false;\r\n public IsLender: boolean = false;\r\n public IsIntroducer: boolean = false;\r\n public IsClient: boolean = false;\r\n public IsLenderVisible: boolean = false;\r\n public IsBroker: boolean = false;\r\n public isTestBannerHidden: boolean = false;\r\n\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n \"$location\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n private rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n private $location: ng.ILocationService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/roles\";\r\n this.$broadcastBusinessNameSingular = \"Role\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n public UpdateUserRoles(userRoles: string[]): void {\r\n this.userroles = userRoles;\r\n this.rootScope.$broadcast(\"userRolesChange\", userRoles);\r\n }\r\n\r\n public GetUserRoles(force: boolean = false): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n if (!this.userroles || force) {\r\n this.GetRolesIamAMemberOf()\r\n .then((result) => {\r\n this.UpdateUserRoles(result);\r\n // Changed else ifs to ifs because a user can have more than one role!\r\n if (result.filter((x) => x == \"Admin\").length > 0) {\r\n this.IsAdminUser = true;\r\n this.IsClientUserOrAbove = true;\r\n this.IsLenderUserOrAbove = true;\r\n }\r\n if (result.filter((x) => x == \"Lender\").length > 0) {\r\n this.IsLender = true;\r\n this.IsLenderUserOrAbove = true;\r\n this.IsClientUserOrAbove = true;\r\n }\r\n if (result.filter((x) => x == \"Introducer\").length > 0) {\r\n this.IsIntroducer = true;\r\n this.IsClientUserOrAbove = true;\r\n }\r\n if (result.filter((x) => x == \"Client\").length > 0) {\r\n this.IsClient = true;\r\n this.IsClientUserOrAbove = true;\r\n }\r\n if (result.filter((x) => x == \"Broker\").length > 0) {\r\n this.IsBroker = true;\r\n this.IsBrokerUserOrAbove = true;\r\n }\r\n defer.resolve(result);\r\n })\r\n .catch(() => {\r\n this.UpdateUserRoles([]);\r\n defer.reject(false);\r\n });\r\n } else {\r\n defer.resolve(this.userroles);\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n GetRolesIamAMemberOf(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getrolesiammemberof\", null)\r\n .then((response) => {\r\n defer.resolve(response.data as string[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n //UserRoleEnum.Lender\r\n return defer.promise;\r\n }\r\n\r\n isAdminUser(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x == \"Admin\").length > 0) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n isBrokerOrABove(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x == \"Broker\" || x == \"Admin\").length > 0) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n isBroker(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x == \"Broker\").length > 0) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n isIntroducer(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x == \"Introducer\" || x == \"Admin\").length > 0) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n isClientUser(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x == \"Client\").length > 0) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n isClientUserOrAbove(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x == \"Client\" || x == \"Admin\").length > 0) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n isLenderUserOrAbove(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x == \"Lender\" || x == \"Admin\").length > 0) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n isLenderUser(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (result.filter((x) => x == \"Lender\").length > 0) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n isIntroducerOnly(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.GetUserRoles().then((result) => {\r\n if (\r\n result.filter((x) => x == \"Introducer\").length > 0 &&\r\n result.filter((x) => x == \"Broker\").length == 0 &&\r\n result.filter((x) => x == \"Client\").length == 0 &&\r\n result.filter((x) => x == \"Admin\").length == 0\r\n ) {\r\n defer.resolve(true);\r\n }\r\n defer.resolve(false);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n goHomeBasedOnUser() {\r\n this.isClientUser().then((result) => {\r\n if (result) {\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.isLenderUser().then((result2) => {\r\n if (result2) {\r\n this.$location.path(\"/userdashboard\");\r\n } else {\r\n this.$location.path(\"/dashboard\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getIsLenderVisible() {\r\n return this.IsLenderVisible;\r\n }\r\n\r\n setIsLenderVisible(isLenderVisible: boolean) {\r\n this.IsLenderVisible = isLenderVisible;\r\n }\r\n\r\n resetUserRoles() {\r\n this.userroles = null;\r\n this.IsAdminUser = false;\r\n this.IsLenderUserOrAbove = false;\r\n this.IsBrokerUserOrAbove = false;\r\n this.IsClientUserOrAbove = false;\r\n this.IsLender = false;\r\n this.IsIntroducer = false;\r\n this.IsClient = false;\r\n this.IsLenderVisible = false;\r\n this.IsBroker = false;\r\n }\r\n}\r\n","export const enum BuildStageEnum {\r\n None = 0,\r\n PracticalCompletion = 1,\r\n WindAndWaterTight = 2,\r\n PreWindAndWaterTight = 3,\r\n}\r\n","export const enum ChargeTypeEnum {\r\n None = 0,\r\n FirstCharge = 1,\r\n SecondCharge = 2,\r\n}\r\n","export const enum ConditionEnum {\r\n Good = 1,\r\n Fair = 2,\r\n Poor = 3,\r\n}\r\n","export const enum MaritalStatusEnum {\r\n None = 0,\r\n Single = 1,\r\n Married = 2,\r\n LivingWithPartner = 3,\r\n Widowed = 4,\r\n CivilPartnership = 5,\r\n Divorced = 6,\r\n Seperated = 7,\r\n}\r\n","export const enum ProjectCompletionTypeEnum {\r\n None = 0,\r\n LessThan1Week = 1,\r\n LessThan2Week = 2,\r\n NoSetTime = 3,\r\n}\r\n","export const enum SiteTypeEnum {\r\n None = 0,\r\n ExistingBuilding = 1,\r\n Land = 2,\r\n}\r\n","export const enum SourceOfIncomeEnum {\r\n currentRentalFromThisProperty = 1,\r\n futureRentalFromThisProperty = 2,\r\n fundsFromYourSavings = 3,\r\n fundsFromYourIncome = 4,\r\n}\r\n","export const enum TeamSizeEnum {\r\n None = 0,\r\n One = 1,\r\n TwoToFive = 2,\r\n SixToTen = 3,\r\n ElevenToTwenty = 4,\r\n TwentyOnePlus = 5,\r\n}\r\n","export const enum YesNoEnum {\r\n No = 0,\r\n Yes = 1,\r\n}\r\n","export const enum ValuationMethodEnum {\r\n None = 0,\r\n OMV = 1,\r\n One80DayVP = 2,\r\n NinetyDayVP = 4,\r\n CommercialValuation = 8,\r\n Any\r\n}","export const enum MaxCommercialFloorspaceEnum {\r\n None = 0,\r\n Below50 = 1,\r\n FiftyOneTo75 = 2,\r\n Above76 = 3\r\n}\r\n","export const enum CRMEnum\r\n{\r\n None = 0,\r\n OMS = 1 << 0, // 1 (2^0)\r\n Finova = 1 << 1, // 2 (2^1)\r\n BATSoftware = 1 << 2, // 4 (2^2)\r\n Acre = 1 << 3, // 8 (2^3)\r\n Smart365 = 1 << 4, // 16 (2^4)\r\n Salesforce = 1 << 5, // 32 (2^5)\r\n Pipedrive = 1 << 6, // 64 (2^6)\r\n Zoho = 1 << 7 // 128 (2^7)\r\n}","export const enum BrokerNetworkEnum\r\n{\r\n None = 0,\r\n ConnectIFA = 1 << 0, // 1 (2^0)\r\n Synergy = 1 << 1, // 2 (2^1)\r\n NewLeafDistribution = 1 << 2, // 4 (2^2)\r\n Fiducia = 1 << 3, // 8 (2^3)\r\n RosemountFinancialSolutions = 1 << 4, // 16 (2^4)\r\n StJamesPlace = 1 << 5, // 32 (2^5)\r\n Primis = 1 << 6, // 64 (2^6)\r\n Quilter = 1 << 7, // 128 (2^7)\r\n Stonebridge = 1 << 8, // 256 (2^8)\r\n Openwork = 1 << 9, // 512 (2^9)\r\n HLPartnership = 1 << 10, // 1024 (2^10)\r\n TheRightMortgageLimited = 1 << 11, // 2048 (2^11)\r\n PlanWealthManagement = 1 << 12, // 4096 (2^12)\r\n Sesame = 1 << 13, // 8192 (2^13)\r\n TheOnLinePartnershipLtd = 1 << 14, // 16384 (2^14)\r\n MortgageAdviceBureau = 1 << 15, // 32768 (2^15)\r\n SenseNetwork = 1 << 16, // 65536 (2^16)\r\n MortgageIntelligenceLtd = 1 << 17, // 131072 (2^17)\r\n ValidPathLimited = 1 << 18, // 262144 (2^18)\r\n BestPracticeIFAGroupLimited = 1 << 19, // 524288 (2^19)\r\n WhiteRoseFinanceGroupLimited = 1 << 20, // 1048576 (2^20)\r\n TMGDirectLimited = 1 << 21, // 2097152 (2^21)\r\n BeneficialLimited = 1 << 22, // 4194304 (2^22)\r\n JulianHarris = 1 << 23, // 8388608 (2^23)\r\n DragonBrokersLimited = 1 << 24, // 16777216 (2^24)\r\n JohnCharcolLimited = 1 << 25, // 33554432 (2^25)\r\n CornerstoneFinancial = 1 << 26, // 67108864 (2^26) \r\n CorbelPartners = 1 << 27, // 67108864 (2^27)\r\n RichdaleBrokers = 1 << 28, // 134217728 (2^28)\r\n PJFinancialLtd = 1 << 29, // 268435456 (2^29)\r\n JLMMortgageNetwork = 1 << 30, // 536870912 (2^30)\r\n IngrandFinancial = 1 << 31 // 1073741824 (2^31)\r\n}\r\n","import { BillingFrequencyEnum } from \"@js/models/enum/BillingFrequencyEnum.cs.d\";\r\nimport { BorrowingEntityTypeEnum } from \"@js/models/enum/BorrowingEntityTypeEnum.cs.d\";\r\nimport { BridgingPersonalGuaranteeLevelEnum } from \"@js/models/enum/BridgingPersonalGuaranteeLevelEnum.cs.d\";\r\nimport { BuildProcurementTypeEnum } from \"@js/models/enum/BuildProcurementTypeEnum.cs.d\";\r\nimport { BuildStageEnum } from \"@js/models/enum/BuildStageEnum.cs.d\";\r\nimport { CaseLenderStateEnum } from \"@js/models/enum/CaseLenderStateEnum.cs.d\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\nimport { ChargeTypeEnum } from \"@js/models/enum/ChargeTypeEnum.cs.d\";\r\nimport { ConditionEnum } from \"@js/models/enum/ConditionEnum.cs.d\";\r\nimport { EPCRatingTypeEnum } from \"@js/models/enum/EPCRatingTypeEnum.cs.d\";\r\nimport { EWS1GradeTypeEnum } from \"@js/models/enum/EWS1GradeTypeEnum.cs.d\";\r\nimport { ExistingPlanningChangeTypeEnum } from \"@js/models/enum/ExistingPlanningChangeTypeEnum.cs.d\";\r\nimport { ExitStrategyEnum } from \"@js/models/enum/ExitStrategyEnum.cs.d\";\r\nimport { FixedRateTermEnum } from \"@js/models/enum/FixedRateTermEnum.cs.d\";\r\nimport { InterestRateBasis } from \"@js/models/enum/InterestRateBasisEnum.cs.d\";\r\nimport { InterestRateTypeEnum } from \"@js/models/enum/InterestRateTypeEnum.cs.d\";\r\nimport { InterestServicedorRolledEnum } from \"@js/models/enum/InterestServicedorRolledEnum.cs.d\";\r\nimport { LandOrPropertyEnum } from \"@js/models/enum/LandOrPropertyEnum.cs.d\";\r\nimport { LinkTypeEnum } from \"@js/models/enum/LinkTypeEnum.cs.d\";\r\nimport { LoanCompletionTypeEnum } from \"@js/models/enum/LoanCompletionTypeEnum.cs.d\";\r\nimport { LoanPurposeEnum } from \"@js/models/enum/LoanPurposeEnum.cs.d\";\r\nimport { LoanRepaymentTypeEnum } from \"@js/models/enum/LoanRepaymentTypeEnum.cs.d\";\r\nimport { LocationEnum } from \"@js/models/enum/LocationEnum.cs.d\";\r\nimport { MaritalStatusEnum } from \"@js/models/enum/MaritalStatusEnum.cs.d\";\r\nimport { MaxFlatUnitPriceEnum } from \"@js/models/enum/MaxFlatUnitPriceEnum.cs.d\";\r\nimport { MaxHouseSalePriceEnum } from \"@js/models/enum/MaxHouseSalePriceEnum.cs.d\";\r\nimport { MaxIndividualUnitPriceEnum } from \"@js/models/enum/MaxIndividualUnitPriceEnum.cs.d\";\r\nimport { MaxPercCommercialForMixedUseEnum } from \"@js/models/enum/MaxPercCommercialForMixedUseEnum.cs.d\";\r\nimport { MaxSqFtSalePriceEnum } from \"@js/models/enum/MaxSqFtSalePriceEnum.cs.d\";\r\nimport { OwnershipRoleEnum } from \"@js/models/enum/OwnershipRoleEnum.cs.d\";\r\nimport { OwnNewDevelopmentEnum } from \"@js/models/enum/OwnNewDevelopmentEnum.cs.d\";\r\nimport { OwnOrPurchaseEnum } from \"@js/models/enum/OwnOrPurchaseEnum.cs.d\";\r\nimport { PersonalGuaranteeLevelEnum } from \"@js/models/enum/PersonalGuaranteeLevelEnum.cs.d\";\r\nimport { PlanningPermissionTypeEnum } from \"@js/models/enum/PlanningPermissionTypeEnum.cs.d\";\r\nimport { PlanningResponsibilityEnum } from \"@js/models/enum/PlanningResponsibilityEnum.cs.d\";\r\nimport { PreAgreementEnum } from \"@js/models/enum/PreAgreementEnum.cs.d\";\r\nimport { PreviousDevelopmentsEnum } from \"@js/models/enum/PreviousDevelopmentsEnum.cs.d\";\r\nimport { ProductFamilyEnum } from \"@js/models/enum/ProductFamilyEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { ProjectCompletionTypeEnum } from \"@js/models/enum/ProjectCompletionTypeEnum.cs.d\";\r\nimport { PropertyTypeEnum } from \"@js/models/enum/PropertyTypeEnum.cs.d\";\r\nimport { ReferrerEnum } from \"@js/models/enum/ReferrerEnum.cs.d\";\r\nimport { RefurbishmentLevelEnum } from \"@js/models/enum/RefurbishmentLevelEnum.cs.d\";\r\nimport { ScheduleDescriptionTypeEnum } from \"@js/models/enum/ScheduleDescriptionTypeEnum.cs.d\";\r\nimport { ShareholderDepositRequiredEnum } from \"@js/models/enum/ShareholderDepositRequiredEnum.cs.d\";\r\nimport { SiteTypeEnum } from \"@js/models/enum/SiteTypeEnum.cs.d\";\r\nimport { SourceOfIncomeEnum } from \"@js/models/enum/SourceOfIncomeEnum.cs.d\";\r\nimport { TeamSizeEnum } from \"@js/models/enum/TeamSizeEnum.cs.d\";\r\nimport { TenureEnum } from \"@js/models/enum/TenureEnum.cs.d\";\r\nimport { TimeLeftOnLeaseEnum } from \"@js/models/enum/TimeLeftOnLeaseEnum.cs.d\";\r\nimport { TitleEnum } from \"@js/models/enum/TitleEnum.cs.d\";\r\nimport { TradingPeriodEnum } from \"@js/models/enum/TradingPeriodEnum.cs.d\";\r\nimport { YesNoEnum } from \"@js/models/enum/YesNoEnum.cs.d\";\r\nimport { YesNoMaybe } from \"@js/models/enum/YesNoMaybeEnum.cs.d\";\r\nimport { ValuationMethodEnum } from \"@js/models/enum/ValuationMethodEnum.cs.d\";\r\nimport { MaxCommercialFloorspaceEnum } from \"@js/models/enum/MaxCommercialFloorspaceEnum.cs.d\";\r\nimport { ProductService } from \"./ProductService\";\r\nimport { CRMEnum } from \"@js/models/enum/CRMEnum.cs.d\";\r\nimport { BrokerNetworkEnum } from \"@js/models/enum/BrokerNetworkEnum.cs.d\";\r\n\r\nexport interface ListItem {\r\n key: number;\r\n displayName: string;\r\n order: number;\r\n}\r\n\r\nexport class SelectListService {\r\n SelectLists: { [key: string]: ListItem[] } = {};\r\n lastOwnOrPurchase: any;\r\n lastLandOrProperty: any;\r\n\r\n productService: ProductService;\r\n\r\n static $inject = [\"ProductService\"];\r\n\r\n constructor(ProductService: ProductService) {\r\n this.productService = ProductService;\r\n }\r\n\r\n GetMaritalStatusOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"MaritalStatusEnum\"] == null\r\n ) {\r\n this.SelectLists[\"MaritalStatusEnum\"] = [\r\n { key: MaritalStatusEnum.Single, displayName: \"Single\", order: 1 },\r\n { key: MaritalStatusEnum.Married, displayName: \"Married\", order: 2 },\r\n {\r\n key: MaritalStatusEnum.LivingWithPartner,\r\n displayName: \"Living With Partner\",\r\n order: 3,\r\n },\r\n { key: MaritalStatusEnum.Widowed, displayName: \"Widowed\", order: 4 },\r\n {\r\n key: MaritalStatusEnum.CivilPartnership,\r\n displayName: \"Civil Partnership\",\r\n order: 5,\r\n },\r\n { key: MaritalStatusEnum.Divorced, displayName: \"Divorced\", order: 6 },\r\n {\r\n key: MaritalStatusEnum.Seperated,\r\n displayName: \"Seperated\",\r\n order: 7,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"MaritalStatusEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetTenureTypes(productType: ProductTypeEnum): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"TenureEnum\"] == null) {\r\n if (productType != ProductTypeEnum.BridgingPreconstruction) {\r\n this.SelectLists[\"TenureEnum\"] = [\r\n { key: TenureEnum.Freehold, displayName: \"Freehold\", order: 1 },\r\n { key: TenureEnum.Leasehold, displayName: \"Leasehold\", order: 3 },\r\n ];\r\n } else {\r\n this.SelectLists[\"TenureEnum\"] = [\r\n { key: TenureEnum.Freehold, displayName: \"Freehold\", order: 1 },\r\n {\r\n key: TenureEnum.ShareOfFreehold,\r\n displayName: \"Share Of Freehold\",\r\n order: 2,\r\n },\r\n { key: TenureEnum.Leasehold, displayName: \"Leasehold\", order: 3 },\r\n {\r\n key: TenureEnum.CommonholdOwnership,\r\n displayName: \"Commonhold Ownership\",\r\n order: 4,\r\n },\r\n //{ key: TenureEnum.JointOwnershipTenantsInCommon, displayName: 'Joint Ownership - Tenants In Common', order: 5 },\r\n //{ key: TenureEnum.JointOwnershipJointTenants, displayName: 'Joint Ownership - Joint Tenants', order: 6 }\r\n ];\r\n }\r\n }\r\n\r\n return this.SelectLists[\"TenureEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetNumberOfPreviousDevelopments(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PreviousDevelopmentsEnum\"] == null\r\n ) {\r\n this.SelectLists[\"PreviousDevelopmentsEnum\"] = [\r\n { key: PreviousDevelopmentsEnum.One, displayName: \"1\", order: 1 },\r\n { key: PreviousDevelopmentsEnum.Two, displayName: \"2\", order: 2 },\r\n { key: PreviousDevelopmentsEnum.Three, displayName: \"3\", order: 3 },\r\n {\r\n key: PreviousDevelopmentsEnum.FourOrMore,\r\n displayName: \"4 +\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"PreviousDevelopmentsEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetNumberOfPreviousDevelopmentsForBridging(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PreviousDevelopmentsEnumBridging\"] == null\r\n ) {\r\n this.SelectLists[\"PreviousDevelopmentsEnumBridging\"] = [\r\n {\r\n key: PreviousDevelopmentsEnum.OneOrTwo,\r\n displayName: \"1 - 2\",\r\n order: 1,\r\n },\r\n {\r\n key: PreviousDevelopmentsEnum.ThreeOrMore,\r\n displayName: \"3 +\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"PreviousDevelopmentsEnumBridging\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetShareholderDepositRequired(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"ShareholderDepositRequiredEnum\"] == null\r\n ) {\r\n this.SelectLists[\"ShareholderDepositRequiredEnum\"] = [\r\n {\r\n key: ShareholderDepositRequiredEnum.None,\r\n displayName: \"0%\",\r\n order: 1,\r\n },\r\n {\r\n key: ShareholderDepositRequiredEnum.UpTo25Percent,\r\n displayName: \"Up to 25%\",\r\n order: 2,\r\n },\r\n {\r\n key: ShareholderDepositRequiredEnum.TwentyFiveTo50Percent,\r\n displayName: \"25% - 50%\",\r\n order: 3,\r\n },\r\n {\r\n key: ShareholderDepositRequiredEnum.FiftyPercentPlus,\r\n displayName: \"51%+\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"ShareholderDepositRequiredEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetPersonalGuaranteeLevels(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PersonalGuaranteeLevelEnum\"] == null\r\n ) {\r\n this.SelectLists[\"PersonalGuaranteeLevelEnum\"] = [\r\n {\r\n key: PersonalGuaranteeLevelEnum.UpTo20Percent,\r\n displayName: \"Up to 20%\",\r\n order: 1,\r\n },\r\n {\r\n key: PersonalGuaranteeLevelEnum.TwentyOneTo35Percent,\r\n displayName: \"21-35%\",\r\n order: 2,\r\n },\r\n {\r\n key: PersonalGuaranteeLevelEnum.ThirtySixTo50Percent,\r\n displayName: \"36-50%\",\r\n order: 3,\r\n },\r\n {\r\n key: PersonalGuaranteeLevelEnum.OneHundredPercent,\r\n displayName: \"51-100%\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"PersonalGuaranteeLevelEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetBridgingPersonalGuaranteeLevels(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"BridgingPersonalGuaranteeLevelEnum\"] == null\r\n ) {\r\n this.SelectLists[\"BridgingPersonalGuaranteeLevelEnum\"] = [\r\n {\r\n key: BridgingPersonalGuaranteeLevelEnum.None,\r\n displayName: \"0%\",\r\n order: 1,\r\n },\r\n {\r\n key: BridgingPersonalGuaranteeLevelEnum.OneToTwentyFivePercent,\r\n displayName: \"1-25%\",\r\n order: 2,\r\n },\r\n {\r\n key: BridgingPersonalGuaranteeLevelEnum.TwentySixToFiftyPercent,\r\n displayName: \"26-50%\",\r\n order: 3,\r\n },\r\n {\r\n key: BridgingPersonalGuaranteeLevelEnum.FiftyOneToOneHundredPercent,\r\n displayName: \"51-100%\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"BridgingPersonalGuaranteeLevelEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetMaxHouseSalePrices(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"MaxHouseSalePriceEnum\"] == null\r\n ) {\r\n this.SelectLists[\"MaxHouseSalePriceEnum\"] = [\r\n {\r\n key: MaxHouseSalePriceEnum.NoMax,\r\n displayName: \"Above £5m\",\r\n order: 5,\r\n },\r\n {\r\n key: MaxHouseSalePriceEnum.UpTo1Million,\r\n displayName: \"Up to £1m\",\r\n order: 2,\r\n },\r\n {\r\n key: MaxHouseSalePriceEnum.UpTo2Million,\r\n displayName: \"Up to £2m\",\r\n order: 3,\r\n },\r\n {\r\n key: MaxHouseSalePriceEnum.UpTo5Million,\r\n displayName: \"Up to £5m\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"MaxHouseSalePriceEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetMaxFlatUnitPrices(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"MaxFlatUnitPriceEnum\"] == null\r\n ) {\r\n this.SelectLists[\"MaxFlatUnitPriceEnum\"] = [\r\n { key: MaxFlatUnitPriceEnum.None, displayName: \"Above £3m\", order: 5 },\r\n {\r\n key: MaxFlatUnitPriceEnum.UpTo1Million,\r\n displayName: \"Up to £1m\",\r\n order: 2,\r\n },\r\n {\r\n key: MaxFlatUnitPriceEnum.UpTo2Million,\r\n displayName: \"Up to £2m\",\r\n order: 3,\r\n },\r\n {\r\n key: MaxFlatUnitPriceEnum.UpTo3Million,\r\n displayName: \"Up to £3m\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"MaxFlatUnitPriceEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetMaxSqFtSalePrices(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"MaxSqFtSalePriceEnum\"] == null\r\n ) {\r\n this.SelectLists[\"MaxSqFtSalePriceEnum\"] = [\r\n {\r\n key: MaxSqFtSalePriceEnum.NoMax,\r\n displayName: \"Above £1500\",\r\n order: 5,\r\n },\r\n {\r\n key: MaxSqFtSalePriceEnum.UpTo850,\r\n displayName: \"Up to £850\",\r\n order: 2,\r\n },\r\n {\r\n key: MaxSqFtSalePriceEnum.UpTo1000,\r\n displayName: \"Up to £1000\",\r\n order: 3,\r\n },\r\n {\r\n key: MaxSqFtSalePriceEnum.UpTo1500,\r\n displayName: \"Up to £1500\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"MaxSqFtSalePriceEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetInterestRateBasis(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"InterestRateBasis\"] == null\r\n ) {\r\n this.SelectLists[\"InterestRateBasis\"] = [\r\n { key: InterestRateBasis.BaseRate, displayName: \"Base Rate\", order: 1 },\r\n { key: InterestRateBasis.Sonia, displayName: \"Sonia\", order: 3 },\r\n {\r\n key: InterestRateBasis.LendersOwnSVR,\r\n displayName: \"Lenders Own SVR\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"InterestRateBasis\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetReferrerOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"ReferrerOptions\"] == null\r\n ) {\r\n this.SelectLists[\"ReferrerOptions\"] = [\r\n {\r\n key: ReferrerEnum.OtherSearch,\r\n displayName: \"Please Select\",\r\n order: 1,\r\n },\r\n {\r\n key: ReferrerEnum.GoogleSearch,\r\n displayName: \"Google Search\",\r\n order: 9,\r\n },\r\n {\r\n key: ReferrerEnum.OtherSearch,\r\n displayName: \"Other Search\",\r\n order: 14,\r\n },\r\n { key: ReferrerEnum.LinkedIn, displayName: \"LinkedIn\", order: 10 },\r\n { key: ReferrerEnum.Facebook, displayName: \"Facebook\", order: 7 },\r\n { key: ReferrerEnum.Agent, displayName: \"Estate Agent\", order: 5 },\r\n {\r\n key: ReferrerEnum.ExistingUser,\r\n displayName: \"Existing User\",\r\n order: 6,\r\n },\r\n {\r\n key: ReferrerEnum.BrickflowConsultant,\r\n displayName: this.getAppName() + \" Consultant\",\r\n order: 20,\r\n },\r\n { key: ReferrerEnum.Broker, displayName: \"Broker\", order: 3 },\r\n { key: ReferrerEnum.Developer, displayName: \"Developer\", order: 4 },\r\n {\r\n key: ReferrerEnum.MassReports,\r\n displayName: \"Mass Reports\",\r\n order: 11,\r\n },\r\n { key: ReferrerEnum.NimbusMaps, displayName: \"Nimbus Maps\", order: 12 },\r\n {\r\n key: ReferrerEnum.PressRelease,\r\n displayName: \"Press Release\",\r\n order: 17,\r\n },\r\n { key: ReferrerEnum.TheRodcast, displayName: \"The Rodcast\", order: 16 },\r\n { key: ReferrerEnum.OTM, displayName: \"OnTheMarket\", order: 13 },\r\n {\r\n key: ReferrerEnum.WordOfMouth,\r\n displayName: \"Word of Mouth\",\r\n order: 19,\r\n },\r\n {\r\n key: ReferrerEnum.PersonalRecommendation,\r\n displayName: \"Personal Recommendation\",\r\n order: 15,\r\n },\r\n { key: ReferrerEnum.Ad, displayName: \"Ad\", order: 2 },\r\n {\r\n key: ReferrerEnum.SocialMedia,\r\n displayName: \"Social Media\",\r\n order: 18,\r\n },\r\n { key: ReferrerEnum.FIBA, displayName: \"FIBA\", order: 8 },\r\n { key: ReferrerEnum.Other, displayName: \"Other\", order: 21 },\r\n ];\r\n }\r\n return this.SelectLists[\"ReferrerOptions\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetBillingFrequencyOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"BillingFrequencyOptions\"] == null\r\n ) {\r\n this.SelectLists[\"BillingFrequencyOptions\"] = [\r\n { key: BillingFrequencyEnum.Monthly, displayName: \"Monthly\", order: 1 },\r\n { key: BillingFrequencyEnum.Yearly, displayName: \"Annually\", order: 2 },\r\n ];\r\n }\r\n return this.SelectLists[\"BillingFrequencyOptions\"];\r\n }\r\n\r\n GetTeamSizeOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"TeamSizeOptions\"] == null\r\n ) {\r\n this.SelectLists[\"TeamSizeOptions\"] = [\r\n { key: TeamSizeEnum.One, displayName: \"1\", order: 1 },\r\n { key: TeamSizeEnum.TwoToFive, displayName: \"2 - 5\", order: 2 },\r\n { key: TeamSizeEnum.SixToTen, displayName: \"6 - 10\", order: 3 },\r\n { key: TeamSizeEnum.ElevenToTwenty, displayName: \"11 - 20\", order: 4 },\r\n { key: TeamSizeEnum.TwentyOnePlus, displayName: \"21+\", order: 5 },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"TeamSizeOptions\"];\r\n }\r\n\r\n getAppName(): string {\r\n const lsd = sessionStorage.getItem(\"applicationName\");\r\n if (lsd != null) {\r\n return lsd;\r\n } else {\r\n return \"Brickflow\";\r\n }\r\n }\r\n\r\n GetYesNo(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"YesNoEnum\"] == null) {\r\n this.SelectLists[\"YesNoEnum\"] = [\r\n { key: YesNoEnum.No, displayName: \"No\", order: 1 },\r\n { key: YesNoEnum.Yes, displayName: \"Yes\", order: 2 },\r\n ];\r\n }\r\n return this.SelectLists[\"YesNoEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetOwnOrPurchase(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"OwnOrPurchaseEnum\"] == null\r\n ) {\r\n this.SelectLists[\"OwnOrPurchaseEnum\"] = [\r\n { key: OwnOrPurchaseEnum.Own, displayName: \"Own\", order: 1 },\r\n {\r\n key: OwnOrPurchaseEnum.Purchasing,\r\n displayName: \"Purchasing\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"OwnOrPurchaseEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetChargeType(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"ChargeTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"ChargeTypeEnum\"] = [\r\n {\r\n key: ChargeTypeEnum.FirstCharge,\r\n displayName: \"First Charge\",\r\n order: 1,\r\n },\r\n {\r\n key: ChargeTypeEnum.SecondCharge,\r\n displayName: \"Second Charge\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"ChargeTypeEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetYesNoForBridging(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"YesNoEnumBridging\"] == null\r\n ) {\r\n this.SelectLists[\"YesNoEnumBridging\"] = [\r\n { key: YesNoMaybe.No, displayName: \"No\", order: 1 },\r\n { key: YesNoMaybe.Yes, displayName: \"Yes\", order: 2 },\r\n ];\r\n }\r\n return this.SelectLists[\"YesNoEnumBridging\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetBuildingConditionType(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"conditionEnum\"] == null) {\r\n this.SelectLists[\"conditionEnum\"] = [\r\n { key: ConditionEnum.Good, displayName: \"Good\", order: 1 },\r\n { key: ConditionEnum.Fair, displayName: \"Fair\", order: 2 },\r\n { key: ConditionEnum.Poor, displayName: \"Poor\", order: 2 },\r\n ];\r\n }\r\n return this.SelectLists[\"conditionEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetSiteType(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"SiteTypeEnum\"] == null) {\r\n this.SelectLists[\"SiteTypeEnum\"] = [\r\n {\r\n key: SiteTypeEnum.ExistingBuilding,\r\n displayName: \"Existing Building\",\r\n order: 1,\r\n },\r\n { key: SiteTypeEnum.Land, displayName: \"Land\", order: 2 },\r\n ];\r\n }\r\n return this.SelectLists[\"SiteTypeEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetPropertyType(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PropertyTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"PropertyTypeEnum\"] = [\r\n {\r\n key: PropertyTypeEnum.Residential,\r\n displayName: \"Residential\",\r\n order: 14,\r\n },\r\n { key: PropertyTypeEnum.MixedUse, displayName: \"Mixed use\", order: 10 },\r\n { key: PropertyTypeEnum.Hotel, displayName: \"Hotel\", order: 4 },\r\n { key: PropertyTypeEnum.Leisure, displayName: \"Leisure\", order: 6 },\r\n {\r\n key: PropertyTypeEnum.CareRetirement,\r\n displayName: \"Care home\",\r\n order: 1,\r\n },\r\n { key: PropertyTypeEnum.Medical, displayName: \"Medical\", order: 9 },\r\n { key: PropertyTypeEnum.Office, displayName: \"Office\", order: 11 },\r\n { key: PropertyTypeEnum.Retail, displayName: \"Retail\", order: 12 },\r\n {\r\n key: PropertyTypeEnum.LightIndustrial,\r\n displayName: \"Light industrial\",\r\n order: 8,\r\n },\r\n { key: PropertyTypeEnum.Student, displayName: \"Student\", order: 15 },\r\n {\r\n key: PropertyTypeEnum.HeavyIndustrial,\r\n displayName: \"Heavy industrial\",\r\n order: 3,\r\n },\r\n { key: PropertyTypeEnum.HMO, displayName: \"Licenced HMO\", order: 7 },\r\n {\r\n key: PropertyTypeEnum.LandWithoutPlanning,\r\n displayName: \"Land without planning\",\r\n order: 5,\r\n },\r\n { key: PropertyTypeEnum.Education, displayName: \"Education\", order: 2 },\r\n {\r\n key: PropertyTypeEnum.Retirement,\r\n displayName: \"Retirement\",\r\n order: 13,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"PropertyTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetProductTypeOptions(isUserDashboard: boolean = false): ListItem[] {\r\n const selectListName: string = isUserDashboard\r\n ? \"UserDashboardProductType\"\r\n : \"ProductTypeEnum\";\r\n\r\n if (this.SelectLists == null || this.SelectLists[selectListName] == null) {\r\n this.SelectLists[selectListName] = [\r\n { key: ProductTypeEnum.None, displayName: \"None\", order: 1 },\r\n {\r\n key: ProductTypeEnum.Development,\r\n displayName: this.productService.getProductTypeDisplayText(\r\n ProductTypeEnum.Development,\r\n ),\r\n order: 2,\r\n },\r\n {\r\n key: ProductTypeEnum.BridgingPreconstruction,\r\n displayName: this.productService.getProductTypeDisplayText(\r\n ProductTypeEnum.BridgingPreconstruction,\r\n ),\r\n order: 3,\r\n },\r\n {\r\n key: ProductTypeEnum.BridgingDeveloperExit,\r\n displayName:\r\n this.productService.getProductTypeDisplayText(\r\n ProductTypeEnum.BridgingDeveloperExit,\r\n ) + \" Bridge\",\r\n order: 4,\r\n },\r\n {\r\n key: ProductTypeEnum.BridgingRefurb,\r\n displayName:\r\n this.productService.getProductTypeDisplayText(\r\n ProductTypeEnum.BridgingRefurb,\r\n ) + \" Bridge\",\r\n order: 5,\r\n },\r\n {\r\n key: ProductTypeEnum.CommercialInvestment,\r\n displayName: this.productService.getProductTypeDisplayText(\r\n ProductTypeEnum.CommercialInvestment,\r\n ),\r\n order: 6,\r\n },\r\n {\r\n key: ProductTypeEnum.BridgingPurchaseOrRefinance,\r\n displayName:\r\n this.productService.getProductTypeDisplayText(\r\n ProductTypeEnum.BridgingPurchaseOrRefinance,\r\n ) + \" Bridge\",\r\n order: 7,\r\n },\r\n ];\r\n\r\n if (isUserDashboard) {\r\n this.SelectLists[selectListName].push({\r\n key: ProductTypeEnum.CommercialOwnerOccupied,\r\n displayName: \"Commercial Owner Occupied\",\r\n order: 8,\r\n });\r\n } else {\r\n this.SelectLists[selectListName].push({\r\n key: ProductTypeEnum.CommercialOwnerOccupied,\r\n displayName: this.productService.getProductTypeDisplayText(\r\n ProductTypeEnum.CommercialOwnerOccupied,\r\n ),\r\n order: 8,\r\n });\r\n }\r\n }\r\n\r\n return this.SelectLists[selectListName].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetProductFamilyOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"ProductFamilyEnum\"] == null\r\n ) {\r\n this.SelectLists[\"ProductFamilyEnum\"] = [\r\n {\r\n key: ProductFamilyEnum.Development,\r\n displayName: \"Development Finance\",\r\n order: 1,\r\n },\r\n { key: ProductFamilyEnum.Bridging, displayName: \"Bridging\", order: 2 },\r\n {\r\n key: ProductFamilyEnum.Commercial,\r\n displayName: \"Commercial\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"ProductFamilyEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetInterestServiceOrRoll(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"interestServicedOrRolledEnum\"] == null\r\n ) {\r\n this.SelectLists[\"interestServicedOrRolledEnum\"] = [\r\n {\r\n key: InterestServicedorRolledEnum.Serviced,\r\n displayName: \"Serviced\",\r\n order: 2,\r\n },\r\n {\r\n key: InterestServicedorRolledEnum.Rolled,\r\n displayName: \"Rolled up\",\r\n order: 1,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"interestServicedOrRolledEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n GetSourceOfIncomeOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"sourceOfIncomeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"sourceOfIncomeEnum\"] = [\r\n {\r\n key: SourceOfIncomeEnum.currentRentalFromThisProperty,\r\n displayName: \"Current rental from this property\",\r\n order: 1,\r\n },\r\n {\r\n key: SourceOfIncomeEnum.futureRentalFromThisProperty,\r\n displayName: \"Future rental from this property\",\r\n order: 4,\r\n },\r\n {\r\n key: SourceOfIncomeEnum.fundsFromYourSavings,\r\n displayName: \"Funds from your savings\",\r\n order: 3,\r\n },\r\n {\r\n key: SourceOfIncomeEnum.fundsFromYourIncome,\r\n displayName: \"Funds from your income\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"sourceOfIncomeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetLoanPurposeOptions(isRegulatedBridging: boolean = false): ListItem[] {\r\n if (isRegulatedBridging) {\r\n this.SelectLists[\"loanPurposeEnum\"] = [\r\n {\r\n key: LoanPurposeEnum.AuctionPurchase,\r\n displayName: \"Auction purchase \",\r\n order: 1,\r\n },\r\n {\r\n key: LoanPurposeEnum.ChainBreak,\r\n displayName: \"Chain break \",\r\n order: 2,\r\n },\r\n {\r\n key: LoanPurposeEnum.Refurbishment,\r\n displayName: \"Refurbishment\",\r\n order: 3,\r\n },\r\n {\r\n key: LoanPurposeEnum.AnyOtherLegalPurpose,\r\n displayName: \"Any other legal purpose (e.g. probate, tax bill etc.)\",\r\n order: 4,\r\n },\r\n ];\r\n } else {\r\n this.SelectLists[\"loanPurposeEnum\"] = [\r\n {\r\n key: LoanPurposeEnum.Speed,\r\n displayName: \"Speed i.e. auction purpose\",\r\n order: 1,\r\n },\r\n {\r\n key: LoanPurposeEnum.DepositForAnotherPurchase,\r\n displayName: \"Deposit for another purchase\",\r\n order: 2,\r\n },\r\n { key: LoanPurposeEnum.Rebridge, displayName: \"Rebridge\", order: 3 },\r\n {\r\n key: LoanPurposeEnum.Other,\r\n displayName: \"Other, please state\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"loanPurposeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetPlanningOptions(\r\n OwnOrPurchase: OwnOrPurchaseEnum,\r\n LandOrProperty: LandOrPropertyEnum,\r\n showPermittedDevelopment: boolean = true,\r\n ): ListItem[] {\r\n if (this.SelectLists == null) {\r\n this.SelectLists = {};\r\n }\r\n\r\n if (\r\n !this.SelectLists[\"planningEnum\"] ||\r\n this.lastOwnOrPurchase !== OwnOrPurchase ||\r\n this.lastLandOrProperty !== LandOrProperty\r\n ) {\r\n this.lastOwnOrPurchase = OwnOrPurchase;\r\n this.lastLandOrProperty = LandOrProperty;\r\n\r\n const ownOrPurchase =\r\n OwnOrPurchase == OwnOrPurchaseEnum.Own ? \"Own\" : \"Buying\";\r\n const landOrProperty =\r\n LandOrProperty == LandOrPropertyEnum.Land ? \"land\" : \"property\";\r\n this.SelectLists[\"planningEnum\"] = [\r\n {\r\n key: PlanningPermissionTypeEnum.NoPlanning,\r\n displayName: `${ownOrPurchase} ${landOrProperty} with no planning`,\r\n order: 2,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.OutlinePlanning,\r\n displayName: `${ownOrPurchase} ${landOrProperty} with outline planning`,\r\n order: 3,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.DetailedPlanning,\r\n displayName: `${ownOrPurchase} ${landOrProperty} with detailed planning that you wish to vary`,\r\n order: 1,\r\n },\r\n ];\r\n }\r\n\r\n const permittedDevelopmentIndex = this.SelectLists[\"planningEnum\"]\r\n .map((e) => e.key)\r\n .indexOf(PlanningPermissionTypeEnum.PermittedDevelopment);\r\n\r\n if (showPermittedDevelopment && permittedDevelopmentIndex == -1) {\r\n this.SelectLists[\"planningEnum\"].push({\r\n key: PlanningPermissionTypeEnum.PermittedDevelopment,\r\n displayName: \"Permitted development\",\r\n order: 4,\r\n });\r\n } else if (!showPermittedDevelopment && permittedDevelopmentIndex > -1) {\r\n this.SelectLists[\"planningEnum\"].splice(permittedDevelopmentIndex);\r\n }\r\n\r\n return this.SelectLists[\"planningEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetPlanningStatusAtStartOfDevelopmentOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PlanningStatusAtStartOfDevelopment\"] == null\r\n ) {\r\n this.SelectLists[\"PlanningStatusAtStartOfDevelopment\"] = [\r\n {\r\n key: PlanningPermissionTypeEnum.NoPlanning,\r\n displayName: \"No planning\",\r\n order: 2,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.OutlinePlanning,\r\n displayName: \"Outline planning\",\r\n order: 3,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.DetailedPlanning,\r\n displayName: \"Detailed planning that you wish to vary\",\r\n order: 1,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.PermittedDevelopment,\r\n displayName: \"Permitted development\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"PlanningStatusAtStartOfDevelopment\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetPlanningStatusAtEndOfDevelopmentOptions(\r\n productType: ProductTypeEnum = null,\r\n ): ListItem[] {\r\n if (productType == ProductTypeEnum.Development) {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PlanningPermissionTypeEnumDevFinance\"] == null\r\n ) {\r\n this.SelectLists[\"PlanningPermissionTypeEnumDevFinance\"] = [\r\n {\r\n key: PlanningPermissionTypeEnum.NoPlanning,\r\n displayName: \"No planning\",\r\n order: 2,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.OutlinePlanning,\r\n displayName: \"Outline planning\",\r\n order: 4,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.DetailedPlanning,\r\n displayName: \"Detailed planning\",\r\n order: 1,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.NoPlanningRequired,\r\n displayName: \"No planning required\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"PlanningPermissionTypeEnumDevFinance\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n } else {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PlanningPermissionTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"PlanningPermissionTypeEnum\"] = [\r\n {\r\n key: PlanningPermissionTypeEnum.OutlinePlanning,\r\n displayName: \"Outline planning\",\r\n order: 2,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.DetailedPlanning,\r\n displayName: \"Detailed planning\",\r\n order: 1,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.PermittedDevelopment,\r\n displayName: \"Permitted development\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"PlanningPermissionTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n }\r\n\r\n GetPurchasingExistingBuildingPlanningTypeOptions(\r\n showPermittedDevelopment: boolean = true,\r\n ): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\r\n \"PurchasingExistingBuildingPlanningPermissionTypeEnum\"\r\n ] == null\r\n ) {\r\n this.SelectLists[\"PurchasingExistingBuildingPlanningPermissionTypeEnum\"] =\r\n [\r\n {\r\n key: PlanningPermissionTypeEnum.VaryPlanningonExistingBuilding,\r\n displayName: \"Vary planning on the existing building only\",\r\n order: 3,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.NewPlanningOnAnotherPartOfSite,\r\n displayName:\r\n \"New planning on another part of the site (planning on existing building to stay as is)\",\r\n order: 2,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.VaryPlanningOnExistingAndNewPlanningOnAnotherPartOfSite,\r\n displayName:\r\n \"Vary planning on the existing building & submit new planning on another part of the site\",\r\n order: 4,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.NewPlanningApplicationOrDemolishExistingBuilding,\r\n displayName:\r\n \"New planning application / demolish existing building\",\r\n order: 1,\r\n },\r\n ];\r\n }\r\n\r\n const permittedDevelopmentIndex = this.SelectLists[\r\n \"PurchasingExistingBuildingPlanningPermissionTypeEnum\"\r\n ]\r\n .map((e) => e.key)\r\n .indexOf(PlanningPermissionTypeEnum.PermittedDevelopment);\r\n\r\n if (showPermittedDevelopment && permittedDevelopmentIndex == -1) {\r\n this.SelectLists[\r\n \"PurchasingExistingBuildingPlanningPermissionTypeEnum\"\r\n ].push({\r\n key: PlanningPermissionTypeEnum.PermittedDevelopment,\r\n displayName: \"Permitted development\",\r\n order: 4,\r\n });\r\n } else if (!showPermittedDevelopment && permittedDevelopmentIndex > -1) {\r\n this.SelectLists[\r\n \"PurchasingExistingBuildingPlanningPermissionTypeEnum\"\r\n ].splice(permittedDevelopmentIndex);\r\n }\r\n\r\n return this.SelectLists[\r\n \"PurchasingExistingBuildingPlanningPermissionTypeEnum\"\r\n ].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetCompletionOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"projectCompletionTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"projectCompletionTypeEnum\"] = [\r\n {\r\n key: ProjectCompletionTypeEnum.LessThan1Week,\r\n displayName: \"Less than 1 week\",\r\n order: 1,\r\n },\r\n {\r\n key: ProjectCompletionTypeEnum.LessThan2Week,\r\n displayName: \"Less than 2 week\",\r\n order: 2,\r\n },\r\n {\r\n key: ProjectCompletionTypeEnum.NoSetTime,\r\n displayName: \"Own land with no outline planning\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"projectCompletionTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetCaseStatusOptions(isConnectUser: boolean = false): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"CaseStatusEnum\"] == null\r\n ) {\r\n this.SelectLists[\"CaseStatusEnum\"] = [\r\n { key: CaseStatusEnum.Search, displayName: \"Search\", order: 1 },\r\n { key: CaseStatusEnum.NewCase, displayName: \"New Case\", order: 2 },\r\n {\r\n key: CaseStatusEnum.InProgress,\r\n displayName: \"In Progress\",\r\n order: 3,\r\n },\r\n {\r\n key: CaseStatusEnum.UnderReview,\r\n displayName: \"Under Review\",\r\n order: 4,\r\n },\r\n {\r\n key: CaseStatusEnum.ReadyToSubmit,\r\n displayName: \"Ready To Submit\",\r\n order: 5,\r\n },\r\n {\r\n key: CaseStatusEnum.SubmittedToLendersForHoT,\r\n displayName: \"Submitted To Lenders for DIP\",\r\n order: 6,\r\n },\r\n {\r\n key: CaseStatusEnum.ReadyToReSubmit,\r\n displayName: \"Ready to Re-Submit\",\r\n order: 7,\r\n },\r\n { key: CaseStatusEnum.Applied, displayName: \"Applied\", order: 8 },\r\n {\r\n key: CaseStatusEnum.CreditApproved,\r\n displayName: \"Credit Approved\",\r\n order: 9,\r\n },\r\n {\r\n key: CaseStatusEnum.WithProfessionals,\r\n displayName: \"With Professionals\",\r\n order: 10,\r\n },\r\n { key: CaseStatusEnum.Completed, displayName: \"Completed\", order: 11 },\r\n { key: CaseStatusEnum.Dormant, displayName: \"Dormant\", order: 12 },\r\n {\r\n key: CaseStatusEnum.SubmittedToLendersPendingReview,\r\n displayName: \"Submitted To Lenders Pending Review\",\r\n order: 13,\r\n },\r\n {\r\n key: CaseStatusEnum.SentToPackager,\r\n displayName: isConnectUser? \"Sent by AR\" :\"Sent to Packager\",\r\n order: 14,\r\n }\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"CaseStatusEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetCaseLenderStateOptionsForLenders(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists['CaseLenderStateEnumForLender'] == null) {\r\n this.SelectLists['CaseLenderStateEnumForLender'] = [\r\n { key: CaseLenderStateEnum.Received, displayName: 'Case to review', order: 1 },\r\n { key: CaseLenderStateEnum.Offered, displayName: 'DIP submitted', order: 2 },\r\n { key: CaseLenderStateEnum.Rejected, displayName: 'Case rejected', order: 3 },\r\n { key: CaseLenderStateEnum.Withdrawn, displayName: 'DIP withdrawn', order: 4 },\r\n { key: CaseLenderStateEnum.Applied, displayName: 'DIP submitted and accepted', order: 5 },\r\n { key: CaseLenderStateEnum.Cancelled, displayName: 'Application cancelled', order: 6 },\r\n { key: CaseLenderStateEnum.SentToPackager, displayName: 'DIP submitted', order: 7 }\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"CaseLenderStateEnumForLender\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetExitStrategy(excludeOther: boolean = true): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"ExitStrategyEnum\"] == null\r\n ) {\r\n this.SelectLists[\"ExitStrategyEnum\"] = [\r\n { key: ExitStrategyEnum.Sale, displayName: \"Sale\", order: 3 },\r\n { key: ExitStrategyEnum.Refinance, displayName: \"Refinance\", order: 2 },\r\n {\r\n key: ExitStrategyEnum.PartSalePartRefinance,\r\n displayName: \"Part sale & part refinance\",\r\n order: 1,\r\n },\r\n {\r\n key: ExitStrategyEnum.SaleOfAlternativeAsset,\r\n displayName: \"Sale of an alternative asset\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n\r\n const otherIndex = this.SelectLists[\"ExitStrategyEnum\"]\r\n .map((e) => e.key)\r\n .indexOf(ExitStrategyEnum.Other);\r\n\r\n if (!excludeOther && otherIndex == -1) {\r\n this.SelectLists[\"ExitStrategyEnum\"].push({\r\n key: ExitStrategyEnum.Other,\r\n displayName: \"Other\",\r\n order: 5,\r\n });\r\n } else if (excludeOther && otherIndex > -1) {\r\n this.SelectLists[\"ExitStrategyEnum\"].splice(otherIndex);\r\n }\r\n\r\n return this.SelectLists[\"ExitStrategyEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetExitStrategyDevFinanceOptions() {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"ExitStrategyDevFinanceEnum\"] == null\r\n ) {\r\n this.SelectLists[\"ExitStrategyDevFinanceEnum\"] = [\r\n { key: ExitStrategyEnum.Sale, displayName: \"Sale of units\", order: 3 },\r\n { key: ExitStrategyEnum.Refinance, displayName: \"Refinance\", order: 2 },\r\n {\r\n key: ExitStrategyEnum.PartSalePartRefinance,\r\n displayName: \"Part sale & part refinance\",\r\n order: 1,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"ExitStrategyDevFinanceEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetOwnNewDevelopmentOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"OwnNewDevelopmentEnum\"] == null\r\n ) {\r\n this.SelectLists[\"OwnNewDevelopmentEnum\"] = [\r\n {\r\n key: OwnNewDevelopmentEnum.OverseasLimitedCompany,\r\n displayName: \"Overseas Limited Company\",\r\n order: 1,\r\n },\r\n {\r\n key: OwnNewDevelopmentEnum.PensionFund,\r\n displayName: \"Pension Fund\",\r\n order: 2,\r\n },\r\n {\r\n key: OwnNewDevelopmentEnum.PersonalNames,\r\n displayName: \"Personal Names\",\r\n order: 3,\r\n },\r\n {\r\n key: OwnNewDevelopmentEnum.UKLimitedCompany,\r\n displayName: \"UK Limited Company\",\r\n order: 4,\r\n },\r\n {\r\n key: OwnNewDevelopmentEnum.UKLimitedLiabilityPartnership,\r\n displayName: \"UK Limited Partnership\",\r\n order: 5,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"OwnNewDevelopmentEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetCommercialOwnNewDevelopmentOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"CommercialOwnNewDevelopmentEnum\"] == null\r\n ) {\r\n this.SelectLists[\"CommercialOwnNewDevelopmentEnum\"] = [\r\n {\r\n key: OwnNewDevelopmentEnum.OverseasLimitedCompany,\r\n displayName: \"Overseas Limited Company\",\r\n order: 1,\r\n },\r\n {\r\n key: OwnNewDevelopmentEnum.PensionFund,\r\n displayName: \"Pension Fund\",\r\n order: 2,\r\n },\r\n {\r\n key: OwnNewDevelopmentEnum.PersonalNames,\r\n displayName: \"Personal Names\",\r\n order: 3,\r\n },\r\n {\r\n key: OwnNewDevelopmentEnum.UKLimitedCompany,\r\n displayName: \"UK Limited Company\",\r\n order: 4,\r\n },\r\n {\r\n key: OwnNewDevelopmentEnum.UKLimitedLiabilityPartnership,\r\n displayName: \"Limited Liability Partnership\",\r\n order: 5,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"CommercialOwnNewDevelopmentEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetTitleOptions(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"TitleEnum\"] == null) {\r\n this.SelectLists[\"TitleEnum\"] = [\r\n { key: TitleEnum.Mr, displayName: \"Mr\", order: 1 },\r\n { key: TitleEnum.Mrs, displayName: \"Mrs\", order: 2 },\r\n { key: TitleEnum.Miss, displayName: \"Miss\", order: 3 },\r\n { key: TitleEnum.Ms, displayName: \"Ms\", order: 4 },\r\n { key: TitleEnum.Other, displayName: \"Other\", order: 5 },\r\n ];\r\n }\r\n return this.SelectLists[\"TitleEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetLoanCompletionOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"LoanCompletionTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"LoanCompletionTypeEnum\"] = [\r\n {\r\n key: LoanCompletionTypeEnum.AsSoonAsPossible,\r\n displayName: \"As soon as possible\",\r\n order: 1,\r\n },\r\n {\r\n key: LoanCompletionTypeEnum.JustCheckingMyOptions,\r\n displayName: \"Just checking my options\",\r\n order: 3,\r\n },\r\n {\r\n key: LoanCompletionTypeEnum.WithinNextFewWeeks,\r\n displayName: \"Within the next few weeks\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"LoanCompletionTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetInterestRateType(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"InterestRateType\"] == null\r\n ) {\r\n this.SelectLists[\"InterestRateType\"] = [\r\n { key: InterestRateTypeEnum.Fixed, displayName: \"Fixed\", order: 1 },\r\n {\r\n key: InterestRateTypeEnum.Variable,\r\n displayName: \"Variable\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"InterestRateType\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetExistingPlanningChangeTypeOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"ExistingPlanningChangeTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"ExistingPlanningChangeTypeEnum\"] = [\r\n {\r\n key: ExistingPlanningChangeTypeEnum.EnhancedPlanningOnExistingBuilding,\r\n displayName:\r\n \"Enhanced planning on existing building e.g extension or add another storey\",\r\n order: 1,\r\n },\r\n {\r\n key: ExistingPlanningChangeTypeEnum.PermittedDevelopmentOnExistingBuilding,\r\n displayName:\r\n \"Permitted development on the existing building e.g convert commerical to residential\",\r\n order: 2,\r\n },\r\n {\r\n key: ExistingPlanningChangeTypeEnum.BrandNewPlanningApplication,\r\n displayName:\r\n \"Brand new planning application e.g knock down existing building & rebuild\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"ExistingPlanningChangeTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetBuildStageOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"BuildStageEnum\"] == null\r\n ) {\r\n this.SelectLists[\"BuildStageEnum\"] = [\r\n {\r\n key: BuildStageEnum.PracticalCompletion,\r\n displayName: \"Practical Completion\",\r\n order: 1,\r\n },\r\n {\r\n key: BuildStageEnum.WindAndWaterTight,\r\n displayName: \"Wind & Water Tight\",\r\n order: 2,\r\n },\r\n {\r\n key: BuildStageEnum.PreWindAndWaterTight,\r\n displayName: \"Pre Wind And Water Tight\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"BuildStageEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetOwnershipRoleOptions(\r\n productType: ProductTypeEnum = ProductTypeEnum.None,\r\n ): ListItem[] {\r\n // if (this.SelectLists == null || this.SelectLists['OwnerShipRoleEnum'] == null) {\r\n this.SelectLists[\"OwnerShipRoleEnum\"] = [\r\n { key: OwnershipRoleEnum.Director, displayName: \"Director\", order: 1 },\r\n {\r\n key: OwnershipRoleEnum.DirectorAndShareholder,\r\n displayName: \"Director & Shareholder\",\r\n order: 3,\r\n },\r\n {\r\n key: OwnershipRoleEnum.Shareholder,\r\n displayName: \"Shareholder\",\r\n order: 2,\r\n },\r\n ];\r\n\r\n if (productType == ProductTypeEnum.CommercialOwnerOccupied) {\r\n this.SelectLists[\"OwnerShipRoleEnum\"].push({\r\n key: OwnershipRoleEnum.Member,\r\n displayName: \"Member\",\r\n order: 4,\r\n });\r\n this.SelectLists[\"OwnerShipRoleEnum\"].push({\r\n key: OwnershipRoleEnum.Partner,\r\n displayName: \"Partner\",\r\n order: 5,\r\n });\r\n }\r\n //}\r\n return this.SelectLists[\"OwnerShipRoleEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetRefurbishmentLevelOptions(includeNone: boolean = false): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"RefurbishmentLevelEnum\"] == null\r\n ) {\r\n this.SelectLists[\"RefurbishmentLevelEnum\"] = [\r\n { key: RefurbishmentLevelEnum.Light, displayName: \"Light\", order: 1 },\r\n { key: RefurbishmentLevelEnum.Medium, displayName: \"Medium\", order: 2 },\r\n { key: RefurbishmentLevelEnum.Heavy, displayName: \"Heavy\", order: 3 },\r\n ];\r\n }\r\n\r\n const noneIndex = this.SelectLists[\"RefurbishmentLevelEnum\"]\r\n .map((e) => e.key)\r\n .indexOf(RefurbishmentLevelEnum.None);\r\n\r\n if (includeNone && noneIndex == -1) {\r\n this.SelectLists[\"RefurbishmentLevelEnum\"].push({\r\n key: RefurbishmentLevelEnum.None,\r\n displayName: \"None\",\r\n order: 0,\r\n });\r\n } else if (!includeNone && noneIndex > -1) {\r\n this.SelectLists[\"RefurbishmentLevelEnum\"].splice(noneIndex);\r\n }\r\n\r\n return this.SelectLists[\"RefurbishmentLevelEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetCurrentUseOfBuildingOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"DevFinancePropertyTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"DevFinancePropertyTypeEnum\"] = [\r\n {\r\n key: PropertyTypeEnum.Residential,\r\n displayName: \"Residential\",\r\n order: 16,\r\n },\r\n { key: PropertyTypeEnum.MixedUse, displayName: \"Mixed Use\", order: 10 },\r\n { key: PropertyTypeEnum.Hotel, displayName: \"Hotel\", order: 4 },\r\n { key: PropertyTypeEnum.Leisure, displayName: \"Leisure\", order: 6 },\r\n {\r\n key: PropertyTypeEnum.CareRetirement,\r\n displayName: \"Care Home\",\r\n order: 1,\r\n },\r\n { key: PropertyTypeEnum.Medical, displayName: \"Medical\", order: 9 },\r\n { key: PropertyTypeEnum.Office, displayName: \"Office\", order: 13 },\r\n { key: PropertyTypeEnum.Retail, displayName: \"Retail\", order: 14 },\r\n {\r\n key: PropertyTypeEnum.LightIndustrial,\r\n displayName: \"Light Industrial\",\r\n order: 8,\r\n },\r\n { key: PropertyTypeEnum.Student, displayName: \"Student\", order: 17 },\r\n {\r\n key: PropertyTypeEnum.HeavyIndustrial,\r\n displayName: \"Heavy Industrial\",\r\n order: 3,\r\n },\r\n { key: PropertyTypeEnum.HMO, displayName: \"Licenced HMO\", order: 7 },\r\n //{ key: PropertyTypeEnum.LandWithoutPlanning, displayName: 'Land without Planning', order: 5 },\r\n { key: PropertyTypeEnum.Education, displayName: \"Education\", order: 2 },\r\n {\r\n key: PropertyTypeEnum.Retirement,\r\n displayName: \"Retirement\",\r\n order: 15,\r\n },\r\n /*{ key: PropertyTypeEnum.AllCommercialMixedUse, displayName: 'Mixed Use (all commercial)', order: 11 },*/\r\n /*{ key: PropertyTypeEnum.MultiUnitFreeholdBlock, displayName: 'Multi-Unit Freehold Block', order: 12 },*/\r\n ];\r\n }\r\n return this.SelectLists[\"DevFinancePropertyTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetCommercialCurrentUseOfBuildingOptions(\r\n productType = ProductTypeEnum.CommercialInvestment,\r\n ): ListItem[] {\r\n //if (this.SelectLists == null || this.SelectLists['CommercialPropertyTypeEnum'] == null) {\r\n this.SelectLists[\"CommercialPropertyTypeEnum\"] = [\r\n {\r\n key: PropertyTypeEnum.MixedUse,\r\n displayName: \"Mixed Use (part residential, part commercial)\",\r\n order: 9,\r\n },\r\n { key: PropertyTypeEnum.Hotel, displayName: \"Hotel\", order: 4 },\r\n { key: PropertyTypeEnum.Leisure, displayName: \"Leisure\", order: 5 },\r\n {\r\n key: PropertyTypeEnum.CareRetirement,\r\n displayName: \"Care Home\",\r\n order: 1,\r\n },\r\n { key: PropertyTypeEnum.Medical, displayName: \"Medical\", order: 8 },\r\n { key: PropertyTypeEnum.Office, displayName: \"Office\", order: 12 },\r\n { key: PropertyTypeEnum.Retail, displayName: \"Retail\", order: 13 },\r\n {\r\n key: PropertyTypeEnum.LightIndustrial,\r\n displayName: \"Light Industrial\",\r\n order: 7,\r\n },\r\n { key: PropertyTypeEnum.Student, displayName: \"Student\", order: 15 },\r\n {\r\n key: PropertyTypeEnum.HeavyIndustrial,\r\n displayName: \"Heavy Industrial\",\r\n order: 3,\r\n },\r\n { key: PropertyTypeEnum.Education, displayName: \"Education\", order: 2 },\r\n {\r\n key: PropertyTypeEnum.Retirement,\r\n displayName: \"Retirement\",\r\n order: 14,\r\n },\r\n {\r\n key: PropertyTypeEnum.AllCommercialMixedUse,\r\n displayName: \"Mixed Use (all commercial)\",\r\n order: 10,\r\n },\r\n ];\r\n\r\n if (productType == ProductTypeEnum.CommercialInvestment) {\r\n this.SelectLists[\"CommercialPropertyTypeEnum\"].push({\r\n key: PropertyTypeEnum.HMO,\r\n displayName: \"Licenced HMO\",\r\n order: 6,\r\n });\r\n this.SelectLists[\"CommercialPropertyTypeEnum\"].push({\r\n key: PropertyTypeEnum.MultiUnitFreeholdBlock,\r\n displayName: \"Multi-Unit Freehold Block\",\r\n order: 11,\r\n });\r\n }\r\n\r\n //}\r\n return this.SelectLists[\"CommercialPropertyTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetLoanRepaymentTypeOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"LoanRepaymentTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"LoanRepaymentTypeEnum\"] = [\r\n {\r\n key: LoanRepaymentTypeEnum.InterestOnly,\r\n displayName: \"Interest only\",\r\n order: 2,\r\n },\r\n {\r\n key: LoanRepaymentTypeEnum.Repayment,\r\n displayName: \"Capital & Interest\",\r\n order: 1,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"LoanRepaymentTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetFixedRateTermOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"FixedRateTermEnum\"] == null\r\n ) {\r\n this.SelectLists[\"FixedRateTermEnum\"] = [\r\n { key: FixedRateTermEnum.TwoYear, displayName: \"2 Year\", order: 1 },\r\n { key: FixedRateTermEnum.FiveYear, displayName: \"5 Year\", order: 2 },\r\n { key: FixedRateTermEnum.TenYear, displayName: \"10 Year\", order: 3 },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"FixedRateTermEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetTimeLeftOnLeaseOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"TimeLeftOnLeaseEnum\"] == null\r\n ) {\r\n this.SelectLists[\"TimeLeftOnLeaseEnum\"] = [\r\n {\r\n key: TimeLeftOnLeaseEnum.LessThanYear,\r\n displayName: \"Less than Year\",\r\n order: 1,\r\n },\r\n {\r\n key: TimeLeftOnLeaseEnum.OneToThreeYears,\r\n displayName: \"1 - 3 Years\",\r\n order: 2,\r\n },\r\n {\r\n key: TimeLeftOnLeaseEnum.MoreThanThreeYears,\r\n displayName: \"More than 3 Years\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"TimeLeftOnLeaseEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetLinkTypeOptions(\r\n showBridging: boolean = false,\r\n showCommercial: boolean = false,\r\n ): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"LinkTypeEnum\"] == null) {\r\n this.SelectLists[\"LinkTypeEnum\"] = [\r\n {\r\n key: LinkTypeEnum.Development,\r\n displayName: \"Development Finance\",\r\n order: 4,\r\n },\r\n { key: LinkTypeEnum.Bridging, displayName: \"Bridging\", order: 2 },\r\n { key: LinkTypeEnum.AllLoans, displayName: \"All Loans\", order: 1 },\r\n {\r\n key: LinkTypeEnum.Commercial,\r\n displayName: \"Commercial Mortgage\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n\r\n const bridgingIndex = this.SelectLists[\"LinkTypeEnum\"]\r\n .map((e) => e.key)\r\n .indexOf(LinkTypeEnum.Bridging);\r\n\r\n if (showBridging && bridgingIndex == -1) {\r\n this.SelectLists[\"LinkTypeEnum\"].push({\r\n key: LinkTypeEnum.Bridging,\r\n displayName: \"Bridging\",\r\n order: 2,\r\n });\r\n } else if (!showBridging && bridgingIndex > -1) {\r\n this.SelectLists[\"LinkTypeEnum\"].splice(bridgingIndex);\r\n }\r\n\r\n const commercialIndex = this.SelectLists[\"LinkTypeEnum\"]\r\n .map((e) => e.key)\r\n .indexOf(LinkTypeEnum.Commercial);\r\n\r\n if (showCommercial && commercialIndex == -1) {\r\n this.SelectLists[\"LinkTypeEnum\"].push({\r\n key: LinkTypeEnum.Commercial,\r\n displayName: \"Commercial Mortgage\",\r\n order: 4,\r\n });\r\n } else if (!showCommercial && commercialIndex > -1) {\r\n this.SelectLists[\"LinkTypeEnum\"].splice(commercialIndex);\r\n }\r\n\r\n return this.SelectLists[\"LinkTypeEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetCountries() {\r\n const countrylist = [\r\n \"United Kingdom of Great Britain and Northern Ireland (the)\",\r\n \"Afghanistan\",\r\n \"Albania\",\r\n \"Algeria\",\r\n \"American Samoa\",\r\n \"Andorra\",\r\n \"Angola\",\r\n \"Anguilla\",\r\n \"Antarctica\",\r\n \"Antigua and Barbuda\",\r\n \"Argentina\",\r\n \"Armenia\",\r\n \"Aruba\",\r\n \"Australia\",\r\n \"Austria\",\r\n \"Azerbaijan\",\r\n \"Bahamas (the)\",\r\n \"Bahrain\",\r\n \"Bangladesh\",\r\n \"Barbados\",\r\n \"Belarus\",\r\n \"Belgium\",\r\n \"Belize\",\r\n \"Benin\",\r\n \"Bermuda\",\r\n \"Bhutan\",\r\n \"Bolivia (Plurinational State of)\",\r\n \"Bonaire, Sint Eustatius and Saba\",\r\n \"Bosnia and Herzegovina\",\r\n \"Botswana\",\r\n \"Bouvet Island\",\r\n \"Brazil\",\r\n \"British Indian Ocean Territory (the)\",\r\n \"Brunei Darussalam\",\r\n \"Bulgaria\",\r\n \"Burkina Faso\",\r\n \"Burundi\",\r\n \"Cabo Verde\",\r\n \"Cambodia\",\r\n \"Cameroon\",\r\n \"Canada\",\r\n \"Cayman Islands (the)\",\r\n \"Central African Republic (the)\",\r\n \"Chad\",\r\n \"Chile\",\r\n \"China\",\r\n \"Christmas Island\",\r\n \"Cocos (Keeling) Islands (the)\",\r\n \"Colombia\",\r\n \"Comoros (the)\",\r\n \"Congo (the Democratic Republic of the)\",\r\n \"Congo (the)\",\r\n \"Cook Islands (the)\",\r\n \"Costa Rica\",\r\n \"Croatia\",\r\n \"Cuba\",\r\n \"Curaçao\",\r\n \"Cyprus\",\r\n \"Czechia\",\r\n \"Côte d'Ivoire\",\r\n \"Denmark\",\r\n \"Djibouti\",\r\n \"Dominica\",\r\n \"Dominican Republic (the)\",\r\n \"Ecuador\",\r\n \"Egypt\",\r\n \"El Salvador\",\r\n \"Equatorial Guinea\",\r\n \"Eritrea\",\r\n \"Estonia\",\r\n \"Eswatini\",\r\n \"Ethiopia\",\r\n \"Falkland Islands (the) [Malvinas]\",\r\n \"Faroe Islands (the)\",\r\n \"Fiji\",\r\n \"Finland\",\r\n \"France\",\r\n \"French Guiana\",\r\n \"French Polynesia\",\r\n \"French Southern Territories (the)\",\r\n \"Gabon\",\r\n \"Gambia (the)\",\r\n \"Georgia\",\r\n \"Germany\",\r\n \"Ghana\",\r\n \"Gibraltar\",\r\n \"Greece\",\r\n \"Greenland\",\r\n \"Grenada\",\r\n \"Guadeloupe\",\r\n \"Guam\",\r\n \"Guatemala\",\r\n \"Guernsey\",\r\n \"Guinea\",\r\n \"Guinea-Bissau\",\r\n \"Guyana\",\r\n \"Haiti\",\r\n \"Heard Island and McDonald Islands\",\r\n \"Holy See (the)\",\r\n \"Honduras\",\r\n \"Hong Kong\",\r\n \"Hungary\",\r\n \"Iceland\",\r\n \"India\",\r\n \"Indonesia\",\r\n \"Iran (Islamic Republic of)\",\r\n \"Iraq\",\r\n \"Ireland\",\r\n \"Isle of Man\",\r\n \"Israel\",\r\n \"Italy\",\r\n \"Jamaica\",\r\n \"Japan\",\r\n \"Jersey\",\r\n \"Jordan\",\r\n \"Kazakhstan\",\r\n \"Kenya\",\r\n \"Kiribati\",\r\n \"Korea (the Democratic People's Republic of)\",\r\n \"Korea (the Republic of)\",\r\n \"Kuwait\",\r\n \"Kyrgyzstan\",\r\n \"Lao People's Democratic Republic (the)\",\r\n \"Latvia\",\r\n \"Lebanon\",\r\n \"Lesotho\",\r\n \"Liberia\",\r\n \"Libya\",\r\n \"Liechtenstein\",\r\n \"Lithuania\",\r\n \"Luxembourg\",\r\n \"Macao\",\r\n \"Madagascar\",\r\n \"Malawi\",\r\n \"Malaysia\",\r\n \"Maldives\",\r\n \"Mali\",\r\n \"Malta\",\r\n \"Marshall Islands (the)\",\r\n \"Martinique\",\r\n \"Mauritania\",\r\n \"Mauritius\",\r\n \"Mayotte\",\r\n \"Mexico\",\r\n \"Micronesia (Federated States of)\",\r\n \"Moldova (the Republic of)\",\r\n \"Monaco\",\r\n \"Mongolia\",\r\n \"Montenegro\",\r\n \"Montserrat\",\r\n \"Morocco\",\r\n \"Mozambique\",\r\n \"Myanmar\",\r\n \"Namibia\",\r\n \"Nauru\",\r\n \"Nepal\",\r\n \"Netherlands (the)\",\r\n \"New Caledonia\",\r\n \"New Zealand\",\r\n \"Nicaragua\",\r\n \"Niger (the)\",\r\n \"Nigeria\",\r\n \"Niue\",\r\n \"Norfolk Island\",\r\n \"Northern Mariana Islands (the)\",\r\n \"Norway\",\r\n \"Oman\",\r\n \"Pakistan\",\r\n \"Palau\",\r\n \"Palestine, State of\",\r\n \"Panama\",\r\n \"Papua New Guinea\",\r\n \"Paraguay\",\r\n \"Peru\",\r\n \"Philippines (the)\",\r\n \"Pitcairn\",\r\n \"Poland\",\r\n \"Portugal\",\r\n \"Puerto Rico\",\r\n \"Qatar\",\r\n \"Republic of North Macedonia\",\r\n \"Romania\",\r\n \"Russian Federation (the)\",\r\n \"Rwanda\",\r\n \"Réunion\",\r\n \"Saint Barthélemy\",\r\n \"Saint Helena, Ascension and Tristan da Cunha\",\r\n \"Saint Kitts and Nevis\",\r\n \"Saint Lucia\",\r\n \"Saint Martin (French part)\",\r\n \"Saint Pierre and Miquelon\",\r\n \"Saint Vincent and the Grenadines\",\r\n \"Samoa\",\r\n \"San Marino\",\r\n \"Sao Tome and Principe\",\r\n \"Saudi Arabia\",\r\n \"Senegal\",\r\n \"Serbia\",\r\n \"Seychelles\",\r\n \"Sierra Leone\",\r\n \"Singapore\",\r\n \"Sint Maarten (Dutch part)\",\r\n \"Slovakia\",\r\n \"Slovenia\",\r\n \"Solomon Islands\",\r\n \"Somalia\",\r\n \"South Africa\",\r\n \"South Georgia and the South Sandwich Islands\",\r\n \"South Sudan\",\r\n \"Spain\",\r\n \"Sri Lanka\",\r\n \"Sudan (the)\",\r\n \"Suriname\",\r\n \"Svalbard and Jan Mayen\",\r\n \"Sweden\",\r\n \"Switzerland\",\r\n \"Syrian Arab Republic\",\r\n \"Taiwan\",\r\n \"Tajikistan\",\r\n \"Tanzania, United Republic of\",\r\n \"Thailand\",\r\n \"Timor-Leste\",\r\n \"Togo\",\r\n \"Tokelau\",\r\n \"Tonga\",\r\n \"Trinidad and Tobago\",\r\n \"Tunisia\",\r\n \"Turkey\",\r\n \"Turkmenistan\",\r\n \"Turks and Caicos Islands (the)\",\r\n \"Tuvalu\",\r\n \"Uganda\",\r\n \"Ukraine\",\r\n \"United Arab Emirates (the)\",\r\n \"United States Minor Outlying Islands (the)\",\r\n \"United States of America (the)\",\r\n \"Uruguay\",\r\n \"Uzbekistan\",\r\n \"Vanuatu\",\r\n \"Venezuela (Bolivarian Republic of)\",\r\n \"Viet Nam\",\r\n \"Virgin Islands (British)\",\r\n \"Virgin Islands (U.S.)\",\r\n \"Wallis and Futuna\",\r\n \"Western Sahara\",\r\n \"Yemen\",\r\n \"Zambia\",\r\n \"Zimbabwe\",\r\n \"Ã…land Islands\",\r\n ];\r\n return countrylist;\r\n }\r\n\r\n GetNationalities() {\r\n const nationalityList = [\r\n \"British\",\r\n \"Afghan\",\r\n \"Albanian\",\r\n \"Algerian\",\r\n \"American\",\r\n \"Andorran\",\r\n \"Angolan\",\r\n \"Anguillan\",\r\n \"Argentine\",\r\n \"Armenian\",\r\n \"Australian\",\r\n \"Austrian\",\r\n \"Azerbaijani\",\r\n \"Bahamian\",\r\n \"Bahraini\",\r\n \"Bangladeshi\",\r\n \"Barbadian\",\r\n \"Belarusian\",\r\n \"Belgian\",\r\n \"Belizean\",\r\n \"Beninese\",\r\n \"Bermudian\",\r\n \"Bhutanese\",\r\n \"Bolivian\",\r\n \"Botswanan\",\r\n \"Brazilian\",\r\n \"British Virgin Islander\",\r\n \"Bruneian\",\r\n \"Bulgarian\",\r\n \"Burkinan\",\r\n \"Burmese\",\r\n \"Burundian\",\r\n \"Cambodian\",\r\n \"Cameroonian\",\r\n \"Canadian\",\r\n \"Cape Verdean\",\r\n \"Cayman Islander\",\r\n \"Central African\",\r\n \"Chadian\",\r\n \"Chilean\",\r\n \"Chinese\",\r\n \"Citizen of Antigua and Barbuda\",\r\n \"Citizen of Bosnia and Herzegovina\",\r\n \"Citizen of Guinea-Bissau\",\r\n \"Citizen of Kiribati\",\r\n \"Citizen of Seychelles\",\r\n \"Citizen of the Dominican Republic\",\r\n \"Citizen of Vanuatu \",\r\n \"Colombian\",\r\n \"Comoran\",\r\n \"Congolese (Congo)\",\r\n \"Congolese (DRC)\",\r\n \"Cook Islander\",\r\n \"Costa Rican\",\r\n \"Croatian\",\r\n \"Cuban\",\r\n \"Cymraes\",\r\n \"Cymro\",\r\n \"Cypriot\",\r\n \"Czech\",\r\n \"Danish\",\r\n \"Djiboutian\",\r\n \"Dominican\",\r\n \"Dutch\",\r\n \"East Timorese\",\r\n \"Ecuadorean\",\r\n \"Egyptian\",\r\n \"Emirati\",\r\n \"English\",\r\n \"Equatorial Guinean\",\r\n \"Eritrean\",\r\n \"Estonian\",\r\n \"Ethiopian\",\r\n \"Faroese\",\r\n \"Fijian\",\r\n \"Filipino\",\r\n \"Finnish\",\r\n \"French\",\r\n \"Gabonese\",\r\n \"Gambian\",\r\n \"Georgian\",\r\n \"German\",\r\n \"Ghanaian\",\r\n \"Gibraltarian\",\r\n \"Greek\",\r\n \"Greenlandic\",\r\n \"Grenadian\",\r\n \"Guamanian\",\r\n \"Guatemalan\",\r\n \"Guinean\",\r\n \"Guyanese\",\r\n \"Haitian\",\r\n \"Honduran\",\r\n \"Hong Konger\",\r\n \"Hungarian\",\r\n \"Icelandic\",\r\n \"Indian\",\r\n \"Indonesian\",\r\n \"Iranian\",\r\n \"Iraqi\",\r\n \"Irish\",\r\n \"Israeli\",\r\n \"Italian\",\r\n \"Ivorian\",\r\n \"Jamaican\",\r\n \"Japanese\",\r\n \"Jordanian\",\r\n \"Kazakh\",\r\n \"Kenyan\",\r\n \"Kittitian\",\r\n \"Kosovan\",\r\n \"Kuwaiti\",\r\n \"Kyrgyz\",\r\n \"Lao\",\r\n \"Latvian\",\r\n \"Lebanese\",\r\n \"Liberian\",\r\n \"Libyan\",\r\n \"Liechtenstein citizen\",\r\n \"Lithuanian\",\r\n \"Luxembourger\",\r\n \"Macanese\",\r\n \"Macedonian\",\r\n \"Malagasy\",\r\n \"Malawian\",\r\n \"Malaysian\",\r\n \"Maldivian\",\r\n \"Malian\",\r\n \"Maltese\",\r\n \"Marshallese\",\r\n \"Martiniquais\",\r\n \"Mauritanian\",\r\n \"Mauritian\",\r\n \"Mexican\",\r\n \"Micronesian\",\r\n \"Moldovan\",\r\n \"Monegasque\",\r\n \"Mongolian\",\r\n \"Montenegrin\",\r\n \"Montserratian\",\r\n \"Moroccan\",\r\n \"Mosotho\",\r\n \"Mozambican\",\r\n \"Namibian\",\r\n \"Nauruan\",\r\n \"Nepalese\",\r\n \"New Zealander\",\r\n \"Nicaraguan\",\r\n \"Nigerian\",\r\n \"Nigerien\",\r\n \"Niuean\",\r\n \"North Korean\",\r\n \"Northern Irish\",\r\n \"Norwegian\",\r\n \"Omani\",\r\n \"Pakistani\",\r\n \"Palauan\",\r\n \"Palestinian\",\r\n \"Panamanian\",\r\n \"Papua New Guinean\",\r\n \"Paraguayan\",\r\n \"Peruvian\",\r\n \"Pitcairn Islander\",\r\n \"Polish\",\r\n \"Portuguese\",\r\n \"Prydeinig\",\r\n \"Puerto Rican\",\r\n \"Qatari\",\r\n \"Romanian\",\r\n \"Russian\",\r\n \"Rwandan\",\r\n \"Salvadorean\",\r\n \"Sammarinese\",\r\n \"Samoan\",\r\n \"Sao Tomean\",\r\n \"Saudi Arabian\",\r\n \"Scottish\",\r\n \"Senegalese\",\r\n \"Serbian\",\r\n \"Sierra Leonean\",\r\n \"Singaporean\",\r\n \"Slovak\",\r\n \"Slovenian\",\r\n \"Solomon Islander\",\r\n \"Somali\",\r\n \"South African\",\r\n \"South Korean\",\r\n \"South Sudanese\",\r\n \"Spanish\",\r\n \"Sri Lankan\",\r\n \"St Helenian\",\r\n \"St Lucian\",\r\n \"Stateless\",\r\n \"Sudanese\",\r\n \"Surinamese\",\r\n \"Swazi\",\r\n \"Swedish\",\r\n \"Swiss\",\r\n \"Syrian\",\r\n \"Taiwanese\",\r\n \"Tajik\",\r\n \"Tanzanian\",\r\n \"Thai\",\r\n \"Togolese\",\r\n \"Tongan\",\r\n \"Trinidadian\",\r\n \"Tristanian\",\r\n \"Tunisian\",\r\n \"Turkish\",\r\n \"Turkmen\",\r\n \"Turks and Caicos Islander\",\r\n \"Tuvaluan\",\r\n \"Ugandan\",\r\n \"Ukrainian\",\r\n \"Uruguayan\",\r\n \"Uzbek\",\r\n \"Vatican citizen\",\r\n \"Venezuelan\",\r\n \"Vietnamese\",\r\n \"Vincentian\",\r\n \"Wallisian\",\r\n \"Welsh\",\r\n \"Yemeni\",\r\n \"Zambian\",\r\n \"Zimbabwean\",\r\n ];\r\n\r\n return nationalityList;\r\n }\r\n\r\n GetBorrowingEntityTypeOptions(\r\n productType: ProductTypeEnum = ProductTypeEnum.None,\r\n ): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"BorrowingEntityTypeEnum\"] == null\r\n ) {\r\n if (productType == ProductTypeEnum.CommercialOwnerOccupied) {\r\n this.SelectLists[\"BorrowingEntityTypeEnum\"] = [\r\n {\r\n key: BorrowingEntityTypeEnum.Company,\r\n displayName: \"Limited Co\",\r\n order: 1,\r\n },\r\n {\r\n key: BorrowingEntityTypeEnum.SoleTrader,\r\n displayName: \"Sole Trader\",\r\n order: 6,\r\n },\r\n {\r\n key: BorrowingEntityTypeEnum.Partnership,\r\n displayName: \"Partnership\",\r\n order: 4,\r\n },\r\n { key: BorrowingEntityTypeEnum.LLP, displayName: \"LLP\", order: 2 },\r\n {\r\n key: BorrowingEntityTypeEnum.Trust,\r\n displayName: \"Trust\",\r\n order: 7,\r\n },\r\n {\r\n key: BorrowingEntityTypeEnum.SIPPOrSSAS,\r\n displayName: \"SIPP / SSAS\",\r\n order: 5,\r\n },\r\n {\r\n key: BorrowingEntityTypeEnum.OverseasCo,\r\n displayName: \"Overseas Co\",\r\n order: 3,\r\n },\r\n ];\r\n } else {\r\n this.SelectLists[\"BorrowingEntityTypeEnum\"] = [\r\n {\r\n key: BorrowingEntityTypeEnum.Company,\r\n displayName: \"Company\",\r\n order: 1,\r\n },\r\n {\r\n key: BorrowingEntityTypeEnum.Individual,\r\n displayName: \"Individual\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n }\r\n\r\n return this.SelectLists[\"BorrowingEntityTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetMaxIndividualUnitPrices(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"MaxIndividualUnitPriceEnum\"] == null\r\n ) {\r\n this.SelectLists[\"MaxIndividualUnitPriceEnum\"] = [\r\n {\r\n key: MaxIndividualUnitPriceEnum.NoMax,\r\n displayName: \"Above £5m\",\r\n order: 5,\r\n },\r\n {\r\n key: MaxIndividualUnitPriceEnum.UpTo1Million,\r\n displayName: \"Up to £1m\",\r\n order: 2,\r\n },\r\n {\r\n key: MaxIndividualUnitPriceEnum.UpTo2Million,\r\n displayName: \"Up to £2m\",\r\n order: 3,\r\n },\r\n {\r\n key: MaxIndividualUnitPriceEnum.UpTo5Million,\r\n displayName: \"Up to £5m\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"MaxIndividualUnitPriceEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetAcceptableEPCRating(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"EPCRatingTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"EPCRatingTypeEnum\"] = [\r\n { key: EPCRatingTypeEnum.AtoC, displayName: \"A - C rating\", order: 1 },\r\n { key: EPCRatingTypeEnum.DtoE, displayName: \"D - E rating\", order: 2 },\r\n { key: EPCRatingTypeEnum.AboveE, displayName: \"F+ rating\", order: 3 },\r\n ];\r\n }\r\n return this.SelectLists[\"EPCRatingTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetEWS1GradeType(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"EWS1GradeTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"EWS1GradeTypeEnum\"] = [\r\n { key: EWS1GradeTypeEnum.A, displayName: \"A rating\", order: 1 },\r\n { key: EWS1GradeTypeEnum.B, displayName: \"B rating\", order: 2 },\r\n ];\r\n }\r\n return this.SelectLists[\"EWS1GradeTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetEPCRating(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"EPCRatingTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"EPCRatingTypeEnum\"] = [\r\n { key: EPCRatingTypeEnum.A, displayName: \"A\", order: 1 },\r\n { key: EPCRatingTypeEnum.B, displayName: \"B\", order: 2 },\r\n { key: EPCRatingTypeEnum.C, displayName: \"C\", order: 3 },\r\n { key: EPCRatingTypeEnum.D, displayName: \"D\", order: 4 },\r\n { key: EPCRatingTypeEnum.E, displayName: \"E\", order: 5 },\r\n { key: EPCRatingTypeEnum.AboveE, displayName: \"Above E\", order: 6 },\r\n ];\r\n }\r\n return this.SelectLists[\"EPCRatingTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetLocations(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"LocationEnum\"] == null) {\r\n this.SelectLists[\"LocationEnum\"] = [\r\n {\r\n key: LocationEnum.ChannelIsland,\r\n displayName: \"Channel Islands\",\r\n order: 1,\r\n },\r\n {\r\n key: LocationEnum.EastofEngland,\r\n displayName: \"East of England\",\r\n order: 2,\r\n },\r\n { key: LocationEnum.London, displayName: \"London\", order: 3 },\r\n { key: LocationEnum.Midlands, displayName: \"Midlands\", order: 4 },\r\n { key: LocationEnum.NorthEast, displayName: \"North East\", order: 5 },\r\n { key: LocationEnum.NorthWest, displayName: \"North West\", order: 6 },\r\n {\r\n key: LocationEnum.NorthernIreland,\r\n displayName: \"Northern Ireland\",\r\n order: 7,\r\n },\r\n { key: LocationEnum.Scotland, displayName: \"Scotland\", order: 8 },\r\n { key: LocationEnum.SouthEast, displayName: \"South East\", order: 9 },\r\n { key: LocationEnum.SouthWest, displayName: \"South West\", order: 10 },\r\n { key: LocationEnum.Wales, displayName: \"Wales\", order: 11 },\r\n ];\r\n }\r\n return this.SelectLists[\"LocationEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetPlanningResponsibilityOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PlanningResponsibilityEnum\"] == null\r\n ) {\r\n this.SelectLists[\"PlanningResponsibilityEnum\"] = [\r\n {\r\n key: PlanningResponsibilityEnum.Borrower,\r\n displayName: \"Borrower\",\r\n order: 1,\r\n },\r\n {\r\n key: PlanningResponsibilityEnum.PreviousOwner,\r\n displayName: \"Previous owner\",\r\n order: 2,\r\n },\r\n {\r\n key: PlanningResponsibilityEnum.SomebodyElse,\r\n displayName: \"Someone else\",\r\n order: 3,\r\n },\r\n { key: PlanningResponsibilityEnum.NA, displayName: \"N/A\", order: 4 },\r\n ];\r\n }\r\n return this.SelectLists[\"PlanningResponsibilityEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetBuildProcurementTypeOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"BuildProcurementTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"BuildProcurementTypeEnum\"] = [\r\n {\r\n key: BuildProcurementTypeEnum.DesignAndBuildContract,\r\n displayName: \"Design and build contract\",\r\n order: 1,\r\n },\r\n {\r\n key: BuildProcurementTypeEnum.TraditionalContract,\r\n displayName: \"Traditional contract (seperate design & build)\",\r\n order: 3,\r\n },\r\n {\r\n key: BuildProcurementTypeEnum.SelfManaged,\r\n displayName:\r\n \"Self-managed procurement (borrowers will manage the individual trade packages)\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"BuildProcurementTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetSceheduleTenureTypes(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"SceheduleTenureEnum\"] == null\r\n ) {\r\n this.SelectLists[\"SceheduleTenureEnum\"] = [\r\n { key: TenureEnum.Freehold, displayName: \"Freehold\", order: 1 },\r\n { key: TenureEnum.Leasehold, displayName: \"Leasehold\", order: 2 },\r\n { key: TenureEnum.Other, displayName: \"Other\", order: 3 },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"SceheduleTenureEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetPreAgreementTypes(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PreAgreementEnum\"] == null\r\n ) {\r\n this.SelectLists[\"PreAgreementEnum\"] = [\r\n { key: PreAgreementEnum.PreLet, displayName: \"Pre-Let\", order: 1 },\r\n { key: PreAgreementEnum.PreSold, displayName: \"Pre-Sold\", order: 2 },\r\n { key: PreAgreementEnum.None, displayName: \"None\", order: 3 },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"PreAgreementEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetHouseDescriptionTypes(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"HouseDescriptionTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"HouseDescriptionTypeEnum\"] = [\r\n {\r\n key: ScheduleDescriptionTypeEnum.Bungalow,\r\n displayName: \"Bungalow\",\r\n order: 1,\r\n },\r\n {\r\n key: ScheduleDescriptionTypeEnum.Cottage,\r\n displayName: \"Cottage\",\r\n order: 2,\r\n },\r\n {\r\n key: ScheduleDescriptionTypeEnum.DetachedHouse,\r\n displayName: \"Detached house\",\r\n order: 3,\r\n },\r\n {\r\n key: ScheduleDescriptionTypeEnum.SemiDetachedHouse,\r\n displayName: \"Semi-detached house\",\r\n order: 4,\r\n },\r\n {\r\n key: ScheduleDescriptionTypeEnum.TerrancedHouse,\r\n displayName: \"Terranced house\",\r\n order: 5,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"HouseDescriptionTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetFlatDescriptionTypes(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"FlatDescriptionTypeEnum\"] == null\r\n ) {\r\n this.SelectLists[\"FlatDescriptionTypeEnum\"] = [\r\n {\r\n key: ScheduleDescriptionTypeEnum.Studio,\r\n displayName: \"Studio\",\r\n order: 1,\r\n },\r\n {\r\n key: ScheduleDescriptionTypeEnum.SingleStorey,\r\n displayName: \"Single storey\",\r\n order: 2,\r\n },\r\n {\r\n key: ScheduleDescriptionTypeEnum.Duplex,\r\n displayName: \"Duplex\",\r\n order: 3,\r\n },\r\n {\r\n key: ScheduleDescriptionTypeEnum.Triplex,\r\n displayName: \"Triplex\",\r\n order: 4,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"FlatDescriptionTypeEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetTradingPeriodTypes(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"TradingPeriod\"] == null) {\r\n this.SelectLists[\"TradingPeriod\"] = [\r\n {\r\n key: TradingPeriodEnum.LessThanTwoYears,\r\n displayName: \"< 2 Years\",\r\n order: 1,\r\n },\r\n {\r\n key: TradingPeriodEnum.MoreThanTwoYears,\r\n displayName: \"2 Years +\",\r\n order: 2,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"TradingPeriod\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetPlanningPermissionTypesOfBridging(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"PlanningPermissionTypesOfBridging\"] == null\r\n ) {\r\n this.SelectLists[\"PlanningPermissionTypesOfBridging\"] = [\r\n {\r\n key: PlanningPermissionTypeEnum.NoPlanning,\r\n displayName: \"No planning\",\r\n order: 2,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.OutlinePlanning,\r\n displayName: \"Outline planning\",\r\n order: 3,\r\n },\r\n {\r\n key: PlanningPermissionTypeEnum.DetailedPlanning,\r\n displayName: \"Detailed planning\",\r\n order: 1,\r\n },\r\n ];\r\n }\r\n return this.SelectLists[\"PlanningPermissionTypesOfBridging\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetValuationMethodOptions(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"ValuationMethodEnum\"] == null) {\r\n this.SelectLists[\"ValuationMethodEnum\"] = [\r\n {\r\n key: ValuationMethodEnum.OMV,\r\n displayName: \"OMV\",\r\n order: 4,\r\n },\r\n {\r\n key: ValuationMethodEnum.One80DayVP,\r\n displayName: \"180 day VP\",\r\n order: 1,\r\n }, {\r\n key: ValuationMethodEnum.NinetyDayVP,\r\n displayName: \"90 day VP\",\r\n order: 2,\r\n }, {\r\n key: ValuationMethodEnum.CommercialValuation,\r\n displayName: \"Commercial Valuation\",\r\n order: 3,\r\n },\r\n ];\r\n }\r\n\r\n return this.SelectLists[\"ValuationMethodEnum\"].sort((a, b) => a.order - b.order);\r\n }\r\n\r\n GetMaxCommercialFloorspaceOptions(): ListItem[] {\r\n if (\r\n this.SelectLists == null ||\r\n this.SelectLists[\"MaxCommercialFloorspaceEnum\"] == null\r\n ) {\r\n this.SelectLists[\"MaxCommercialFloorspaceEnum\"] = [\r\n {\r\n key: MaxCommercialFloorspaceEnum.Below50,\r\n displayName: \"0 - 50%\",\r\n order: 1,\r\n },\r\n {\r\n key: MaxCommercialFloorspaceEnum.FiftyOneTo75,\r\n displayName: \"51 - 75%\",\r\n order: 2,\r\n },\r\n {\r\n key: MaxCommercialFloorspaceEnum.Above76,\r\n displayName: \"Above 76%\",\r\n order: 3,\r\n }\r\n ];\r\n }\r\n return this.SelectLists[\"MaxCommercialFloorspaceEnum\"].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n }\r\n\r\n GetCRMs(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"CRMEnum\"] == null) {\r\n this.SelectLists[\"CRMEnum\"] = [\r\n { key: CRMEnum.OMS, displayName: \"OMS\", order: 1 },\r\n { key: CRMEnum.Finova, displayName: \"Finova\", order: 2 },\r\n { key: CRMEnum.BATSoftware, displayName: \"BAT Software\", order: 3 },\r\n { key: CRMEnum.Acre, displayName: \"Acre\", order: 4 },\r\n { key: CRMEnum.Smart365, displayName: \"Smart365\", order: 5 },\r\n { key: CRMEnum.Salesforce, displayName: \"Salesforce\", order: 6 },\r\n { key: CRMEnum.Pipedrive, displayName: \"Pipedrive\", order: 7 },\r\n { key: CRMEnum.Zoho, displayName: \"Zoho\", order: 8 },\r\n ];\r\n }\r\n return this.SelectLists[\"CRMEnum\"].sort((a, b) =>\r\n a.displayName.localeCompare(b.displayName)\r\n );\r\n }\r\n\r\n GetBrokerNetworks(): ListItem[] {\r\n if (this.SelectLists == null || this.SelectLists[\"BrokerNetworkEnum\"] == null) {\r\n this.SelectLists[\"BrokerNetworkEnum\"] = [\r\n { key: BrokerNetworkEnum.ConnectIFA, displayName: \"Connect IFA\", order: 1 },\r\n { key: BrokerNetworkEnum.Synergy, displayName: \"Synergy\", order: 2 },\r\n { key: BrokerNetworkEnum.NewLeafDistribution, displayName: \"New Leaf Distribution\", order: 3 },\r\n { key: BrokerNetworkEnum.Fiducia, displayName: \"Fiducia\", order: 4 },\r\n { key: BrokerNetworkEnum.RosemountFinancialSolutions, displayName: \"Rosemount Financial Solutions\", order: 5 },\r\n { key: BrokerNetworkEnum.StJamesPlace, displayName: \"St James Place\", order: 6 },\r\n { key: BrokerNetworkEnum.Primis, displayName: \"Primis\", order: 7 },\r\n { key: BrokerNetworkEnum.Quilter, displayName: \"Quilter\", order: 8 },\r\n { key: BrokerNetworkEnum.Stonebridge, displayName: \"Stonebridge\", order: 9 },\r\n { key: BrokerNetworkEnum.Openwork, displayName: \"Openwork\", order: 10 },\r\n { key: BrokerNetworkEnum.HLPartnership, displayName: \"HL Partnership\", order: 11 },\r\n { key: BrokerNetworkEnum.TheRightMortgageLimited, displayName: \"The Right Mortgage Limited\", order: 12 },\r\n { key: BrokerNetworkEnum.PlanWealthManagement, displayName: \"Plan Wealth Management\", order: 13 },\r\n { key: BrokerNetworkEnum.Sesame, displayName: \"Sesame\", order: 14 },\r\n { key: BrokerNetworkEnum.TheOnLinePartnershipLtd, displayName: \"The On-Line Partnership Ltd\", order: 15 },\r\n { key: BrokerNetworkEnum.MortgageAdviceBureau, displayName: \"Mortgage Advice Bureau\", order: 16 },\r\n { key: BrokerNetworkEnum.SenseNetwork, displayName: \"Sense Network\", order: 17 },\r\n { key: BrokerNetworkEnum.MortgageIntelligenceLtd, displayName: \"Mortgage Intelligence Ltd\", order: 18 },\r\n { key: BrokerNetworkEnum.ValidPathLimited, displayName: \"ValidPath Limited\", order: 19 },\r\n { key: BrokerNetworkEnum.BestPracticeIFAGroupLimited, displayName: \"Best Practice IFA Group Limited\", order: 20 },\r\n { key: BrokerNetworkEnum.WhiteRoseFinanceGroupLimited, displayName: \"White Rose Finance Group Limited\", order: 21 },\r\n { key: BrokerNetworkEnum.TMGDirectLimited, displayName: \"TMG Direct Limited\", order: 22 },\r\n { key: BrokerNetworkEnum.BeneficialLimited, displayName: \"Beneficial Limited\", order: 23 },\r\n { key: BrokerNetworkEnum.JulianHarris, displayName: \"Julian Harris\", order: 24 },\r\n { key: BrokerNetworkEnum.DragonBrokersLimited, displayName: \"Dragon Brokers Limited\", order: 25 },\r\n { key: BrokerNetworkEnum.JohnCharcolLimited, displayName: \"John Charcol Limited\", order: 26 },\r\n { key: BrokerNetworkEnum.CornerstoneFinancial, displayName: \"Cornerstone Financial\", order: 27 },\r\n { key: BrokerNetworkEnum.CorbelPartners, displayName: \"Corbel Partners\", order: 28 },\r\n { key: BrokerNetworkEnum.RichdaleBrokers, displayName: \"Richdale Brokers\", order: 29 },\r\n { key: BrokerNetworkEnum.PJFinancialLtd, displayName: \"PJ Financial Ltd\", order: 30 },\r\n { key: BrokerNetworkEnum.JLMMortgageNetwork, displayName: \"JLM Mortgage Network\", order: 31 },\r\n { key: BrokerNetworkEnum.IngrandFinancial, displayName: \"Ingrand Financial\", order: 32 },\r\n ];\r\n }\r\n return this.SelectLists[\"BrokerNetworkEnum\"].sort((a, b) =>\r\n a.displayName.localeCompare(b.displayName)\r\n );\r\n }\r\n\r\n decodeBitwiseEnum(bitwiseValue: number, options: ListItem[]): ListItem[] {\r\n return options\r\n .filter(option => (bitwiseValue & option.key) === option.key)\r\n }\r\n\r\n encodeBitwiseEnum(selectedKeys: ListItem[]): number {\r\n const keys = selectedKeys.map(item => item.key);\r\n return keys.reduce((acc, key) => acc | key, 0);\r\n }\r\n \r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\n\r\nexport class SharedDataService {\r\n static $inject = [\"$q\", \"OrganisationService\"];\r\n\r\n userRole: string = \"\";\r\n userDetails: string = null;\r\n projectName: string = null;\r\n isBorrower: boolean = false;\r\n user: ApplicationUserDTO = null;\r\n clientId: string = null;\r\n applicationName: string = null;\r\n organisationService: any;\r\n organisationLinkId: string = null;\r\n leadSourceUrl: string = null;\r\n\r\n constructor(\r\n private $q: ng.IQService,\r\n OrganisationService: any,\r\n ) {\r\n this.organisationService = OrganisationService;\r\n }\r\n\r\n initializeAsync(bridging: boolean): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n let promiseArray = [\r\n this.setBorrowerFlag(),\r\n this.getUser(),\r\n this.getProjectName(),\r\n this.getApplicationName(),\r\n this.getOrganisationLinkId(),\r\n ];\r\n\r\n if (bridging) {\r\n promiseArray.push(this.getClientId());\r\n }\r\n\r\n Promise.all(promiseArray)\r\n .then(() => {\r\n defer.resolve();\r\n })\r\n .catch((error) => {\r\n console.error(\"An error occurred:\", error);\r\n defer.reject(error);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n cleanLenderReferralSessionStorage() {\r\n if (sessionStorage.getItem(\"lenderReferralData\")) {\r\n sessionStorage.removeItem(\"lenderReferralData\");\r\n }\r\n }\r\n\r\n private async getLeadSourceUrl(): Promise {\r\n if (window.self === window.top) {\r\n this.leadSourceUrl = sessionStorage.getItem(\"sourceUrl\");\r\n } else {\r\n this.leadSourceUrl = await this.organisationService.getData(\"sourceUrl\");\r\n }\r\n }\r\n\r\n private async getOrganisationLinkId(): Promise {\r\n if (window.self === window.top) {\r\n this.organisationLinkId = sessionStorage.getItem(\"organisationLinkId\");\r\n } else {\r\n this.organisationLinkId =\r\n await this.organisationService.getData(\"organisationLinkId\");\r\n }\r\n }\r\n\r\n private async setBorrowerFlag(): Promise {\r\n if (window.self === window.top) {\r\n this.userRole = sessionStorage.getItem(\"userRole\");\r\n this.isBorrower = this.userRole === \"borrower\";\r\n } else {\r\n this.userRole = await this.organisationService.getData(\"userRole\");\r\n this.isBorrower = this.userRole === \"borrower\";\r\n }\r\n }\r\n\r\n private async getUser(): Promise {\r\n if (window.self === window.top) {\r\n this.user = JSON.parse(sessionStorage.getItem(\"userDetails\"));\r\n } else {\r\n this.userDetails = await this.organisationService.getData(\"userDetails\");\r\n this.user = JSON.parse(this.userDetails);\r\n }\r\n }\r\n\r\n private async getProjectName(): Promise {\r\n if (window.self === window.top) {\r\n this.projectName = sessionStorage.getItem(\"projectname\");\r\n } else {\r\n this.projectName = await this.organisationService.getData(\"projectname\");\r\n }\r\n }\r\n\r\n private async getApplicationName(): Promise {\r\n if (window.self === window.top) {\r\n this.applicationName = sessionStorage.getItem(\"applicationName\");\r\n } else {\r\n this.applicationName =\r\n await this.organisationService.getData(\"applicationName\");\r\n }\r\n }\r\n\r\n private async getClientId(): Promise {\r\n if (window.self == window.top) {\r\n this.clientId = sessionStorage.getItem(\"clientId\");\r\n } else {\r\n this.clientId = await this.organisationService.getData(\"clientId\");\r\n }\r\n }\r\n\r\n}\r\n\r\n// AngularJS service registration\r\n","import { AddressLookupDTO } from \"@js/DTO/AddressLookupDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { PostalAddress } from \"@js/models/PostalAddress.cs.d\";\r\n\r\nexport class StreetAddressService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/streetaddress\";\r\n this.$broadcastBusinessNameSingular = \"streetaddress\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n getAddressByPostCode(postcode: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/GetAddressByPostCode?postCode=\" + postcode)\r\n .then((response) => {\r\n defer.resolve(response.data as PostalAddress);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n getAddressList(searchTerm: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getAddressList?searchTerm=\" + searchTerm)\r\n .then((response) => {\r\n defer.resolve(response.data as AddressLookupDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n getPostCodeAddressList(\r\n postCode: AddressLookupDTO,\r\n searchTerm: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getPostCodeAddressList?postCodeId=\" +\r\n postCode.Id +\r\n \"&searchTerm=\" +\r\n searchTerm,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as AddressLookupDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n getFullAddress(searchId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getFullAddress?addressId=\" + searchId)\r\n .then((response) => {\r\n defer.resolve(response.data as PostalAddress);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { TaskItemDTO } from \"@js/DTO/TaskItemDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class TaskItemService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/taskitem\";\r\n this.$broadcastBusinessNameSingular = \"taskitem\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n fetchAllOrdered(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/fetchallordered\")\r\n .then((response) => {\r\n defer.resolve(response.data as TaskItemDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n}\r\n","import { TeamMemberDTO } from \"@js/DTO/TeamMemberDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\n\r\nexport class TeamMemberService extends BaseService {\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/teammember\";\r\n this.$broadcastBusinessNameSingular = \"teammember\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n}\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs.d\";\r\nimport { AppPackagePricingDTO } from \"@js/DTO/AppPackagePricingDTO.cs.d\";\r\nimport { LenderAppraisal } from \"@js/DTO/Messages/MakeReferralMessage.cs.d\";\r\nimport { OrganisationDTO } from \"@js/DTO/OrganisationDTO.cs.d\";\r\nimport { PageWithTotalCountDTO } from \"@js/DTO/PageWithTotalCountDTO.cs.d\";\r\nimport { UserSimpleDTO } from \"@js/DTO/UserSimpleDTO.cs.d\";\r\nimport { BaseService } from \"@js/filesfromccqbase/BaseService\";\r\nimport { BroadcastService } from \"@js/filesfromccqbase/BroadcastService\";\r\nimport { LicenseMasterStatusEnum } from \"@js/models/enum/LicenseMasterStatusEnum.cs.d\";\r\nimport { ProductTypeEnum } from \"@js/models/enum/ProductTypeEnum.cs.d\";\r\nimport { OrganisationService } from \"./OrganisationService\";\r\nimport { RoleService } from \"./RoleService\";\r\nimport {\r\n GetCurrentUserPermissionForProductSearchResponse\r\n} from \"@js/DTO/Messages/GetCurrentUserPermissionForProductSearchMessage.cs\";\r\nimport {\r\n RegisterUserAndSaveShortListedResultsRequest\r\n} from \"@js/DTO/Messages/RegisterUserAndSaveShortListedResultsMessage.cs\";\r\nimport { DealLenderDTO } from \"@js/DTO/Deal/DealLenderDTO.cs\";\r\nimport { UserRoleEnum } from \"@js/models/enum/UserRoleEnum.cs.d\";\r\n\r\nexport class UserService extends BaseService {\r\n fileSelected: string;\r\n\r\n static $inject = [\r\n \"$http\",\r\n \"$cookies\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"BroadcastService\",\r\n \"OrganisationService\",\r\n \"RoleService\",\r\n ];\r\n\r\n constructor(\r\n http: ng.IHttpService,\r\n cookies: ng.cookies.ICookiesService,\r\n rootScope: ng.IRootScopeService,\r\n q: ng.IQService,\r\n timeout: ng.ITimeoutService,\r\n broadcastservice: BroadcastService,\r\n private organisationService: OrganisationService,\r\n private roleService: RoleService,\r\n ) {\r\n super(http, cookies, rootScope, q, timeout, broadcastservice);\r\n this.$baseAddress = \"/api/users\";\r\n this.$broadcastBusinessNameSingular = \"User\";\r\n this.$broadcastBusinessNamePlural =\r\n this.$broadcastBusinessNameSingular + \"s\";\r\n this.$broadcastScreen = this.$broadcastBusinessNamePlural;\r\n }\r\n\r\n getcurentuserrecord(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n // override implementation called from UserController\r\n this.$http\r\n .get(this.$baseAddress + \"/meadminstatus\")\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n searchByEmail(searchTerm: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/searchbyemail?searchterm=\" + searchTerm)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getintroducees(userId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/introducees?userId=\" + userId)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getUserEmail(userId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getuseremail?userId=\" + userId)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n createtemporaryuser(dto: ApplicationUserDTO) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(this.$baseAddress + \"/createtemporaryuser\", dto)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n protected fetchpageInternal(\r\n needle: string,\r\n page: number,\r\n count: number,\r\n screen: string,\r\n message: string,\r\n role?: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/user?needle=\" +\r\n needle +\r\n \"&page=\" +\r\n page +\r\n \"&Count=\" +\r\n count +\r\n \"&Role=\" +\r\n role,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as PageWithTotalCountDTO);\r\n })\r\n .catch((response) => {\r\n this.$broadcastservice.broadcastError(screen, message);\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n fetchpage(\r\n needle: string,\r\n page: number,\r\n count: number,\r\n role?: string,\r\n ): ng.IPromise {\r\n return this.fetchpageInternal(\r\n needle,\r\n page,\r\n count,\r\n this.$broadcastScreen,\r\n \"Unable to get a list of \" +\r\n this.$broadcastBusinessNamePlural +\r\n \" from the Please try again shortly.\",\r\n role,\r\n );\r\n }\r\n\r\n /**Is the current user a Broker organisation admin */\r\n IsBrokerOrgAdmin(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n //TODO - JLH - does this function need to be more speciic that this? e.g. passing in an org Id to know whether the user is the admin of a particular org (or could be a separate function)\r\n if ((this.$rootScope as any).currentUser) {\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n defer.resolve(currentUser.IsOrganisationAdmin);\r\n } else {\r\n this.getcurentuserrecord().then((response) => {\r\n (this.$rootScope as any).currentUser = response;\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n defer.resolve(currentUser.IsOrganisationAdmin);\r\n });\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n /** Gets the default broker organisation Id for the current user */\r\n GetDefaultBrokerOrgId(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n if ((this.$rootScope as any).currentUser) {\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n defer.resolve(currentUser.DefaultBrokerOrganisationId);\r\n } else {\r\n this.getcurentuserrecord().then((response) => {\r\n (this.$rootScope as any).currentUser = response;\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n defer.resolve(currentUser.DefaultBrokerOrganisationId);\r\n });\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**Gets the default broker organisation DTO for the current user */\r\n GetDefaultBrokerOrganisation(): ng.IPromise {\r\n var defaultBrokerOrgId: number;\r\n\r\n let defer = this.$q.defer();\r\n\r\n if ((this.$rootScope as any).currentUser) {\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n defaultBrokerOrgId = currentUser.DefaultBrokerOrganisationId;\r\n\r\n if (defaultBrokerOrgId) {\r\n this.organisationService\r\n .fetch(defaultBrokerOrgId)\r\n .then((response: OrganisationDTO) => {\r\n defer.resolve(response);\r\n });\r\n } else {\r\n defer.resolve(null);\r\n }\r\n } else {\r\n this.getcurentuserrecord().then((response) => {\r\n (this.$rootScope as any).currentUser = response;\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n defaultBrokerOrgId = currentUser.DefaultBrokerOrganisationId;\r\n\r\n if (defaultBrokerOrgId) {\r\n this.organisationService\r\n .fetch(defaultBrokerOrgId)\r\n .then((response: OrganisationDTO) => {\r\n defer.resolve(response);\r\n });\r\n } else {\r\n defer.resolve(null);\r\n }\r\n });\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n /** Gets the user's organisation Id for the current user */\r\n GetUserOrganisationId(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n if ((this.$rootScope as any).currentUser) {\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n defer.resolve(currentUser.OrganisationId);\r\n } else {\r\n this.getcurentuserrecord().then((response) => {\r\n (this.$rootScope as any).currentUser = response;\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n defer.resolve(currentUser.OrganisationId);\r\n });\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**Gets the user's organisation DTO for the current user */\r\n GetUserOrganisation(): ng.IPromise {\r\n var userOrgId: number;\r\n\r\n if ((this.$rootScope as any).currentUser) {\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n userOrgId = currentUser.OrganisationId;\r\n } else {\r\n this.getcurentuserrecord().then((response) => {\r\n (this.$rootScope as any).currentUser = response;\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n userOrgId = currentUser.OrganisationId;\r\n });\r\n }\r\n\r\n let defer = this.$q.defer();\r\n\r\n this.organisationService\r\n .fetch(userOrgId)\r\n .then((response: OrganisationDTO) => {\r\n defer.resolve(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n /** Is the user's OrganisationId paid up (active) and premium*/\r\n IsUserOrgActivePremium(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.GetUserOrganisationId().then((orgId: number) => {\r\n this.organisationService\r\n .isOrgActivePremium(orgId)\r\n .then((isOrgActivePremium: boolean) => {\r\n defer.resolve(isOrgActivePremium);\r\n });\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /** Is the user's organisation or the organisation who referred them a \"white labelled\" org */\r\n IsWhiteLabelled(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var userOrgId: number;\r\n var userReferredOrgId: number;\r\n\r\n if ((this.$rootScope as any).currentUser) {\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n userOrgId = currentUser.OrganisationId;\r\n userReferredOrgId = currentUser.OrganisationReferralId;\r\n\r\n if (userOrgId || userReferredOrgId) {\r\n this.isUserOrgWhiteLabelled(userOrgId, userReferredOrgId).then(\r\n (isOrgWhiteLabelled: boolean) => {\r\n defer.resolve(isOrgWhiteLabelled);\r\n },\r\n );\r\n } else {\r\n defer.resolve(false);\r\n }\r\n } else {\r\n this.getcurentuserrecord().then((response) => {\r\n (this.$rootScope as any).currentUser = response;\r\n var currentUser: ApplicationUserDTO = (this.$rootScope as any)\r\n .currentUser;\r\n userOrgId = currentUser.OrganisationId;\r\n userReferredOrgId = currentUser.OrganisationReferralId;\r\n\r\n if (userOrgId || userReferredOrgId) {\r\n this.isUserOrgWhiteLabelled(userOrgId, userReferredOrgId).then(\r\n (isOrgWhiteLabelled: boolean) => {\r\n defer.resolve(isOrgWhiteLabelled);\r\n },\r\n );\r\n } else {\r\n defer.resolve(false);\r\n }\r\n });\r\n }\r\n\r\n if (userOrgId || userReferredOrgId) {\r\n } else {\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Is the user's organisation or the organisation who referred them a \"white labelled\" organisation\r\n * @param orgId\r\n * @param referralOrgId\r\n */\r\n private isUserOrgWhiteLabelled(\r\n orgId: number,\r\n referralOrgId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n // TODO JLH Can a user have an org ID AND a referralOrgId and in this scenario would we need to check both organisations for white labelling?\r\n if (orgId || referralOrgId) {\r\n this.organisationService\r\n .isOrgWhiteLabelled(orgId ? orgId : referralOrgId)\r\n .then((isOrgWhiteLabelled: boolean) => {\r\n defer.resolve(isOrgWhiteLabelled);\r\n });\r\n } else {\r\n defer.resolve(false);\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n setBrokerOrgAdmin(brokerOrgId: number, organisationAdminId: string) {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/setBrokerOrgAdmin?brokerOrgId=\" +\r\n brokerOrgId +\r\n \"&organisationAdminId=\" +\r\n organisationAdminId,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /** get the broker organisation for the current user */\r\n getBrokerOrganisationId(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n var organisationId: number;\r\n\r\n if ((this.$rootScope as any).currentUser) {\r\n var currentUser = (this.$rootScope as any).currentUser;\r\n\r\n if (currentUser.OrganisationId) {\r\n organisationId = currentUser.OrganisationId;\r\n } else {\r\n organisationId = currentUser.OrganisationReferralId;\r\n }\r\n\r\n defer.resolve(organisationId);\r\n } else {\r\n this.getcurentuserrecord()\r\n .then((currentUser: ApplicationUserDTO) => {\r\n if (currentUser.OrganisationId) {\r\n organisationId = currentUser.OrganisationId;\r\n } else {\r\n organisationId = currentUser.OrganisationReferralId;\r\n }\r\n\r\n defer.resolve(organisationId);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n addUpdateWithOrgUniqueRef(\r\n userDto: ApplicationUserDTO,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(this.$baseAddress, userDto)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n GetOrganisationAdminUserId(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getorganisationadminuserid\")\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getLenderUsers(searchTerm: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getlenderusers?searchterm=\" + searchTerm)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n checkEmailExists(email: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedEmail = encodeURIComponent(email);\r\n this.$http\r\n .get(this.$baseAddress + \"/checkemailexists?email=\" + encodedEmail)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n registerBrokerUsers(\r\n newBorkerUsers: ApplicationUserDTO[],\r\n selectedUserName: string = \"\",\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var selectedUserName = encodeURIComponent(selectedUserName);\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/registerbrokerusers?selectedUserName=\" +\r\n selectedUserName,\r\n JSON.stringify(newBorkerUsers),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n updateSubscriptionStatus(\r\n email: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedEmail = encodeURIComponent(email);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getsubscriptionstatusfromuser?email=\" +\r\n encodedEmail,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as LicenseMasterStatusEnum);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getOrganisationNonAdminUsers(\r\n orgId: number,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getorganisationnonadminusers?orgId=\" + orgId)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getAllOrganisationMembers(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getallorganisationmembers?orgId=\" + orgId)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n assigTrialLicenseToUser(\r\n products: AppPackagePricingDTO[],\r\n licenseEndDate: Date,\r\n selectedUserId,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var licenseEndDateString = null;\r\n if (licenseEndDate != null) {\r\n var templicenseEndDate = new Date();\r\n templicenseEndDate.setHours(0, 0, 0, 0);\r\n var licenseEndDateUtc = new Date(\r\n templicenseEndDate.setUTCFullYear(\r\n licenseEndDate.getFullYear(),\r\n licenseEndDate.getMonth(),\r\n licenseEndDate.getDate(),\r\n ),\r\n );\r\n licenseEndDateString = licenseEndDateUtc.getTime();\r\n }\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/assigntriallicensetouser?licenseEndDate=\" +\r\n licenseEndDateString +\r\n \"&selectedUserId=\" +\r\n selectedUserId,\r\n JSON.stringify(products),\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getLicenseStatusText(selectedUserName: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var licenseEndDateString = null;\r\n var encodeUserName = encodeURIComponent(selectedUserName);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getlicensestatustext?selectedUserName=\" +\r\n encodeUserName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n //TODO - 0 references - can be deleted along with backend code?\r\n getUsersBelongToBrokerOrAdmin(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getusersbelongtobrokeroradmin\")\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n /** gets a list of user summaries for the current user (broker or admin) */\r\n getUserSummariesForBrokerOrAdmin(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getusersummariesforbrokeroradmin\")\r\n .then((response) => {\r\n defer.resolve(response.data as UserSimpleDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getUserByUserId(userId): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getuserbyuserid?userId=\" + userId)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendTestEmail(\r\n recipientEmailAddress: string,\r\n emailSubject: string,\r\n emailMessage: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/sendtestemail?recipientEmailAddress=\" +\r\n recipientEmailAddress +\r\n \"&emailSubject=\" +\r\n emailSubject +\r\n \"&emailMessage=\" +\r\n emailMessage,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendEventToHubspot(\r\n dto: ApplicationUserDTO,\r\n page: string = \"\",\r\n login: boolean = false,\r\n orgCode: string = \"\",\r\n role: UserRoleEnum = UserRoleEnum.None,\r\n organisationLinkId: number = 0,\r\n productType: ProductTypeEnum = ProductTypeEnum.None,\r\n dealId: number = 0,\r\n developmentInputwithNoLoginUniqueRef: string = \"\",\r\n clientId: string = \"\",\r\n ) {\r\n if (dto === null) {\r\n return;\r\n }\r\n\r\n let defer = this.$q.defer();\r\n let data = {\r\n dto: dto,\r\n page: page,\r\n login: login,\r\n orgCode: orgCode,\r\n role: role,\r\n organisationLinkId: organisationLinkId,\r\n productType: productType,\r\n dealId: dealId,\r\n developmentInputwithNoLoginUniqueRef:\r\n developmentInputwithNoLoginUniqueRef,\r\n clientId: clientId,\r\n };\r\n this.$http\r\n .post(this.$baseAddress + \"/sendeventtohubspot\", data)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n checkUserNameExists(userName: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedUserName = encodeURIComponent(userName);\r\n this.$http\r\n .get(\r\n this.$baseAddress + \"/checkusernameexists?username=\" + encodedUserName,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getUserDetailsByEmailIfExists(\r\n email: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n var encodedEmail = encodeURIComponent(email);\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getuserdetailsdyemailifexists?email=\" +\r\n encodedEmail,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getUsersByLenderId(lenderId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getusersbylenderid?lenderId=\" + lenderId)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getLenderUsersUnassigned(\r\n searchTerm: string,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(\r\n this.$baseAddress +\r\n \"/getlenderusersunassigned?searchterm=\" +\r\n searchTerm,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n setLenderAsAdmin(userId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/setlenderasadmin?userId=\" + userId)\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n saveLenderUser(\r\n lenderUser: ApplicationUserDTO,\r\n isSavingLenderUser: boolean = false,\r\n ): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(\r\n this.$baseAddress +\r\n \"/savelenderuser?isSavingLenderUser=\" +\r\n isSavingLenderUser,\r\n lenderUser,\r\n )\r\n .then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n removeLenderUser(lenderUserId: string): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http.get(this.$baseAddress + \"/removelenderuser?lenderUserId=\" + lenderUserId).then((response) => {\r\n defer.resolve(response.data as ApplicationUserDTO);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getCurrentUserLender(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getcurrentuserlender\")\r\n .then((response) => {\r\n defer.resolve(response.data as number);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getUserAutofill(): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getcurrentuserautofill\")\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getOrganisationAdminEmail(orgId: number): ng.IPromise {\r\n let defer = this.$q.defer();\r\n\r\n this.$http\r\n .get(this.$baseAddress + \"/getorganisationadminemail?orgId=\" + orgId)\r\n .then((response) => {\r\n defer.resolve(response.data as string);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n getLenderAppraisals() {\r\n let defer = this.$q.defer();\r\n this.$http\r\n .get(this.$baseAddress + \"/getlenderappraisals\")\r\n .then((response) => {\r\n defer.resolve(response.data as LenderAppraisal[]);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n clearSelectedNavMenuAndFilterStorageData() {\r\n sessionStorage.removeItem(\"selectedNavMenu\");\r\n sessionStorage.removeItem(\"clientCaseNameFilter\");\r\n sessionStorage.removeItem(\"statusFilter\");\r\n }\r\n\r\n unSubscribeFromEmail(emailCode: string, userId: string) {\r\n let defer = this.$q.defer();\r\n this.$http.get(this.$baseAddress + \"/unsubscribefromemail?emailCode=\" + emailCode + \"&userId=\" + userId).then((response) => {\r\n defer.resolve(response.data as boolean);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getCurrentUserPermissionForProductSearch() {\r\n let defer = this.$q.defer();\r\n this.$http.get(this.$baseAddress + \"/getcurrentuserpermissionforproductsearch\").then((response) => {\r\n defer.resolve(response.data as GetCurrentUserPermissionForProductSearchResponse);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n sendTestEmailToUsers() {\r\n let defer = this.$q.defer();\r\n this.$http.get(this.$baseAddress + \"/sendtestemailtousers\").then((response) => {\r\n defer.resolve(response.data as boolean);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n getCurrentUserGotEnterpriseLicense() {\r\n let defer = this.$q.defer();\r\n this.$http.get(this.$baseAddress + \"/hascurrentusergotenterpriselicense\").then((response) => {\r\n defer.resolve(response.data as boolean);\r\n }).catch((response) => {\r\n defer.reject(response);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n registerEnterpriseUserAndSaveShortlisteResults(userDto: ApplicationUserDTO, shortlistDealLenders: DealLenderDTO[]): ng.IPromise {\r\n let request = {} as RegisterUserAndSaveShortListedResultsRequest;\r\n request.EnterpriseUser = userDto;\r\n request.ShortlistedResults = shortlistDealLenders;\r\n let defer = this.$q.defer();\r\n this.$http\r\n .post(this.$baseAddress + \"/registerenterpriseuserandsaveshortlisteresults\", request)\r\n .then((response) => {\r\n defer.resolve(response.data as boolean);\r\n })\r\n .catch((response) => {\r\n defer.reject(response);\r\n });\r\n\r\n return defer.promise;\r\n }\r\n\r\n}\r\n","export class EnterpriseService {\r\n productFamily: number = 0;\r\n \r\n constructor() {}\r\n \r\n getProductFamily() {\r\n return this.productFamily;\r\n }\r\n \r\n setProductFamily(productFamily: number) {\r\n this.productFamily = productFamily;\r\n }\r\n }","\r\nexport class UserDashboardService {\r\n NavMenuEnum = {\r\n Home: 0,\r\n DevelopmentFinance: 1,\r\n BridgingFinance: 2,\r\n Clients: 3,\r\n CommercialMortgages: 4,\r\n EquityAndMezz: 5\r\n }\r\n\r\n goToNavMenu: number = null;\r\n\r\n constructor() {}\r\n\r\n getGoToNavMenu() {\r\n return this.goToNavMenu;\r\n }\r\n\r\n setGoToNavMenu(navMenu: number) {\r\n this.goToNavMenu = navMenu;\r\n }\r\n\r\n resetGoToNavMenu() {\r\n this.goToNavMenu = null;\r\n }\r\n}\r\n\r\n","import { ApplicationUserDTO } from \"@js/DTO/ApplicationUserDTO.cs\";\r\nimport { CaseStatusEnum } from \"@js/models/enum/CaseStatusEnum.cs.d\";\r\n\r\n\r\nexport class SharedHeadsOfTermsService {\r\n dataLoading: boolean;\r\n\r\n \r\n static $inject = [\"$q\"];\r\n \r\n constructor(\r\n private $q: ng.IQService,\r\n ) {}\r\n\r\n \r\n isCurrentUserAllowedToSendChat(isBroker: boolean, dealStatus:CaseStatusEnum,isReferredToConnect: boolean, currentUser?: ApplicationUserDTO){\r\n if(!isBroker || (isBroker && !isReferredToConnect)){\r\n return true;\r\n }else if(isBroker && currentUser != null && currentUser.IsConnectUser && (dealStatus == CaseStatusEnum.SentToPackager || dealStatus == CaseStatusEnum.Applied)){\r\n return true;\r\n }else if(isBroker && dealStatus != CaseStatusEnum.SentToPackager && dealStatus != CaseStatusEnum.Applied){\r\n return true;\r\n }else{\r\n return false;\r\n }\r\n }\r\n\r\n \r\n\r\n }\r\n\r\n// AngularJS service registration\r\n","import angular from \"angular\";\r\nimport { AccountService } from \"./services/AccountService\";\r\nimport { AccountSettingService } from \"./services/AccountSettingsService\";\r\nimport { ApplicantService } from \"./services/ApplicantService\";\r\nimport { AssetLiabilityItemService } from \"./services/AssetLiabilityItemService\";\r\nimport { AuthService } from \"./services/AuthService\";\r\nimport { BridgingCaseService } from \"./services/BridgingCaseService\";\r\nimport { BridgingSearchService } from \"./services/BridgingSearchService\";\r\nimport { CaseLenderMessageService } from \"./services/CaseLenderMessageService\";\r\nimport { CaseLenderService } from \"./services/CaseLenderService\";\r\nimport { CaseMemberService } from \"./services/CaseMemberService\";\r\nimport { CaseNoteService } from \"./services/CaseNoteService\";\r\nimport { CaseService } from \"./services/CaseService\";\r\nimport { CaseSummaryService } from \"./services/CaseSummaryService\";\r\nimport { ClientService } from \"./services/ClientService\";\r\nimport { ComparablePropertyService } from \"./services/ComparablePropertyService\";\r\nimport { BridgingDealService } from \"./services/Deal/BridgingDealService\";\r\nimport { CommercialDealService } from \"./services/Deal/CommercialDealService\";\r\nimport { CommercialSearchResultsService } from \"./services/Deal/CommercialSearchResultsService\";\r\nimport { DealLenderMessageService } from \"./services/Deal/DealLenderMessageService\";\r\nimport { DealLenderService } from \"./services/Deal/DealLenderService\";\r\nimport { DealNoteService } from \"./services/Deal/DealNoteService\";\r\nimport { DealScheduleService } from \"./services/Deal/DealScheduleService\";\r\nimport { DealService } from \"./services/Deal/DealService\";\r\nimport { DevFinanceDealService } from \"./services/Deal/DevFinanceDealService\";\r\nimport { DevFinanceSearchResultsService } from \"./services/Deal/DevFinanceSearchResultsService\";\r\nimport { SharedCriteriaService } from \"./services/Deal/SharedCriteriaService\";\r\nimport { SharedDealService } from \"./services/Deal/SharedDealService\";\r\nimport { SharedSearchResultsService } from \"./services/Deal/SharedSearchResultsService\";\r\nimport { DealClientService } from \"./services/DealClientService\";\r\nimport { DealCompletionService } from \"./services/DealCompletionService\";\r\nimport { DealFileAttachmentService } from \"./services/DealFileAttachmentService\";\r\nimport { DevelopmentExperienceService } from \"./services/DevelopmentExperienceService\";\r\nimport { DevelopmentInputScheduleService } from \"./services/DevelopmentInputScheduleService\";\r\nimport { DevelopmentInputService } from \"./services/DevelopmentInputService\";\r\nimport { DevelopmentInputWithNoLoginService } from \"./services/DevelopmentInputWithNoLoginService\";\r\nimport { DevelopmentTrackRecordService } from \"./services/DevelopmentTrackRecordService\";\r\nimport { DeveloperExitFinanceDevelopmentInputService } from \"./services/DevExitFinance/DeveloperExitFinanceDevelopmentInputService\";\r\nimport { DeveloperExitFinanceDevScheduleInputService } from \"./services/DevExitFinance/DeveloperExitFinanceDevScheduleInputService\";\r\nimport { DeveloperExitFinanceLoanInputService } from \"./services/DevExitFinance/DeveloperExitFinanceLoanInputService\";\r\nimport { DeveloperExitFinanceResultService } from \"./services/DevExitFinance/DeveloperExitFinanceResultService\";\r\nimport { DevFinanceScheduleService } from \"./services/DevFinanceScheduleService\";\r\nimport { EventLogService } from \"./services/EventLogService\";\r\nimport { ExternalLinksService } from \"./services/ExternalLinksService\";\r\nimport { FeaturePriceService } from \"./services/FeaturePriceService\";\r\nimport { FeedBackService } from \"./services/FeedBackService\";\r\nimport { FileAttachmentService } from \"./services/FIleAttachmentService\";\r\nimport { IntroducerService } from \"./services/IntroducerService\";\r\nimport { IntroducerSimpleService } from \"./services/IntroducerSimpleService\";\r\nimport { InviteService } from \"./services/InviteService\";\r\nimport { LenderResultMinimalService } from \"./services/LenderResultMinimalService\";\r\nimport { LenderResultService } from \"./services/LenderResultService\";\r\nimport { LenderService } from \"./services/LenderService\";\r\nimport { LicenseService } from \"./services/LicenseService\";\r\nimport { ModalService } from \"./services/ModalService\";\r\nimport { OrganisationLinkService } from \"./services/OrganisationLinkService\";\r\nimport { OrganisationService } from \"./services/OrganisationService\";\r\nimport { PaymentService } from \"./services/PaymentService\";\r\nimport { ProductService } from \"./services/ProductService\";\r\nimport { ProductStubService } from \"./services/ProductStubService\";\r\nimport { QualificationsService } from \"./services/QualificationsService\";\r\nimport { RoleService } from \"./services/RoleService\";\r\nimport { SelectListService } from \"./services/SelectListService\";\r\nimport { SharedDataService } from \"./services/SharedDataService\";\r\nimport { StreetAddressService } from \"./services/StreetAddressService\";\r\nimport { TaskItemService } from \"./services/TaskItemService\";\r\nimport { TeamMemberService } from \"./services/TeamMemberService\";\r\nimport { UserService } from \"./services/UserService\";\r\nimport { Utils } from \"./Utils\";\r\nimport {EnterpriseService} from \"./services/EnterpriseService\"\r\nimport {UserDashboardService} from \"./services/UserDashboardService\"\r\nimport {SharedHeadsOfTermsService} from \"./services/Deal/SharedHeadsOfTermsService\"\r\n\r\nexport function registerServices() {\r\n angular\r\n .module(\"ccqapp\")\r\n .service(\"AccountService\", AccountService)\r\n .service(\"AccountSettingService\", AccountSettingService)\r\n .service(\"ApplicantService\", ApplicantService)\r\n .service(\"AssetLiabilityItemService\", AssetLiabilityItemService)\r\n .service(\"AuthService\", AuthService)\r\n .service(\"BridgingCaseService\", BridgingCaseService)\r\n .service(\"BridgingSearchService\", BridgingSearchService)\r\n .service(\"CaseLenderMessageService\", CaseLenderMessageService)\r\n .service(\"CaseLenderService\", CaseLenderService)\r\n .service(\"CaseMemberService\", CaseMemberService)\r\n .service(\"CaseNoteService\", CaseNoteService)\r\n .service(\"CaseService\", CaseService)\r\n .service(\"CaseSummaryService\", CaseSummaryService)\r\n .service(\"ClientService\", ClientService)\r\n .service(\"ComparablePropertyService\", ComparablePropertyService)\r\n .service(\"DealClientService\", DealClientService)\r\n .service(\"DealCompletionService\", DealCompletionService)\r\n .service(\"DealFileAttachmentService\", DealFileAttachmentService)\r\n .service(\"DevelopmentExperienceService\", DevelopmentExperienceService)\r\n .service(\"DevelopmentInputScheduleService\", DevelopmentInputScheduleService)\r\n .service(\"DevelopmentInputService\", DevelopmentInputService)\r\n .service(\r\n \"DevelopmentInputWithNoLoginService\",\r\n DevelopmentInputWithNoLoginService,\r\n )\r\n .service(\"DevelopmentTrackRecordService\", DevelopmentTrackRecordService)\r\n .service(\r\n \"DeveloperExitFinanceDevelopmentInputService\",\r\n DeveloperExitFinanceDevelopmentInputService,\r\n )\r\n .service(\r\n \"DeveloperExitFinanceDevScheduleInputService\",\r\n DeveloperExitFinanceDevScheduleInputService,\r\n )\r\n .service(\r\n \"DeveloperExitFinanceLoanInputService\",\r\n DeveloperExitFinanceLoanInputService,\r\n )\r\n .service(\r\n \"DeveloperExitFinanceResultService\",\r\n DeveloperExitFinanceResultService,\r\n )\r\n .service(\"DevFinanceScheduleService\", DevFinanceScheduleService)\r\n .service(\"EventLogService\", EventLogService)\r\n .service(\"ExternalLinksService\", ExternalLinksService)\r\n .service(\"FeaturePriceService\", FeaturePriceService)\r\n .service(\"FeedBackService\", FeedBackService)\r\n .service(\"FileAttachmentService\", FileAttachmentService)\r\n .service(\"IntroducerService\", IntroducerService)\r\n .service(\"IntroducerSimpleService\", IntroducerSimpleService)\r\n .service(\"InviteService\", InviteService)\r\n .service(\"LenderResultMinimalService\", LenderResultMinimalService)\r\n .service(\"LenderResultService\", LenderResultService)\r\n .service(\"LenderService\", LenderService)\r\n .service(\"LicenseService\", LicenseService)\r\n .service(\"ModalService\", ModalService)\r\n .service(\"OrganisationLinkService\", OrganisationLinkService)\r\n .service(\"OrganisationService\", OrganisationService)\r\n .service(\"PaymentService\", PaymentService)\r\n .service(\"ProductService\", ProductService)\r\n .service(\"ProductStubService\", ProductStubService)\r\n .service(\"QualificationsService\", QualificationsService)\r\n .service(\"RoleService\", RoleService)\r\n .service(\"SelectListService\", SelectListService)\r\n .service(\"SharedDataService\", SharedDataService)\r\n .service(\"StreetAddressService\", StreetAddressService)\r\n .service(\"TaskItemService\", TaskItemService)\r\n .service(\"TeamMemberService\", TeamMemberService)\r\n .service(\"UserService\", UserService)\r\n\r\n .service(\"BridgingDealService\", BridgingDealService)\r\n .service(\"CommercialDealService\", CommercialDealService)\r\n .service(\"CommercialSearchResultsService\", CommercialSearchResultsService)\r\n .service(\"DealLenderMessageService\", DealLenderMessageService)\r\n .service(\"DealLenderService\", DealLenderService)\r\n .service(\"DealNoteService\", DealNoteService)\r\n .service(\"DealScheduleService\", DealScheduleService)\r\n .service(\"DealService\", DealService)\r\n .service(\"DevFinanceDealService\", DevFinanceDealService)\r\n .service(\"DevFinanceSearchResultsService\", DevFinanceSearchResultsService)\r\n .service(\"SharedCriteriaService\", SharedCriteriaService)\r\n .service(\"SharedDealService\", SharedDealService)\r\n .service(\"SharedSearchResultsService\", SharedSearchResultsService)\r\n .service(\"Util\", Utils)\r\n .service(\"EnterpriseService\", EnterpriseService)\r\n .service(\"UserDashboardService\", UserDashboardService)\r\n .service(\"SharedHeadsOfTermsService\", SharedHeadsOfTermsService);\r\n ;\r\n}\r\n","export function registerRoutes() {\r\n angular\r\n .module(\"ccqapp\")\r\n .config([\r\n \"$routeProvider\",\r\n function ($routeProvider) {\r\n $routeProvider\r\n .when(\"/i/:introducercode\", {\r\n page: \"Criteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/i/:introducercode/:invitecode\", {\r\n page: \"Criteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/landing\", {\r\n page: \"Landing\",\r\n controller: \"LandingV3Controller\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/landing-default.html\",\r\n })\r\n .when(\"/agentlanding\", {\r\n page: \"Agent Landing\",\r\n controller: \"AgentLandingController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/agentlanding.html\",\r\n })\r\n //when('/landingV2', { page: \"Welcome\", controller: '', controllerAs: 'ctrl', templateUrl: 'views/landing-V2.html' }).\r\n .when(\"/landingV3\", {\r\n page: \"Welcome\",\r\n controller: \"LandingV3Controller\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/landing-default.html\",\r\n })\r\n .when(\"/initialregister\", {\r\n page: \"InitialRegistration\",\r\n controller: \"InitialRegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/initialregistration.html\",\r\n })\r\n .when(\"/initialregister/:isBroker\", {\r\n page: \"InitialRegistration\",\r\n controller: \"InitialRegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/initialregistration.html\",\r\n })\r\n .when(\"/initialregister/:isBroker/:widgeturl\", {\r\n page: \"InitialRegistration\",\r\n controller: \"InitialRegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/initialregistration.html\",\r\n })\r\n .when(\"/borrowerinitialregistration\", {\r\n page: \"InitialRegistration\",\r\n controller: \"InitialRegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/initialregistrationborrower.html\",\r\n })\r\n .when(\"/promo\", {\r\n page: \"Promo\",\r\n controller: \"PaymentController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/subscribe.html\",\r\n })\r\n .when(\"/promo/:isBroker\", {\r\n page: \"Promo\",\r\n controller: \"PaymentController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/promo.html\",\r\n })\r\n .when(\"/assignlicenses\", {\r\n page: \"AssignLicense\",\r\n controller: \"AssignLicensesController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/assignlicenses.html\",\r\n })\r\n .when(\"/leadgeneratorpromo/:licensecount\", {\r\n page: \"LeadGeneratorPromo\",\r\n controller: \"LeadGenPromoController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/leadgeneratorpromo.html\",\r\n })\r\n /* when('/subscribe', { page: \"Payment\", controller: 'PaymentController', controllerAs: 'ctrl', templateUrl: 'views/subscribe.html' }).*/\r\n .when(\"/welcome\", {\r\n page: \"Welcome\",\r\n controller: \"WelcomeController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/welcome.html\",\r\n })\r\n .when(\"/login\", {\r\n page: \"Login\",\r\n controller: \"LoginController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/login.html\",\r\n })\r\n .when(\"/login/:orgref\", {\r\n page: \"Login\",\r\n controller: \"LoginController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/login.html\",\r\n })\r\n .when(\"/loginandreturnto\", {\r\n page: \"Login\",\r\n controller: \"LoginController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/login.html\",\r\n })\r\n .when(\"/login/:tempUser/:tempPassword\", {\r\n page: \"Login\",\r\n controller: \"LoginController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/login.html\",\r\n })\r\n .when(\"/login/:userStatus/:tempUser/:tempPassword\", {\r\n page: \"Login\",\r\n controller: \"LoginController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/login.html\",\r\n }).when(\"/e/login/:productFamily/:dealUniqueRef\", {\r\n page: \"Login\",\r\n controller: \"LoginController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/login.html\",\r\n }).when(\"/e/login/:productFamily/:dealUniqueRef/:clientId/:emailAddress\", {\r\n page: \"Login\",\r\n controller: \"LoginController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/login.html\",\r\n })\r\n .when(\"/register\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\"/register/:enquire\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registration.html\",\r\n })\r\n .when(\"/registerwithsearch/:noLoginUniqueRef\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\r\n \"/registerwithsearch/:noLoginUniqueRef/:brokerOrgUniqueRef/:brokerUserId\",\r\n {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n },\r\n )\r\n //Added a new registerwithdeal route which can handle all type of deals but keeping this too, so that we can handle the old email links\r\n .when(\"/registerwithbridgingsearch/:dealclientuniqueref\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\r\n \"/registerwithbridgingsearch/:dealclientuniqueref/:brokerOrgUniqueRef/:brokerUserId\",\r\n {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n },\r\n )\r\n .when(\"/register/:brokerOrgUniqueRef\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registration.html\",\r\n }) // TODO don't think this is being used\r\n .when(\"/registershareholder/:uniqueId\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\"/registershareholder/:uniqueId/:brokerOrgUniqueRef\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\"/register/startprojectappraisal\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registration.html\",\r\n })\r\n .when(\"/register/applyfordevloan\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registration.html\",\r\n })\r\n .when(\"/register/invite/:invite\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registration.html\",\r\n })\r\n .when(\"/dashboard\", {\r\n page: \"Dashboard\",\r\n controller: \"DashboardController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dashboard.html\",\r\n })\r\n .when(\"/introducer/:status\", {\r\n page: \"Introducer\",\r\n controller: \"IntroducerController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/introducer.html\",\r\n })\r\n .when(\"/introducer\", {\r\n page: \"Introducer\",\r\n controller: \"IntroducerController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/introducer.html\",\r\n })\r\n .when(\"/registerbroker\", {\r\n page: \"Broker Registration\",\r\n controller: \"RegistrationBrokerController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registrationbroker.html\",\r\n })\r\n .when(\"/registerbroker/:orguniqueref\", {\r\n page: \"Broker Registration\",\r\n controller: \"RegistrationBrokerController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registrationbroker.html\",\r\n })\r\n .when(\"/registerbroker/:uniqueRef\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registration.html\",\r\n }) // TODO is this used? concerned about this route in combination with the one above\r\n .when(\"/registerborrower/:uniqueRef\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\"/registerintroducer\", {\r\n page: \"Introducer Registration\",\r\n controller: \"RegistrationIntroducerController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registrationintroducer.html\",\r\n })\r\n .when(\"/registerintroducer/:introducercode\", {\r\n page: \"Introducer Registration\",\r\n controller: \"RegistrationIntroducerController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/registrationintroducer.html\",\r\n })\r\n .when(\"/r/:introducercode\", {\r\n page: \"Introducee Registration\",\r\n controller: \"LandingV3Controller\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/landing-default.html\",\r\n })\r\n .when(\"/olddashboard\", {\r\n page: \"Client Dashboard\",\r\n controller: \"ClientDashboardController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/clientdashboard.html\",\r\n })\r\n .when(\"/lenders\", {\r\n page: \"Lenders\",\r\n controller: \"LenderController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenders.html\",\r\n })\r\n .when(\"/featureprices\", {\r\n page: \"Feature Prices\",\r\n controller: \"FeaturePriceController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/featureprice.html\",\r\n })\r\n .when(\"/criteria\", {\r\n page: \"Criteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/criteria/:SearchId\", {\r\n page: \"Criteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/criteria/:SearchId/:CaseId\", {\r\n page: \"Criteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/e/criteria/:SearchId/:CaseId/:StepNumber\", {\r\n page: \"Criteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/e/criteria/:SearchId/:CaseId/:StepNumber/:linkId\", {\r\n page: \"Criteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/criteria/:SearchId/:CaseId/:StepNumber\", {\r\n page: \"Criteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/referredsearchcriteria/:uniqueId/:CaseId/:StepNumber\", {\r\n page: \"ReferredSearchCriteria\",\r\n controller: \"DevelopmentInputScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteria.html\",\r\n })\r\n .when(\"/criteriaappraisal/:CaseId/:SearchId\", {\r\n page: \"CriteriaAppraisal\",\r\n controller: \"DevelopmentAppraisalScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteriaappraisal.html\",\r\n })\r\n .when(\"/criteriaappraisal/:CaseId/:SearchId/:StepNumber\", {\r\n page: \"CriteriaAppraisal\",\r\n controller: \"DevelopmentAppraisalScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/criteriaappraisal.html\",\r\n })\r\n .when(\"/querynologin\", {\r\n page: \"Querynologin\",\r\n controller: \"DevelopmentInputWithNoLoginController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/developmentinputWithNoLoginlist.html\",\r\n })\r\n .when(\"/query\", {\r\n page: \"Query\",\r\n controller: \"DevelopmentInputController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/developmentinputlist.html\",\r\n })\r\n .when(\"/results\", {\r\n page: \"Lender Results\",\r\n controller: \"LenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/results/:SearchId\", {\r\n page: \"Lender Results\",\r\n controller: \"LenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/results/:SearchId/:CaseId\", {\r\n page: \"Lender Results\",\r\n controller: \"LenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/shortlistmore/:SearchId/:CaseId\", {\r\n page: \"Lender Results\",\r\n controller: \"LenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/resultsExternalAPI/:uniqeId\", {\r\n page: \"Lender Results\",\r\n controller: \"LenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/referredSearch/:uniqueId\", {\r\n page: \"Lender Results\",\r\n controller: \"LenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/referredSearch/:uniqueId/:brokerOrgUniqueRef/:brokerUserId\", {\r\n page: \"Lender Results\",\r\n controller: \"LenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/referredSearch/:uniqueId/:showOnlyRegister\", {\r\n page: \"Lender Results\",\r\n controller: \"LenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/compare\", {\r\n page: \"Comparison\",\r\n controller: \"ComparisonController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/comparison.html\",\r\n })\r\n .when(\"/compare/:SearchId\", {\r\n page: \"Comparison\",\r\n controller: \"ComparisonController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/comparison.html\",\r\n })\r\n .when(\"/compare/:SearchId/:CaseId\", {\r\n page: \"Comparison\",\r\n controller: \"ComparisonController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/comparison.html\",\r\n })\r\n .when(\"/compare/:SearchId/:CaseId/:isDeal\", {\r\n page: \"Comparison\",\r\n controller: \"ComparisonController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/comparison.html\",\r\n })\r\n .when(\"/usermanagement\", {\r\n page: \"User Management\",\r\n controller: \"UserController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/users.html\",\r\n })\r\n .when(\"/rolemanagement\", {\r\n page: \"User Role Management\",\r\n controller: \"RoleController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/RoleMangement.html\",\r\n })\r\n .when(\"/accounts/\", {\r\n page: \"accounts\",\r\n controller: \"AccountsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/accounts.html\",\r\n })\r\n .when(\"/devexperience\", {\r\n page: \"Devexperience\",\r\n controller: \"DevelopmentExperienceController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devexperience.html\",\r\n })\r\n .when(\"/devexperience/:CaseId/:Id\", {\r\n page: \"Devexperience\",\r\n controller: \"DevelopmentExperienceController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devexperience.html\",\r\n })\r\n .when(\"/devexperience/:CaseId/:Id/:StepNumber\", {\r\n page: \"Devexperience\",\r\n controller: \"DevelopmentExperienceController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devexperience.html\",\r\n })\r\n .when(\"/devschedule\", {\r\n page: \"Devschedule\",\r\n controller: \"DevelopmentInputScheduleController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devschedule.html\",\r\n })\r\n .when(\"/devschedule/:CaseId/:DevelopmentId\", {\r\n page: \"Devschedule\",\r\n controller: \"DevelopmentInputScheduleController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devschedule.html\",\r\n })\r\n // when('/payment/:CaseId', { page: \"Payment\", controller: 'PaymentController', controllerAs: 'ctrl', templateUrl: 'views/paymentform.html' }).\r\n .when(\"/paysuccess\", {\r\n page: \"PaySuccess\",\r\n controller: \"PaySucessController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/paysuccess.html\",\r\n })\r\n .when(\"/payfailure\", {\r\n page: \"Payfailure\",\r\n controller: \"PayFailController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/payfailure.html\",\r\n })\r\n .when(\"/exitfinance\", {\r\n page: \"Exitfinance\",\r\n controller: \"DeveloperExitFinanceDevScheduleInputController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl:\r\n \"views/partials/DevExitFinance/developerexitfinancedevscheduleinputdetail.html\",\r\n })\r\n .when(\"/exitloanresults\", {\r\n page: \"ExitFinanceResults\",\r\n controller: \"DeveloperExitFinanceResultController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/exitloancompare\", {\r\n page: \"ExitFinanceCompare\",\r\n controller: \"DeveloperExitFinanceComparisonController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/DevExitFinance/comparison.html\",\r\n })\r\n .when(\"/refer\", {\r\n page: \"ReferAFriend\",\r\n controller: \"ReferFriendController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/referafriend.html\",\r\n })\r\n .when(\"/casedashboard/:CaseId\", {\r\n page: \"Casedashboard\",\r\n controller: \"CaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/casedashboard.html\",\r\n })\r\n .when(\"/casedashboard/:CaseId/:PaymentStatus\", {\r\n page: \"Casedashboard\",\r\n controller: \"CaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/casedashboard.html\",\r\n })\r\n .when(\"/caseoverview/:CaseId\", {\r\n page: \"Caseoverview\",\r\n controller: \"CaseOverviewController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/caseoverview.html\",\r\n })\r\n .when(\"/caseoverview/:CaseId/:Planning\", {\r\n page: \"Caseoverview\",\r\n controller: \"CaseOverviewController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/caseoverview.html\",\r\n })\r\n .when(\"/applicationdetails/:CaseId\", {\r\n page: \"ApplicationDetails\",\r\n controller: \"ApplicationDetailsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/applicationdetails.html\",\r\n })\r\n .when(\"/planning/:CaseId\", {\r\n page: \"Planning\",\r\n controller: \"CaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/planningmodule.html\",\r\n })\r\n .when(\"/teammember/:CaseId\", {\r\n page: \"TeamMember\",\r\n controller: \"CaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/professionalteam.html\",\r\n })\r\n .when(\"/comparableproperties/:CaseId\", {\r\n page: \"Comparableproperties\",\r\n controller: \"CaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/comparableproperties.html\",\r\n })\r\n .when(\"/settings\", {\r\n page: \"Account Settings\",\r\n controller: \"AccountSettingsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/accountsettings.html\",\r\n })\r\n .when(\"/settings/:userId/:selectedTab?\", {\r\n page: \"Account Settings\",\r\n controller: \"AccountSettingsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/accountsettings.html\",\r\n })\r\n .when(\"/profiles/:CaseId/:Id\", {\r\n page: \"Profiles\",\r\n controller: \"DevelopmentExperienceController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/profiles.html\",\r\n })\r\n .when(\"/lending/:CaseId\", {\r\n page: \"Lending\",\r\n controller: \"CaseLenderController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/lending.html\",\r\n })\r\n .when(\"/headsofterm/:CaseId/:CaseLenderId\", {\r\n page: \"Heads Of Terms\",\r\n controller: \"HeadsOfTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/headsofterms.html\",\r\n })\r\n .when(\"/headsofterm/:CaseId/:CaseLenderId/:openModule\", {\r\n page: \"Heads Of Terms\",\r\n controller: \"HeadsOfTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/headsofterms.html\",\r\n })\r\n .when(\"/applicantdetails/:CaseId/:Id/:shareholderId\", {\r\n page: \"ApplicantDetails\",\r\n controller: \"ApplicantDetailsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/applicantdetails.html\",\r\n })\r\n .when(\"/applicantdetails/:CaseId/:Id/:shareholderId/:StepNumber\", {\r\n page: \"ApplicantDetails\",\r\n controller: \"ApplicantDetailsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/applicantdetails.html\",\r\n })\r\n .when(\"/securitycheck/:uniqueId\", {\r\n page: \"SecurityCheck\",\r\n controller: \"SecurityCheckController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/securityCheck.html\",\r\n })\r\n .when(\"/securitycheck/:uniqueId/:orgUniqueRef\", {\r\n page: \"SecurityCheck\",\r\n controller: \"SecurityCheckController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/securityCheck.html\",\r\n })\r\n .when(\"/securitycheck\", {\r\n page: \"SecurityCheck\",\r\n controller: \"SecurityCheckController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/securityCheck.html\",\r\n })\r\n .when(\"/userdashboard\", {\r\n page: \"New Dashboard\",\r\n controller: \"UserDashboardController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/masterdashboard.html\",\r\n })\r\n .when(\"/userdashboard/:licensemasterId\", {\r\n page: \"New Dashboard\",\r\n controller: \"UserDashboardController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/masterdashboard.html\",\r\n })\r\n .when(\"/Organisations\", {\r\n page: \"Organisations\",\r\n controller: \"OrganisationsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/organisations.html\",\r\n })\r\n .when(\"/borrowertermsconditions\", {\r\n page: \"Borrower Terms and Conditions\",\r\n controller: \"BorrowerTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/borrowertermsandconditions.html\",\r\n })\r\n .when(\"/termsofbusiness\", {\r\n page: \"Terms of Business\",\r\n controller: \"TermsOfBusinessController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/termsofbusiness.html\",\r\n })\r\n .when(\"/privacypolicy\", {\r\n page: \"Privacy Policy\",\r\n controller: \"PrivacyController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/privacypolicy.html\",\r\n })\r\n .when(\"/profile\", {\r\n page: \"Profile\",\r\n controller: \"ProfileController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/profile.html\",\r\n })\r\n /* .when(\"/unsubscribe\", {\r\n page: \"Profile\",\r\n controller: \"ProfileController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/profile.html\",\r\n })*/\r\n .when(\"/subscribe\", {\r\n page: \"Payment\",\r\n controller: \"PaymentController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/subscribe.html\",\r\n })\r\n .when(\"/license/:licensemasterid\", {\r\n page: \"License\",\r\n controller: \"UserLicenseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/userlicense.html\",\r\n })\r\n .when(\"/managelicense\", {\r\n page: \"ManageLicense\",\r\n controller: \"ManageLicenseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/managelicense.html\",\r\n })\r\n //when('/userdashboard2', { page: \"User Dashboard\", controller: 'NewDashboardController', controllerAs: 'ctrl', templateUrl: 'views/newdashboard.html' }).\r\n .when(\"/addons\", {\r\n page: \"Addons\",\r\n controller: \"PaymentController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/addons.html\",\r\n })\r\n .when(\"/bridgingdashboard\", {\r\n page: \"Bridging Dashboard\",\r\n controller: \"BridgingDashboardController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/bridgingdashboard.html\",\r\n })\r\n // Enterprise version of the bridging criteria page (borrower only)\r\n .when(\"/e/bridgingcriteria\", {\r\n page: \"Bridging Criteria\",\r\n controller: \"BridgingCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/bridgingcriteria.html\",\r\n })\r\n .when(\"/e/bridgingcriteria/:DealUniqueRef\", {\r\n page: \"Bridging Criteria\",\r\n controller: \"BridgingCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/bridgingcriteria.html\",\r\n })\r\n .when(\"/e/bridgingcriteria/:DealUniqueRef/:linkId\", {\r\n page: \"Bridging Criteria\",\r\n controller: \"BridgingCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/bridgingcriteria.html\",\r\n })\r\n .when(\"/bridgingcriteria\", {\r\n page: \"Bridging Criteria\",\r\n controller: \"BridgingCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/bridgingcriteria.html\",\r\n })\r\n .when(\"/bridgingcriteria/:SearchId\", {\r\n page: \"Bridging Criteria\",\r\n controller: \"BridgingCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/bridgingcriteria.html\",\r\n })\r\n .when(\"/bridgingcriteria/:SearchId/:CaseId\", {\r\n page: \"Bridging Criteria\",\r\n controller: \"BridgingCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/bridgingcriteria.html\",\r\n })\r\n //when('/purchaserefinancecriteria', { page: \"Bridging Purchase Or Refinance Criteria\", controller: 'BridgingCriteriaController', controllerAs: 'ctrl', templateUrl: 'views/bridgingcriteria.html' }).\r\n //when('/purchaserefinancecriteria/:SearchId', { page: \"Bridging Purchase Or Refinance Criteria\", controller: 'BridgingCriteriaController', controllerAs: 'ctrl', templateUrl: 'views/bridgingcriteria.html' }).\r\n //when('/purchaserefinancecriteria/:SearchId/:CaseId', { page: \"Bridging Purchase Or Refinance Criteria\", controller: 'BridgingCriteriaController', controllerAs: 'ctrl', templateUrl: 'views/bridgingcriteria.html' }).\r\n //when('/purchaserefinancecriteria/:SearchId/:CaseId/:StepNumber', { page: \"Bridging Purchase Or Refinance Criteria\", controller: 'BridgingCriteriaController', controllerAs: 'ctrl', templateUrl: 'views/bridgingcriteria.html' }).\r\n .when(\"/bridgingcriteriadepreciated\", {\r\n page: \"Bridging Criteria\",\r\n controller: \"BridgingCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/bridgingcriteriadepreciated.html\",\r\n })\r\n .when(\"/bridgingcasedashboard/:DealId\", {\r\n page: \"Bridging Case Dashboard\",\r\n controller: \"BridgingCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/bridgingcasedashboard/:DealId/:Promote\", {\r\n page: \"Bridging Case Dashboard\",\r\n controller: \"BridgingCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/bridgingcasedashboard/:DealId/:Promote/:NewShortlist/:SearchChanged\", {\r\n page: \"Bridging Case Dashboard\",\r\n controller: \"BridgingCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/sharedbridgingcasedashboard/:DealId/:selectedNavMenu\", {\r\n page: \"Bridging Case Dashboard\",\r\n controller: \"BridgingCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/bridgingresults\", {\r\n page: \"Bridging Results\",\r\n controller: \"BridgingLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/bridgingresults/:SearchId\", {\r\n page: \"Lender Results\",\r\n controller: \"BridgingLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/e/bridgingresults/:SearchId\", {\r\n page: \"Lender Results\",\r\n controller: \"BridgingLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/bridgingshortlistmore/:SearchId\", {\r\n page: \"Lender Results\",\r\n controller: \"BridgingLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/referredsearchdeal/:dealclientuniqueref\", {\r\n page: \"Lender Results\",\r\n controller: \"BridgingLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n //Added a new dealforum route which can handle all type of deals but keeping this too, so that we can handle the old email links\r\n .when(\"/bridgingdealforum/:DealId\", {\r\n page: \"BridgingLending\",\r\n controller: \"DealLenderController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/lending.html\",\r\n })\r\n .when(\"/bridgingheadsofterm/:DealId/:DealLenderId\", {\r\n page: \"Heads Of Terms\",\r\n controller: \"BridgingHeadsOfTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/headsofterms.html\",\r\n })\r\n .when(\"/bridgingheadsofterm/:DealId/:DealLenderId/:openModule\", {\r\n page: \"Heads Of Terms\",\r\n controller: \"BridgingHeadsOfTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/headsofterms.html\",\r\n })\r\n .when(\"/dealapplicationdetails/:DealId\", {\r\n page: \"ApplicationDetails\",\r\n controller: \"ApplicationDetailsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/applicationdetails.html\",\r\n })\r\n .when(\"/referredsearchdeal/:dealclientuniqueref/:showOnlyRegister\", {\r\n page: \"Lender Results\",\r\n controller: \"BridgingLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/referredsearchcommercial/:dealclientuniqueref\", {\r\n page: \"Lender Results\",\r\n controller: \"CommercialLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\r\n \"/referredsearchcommercial/:dealclientuniqueref/:showOnlyRegister\",\r\n {\r\n page: \"Lender Results\",\r\n controller: \"CommercialLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n },\r\n )\r\n //when('/bridgingsecuritycheck/:uniqueId', { page: \"SecurityCheck\", controller: 'SecurityCheckController', controllerAs: 'ctrl', templateUrl: 'views/securityCheck.html' }).\r\n .when(\"/bridgingsecuritycheck/:uniqueId/:orgUniqueRef\", {\r\n page: \"SecurityCheck\",\r\n controller: \"SecurityCheckController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/securityCheck.html\",\r\n })\r\n //Added a new dealregistershareholder route which can handle all type of deals but keeping this too, so that we can handle the old email links\r\n .when(\"/bridgingregistershareholder/:uniqueId\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\"/bridgingregistershareholder/:uniqueId/:brokerOrgUniqueRef\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\"/borrowerinitialregistration/:Type\", {\r\n page: \"InitialRegistration\",\r\n controller: \"InitialRegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/initialregistrationborrower.html\",\r\n })\r\n .when(\"/allloans\", {\r\n page: \"All Loans Landing Page\",\r\n controller: \"AllLoansLandingController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/allloanslandingpage.html\",\r\n })\r\n //when('/borrowerinitialregistration/:Type/:linkId', { page: \"InitialRegistration\", controller: 'InitialRegistrationController', controllerAs: 'ctrl', templateUrl: 'views/initialregistrationborrower.html' }).\r\n .when(\"/allloans/:linkId\", {\r\n page: \"All Loans Landing Page\",\r\n controller: \"AllLoansLandingController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/allloanslandingpage.html\",\r\n })\r\n .when(\"/allloans/:linkId/:context\", {\r\n page: \"All Loans Landing Page\",\r\n controller: \"AllLoansLandingController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/allloanslandingpage.html\",\r\n })\r\n .when(\"/allloans/:linkId/:context/:linkType\", {\r\n page: \"All Loans Landing Page\",\r\n controller: \"AllLoansLandingController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/allloanslandingpage.html\",\r\n })\r\n .when(\"/newsearchselection\", {\r\n page: \"New Search Selection\",\r\n controller: \"NewSearchSelectionsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/UserDashboard/newsearchselection.html\",\r\n })\r\n .when(\"/newsearchselection/:Type\", {\r\n page: \"New Search Selection\",\r\n controller: \"NewSearchSelectionsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/UserDashboard/newsearchselection.html\",\r\n })\r\n //when('/previewallloans', { page: \"All Loans Landing Page\", controller: 'AllLoansLandingController', controllerAs: 'ctrl', templateUrl: 'views/allloanslandingpage.html' }).\r\n .when(\"/dealfeedback/:DealLenderId/:FeedBackId\", {\r\n page: \"FeedBack Page\",\r\n controller: \"FeedBackController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/feedback.html\",\r\n })\r\n .when(\"/casefeedback/:DealLenderId/:FeedBackId\", {\r\n page: \"FeedBack Page\",\r\n controller: \"FeedBackController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/feedback.html\",\r\n })\r\n //For testing without going through forms\r\n .when(\"/testlenderintro\", {\r\n page: \"Test Lender Intro\",\r\n controller: \"\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/criteria/intro.html\",\r\n })\r\n //for testing maintenance page\r\n .when(\"/scheduledmaintenance\", {\r\n page: \"Scheduled Maintenance Page\",\r\n controller: \"\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/scheduledmaintenance.html\",\r\n })\r\n //COMMERCIAL\r\n .when(\"/commercialcriteria\", {\r\n page: \"Commercial Criteria\",\r\n controller: \"CommercialCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/commercialcriteria.html\",\r\n })\r\n .when(\"/commercialcriteria/:SearchId\", {\r\n page: \"Commercial Criteria\",\r\n controller: \"CommercialCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/commercialcriteria.html\",\r\n })\r\n // Enterprise version of the commercial criteria page (borrower only)\r\n .when(\"/e/commercialcriteria\", {\r\n page: \"Commercial Criteria\",\r\n controller: \"CommercialCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/commercialcriteria.html\",\r\n }).when(\"/e/commercialcriteria/:DealUniqueRef\", {\r\n page: \"Commercial Criteria\",\r\n controller: \"CommercialCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/commercialcriteria.html\",\r\n })\r\n .when(\"/e/commercialcriteria/:DealUniqueRef/:linkId\", {\r\n page: \"Commercial Criteria\",\r\n controller: \"CommercialCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/commercialcriteria.html\",\r\n })\r\n .when(\"/commercialresults\", {\r\n page: \"Commercial Results\",\r\n controller: \"CommercialLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/commercialresults/:DealId\", {\r\n page: \"Commercial Results\",\r\n controller: \"CommercialLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/e/commercialresults/:DealId\", {\r\n page: \"Enterprise Commercial Results\",\r\n controller: \"CommercialLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/commercialshortlistmore/:DealId\", {\r\n page: \"Commercial Results\",\r\n controller: \"CommercialLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/commercialcasedashboard/:DealId\", {\r\n page: \"Commercial Case Dashboard\",\r\n controller: \"CommercialCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/commercialcasedashboard/:DealId/:Promote\", {\r\n page: \"Commercial Case Dashboard\",\r\n controller: \"CommercialCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/commercialcasedashboard/:DealId/:Promote/:NewShortlist/:SearchChanged\", {\r\n page: \"Commercial Case Dashboard\",\r\n controller: \"CommercialCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/dealforum/:DealId\", {\r\n page: \"Deal forum\",\r\n controller: \"DealLenderController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/lending.html\",\r\n })\r\n .when(\"/commercialheadsofterm/:DealId/:DealLenderId\", {\r\n page: \"DIP Page\",\r\n controller: \"CommercialHeadsOfTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/headsofterms.html\",\r\n })\r\n .when(\"/commercialheadsofterm/:DealId/:DealLenderId/:openModule\", {\r\n page: \"DIP Page\",\r\n controller: \"CommercialHeadsOfTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/headsofterms.html\",\r\n })\r\n .when(\"/dealregistershareholder/:uniqueId\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\"/dealregistershareholder/:uniqueId/:brokerOrgUniqueRef\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\"/dealsecuritycheck/:uniqueId\", {\r\n page: \"DealSecurityCheckController\",\r\n controller: \"DealSecurityCheckController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/securityCheck.html\",\r\n })\r\n .when(\"/dealsecuritycheck/:uniqueId/:orgUniqueRef\", {\r\n page: \"DealSecurityCheckController\",\r\n controller: \"DealSecurityCheckController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/securityCheck.html\",\r\n })\r\n .when(\"/sharedcommercialcasedashboard/:DealId/:selectedNavMenu\", {\r\n page: \"Commercial Case Dashboard\",\r\n controller: \"CommercialCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n //DEV FINANCE DEAL\r\n .when(\"/devfinancecriteria\", {\r\n page: \"Development Finance Criteria\",\r\n controller: \"DevFinanceCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devfinancecriteria.html\",\r\n })\r\n .when(\"/devfinancecriteria/:SearchId\", {\r\n page: \"Development Finance Criteria\",\r\n controller: \"DevFinanceCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devfinancecriteria.html\",\r\n })\r\n // Enterprise version of the commercial criteria page (borrower only)\r\n .when(\"/e/devfinancecriteria\", {\r\n page: \"Development Finance Criteria\",\r\n controller: \"DevFinanceCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devfinancecriteria.html\",\r\n })\r\n .when(\"/e/devfinancecriteria/:DealUniqueRef\", {\r\n page: \"Development Finance Criteria\",\r\n controller: \"DevFinanceCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devfinancecriteria.html\",\r\n })\r\n .when(\"/e/devfinancecriteria/:DealUniqueRef/:linkId\", {\r\n page: \"Development Finance Criteria\",\r\n controller: \"DevFinanceCriteriaController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/devfinancecriteria.html\",\r\n })\r\n .when(\"/devfinanceresults\", {\r\n page: \"Development Finance Results\",\r\n controller: \"DevFinanceLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/devfinanceresults/:DealId\", {\r\n page: \"Development Finance Results\",\r\n controller: \"DevFinanceLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/e/devfinanceresults/:DealId\", {\r\n page: \"Enterprise Development Finance Results\",\r\n controller: \"DevFinanceLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/devfinanceshortlistmore/:DealId\", {\r\n page: \"Development Finance Results\",\r\n controller: \"DevFinanceLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\"/devfinancecompare/:DealId\", {\r\n page: \"Development Finance Comparison\",\r\n controller: \"ComparisonController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/comparison.html\",\r\n })\r\n .when(\"/devfinancecasedashboard/:DealId\", {\r\n page: \"Development Finance Case Dashboard\",\r\n controller: \"DevFinanceCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/devfinancecasedashboard/:DealId/:Promote\", {\r\n page: \"Development Finance Case Dashboard\",\r\n controller: \"DevFinanceCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/devfinancecasedashboard/:DealId/:Promote/:NewShortlist/:SearchChanged\", {\r\n page: \"Development Finance Case Dashboard\",\r\n controller: \"DevFinanceCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/shareddevfinancecasedashboard/:DealId/:selectedNavMenu\", {\r\n page: \"Development Finance Case Dashboard\",\r\n controller: \"DevFinanceCaseController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/dealdashboard.html\",\r\n })\r\n .when(\"/devfinanceheadsofterm/:DealId/:DealLenderId\", {\r\n page: \"DIP Page\",\r\n controller: \"DevFinanceHeadsOfTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/headsofterms.html\",\r\n })\r\n .when(\"/devfinanceheadsofterm/:DealId/:DealLenderId/:openModule\", {\r\n page: \"DIP Page\",\r\n controller: \"DevFinanceHeadsOfTermsController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/partials/headsofterms.html\",\r\n })\r\n .when(\"/referredsearchdevfinance/:dealclientuniqueref\", {\r\n page: \"Lender Results\",\r\n controller: \"DevFinanceLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n })\r\n .when(\r\n \"/referredsearchdevfinance/:dealclientuniqueref/:showOnlyRegister\",\r\n {\r\n page: \"Lender Results\",\r\n controller: \"DevFinanceLenderResultScreenController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/lenderresultsnew.html\",\r\n },\r\n )\r\n .when(\"/registerwithdeal/:dealclientuniqueref\", {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n })\r\n .when(\r\n \"/registerwithdeal/:dealclientuniqueref/:brokerOrgUniqueRef/:brokerUserId\",\r\n {\r\n page: \"Registration\",\r\n controller: \"RegistrationController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/newregistration.html\",\r\n },\r\n )\r\n .when(\"/e/enterpriseleadcapture/:uniqueRef\", {\r\n page: \"Enterprise lead capture page\",\r\n controller: \"EnterpriseLeadCaptureController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/enterpriseleadcapture.html\",\r\n })\r\n .when(\"/e/enterpriseleadcapture/:uniqueRef/:context\", {\r\n page: \"Enterprise lead capture page\",\r\n controller: \"EnterpriseLeadCaptureController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/enterpriseleadcapture.html\"\r\n })\r\n .when(\"/reacttest\", {\r\n page: \"React Test\",\r\n templateUrl: \"views/reacttest.html\",\r\n })\r\n .when('/managepreferences', { \r\n page: \"Profile\", \r\n controller: 'ProfileController', \r\n controllerAs: 'ctrl', \r\n templateUrl: 'views/profile.html' \r\n })\r\n .when('/unsubscribe/:emailCode/:userId', { \r\n page: \"UnsubscribeEmail\", \r\n controller: 'UnsubscribeEmailController', \r\n controllerAs: 'ctrl', \r\n templateUrl: 'views/unsubscribeemail.html' \r\n })\r\n //End testing section\r\n .otherwise({ redirectTo: \"/\" });\r\n\r\n if (\r\n window &&\r\n window.location &&\r\n window.location.pathname &&\r\n window.location.pathname.startsWith(\"/otmx\")\r\n ) {\r\n $routeProvider.when(\"/\", {\r\n page: \"Landing\",\r\n controller: \"LandingController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/landing.html\",\r\n });\r\n } else if (\r\n window &&\r\n window.location &&\r\n window.location.pathname &&\r\n window.location.pathname.startsWith(\"/lnhn\")\r\n ) {\r\n $routeProvider.when(\"/\", {\r\n page: \"Landing\",\r\n controller: \"LandingController\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/landinglnhn.html\",\r\n });\r\n } else {\r\n $routeProvider.when(\"/\", {\r\n page: \"Welcome\",\r\n controller: \"LandingV3Controller\",\r\n controllerAs: \"ctrl\",\r\n templateUrl: \"views/landing-default.html\",\r\n });\r\n }\r\n },\r\n ])\r\n .run(\r\n function (\r\n $rootScope,\r\n $injector,\r\n $cookies,\r\n $location,\r\n $http,\r\n $anchorScroll,\r\n $routeParams,\r\n toaster,\r\n ) {\r\n var history = [];\r\n\r\n $rootScope.$on(\"$routeChangeStart\", function () {\r\n //let orgCode = $cookies.get(\"org_code\");\r\n //console.log(\"Cooookiieeee: \" + orgCode);\r\n gtag(\"set\", \"page_path\", $location.$$path);\r\n gtag(\"set\", \"page_title\", \"Brickflow - \" + $location.$$path);\r\n\r\n // Set OTMX introducer code unless we already have an explicit introducer code\r\n if ($location.$$normalizeUrl().endsWith(\"otmx\")) {\r\n if (!$location.$$search || !$location.$$search.introducercode) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n $cookies.put(\r\n \"introducer_code\",\r\n \"ce314d09-0317-403b-9096-9bdf359fbfbb\",\r\n { expires: expiryDate },\r\n );\r\n }\r\n }\r\n // Set LNHN introducer code unless we already have an explicit introducer code\r\n else if ($location.$$normalizeUrl().endsWith(\"lnhn\")) {\r\n if (!$location.$$search || !$location.$$search.introducercode) {\r\n var expiryDate = new Date();\r\n expiryDate.setDate(expiryDate.getDate() + 100);\r\n $cookies.put(\r\n \"introducer_code\",\r\n \"5d14625b-fdbf-4a16-a874-9cc11bdcaff6\",\r\n { expires: expiryDate },\r\n );\r\n }\r\n }\r\n });\r\n\r\n $rootScope.$on(\"$routeChangeSuccess\", function () {\r\n // Send pageview to Google, only if we're on production.\r\n if ($location.$$host === \"app.brickflow.com\") {\r\n gtag(\"event\", \"routeChange\", { page_path: $location.$$path });\r\n\r\n gtag(\"event\", \"page_view\", {\r\n page_title: \"Brickflow - \" + $location.$$path,\r\n page_location: $location.$$absUrl,\r\n page_path: $location.$$path,\r\n });\r\n\r\n if ($location.$$path === \"/results\") {\r\n // Google tagging for conversion tracking.\r\n // n.b. Do we want to call this every time, or only once per user?\r\n gtag(\"event\", \"conversion\", {});\r\n }\r\n }\r\n\r\n if ($location.$$path === \"/\" && $cookies.get(\"access_token\")) {\r\n $location.path(\"/userdashboard\");\r\n }\r\n\r\n if (\r\n $cookies.get(\"access_token\") &&\r\n ($location.$$path.startsWith(\"/initialregister\") ||\r\n $location.$$path.startsWith(\"/promo\") ||\r\n $location.$$path.startsWith(\"/addons\") ||\r\n $location.$$path == \"/registerbroker\" ||\r\n $location.$$path == \"/register\" ||\r\n $location.$$path.startsWith(\"/e/bridgingcriteria\") ||\r\n $location.$$path.startsWith(\"/e/commercialcriteria\") ||\r\n $location.$$path.startsWith(\"/e/criteria\") ||\r\n $location.$$path.startsWith(\"/e/bridgingresults\") ||\r\n $location.$$path.startsWith(\"/e/commercialresults\") ||\r\n $location.$$path.startsWith(\"/e/enterpriseleadcapture\")\r\n )\r\n ) {\r\n $location.path(\"/userdashboard\");\r\n }\r\n\r\n if (\r\n $location.$$path !== undefined &&\r\n $location.$$path !== \"/login\" &&\r\n $location.$$path !== \"/registerbroker\" &&\r\n $location.$$path !== \"/landing\" &&\r\n $location.$$path !== \"/welcome\" &&\r\n $location.$$path !== \"/agentlanding\" &&\r\n !$location.$$path.startsWith(\"/login\") &&\r\n !$location.$$path.startsWith(\"/e/login\") &&\r\n $location.$$path !== \"/register\" &&\r\n !$location.$$path.startsWith(\"/registerintroducer\") &&\r\n !$location.$$path.startsWith(\"/registerbroker\") &&\r\n !$location.$$path.startsWith(\"/registerborrower\") &&\r\n !$location.$$path.startsWith(\"/registershareholder\") &&\r\n !$location.$$path.startsWith(\"/bridgingregistershareholder\") &&\r\n !$location.$$path.startsWith(\"/dealregistershareholder\") &&\r\n $location.$$path !== \"/introducer/new\" &&\r\n !$location.$$path.startsWith(\"/r/\") &&\r\n $location.$$path !== \"/register/enquire\" &&\r\n $location.$$path !== \"/register/startprojectappraisal\" &&\r\n $location.$$path !== \"/register/applyfordevloan\" &&\r\n !$location.$$path.startsWith(\"/register/invite\") &&\r\n $location.$$path !== \"/olddashboard\" &&\r\n $location.$$path !== \"/criteria\" &&\r\n !$location.$$path.startsWith(\"/e/criteria\") &&\r\n $location.$$path !== \"/i\" &&\r\n $location.$$path !== \"/criteria/0/0/1\" &&\r\n $location.$$path !== \"/criteria/0/0/2\" &&\r\n $location.$$path !== \"/criteria/0/0/3\" &&\r\n $location.$$path !== \"/bridgingcriteria\" &&\r\n !$location.$$path.startsWith(\"/e/bridgingcriteria\") &&\r\n !$location.$$path.startsWith(\"/e/commercialcriteria\") &&\r\n $location.$$path !== \"/results\" &&\r\n !$location.$$path.startsWith(\"/compare\") &&\r\n !$location.$$path.startsWith(\"/devfinancecompare\") &&\r\n $location.$$path !== \"/compare\" &&\r\n $location.$$path !== \"/exitfinance\" &&\r\n $location.$$path !== \"/exitloanresults\" &&\r\n $location.$$path !== \"/exitloancompare\" &&\r\n //testing pages without filling in form\r\n $location.$$path !== \"/testlenderintro\" &&\r\n //end testing section\r\n $location.$$path !== \"/refer\" &&\r\n !$location.$$path.startsWith(\"/resultsExternalAPI\") &&\r\n !$location.$$path.startsWith(\"/referredSearch\") &&\r\n !$location.$$path.startsWith(\"/referredsearchdeal\") &&\r\n !$location.$$path.startsWith(\"/referredsearchcommercial\") &&\r\n !$location.$$path.startsWith(\"/referredsearchdevfinance\") &&\r\n $location.$$path !== \"/\" &&\r\n $location.$$path !== \"/paysuccess\" &&\r\n $location.$$path !== \"/landingV3\" &&\r\n $location.$$path !== \"/termsofbusiness\" &&\r\n $location.$$path !== \"/privacypolicy\" &&\r\n !$location.$$path.startsWith(\"/initialregister\") &&\r\n !$location.$$path.startsWith(\"/borrowerinitialregistration\") &&\r\n //!$location.$$path.startsWith(\"/borrowerinitialregistration/all\") &&\r\n !$location.$$path.startsWith(\r\n \"/borrowerinitialregistration/bridging\",\r\n ) &&\r\n !$location.$$path.startsWith(\"/promo\") &&\r\n !$location.$$path.startsWith(\"/addons\") &&\r\n !$location.$$path.startsWith(\"/registerwithsearch\") &&\r\n !$location.$$path.startsWith(\"/registerwithbridgingsearch\") &&\r\n !$location.$$path.startsWith(\"/registerwithdeal\") &&\r\n $location.$$path !== \"/bridgingresults\" &&\r\n !$location.$$path.startsWith(\"/newsearchselection\") &&\r\n //!$location.$$path.startsWith(\"/previewallloans\") &&\r\n !$location.$$path.startsWith(\"/e/bridgingresults\") &&\r\n !$location.$$path.startsWith(\"/allloans\") &&\r\n !$location.$$path.startsWith(\"/e/commercialresults\") &&\r\n !$location.$$path.startsWith(\"/e/devfinancecriteria\") &&\r\n !$location.$$path.startsWith(\"/e/devfinanceresults\") &&\r\n !$location.$$path.startsWith(\"/devfinancecriteria\") &&\r\n !$location.$$path.startsWith(\"/devfinanceresults\") &&\r\n !$location.$$path.startsWith(\"/e/enterpriseleadcapture\") &&\r\n !$location.$$path.startsWith(\"/unsubscribe\")\r\n ) {\r\n if ($cookies.get(\"access_token\") && $http) {\r\n $http.defaults.headers.common.Authorization =\r\n \"Bearer \" + $cookies.get(\"access_token\");\r\n }\r\n\r\n if (\r\n $cookies.get(\"access_token\") === null ||\r\n $cookies.get(\"access_token\") === undefined\r\n ) {\r\n //toaster.pop('info', \"Login Required\", \"Please login to use the system.\");\r\n $rootScope.loginRedirectPath = $location.$$path;\r\n $location.path(\"/login\");\r\n }\r\n }\r\n if (history[history.length - 1] !== $location.$$path) {\r\n $rootScope.previousRoute =\r\n history.length > 1 ? history.splice(-1)[0] : \"/\";\r\n history.push($location.$$path);\r\n }\r\n });\r\n\r\n $rootScope.$on(\r\n \"$routeChangeSuccess\",\r\n function (event, currentRoute, previousRoute) {\r\n $location.hash($routeParams.scrollTo);\r\n $anchorScroll();\r\n window.scrollTo(0, 0);\r\n },\r\n );\r\n\r\n var goingBack = false;\r\n $rootScope.back = function () {\r\n if (!goingBack) {\r\n goingBack = true;\r\n var prevUrl = history.length > 1 ? history.splice(-2)[0] : \"/\";\r\n $location.path(prevUrl);\r\n goingBack = false;\r\n }\r\n };\r\n\r\n // listen for route changes.\r\n //$rootScope.$on(\"$routeChangeStart\", function (event, next, current) {\r\n // if ($location.$$path !== undefined && next.templateUrl !== \"/\" && $location.$$path !== \"/login\") {\r\n // if ($cookies.get('access_token') && $http) {\r\n // $http.defaults.headers.common.Authorization = 'Bearer ' + $cookies.get('access_token');\r\n // }\r\n // if (($cookies.get('access_token') === null || $cookies.get('access_token') === undefined)) {\r\n // toaster.pop('info', \"Login Required\", \"Please login to use the system.\");\r\n // $location.path(\"/login\");\r\n // }\r\n // }\r\n //});\r\n\r\n // if (next.templateUrl !== undefined) {\r\n // // If the user is not logged in, or the token has expired, let's go back to login.\r\n // if ($cookies.loggedUser === null || $cookies.loggedUser === undefined || $cookies.token === null) {\r\n // if (next.templateUrl !== \"views/login.html\" && next.templateUrl !== \"unsubscribe.html\") {\r\n // // redirect\r\n // toaster.pop('info', \"Login Required\", \"Please login to use the system.\");\r\n // $location.path(\"/login\");\r\n // }\r\n // }\r\n // else if (new Date() > Date($cookies.tokenValidTo)) {\r\n // if (next.templateUrl !== \"views/login.html\") {\r\n // toaster.pop('warning', \"Session Timed out\", \"Please login to use the system.\");\r\n // $location.path(\"/login\");\r\n // }\r\n // }\r\n // }\r\n // // See if we're going to login when we don't need to.\r\n // else {\r\n // if (next.templateUrl === \"views/login.html\") {\r\n // $location.path(\"/dashboard\");\r\n // }\r\n // }\r\n //});\r\n },\r\n );\r\n}\r\n","import angular from \"angular\";\r\nimport \"angular-animate\";\r\nimport \"angular-cookies\";\r\nimport \"angular-resource\";\r\nimport \"angular-route\";\r\nimport \"angular-sanitize\";\r\nimport \"tinymce\";\r\nimport \"angular-ui-tinymce\";\r\nimport \"angular-utils-pagination\";\r\nimport \"angularjs-toaster\";\r\nimport \"isteven-angular-multiselect/isteven-multi-select.js\";\r\nimport \"ng-file-upload\";\r\nimport { authInterceptor } from \"./filesfromccqbase/AuthInterceptor\";\r\nimport { BroadcastService } from \"./filesfromccqbase/BroadcastService\";\r\nimport {\r\n instantiateCcqDirectives,\r\n IpdfdownlaodScope,\r\n} from \"./filesfromccqbase/CcqDirectives\";\r\nimport \"./libs/date\";\r\nimport { registerCCQBaseComponents } from \"./registerCCQBaseComponents\";\r\nimport { registerComponents } from \"./registerComponents\";\r\nimport { registerControllers } from \"./registerControllers\";\r\nimport { registerReactComponents } from \"./registerReactComponents\";\r\nimport { registerServices } from \"./registerServices\";\r\nimport { registerRoutes } from \"./routes\";\r\n\r\nimport \"angularjs-toaster/toaster.min.css\";\r\nimport \"isteven-angular-multiselect/isteven-multi-select.css\";\r\nimport \"../css/styles.scss\";\r\n\r\n// The ccqapp module depends on the Ccq.directives module\r\n// so we must instantiate it first\r\ninstantiateCcqDirectives();\r\n\r\nconst ccqapp = angular.module(\"ccqapp\", [\r\n \"Ccq.directives\",\r\n \"ngResource\",\r\n \"ngSanitize\",\r\n \"ngRoute\",\r\n \"ngCookies\",\r\n \"ngAnimate\",\r\n \"ngFileUpload\",\r\n \"toaster\",\r\n \"angularUtils.directives.dirPagination\",\r\n \"ui.tinymce\",\r\n \"isteven-multi-select\",\r\n]);\r\n\r\nregisterRoutes();\r\nregisterCCQBaseComponents();\r\nregisterServices();\r\nregisterControllers();\r\nregisterComponents();\r\nregisterReactComponents();\r\n\r\nangular\r\n .module(\"ccqapp\")\r\n .config(\r\n (\r\n $httpProvider: ng.IHttpProvider,\r\n $cookiesProvider: ng.cookies.ICookiesProvider,\r\n ) => {\r\n $cookiesProvider.defaults = {\r\n secure: true,\r\n samesite: \"none\",\r\n };\r\n // Add our authInterceptor to the http provider array of interceptors\r\n $httpProvider.interceptors.push(\"authInterceptor\");\r\n },\r\n );\r\n\r\n//Create our auth interceptor as an angular factory\r\nccqapp.factory(\"authInterceptor\", authInterceptor);\r\nccqapp.service(\"BroadcastService\", BroadcastService);\r\n\r\n//app.config(['bugsnagProvider', function (bugsnagProvider) {\r\n// bugsnagProvider\r\n// .noConflict()\r\n// .apiKey('a080f8c3ebc0accbdbb5b5d7ea742f71')\r\n// .releaseStage('release')\r\n// .appVersion('0.1.0')\r\n// .beforeNotify(['$log', function ($log) {\r\n// return function (error, metaData) {\r\n// $log.debug(error.name);\r\n// return true;\r\n// };\r\n// }]);\r\n//}]);\r\n\r\nfunction convertDateStringsToDates(input: any, toLocal: boolean): any {\r\n // Ignore things that aren't objects.\r\n if (typeof input !== \"object\") return input;\r\n\r\n for (var key in input) {\r\n if (!input.hasOwnProperty(key)) continue;\r\n\r\n var value = input[key];\r\n // Check for string properties which look like dates.\r\n if (\r\n typeof value === \"string\" &&\r\n value.match(/(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2})\\:(\\d{2})\\:(\\d{2})/)\r\n ) {\r\n input[key] = new Date(value + \"Z\");\r\n if (Object.prototype.toString.call(input[key]) === \"[object Date]\") {\r\n // it is a date\r\n if (isNaN(input[key].getTime())) {\r\n // d.valueOf() could also work\r\n input[key] = value;\r\n }\r\n } else {\r\n // not a date\r\n input[key] = value;\r\n }\r\n } else if (typeof value === \"object\") {\r\n // Recurse into object\r\n convertDateStringsToDates(value, toLocal);\r\n }\r\n }\r\n return input;\r\n}\r\n\r\nccqapp.config([\r\n \"$httpProvider\",\r\n function ($httpProvider: ng.IHttpProvider) {\r\n $httpProvider.interceptors.push(function () {\r\n return {\r\n request: function (request) {\r\n //return convertDateStringsToDates(request, false);\r\n // We're not modifying anything sent to the server.\r\n return request;\r\n },\r\n\r\n response: function (response) {\r\n // Modify anything received from the server to local timezone.\r\n return convertDateStringsToDates(response, true);\r\n //return response;\r\n },\r\n };\r\n });\r\n },\r\n]);\r\n\r\nccqapp.config(function ($sceDelegateProvider) {\r\n $sceDelegateProvider.resourceUrlWhitelist([\r\n \"self\",\r\n \"https://www.youtube.com/**\",\r\n ]);\r\n});\r\n\r\nccqapp.filter(\"nospaces\", function () {\r\n return function (text) {\r\n if (text === null || text === undefined) {\r\n return null;\r\n }\r\n\r\n return text.replace(/\\s+/g, \"\");\r\n };\r\n});\r\n\r\n//this is for formatting labels - e.g. td>{{ myValue | percentage: 2 ...\r\nccqapp.filter(\"percentage\", [\r\n \"$filter\",\r\n function ($filter) {\r\n return function (input, decimals) {\r\n input = parseFloat(input);\r\n return $filter(\"number\")(input ? input * 100 : 0, decimals);\r\n };\r\n },\r\n]);\r\n\r\nccqapp.filter(\"convertBoolToYesNo\", function () {\r\n return function (input) {\r\n return input ? \"Yes\" : \"No\";\r\n };\r\n});\r\n\r\nccqapp.filter(\"startFrom\", function () {\r\n return function (input, start) {\r\n start = +start; //parse to int\r\n return input.slice(start);\r\n };\r\n});\r\n\r\nccqapp.directive(\"focusOnMax\", function () {\r\n return {\r\n restrict: \"A\",\r\n link: function (scope, element, attr) {\r\n element.bind(\"keyup\", function (e) {\r\n if (\r\n (e.target as HTMLInputElement).maxLength ===\r\n (e.target as HTMLInputElement).value.length\r\n ) {\r\n document.getElementById(attr.focusOnMax).focus();\r\n }\r\n });\r\n event.preventDefault();\r\n },\r\n };\r\n});\r\n\r\nccqapp.directive(\"toolTip\", function () {\r\n return {\r\n restrict: \"A\",\r\n link: function (scope, element, attrs) {\r\n var x, y;\r\n element.on(\"mousemove\", function (e) {\r\n (x = e.clientX), (y = e.clientY);\r\n this.children[0].style.top = y - 15 + \"px\";\r\n this.children[0].style.left = x + 30 + \"px\";\r\n });\r\n },\r\n };\r\n});\r\n\r\nccqapp.directive(\"form\", function () {\r\n return function (scope, el, attrs) {\r\n el.bind(\"keydown\", function (event) {\r\n if (13 == event.which && event.target.nodeName != \"TEXTAREA\") {\r\n event.preventDefault(); // Some mobile browsers...\r\n window.stop(); // Everything else except IE...\r\n document.execCommand(\"Stop\"); // IE\r\n return false;\r\n }\r\n });\r\n };\r\n});\r\n\r\n//ccqapp.directive('inViewport', function ($window) {\r\n// return {\r\n// scope: {\r\n// inViewport: '@'\r\n// },\r\n// link: function (scope, element: any, attrs) {\r\n// angular.element($window).bind(\"scroll\", function (e) {\r\n// var elementTop = angular.element(element).offset().top;\r\n// var elementBottom = elementTop + $(element).outerHeight();\r\n// var viewportTop = $($window).scrollTop();\r\n// var viewportBottom = viewportTop + $($window).height();\r\n// return elementBottom > viewportTop && elementTop < viewportBottom;\r\n// })\r\n// }\r\n// };\r\n//});\r\n\r\n//this is for input boxes - e.g. 0) {\r\n a.download = attr.filename;\r\n } else {\r\n a.download = filename;\r\n }\r\n a.click();\r\n });\r\n },\r\n controller: [\r\n \"$scope\",\r\n \"$attrs\",\r\n \"$http\",\r\n function ($scope, $attrs, $http) {\r\n $scope.downloadPdf = () => {\r\n $scope.$emit(\"download-init\");\r\n if ($attrs.body) {\r\n //var body = JSON.stringify($attrs.body)\r\n $http\r\n .put($attrs.url, $attrs.body, {\r\n responseType: \"arraybuffer\",\r\n })\r\n .then((response: any) => {\r\n $scope.$emit(\"download-start\");\r\n var filename = \"\";\r\n var disposition = response.headers()[\"content-disposition\"];\r\n if (disposition && disposition.indexOf(\"attachment\") !== -1) {\r\n var filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n var matches = filenameRegex.exec(disposition);\r\n if (matches != null && matches[1]) {\r\n filename = matches[1].replace(/['\"]/g, \"\");\r\n }\r\n }\r\n var dispostype = response.headers()[\"content-type\"];\r\n if (!dispostype) {\r\n dispostype = \"octet/stream\";\r\n }\r\n var blob = new Blob([response.data], { type: dispostype });\r\n $scope.$emit(\"downloaded\", blob, filename);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error in PUT request:\", error);\r\n });\r\n } else {\r\n $http\r\n .get($attrs.url, {\r\n responseType: \"arraybuffer\",\r\n })\r\n .then((response: any) => {\r\n $scope.$emit(\"download-start\");\r\n var filename = \"\";\r\n var disposition = response.headers()[\"content-disposition\"];\r\n if (disposition && disposition.indexOf(\"attachment\") !== -1) {\r\n var filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n var matches = filenameRegex.exec(disposition);\r\n if (matches != null && matches[1]) {\r\n filename = matches[1].replace(/['\"]/g, \"\");\r\n }\r\n }\r\n var dispostype = response.headers()[\"content-type\"];\r\n if (!dispostype) {\r\n dispostype = \"octet/stream\";\r\n }\r\n var blob = new Blob([response.data], { type: dispostype });\r\n $scope.$emit(\"downloaded\", blob, filename);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error in GET request:\", error);\r\n });\r\n }\r\n };\r\n },\r\n ],\r\n };\r\n});\r\n\r\nccqapp.directive(\"autoGrow\", function () {\r\n return function (scope, element, attrs) {\r\n element.on(\"input\", function () {\r\n this.style.height = \"auto\";\r\n this.style.height = this.scrollHeight + \"px\";\r\n });\r\n };\r\n});\r\n\r\n\r\nccqapp.directive('greaterThanZero', function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModel) {\r\n ngModel.$validators.greaterThanZero = function (modelValue, viewValue) {\r\n const value = modelValue || viewValue;\r\n return Number(value) > 0;\r\n };\r\n }\r\n };\r\n});\r\n\r\ndeclare global {\r\n interface String {\r\n isNumber(): boolean;\r\n startsWith(needle: string): boolean;\r\n }\r\n interface Object {\r\n watch(prop: PropertyDescriptor, handler: Function): Object;\r\n unwatch(prop: PropertyDescriptor): any;\r\n }\r\n\r\n interface Array {\r\n mapProperty(property: PropertyDescriptor): any;\r\n }\r\n\r\n interface Array {\r\n find(\r\n predicate: (value: T, index: number, obj: Array) => boolean,\r\n thisArg?: any,\r\n ): T | undefined;\r\n }\r\n}\r\n\r\nString.prototype.isNumber = function () {\r\n return /^\\d+$/.test(this);\r\n};\r\n\r\nString.prototype.startsWith = function (needle: string) {\r\n return this.indexOf(needle) == 0;\r\n};\r\n\r\n// object.watch\r\nif (!Object.prototype.watch) {\r\n Object.defineProperty(Object.prototype, \"watch\", {\r\n enumerable: false,\r\n configurable: true,\r\n writable: false,\r\n value: function (prop, handler) {\r\n var oldval = this[prop],\r\n newval = oldval,\r\n getter = function () {\r\n return newval;\r\n },\r\n setter = function (val) {\r\n oldval = newval;\r\n newval = handler.call(this, prop, oldval, val);\r\n return newval;\r\n };\r\n if (delete this[prop]) {\r\n // can't watch constants\r\n Object.defineProperty(this, prop, {\r\n get: getter,\r\n set: setter,\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n }\r\n },\r\n });\r\n}\r\n\r\n// object.unwatch\r\nif (!Object.prototype.unwatch) {\r\n Object.defineProperty(Object.prototype, \"unwatch\", {\r\n enumerable: false,\r\n configurable: true,\r\n writable: false,\r\n value: function (prop) {\r\n var val = this[prop];\r\n delete this[prop]; // remove accessors\r\n this[prop] = val;\r\n },\r\n });\r\n}\r\n\r\nArray.prototype.mapProperty = function (property: any) {\r\n return this.map(function (obj: any) {\r\n return obj[property];\r\n });\r\n};\r\n\r\nif (!Array.prototype.find) {\r\n Object.defineProperty(Array.prototype, \"find\", {\r\n value: function (predicate: any) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n\r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== \"function\") {\r\n throw new TypeError(\"predicate must be a function\");\r\n }\r\n\r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n\r\n // 5. Let k be 0.\r\n var k = 0;\r\n\r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n\r\n // 7. Return undefined.\r\n return undefined;\r\n },\r\n });\r\n}\r\n\r\nfunction uuidv4() {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\r\n var r = (Math.random() * 16) | 0,\r\n v = c == \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nexport default ccqapp;\r\n"],"names":["key","property","angular","event","LicenseMasterStatusEnum","$rootScope","requiredRoles","matchAllRoles","requiredFeatures","requiredStates","requiredStatesOptions","requiredRolesOptions","requiredFeaturesOptions","requiresActiveSubscription","requiresRoles","requiresRolesOptions","matchingState","n","m","p","r","self","format","px","j","k","_","s","i","q","keys","f","response","CaseStatusEnum","DealSourceTypeEnum","LandOrPropertyEnum","LinkTypeEnum","LoanCompletionTypeEnum","LocationEnum","OriginatorRoleTypeEnum","OwnOrPurchaseEnum","PlanningPermissionTypeEnum","ProductFamilyEnum","ProductTypeEnum","PropertyTypeEnum","RefurbishmentLevelEnum","YesNoMaybe","UserRoleEnum","LoanRepaymentTypeEnum","AreaUnitEnum","BillingFrequencyEnum","ContractLengthEnum","PricingFrequencyEnum","ALItemTypeEnum","ALTypeEnum","index","CaseAccessLevelEnum","CaseLenderStateEnum","ExistingPlanningChangeTypeEnum","ExitStrategyEnum","LenderProductTypeEnum","LoanPurposeEnum","ModuleEnum","OwnNewDevelopmentEnum","PropertyTypeDetailEnum","TenureEnum","TitleEnum","EventLogEnum","InterestRateBasis","InterestRateTypeEnum","MessageRoleEnum","BridgingPersonalGuaranteeLevelEnum","MaxFlatUnitPriceEnum","MaxHouseSalePriceEnum","MaxSqFtSalePriceEnum","PreviousDevelopmentsEnum","SortByEnum","deletedLender","item","l","BuildProcurementTypeEnum","ExternalLinksEnum","PlanningResponsibilityEnum","PurchaseProcessTypeEnum","cls","FixedRateTermEnum","EPCRatingTypeEnum","EWS1GradeTypeEnum","MaxIndividualUnitPriceEnum","TimeLeftOnLeaseEnum","LenderLogoDTO","location","SecurityQuestionEnum","OwnerOrEmployeeEnum","ScheduleTypeEnum","data","result","PreAgreementEnum","ScheduleDescriptionTypeEnum","scheduleRow","PersonalGuaranteeLevelEnum","ShareholderDepositRequiredEnum","ApplicantRoleEnum","IntroducerTypeEnum","_a","_b","results","StatusEnum","success","OrganisationTypeEnum","ReferrerEnum","require$$0","jsxRuntimeModule","useState","jsx","jsxs","fromPairs","freeGlobal","global","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","objectToString","require$$1","require$$2","baseGetTag","isObject","funcTag","isFunction","coreJsData","isMasked","funcProto","funcToString","toSource","require$$3","baseIsNative","getValue","getNative","defineProperty","baseAssignValue","eq","assignValue","copyObject","identity","apply","overRest","constant","baseSetToString","shortOut","setToString","baseRest","MAX_SAFE_INTEGER","isLength","isArrayLike","isIndex","isIterateeCall","createAssigner","isPrototype","baseTimes","isObjectLike","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","isArray","stubFalse","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","baseIsTypedArray","baseUnary","nodeUtil","isTypedArray","require$$4","require$$5","arrayLikeKeys","overArg","nativeKeys","baseKeys","assign","createBaseFor","baseFor","baseForOwn","listCacheClear","assocIndexOf","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","stackClear","stackDelete","stackGet","stackHas","Map","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","stackSet","Stack","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","othValue","Uint8Array","mapToArray","setToArray","symbolTag","symbolProto","equalByTag","arrayPush","baseGetAllKeys","arrayFilter","stubArray","getSymbols","getAllKeys","equalObjects","DataView","Promise","Set","WeakMap","require$$6","getTag","require$$7","baseIsEqualDeep","baseIsEqual","baseIsMatch","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","isSymbol","isKey","memoize","memoizeCapped","stringToPath","arrayMap","INFINITY","baseToString","toString","castPath","toKey","baseGet","get","baseHasIn","hasPath","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","baseIteratee","mapValues","object","createBaseEach","baseEach","baseSome","collection","some","NgComponent","this","d","b","react2angular_1","react2angular","InterestServicedorRolledEnum","BorrowingEntityTypeEnum","TradingPeriodEnum","AppraisalModuleEnum","OwnershipRoleEnum","PlanTypeEnum","BuildStageEnum","ChargeTypeEnum","ConditionEnum","MaritalStatusEnum","ProjectCompletionTypeEnum","SiteTypeEnum","SourceOfIncomeEnum","TeamSizeEnum","YesNoEnum","ValuationMethodEnum","MaxCommercialFloorspaceEnum","CRMEnum","BrokerNetworkEnum","ProductService","OrganisationService","currentUser","element","attr"],"mappings":"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A,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEK,WAAA;AAAA,EACT;AAAA,EAEA,mBAAmB;AACjB,UAAM,kBAAkB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MA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","x_google_ignoreList":[0,174,175,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315]}