{"version":3,"sources":["models/SelmaModels.ts","models/selmamodels/Applicant.ts","models/selmamodels/Loan.ts","models/selmamodels/Collateral.ts","services/BaseService.ts","services/UiLanguageService.ts","services/SessionService.ts","libs/SMELPOClient/runtime.ts","libs/SMELPOClient/models/AimType.ts","libs/SMELPOClient/models/ApplicantEmployed.ts","libs/SMELPOClient/models/ApplicantLPEmployment.ts","libs/SMELPOClient/models/CaseIdStatus.ts","libs/SMELPOClient/models/CollateralAge.ts","libs/SMELPOClient/models/DownPaymentType.ts","libs/SMELPOClient/models/EUType.ts","libs/SMELPOClient/models/StakeholderType.ts","libs/SMELPOClient/models/TypeOfCollateral.ts","libs/SMELPOClient/models/TypeOfEmployeement.ts","libs/SMELPOClient/models/TypeOfHouse.ts","libs/SMELPOClient/models/TypeOfLoan.ts","libs/SMELPOClient/apis/ProcessesApi.ts","libs/SMELPOClient/apis/UploadsApi.ts","utils/Objserver.ts","libs/SMELPOClient/models/ApplicantType.ts","libs/SMELPOClient/models/BudgetType.ts","libs/SMELPOClient/models/BudgetYearType.ts","libs/SMELPOClient/models/BusinessCategoryType.ts","libs/SMELPOClient/models/ChildType.ts","libs/SMELPOClient/models/CollateralType.ts","libs/SMELPOClient/models/CompanyEconomyType.ts","libs/SMELPOClient/models/CompanyType.ts","libs/SMELPOClient/models/ContactInformationType.ts","libs/SMELPOClient/models/CustomerIdType.ts","libs/SMELPOClient/models/EUSupportType.ts","libs/SMELPOClient/models/ExtLoanType.ts","libs/SMELPOClient/models/GuarantorType.ts","libs/SMELPOClient/models/HouseholdMemberType.ts","libs/SMELPOClient/models/HouseholdType.ts","libs/SMELPOClient/models/KycInformationType.ts","libs/SMELPOClient/models/LinksAll.ts","libs/SMELPOClient/models/LoanOwnerType.ts","libs/SMELPOClient/models/LoanType.ts","libs/SMELPOClient/models/MaintenanceCostType.ts","libs/SMELPOClient/models/MaintenanceHouseType.ts","libs/SMELPOClient/models/PersonalEconomyType.ts","libs/SMELPOClient/models/PrincipalType.ts","libs/SMELPOClient/models/ProcessType.ts","libs/SMELPOClient/models/ProcessesType.ts","libs/SMELPOClient/models/RevenueType.ts","libs/SMELPOClient/models/TakeoverLoanType.ts","libs/SMELPOClient/models/TaxedOwnerType.ts","libs/SMELPOClient/models/ValueType.ts","services/SMELPOService.ts","services/BIDLoginService.ts","services/TextService.ts","services/ConfigurationService.ts","services/GuardService.ts","services/StateService.ts","utils/ValidationResult.ts","services/IdService.ts","models/LpoModelConverter.ts","services/CaseService.ts","models/SmeModelConverter.ts","services/ApplicantService.ts","services/StepService.ts","services/CompanyEconomyService.ts","models/UiModelConverter.ts","services/CompanyService.ts","models/uimodels/UIBusinessCategory.ts","models/uimodels/UIEUSupport.ts","models/uimodels/UIEstateType.ts","models/uimodels/UIHighRiskCategory.ts","models/uimodels/UIMunicipality.ts","models/uimodels/UILoanAimCategory.ts","models/uimodels/UIExtLoanType.ts","models/uimodels/UILoanDownpaymentType.ts","models/uimodels/UIEmploymentType.ts","models/uimodels/UIBank.ts","services/LoanService.ts","services/HouseholdService.ts","services/CollateralService.ts","services/ArrayService.ts","services/PersonalEconomyService.ts","services/GuarantorService.ts","models/uimodels/UINamed.ts","services/EuSupportService.ts","services/ExtLoanService.ts","services/MaintenanceCostService.ts","models/uimodels/UIAttachmentType.ts","services/AttachmentService.ts","services/BudgetService.ts","services/SummaryService.ts","services/ConvertService.ts","models/AppModels.ts","components/BaseComponent.ts","components/AppComponent.ts","components/widget/display/THtml.tsx","components/widget/display/T.tsx","components/layout/Bottom/Bottom.tsx","components/widget/display/BirdLoader/BirdLoader.tsx","components/app/LoadingPage.tsx","components/layout/PageContent/PageContent.tsx","components/widget/input/Button/Button.tsx","components/layout/FormUnit/FormUnit.tsx","components/widget/display/Loader/Loader.tsx","components/login/BankIdLogin.tsx","components/widget/display/Required/Required.tsx","components/widget/display/Help/Help.tsx","components/widget/display/Heading/Heading.tsx","components/widget/display/InfoBox/InfoBox.tsx","components/login/LoginPage.tsx","components/widget/display/StatusIndicator/StatusIndicator.tsx","components/layout/Modal/Modal.tsx","components/widget/input/ButtonGroup/ButtonGroup.tsx","components/widget/input/DeleteButton/DeleteButton.tsx","components/home/HomeCase/HomeCase.tsx","components/home/HomePage/HomePage.tsx","components/case/StepHeader.tsx","components/widget/display/Label/Label.tsx","components/widget/display/Messages/Messages.tsx","components/case/StepFooter.tsx","components/widget/input/Checkbox/Checkbox.tsx","components/widget/input/CheckboxText/CheckboxText.tsx","components/widget/display/StepForm/StepForm.tsx","components/widget/display/Validation/Validation.tsx","components/case/steps/StepLoan/ApplicantApproval.tsx","components/layout/FormUnitRow/FormUnitRow.tsx","models/uimodels/UIBudgetYearItem.ts","components/widget/input/Money/Money.tsx","components/widget/input/Select/Select.tsx","components/widget/input/Select/SelectCustomStyles.tsx","components/case/steps/StepLoan/LoanNewAim.tsx","components/case/steps/StepLoan/LoanNewAims.tsx","components/widget/input/Textbox/Textbox.tsx","components/case/steps/StepLoan/LoanDownpayment.tsx","components/widget/input/CheckboxGroup/CheckboxGroup.tsx","components/case/steps/StepLoan/LoanTakeOver.tsx","components/case/steps/StepLoan/LoanTakeOvers.tsx","components/widget/input/Textarea/Textarea.tsx","components/case/steps/StepLoan/StepLoan.tsx","components/case/steps/StepApplicant/ApplicantContact.tsx","components/widget/input/Radiobutton/Radiobutton.tsx","components/widget/input/RadiobuttonGroup/RadiobuttonGroup.tsx","components/case/steps/StepApplicant/ApplicantPep.tsx","models/uimodels/UIMonths.ts","components/widget/input/SelectMonth/SelectMonth.tsx","components/case/steps/StepApplicant/ApplicantIncome.tsx","components/case/steps/StepApplicant/PersonApplicantItem.tsx","components/case/steps/StepCompany/CompanyHasRevenue.tsx","components/case/steps/StepCompany/ApplicantRiskBusiness.tsx","components/case/steps/StepCompany/CompanyRevenue.tsx","components/widget/input/Percent/Percent.tsx","components/case/steps/StepCompany/CompanyBusinessFocuses.tsx","components/case/steps/StepCompany/CompanyRevenueChunk.tsx","components/layout/HeaderButton/HeaderButton.tsx","components/case/steps/StepApplicant/PersonalCompanyApplicantItem.tsx","components/case/steps/StepApplicant/IncorporatedCompanyApplicantItem.tsx","components/case/steps/StepApplicant/ApplicantItem.tsx","components/widget/display/ScrollOverflowIndicator/ScrollOverflowIndicator.tsx","components/widget/input/RadiobuttonTable/RadiobuttonTable.tsx","components/case/steps/StepCompany/CompanySelect.tsx","components/layout/FormUnitFieldAndButton/FormUnitFieldAndButton.tsx","components/case/steps/StepApplicant/AddApplicant.tsx","components/widget/display/TabPanels/TabPanels.tsx","components/case/steps/StepApplicant/StepApplicant.tsx","components/case/steps/StepCompany/StepCompany.tsx","components/case/steps/StepCollateral/CollateralCollaterals.tsx","components/case/steps/StepCollateral/CollateralEUSupports.tsx","components/widget/input/SSN/SSN.tsx","components/case/steps/StepCollateral/CollateralGuarantors.tsx","components/case/steps/StepCollateral/StepCollateral.tsx","components/layout/Panel/Panel.tsx","components/case/steps/StepHousehold/ApplicantSelect.tsx","components/case/steps/StepHousehold/HouseholdExtLoan.tsx","components/case/steps/StepHousehold/HouseholdExtLoans.tsx","components/case/steps/StepHousehold/HouseholdMaintenanceHouse.tsx","components/case/steps/StepHousehold/HouseholdMaintenanceCost.tsx","components/case/steps/StepHousehold/HouseholdMaintenanceCosts.tsx","components/case/steps/StepHousehold/ChildTimePart.tsx","components/widget/input/Age/Age.tsx","components/case/steps/StepHousehold/HouseholdEdit.tsx","components/case/steps/StepHousehold/Households.tsx","components/case/steps/StepHousehold/StepHousehold.tsx","components/widget/display/Icon/Icon.tsx","components/case/steps/StepBudget/ProvidedAttachment.tsx","components/case/steps/StepBudget/ProvidedAttachments.tsx","components/widget/input/Upload/Upload.tsx","components/case/steps/StepBudget/RequestedAttachment.tsx","components/case/steps/StepBudget/RequestedAttachments.tsx","components/case/steps/StepBudget/ManualBudget.tsx","components/layout/Accordion/AccordionElements.tsx","components/layout/Accordion/Accordion.tsx","components/case/steps/StepBudget/StepBudget.tsx","components/widget/display/Table/Table.tsx","components/case/steps/StepSummary/CompanySummary/SelectedCompanySummary.tsx","components/widget/display/KeyValueList/KeyValueList.tsx","components/case/steps/StepSummary/CompanySummary/CompanyHasRevenueSummary.tsx","components/case/steps/StepSummary/CompanySummary/CompanyHighRiskBusinessSummary.tsx","components/case/steps/StepSummary/CompanySummary/CompanyRevenueSummary.tsx","components/case/steps/StepSummary/CompanySummary/CompanyBusinessFocusesSummary.tsx","components/case/steps/StepSummary/CompanySummary/CompanySummary.tsx","components/case/steps/StepSummary/LoanSummary/LoanAmountSummary.tsx","components/case/steps/StepSummary/LoanSummary/LoanTakeOverSummary.tsx","components/case/steps/StepSummary/LoanSummary/LoanAimsSummary.tsx","components/case/steps/StepSummary/LoanSummary/LoanDownpaymentSummary.tsx","components/case/steps/StepSummary/LoanSummary/LoanSummary.tsx","components/case/steps/StepSummary/ApplicantsSummary/ApplicantContactSummary.tsx","components/case/steps/StepSummary/ApplicantsSummary/ApplicantIncomeSummary.tsx","components/case/steps/StepSummary/ApplicantsSummary/ApplicantPepSummary.tsx","components/case/steps/StepSummary/ApplicantsSummary/PersonApplicantItemSummary.tsx","components/case/steps/StepSummary/ApplicantsSummary/PersonalCompanyApplicantItemSummary.tsx","components/case/steps/StepSummary/ApplicantsSummary/IncorporatedCompanyApplicantItemSummary.tsx","components/case/steps/StepSummary/ApplicantsSummary/ApplicantItemSummary.tsx","components/case/steps/StepSummary/ApplicantsSummary/ApplicantsSummary.tsx","components/case/steps/StepSummary/CollateralSummary/CollateralRealEstateSummary.tsx","components/case/steps/StepSummary/CollateralSummary/CollateralEUSupportSummary.tsx","components/case/steps/StepSummary/CollateralSummary/CollateralGurantorsSummary.tsx","components/case/steps/StepSummary/CollateralSummary/CollateralSummary.tsx","components/case/steps/StepSummary/HouseholdSummary/HouseholdMembersSummary.tsx","components/case/steps/StepSummary/HouseholdSummary/HouseholdChildrenSummary.tsx","components/case/steps/StepSummary/HouseholdSummary/HouseholdChildMaintenanceSummary.tsx","components/case/steps/StepSummary/HouseholdSummary/HouseholdMaintenanceCostsSummary.tsx","components/case/steps/StepSummary/HouseholdSummary/HouseholdExtLoansSummary.tsx","components/case/steps/StepSummary/HouseholdSummary/HouseholdSummary.tsx","components/case/steps/StepSummary/BudgetSummary/ManualBudgetSummary.tsx","components/case/steps/StepSummary/BudgetSummary/BudgetSummary.tsx","components/case/steps/StepSummary/ApproveApplication.tsx","components/case/steps/StepSummary/StepSummary.tsx","components/case/steps/StepDone/StepDone.tsx","components/case/CaseSteps.tsx","components/widget/display/StatusBar/StatusBar.tsx","components/case/StepState.ts","components/case/CasePage.tsx","components/loggedOut/LoggedOutPage.tsx","components/app/MaintenancePage.tsx","components/admin/AdminCaseStatus/AdminCaseStatus.tsx","components/admin/AttachmentSection/AttachmentSection.tsx","components/admin/AdminCasePage/AdminCasePage.tsx","components/admin/AdminPage/AdminPage.tsx","components/app/PageRouter.tsx","components/widget/display/MobileNav/MobileNav.tsx","components/layout/SaveModal/SaveModal.tsx","components/layout/Top/Top.tsx","components/app/ScrollToTop.tsx","components/app/App/EbbotChat.tsx","components/app/App/App.tsx","index.js"],"names":["LPEmploymentEnum","DownpaymentSource","EUSupportEnum","BaseService","constructor","UiLanguage","code","texts","this","Map","UiLanguageService","configurationService","super","url","underrideUrl","mapDataToUiLanguage","result","uiLanguage","config","getConfiguration","smeBaseUrl","load","Promise","all","loadTexts","then","Object","assign","urlPattern","replace","fetch","json","LogoutReason","SessionService","stateService","bidService","sessionLoopHandle","handleLoginSuccess","state","session","handleLoginError","startSessionLoop","setInterval","getSession","handleServerSession","stopSessionLoop","clearInterval","undefined","loadSession","isLoggedIn","serverSession","newLogin","createNewLogin","setNewLogin","logout","Timeout","login","isAdmin","getLogin","admin","Error","getSsn","ssn","getLogout","didLogOut","fakeLogin","getFakeLogin","reason","User","time","Date","cases","case","update","resolve","ss","firstName","lastName","prevLogin","loginMobile","loginLocal","checkLoginState","loginToken","checkLogin","loginWithAutostartToken","autostartToken","redirectToBankIDApp","collect","startToken","BASE_PATH","BaseAPI","configuration","Configuration","middleware","fetchApi","async","init","fetchParams","pre","response","post","clone","withMiddleware","middlewares","next","concat","withPreMiddleware","preMiddlewares","map","withPostMiddleware","postMiddlewares","context","createFetchParams","status","basePath","path","query","keys","length","queryParamsStringify","body","FormData","URLSearchParams","value","Blob","JSON","stringify","headers","method","credentials","slice","RequiredError","field","msg","name","window","bind","querystring","username","password","apiKey","accessToken","exists","key","params","prefix","fullKey","Array","multiValue","singleValue","encodeURIComponent","String","join","filter","part","JSONApiResponse","raw","transformer","jsonValue","TextApiResponse","text","AimTypeFromJSON","ignoreDiscriminator","AimTypeFromJSONTyped","AimTypeToJSON","aimId","purposeText","aimText","loanAmountPart","ApplicantEmployed","ApplicantLPEmployment","CaseIdStatus","CollateralAge","DownPaymentType","EUType","StakeholderType","TypeOfCollateral","TypeOfEmployeement","TypeOfHouse","TypeOfLoan","DeleteProcessCaseIdStatusEnum","ReserveCaseIdCaseIdStatusEnum","UpdateProcessStatusCaseIdStatusEnum","FileUploadXAttachmentTypeEnum","ObsChange","ApplicantEmployedFromJSON","ApplicantEmployedFromJSONTyped","ApplicantLPEmploymentFromJSON","ApplicantLPEmploymentFromJSONTyped","ApplicantTypeFromJSON","StakeholderTypeFromJSON","ContactInformationTypeFromJSON","ApplicantTypeFromJSONTyped","ApplicantTypeToJSON","processId","customerId","applicantId","applicantName","applicantAddress","applicantPostalCode","applicantPostAddress","stakeholderType","ContactInformationTypeToJSON","contactInformation","applicantEmployed","applicantLPEmployment","applicantMember","applicantBySms","applicantByeMail","applicantCollateralToBuy","BudgetTypeFromJSON","BudgetYearTypeFromJSON","BudgetTypeFromJSONTyped","BudgetTypeToJSON","companyEconomyId","budgetYears","BudgetYearTypeToJSON","ValueTypeFromJSON","BudgetYearTypeFromJSONTyped","budgetId","budgetyear","ValueTypeToJSON","budget","BusinessCategoryTypeFromJSON","BusinessCategoryTypeFromJSONTyped","BusinessCategoryTypeToJSON","businessId","businessCategory","businessPart","mainBusiness","CaseIdStatusFromJSON","CaseIdStatusFromJSONTyped","ChildTypeFromJSON","ChildTypeFromJSONTyped","ChildTypeToJSON","childId","childsAge","partInHousehold","CollateralAgeFromJSON","CollateralAgeFromJSONTyped","CollateralTypeFromJSON","TypeOfCollateralFromJSON","TaxedOwnerTypeFromJSON","CollateralTypeFromJSONTyped","CollateralTypeToJSON","typeOfCollateral","collateralId","collateralCode","collateralName","taxedOwners","TaxedOwnerTypeToJSON","collateralMunicipality","collateralStreet","collateralAreal","collateralAge","useAsCollateral","buyCollateral","CompanyEconomyTypeFromJSON","RevenueTypeFromJSON","CompanyEconomyTypeFromJSONTyped","CompanyEconomyTypeToJSON","companyId","customerCategory","revenues","RevenueTypeToJSON","CompanyTypeFromJSON","PrincipalTypeFromJSON","CompanyTypeFromJSONTyped","CompanyTypeToJSON","orgNumber","companyName","statusCode","statusTextHigh","created","businessFocuses","industriCode","industriText","leagalGroupCode","legalGroupText","selectedCompany","principals","PrincipalTypeToJSON","brokenFiscalYear","fiscalYearEndDate","ContactInformationTypeFromJSONTyped","applicanteMail","applicantMobileNumber","CustomerIdTypeFromJSON","CustomerIdTypeFromJSONTyped","CustomerIdTypeToJSON","customerAdded","DownPaymentTypeFromJSON","DownPaymentTypeFromJSONTyped","EUSupportTypeFromJSON","EUTypeFromJSON","EUSupportTypeFromJSONTyped","EUSupportTypeToJSON","euId","euType","supportAmount","supportYear","EUTypeFromJSONTyped","ExtLoanTypeFromJSON","TypeOfLoanFromJSON","ExtLoanTypeFromJSONTyped","ExtLoanTypeToJSON","extLoanOwners","extloanId","typeOfLoan","extCreditInstitute","extloanClearing","extloanNumber","extloanAmount","extRedeemLoan","extMonthlyCost","GuarantorTypeFromJSON","GuarantorTypeFromJSONTyped","GuarantorTypeToJSON","guarantorId","guarantorName","guarantorPhone","guarantorCustomerId","HouseholdMemberTypeFromJSON","HouseholdMemberTypeFromJSONTyped","HouseholdMemberTypeToJSON","householdMember","HouseholdTypeFromJSON","HouseholdTypeFromJSONTyped","HouseholdTypeToJSON","householdId","householdMembers","numberOfChildsAtHome","childs","numberOfCars","childMaintenaceCost","receiveChildMaintenanceCost","childCareAmount","KycInformationTypeFromJSON","KycInformationTypeFromJSONTyped","KycInformationTypeToJSON","kycId","kycAcceptUC","kycAcceptGDPR","kycUCAware","kycPublicFunction","kycRelatedPublicFunction","kycHighRiskIndustry","kycHighRiskIndustryText","kycAmericanCitizen","kycCrsTaxObligation","LinksAllFromJSON","ProcessTypeFromJSON","LoanTypeFromJSON","PersonalEconomyTypeFromJSON","MaintenanceCostTypeFromJSON","attachments","attachmentRequests","LinksAllToJSON","processes","ProcessTypeToJSON","applicants","loans","LoanTypeToJSON","extloans","companies","households","collaterals","personaleconomies","PersonalEconomyTypeToJSON","companyeconomies","budgets","kycinformations","guarantors","eusupports","maintenancecosts","MaintenanceCostTypeToJSON","LoanOwnerTypeFromJSON","LoanOwnerTypeFromJSONTyped","LoanOwnerTypeToJSON","ownershipPart","TakeoverLoanTypeFromJSON","loanId","loanNumber","loanTakeOver","loanAmount","downPaymentType","downPaymentOther","downPaymentAmount","purposeDescription","aims","takeoverloans","TakeoverLoanTypeToJSON","MaintenanceHouseTypeFromJSON","MaintenanceCostTypeFromJSONTyped","maintenanceCostId","typeofhouses","MaintenanceHouseTypeToJSON","TypeOfHouseFromJSON","MaintenanceHouseTypeFromJSONTyped","typeOfHouse","keepHouse","loanInOtherInstitute","redeemLoan","creditInstitute","loanClearing","instituteLoanNumber","loanOwners","houseLoanAmount","maintenanceCost","TypeOfEmployeementFromJSON","PersonalEconomyTypeFromJSONTyped","personalEconomyId","yearlyIncome","income","typeOfEmployeement","employeer","yearOfEmployment","monthOfEmployment","PrincipalTypeFromJSONTyped","principalName","ProcessTypeFromJSONTyped","customers","caseId","caseIdStatus","processCreatedDate","lastAccessed","referenceId","processVersion","ProcessesTypeFromJSON","ProcessesTypeFromJSONTyped","RevenueTypeFromJSONTyped","revenueYear","revenue","StakeholderTypeFromJSONTyped","TakeoverLoanTypeFromJSONTyped","takeoverLoanId","debtAmount","interest","conditionchangedate","TaxedOwnerTypeFromJSONTyped","taxedOwnerId","taxedOwner","TypeOfCollateralFromJSONTyped","TypeOfEmployeementFromJSONTyped","TypeOfHouseFromJSONTyped","TypeOfLoanFromJSONTyped","ValueTypeFromJSONTyped","value1","value2","value3","value4","value5","value6","value7","value8","value9","value10","value11","value12","value13","value14","value15","value16","value17","value18","value19","value20","value21","value22","value23","value24","value25","ProcessesApi","runtime","requestParameters","headerParameters","request","process","addProcessRaw","xProcessID","deleteProcessRaw","getProcessAllRaw","getProcessesRaw","reserveCaseIdRaw","processSaveAll","saveProcessAllRaw","updateProcessStatusRaw","SMELPOService","sessionService","apiConfiguration","preRequest","api","func","promise","resultTime","data","okResult","mySsn","op","bodyJson","cache","getProcess","getProcessAll","getProcesses","addProcess","arg","STARTEDBYAPPLICANT","toISOString","saveProcess","saveProcessAll","deleteCase","setCaseStatus","caseStatus","updateProcessStatus","adminSearchProcesses","search","downloadFetchResult","httpResponse","blob","fileName","URL","createObjectURL","a","document","createElement","href","download","appendChild","click","remove","searchApplicant","ProcessId","CustomerId","BIDLoginService","device","bidPost","token","bidGet","success","tooYoung","mustContact","returnUrl","createBankIdAutostartUrl","location","TextService","uiLanguageService","l","language","ll","textsOrEmpty","str","textOrKey","textOrDefault","textOrEmpty","formattedTextOrEmpty","t","format","property","hasOwnProperty","r","RegExp","val","defaultText","nilsEmptyOrDefault","toLowerCase","endsWith","toLocaleLowerCase","useLanguage","languageCode","oldLang","ConfigurationService","protectAgainstPageLeaveEnabled","prevConfig","maintenanceMode","ebbotChatEnabled","ebbotChatBotId","protectAgainstPageLeave","setProtectAgainstPageLeave","enabled","GuardService","convertService","emailPattern","latinUnicodeDiacritics","emailNegPattern","isString","isNumber","isObject","isUndefined","isUndefinedOrEmpty","isUndefinedOrLessThanZero","isDefined","isUnvalued","isUnvaluedOrFalse","isUnvaluedOrTrue","isUnvaluedOrEmpty","isUnvaluedOrLessThanZero","isUnvaluedOrLessThan","limit","isUnvaluedOrZero","hasLengthGreaterThan","list","hasLengthGreaterThanZero","hasLengthLessThan","hasValue","isGreaterThan","isGreaterThanOrEqual","isInRange","min","max","isGreaterThanZero","isZeroOrGreater","isValidEmail","test","isValidSsn","substr","year","parseInt","month","day","date","getFullYear","toString","getMonth","getDate","check","i","len","number","isValidOrgNr","isValidMobileNumber","isDate","isValidDate","isNaN","getTime","isBeforeDate","dateLimit","isAfterDate","isBeforeNow","isAfterNow","compareSsn","ssn1","ssn2","normalizeAndCompareSsn","toNormalizedSsn","compareCustomerId","customerId1","customerId2","objectContains","object","find","objectSelfOrContains","Objserver","observers","obj","emitChange","add","oldObj","newObj","change","observer","match","callback","event","ex","observe","observeInternal","x","observeDeep","push","u","unobserve","StateService","stateObjserver","loaded","writeStateToStorage","updateState","listRemove","item","ix","indexOf","splice","listRemoveWhere","toRemove","cnt","forEach","listRemoveAll","listAdd","loadState","startsWith","setState","parse","loadStateByUrl","loadStateByName","fixStateAfterLoad","id","prevState","sessionStorage","setItem","loadStateFromStorage","stateString","getItem","ValidationResult","validator","items","addItem","addMultiple","addResult","getItems","getCount","anyItems","getOkCount","ok","getFailCount","validatorOk","vri","getValidatorResult","getOkRate","total","failed","IdService","newId","newIdString","newGuid","generateUUID","d","performance","now","c","Math","random","floor","LpoModelConverter","createdDate","fromDateString","lastAccessedDate","version","lpCaseId","linksAll","toCase","toApplicants","loan","toLoan","toCompanies","companyEconomies","toCompanyEconomies","toCollaterals","euSupports","toEuSupports","extLoans","toExtLoans","toBudgets","toGuarantors","toHouseholds","personalEconomies","toPersonalEconomies","maintenanceCosts","toMaintenanceCosts","toAttachments","toAttachmentRequests","municipality","street","areal","toTaxedOwners","toBudget","requestType","requestVariation","required","mimeType","fileSize","toMaintenanceCost","toMaintenanceHouses","toMaintenanceHouse","houseType","toLoanOwners","toPersonalEconomy","typeOfEmployment","toTypeOfEmployment","employer","PERMANENT","TEMPORARY","PROBATIONARY","UNEMPLOYMENTINSURANCE","UNEMPLOYMENT_INSURANCE","SELFEMPLOYED","SELF_EMPLOYED","STUDENTAID","STUDENT_AID","PENSION","toHousehold","members","toHouseholdMembers","numberOfChildrenAtHome","children","toChildren","childMaintenanceCost","childMaintenanceIncome","toHouseholdMember","toGuarantor","phone","toExtLoan","type","toExtLoanOwners","amount","monthlyCost","toEuSupport","euSupport","e","toEUSupportType","EUStd","SmeEUSupportType","EU","EUStdOchNationelltStd","EUNAT","EUStdOchNationelltStdUtanMjlk","EUNAT_NOMILK","NationellStdUtanMjlk","NAT_NOMILK","toCompanyEconomy","companyEconomy","cet","toRevenues","toBudgetYears","toBudgetYear","v","tol","toAims","takeoverLoans","toTakeoverLoans","takeOver","downpaymentOther","downpaymentType","toDownpaymentSource","Blanco","BLANCO_LOAN","FrsljningBostad","SALE_OF_PROPERTY","Sparande","SAVINGS","Vrigt","OTHER","aimCategory","aimDetail","kycs","kycResult","k","kyc","toApplicant","applicant","spPos","lastIndexOf","trim","email","streetAddress","postalAddress","postalCode","emailConfirm","mobilePhone","toKyc","notifyByEmail","notifyByMobilePhone","willBuyAgriForestryProperty","highRiskCategoryCode","approvedInfoSharing","approvedCreditCheck","approvedInfoHandling","approvedInfoSharingDB","approvedCreditCheckDB","approvedInfoHandlingDB","isPep","isPepRelated","isAmericanCitizen","isCrsTaxObligated","company","highRiskCode","toBusinessCategories","legalGroupCode","toPrincipals","businessCategories","idService","businessCategoryCode","businessCategoryText","mainDirection","toCompany","CaseService","smelpoService","guardService","applicantService","attachmentService","loadCase","linksAllToCase","ensureCorrectAttachmentRequests","addCaseToStateCases","addCasesToStateCases","sort","b","loadCases","getMyCases","mySSN","reject","fails","setCurrentCase","getCurrentCase","hasOngoingCase","addNewCase","addCaseOnClient","addNewCustomerToCase","customer","SOKANDE","isServerCase","addCaseOnServer","canDeleteCase","CLOSEDBYAPPLICANT","removeCaseFromCases","validateCase","vr","validateApplicant","sendInApplication","READYFOROFFICER","saveCaseToServer","fp","toLpoProcess","toLpoCompanies","toLpoLoans","toLpoApplicants","toLpoExtLoans","toLpoHouseholds","toLpoCollaterals","toLpoEuSupports","toLpoPersonalEconomies","toLpoCompanyEconomies","toLpoBudgets","toLpoKycInfos","toLpoGuarantors","toLpoMaintenanceCosts","toLpoAttachments","toLpoAttachmentRequests","toLpoMaintenanceCost","toLpoMaintenanceHouses","maintenanceHouses","toLpoMaintenanceHouse","toLpoLoanOwners","toLpoGuarantor","toLpoKycInfo","toLpoBudget","toLpoBudgetYears","toLpoBudgetYear","toLpoCompanyEconomy","toLpoRevenues","toLpoPersonalEconomy","toLpoLPEmploymentEnum","toLpoEuSupport","toLpoCollateral","toLpoTaxedOwners","toLpoHousehold","toLpoHouseholdMembers","toLpoChildren","toLpoHouseholdMember","toLpoChild","toLpoExtLoan","toExtLoanOwnersCustomerIds","toDateString","co","toYYYY_MM_DD","toLpoBusinessCategories","toLpoPrincipals","getTimezoneOffset","split","toLpoAims","toLpoTakeoverLoans","toLpoDownpaymentType","aim","toFullProcess","moveDataFromCreatedServerCaseToClientCase","clientCase","serverCase","cc","sc","cca","csa","saveCase","setApplicantsApprovalAsSavedToDB","canSaveCase","allApplicantsHaveGivenFullApproval","later","delay","setTimeout","adminDeleteCase","CLOSEDBYTHINNING","adminMarkCaseAsHandled","CLOSEDBYOFFICER","adminSearchCases","goodLinksAll","ApplicantService","companyService","householdService","removeApplicant","g","removeCustomer","householdsToRemove","hh","member","removeHousehold","loanOwner","o","h","getApplicantCompany","removeCompany","afterApplicantChange","newApplicant","newKyc","ensureKyc","addApplicant","ensureCustomer","existingApplicant","getApplicantBySsn","getCustomer","toUTCString","hasApplicants","getApplicants","getPhysicumApplicants","isPhysicum","setWillBuyAgriForestryProperty","checked","validateMyApplicantKycApproval","myApplicant","getMyApplicant","validateApplicantKycApproval","hasKycApprovedCreditCheck","hasKycApprovedInfoHandling","hasKycApprovedInfoSharing","myApplicantHasGivenFullApproval","applicantHasGivenFullApproval","getApplicantByCustomerId","getMainApplicant","shouldHaveHouseholds","ensureHouseholds","removeAllHouseholds","canRemoveApplicant","mainApplicant","getFullName","getDisplayName","getPersonFullName","vf","validateApplicantContact","hasValidEmail","hasMatchingConfirmEmail","hasValidMobilePhone","reformatMobilePhone","numericMobilePhone","validateApplicantPep","hasKycPep","hasKycPepRelated","hasKycAmericanCitizen","hasKycCrsTaxObligation","hasSelectedHighRiskCategory","hasSelectedHighRiskCategoryAndItIsRisky","getHighRiskCategory","validateHasSelectedHighRiskCategory","clearHighRiskCategory","selectHighRiskCategory","toSearchForApplicantResult","toApplicantOrUndefined","tooManyRequests","searchForApplicant","ssnOrOrgNumber","start","isJuridicum","isPrivatePerson","isPersonalCompany","isJuridicumCompany","selectedCompanies","getSelectedCompaniesInArray","CaseStep","stepDefinitions","Company","nameTextKey","canGoHome","Loan","Applicant","Collateral","Household","Budget","Summary","Done","StepService","application","textService","getStepDefinitions","steps","shouldShowBudgetStep","companyEconomyService","services","getMySelectedCompany","selectedCompanyEconomy","getCompanyEconomy","hasRevenue","getStepIndex","step","getStepOrdinal","getStepDefinitionByType","validateStepCompany","hasSelectedCompany","validateMySelectedCompanies","validateStepLoan","loanService","validateCaseLoan","validateStepApplicant","personalEconomyService","isMe","validateApplicantPersonalEconomy","validateCompany","validateStepCollateral","collateralService","validateCollateral","euSupportService","validateEuSupport","guarantorService","validateGuarantors","validateStepHousehold","mustHaveHousehold","validateHousehold","maintenanceCostService","validateMaintenanceCost","extLoanService","validateExtLoan","validateStepBudget","validateAttachmentRequestsByRequestType","budgetService","validateBudgets","validateStepSummary","summaryService","validateSummary","validateStepDone","validateAttachmentRequests","validateStep","vr2","saveStep","caseService","getStartStep","currentStep","canGoToStep","isNew","hasValidLoan","hasSubLoans","canLeaveStep","calcStepProgress","calcStepProgressForValidationResult","stepNeedsComplement","getStepStatusText","CompanyEconomyService","newCompanyEconomy","addCompanyEconomy","getCompanyEconomyByCompanyId","removeCompanyEconomy","getBudgetByCompanyEconomy","removeBudget","ces","ensureCompanyEconomy","ensureRequiredRevenueYears","getRequiredYearsOfRevenue","ensureRevenueYear","setNoRevenueYears","hasRevenueSelected","getRevenueByYear","thisYear","lastYear","years","setRevenueValue","reveneuValue","getMySelectedCompanies","validateRequiredRevenues","validateHasMinimumBussinessFocuses","validateBussinessFocuses","getRequiredRevenues","revenueHasZeroOrHigherRevenue","args","UiModelConverter","orgNr","prettySsn","prettyOrgNr","toLocaleDateString","separator","round","substring","ageDifMs","ageDate","abs","getUTCFullYear","ssnDate","getSsnDate","getAgeByDate","CompanyService","normalizeOrgnr","compareOrgnr","addCompany","ensureMinimumBusinessFocuses","existingCompany","getCompanyByOrgnr","ce","attachmentRequestsToRemove","ar","getCompanyByOrgnrInArray","orgNrIsAlsoSsn","n","nOrgNr","nOrgNumber","getCompanyById","getCompanyByIdInArray","addCompaniesToArrayByOrgnr","availableCompanies","applicantCompany","getSelectedCompanies","mySelectedCompanies","isSelectedByApplicant","getPrincipalByCustomerId","addPrincipalFromApplicant","p","principal","validateHasSelectedCompany","validateHasCompanies","anyPhysicumCompanies","hasCompanies","hasMinimumBusinessFocuses","addNewBusinessFocus","setBusiniessFocusesPart","otherBusinessFocus","updateBusinessFocus","getPossibleMainDirectionBusinessFocuses","maxBusinessPart","reduce","agg","countMaxBusinessPart","needsToSpecifyMainDirectionForBusiniessFocuses","hasSpecifiedMainDirectionForBusiniessFocuses","setBusinessFocusMainDirection","businessFocus","changed","currentMainDirection","newMainDirection","businessFocusHasCategory","businessFocusHasBusinessPart","companyBusinessFocusBusinessPartSumIsCorrect","sum","businessPartSum","getBusinessFocusesPartSum","removeBusinessFocus","uiBusinessCategories","uiEUSupports","nameTextkey","uiEstateTypes","Villa","Fritidshus","Hyresrtt","Bostadsrtt","Landbruksfastighet","VrigtBoende","uiHighRiskCategories","uiMunicipalities","uiLoanAimCategories","mainText","mainDisplayText","aimDisplayText","details","y","uiExtLoanTypes","Studieln","KontoKortkredit","AvbetalningskreditBillnBtln","Borgenstagande","Garantier","Nringskredit","BlancokreditVrigaLn","uiLoanDownpaymentTypes","uiEmploymentType","uiBanks","LoanService","validateLoan","hasAmount","getLoanAmount","hasLoan","ensureLoan","getMinimumLoanAmount","getMinimumSubLoanAmount","getMaximumLoanAmount","hasTakeoverLoans","hasAims","getAimsAmountSum","getTakeoverLoansDebtSum","amountSum","hasValidLoanAmount","addNewAim","updateAim","removeAim","removeAllAims","setAimLoanAmountPart","amountPart","getMaximumAimAmount","ensureMinimumLoanAims","addNewLoanTakeOver","takeoverLoan","ensureMinimumTakeoverLoans","updateLoanTakeOver","removeLoanTakeOver","removeAllTakeOverLoans","setLoanTakeOverDebtAmount","setLoanTakeOverBank","setLoanTakeOverLoanNumber","askAboutDownpayment","askAboutDownpaymentOther","getMaximumTakeoverLoanDebtAmount","clearTakeoverLoanDetails","hasTakeoverLoanDetails","hasValidPurposeDescription","validateAimsAndDownpayment","validateTakeoverLoans","aimHasCategory","aimHasDetail","aimHasAmount","aimHasValidAmount","takeoverLoanHasCategory","takeoverLoanHasDetail","takeoverLoanHasAmount","takeoverLoanHasValidAmount","aimsHaveValidAmountSum","takeoverLoansHaveValidAmountSum","validateTakeoverLoan","validateAim","hasDownpaymentType","hasDownpaymentOther","getUiAimCategory","getAimCategoryName","uiAimCategory","getAimDetailName","uiAimDetail","HouseholdService","household","getHouseholdDescription","desc","getApplicantsForHouseholds","ensureHouseholdForApplicant","hasHouseholds","getHouseholdsByCustomerId","newHousehold","addHousehold","hhMember","removeHouseholdExtLoans","removeHouseholdMaintenanceCosts","removeExtLoansForHousehold","removeMaintenanceCostsForHousehold","removeAllExtLoans","removeAllMaintenanceCosts","getFirstHousehold","getHouseholdMembersApplicants","isHouseholdMember","setHouseholdMembersByCustomerIds","customerIds","customerIdsToAdd","getMember","householdMembersToRemove","findIndex","addHouseholdMember","removeHouseholdMember","removeCustomerFromAllHouseholds","removeLoanOwnerForHousehold","setNumberOfChildrenAtHome","newChild","hasValidMembers","hasNumberOfChildren","child","childHasAge","childHasPartial","CollateralService","collateral","addCollateral","removeCollateral","removeAllCollaterals","hasCollateral","postponeCollateralCode","hasMunicipality","hasCode","validateCollaterals","needsForestryPlan","ensureMinimumCollaterals","newCollateral","ArrayService","first","any","keyGetter","collection","get","set","PersonalEconomyService","personalEconomy","addPersonalEconomy","newPersonalEconomy","ensurePersonalEconomy","getPersonalEconomy","setTypeOfEmployment","mayHaveIncomeOfEmployment","needsEmployerInformation","clearEmployerInformation","needsIncomeOfEmployment","setYearOfEmployment","needsMonthOfEmployment","clearEmploymentInformation","clearIncomeOfEmployment","hasEmploymentInformation","getEmploymentDate","pe","needsProofOfEmployment","hasPersonalEconomy","validatePersonalEconomy","hasTypeOfEmployement","hasTypeOfEmployment","hasIncome","validateEmployerInformation","hasEmployer","hasEmploymentYear","hasEmploymentMonth","GuarantorService","guarantor","ensureMinimumGuarantors","newGuarantor","addGuarantor","hasGuarantor","removeGuarantor","removeAllGuarantors","validateGuarantor","hasName","hasPhone","hasCustomerId","getUIName","uiNamed","EuSupportService","getThisYearsEuSupports","ensureMinimumEuSupports","newEuSupport","hasEuSupport","removeAllEuSupports","hasType","hasValidYear","validYear","getEuTypeDisplayName","ExtLoanService","extLoan","newExtLoan","addExtLoan","removeExtLoan","getExtLoansByCustomerId","isExtLoanOwner","removeLoanOwner","extLoanMember","hasValidLoanOwners","isStudentLoan","hasMonthlyCost","hasRedeem","MaintenanceCostService","newMaintenanceCost","newMaintenanceHouse","addMaintenanceCost","removeMaintenanceCost","ensureMaintenanceHouse","getLoanOwnersOwnershipPartSum","maintenanceHouse","ensureLoanOwner","rest","getMaintenanceHousesByCustomerId","removeLoanOwnerByCustomerId","flat","isLoanOwner","hasTypesOfHouses","validateMaintenanceHouse","hasSetHouseType","hasSetKeepHouse","hasKeepHouse","hasMaintenanceCost","hasSetLoanInOtherInstitute","hasLoanInOtherInstitute","hasSetRedeemHouseLoan","hasHouseLoanAmount","hasHouseLoanOwners","partSum","lo","hasHouseLoanOwnersOwnershipPart","hasHouseLoanOwnersOwnershipPartBelow100InSum","accumulatedSum","hasRedeemHouseLoan","uiAttachmentTypes","AttachmentService","postFile","file","formData","append","Accept","downloadAttachment","attachmentId","redirectToDownloadUrl","removeAttachment","findAttachmentInArray","fileId","uploadAttachment","attachmentRequest","addAttachmentRequestNoUpdate","addAttachmentRequest","ensureAttachmentRequest","considerRequestVariation","ars","findAttachmentRequests","getAttachmentRequestsByType","getAttachmentsByType","sameRequstVariation","findAttachments","compareEffectiveRequestType","hasAttachments","attachmentRequestHasAttachments","validateAttachmentRequestsInArray","requestTypeA","requestTypeB","getEffectiveRequestType","ensureBudgetAttachmentRequests","getAttachmentRequestTypeDisplayName","getAttachmentRequestTypeName","prettyCustomerId","getAttachmentTypeDisplayName","attachment","filterRequiredAttachmentRequests","filterOutAttachments","removeAttachments","filterOutAttachmentsByRequestType","filterOutAttachmentRequestsByRequestType","getAttachmentsByAttachmentRequest","getAttachmentsByAttachmentRequests","BudgetService","ensureBudgetsForAllCompanyEconomies","ensureBudget","addBudget","ensureRequiredBudgetYears","getRequiredYearsOfBudget","getRequiredBudgetYears","budgetYear","getBudgetYearByYear","ensureBudgetYear","brs","companyEconomyHasBudget","SummaryService","ensureSummary","summary","canApproveCase","hasCheckedSummaryApproveInformationHandling","hasCheckedSummaryGuranteeCorrectInformation","approveInformationHandling","guaranteeCorrectInformation","hasSentCaseToApproval","ConvertService","guard","formatBytes","bytes","decimals","dm","log","parseFloat","pow","toFixed","numberToIntegerThousandSeparatedString","integerThousandSeparatedStringToNumber","num","toPrettyNormalizedSsn","getAgeBySsn","toIsoDateString","yyyy","mm","dd","Application","instance","bidLoginService","bidBaseUrl","lpBaseUrl","arrayService","stepService","BaseComponent","Component","props","AppComponent","onUnmount","cwu","componentWillUnmount","observeUpdate","specificObserveUpdate","observeDeepUpdate","specificObserveDeepUpdate","specificObserve","specificObserveDeep","refresh","refreshed","objserver","THtml","render","className","dangerouslySetInnerHTML","__html","defaultProps","T","withRouter","pathname","xs","gifBackground","BirdLoader","browserHandler","ie","src","default","white","LoadingPage","interval","showLoadingAnimation","componentDidMount","clearTimeout","PageStyle","PageContent","classNames","ClassNames","style","Button","link","icon","label","labelTextkey","disabled","onClick","autoFocus","autofocus","title","FormUnitPadding","FormUnitSize","FormLeftMargin","FormUnit","size","padding","leftMargin","flex","Normal","None","Loader","botticelliBlue","loaderTextKey","LoginStateCancelled","ssnChange","values","formattedValue","includes","loginStateCode","qrCode","setLoginDevice","other","setLoginStateCode","redirectAfterOkLogin","history","handleLoginResult","startLoginManually","cancelLogin","loginStart","loginErrorCount","checkLoginStatus","error","isComplete","errorsSoFar","isAborted","canLogin","isLoggingIn","otherDevice","sameDevice","hasAutostartToken","level","renderAs","Required","Help","arrow","arrowSize","background","color","content","helpTextkey","helpText","direction","distance","eventOn","eventOff","eventToggle","forceDirection","hoverDelay","tagName","tipContentHover","useDefaultStyles","useHover","Heading","hasValidHelpTextkey","labelText","data-textkey","InfoBoxIcon","InfoBox","textkey","visible","to","infoTextKey","warningTextKey","showInfoMessage","showWarningMessage","Gray","info","warning","precision","Number","isInteger","shift","StatusIndicator","strokeWidth","circleRadius","statusIndicatorSizePx","circleCenter","circleCenterPx","ordinalFontSize","circleRadiusPx","PI","current","progress","StatusIndicatorClassName","iconClassName","isCurrent","isCurrentStep","ordinalClassName","complete","circleClassName","animationProps","useSpring","from","width","height","cx","cy","circle","strokeDashoffset","strokeDasharray","fontSize","lineHeight","ordinal","OverlayStyles","Modal","modalDomHandle","getElementById","overlayClassNames","Classnames","overlayClassName","overlayStyle","ReactDOM","createPortal","overlayCloseOnClick","handleClose","modalClassName","Darken","ButtonGroupLayout","ButtonGroup","Stretch","layout","Nowrap","DeleteButton","modal","setOpen","useState","isOpen","handleClickNo","questionTextkey","s","HomeCase","selectedCase","deletedCase","startStep","canDelete","needsComplement","statusText","redirectToCase","addCase","hasCases","canAddCase","Transparent","StepHeader","toLocaleString","titleTextkey","descriptionTextkey","Label","htmlFor","for","Messages","uq","lineBreak","StepFooter","innerGoToNext","getValidation","hasTouchedNextButton","onTriggerImmidiateValidation","onGoToNext","canSave","goHomeTextkey","displayGenericErrorMessage","goToNextTextkey","onGoHome","canGoToNext","Checkbox","uniqueId","touched","hasErrors","onBlur","handleBlur","onChange","handleChange","dirty","CheckboxText","handleClick","changeEvent","handleCheckedChange","ref","textKey","textIsHtml","StepFormContext","React","createContext","touches","immidiateAllValidatorsVisibleBefore","StepForm","theFormData","Provider","Validation","setTouched","setDirty","rendered","setRendered","validate","Consumer","stepFormData","errorItems","validationResult","localValidationResult","errors","forObject","createErrorItems","shouldBeImmidiated","isTouchedOrImmidiated","immediate","showMessages","touchValidation","cloneChildren","cloneElement","target","handleBlurInner","ApplicantApproval","onCreditCheckChange","onInfoHandlingChange","onInfoSharingChange","canEdit","Large","Justify","AlignItems","FormUnitRow","justifyContent","alignItems","ValueType","SpaceBetween","FlexStart","uiBudgetYearItems","valueType","positive","negative","both","Money","onValueChange","thousandSeparator","thousandsGroupStyle","thousandGroupStyle","decimalScale","suffix","placeholder","displayType","customStyles","control","providedStyles","borderWidth","borderRadius","backgroundColor","boxShadow","minHeight","outline","isFocused","option","border","isDisabled","isSelected","opacity","transition","valueContainer","borderColor","menuIsOpen","borderStyle","borderLeftWidth","borderTopWidth","borderBottomWidth","borderRightWidth","menuList","margin","menu","indicatorsContainer","indicatorSeparator","display","dropdownIndicator","clearIndicator","DropdownIndicator","ClearIndicator","Select","options","noSelectableOptionsText","noSelectableOptionsTextkey","autocomlete","styles","inputId","components","placeholderTextkey","noOptionsMessage","isSearchable","isMulti","inputProps","autocomplete","LoanNewAim","removeAimClicked","aimCategoryCodeChanged","aimDetailCodeChanged","loanAmountPartChanged","floatValue","index","aimCategoryCode","hasAimCategoryCode","aimDetailCode","maxAmount","aimCounter","aimCategoryOption","detailOptions","aimCategoryOptionResult","aimCategoryOptions","Center","canEditAmountPart","LoanNewAims","touchValidationMatchingSums","allTouched","addAimClicked","bcOption","canAddNewLoanAim","TextboxType","Textbox","maxLength","maxlength","LoanDownpayment","downpaymentTypeOptions","downpaymentSourceChanged","downpaymentOtherChanged","askAboutOther","CheckboxGroup","currentTarget","valueArray","isChecked","Horizontal","orientation","Vertical","checkbox","LoanTakeOver","loanNumberChanged","loanAmountChanged","initialAimCategoryChanged","initialAimDetailChanged","loanBankChanged","deleteLoan","hasTakeoverLoanDetailsChanged","showTakeoverLoanDetails","loanCounter","bankOptions","LoanTakeOvers","addLoanTakeOver","bank","enableAddTakeoverLoan","Textarea","small","medium","large","disableResize","StepLoan","mainLoanPurposeChanged","takeoverChecked","newloanChecked","confirmRemoveAllTakeOverLoans","confirmRemoveAllAims","mainLoanPurposeBlur","mainPurposeTouched","purpouseDescriptionOnChange","showClearAimsModal","showClearTakeoverLoansModal","triggerImmidiateValidation","showSum","mainLoanPurposesOptions","mainLoanPurposesValues","Xlarge","Small","renderText","goHome","goNext","ApplicantContact","mobilePhoneChanged","mobilePhoneBlurred","emailChanged","showConfirmEmail","tryUpdateEmail","emailConfirmChanged","confirmEmail","handleNotifyByChange","notifyBy","initialNotifyBy","stateEmailMatchesConfirm","tel","Radiobutton","group","RadiobuttonGroup","radio","PepYouOptions","PepRelatedOptions","AmericanCitizenOptions","CrsTaxObligationOptions","ApplicantPep","pepYouOptions","pepRelatedOptions","americanCitizenOptions","crsTaxObligationOptions","mapRadiogroupOptionsWithId","pepYouChanged","pepRelatedChanged","americanCitizenChanged","crsTaxObligationChanged","pepYouValue","pepRelatedValue","americanCitizenValue","crsTaxObligationValue","uiLongMonths","SelectMonth","monthChanged","ApplicantIncome","typeOfEmploymentOptions","typeOfEmploymentChanged","addIncomeOfEmployment","incomePerMonthChanged","employerChanged","yearOfEmploymentChanged","setYear","yearOfEmploymentBlur","modYear","newYear","monthOfEmploymentChanged","addIncomeOfEmploymentChanged","showIncomeOfEmployment","uiTypeOfEmployment","typeOfEmploymentValue","XSmall","PersonApplicantItem","canRemove","hasRevenueOptions","CompanyHasRevenue","hasRevenueChanged","hasNotRevenue","hasRevenueValue","ApplicantRiskBusiness","highRiskBusinessesList","highRiskBusinessChanged","localeCompare","empty","unshift","CompanyRevenue","budgetYearChanged","Percent","allowNegative","CompanyBusinessFocuses","businessCategoryOptions","addBusinessCategoryClicked","removeBusinessCategoryClicked","businessCategoryCodeChanged","businessPartChanged","BusinessCategoryID","BusinessCategory","mainDirectionChanged","showMainDirection","mainDirectionBusinessFocuses","testBusinessFocus","fs","isAllAddedBusinessFocusesValid","enableAddBusinessFocus","hasBusinessCategoryCode","businessCategoryOption","businessCategoryOptionResult","CompanyRevenueChunk","HeaderButtonLayout","HeaderButton","Left","Right","PersonalCompanyApplicantItem","companyHasRevenue","showRevenue","companyDisplayName","IncorporatedCompanyApplicantItem","ApplicantItem","ScrollOverflowIndicator","titleText","RadiobuttonTable","nodeRef","hasOverflow","element","scrollWidth","clientWidth","cell","stopPropagation","createRef","addEventListener","componendWillUnmount","removeEventListener","tableData","head","column","headIndex","row","rowIndex","getElementsByTagName","cellIndex","cellObj","CompanySelect","companyOrApplicantSelected","tag","companySelected","applicantSelected","makeTableData","selectedApplicant","FormUnitFieldAndButton","AddApplicant","persOrgNumberChanged","nativeEvent","persOrgNumber","searchResult","searchTerm","getSearchTerm","catch","scrollToApplicantsTabs","addPersonOrCompanyAsApplicant","addPrivatePersonAsApplicant","addSelectedCompanyAsApplicant","requestAnimationFrame","el","getBoundingClientRect","top","pageYOffset","console","scrollTo","behavior","hasSearchResultData","canSearch","canAdd","showSearchButton","TabPanels","componentDidUpdate","prevProps","prevNumOfChildren","nextNumOfChildren","selectedTab","tabs","Selected","Children","StepApplicant","onAddApplicant","updateSteps","onRemoveApplicant","applicantCount","StepCompany","findCompanies","searchingForCompanies","searchForCompaniesFailed","hasSearchedForCompanies","highRiskBusiness","fullName","allowPromiseOfBuyinAgriForestryProperty","registeredOnText","CollateralCollaterals","municipalityOptions","collateralMunicipalityChanged","collateralCodeChanged","addCollateralClicked","removeCollateralClicked","postponeCollateralCodeChange","addedCollateralsIsValid","canAddCollateral","showDelete","CollateralEUSupports","euSupportTypeOptions","euSupportAmountChanged","euSupportTypeChanged","euSupportType","euSupportTypeValue","SSN","onPaste","mask","CollateralGuarantors","guarantorNameChanged","guarantorPhoneChanged","guarantorSsnChanged","addGuarantorClicked","removeGuarantorClicked","guarantorsAreValid","collateralTypes","StepCollateral","handleCollateralTypeChange","colTypes","modalProps","addedCollateral","removedCollateral","FASTIGHET","collateralType","modalTitleTextkey","modalQuestionTextkey","EUSTOD","BORGENSMAN","openModal","handleClickYes","hasRemovedCollateral","initialCollateralTypes","collateralTypeCheckboxes","Panel","ApplicantSelect","triggerAutoSelectIfSingleApplicant","autoSelectIfSingleApplicant","isSingleApplicant","hasPreviousSelection","selectedCustomerIds","selectionChanged","handleSingleChange","applicantCustomerId","arr","selectedCount","selected","radioOptions","redeemOptions","HouseholdExtLoan","extLoanTypeOptions","uqid","amountChanged","monthlyCostChanged","redeemChanged","ownersSelectionChanged","ensureMaxNumberOfLoanOwners","getMaxNumberOfLoanOwners","maxNumberOfLoanOwners","extLoanTypeChanged","uiExtLoan","extLoanTypeValue","redeemValue","ownersApplicants","ownersCustomerIds","maxApplicantSelect","hasSingleOwnersApplicant","HouseholdExtLoans","addExtLoanServicerClicked","removeExtLoanServicerClicked","canAddExtLoan","svc","keepHouseOptions","loanInOtherInstituteOptions","HouseholdMaintenanceHouse","estateTypeOptions","maintenanceCostChanged","ownedPartChanged","keepHouseChanged","loanInOtherInstituteChanged","estateTypeChanged","uiEstateType","customerName","yesNoValue","estateTypeValue","isTenancy","isApartment","keepHouseValue","loanInOtherInstituteValue","HouseholdMaintenanceCost","HouseholdMaintenanceCosts","addMaintenanceCostClicked","removeMaintenanceCostClicked","canAddMaintenanceCost","m","timePartOptions","ChildTimePart","timePartChanged","timePart","timePartValue","Age","HouseholdEdit","numberOfChildrenAtHomeOptions","membersChanged","childTimePartChanged","childCareAmountChanged","childMaintenanceCostChanged","childMaintenanceIncomeChanged","numberOfChildrenAtHomeChanged","childAgeChanged","numberOfChildrenAtHomeValue","householdDescription","membersCustomerIds","availableMemberApplicants","showChildMaintenanceIncome","Households","StepHousehold","IconType","Icon","iconType","ProvidedAttachment","downloadFile","deleteFile","showType","allowDelete","ProvidedAttachments","Upload","handleDrop","acceptedFiles","onUpload","handleReject","rejectedFiles","onRejected","onDropAccepted","onDropRejected","minSize","maxSize","accept","getRootProps","getInputProps","isDragActive","isDragAccept","isDragReject","DragAccept","DragReject","multiple","clickUpload","dragUpload","RequestedAttachment","files","clearRejectedFiles","fileRejections","message","RequestedAttachments","groupAttachmentRequests","mappedRequests","req","rt","mappedRequestType","groupBy","getSortedGroupedAttacmentRequests","requiredOnly","uiAttachmentRequests","firstAttachmentRequest","firstType","uploadTextKey","requiredAttachmentRequests","showWarning","bullets","Warning","bullet","ManualBudget","renderRow","bys","rowType","budgetYearItem","handleValueBlur","handleValueChange","calculateSums","uz","calculations","by","calculation","flipped","transform","mass","tension","friction","div","AccordionComponent","active","onEnd","useRef","useMeasure","overflow","onRest","hidden","aria-hidden","Accordion","open","toggleAccordion","toggleActive","prev","setActive","StepBudget","showAttachmentReqs","showAttachments","Table","headingRow","tableRows","heading","rowKey","col","colKey","SelectedCompanySummary","tableRowsData","prettyDateString","KeyValueList","CompanyHasRevenueSummary","CompanyHighRiskBusinessSummary","isHighRiskBusiness","highRiskBusinessCode","highRiskBusinessName","CompanyRevenueSummary","CompanyBusinessFocusesSummary","getBusinessCategory","uiCategory","getBusinessCategoryText","businessCategoryObject","needsMainDirection","CompanySummary","formUnitSize","accordionOpen","LoanAmountSummary","LoanTakeOverSummary","createTakeoverLoanRows","row1","header2","row2","tables","rows","LoanAimsSummary","LoanDownpaymentSummary","getDownpaymentText","LoanSummary","ApplicantContactSummary","kvList","ApplicantIncomeSummary","peTypeOfEmployment","ApplicantPepSummary","checkPep","pepParam","PersonApplicantItemSummary","PersonalCompanyApplicantItemSummary","hideCompanyInformation","IncorporatedCompanyApplicantItemSummary","ApplicantItemSummary","ApplicantsSummary","hideMyApplicant","CollateralRealEstateSummary","CollateralEUSupportSummary","CollateralGuarantorsSummary","CollateralSummary","HouseholdMembersSummary","getHouseholdMember","HouseholdChildrenSummary","HouseholdChildMaintenanceSummary","ceil","HouseholdMaintenanceCostsSummary","getHouses","getHouseTypeText","getLoanOwners","applicantString","keyValueList","makeKeyValueList","kvs","HouseholdExtLoansSummary","getLoanTypeTextByUiId","loanTypeId","loanTypeObject","uiType","getLoanTypeName","HouseholdSummary","ManualBudgetSummary","columnName","BudgetSummary","showManualBudgets","ApproveApplication","approveInformationHandlingChanged","guaranteeCorrectInformationChanged","StepSummary","trySendApplication","sendApplication","canSeeApprove","canGoNext","canApprove","showApproveNotValidError","approveButtonShoulLookEnabled","StepDone","goPrev","CaseSteps","makeStepContext","stepper","getCurrentValidation","initStepDefinitions","StatusBar","breakpoints","currentBreakpoint","xl","lg","md","sm","smxs","CaseStepper","definitions","definition","states","switching","onStepped","initToStart","goToFirst","tryStepTo","getStep","tryStepFromTo","goTo","stepToGoTo","validateCurrent","clearCurrentValidation","clearValidation","setLoading","setStep","triggerStepped","stepStateChanged","goToStep","validatedStep","stepState","LoggedOutPage","logoutReason","System","MaintenancePage","AdminCaseStatus","AttachmentSection","AdminCasePage","leaveCase","markCaseAsHandled","confirm","AdminPage","searchNew","pageIndex","noMore","searchForCases","searchMore","searching","pageSize","searchCaseNumberChanged","caseNumber","searchCustomerIdChanged","appliedCasesChanged","appliedCases","ongoingCasesChanged","ongoingCases","closedCasesChanged","closedCases","leftCase","neverSearched","canLoadMore","routes","exact","strict","routeIsProtected","component","requiredProp","mustBeAdmin","ProtectedRoute","loggedIn","loggedOut","PageRouter","routeProps","MobileNav","mobileNavButton","mobileNavMenu","closeMobileNav","openMobileNav","toggleMobileNav","handleResize","outerWidth","Breakpoints","handleBodyClick","notClickOnMenuButton","isNil","jQuery","closest","notClickOnMenu","handleMobileNavClick","handleMenuButtonClick","debounce","mobileMenuClassNames","Compact","compactTop","isOnHomePage","handleClickOnHome","SaveModal","handleBeforeUnload","preventDefault","returnValue","handleWindowScroll","scrollY","handleClickOnLogout","logoutSaveModalIsOpen","askBeforeGoToHome","navigateSaveModalIsOpen","handleLogoutSaveClickYes","handleLogoutSaveClickNo","handleNavigateSaveClickYes","handleNavigateSaveClickNo","throttle","maintenance","isOnLoginPage","logoutSaveModal","navigateSaveModal","logo","alt","EbbotChat","botId","show","useEffect","Ebbot","chatTagId","js","parentNode","insertBefore","xxs","App","alloc","app","maintenanceModeFromNils","ebbotEnabled","ebbotBotId","fluid"],"mappings":"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","file":"static/js/main.a36679eb.chunk.js","sourcesContent":["export * from './selmamodels/Case';\r\nexport * from './selmamodels/Company';\r\nexport * from './selmamodels/Loan';\r\nexport * from './selmamodels/Applicant';\r\nexport * from './selmamodels/Collateral';\r\nexport * from './selmamodels/Household';\r\nexport * from './selmamodels/Attachment';\r\nexport * from './selmamodels/Budget';\r\n","import { StakeholderType } from \"../../libs/SMELPOClient\";\r\n\r\nexport interface KYC {\r\n\tid:string; // guid.\r\n\r\n\thighRiskCategoryCode?: string;\r\n\tisAmericanCitizen?: boolean;\r\n\tisCrsTaxObligated?: boolean;\r\n\r\n\tapprovedInfoSharing?: boolean; // ucAware\r\n\tapprovedCreditCheck?: boolean; // ucAccepted\r\n\tapprovedInfoHandling?: boolean; // gdprAccepted\r\n\r\n\tapprovedInfoSharingDB?: boolean; // ucAware saved in database\r\n\tapprovedCreditCheckDB?: boolean; // ucAccepted saved in database\r\n\tapprovedInfoHandlingDB?: boolean; // gdprAccepted saved in database\r\n\r\n\tisPep?: boolean;\r\n\t//isPepFunction?: string;\r\n\tisPepRelated?: boolean;\r\n\t//isPepRelatedFunction?: string;\r\n}\r\n\r\nexport interface Applicant {\r\n\tid:string;\r\n\t//processId:string; // used by \r\n\tcustomerId: string; // customerId is swedish ssn or corporate organisation number\r\n\tfirstName?: string;\r\n\tlastName?: string;\r\n\tstreetAddress?: string;\r\n\tpostalAddress?: string;\r\n\tpostalCode?: string;\r\n\temail?: string;\r\n\temailConfirm?: string;\r\n\tmobilePhone?: string;\r\n\tnotifyByEmail?: boolean;\r\n\tnotifyByMobilePhone?: boolean;\r\n\tstakeholderType?: StakeholderType // StakeholderEnum;\r\n\tkyc?: KYC;\r\n\twillBuyAgriForestryProperty?: boolean;\r\n}\r\n\r\n// export enum StakeholderEnum {\r\n// \tBONDSMAN, // 'Borgensman'\r\n// \tOPERATING_COMPANY, // 'Driftbolag'\r\n// \tSPOUSE, // 'Maka/Make/regpartner'\r\n// \tDOMESTIC_PARTNER, // 'sambo'\r\n// \tBOND_OWNER, // 'ägarandel i pant'\r\n// \tMAJORITY_OWNER, // 'ägare juridiskt över 50%'\r\n// \tCOMMUNITY_OF_INTERESTS, // 'övriga med ekonomisk intressegemenskap'\r\n// \tAPPLICANT // 'SOKANDE'\r\n// }\r\n\r\nexport enum LPEmploymentEnum {\r\n\t// employment mapping to Loan Process \r\n\tPERMANENT, // - Anställd, tills-vidare-anställd \r\n\tTEMPORARY, // - Tidbegränsad anställning \r\n\tPROBATIONARY, // - Provanställning \r\n\tUNEMPLOYMENT_INSURANCE, // - Arbetslöshetskassa \r\n\tSELF_EMPLOYED, //- Eget företag \r\n\tSTUDENT_AID, // - Studiestöd \r\n\tPENSION // - Inkomst av pension\r\n}\r\n\r\n/*\r\nexport enum SAPEmploymentEnum {\r\n\t// employment mapping to Loan Process \r\n\tPERMANENT, // - Anställd, tills-vidare-anställd \r\n\tTEMPORARY, // - Tidbegränsad anställning \r\n\tPROBATIONARY, // - Provanställning \r\n\tUNEMPLOYMENT_INSURANCE, // - Arbetslöshetskassa \r\n\tSELF_EMPLOYED, //- Eget företag \r\n\tSTUDENT_AID, // - Studiestöd \r\n\tPENSION // - Inkomst av pension\r\n}*/\r\n\r\n\r\n/**\r\n * personal economy for KALP us\r\n * @export\r\n * @interface PersonalEconomy \r\n */\r\nexport interface PersonalEconomy {\r\n\tid: string; // personalEconomyId\r\n\t//processId: string;\r\n\tcustomerId: string; // guid\r\n\t//sapEmployment?: SAPEmploymentEnum; // originally defined in Applicant\r\n\t//lpEmployment?: LPEmploymentEnum; // originally defined in Applicant\r\n\tincome?: number; // // SEK / month //Inkomst av tjänst.\r\n\tyearlyIncome?: number; // SEK / year //Årlig inkomst från näringsverksamhet\r\n\ttypeOfEmployment?: LPEmploymentEnum // EmployeementType;\r\n\temployer?: string; // name of company\r\n\tyearOfEmployment?: number;\r\n\tmonthOfEmployment?: number;\r\n}\r\n","\r\nexport interface Loan {\r\n\t// processId?: ProcessId;\r\n\tid: string; // GUID, loanId\r\n\tnumber?: string; // loanNumber\r\n\t// purposeOfLoan?: MainPurposes;\r\n\tamount?: number; // loanAmount // obsolete.\r\n\taims?: Aim[];\r\n\ttakeoverLoans?: TakeoverLoan[];\r\n\ttakeOver?: boolean;\r\n\tdownpaymentOther?: string;\r\n\tdownpaymentType?: DownpaymentSource;\r\n\tdownPaymentAmount?: number;\r\n\tpurposeDescription?: string;\r\n}\r\n\r\n/*\r\nexport enum MainPurposes {\r\n\tBUY, // Kp = 'Köp',\r\n\tTAKEOVER, // Vertag = 'Övertag',\r\n\tEXTENSION, // UtkningLn = 'Utökning lån',\r\n\tUNPLEDGED // UtlningMotObelnat = 'Utlåning mot obelånat'\r\n}\r\n*/\r\n\r\nexport enum DownpaymentSource {\r\n\tSALE_OF_PROPERTY,\r\n\tSAVINGS,\r\n\tBLANCO_LOAN,\r\n\tOTHER\r\n}\r\n\r\nexport interface Aim {\r\n\tid: string; // guid //aimId: AimId;\r\n\taimCategory?: string; // purposeText\r\n\taimDetail?: string; // aimText\r\n\tloanAmountPart?: number; // money, part of loan.amount\r\n}\r\n\r\n// export enum AimType {\r\n// \tFastighetskpPrivatbostad = 'Fastighetsköp - privatbostad',\r\n// \tFastighetskpAnnanFastighet = 'Fastighetsköp - annan fastighet',\r\n// \tFastighetskpJordbruk = 'Fastighetsköp - jordbruk',\r\n// \tFinansieringBefintligBostad = 'Finansiering befintlig bostad',\r\n// \tFinansieringBefintligBostadOmlggningInternt = 'Finansiering befintlig bostad (omläggning internt)',\r\n// \tNytillbyggnadrenoveringMjlkstall = 'Ny/tillbyggnad/renovering mjölkstall'\r\n// }\r\n\r\nexport interface TakeoverLoan {\r\n\tid: string; // guid //takeoverLoanId;\r\n\tcreditInstitute?: string; // Bank\r\n\tloanNumber?: string; // Lånenummer hos nuvarande bank\r\n\tdebtAmount?: number; // Skuld I annan bank\r\n\taimCategory?: string; // # Laddas från mainpurposes.json\r\n\taimDetail?: string; //' # Laddas från mainpurposes.json\r\n\t//interest?: number; //' # Dessa används inte idag men är räntan kunden betalar på nuvarande lån i annan bank som ska lösas\r\n\t//period?: number; //' # Används inte idag med avser den räntebindningstid kunden har på nuvarande lån i annan bank som ska lösas\r\n}\r\n","\r\n\r\nexport interface TaxedOwner {\r\n\tid: string; // guid\r\n\tcustomerId: string; // customerId of taxedOwner\r\n}\r\n\r\n/**\r\n * Säkerheter för lånet, om köp, även andra fastigheter kan användas som säkerhet för lånet\r\n * @export\r\n * @interface CollateralType\r\n */\r\nexport interface Collateral {\r\n\t//processId: ProcessId;\r\n\tid?: string; // collateralId, guid\r\n\tcustomerId?: string; // guid\r\n\tcode?: string; // collateralCode\r\n\tname?: string; // collateralName\r\n\ttaxedOwners?: TaxedOwner[];\r\n\tmunicipality?: string;\r\n\tstreet?: string;\r\n\tareal?: number;\r\n\tage?: number;\r\n\tuseAsCollateral?: boolean;\r\n\tbuyCollateral?: boolean;\r\n\tpostponeCollateralCode?: boolean;\r\n}\r\n\r\n\r\n\r\nexport interface Guarantor {\r\n\t//processId: string;\r\n\t/**\r\n\t * TBD\r\n\t * @type {string}\r\n\t * @memberof GuarantorType\r\n\t */\r\n\tid: string; //gaurantorId?: string;\r\n\t/**\r\n\t * TBD\r\n\t * @type {string}\r\n\t * @memberof GuarantorType\r\n\t */\r\n\tname?: string;\r\n\t/**\r\n\t * TBD\r\n\t * @type {string}\r\n\t * @memberof GuarantorType\r\n\t */\r\n\tphone?: string;\r\n\t/**\r\n\t * TBD\r\n\t * @type {string}\r\n\t * @memberof GuarantorType\r\n\t */\r\n\tguarantorCustomerId?: string;\r\n}\r\n\r\nexport enum EUSupportEnum {\r\n\tEU = 1, // ', name:'EU-stöd'},\r\n\tEUNAT = 2, // ', name:'EU-stöd och nationellt stöd'},\r\n\tEUNAT_NOMILK = 3, //', name:'EU-stöd och nationellt stöd, utan mjölk'},\r\n\tNAT_NOMILK = 4, //', name:'Nationellt stöd, utan mjölk'},\r\n};\r\n\r\nexport interface EUSupport {\r\n\t//processId: string;\r\n\t/**\r\n\t * Unique identifier for EU-Support\r\n\t * @type {string}\r\n\t * @memberof EUSupportType\r\n\t */\r\n\tid: string;//euId: string; \r\n\t/**\r\n\t * \r\n\t * @type {EUType}\r\n\t * @memberof EUSupportType\r\n\t */\r\n\teuType?: EUSupportEnum;\r\n\t/**\r\n\t * summerat EU-stöd\r\n\t * @type {number}\r\n\t * @memberof EUSupportType\r\n\t */\r\n\tsupportAmount?: number;\r\n\t/**\r\n\t * EU-stödet gäller år\r\n\t * @type {string}\r\n\t * @memberof EUSupportType\r\n\t */\r\n\tsupportYear?: string;\r\n}\r\n\r\n\r\n\r\n","export interface IService {\r\n}\r\n\r\nexport abstract class BaseService implements IService {\r\n constructor() {\r\n }\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { object } from 'prop-types';\r\nimport { ConfigurationService } from './ConfigurationService';\r\n\r\nexport class UiLanguage {\r\n\tcode: string;\r\n\ttexts: Map;\r\n\r\n\tconstructor(code: string) {\r\n\t\tthis.code = code;\r\n\t\tthis.texts = new Map();\r\n\t}\r\n}\r\n\r\nexport class UiLanguageService extends BaseService {\r\n\turl: string; // override\r\n\tunderrideUrl: string; // underride\r\n\r\n\tconstructor(private configurationService: ConfigurationService) {\r\n\t\tsuper();\r\n\r\n\t\tconst config = configurationService.getConfiguration();\r\n\r\n\t\tthis.url = config.smeBaseUrl + \"/System/GetUiTexts?lang={CODE}\";\r\n\t\tthis.underrideUrl = \"{CODE}.json\";\r\n\t}\r\n\r\n\tprivate mapDataToUiLanguage = (code: string, result: any): UiLanguage => {\r\n\t\tlet uiLanguage = new UiLanguage(code);\r\n\t\tuiLanguage.texts = result.texts;\r\n\t\treturn uiLanguage;\r\n\t};\r\n\r\n\tload(code: string): Promise {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.loadTexts(this.url, code),\r\n\t\t\tthis.loadTexts(this.underrideUrl, code)\r\n\t\t]).then(result => {\r\n\t\t\tlet uiLanguage: UiLanguage = result[1];\r\n\t\t\tif (result[0].texts) {\r\n\t\t\t\tObject.assign(uiLanguage.texts, result[0].texts);\r\n\t\t\t}\r\n\t\t\treturn uiLanguage;\r\n\t\t})\r\n\t}\r\n\r\n\tloadTexts(urlPattern: string, code: string): Promise {\r\n\t\tlet url = urlPattern.replace(\"{CODE}\", code);\r\n\t\tlet p = fetch(url);\r\n\t\tlet p2 = p.then((result) => {\r\n\t\t\treturn result.json();\r\n\t\t});\r\n\t\tlet p3 = p2.then((result) => {\r\n\t\t\treturn this.mapDataToUiLanguage(code, result);\r\n\t\t});\r\n\t\treturn p3;\r\n\t}\r\n\r\n\r\n}\r\n","import { BIDLoginService, BidLoginResult, BidCheckLoginResult, ServerSession, QrCodeResult } from './BIDLoginService';\r\nimport { BaseService } from './BaseService';\r\nimport { StateService } from './StateService';\r\nimport { ConfigurationService } from './ConfigurationService';\r\n\r\nexport interface Session {\r\n\tlogin?: Login;\r\n\tlogout?: Logout;\r\n}\r\n\r\nexport interface Login {\r\n\ttime: Date;\r\n\tssn: string;\r\n\tadmin: boolean;\r\n\tfirstName?: string;\r\n\tlastName?: string;\r\n}\r\n\r\nexport interface Logout {\r\n\ttime: Date;\r\n\treason: LogoutReason\r\n}\r\n\r\nexport enum LogoutReason {\r\n\tUser = 1, // User choose to logout\r\n\tTimeout = 2, // Session timed out.\r\n\tSystem = 3 // System forced logout b/c error or maintenance.\r\n}\r\n\r\nexport class SessionService extends BaseService {\r\n\tprivate stateService: StateService;\r\n\tprivate bidService: BIDLoginService;\r\n\tsessionLoopHandle: any | undefined;\r\n\r\n\tconstructor(stateService: StateService, bidService: BIDLoginService, private configurationService: ConfigurationService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.bidService = bidService;\r\n\t}\r\n\r\n\tprivate startSessionLoop() {\r\n\t\tif (this.sessionLoopHandle)\r\n\t\t\treturn; // already started.\r\n\t\tthis.sessionLoopHandle = setInterval(() => {\r\n\t\t\tthis.bidService.getSession().then(result => {\r\n\t\t\t\tthis.handleServerSession(result);\r\n\t\t\t})\r\n\t\t}, 60 * 1000);\r\n\t}\r\n\r\n\tprivate stopSessionLoop() {\r\n\t\tif (this.sessionLoopHandle) {\r\n\t\t\tclearInterval(this.sessionLoopHandle);\r\n\t\t\tthis.sessionLoopHandle = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t// Call this after ok login.\r\n\tloadSession(): Promise {\r\n\t\treturn this.bidService.getSession().then(result => {\r\n\t\t\tthis.handleServerSession(result);\r\n\t\t\tif (result.isLoggedIn) {\r\n\t\t\t\tthis.startSessionLoop();\r\n\t\t\t}\r\n\t\t\treturn this.stateService.state.session;\r\n\t\t})\r\n\t}\r\n\r\n\thandleServerSession(serverSession: ServerSession) {\r\n\t\tif (!serverSession.isLoggedIn) {\r\n\t\t\tif (this.isLoggedIn()) {\r\n\t\t\t\tthis.logout(LogoutReason.Timeout);\r\n\t\t\t\t//console.log('User was logged out via server session.');\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (!this.isLoggedIn()) {\r\n\t\t\t\t//console.log('User was logged in via server session.');\r\n\t\t\t\tlet newLogin = this.createNewLogin(serverSession);\r\n\t\t\t\tthis.setNewLogin(newLogin);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisLoggedIn(): boolean {\r\n\t\treturn this.stateService.state.session.login !== undefined;\r\n\t}\r\n\r\n\tisAdmin(): boolean {\r\n\t\tif (!this.isLoggedIn())\r\n\t\t\treturn false;\r\n\r\n\t\tvar login = this.getLogin();\r\n\t\treturn login?.admin === true;\r\n\t}\r\n\r\n\tgetLogin(): Login {\r\n\t\tlet login = this.stateService.state.session.login;\r\n\t\tif (!login) {\r\n\t\t\tthrow new Error('Not logged in.');\r\n\t\t}\r\n\t\treturn login;\r\n\t}\r\n\r\n\tgetSsn(): string {\r\n\t\tconst login = this.getLogin();\r\n\t\tconst ssn = login.ssn;\r\n\t\treturn ssn;\r\n\t}\r\n\r\n\r\n\tgetLogout(): Logout | undefined {\r\n\t\tif (this.isLoggedIn())\r\n\t\t\tthrow new Error('Not logged out.');\r\n\r\n\t\tlet logout = this.stateService.state.session.logout;\r\n\t\treturn logout;\r\n\t}\r\n\r\n\tdidLogOut(): boolean {\r\n\t\treturn this.stateService.state.session.logout !== undefined;\r\n\t}\r\n\r\n\tfakeLogin(ssn?: string): Promise {\r\n\t\tif (ssn)\r\n\t\t\treturn this.bidService.fakeLogin(ssn, 'LOCAL')\r\n\t\t\t\t.then(this.handleLoginSuccess, this.handleLoginError);\r\n\t\telse\r\n\t\t\treturn this.bidService.getFakeLogin(ssn)\r\n\t\t\t\t.then(this.handleLoginSuccess, this.handleLoginError);\r\n\t}\r\n\r\n\tlogout(reason: LogoutReason = LogoutReason.User): Promise {\r\n\t\tlet state = this.stateService.state;\r\n\t\tlet session = state.session;\r\n\t\tsession.login = undefined;\r\n\t\tsession.logout = {\r\n\t\t\ttime: new Date(),\r\n\t\t\treason: reason\r\n\t\t};\r\n\t\tthis.bidService.logout();\r\n\t\tstate.cases = undefined;\r\n\t\tstate.case = undefined;\r\n\t\t//this.stateService.replace(prevLogin, login);\r\n\t\tthis.stateService.update(session);\r\n\t\tthis.stateService.update(state);\r\n\t\tthis.stopSessionLoop();\r\n\t\treturn Promise.resolve(session);\r\n\t}\r\n\r\n\tprivate createNewLogin(serverSession: ServerSession): Login {\r\n\t\tconst ss = serverSession;\r\n\t\tlet login = {\r\n\t\t\ttime: new Date(),\r\n\t\t\tssn: ss.ssn,\r\n\t\t\tadmin: ss.isAdmin,\r\n\t\t\tfirstName: ss.firstName,\r\n\t\t\tlastName: ss.lastName\r\n\t\t};\r\n\t\treturn login;\r\n\t}\r\n\r\n\tprivate setNewLogin(login: Login) {\r\n\t\tlet session = this.stateService.state.session;\r\n\t\tlet prevLogin = session.login;\r\n\t\tsession.login = login;\r\n\t\tsession.logout = undefined;\r\n\t\tthis.stateService.replace(prevLogin, login);\r\n\t\tthis.stateService.update(session);\r\n\t\treturn session;\r\n\t}\r\n\r\n\tprivate handleLoginSuccess = (result: BidLoginResult): BidLoginResult => {\r\n\t\tlet session = this.stateService.state.session;\r\n\t\treturn result;\r\n\r\n\t\t//todo här ska man inte sättas som inloggad, man har endast begärt att få börja bli inloggad och påbörat bankid-identifiering via externa bankid-applikationen\r\n\r\n\t\t//let prevLogin = session.login;\r\n\t\t// let login = session.login = {\r\n\t\t// \ttime: new Date(),\r\n\t\t// \tssn: result.ssn,\r\n\t\t// \tadmin: true,\r\n\t\t// \ttoken: result.token,\r\n\t\t// \tfirstName: result.firstName,\r\n\t\t// \tlastName: result.lastName\r\n\t\t// };\r\n\t\t//session.logout = undefined;\r\n\r\n\t\t//this.stateService.replace(prevLogin, login);\r\n\t\t//this.stateService.update(session);\r\n\t\t//return session;\r\n\t}\r\n\r\n\tprivate handleLoginError = (result: BidLoginResult): BidLoginResult => {\r\n\t\treturn result;\r\n\t\t// let session = this.stateService.state.session;\r\n\t\t// let prevLogin = session.login;\r\n\t\t// return session;\r\n\t}\r\n\r\n\tloginMobile(ssn: string): Promise {\r\n\t\treturn this.bidService.login(ssn, 'MOBILE')\r\n\t\t\t.then(this.handleLoginSuccess, this.handleLoginError);\r\n\t}\r\n\r\n\tloginLocal(ssn: string): Promise {\r\n\t\treturn this.bidService.login(ssn, 'SAME')\r\n\t\t\t.then(this.handleLoginSuccess, this.handleLoginError);\r\n\t}\r\n\tcheckLoginState(loginToken: string): Promise {\r\n\t\treturn this.bidService.checkLogin(loginToken);\r\n\t}\r\n\tloginWithAutostartToken(autostartToken: string): void {\r\n\t\treturn this.bidService.redirectToBankIDApp(autostartToken);\r\n\t}\r\n\tcollect(startToken: string): Promise {\r\n\t\treturn this.bidService.collect(startToken);\r\n\t}\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nexport const BASE_PATH = \"https://localhost:8443\".replace(/\\/+$/, \"\");\r\n\r\nconst isBlob = (value: any) => typeof Blob !== 'undefined' && value instanceof Blob;\r\n\r\n/**\r\n * This is the base class for all generated API classes.\r\n */\r\nexport class BaseAPI {\r\n\r\n private middleware: Middleware[];\r\n\r\n constructor(protected configuration = new Configuration()) {\r\n this.middleware = configuration.middleware;\r\n }\r\n\r\n withMiddleware(this: T, ...middlewares: Middleware[]) {\r\n const next = this.clone();\r\n next.middleware = next.middleware.concat(...middlewares);\r\n return next;\r\n }\r\n\r\n withPreMiddleware(this: T, ...preMiddlewares: Array) {\r\n const middlewares = preMiddlewares.map((pre) => ({ pre }));\r\n return this.withMiddleware(...middlewares);\r\n }\r\n\r\n withPostMiddleware(this: T, ...postMiddlewares: Array) {\r\n const middlewares = postMiddlewares.map((post) => ({ post }));\r\n return this.withMiddleware(...middlewares);\r\n }\r\n\r\n protected async request(context: RequestOpts): Promise {\r\n const { url, init } = this.createFetchParams(context);\r\n const response = await this.fetchApi(url, init);\r\n if (response.status >= 200 && response.status < 300) {\r\n return response;\r\n }\r\n throw response;\r\n }\r\n\r\n private createFetchParams(context: RequestOpts) {\r\n let url = this.configuration.basePath + context.path;\r\n if (context.query !== undefined && Object.keys(context.query).length !== 0) {\r\n // only add the querystring to the URL if there are query parameters.\r\n // this is done to avoid urls ending with a \"?\" character which buggy webservers\r\n // do not handle correctly sometimes.\r\n url += '?' + this.configuration.queryParamsStringify(context.query);\r\n }\r\n const body = (context.body instanceof FormData || context.body instanceof URLSearchParams || isBlob(context.body))\r\n\t ? context.body\r\n\t : JSON.stringify(context.body);\r\n\r\n const headers = Object.assign({}, this.configuration.headers, context.headers);\r\n const init = {\r\n method: context.method,\r\n headers: headers,\r\n body,\r\n credentials: this.configuration.credentials\r\n };\r\n return { url, init };\r\n }\r\n\r\n private fetchApi = async (url: string, init: RequestInit) => {\r\n let fetchParams = { url, init };\r\n for (const middleware of this.middleware) {\r\n if (middleware.pre) {\r\n fetchParams = await middleware.pre({\r\n fetch: this.fetchApi,\r\n ...fetchParams,\r\n }) || fetchParams;\r\n }\r\n }\r\n let response = await this.configuration.fetchApi(fetchParams.url, fetchParams.init);\r\n for (const middleware of this.middleware) {\r\n if (middleware.post) {\r\n response = await middleware.post({\r\n fetch: this.fetchApi,\r\n url,\r\n init,\r\n response: response.clone(),\r\n }) || response;\r\n }\r\n }\r\n return response;\r\n }\r\n\r\n /**\r\n * Create a shallow clone of `this` by constructing a new instance\r\n * and then shallow cloning data members.\r\n */\r\n private clone(this: T): T {\r\n const constructor = this.constructor as any;\r\n const next = new constructor(this.configuration);\r\n next.middleware = this.middleware.slice();\r\n return next;\r\n }\r\n};\r\n\r\nexport class RequiredError extends Error {\r\n name: \"RequiredError\" = \"RequiredError\";\r\n constructor(public field: string, msg?: string) {\r\n super(msg);\r\n }\r\n}\r\n\r\nexport const COLLECTION_FORMATS = {\r\n csv: \",\",\r\n ssv: \" \",\r\n tsv: \"\\t\",\r\n pipes: \"|\",\r\n};\r\n\r\nexport type FetchAPI = GlobalFetch['fetch'];\r\n\r\nexport interface ConfigurationParameters {\r\n basePath?: string; // override base path\r\n fetchApi?: FetchAPI; // override for fetch implementation\r\n middleware?: Middleware[]; // middleware to apply before/after fetch requests\r\n queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings\r\n username?: string; // parameter for basic security\r\n password?: string; // parameter for basic security\r\n apiKey?: string | ((name: string) => string); // parameter for apiKey security\r\n accessToken?: string | ((name?: string, scopes?: string[]) => string); // parameter for oauth2 security\r\n headers?: HTTPHeaders; //header params we want to use on every request\r\n credentials?: RequestCredentials; //value for the credentials param we want to use on each request\r\n}\r\n\r\nexport class Configuration {\r\n constructor(private configuration: ConfigurationParameters = {}) {}\r\n\r\n get basePath(): string {\r\n return this.configuration.basePath || BASE_PATH;\r\n }\r\n\r\n get fetchApi(): FetchAPI {\r\n return this.configuration.fetchApi || window.fetch.bind(window);\r\n }\r\n\r\n get middleware(): Middleware[] {\r\n return this.configuration.middleware || [];\r\n }\r\n\r\n get queryParamsStringify(): (params: HTTPQuery) => string {\r\n return this.configuration.queryParamsStringify || querystring;\r\n }\r\n\r\n get username(): string | undefined {\r\n return this.configuration.username;\r\n }\r\n\r\n get password(): string | undefined {\r\n return this.configuration.password;\r\n }\r\n\r\n get apiKey(): ((name: string) => string) | undefined {\r\n const apiKey = this.configuration.apiKey;\r\n if (apiKey) {\r\n return typeof apiKey === 'function' ? apiKey : () => apiKey;\r\n }\r\n return undefined;\r\n }\r\n\r\n get accessToken(): ((name: string, scopes?: string[]) => string) | undefined {\r\n const accessToken = this.configuration.accessToken;\r\n if (accessToken) {\r\n return typeof accessToken === 'function' ? accessToken : () => accessToken;\r\n }\r\n return undefined;\r\n }\r\n\r\n get headers(): HTTPHeaders | undefined {\r\n return this.configuration.headers;\r\n }\r\n\r\n get credentials(): RequestCredentials | undefined {\r\n return this.configuration.credentials;\r\n }\r\n}\r\n\r\nexport type Json = any;\r\nexport type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS';\r\nexport type HTTPHeaders = { [key: string]: string };\r\nexport type HTTPQuery = { [key: string]: string | number | null | boolean | Array | HTTPQuery };\r\nexport type HTTPBody = Json | FormData | URLSearchParams;\r\nexport type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original';\r\n\r\nexport interface FetchParams {\r\n url: string;\r\n init: RequestInit;\r\n}\r\n\r\nexport interface RequestOpts {\r\n path: string;\r\n method: HTTPMethod;\r\n headers: HTTPHeaders;\r\n query?: HTTPQuery;\r\n body?: HTTPBody;\r\n}\r\n\r\nexport function exists(json: any, key: string) {\r\n const value = json[key];\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function querystring(params: HTTPQuery, prefix: string = ''): string {\r\n return Object.keys(params)\r\n .map((key) => {\r\n const fullKey = prefix + (prefix.length ? `[${key}]` : key);\r\n const value = params[key];\r\n if (value instanceof Array) {\r\n const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue)))\r\n .join(`&${encodeURIComponent(fullKey)}=`);\r\n return `${encodeURIComponent(fullKey)}=${multiValue}`;\r\n }\r\n if (value instanceof Object) {\r\n return querystring(value as HTTPQuery, fullKey);\r\n }\r\n return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;\r\n })\r\n .filter(part => part.length > 0)\r\n .join('&');\r\n}\r\n\r\nexport function mapValues(data: any, fn: (item: any) => any) {\r\n return Object.keys(data).reduce(\r\n (acc, key) => ({ ...acc, [key]: fn(data[key]) }),\r\n {}\r\n );\r\n}\r\n\r\nexport function canConsumeForm(consumes: Consume[]): boolean {\r\n for (const consume of consumes) {\r\n if ('multipart/form-data' === consume.contentType) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport interface Consume {\r\n contentType: string\r\n}\r\n\r\nexport interface RequestContext {\r\n fetch: FetchAPI;\r\n url: string;\r\n init: RequestInit;\r\n}\r\n\r\nexport interface ResponseContext {\r\n fetch: FetchAPI;\r\n url: string;\r\n init: RequestInit;\r\n response: Response;\r\n}\r\n\r\nexport interface Middleware {\r\n pre?(context: RequestContext): Promise;\r\n post?(context: ResponseContext): Promise;\r\n}\r\n\r\nexport interface ApiResponse {\r\n raw: Response;\r\n value(): Promise;\r\n}\r\n\r\nexport interface ResponseTransformer {\r\n (json: any): T;\r\n}\r\n\r\nexport class JSONApiResponse {\r\n constructor(public raw: Response, private transformer: ResponseTransformer = (jsonValue: any) => jsonValue) {}\r\n\r\n async value() {\r\n return this.transformer(await this.raw.json());\r\n }\r\n}\r\n\r\nexport class VoidApiResponse {\r\n constructor(public raw: Response) {}\r\n\r\n async value() {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport class BlobApiResponse {\r\n constructor(public raw: Response) {}\r\n\r\n async value() {\r\n return await this.raw.blob();\r\n };\r\n}\r\n\r\nexport class TextApiResponse {\r\n constructor(public raw: Response) {}\r\n\r\n async value() {\r\n return await this.raw.text();\r\n };\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * Syfte med respektive lånebelopp\r\n * @export\r\n * @interface AimType\r\n */\r\nexport interface AimType {\r\n /**\r\n * Unique identity for aims\r\n * @type {string}\r\n * @memberof AimType\r\n */\r\n aimId: string;\r\n /**\r\n * Ändamål och syfte ska sättas på respektive lån som går över till LP. I de fall där det inte specifiseras ska handläggaren göra det innan överföring till SAP. Detta för att de ska bli rätt i uppföljning ned i SAS och den finsiella rapporteringen.\r\n * @type {string}\r\n * @memberof AimType\r\n */\r\n purposeText?: string;\r\n /**\r\n * Delsyfte på respektive lån, läses från mainPurposes.json\r\n * @type {string}\r\n * @memberof AimType\r\n */\r\n aimText?: string;\r\n /**\r\n * Lånebelopp för part\r\n * @type {number}\r\n * @memberof AimType\r\n */\r\n loanAmountPart?: number;\r\n}\r\n\r\nexport function AimTypeFromJSON(json: any): AimType {\r\n return AimTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function AimTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): AimType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'aimId': json['aimId'],\r\n 'purposeText': !exists(json, 'purposeText') ? undefined : json['purposeText'],\r\n 'aimText': !exists(json, 'aimText') ? undefined : json['aimText'],\r\n 'loanAmountPart': !exists(json, 'loanAmountPart') ? undefined : json['loanAmountPart'],\r\n };\r\n}\r\n\r\nexport function AimTypeToJSON(value?: AimType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'aimId': value.aimId,\r\n 'purposeText': value.purposeText,\r\n 'aimText': value.aimText,\r\n 'loanAmountPart': value.loanAmountPart,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * Employeed or Not Employeed, from SAP on existing customer and from UC? or entered by customer. employment mapping to Loan Process PERMANENT - Anställd, tills-vidare-anställd TEMPORARY - Tidbegränsad anställning PROBATIONARY - Provanställning UNEMPLOYMENT_INSURANCE - Arbetslöshetskassa SELF_EMPLOYED - Eget företag STUDENT_AID - Studiestöd PENSION - Inkomst av pension\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum ApplicantEmployed {\r\n PERMANENT = 'PERMANENT',\r\n TEMPORARY = 'TEMPORARY',\r\n PROBATIONARY = 'PROBATIONARY',\r\n UNEMPLOYMENTINSURANCE = 'UNEMPLOYMENT_INSURANCE',\r\n SELFEMPLOYED = 'SELF_EMPLOYED',\r\n STUDENTAID = 'STUDENT_AID',\r\n PENSION = 'PENSION'\r\n}\r\n\r\nexport function ApplicantEmployedFromJSON(json: any): ApplicantEmployed {\r\n return ApplicantEmployedFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ApplicantEmployedFromJSONTyped(json: any, ignoreDiscriminator: boolean): ApplicantEmployed {\r\n return json as ApplicantEmployed;\r\n}\r\n\r\nexport function ApplicantEmployedToJSON(value?: ApplicantEmployed | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * employment mapping to Loan Process PERMANENT - Anställd, tills-vidare-anställd TEMPORARY - Tidbegränsad anställning PROBATIONARY - Provanställning UNEMPLOYMENT_INSURANCE - Arbetslöshetskassa SELF_EMPLOYED - Eget företag STUDENT_AID - Studiestöd PENSION - Inkomst av pension\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum ApplicantLPEmployment {\r\n PERMANENT = 'PERMANENT',\r\n TEMPORARY = 'TEMPORARY',\r\n PROBATIONARY = 'PROBATIONARY',\r\n UNEMPLOYMENTINSURANCE = 'UNEMPLOYMENT_INSURANCE',\r\n SELFEMPLOYED = 'SELF_EMPLOYED',\r\n STUDENTAID = 'STUDENT_AID',\r\n PENSION = 'PENSION'\r\n}\r\n\r\nexport function ApplicantLPEmploymentFromJSON(json: any): ApplicantLPEmployment {\r\n return ApplicantLPEmploymentFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ApplicantLPEmploymentFromJSONTyped(json: any, ignoreDiscriminator: boolean): ApplicantLPEmployment {\r\n return json as ApplicantLPEmployment;\r\n}\r\n\r\nexport function ApplicantLPEmploymentToJSON(value?: ApplicantLPEmployment | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * Set status on the caseId or in the process (application)\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum CaseIdStatus {\r\n CLOSEDBYAPPLICANT = 'CLOSEDBYAPPLICANT',\r\n STARTEDBYAPPLICANT = 'STARTEDBYAPPLICANT',\r\n CLOSEDBYOFFICER = 'CLOSEDBYOFFICER',\r\n CLOSEDBYTHINNING = 'CLOSEDBYTHINNING',\r\n READYFOROFFICER = 'READYFOROFFICER'\r\n}\r\n\r\nexport function CaseIdStatusFromJSON(json: any): CaseIdStatus {\r\n return CaseIdStatusFromJSONTyped(json, false);\r\n}\r\n\r\nexport function CaseIdStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): CaseIdStatus {\r\n return json as CaseIdStatus;\r\n}\r\n\r\nexport function CaseIdStatusToJSON(value?: CaseIdStatus | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * Ålder på skogen för säkerheten, behöver ses över, finns inte i GUI idag.\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum CollateralAge {\r\n _020R = '0-20 år',\r\n _2140R = '21-40 år',\r\n _4160R = '41-60 år',\r\n _6180R = '61-80 år',\r\n _81100R = '81-100 år'\r\n}\r\n\r\nexport function CollateralAgeFromJSON(json: any): CollateralAge {\r\n return CollateralAgeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function CollateralAgeFromJSONTyped(json: any, ignoreDiscriminator: boolean): CollateralAge {\r\n return json as CollateralAge;\r\n}\r\n\r\nexport function CollateralAgeToJSON(value?: CollateralAge | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * type of downpayment \\'Övrigt\\', \\'Försäljning bostad\\', \\'Blanco\\', \\'Sparande\\'\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum DownPaymentType {\r\n Vrigt = 'Övrigt',\r\n FrsljningBostad = 'Försäljning bostad',\r\n Blanco = 'Blanco',\r\n Sparande = 'Sparande'\r\n}\r\n\r\nexport function DownPaymentTypeFromJSON(json: any): DownPaymentType {\r\n return DownPaymentTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function DownPaymentTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): DownPaymentType {\r\n return json as DownPaymentType;\r\n}\r\n\r\nexport function DownPaymentTypeToJSON(value?: DownPaymentType | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * Typ av eu-stöd\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum EUType {\r\n EUStd = 'EU-stöd',\r\n EUStdOchNationelltStd = 'EU-stöd och nationellt stöd',\r\n EUStdOchNationelltStdUtanMjlk = 'EU-stöd och nationellt stöd, utan mjölk',\r\n NationellStdUtanMjlk = 'Nationell stöd, utan mjölk'\r\n}\r\n\r\nexport function EUTypeFromJSON(json: any): EUType {\r\n return EUTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function EUTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): EUType {\r\n return json as EUType;\r\n}\r\n\r\nexport function EUTypeToJSON(value?: EUType | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n *

StakeholderType


Maps to Loan Process stakeholders
\\'Borgensman\\'
\\'Driftbolag\\'
\\'Maka/Make/regpartner\\'
\\'sambo\\'
\\'ägarandel i pant\\'
\\'ägare juridiskt över 50%\\'
\\'övriga med ekonomisk intressegemenskap\\'
\\'SOKANDE\\'
- betyder att de är en sökande på lånet.
\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum StakeholderType {\r\n SOKANDE = 'SOKANDE',\r\n INTRESSENT = 'INTRESSENT',\r\n BORGENSMAN = 'BORGENSMAN',\r\n DRIFTBOLAG = 'DRIFTBOLAG',\r\n MAKEMAKAREGPART = 'MAKEMAKAREGPART',\r\n AGAREJURIDIKO50 = 'AGAREJURIDIKO50',\r\n AGARANDELIPANT = 'AGARANDELIPANT',\r\n SAMBO = 'SAMBO',\r\n EKONOMISKINTRESSEGEMENSKAP = 'EKONOMISKINTRESSEGEMENSKAP'\r\n}\r\n\r\nexport function StakeholderTypeFromJSON(json: any): StakeholderType {\r\n return StakeholderTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function StakeholderTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): StakeholderType {\r\n return json as StakeholderType;\r\n}\r\n\r\nexport function StakeholderTypeToJSON(value?: StakeholderType | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * Värdeföråd för säkerhet (Fastighet, EU-stöd, borgensman)\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum TypeOfCollateral {\r\n FASTIGHET = 'FASTIGHET',\r\n EUSTOD = 'EUSTOD',\r\n BORGENSMAN = 'BORGENSMAN'\r\n}\r\n\r\nexport function TypeOfCollateralFromJSON(json: any): TypeOfCollateral {\r\n return TypeOfCollateralFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TypeOfCollateralFromJSONTyped(json: any, ignoreDiscriminator: boolean): TypeOfCollateral {\r\n return json as TypeOfCollateral;\r\n}\r\n\r\nexport function TypeOfCollateralToJSON(value?: TypeOfCollateral | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * Employeed or Not Employeed, from SAP on existing customer and from UC? or entered by customer. employment mapping to Loan Process PERMANENT - Anställd, tills-vidare-anställd TEMPORARY - Tidbegränsad anställning PROBATIONARY - Provanställning UNEMPLOYMENT_INSURANCE - Arbetslöshetskassa SELF_EMPLOYED - Eget företag STUDENT_AID - Studiestöd PENSION - Inkomst av pension\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum TypeOfEmployeement {\r\n PERMANENT = 'PERMANENT',\r\n TEMPORARY = 'TEMPORARY',\r\n PROBATIONARY = 'PROBATIONARY',\r\n UNEMPLOYMENTINSURANCE = 'UNEMPLOYMENT_INSURANCE',\r\n SELFEMPLOYED = 'SELF_EMPLOYED',\r\n STUDENTAID = 'STUDENT_AID',\r\n PENSION = 'PENSION'\r\n}\r\n\r\nexport function TypeOfEmployeementFromJSON(json: any): TypeOfEmployeement {\r\n return TypeOfEmployeementFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TypeOfEmployeementFromJSONTyped(json: any, ignoreDiscriminator: boolean): TypeOfEmployeement {\r\n return json as TypeOfEmployeement;\r\n}\r\n\r\nexport function TypeOfEmployeementToJSON(value?: TypeOfEmployeement | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * typ av annat boende\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum TypeOfHouse {\r\n Villa = 'Villa',\r\n Hyresrtt = 'Hyresrätt',\r\n VrigtBoende = 'Övrigt Boende',\r\n Landbruksfastighet = 'Landbruksfastighet',\r\n Bostadsrtt = 'Bostadsrätt',\r\n Fritidshus = 'Fritidshus'\r\n}\r\n\r\nexport function TypeOfHouseFromJSON(json: any): TypeOfHouse {\r\n return TypeOfHouseFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TypeOfHouseFromJSONTyped(json: any, ignoreDiscriminator: boolean): TypeOfHouse {\r\n return json as TypeOfHouse;\r\n}\r\n\r\nexport function TypeOfHouseToJSON(value?: TypeOfHouse | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * Enumeration of type of loans\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum TypeOfLoan {\r\n Studieln = 'Studielån',\r\n KontoKortkredit = 'Konto/kortkredit',\r\n AvbetalningskreditBillnBtln = 'Avbetalningskredit/Billån/båtlån',\r\n Borgenstagande = 'Borgensåtagande',\r\n Garantier = 'Garantier',\r\n Nringskredit = 'Näringskredit',\r\n BlancokreditVrigaLn = 'Blancokredit/övriga lån'\r\n}\r\n\r\nexport function TypeOfLoanFromJSON(json: any): TypeOfLoan {\r\n return TypeOfLoanFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TypeOfLoanFromJSONTyped(json: any, ignoreDiscriminator: boolean): TypeOfLoan {\r\n return json as TypeOfLoan;\r\n}\r\n\r\nexport function TypeOfLoanToJSON(value?: TypeOfLoan | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n ErrorModel,\r\n ErrorModelFromJSON,\r\n ErrorModelToJSON,\r\n LinksAll,\r\n LinksAllFromJSON,\r\n LinksAllToJSON,\r\n ProcessType,\r\n ProcessTypeFromJSON,\r\n ProcessTypeToJSON,\r\n ProcessesType,\r\n ProcessesTypeFromJSON,\r\n ProcessesTypeToJSON,\r\n} from '../models';\r\n\r\nexport interface AddProcessRequest {\r\n process?: ProcessType;\r\n}\r\n\r\nexport interface DeleteProcessRequest {\r\n xProcessID: string;\r\n caseIdStatus: DeleteProcessCaseIdStatusEnum;\r\n}\r\n\r\nexport interface GetProcessAllRequest {\r\n xProcessID: string;\r\n}\r\n\r\nexport interface GetProcessesRequest {\r\n customerId: string;\r\n}\r\n\r\nexport interface ReserveCaseIdRequest {\r\n xProcessID: string;\r\n caseIdStatus: ReserveCaseIdCaseIdStatusEnum;\r\n customerId: string;\r\n}\r\n\r\nexport interface SaveProcessAllRequest {\r\n processSaveAll?: LinksAll;\r\n}\r\n\r\nexport interface UpdateProcessStatusRequest {\r\n xProcessID: string;\r\n caseIdStatus: UpdateProcessStatusCaseIdStatusEnum;\r\n caseId?: string;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class ProcessesApi extends runtime.BaseAPI {\r\n\r\n /**\r\n * This operation will return a processid that has to be used i header X-process-ID for all other requests in all APIs. As parameter we will allways be using STARTEDBYAPPLICANT\r\n * Operation will be invoked when a customer want to create a new application\r\n */\r\n async addProcessRaw(requestParameters: AddProcessRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n if (this.configuration && this.configuration.accessToken) {\r\n // oauth required\r\n if (typeof this.configuration.accessToken === 'function') {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken(\"application\", [\"read\", \"write\"]);\r\n } else {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken;\r\n }\r\n }\r\n\r\n const response = await this.request({\r\n path: `/v1/addprocess`,\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: ProcessTypeToJSON(requestParameters.process),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => ProcessTypeFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n * This operation will return a processid that has to be used i header X-process-ID for all other requests in all APIs. As parameter we will allways be using STARTEDBYAPPLICANT\r\n * Operation will be invoked when a customer want to create a new application\r\n */\r\n async addProcess(requestParameters: AddProcessRequest): Promise {\r\n const response = await this.addProcessRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * The customer has choice to end the application process, the whole X-process-ID will be CLOSEDBYAPPLICANT and will be removed during the batch thinning process in Loan Process. A call to LP is required to set ststus on the reserved caseid.\r\n * Set status CLOSEDBYAPPLICANT at the X-process-ID in the model\r\n */\r\n async deleteProcessRaw(requestParameters: DeleteProcessRequest): Promise> {\r\n if (requestParameters.xProcessID === null || requestParameters.xProcessID === undefined) {\r\n throw new runtime.RequiredError('xProcessID','Required parameter requestParameters.xProcessID was null or undefined when calling deleteProcess.');\r\n }\r\n\r\n if (requestParameters.caseIdStatus === null || requestParameters.caseIdStatus === undefined) {\r\n throw new runtime.RequiredError('caseIdStatus','Required parameter requestParameters.caseIdStatus was null or undefined when calling deleteProcess.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n if (requestParameters.xProcessID !== undefined && requestParameters.xProcessID !== null) {\r\n headerParameters['X-process-ID'] = String(requestParameters.xProcessID);\r\n }\r\n\r\n if (requestParameters.caseIdStatus !== undefined && requestParameters.caseIdStatus !== null) {\r\n headerParameters['caseIdStatus'] = String(requestParameters.caseIdStatus);\r\n }\r\n\r\n if (this.configuration && this.configuration.accessToken) {\r\n // oauth required\r\n if (typeof this.configuration.accessToken === 'function') {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken(\"application\", [\"read\", \"write\"]);\r\n } else {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken;\r\n }\r\n }\r\n\r\n const response = await this.request({\r\n path: `/v1/deleteprocess`,\r\n method: 'DELETE',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response);\r\n }\r\n\r\n /**\r\n * The customer has choice to end the application process, the whole X-process-ID will be CLOSEDBYAPPLICANT and will be removed during the batch thinning process in Loan Process. A call to LP is required to set ststus on the reserved caseid.\r\n * Set status CLOSEDBYAPPLICANT at the X-process-ID in the model\r\n */\r\n async deleteProcess(requestParameters: DeleteProcessRequest): Promise {\r\n const response = await this.deleteProcessRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * Return all data for all object in the activiti process regardless if the contains any information, empty objects will return null\r\n * Return all information object for a given processid\r\n */\r\n async getProcessAllRaw(requestParameters: GetProcessAllRequest): Promise> {\r\n if (requestParameters.xProcessID === null || requestParameters.xProcessID === undefined) {\r\n throw new runtime.RequiredError('xProcessID','Required parameter requestParameters.xProcessID was null or undefined when calling getProcessAll.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n if (requestParameters.xProcessID !== undefined && requestParameters.xProcessID !== null) {\r\n headerParameters['X-process-ID'] = String(requestParameters.xProcessID);\r\n }\r\n\r\n if (this.configuration && this.configuration.accessToken) {\r\n // oauth required\r\n if (typeof this.configuration.accessToken === 'function') {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken(\"application\", [\"read\", \"write\"]);\r\n } else {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken;\r\n }\r\n }\r\n\r\n const response = await this.request({\r\n path: `/v1/getprocess`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => LinksAllFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n * Return all data for all object in the activiti process regardless if the contains any information, empty objects will return null\r\n * Return all information object for a given processid\r\n */\r\n async getProcessAll(requestParameters: GetProcessAllRequest): Promise {\r\n const response = await this.getProcessAllRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * Return a list of active applications for a specific customer.\r\n * get a list of active processes for a in:body parameter customerId\r\n */\r\n async getProcessesRaw(requestParameters: GetProcessesRequest): Promise> {\r\n if (requestParameters.customerId === null || requestParameters.customerId === undefined) {\r\n throw new runtime.RequiredError('customerId','Required parameter requestParameters.customerId was null or undefined when calling getProcesses.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n if (this.configuration && this.configuration.accessToken) {\r\n // oauth required\r\n if (typeof this.configuration.accessToken === 'function') {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken(\"application\", [\"read\", \"write\"]);\r\n } else {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken;\r\n }\r\n }\r\n\r\n const response = await this.request({\r\n path: `/v1/getprocesses`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: requestParameters.customerId as any,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => ProcessesTypeFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n * Return a list of active applications for a specific customer.\r\n * get a list of active processes for a in:body parameter customerId\r\n */\r\n async getProcesses(requestParameters: GetProcessesRequest): Promise {\r\n const response = await this.getProcessesRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * Reserve a CaseId in Loan Process to be able to use attachment i DM. In this case parameter caseIdStatus should be set to enumeration of STARTEDBYAPPLICANT\r\n * Reserve a CaseId in Loan Process\r\n */\r\n async reserveCaseIdRaw(requestParameters: ReserveCaseIdRequest): Promise> {\r\n if (requestParameters.xProcessID === null || requestParameters.xProcessID === undefined) {\r\n throw new runtime.RequiredError('xProcessID','Required parameter requestParameters.xProcessID was null or undefined when calling reserveCaseId.');\r\n }\r\n\r\n if (requestParameters.caseIdStatus === null || requestParameters.caseIdStatus === undefined) {\r\n throw new runtime.RequiredError('caseIdStatus','Required parameter requestParameters.caseIdStatus was null or undefined when calling reserveCaseId.');\r\n }\r\n\r\n if (requestParameters.customerId === null || requestParameters.customerId === undefined) {\r\n throw new runtime.RequiredError('customerId','Required parameter requestParameters.customerId was null or undefined when calling reserveCaseId.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n if (requestParameters.xProcessID !== undefined && requestParameters.xProcessID !== null) {\r\n headerParameters['X-process-ID'] = String(requestParameters.xProcessID);\r\n }\r\n\r\n if (requestParameters.caseIdStatus !== undefined && requestParameters.caseIdStatus !== null) {\r\n headerParameters['caseIdStatus'] = String(requestParameters.caseIdStatus);\r\n }\r\n\r\n if (this.configuration && this.configuration.accessToken) {\r\n // oauth required\r\n if (typeof this.configuration.accessToken === 'function') {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken(\"application\", [\"read\", \"write\"]);\r\n } else {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken;\r\n }\r\n }\r\n\r\n const response = await this.request({\r\n path: `/v1/reserveeaseid`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: requestParameters.customerId as any,\r\n });\r\n\r\n return new runtime.TextApiResponse(response) as any;\r\n }\r\n\r\n /**\r\n * Reserve a CaseId in Loan Process to be able to use attachment i DM. In this case parameter caseIdStatus should be set to enumeration of STARTEDBYAPPLICANT\r\n * Reserve a CaseId in Loan Process\r\n */\r\n async reserveCaseId(requestParameters: ReserveCaseIdRequest): Promise {\r\n const response = await this.reserveCaseIdRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * To be able to implement a service that save all information object\r\n * Save all information object for a given processid\r\n */\r\n async saveProcessAllRaw(requestParameters: SaveProcessAllRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n if (this.configuration && this.configuration.accessToken) {\r\n // oauth required\r\n if (typeof this.configuration.accessToken === 'function') {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken(\"application\", [\"read\", \"write\"]);\r\n } else {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken;\r\n }\r\n }\r\n\r\n const response = await this.request({\r\n path: `/v1/saveprocess`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: LinksAllToJSON(requestParameters.processSaveAll),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response);\r\n }\r\n\r\n /**\r\n * To be able to implement a service that save all information object\r\n * Save all information object for a given processid\r\n */\r\n async saveProcessAll(requestParameters: SaveProcessAllRequest): Promise {\r\n const response = await this.saveProcessAllRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * When we create/reserve a caseId in LP we also have to set the status\r\n * set status on the reserved caseId\r\n */\r\n async updateProcessStatusRaw(requestParameters: UpdateProcessStatusRequest): Promise> {\r\n if (requestParameters.xProcessID === null || requestParameters.xProcessID === undefined) {\r\n throw new runtime.RequiredError('xProcessID','Required parameter requestParameters.xProcessID was null or undefined when calling updateProcessStatus.');\r\n }\r\n\r\n if (requestParameters.caseIdStatus === null || requestParameters.caseIdStatus === undefined) {\r\n throw new runtime.RequiredError('caseIdStatus','Required parameter requestParameters.caseIdStatus was null or undefined when calling updateProcessStatus.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n if (requestParameters.xProcessID !== undefined && requestParameters.xProcessID !== null) {\r\n headerParameters['X-process-ID'] = String(requestParameters.xProcessID);\r\n }\r\n\r\n if (requestParameters.caseIdStatus !== undefined && requestParameters.caseIdStatus !== null) {\r\n headerParameters['caseIdStatus'] = String(requestParameters.caseIdStatus);\r\n }\r\n\r\n if (this.configuration && this.configuration.accessToken) {\r\n // oauth required\r\n if (typeof this.configuration.accessToken === 'function') {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken(\"application\", [\"read\", \"write\"]);\r\n } else {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken;\r\n }\r\n }\r\n\r\n const response = await this.request({\r\n path: `/v1/updateprocessstatus`,\r\n method: 'PATCH',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: requestParameters.caseId as any,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response);\r\n }\r\n\r\n /**\r\n * When we create/reserve a caseId in LP we also have to set the status\r\n * set status on the reserved caseId\r\n */\r\n async updateProcessStatus(requestParameters: UpdateProcessStatusRequest): Promise {\r\n const response = await this.updateProcessStatusRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n\r\n/**\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum DeleteProcessCaseIdStatusEnum {\r\n CLOSEDBYAPPLICANT = 'CLOSEDBYAPPLICANT',\r\n STARTEDBYAPPLICANT = 'STARTEDBYAPPLICANT',\r\n CLOSEDBYOFFICER = 'CLOSEDBYOFFICER',\r\n CLOSEDBYTHINNING = 'CLOSEDBYTHINNING',\r\n READYFOROFFICER = 'READYFOROFFICER'\r\n}\r\n/**\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum ReserveCaseIdCaseIdStatusEnum {\r\n CLOSEDBYAPPLICANT = 'CLOSEDBYAPPLICANT',\r\n STARTEDBYAPPLICANT = 'STARTEDBYAPPLICANT',\r\n CLOSEDBYOFFICER = 'CLOSEDBYOFFICER',\r\n CLOSEDBYTHINNING = 'CLOSEDBYTHINNING',\r\n READYFOROFFICER = 'READYFOROFFICER'\r\n}\r\n/**\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum UpdateProcessStatusCaseIdStatusEnum {\r\n CLOSEDBYAPPLICANT = 'CLOSEDBYAPPLICANT',\r\n STARTEDBYAPPLICANT = 'STARTEDBYAPPLICANT',\r\n CLOSEDBYOFFICER = 'CLOSEDBYOFFICER',\r\n CLOSEDBYTHINNING = 'CLOSEDBYTHINNING',\r\n READYFOROFFICER = 'READYFOROFFICER'\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n ErrorModel,\r\n ErrorModelFromJSON,\r\n ErrorModelToJSON,\r\n} from '../models';\r\n\r\nexport interface FileUploadRequest {\r\n xProcessID: string;\r\n xAttachmentType?: FileUploadXAttachmentTypeEnum;\r\n upfile?: Array;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class UploadsApi extends runtime.BaseAPI {\r\n\r\n /**\r\n * The file to upload.\r\n * Uploads a file.\r\n */\r\n async fileUploadRaw(requestParameters: FileUploadRequest): Promise> {\r\n if (requestParameters.xProcessID === null || requestParameters.xProcessID === undefined) {\r\n throw new runtime.RequiredError('xProcessID','Required parameter requestParameters.xProcessID was null or undefined when calling fileUpload.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n if (requestParameters.xProcessID !== undefined && requestParameters.xProcessID !== null) {\r\n headerParameters['X-process-ID'] = String(requestParameters.xProcessID);\r\n }\r\n\r\n if (requestParameters.xAttachmentType !== undefined && requestParameters.xAttachmentType !== null) {\r\n headerParameters['X-attachmentType'] = String(requestParameters.xAttachmentType);\r\n }\r\n\r\n if (this.configuration && this.configuration.accessToken) {\r\n // oauth required\r\n if (typeof this.configuration.accessToken === 'function') {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken(\"application\", [\"read\", \"write\"]);\r\n } else {\r\n headerParameters[\"Authorization\"] = this.configuration.accessToken;\r\n }\r\n }\r\n\r\n const consumes: runtime.Consume[] = [\r\n { contentType: 'multipart/form-data' },\r\n ];\r\n // @ts-ignore: canConsumeForm may be unused\r\n const canConsumeForm = runtime.canConsumeForm(consumes);\r\n\r\n let formParams: { append(param: string, value: any): any };\r\n let useForm = false;\r\n // use FormData to transmit files using content-type \"multipart/form-data\"\r\n useForm = canConsumeForm;\r\n if (useForm) {\r\n formParams = new FormData();\r\n } else {\r\n formParams = new URLSearchParams();\r\n }\r\n\r\n if (requestParameters.upfile) {\r\n formParams.append('upfile', requestParameters.upfile.join(runtime.COLLECTION_FORMATS[\"csv\"]));\r\n }\r\n\r\n const response = await this.request({\r\n path: `/v1/upload`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: formParams,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response);\r\n }\r\n\r\n /**\r\n * The file to upload.\r\n * Uploads a file.\r\n */\r\n async fileUpload(requestParameters: FileUploadRequest): Promise {\r\n const response = await this.fileUploadRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n\r\n/**\r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum FileUploadXAttachmentTypeEnum {\r\n SKOGSBRUKSPLAN = 'SKOGSBRUKSPLAN',\r\n ANSTLLNINGSBEVIS = 'ANSTÄLLNINGSBEVIS',\r\n EUSTD = 'EU-STÖD'\r\n}\r\n","import { object } from \"prop-types\";\r\n\r\nexport type ObsMatch = (obj:any) => boolean;\r\nexport type ObsCallback = (event: IObsEvent) => void;\r\nexport type UnobserveHandle = () => void;\r\n\r\n// A registered observation.\r\nexport interface IObs {\r\n\tmatch: ObsMatch;\r\n\tcallback: ObsCallback;\r\n\t//obj: any;\r\n}\r\n\r\n// Event emitted on observation of change.\r\nexport interface IObsEvent {\r\n\tobserver: IObs;\r\n\tobj: any;\r\n\tchange: ObsChange;\r\n}\r\n\r\n// Type of change that can occur.\r\nexport enum ObsChange {\r\n\tadd,\r\n\tupdate,\r\n\tremove,\r\n}\r\n\r\nfunction objectContains (object:object, find:any):boolean {\r\n\tfor (var property in object) {\r\n\t\tconst val = object[property];\r\n\t\tif( val===find )\r\n\t\t\treturn true;\r\n\t\t\r\n\t\tif( val instanceof Object ) {\r\n\t\t\tconst r = objectContains(val, find);\r\n\t\t\tif( r )\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\telse if( val instanceof Array ) {\r\n\t\t\tfor( var i=0; i;\r\n\r\n\tconstructor() {\r\n\t\tthis.observers = [];\r\n\t}\r\n\r\n\tupdate(obj: any): void {\r\n\t\tthis.emitChange(obj, ObsChange.update);\r\n\t}\r\n\r\n\tadd(obj: any): void {\r\n\t\tthis.emitChange(obj, ObsChange.add);\r\n\t}\r\n\r\n\tremove(obj: any): void {\r\n\t\tthis.emitChange(obj, ObsChange.remove);\r\n\t}\r\n\r\n\treplace(oldObj: any, newObj: any): void {\r\n\t\tthis.emitChange(oldObj, ObsChange.remove);\r\n\t\tthis.emitChange(newObj, ObsChange.add);\r\n\t}\r\n\r\n\tprivate emitChange(obj: any, change: ObsChange): void {\r\n\r\n\t\tconst observers = this.observers;\r\n\t\tfor( let i=observers.length-1; i>=0; i--) {\r\n\t\t\tconst observer = observers[i];\r\n\t\t\tif (!observer.match(obj))\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tlet callback = observer.callback;\r\n\t\t\tlet event = {\r\n\t\t\t\tchange: change,\r\n\t\t\t\tobserver: observer,\r\n\t\t\t\tobj: obj,\r\n\t\t\t}\r\n\t\t\ttry {\r\n\t\t\t\tcallback(event);\r\n\t\t\t}\r\n\t\t\tcatch (ex) {\r\n\t\t\t\t//console.log(\"ObjServer emit change error. \"+observer.match.name, ex);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tobserve(obj:any, callback:ObsCallback): UnobserveHandle {\r\n\t\treturn this.observeInternal({\r\n\t\t\tmatch: (x:any) => x===obj,\r\n\t\t\tcallback:callback\r\n\t\t});\r\n\t}\r\n\r\n\tobserveDeep(obj:any, callback:ObsCallback): UnobserveHandle {\r\n\t\treturn this.observeInternal({\r\n\t\t\tmatch: (x) => objectSelfOrContains(obj,x),\r\n\t\t\tcallback:callback\r\n\t\t});\r\n\t}\r\n\r\n\tobserveInternal(observer: IObs): UnobserveHandle {\r\n\t\tif (!observer.match)\r\n\t\t\tthrow new Error(\"No matcher in observer.\");\r\n\t\tif (!observer.callback)\r\n\t\t\tthrow new Error(\"No callback in observer.\");\r\n\r\n\t\tthis.observers.push(observer);\r\n\r\n\t\tlet u = this.unobserve.bind(this);\r\n\t\treturn function () {\r\n\t\t\tu(observer);\r\n\t\t};\r\n\t}\r\n\r\n\tunobserve(observer: IObs): void {\r\n\t\tthis.observers = this.observers.filter(x => x !== observer);\r\n\t}\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n ApplicantEmployed,\r\n ApplicantEmployedFromJSON,\r\n ApplicantEmployedFromJSONTyped,\r\n ApplicantEmployedToJSON,\r\n ApplicantLPEmployment,\r\n ApplicantLPEmploymentFromJSON,\r\n ApplicantLPEmploymentFromJSONTyped,\r\n ApplicantLPEmploymentToJSON,\r\n ContactInformationType,\r\n ContactInformationTypeFromJSON,\r\n ContactInformationTypeFromJSONTyped,\r\n ContactInformationTypeToJSON,\r\n StakeholderType,\r\n StakeholderTypeFromJSON,\r\n StakeholderTypeFromJSONTyped,\r\n StakeholderTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Type of applicant instance\r\n * @export\r\n * @interface ApplicantType\r\n */\r\nexport interface ApplicantType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof ApplicantType\r\n */\r\n processId: string;\r\n /**\r\n * customerId is swedish ssn or corporate organisation number\r\n * @type {string}\r\n * @memberof ApplicantType\r\n */\r\n customerId: string;\r\n /**\r\n * unique id for each applicant in the credit case\r\n * @type {string}\r\n * @memberof ApplicantType\r\n */\r\n applicantId: string;\r\n /**\r\n * Full name of the customer/applicant\r\n * @type {string}\r\n * @memberof ApplicantType\r\n */\r\n applicantName?: string;\r\n /**\r\n * Street address of Applicant\r\n * @type {string}\r\n * @memberof ApplicantType\r\n */\r\n applicantAddress?: string;\r\n /**\r\n * Postal code\r\n * @type {string}\r\n * @memberof ApplicantType\r\n */\r\n applicantPostalCode?: string;\r\n /**\r\n * Postal city\r\n * @type {string}\r\n * @memberof ApplicantType\r\n */\r\n applicantPostAddress?: string;\r\n /**\r\n * \r\n * @type {StakeholderType}\r\n * @memberof ApplicantType\r\n */\r\n stakeholderType?: StakeholderType;\r\n /**\r\n * \r\n * @type {ContactInformationType}\r\n * @memberof ApplicantType\r\n */\r\n contactInformation?: ContactInformationType;\r\n /**\r\n * \r\n * @type {ApplicantEmployed}\r\n * @memberof ApplicantType\r\n */\r\n applicantEmployed?: ApplicantEmployed;\r\n /**\r\n * \r\n * @type {ApplicantLPEmployment}\r\n * @memberof ApplicantType\r\n */\r\n applicantLPEmployment?: ApplicantLPEmployment;\r\n /**\r\n * Member in Landshypotek Ekonomiska förening (true/false). Tänkt som befitlig medlem, behöver koppling till SAP.\r\n * @type {boolean}\r\n * @memberof ApplicantType\r\n */\r\n applicantMember?: boolean;\r\n /**\r\n * Applicant want to be notified by sms (true/false)\r\n * @type {boolean}\r\n * @memberof ApplicantType\r\n */\r\n applicantBySms?: boolean;\r\n /**\r\n * Applicant want to be notified by eMail (true/false)\r\n * @type {boolean}\r\n * @memberof ApplicantType\r\n */\r\n applicantByeMail?: boolean;\r\n /**\r\n * Personens namn har eller avser köpa en jord och skogsbruksfastighet.\r\n * @type {boolean}\r\n * @memberof ApplicantType\r\n */\r\n applicantCollateralToBuy?: boolean;\r\n}\r\n\r\nexport function ApplicantTypeFromJSON(json: any): ApplicantType {\r\n return ApplicantTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ApplicantTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): ApplicantType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'customerId': json['customerId'],\r\n 'applicantId': json['applicantId'],\r\n 'applicantName': !exists(json, 'applicantName') ? undefined : json['applicantName'],\r\n 'applicantAddress': !exists(json, 'applicantAddress') ? undefined : json['applicantAddress'],\r\n 'applicantPostalCode': !exists(json, 'applicantPostalCode') ? undefined : json['applicantPostalCode'],\r\n 'applicantPostAddress': !exists(json, 'applicantPostAddress') ? undefined : json['applicantPostAddress'],\r\n 'stakeholderType': !exists(json, 'stakeholderType') ? undefined : StakeholderTypeFromJSON(json['stakeholderType']),\r\n 'contactInformation': !exists(json, 'contactInformation') ? undefined : ContactInformationTypeFromJSON(json['contactInformation']),\r\n 'applicantEmployed': !exists(json, 'applicantEmployed') ? undefined : ApplicantEmployedFromJSON(json['applicantEmployed']),\r\n 'applicantLPEmployment': !exists(json, 'applicantLPEmployment') ? undefined : ApplicantLPEmploymentFromJSON(json['applicantLPEmployment']),\r\n 'applicantMember': !exists(json, 'applicantMember') ? undefined : json['applicantMember'],\r\n 'applicantBySms': !exists(json, 'applicantBySms') ? undefined : json['applicantBySms'],\r\n 'applicantByeMail': !exists(json, 'applicantByeMail') ? undefined : json['applicantByeMail'],\r\n 'applicantCollateralToBuy': !exists(json, 'applicantCollateralToBuy') ? undefined : json['applicantCollateralToBuy'],\r\n };\r\n}\r\n\r\nexport function ApplicantTypeToJSON(value?: ApplicantType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'customerId': value.customerId,\r\n 'applicantId': value.applicantId,\r\n 'applicantName': value.applicantName,\r\n 'applicantAddress': value.applicantAddress,\r\n 'applicantPostalCode': value.applicantPostalCode,\r\n 'applicantPostAddress': value.applicantPostAddress,\r\n 'stakeholderType': StakeholderTypeToJSON(value.stakeholderType),\r\n 'contactInformation': ContactInformationTypeToJSON(value.contactInformation),\r\n 'applicantEmployed': ApplicantEmployedToJSON(value.applicantEmployed),\r\n 'applicantLPEmployment': ApplicantLPEmploymentToJSON(value.applicantLPEmployment),\r\n 'applicantMember': value.applicantMember,\r\n 'applicantBySms': value.applicantBySms,\r\n 'applicantByeMail': value.applicantByeMail,\r\n 'applicantCollateralToBuy': value.applicantCollateralToBuy,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n BudgetYearType,\r\n BudgetYearTypeFromJSON,\r\n BudgetYearTypeFromJSONTyped,\r\n BudgetYearTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Type definition for companyBudget\r\n * @export\r\n * @interface BudgetType\r\n */\r\nexport interface BudgetType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof BudgetType\r\n */\r\n processId: string;\r\n /**\r\n * Type definition for company economy\r\n * @type {string}\r\n * @memberof BudgetType\r\n */\r\n companyEconomyId?: string;\r\n /**\r\n * Budget years\r\n * @type {Array}\r\n * @memberof BudgetType\r\n */\r\n budgetYears?: Array;\r\n}\r\n\r\nexport function BudgetTypeFromJSON(json: any): BudgetType {\r\n return BudgetTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function BudgetTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): BudgetType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'companyEconomyId': !exists(json, 'companyEconomyId') ? undefined : json['companyEconomyId'],\r\n 'budgetYears': !exists(json, 'budgetYears') ? undefined : ((json['budgetYears'] as Array).map(BudgetYearTypeFromJSON)),\r\n };\r\n}\r\n\r\nexport function BudgetTypeToJSON(value?: BudgetType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'companyEconomyId': value.companyEconomyId,\r\n 'budgetYears': value.budgetYears === undefined ? undefined : ((value.budgetYears as Array).map(BudgetYearTypeToJSON)),\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n ValueType,\r\n ValueTypeFromJSON,\r\n ValueTypeFromJSONTyped,\r\n ValueTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Avser ett enskilt budgetår\r\n * @export\r\n * @interface BudgetYearType\r\n */\r\nexport interface BudgetYearType {\r\n /**\r\n * unique identifier for a specifict budget\r\n * @type {string}\r\n * @memberof BudgetYearType\r\n */\r\n budgetId?: string;\r\n /**\r\n * Budget avser år, ska generas av API, föregående år - 2 år. Value1-7 är intäkter och summeras i Loan Process\r\n * @type {number}\r\n * @memberof BudgetYearType\r\n */\r\n budgetyear?: number;\r\n /**\r\n * \r\n * @type {ValueType}\r\n * @memberof BudgetYearType\r\n */\r\n budget?: ValueType;\r\n}\r\n\r\nexport function BudgetYearTypeFromJSON(json: any): BudgetYearType {\r\n return BudgetYearTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function BudgetYearTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): BudgetYearType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'budgetId': !exists(json, 'budgetId') ? undefined : json['budgetId'],\r\n 'budgetyear': !exists(json, 'budgetyear') ? undefined : json['budgetyear'],\r\n 'budget': !exists(json, 'budget') ? undefined : ValueTypeFromJSON(json['budget']),\r\n };\r\n}\r\n\r\nexport function BudgetYearTypeToJSON(value?: BudgetYearType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'budgetId': value.budgetId,\r\n 'budgetyear': value.budgetyear,\r\n 'budget': ValueTypeToJSON(value.budget),\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.6\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * TBD\r\n * @export\r\n * @interface BusinessCategoryType\r\n */\r\nexport interface BusinessCategoryType {\r\n /**\r\n * unique identity for businessCategoryType\r\n * @type {string}\r\n * @memberof BusinessCategoryType\r\n */\r\n businessId?: string;\r\n /**\r\n * Huvudrubrik för driftinriktning\r\n * @type {string}\r\n * @memberof BusinessCategoryType\r\n */\r\n businessCategory?: string;\r\n /**\r\n * Del av huvudsaklig driftinriktning\r\n * @type {number}\r\n * @memberof BusinessCategoryType\r\n */\r\n businessPart?: number;\r\n /**\r\n * Vald huvuddrifitinriktning av kund, kan vara vara ett val oavsett antal driftinriktningar.\r\n * @type {boolean}\r\n * @memberof BusinessCategoryType\r\n */\r\n mainBusiness?: boolean;\r\n}\r\n\r\n/**\r\n * Check if a given object implements the BusinessCategoryType interface.\r\n */\r\nexport function instanceOfBusinessCategoryType(value: object): boolean {\r\n let isInstance = true;\r\n\r\n return isInstance;\r\n}\r\n\r\nexport function BusinessCategoryTypeFromJSON(json: any): BusinessCategoryType {\r\n return BusinessCategoryTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function BusinessCategoryTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): BusinessCategoryType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'businessId': !exists(json, 'businessId') ? undefined : json['businessId'],\r\n 'businessCategory': !exists(json, 'businessCategory') ? undefined : json['businessCategory'],\r\n 'businessPart': !exists(json, 'businessPart') ? undefined : json['businessPart'],\r\n 'mainBusiness': !exists(json, 'mainBusiness') ? undefined : json['mainBusiness'],\r\n };\r\n}\r\n\r\nexport function BusinessCategoryTypeToJSON(value?: BusinessCategoryType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'businessId': value.businessId,\r\n 'businessCategory': value.businessCategory,\r\n 'businessPart': value.businessPart,\r\n 'mainBusiness': value.mainBusiness,\r\n };\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * ChildType, belong to household\r\n * @export\r\n * @interface ChildType\r\n */\r\nexport interface ChildType {\r\n /**\r\n * identity for child\r\n * @type {string}\r\n * @memberof ChildType\r\n */\r\n childId: string;\r\n /**\r\n * Barns ålder i hushållet\r\n * @type {number}\r\n * @memberof ChildType\r\n */\r\n childsAge?: number;\r\n /**\r\n * barnet bor i hushållet heltid/deltid (true/false)\r\n * @type {boolean}\r\n * @memberof ChildType\r\n */\r\n partInHousehold?: boolean;\r\n}\r\n\r\nexport function ChildTypeFromJSON(json: any): ChildType {\r\n return ChildTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ChildTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChildType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'childId': json['childId'],\r\n 'childsAge': !exists(json, 'childsAge') ? undefined : json['childsAge'],\r\n 'partInHousehold': !exists(json, 'partInHousehold') ? undefined : json['partInHousehold'],\r\n };\r\n}\r\n\r\nexport function ChildTypeToJSON(value?: ChildType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'childId': value.childId,\r\n 'childsAge': value.childsAge,\r\n 'partInHousehold': value.partInHousehold,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n CollateralAge,\r\n CollateralAgeFromJSON,\r\n CollateralAgeFromJSONTyped,\r\n CollateralAgeToJSON,\r\n TaxedOwnerType,\r\n TaxedOwnerTypeFromJSON,\r\n TaxedOwnerTypeFromJSONTyped,\r\n TaxedOwnerTypeToJSON,\r\n TypeOfCollateral,\r\n TypeOfCollateralFromJSON,\r\n TypeOfCollateralFromJSONTyped,\r\n TypeOfCollateralToJSON,\r\n} from './';\r\n\r\n/**\r\n * Säkerheter för lånet, om köp, även andra fastigheter kan användas som säkerhet för lånet\r\n * @export\r\n * @interface CollateralType\r\n */\r\nexport interface CollateralType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof CollateralType\r\n */\r\n processId: string;\r\n /**\r\n * customerId is swedish ssn or corporate organisation number\r\n * @type {string}\r\n * @memberof CollateralType\r\n */\r\n customerId?: string;\r\n /**\r\n * \r\n * @type {TypeOfCollateral}\r\n * @memberof CollateralType\r\n */\r\n typeOfCollateral?: TypeOfCollateral;\r\n /**\r\n * Collateral identity\r\n * @type {string}\r\n * @memberof CollateralType\r\n */\r\n collateralId?: string;\r\n /**\r\n * TBD - Fastighetskod (ska denna användas?)\r\n * @type {string}\r\n * @memberof CollateralType\r\n */\r\n collateralCode?: string;\r\n /**\r\n * Fastighetbeteckning\r\n * @type {string}\r\n * @memberof CollateralType\r\n */\r\n collateralName?: string;\r\n /**\r\n * En lista av taxerade fastighetsägare\r\n * @type {Array}\r\n * @memberof CollateralType\r\n */\r\n taxedOwners?: Array;\r\n /**\r\n * Kommun där fastigheten och/eller säkerheten finns registrerad\r\n * @type {string}\r\n * @memberof CollateralType\r\n */\r\n collateralMunicipality?: string;\r\n /**\r\n * Street address of the collateral\r\n * @type {string}\r\n * @memberof CollateralType\r\n */\r\n collateralStreet?: string;\r\n /**\r\n * Areal för skogen\r\n * @type {number}\r\n * @memberof CollateralType\r\n */\r\n collateralAreal?: number;\r\n /**\r\n * \r\n * @type {CollateralAge}\r\n * @memberof CollateralType\r\n */\r\n collateralAge?: CollateralAge;\r\n /**\r\n * Use this collateral as security in this application\r\n * @type {boolean}\r\n * @memberof CollateralType\r\n */\r\n useAsCollateral?: boolean;\r\n /**\r\n * Applicant has intention to by this collateral\r\n * @type {boolean}\r\n * @memberof CollateralType\r\n */\r\n buyCollateral?: boolean;\r\n}\r\n\r\nexport function CollateralTypeFromJSON(json: any): CollateralType {\r\n return CollateralTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function CollateralTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): CollateralType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'customerId': !exists(json, 'customerId') ? undefined : json['customerId'],\r\n 'typeOfCollateral': !exists(json, 'typeOfCollateral') ? undefined : TypeOfCollateralFromJSON(json['typeOfCollateral']),\r\n 'collateralId': !exists(json, 'collateralId') ? undefined : json['collateralId'],\r\n 'collateralCode': !exists(json, 'collateralCode') ? undefined : json['collateralCode'],\r\n 'collateralName': !exists(json, 'collateralName') ? undefined : json['collateralName'],\r\n 'taxedOwners': !exists(json, 'taxedOwners') ? undefined : ((json['taxedOwners'] as Array).map(TaxedOwnerTypeFromJSON)),\r\n 'collateralMunicipality': !exists(json, 'collateralMunicipality') ? undefined : json['collateralMunicipality'],\r\n 'collateralStreet': !exists(json, 'collateralStreet') ? undefined : json['collateralStreet'],\r\n 'collateralAreal': !exists(json, 'collateralAreal') ? undefined : json['collateralAreal'],\r\n 'collateralAge': !exists(json, 'collateralAge') ? undefined : CollateralAgeFromJSON(json['collateralAge']),\r\n 'useAsCollateral': !exists(json, 'useAsCollateral') ? undefined : json['useAsCollateral'],\r\n 'buyCollateral': !exists(json, 'buyCollateral') ? undefined : json['buyCollateral'],\r\n };\r\n}\r\n\r\nexport function CollateralTypeToJSON(value?: CollateralType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'customerId': value.customerId,\r\n 'typeOfCollateral': TypeOfCollateralToJSON(value.typeOfCollateral),\r\n 'collateralId': value.collateralId,\r\n 'collateralCode': value.collateralCode,\r\n 'collateralName': value.collateralName,\r\n 'taxedOwners': value.taxedOwners === undefined ? undefined : ((value.taxedOwners as Array).map(TaxedOwnerTypeToJSON)),\r\n 'collateralMunicipality': value.collateralMunicipality,\r\n 'collateralStreet': value.collateralStreet,\r\n 'collateralAreal': value.collateralAreal,\r\n 'collateralAge': CollateralAgeToJSON(value.collateralAge),\r\n 'useAsCollateral': value.useAsCollateral,\r\n 'buyCollateral': value.buyCollateral,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n RevenueType,\r\n RevenueTypeFromJSON,\r\n RevenueTypeFromJSONTyped,\r\n RevenueTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Type definition for company economy\r\n * @export\r\n * @interface CompanyEconomyType\r\n */\r\nexport interface CompanyEconomyType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof CompanyEconomyType\r\n */\r\n processId: string;\r\n /**\r\n * generated uuid in the model\r\n * @type {string}\r\n * @memberof CompanyEconomyType\r\n */\r\n companyId: string;\r\n /**\r\n * Type definition for company economy\r\n * @type {string}\r\n * @memberof CompanyEconomyType\r\n */\r\n companyEconomyId: string;\r\n /**\r\n * Customer category return by SAS (kundklass Not V1)\r\n * @type {number}\r\n * @memberof CompanyEconomyType\r\n */\r\n customerCategory?: number;\r\n /**\r\n * Årsomsättning\r\n * @type {Array}\r\n * @memberof CompanyEconomyType\r\n */\r\n revenues?: Array;\r\n}\r\n\r\nexport function CompanyEconomyTypeFromJSON(json: any): CompanyEconomyType {\r\n return CompanyEconomyTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function CompanyEconomyTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): CompanyEconomyType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'companyId': json['companyId'],\r\n 'companyEconomyId': json['companyEconomyId'],\r\n 'customerCategory': !exists(json, 'customerCategory') ? undefined : json['customerCategory'],\r\n 'revenues': !exists(json, 'Revenues') ? undefined : ((json['Revenues'] as Array).map(RevenueTypeFromJSON)),\r\n };\r\n}\r\n\r\nexport function CompanyEconomyTypeToJSON(value?: CompanyEconomyType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'companyId': value.companyId,\r\n 'companyEconomyId': value.companyEconomyId,\r\n 'customerCategory': value.customerCategory,\r\n 'Revenues': value.revenues === undefined ? undefined : ((value.revenues as Array).map(RevenueTypeToJSON)),\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n BusinessCategoryType,\r\n BusinessCategoryTypeFromJSON,\r\n BusinessCategoryTypeFromJSONTyped,\r\n BusinessCategoryTypeToJSON,\r\n PrincipalType,\r\n PrincipalTypeFromJSON,\r\n PrincipalTypeFromJSONTyped,\r\n PrincipalTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Type of company instance\r\n * @export\r\n * @interface CompanyType\r\n */\r\nexport interface CompanyType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n processId: string;\r\n /**\r\n * generated uuid in the model\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n companyId: string;\r\n /**\r\n * Organisation number from external service, swedish ssn (UC or SAP for existing companies)\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n orgNumber?: string;\r\n /**\r\n * Full name of the company from external services or BusinessName in SAP.\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n companyName?: string;\r\n /**\r\n * Status code from roaring API\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n statusCode?: string;\r\n /**\r\n * Status text high description\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n statusTextHigh?: string;\r\n /**\r\n * date when company was established, from external service or existing customer in SAP\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n created?: string;\r\n /**\r\n * Driftinriktning\r\n * @type {Array}\r\n * @memberof CompanyType\r\n */\r\n businessFocuses?: Array;\r\n /**\r\n * SNI-code from external company service roaring.io\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n industriCode?: string;\r\n /**\r\n * SNI-Text from external company service, category text\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n industriText?: string;\r\n /**\r\n * Legal Group code, available Legal Group codes for a company. The information is displayed as a code with a descriptive text. Source is roaring.io OVR Övriga Other HB/KB Handelsbolag Trading company AB Privat aktiebolag Limited company EF Enskild firma Sole proprietorship\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n leagalGroupCode?: string;\r\n /**\r\n * Legal Group Text, descriptive text\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n legalGroupText?: string;\r\n /**\r\n * Customer has selected this company for the loan to apply for\r\n * @type {boolean}\r\n * @memberof CompanyType\r\n */\r\n selectedCompany?: boolean;\r\n /**\r\n * list of huvudmän\r\n * @type {Array}\r\n * @memberof CompanyType\r\n */\r\n principals?: Array;\r\n /**\r\n * Broken fiscal year, brutet räkenskapsår (true/false) should only be visible for legalGroupCode AB\r\n * @type {boolean}\r\n * @memberof CompanyType\r\n */\r\n brokenFiscalYear?: boolean;\r\n /**\r\n * Bokslutsdatum\r\n * @type {string}\r\n * @memberof CompanyType\r\n */\r\n fiscalYearEndDate?: string;\r\n}\r\n\r\nexport function CompanyTypeFromJSON(json: any): CompanyType {\r\n return CompanyTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function CompanyTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): CompanyType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'companyId': json['companyId'],\r\n 'orgNumber': !exists(json, 'orgNumber') ? undefined : json['orgNumber'],\r\n 'companyName': !exists(json, 'companyName') ? undefined : json['companyName'],\r\n 'statusCode': !exists(json, 'statusCode') ? undefined : json['statusCode'],\r\n 'statusTextHigh': !exists(json, 'statusTextHigh') ? undefined : json['statusTextHigh'],\r\n 'created': !exists(json, 'created') ? undefined : json['created'],\r\n 'businessFocuses': !exists(json, 'businessFocuses') ? undefined : ((json['businessFocuses'] as Array).map(BusinessCategoryTypeFromJSON)),\r\n 'industriCode': !exists(json, 'industriCode') ? undefined : json['industriCode'],\r\n 'industriText': !exists(json, 'industriText') ? undefined : json['industriText'],\r\n 'leagalGroupCode': !exists(json, 'leagalGroupCode') ? undefined : json['leagalGroupCode'],\r\n 'legalGroupText': !exists(json, 'legalGroupText') ? undefined : json['legalGroupText'],\r\n 'selectedCompany': !exists(json, 'selectedCompany') ? undefined : json['selectedCompany'],\r\n 'principals': !exists(json, 'principals') ? undefined : ((json['principals'] as Array).map(PrincipalTypeFromJSON)),\r\n 'brokenFiscalYear': !exists(json, 'brokenFiscalYear') ? undefined : json['brokenFiscalYear'],\r\n 'fiscalYearEndDate': !exists(json, 'fiscalYearEndDate') ? undefined : json['fiscalYearEndDate'],\r\n };\r\n}\r\n\r\nexport function CompanyTypeToJSON(value?: CompanyType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'companyId': value.companyId,\r\n 'orgNumber': value.orgNumber,\r\n 'companyName': value.companyName,\r\n 'statusCode': value.statusCode,\r\n 'statusTextHigh': value.statusTextHigh,\r\n 'created': value.created,\r\n 'businessFocuses': value.businessFocuses === undefined ? undefined : ((value.businessFocuses as Array).map(BusinessCategoryTypeToJSON)),\r\n 'industriCode': value.industriCode,\r\n 'industriText': value.industriText,\r\n 'leagalGroupCode': value.leagalGroupCode,\r\n 'legalGroupText': value.legalGroupText,\r\n 'selectedCompany': value.selectedCompany,\r\n 'principals': value.principals === undefined ? undefined : ((value.principals as Array).map(PrincipalTypeToJSON)),\r\n 'brokenFiscalYear': value.brokenFiscalYear,\r\n 'fiscalYearEndDate': value.fiscalYearEndDate,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * Contact information definitions\r\n * @export\r\n * @interface ContactInformationType\r\n */\r\nexport interface ContactInformationType {\r\n /**\r\n * applicant enter email for notification\r\n * @type {string}\r\n * @memberof ContactInformationType\r\n */\r\n applicanteMail?: string;\r\n /**\r\n * applicant entered mobile number for notification\r\n * @type {string}\r\n * @memberof ContactInformationType\r\n */\r\n applicantMobileNumber?: string;\r\n}\r\n\r\nexport function ContactInformationTypeFromJSON(json: any): ContactInformationType {\r\n return ContactInformationTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ContactInformationTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): ContactInformationType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'applicanteMail': !exists(json, 'applicanteMail') ? undefined : json['applicanteMail'],\r\n 'applicantMobileNumber': !exists(json, 'applicantMobileNumber') ? undefined : json['applicantMobileNumber'],\r\n };\r\n}\r\n\r\nexport function ContactInformationTypeToJSON(value?: ContactInformationType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'applicanteMail': value.applicanteMail,\r\n 'applicantMobileNumber': value.applicantMobileNumber,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * customers in a processid, a list array of customerId\r\n * @export\r\n * @interface CustomerIdType\r\n */\r\nexport interface CustomerIdType {\r\n /**\r\n * customerId is swedish ssn or corporate organisation number\r\n * @type {string}\r\n * @memberof CustomerIdType\r\n */\r\n customerId?: string;\r\n /**\r\n * timestamp when customer has been added to the application, to hold (huvudsökande, medsökande) order\r\n * @type {string}\r\n * @memberof CustomerIdType\r\n */\r\n customerAdded?: string;\r\n}\r\n\r\nexport function CustomerIdTypeFromJSON(json: any): CustomerIdType {\r\n return CustomerIdTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function CustomerIdTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): CustomerIdType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'customerId': !exists(json, 'customerId') ? undefined : json['customerId'],\r\n 'customerAdded': !exists(json, 'customerAdded') ? undefined : json['customerAdded'],\r\n };\r\n}\r\n\r\nexport function CustomerIdTypeToJSON(value?: CustomerIdType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'customerId': value.customerId,\r\n 'customerAdded': value.customerAdded,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n EUType,\r\n EUTypeFromJSON,\r\n EUTypeFromJSONTyped,\r\n EUTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Type of EUSupport instance\r\n * @export\r\n * @interface EUSupportType\r\n */\r\nexport interface EUSupportType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof EUSupportType\r\n */\r\n processId: string;\r\n /**\r\n * Unique identifier for EU-Support\r\n * @type {string}\r\n * @memberof EUSupportType\r\n */\r\n euId: string;\r\n /**\r\n * \r\n * @type {EUType}\r\n * @memberof EUSupportType\r\n */\r\n euType?: EUType;\r\n /**\r\n * summerat EU-stöd\r\n * @type {number}\r\n * @memberof EUSupportType\r\n */\r\n supportAmount?: number;\r\n /**\r\n * EU-stödet gäller år\r\n * @type {string}\r\n * @memberof EUSupportType\r\n */\r\n supportYear?: string;\r\n}\r\n\r\nexport function EUSupportTypeFromJSON(json: any): EUSupportType {\r\n return EUSupportTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function EUSupportTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): EUSupportType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'euId': json['euId'],\r\n 'euType': !exists(json, 'euType') ? undefined : EUTypeFromJSON(json['euType']),\r\n 'supportAmount': !exists(json, 'supportAmount') ? undefined : json['supportAmount'],\r\n 'supportYear': !exists(json, 'supportYear') ? undefined : json['supportYear'],\r\n };\r\n}\r\n\r\nexport function EUSupportTypeToJSON(value?: EUSupportType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'euId': value.euId,\r\n 'euType': EUTypeToJSON(value.euType),\r\n 'supportAmount': value.supportAmount,\r\n 'supportYear': value.supportYear,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n TypeOfLoan,\r\n TypeOfLoanFromJSON,\r\n TypeOfLoanFromJSONTyped,\r\n TypeOfLoanToJSON,\r\n} from './';\r\n\r\n/**\r\n * Externa lån kunden har i andra kreditinstitut, detta exkluderar LH-lån\r\n * @export\r\n * @interface ExtLoanType\r\n */\r\nexport interface ExtLoanType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof ExtLoanType\r\n */\r\n processId: string;\r\n /**\r\n * A list of external loan owners (cusotmerId)\r\n * @type {Array}\r\n * @memberof ExtLoanType\r\n */\r\n extLoanOwners?: Array;\r\n /**\r\n * Type definitions for external loans\r\n * @type {string}\r\n * @memberof ExtLoanType\r\n */\r\n extloanId: string;\r\n /**\r\n * \r\n * @type {TypeOfLoan}\r\n * @memberof ExtLoanType\r\n */\r\n typeOfLoan?: TypeOfLoan;\r\n /**\r\n * Kreditinstitut, Bank, Loan originator\r\n * @type {string}\r\n * @memberof ExtLoanType\r\n */\r\n extCreditInstitute?: string;\r\n /**\r\n * Clearing number (has been deprecated)\r\n * @type {string}\r\n * @memberof ExtLoanType\r\n */\r\n extloanClearing?: string;\r\n /**\r\n * Loan number\r\n * @type {string}\r\n * @memberof ExtLoanType\r\n */\r\n extloanNumber?: string;\r\n /**\r\n * externa loan, amount\r\n * @type {number}\r\n * @memberof ExtLoanType\r\n */\r\n extloanAmount?: number;\r\n /**\r\n * Redeem loans - Lösa lånet i annan bank\r\n * @type {boolean}\r\n * @memberof ExtLoanType\r\n */\r\n extRedeemLoan?: boolean;\r\n /**\r\n * Monthly cost for Studielån\r\n * @type {number}\r\n * @memberof ExtLoanType\r\n */\r\n extMonthlyCost?: number;\r\n}\r\n\r\nexport function ExtLoanTypeFromJSON(json: any): ExtLoanType {\r\n return ExtLoanTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ExtLoanTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): ExtLoanType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'extLoanOwners': !exists(json, 'extLoanOwners') ? undefined : json['extLoanOwners'],\r\n 'extloanId': json['extloanId'],\r\n 'typeOfLoan': !exists(json, 'typeOfLoan') ? undefined : TypeOfLoanFromJSON(json['typeOfLoan']),\r\n 'extCreditInstitute': !exists(json, 'extCreditInstitute') ? undefined : json['extCreditInstitute'],\r\n 'extloanClearing': !exists(json, 'extloanClearing') ? undefined : json['extloanClearing'],\r\n 'extloanNumber': !exists(json, 'extloanNumber') ? undefined : json['extloanNumber'],\r\n 'extloanAmount': !exists(json, 'extloanAmount') ? undefined : json['extloanAmount'],\r\n 'extRedeemLoan': !exists(json, 'extRedeemLoan') ? undefined : json['extRedeemLoan'],\r\n 'extMonthlyCost': !exists(json, 'extMonthlyCost') ? undefined : json['extMonthlyCost'],\r\n };\r\n}\r\n\r\nexport function ExtLoanTypeToJSON(value?: ExtLoanType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'extLoanOwners': value.extLoanOwners,\r\n 'extloanId': value.extloanId,\r\n 'typeOfLoan': TypeOfLoanToJSON(value.typeOfLoan),\r\n 'extCreditInstitute': value.extCreditInstitute,\r\n 'extloanClearing': value.extloanClearing,\r\n 'extloanNumber': value.extloanNumber,\r\n 'extloanAmount': value.extloanAmount,\r\n 'extRedeemLoan': value.extRedeemLoan,\r\n 'extMonthlyCost': value.extMonthlyCost,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * Type of Guarantor instance\r\n * @export\r\n * @interface GuarantorType\r\n */\r\nexport interface GuarantorType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof GuarantorType\r\n */\r\n processId: string;\r\n /**\r\n * TBD\r\n * @type {string}\r\n * @memberof GuarantorType\r\n */\r\n guarantorId: string;\r\n /**\r\n * TBD\r\n * @type {string}\r\n * @memberof GuarantorType\r\n */\r\n guarantorName?: string;\r\n /**\r\n * TBD\r\n * @type {string}\r\n * @memberof GuarantorType\r\n */\r\n guarantorPhone?: string;\r\n /**\r\n * TBD\r\n * @type {string}\r\n * @memberof GuarantorType\r\n */\r\n guarantorCustomerId?: string;\r\n}\r\n\r\nexport function GuarantorTypeFromJSON(json: any): GuarantorType {\r\n return GuarantorTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function GuarantorTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): GuarantorType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'guarantorId': json['guarantorId'],\r\n 'guarantorName': !exists(json, 'guarantorName') ? undefined : json['guarantorName'],\r\n 'guarantorPhone': !exists(json, 'guarantorPhone') ? undefined : json['guarantorPhone'],\r\n 'guarantorCustomerId': !exists(json, 'guarantorCustomerId') ? undefined : json['guarantorCustomerId'],\r\n };\r\n}\r\n\r\nexport function GuarantorTypeToJSON(value?: GuarantorType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'guarantorId': value.guarantorId,\r\n 'guarantorName': value.guarantorName,\r\n 'guarantorPhone': value.guarantorPhone,\r\n 'guarantorCustomerId': value.guarantorCustomerId,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * Member in a household\r\n * @export\r\n * @interface HouseholdMemberType\r\n */\r\nexport interface HouseholdMemberType {\r\n /**\r\n * Member in a household (customerId) personnummer\r\n * @type {string}\r\n * @memberof HouseholdMemberType\r\n */\r\n householdMember?: string;\r\n}\r\n\r\nexport function HouseholdMemberTypeFromJSON(json: any): HouseholdMemberType {\r\n return HouseholdMemberTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function HouseholdMemberTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): HouseholdMemberType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'householdMember': !exists(json, 'householdMember') ? undefined : json['householdMember'],\r\n };\r\n}\r\n\r\nexport function HouseholdMemberTypeToJSON(value?: HouseholdMemberType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'householdMember': value.householdMember,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n ChildType,\r\n ChildTypeFromJSON,\r\n ChildTypeFromJSONTyped,\r\n ChildTypeToJSON,\r\n HouseholdMemberType,\r\n HouseholdMemberTypeFromJSON,\r\n HouseholdMemberTypeFromJSONTyped,\r\n HouseholdMemberTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Household should be loosely coupled in the model. We have to support many customerId in a household, this is done by adding customerId to the array customerIds.\r\n * @export\r\n * @interface HouseholdType\r\n */\r\nexport interface HouseholdType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof HouseholdType\r\n */\r\n processId: string;\r\n /**\r\n * Hosuehold identity key\r\n * @type {string}\r\n * @memberof HouseholdType\r\n */\r\n householdId: string;\r\n /**\r\n * array of householdmembers\r\n * @type {Array}\r\n * @memberof HouseholdType\r\n */\r\n householdMembers?: Array;\r\n /**\r\n * Number of child in this household\r\n * @type {number}\r\n * @memberof HouseholdType\r\n */\r\n numberOfChildsAtHome?: number;\r\n /**\r\n * holds all child in a household\r\n * @type {Array}\r\n * @memberof HouseholdType\r\n */\r\n childs?: Array;\r\n /**\r\n * number of cars in this houshold.\r\n * @type {number}\r\n * @memberof HouseholdType\r\n */\r\n numberOfCars?: number;\r\n /**\r\n * Underhållskostnad för barn i annat hushåll betalande, underhållskostander barn\r\n * @type {number}\r\n * @memberof HouseholdType\r\n */\r\n childMaintenaceCost?: number;\r\n /**\r\n * Erhållen underhållskostnad för barn, erhållen underhållskostnad\r\n * @type {number}\r\n * @memberof HouseholdType\r\n */\r\n receiveChildMaintenanceCost?: number;\r\n /**\r\n * Totala barnomsorgskostnaden per månad.\r\n * @type {number}\r\n * @memberof HouseholdType\r\n */\r\n childCareAmount?: number;\r\n}\r\n\r\nexport function HouseholdTypeFromJSON(json: any): HouseholdType {\r\n return HouseholdTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function HouseholdTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): HouseholdType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'householdId': json['householdId'],\r\n 'householdMembers': !exists(json, 'householdMembers') ? undefined : ((json['householdMembers'] as Array).map(HouseholdMemberTypeFromJSON)),\r\n 'numberOfChildsAtHome': !exists(json, 'numberOfChildsAtHome') ? undefined : json['numberOfChildsAtHome'],\r\n 'childs': !exists(json, 'childs') ? undefined : ((json['childs'] as Array).map(ChildTypeFromJSON)),\r\n 'numberOfCars': !exists(json, 'numberOfCars') ? undefined : json['numberOfCars'],\r\n 'childMaintenaceCost': !exists(json, 'childMaintenaceCost') ? undefined : json['childMaintenaceCost'],\r\n 'receiveChildMaintenanceCost': !exists(json, 'receiveChildMaintenanceCost') ? undefined : json['receiveChildMaintenanceCost'],\r\n 'childCareAmount': !exists(json, 'childCareAmount') ? undefined : json['childCareAmount'],\r\n };\r\n}\r\n\r\nexport function HouseholdTypeToJSON(value?: HouseholdType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'householdId': value.householdId,\r\n 'householdMembers': value.householdMembers === undefined ? undefined : ((value.householdMembers as Array).map(HouseholdMemberTypeToJSON)),\r\n 'numberOfChildsAtHome': value.numberOfChildsAtHome,\r\n 'childs': value.childs === undefined ? undefined : ((value.childs as Array).map(ChildTypeToJSON)),\r\n 'numberOfCars': value.numberOfCars,\r\n 'childMaintenaceCost': value.childMaintenaceCost,\r\n 'receiveChildMaintenanceCost': value.receiveChildMaintenanceCost,\r\n 'childCareAmount': value.childCareAmount,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * KYC-Information\r\n * @export\r\n * @interface KycInformationType\r\n */\r\nexport interface KycInformationType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof KycInformationType\r\n */\r\n processId: string;\r\n /**\r\n * customerId is swedish ssn or corporate organisation number\r\n * @type {string}\r\n * @memberof KycInformationType\r\n */\r\n customerId: string;\r\n /**\r\n * Kyc-identity key\r\n * @type {string}\r\n * @memberof KycInformationType\r\n */\r\n kycId?: string;\r\n /**\r\n * Jag är medveten om att Landshypotek Bank inhämtar en kreditupplysning på mig och att det sker när jag går vidare från denna sida i nästa steg i ansökan.\r\n * @type {boolean}\r\n * @memberof KycInformationType\r\n */\r\n kycAcceptUC?: boolean;\r\n /**\r\n * Jag är medveten om att Landshypotek Bank behandlar mina personuppgifter i och med ansökan och att jag kan läsa mer om Landshypotek Banks personuppgiftsbehandling.\r\n * @type {boolean}\r\n * @memberof KycInformationType\r\n */\r\n kycAcceptGDPR?: boolean;\r\n /**\r\n * Jag är medveten om att de uppgifter jag lämnar och resultatet av kreditansökan även visas för medsökande, om en sådan läggs till senare i ansökan. Om jag äger andra fastigheter, som banken hämtar uppgifter om från externa källor, visas även de uppgifterna för medsökande.\r\n * @type {boolean}\r\n * @memberof KycInformationType\r\n */\r\n kycUCAware?: boolean;\r\n /**\r\n * Innehar eller har du de 18 senaste månaderna innehaft en viktig offentlig funnktion?\r\n * @type {boolean}\r\n * @memberof KycInformationType\r\n */\r\n kycPublicFunction?: boolean;\r\n /**\r\n * Är du familjemedlem eller medarbetare till en person som har, eller som under de senaste 18 månaderna innehaft en viktig offentlig funktion?\r\n * @type {boolean}\r\n * @memberof KycInformationType\r\n */\r\n kycRelatedPublicFunction?: boolean;\r\n /**\r\n * High risk industry, högriskbransch (true/false)\r\n * @type {boolean}\r\n * @memberof KycInformationType\r\n */\r\n kycHighRiskIndustry?: boolean;\r\n /**\r\n * High risk industry entered by customer\r\n * @type {string}\r\n * @memberof KycInformationType\r\n */\r\n kycHighRiskIndustryText?: string;\r\n /**\r\n * Är du skatteskyldig i USA genom medborgarskap eller annan anknytning till USA?\r\n * @type {boolean}\r\n * @memberof KycInformationType\r\n */\r\n kycAmericanCitizen?: boolean;\r\n /**\r\n * Är kund skattskyldig i ett annat land än Sverige och USA?\r\n * @type {boolean}\r\n * @memberof KycInformationType\r\n */\r\n kycCrsTaxObligation?: boolean; \r\n}\r\n\r\nexport function KycInformationTypeFromJSON(json: any): KycInformationType {\r\n return KycInformationTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function KycInformationTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): KycInformationType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'customerId': json['customerId'],\r\n 'kycId': !exists(json, 'kycId') ? undefined : json['kycId'],\r\n 'kycAcceptUC': !exists(json, 'kycAcceptUC') ? undefined : json['kycAcceptUC'],\r\n 'kycAcceptGDPR': !exists(json, 'kycAcceptGDPR') ? undefined : json['kycAcceptGDPR'],\r\n 'kycUCAware': !exists(json, 'kycUCAware') ? undefined : json['kycUCAware'],\r\n 'kycPublicFunction': !exists(json, 'kycPublicFunction') ? undefined : json['kycPublicFunction'],\r\n 'kycRelatedPublicFunction': !exists(json, 'kycRelatedPublicFunction') ? undefined : json['kycRelatedPublicFunction'],\r\n 'kycHighRiskIndustry': !exists(json, 'kycHighRiskIndustry') ? undefined : json['kycHighRiskIndustry'],\r\n 'kycHighRiskIndustryText': !exists(json, 'kycHighRiskIndustryText') ? undefined : json['kycHighRiskIndustryText'],\r\n 'kycAmericanCitizen': !exists(json, 'kycAmericanCitizen') ? undefined : json['kycAmericanCitizen'],\r\n 'kycCrsTaxObligation': !exists(json, 'kycCrsTaxObligation') ? undefined : json['kycCrsTaxObligation'],\r\n };\r\n}\r\n\r\nexport function KycInformationTypeToJSON(value?: KycInformationType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'customerId': value.customerId,\r\n 'kycId': value.kycId,\r\n 'kycAcceptUC': value.kycAcceptUC,\r\n 'kycAcceptGDPR': value.kycAcceptGDPR,\r\n 'kycUCAware': value.kycUCAware,\r\n 'kycPublicFunction': value.kycPublicFunction,\r\n 'kycRelatedPublicFunction': value.kycRelatedPublicFunction,\r\n 'kycHighRiskIndustry': value.kycHighRiskIndustry,\r\n 'kycHighRiskIndustryText': value.kycHighRiskIndustryText,\r\n 'kycAmericanCitizen': value.kycAmericanCitizen,\r\n 'kycCrsTaxObligation': value.kycCrsTaxObligation\r\n };\r\n}\r\n\r\n\r\n","// tslint:disable\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.5\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { Attachment, AttachmentRequest } from '../../../models/SelmaModels';\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n ApplicantType,\r\n ApplicantTypeFromJSON,\r\n ApplicantTypeToJSON,\r\n BudgetType,\r\n BudgetTypeFromJSON,\r\n BudgetTypeToJSON,\r\n CollateralType,\r\n CollateralTypeFromJSON,\r\n CollateralTypeToJSON,\r\n CompanyEconomyType,\r\n CompanyEconomyTypeFromJSON,\r\n CompanyEconomyTypeToJSON,\r\n CompanyType,\r\n CompanyTypeFromJSON,\r\n CompanyTypeToJSON,\r\n EUSupportType,\r\n EUSupportTypeFromJSON,\r\n EUSupportTypeToJSON,\r\n ExtLoanType,\r\n ExtLoanTypeFromJSON,\r\n ExtLoanTypeToJSON,\r\n GuarantorType,\r\n GuarantorTypeFromJSON,\r\n GuarantorTypeToJSON,\r\n HouseholdType,\r\n HouseholdTypeFromJSON,\r\n HouseholdTypeToJSON,\r\n KycInformationType,\r\n KycInformationTypeFromJSON,\r\n KycInformationTypeToJSON,\r\n LoanType,\r\n LoanTypeFromJSON,\r\n LoanTypeToJSON,\r\n MaintenanceCostType,\r\n MaintenanceCostTypeFromJSON,\r\n MaintenanceCostTypeToJSON,\r\n PersonalEconomyType,\r\n PersonalEconomyTypeFromJSON,\r\n PersonalEconomyTypeToJSON,\r\n ProcessType,\r\n ProcessTypeFromJSON,\r\n ProcessTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Used for getprocessall and saveprocessall\r\n * @export\r\n * @interface LinksAll\r\n */\r\nexport interface LinksAll {\r\n /**\r\n * Return a list of type processType\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n processes?: Array;\r\n /**\r\n * List of applicantType\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n applicants?: Array;\r\n /**\r\n * Array list of loanType (Loan)\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n loans?: Array;\r\n /**\r\n * Type definition for external loans\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n extloans?: Array;\r\n /**\r\n * List of companyType\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n companies?: Array;\r\n /**\r\n * return all available households for a customer\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n households?: Array;\r\n /**\r\n * Array list of type collateralType\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n collaterals?: Array;\r\n /**\r\n * -> Get a list of PersonalEconomyType\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n personaleconomies?: Array;\r\n /**\r\n * -> Type definition for company economies, returns array of CompanyEconomyType\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n companyeconomies?: Array;\r\n /**\r\n * Array of budgetType for processId with dirrent companyEconomyID\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n budgets?: Array;\r\n /**\r\n * Return a list of type kycInformationType\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n kycinformations?: Array;\r\n /**\r\n * TBD\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n guarantors?: Array;\r\n /**\r\n * TBD\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n eusupports?: Array;\r\n /**\r\n * TBD\r\n * @type {Array}\r\n * @memberof LinksAll\r\n */\r\n maintenancecosts?: Array;\r\n\r\n // LIMETTA EXTENSION.\r\n attachments?: Attachment[];\r\n attachmentRequests?: AttachmentRequest[];\r\n}\r\n\r\nexport function LinksAllFromJSON(json: any): LinksAll {\r\n return {\r\n 'processes': !exists(json, 'processes') ? undefined : (json['processes'] as Array).map(ProcessTypeFromJSON),\r\n 'applicants': !exists(json, 'applicants') ? undefined : (json['applicants'] as Array).map(ApplicantTypeFromJSON),\r\n 'loans': !exists(json, 'loans') ? undefined : (json['loans'] as Array).map(LoanTypeFromJSON),\r\n 'extloans': !exists(json, 'extloans') ? undefined : (json['extloans'] as Array).map(ExtLoanTypeFromJSON),\r\n 'companies': !exists(json, 'companies') ? undefined : (json['companies'] as Array).map(CompanyTypeFromJSON),\r\n 'households': !exists(json, 'households') ? undefined : (json['households'] as Array).map(HouseholdTypeFromJSON),\r\n 'collaterals': !exists(json, 'collaterals') ? undefined : (json['collaterals'] as Array).map(CollateralTypeFromJSON),\r\n 'personaleconomies': !exists(json, 'personaleconomies') ? undefined : (json['personaleconomies'] as Array).map(PersonalEconomyTypeFromJSON),\r\n 'companyeconomies': !exists(json, 'companyeconomies') ? undefined : (json['companyeconomies'] as Array).map(CompanyEconomyTypeFromJSON),\r\n 'budgets': !exists(json, 'budgets') ? undefined : (json['budgets'] as Array).map(BudgetTypeFromJSON),\r\n 'kycinformations': !exists(json, 'kycinformations') ? undefined : (json['kycinformations'] as Array).map(KycInformationTypeFromJSON),\r\n 'guarantors': !exists(json, 'guarantors') ? undefined : (json['guarantors'] as Array).map(GuarantorTypeFromJSON),\r\n 'eusupports': !exists(json, 'eusupports') ? undefined : (json['eusupports'] as Array).map(EUSupportTypeFromJSON),\r\n 'maintenancecosts': !exists(json, 'maintenancecosts') ? undefined : (json['maintenancecosts'] as Array).map(MaintenanceCostTypeFromJSON),\r\n // LIMETTA EXTENSION.\r\n 'attachments': json.attachments,\r\n 'attachmentRequests': json.attachmentRequests\r\n };\r\n}\r\n\r\nexport function LinksAllToJSON(value?: LinksAll): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n return {\r\n 'processes': value.processes === undefined ? undefined : (value.processes as Array).map(ProcessTypeToJSON),\r\n 'applicants': value.applicants === undefined ? undefined : (value.applicants as Array).map(ApplicantTypeToJSON),\r\n 'loans': value.loans === undefined ? undefined : (value.loans as Array).map(LoanTypeToJSON),\r\n 'extloans': value.extloans === undefined ? undefined : (value.extloans as Array).map(ExtLoanTypeToJSON),\r\n 'companies': value.companies === undefined ? undefined : (value.companies as Array).map(CompanyTypeToJSON),\r\n 'households': value.households === undefined ? undefined : (value.households as Array).map(HouseholdTypeToJSON),\r\n 'collaterals': value.collaterals === undefined ? undefined : (value.collaterals as Array).map(CollateralTypeToJSON),\r\n 'personaleconomies': value.personaleconomies === undefined ? undefined : (value.personaleconomies as Array).map(PersonalEconomyTypeToJSON),\r\n 'companyeconomies': value.companyeconomies === undefined ? undefined : (value.companyeconomies as Array).map(CompanyEconomyTypeToJSON),\r\n 'budgets': value.budgets === undefined ? undefined : (value.budgets as Array).map(BudgetTypeToJSON),\r\n 'kycinformations': value.kycinformations === undefined ? undefined : (value.kycinformations as Array).map(KycInformationTypeToJSON),\r\n 'guarantors': value.guarantors === undefined ? undefined : (value.guarantors as Array).map(GuarantorTypeToJSON),\r\n 'eusupports': value.eusupports === undefined ? undefined : (value.eusupports as Array).map(EUSupportTypeToJSON),\r\n 'maintenancecosts': value.maintenancecosts === undefined ? undefined : (value.maintenancecosts as Array).map(MaintenanceCostTypeToJSON),\r\n // LIMETTA EXTENSION.\r\n 'attachments': value.attachments === undefined ? undefined : value.attachments,\r\n 'attachmentRequests': value.attachmentRequests === undefined ? undefined : value.attachmentRequests,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * loanOwnerType\r\n * @export\r\n * @interface LoanOwnerType\r\n */\r\nexport interface LoanOwnerType {\r\n /**\r\n * customerId is swedish ssn or corporate organisation number\r\n * @type {string}\r\n * @memberof LoanOwnerType\r\n */\r\n customerId?: string;\r\n /**\r\n * Andel kund har i huset (MaintenanceType), gäller inte hyresrätt.\r\n * @type {number}\r\n * @memberof LoanOwnerType\r\n */\r\n ownershipPart?: number;\r\n}\r\n\r\nexport function LoanOwnerTypeFromJSON(json: any): LoanOwnerType {\r\n return LoanOwnerTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function LoanOwnerTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): LoanOwnerType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'customerId': !exists(json, 'customerId') ? undefined : json['customerId'],\r\n 'ownershipPart': !exists(json, 'ownershipPart') ? undefined : json['ownershipPart'],\r\n };\r\n}\r\n\r\nexport function LoanOwnerTypeToJSON(value?: LoanOwnerType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'customerId': value.customerId,\r\n 'ownershipPart': value.ownershipPart,\r\n };\r\n}\r\n\r\n\r\n","// tslint:disable\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.5\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n AimType,\r\n AimTypeFromJSON,\r\n AimTypeToJSON,\r\n DownPaymentType,\r\n DownPaymentTypeFromJSON,\r\n DownPaymentTypeToJSON,\r\n TakeoverLoanType,\r\n TakeoverLoanTypeFromJSON,\r\n TakeoverLoanTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * This represent the customer loan structure\r\n * @export\r\n * @interface LoanType\r\n */\r\nexport interface LoanType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof LoanType\r\n */\r\n processId?: string;\r\n /**\r\n * Loan identity\r\n * @type {string}\r\n * @memberof LoanType\r\n */\r\n loanId: string;\r\n /**\r\n * This will only be a temporary loanNumber, when can we reserve a loan number in SAP\r\n * @type {string}\r\n * @memberof LoanType\r\n */\r\n loanNumber?: string;\r\n /**\r\n * Övertag från annan bank, fix för att övertag inte finns i LP (deprecated) moved to takeoverLoan\r\n * @type {boolean}\r\n * @memberof LoanType\r\n */\r\n loanTakeOver?: boolean;\r\n /**\r\n * Applicants want to loan this amount\r\n * @type {number}\r\n * @memberof LoanType\r\n */\r\n loanAmount?: number;\r\n /**\r\n * \r\n * @type {DownPaymentType}\r\n * @memberof LoanType\r\n */\r\n downPaymentType?: DownPaymentType;\r\n /**\r\n * Om val Övrigt på downPaymentType ska text anges i GUI och hamna i detta fält.\r\n * @type {string}\r\n * @memberof LoanType\r\n */\r\n downPaymentOther?: string;\r\n /**\r\n * Kontantinsats\r\n * @type {number}\r\n * @memberof LoanType\r\n */\r\n downPaymentAmount?: number;\r\n /**\r\n * Ansvarig handläggare skriver en ärende- och ändamålsbeskrvning. Icke obligatoriskt.\r\n * @type {string}\r\n * @memberof LoanType\r\n */\r\n purposeDescription?: string;\r\n /**\r\n * Each loan can have it\\'s own aim.\r\n * @type {Array}\r\n * @memberof LoanType\r\n */\r\n aims?: Array;\r\n /**\r\n * Array list of TakeoverLoanType (TakeoverLoan)\r\n * @type {Array}\r\n * @memberof LoanType\r\n */\r\n takeoverloans?: Array;\r\n}\r\n\r\nexport function LoanTypeFromJSON(json: any): LoanType {\r\n return {\r\n 'processId': !exists(json, 'processId') ? undefined : json['processId'],\r\n 'loanId': json['loanId'],\r\n 'loanNumber': !exists(json, 'loanNumber') ? undefined : json['loanNumber'],\r\n 'loanTakeOver': !exists(json, 'loanTakeOver') ? undefined : json['loanTakeOver'],\r\n 'loanAmount': !exists(json, 'loanAmount') ? undefined : json['loanAmount'],\r\n 'downPaymentType': !exists(json, 'downPaymentType') ? undefined : DownPaymentTypeFromJSON(json['downPaymentType']),\r\n 'downPaymentOther': !exists(json, 'downPaymentOther') ? undefined : json['downPaymentOther'],\r\n 'downPaymentAmount': !exists(json, 'downPaymentAmount') ? undefined : json['downPaymentAmount'],\r\n 'purposeDescription': !exists(json, 'purposeDescription') ? undefined : json['purposeDescription'],\r\n 'aims': !exists(json, 'aims') ? undefined : (json['aims'] as Array).map(AimTypeFromJSON),\r\n 'takeoverloans': !exists(json, 'takeoverloans') ? undefined : (json['takeoverloans'] as Array).map(TakeoverLoanTypeFromJSON),\r\n };\r\n}\r\n\r\nexport function LoanTypeToJSON(value?: LoanType): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n return {\r\n 'processId': value.processId,\r\n 'loanId': value.loanId,\r\n 'loanNumber': value.loanNumber,\r\n 'loanTakeOver': value.loanTakeOver,\r\n 'loanAmount': value.loanAmount,\r\n 'downPaymentType': DownPaymentTypeToJSON(value.downPaymentType),\r\n 'downPaymentOther': value.downPaymentOther,\r\n 'downPaymentAmount': value.downPaymentAmount,\r\n 'purposeDescription': value.purposeDescription,\r\n 'aims': value.aims === undefined ? undefined : (value.aims as Array).map(AimTypeToJSON),\r\n 'takeoverloans': value.takeoverloans === undefined ? undefined : (value.takeoverloans as Array).map(TakeoverLoanTypeToJSON),\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n MaintenanceHouseType,\r\n MaintenanceHouseTypeFromJSON,\r\n MaintenanceHouseTypeFromJSONTyped,\r\n MaintenanceHouseTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Driftkostnader i övriga boenden\r\n * @export\r\n * @interface MaintenanceCostType\r\n */\r\nexport interface MaintenanceCostType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof MaintenanceCostType\r\n */\r\n processId: string;\r\n /**\r\n * Unique identifier for maintenace cost\r\n * @type {string}\r\n * @memberof MaintenanceCostType\r\n */\r\n maintenanceCostId: string;\r\n /**\r\n * customerId is swedish ssn or corporate organisation number\r\n * @type {string}\r\n * @memberof MaintenanceCostType\r\n */\r\n customerId: string;\r\n /**\r\n * TBD\r\n * @type {Array}\r\n * @memberof MaintenanceCostType\r\n */\r\n typeofhouses?: Array;\r\n}\r\n\r\nexport function MaintenanceCostTypeFromJSON(json: any): MaintenanceCostType {\r\n return MaintenanceCostTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function MaintenanceCostTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): MaintenanceCostType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'maintenanceCostId': json['maintenanceCostId'],\r\n 'customerId': json['customerId'],\r\n 'typeofhouses': !exists(json, 'typeofhouses') ? undefined : ((json['typeofhouses'] as Array).map(MaintenanceHouseTypeFromJSON)),\r\n };\r\n}\r\n\r\nexport function MaintenanceCostTypeToJSON(value?: MaintenanceCostType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'maintenanceCostId': value.maintenanceCostId,\r\n 'customerId': value.customerId,\r\n 'typeofhouses': value.typeofhouses === undefined ? undefined : ((value.typeofhouses as Array).map(MaintenanceHouseTypeToJSON)),\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n LoanOwnerType,\r\n LoanOwnerTypeFromJSON,\r\n LoanOwnerTypeFromJSONTyped,\r\n LoanOwnerTypeToJSON,\r\n TypeOfHouse,\r\n TypeOfHouseFromJSON,\r\n TypeOfHouseFromJSONTyped,\r\n TypeOfHouseToJSON,\r\n} from './';\r\n\r\n/**\r\n * Typ av hus\r\n * @export\r\n * @interface MaintenanceHouseType\r\n */\r\nexport interface MaintenanceHouseType {\r\n /**\r\n * \r\n * @type {TypeOfHouse}\r\n * @memberof MaintenanceHouseType\r\n */\r\n typeOfHouse?: TypeOfHouse;\r\n /**\r\n * Avser att behålla huset\r\n * @type {boolean}\r\n * @memberof MaintenanceHouseType\r\n */\r\n keepHouse?: boolean;\r\n /**\r\n * Avser att behålla huset\r\n * @type {boolean}\r\n * @memberof MaintenanceHouseType\r\n */\r\n loanInOtherInstitute?: boolean;\r\n /**\r\n * Lösa lånet\r\n * @type {boolean}\r\n * @memberof MaintenanceHouseType\r\n */\r\n redeemLoan?: boolean;\r\n /**\r\n * Lånet är hos kredit institut\r\n * @type {string}\r\n * @memberof MaintenanceHouseType\r\n */\r\n creditInstitute?: string;\r\n /**\r\n * Clearing number\r\n * @type {string}\r\n * @memberof MaintenanceHouseType\r\n */\r\n loanClearing?: string;\r\n /**\r\n * Lånenummer hos de kredit institut där lånet ska lösas\r\n * @type {string}\r\n * @memberof MaintenanceHouseType\r\n */\r\n instituteLoanNumber?: string;\r\n /**\r\n * list of customerId\r\n * @type {Array}\r\n * @memberof MaintenanceHouseType\r\n */\r\n loanOwners?: Array;\r\n /**\r\n * Lånet är på belopp\r\n * @type {number}\r\n * @memberof MaintenanceHouseType\r\n */\r\n houseLoanAmount?: number;\r\n /**\r\n * Driftkostnad\r\n * @type {number}\r\n * @memberof MaintenanceHouseType\r\n */\r\n maintenanceCost?: number;\r\n}\r\n\r\nexport function MaintenanceHouseTypeFromJSON(json: any): MaintenanceHouseType {\r\n return MaintenanceHouseTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function MaintenanceHouseTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): MaintenanceHouseType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'typeOfHouse': !exists(json, 'typeOfHouse') ? undefined : TypeOfHouseFromJSON(json['typeOfHouse']),\r\n 'keepHouse': !exists(json, 'keepHouse') ? undefined : json['keepHouse'],\r\n 'loanInOtherInstitute': !exists(json, 'loanInOtherInstitute') ? undefined : json['loanInOtherInstitute'],\r\n 'redeemLoan': !exists(json, 'redeemLoan') ? undefined : json['redeemLoan'],\r\n 'creditInstitute': !exists(json, 'creditInstitute') ? undefined : json['creditInstitute'],\r\n 'loanClearing': !exists(json, 'loanClearing') ? undefined : json['loanClearing'],\r\n 'instituteLoanNumber': !exists(json, 'instituteLoanNumber') ? undefined : json['instituteLoanNumber'],\r\n 'loanOwners': !exists(json, 'loanOwners') ? undefined : ((json['loanOwners'] as Array).map(LoanOwnerTypeFromJSON)),\r\n 'houseLoanAmount': !exists(json, 'houseLoanAmount') ? undefined : json['houseLoanAmount'],\r\n 'maintenanceCost': !exists(json, 'maintenanceCost') ? undefined : json['maintenanceCost'],\r\n };\r\n}\r\n\r\nexport function MaintenanceHouseTypeToJSON(value?: MaintenanceHouseType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'typeOfHouse': TypeOfHouseToJSON(value.typeOfHouse),\r\n 'keepHouse': value.keepHouse,\r\n 'loanInOtherInstitute': value.loanInOtherInstitute,\r\n 'redeemLoan': value.redeemLoan,\r\n 'creditInstitute': value.creditInstitute,\r\n 'loanClearing': value.loanClearing,\r\n 'instituteLoanNumber': value.instituteLoanNumber,\r\n 'loanOwners': value.loanOwners === undefined ? undefined : ((value.loanOwners as Array).map(LoanOwnerTypeToJSON)),\r\n 'houseLoanAmount': value.houseLoanAmount,\r\n 'maintenanceCost': value.maintenanceCost,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n TypeOfEmployeement,\r\n TypeOfEmployeementFromJSON,\r\n TypeOfEmployeementFromJSONTyped,\r\n TypeOfEmployeementToJSON,\r\n} from './';\r\n\r\n/**\r\n * personal economy for KALP us\r\n * @export\r\n * @interface PersonalEconomyType\r\n */\r\nexport interface PersonalEconomyType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof PersonalEconomyType\r\n */\r\n processId: string;\r\n /**\r\n * customerId is swedish ssn or corporate organisation number\r\n * @type {string}\r\n * @memberof PersonalEconomyType\r\n */\r\n customerId: string;\r\n /**\r\n * Type definitions for personal economy\r\n * @type {string}\r\n * @memberof PersonalEconomyType\r\n */\r\n personalEconomyId: string;\r\n /**\r\n * Årlig inkomst från näringsverksamhet\r\n * @type {number}\r\n * @memberof PersonalEconomyType\r\n */\r\n yearlyIncome?: number;\r\n /**\r\n * Angiven inkomst av tjänst\r\n * @type {number}\r\n * @memberof PersonalEconomyType\r\n */\r\n income?: number;\r\n /**\r\n * \r\n * @type {TypeOfEmployeement}\r\n * @memberof PersonalEconomyType\r\n */\r\n typeOfEmployeement?: TypeOfEmployeement;\r\n /**\r\n * -> Arbetsgivare\r\n * @type {string}\r\n * @memberof PersonalEconomyType\r\n */\r\n employeer?: string;\r\n /**\r\n * Anställd sedan år\r\n * @type {number}\r\n * @memberof PersonalEconomyType\r\n */\r\n yearOfEmployment?: number;\r\n /**\r\n * anställd i månad, om anställningen < 2 år.\r\n * @type {number}\r\n * @memberof PersonalEconomyType\r\n */\r\n monthOfEmployment?: number;\r\n}\r\n\r\nexport function PersonalEconomyTypeFromJSON(json: any): PersonalEconomyType {\r\n return PersonalEconomyTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function PersonalEconomyTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): PersonalEconomyType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'customerId': json['customerId'],\r\n 'personalEconomyId': json['personalEconomyId'],\r\n 'yearlyIncome': !exists(json, 'YearlyIncome') ? undefined : json['YearlyIncome'],\r\n 'income': !exists(json, 'Income') ? undefined : json['Income'],\r\n 'typeOfEmployeement': !exists(json, 'TypeOfEmployeement') ? undefined : TypeOfEmployeementFromJSON(json['TypeOfEmployeement']),\r\n 'employeer': !exists(json, 'Employeer') ? undefined : json['Employeer'],\r\n 'yearOfEmployment': !exists(json, 'yearOfEmployment') ? undefined : json['yearOfEmployment'],\r\n 'monthOfEmployment': !exists(json, 'monthOfEmployment') ? undefined : json['monthOfEmployment'],\r\n };\r\n}\r\n\r\nexport function PersonalEconomyTypeToJSON(value?: PersonalEconomyType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'customerId': value.customerId,\r\n 'personalEconomyId': value.personalEconomyId,\r\n 'YearlyIncome': value.yearlyIncome,\r\n 'Income': value.income,\r\n 'TypeOfEmployeement': TypeOfEmployeementToJSON(value.typeOfEmployeement),\r\n 'Employeer': value.employeer,\r\n 'yearOfEmployment': value.yearOfEmployment,\r\n 'monthOfEmployment': value.monthOfEmployment,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * huvudmän\r\n * @export\r\n * @interface PrincipalType\r\n */\r\nexport interface PrincipalType {\r\n /**\r\n * customerId is swedish ssn or corporate organisation number\r\n * @type {string}\r\n * @memberof PrincipalType\r\n */\r\n customerId?: string;\r\n /**\r\n * name of princple (huvudman i företaget)\r\n * @type {string}\r\n * @memberof PrincipalType\r\n */\r\n principalName?: string;\r\n}\r\n\r\nexport function PrincipalTypeFromJSON(json: any): PrincipalType {\r\n return PrincipalTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function PrincipalTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): PrincipalType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'customerId': !exists(json, 'customerId') ? undefined : json['customerId'],\r\n 'principalName': !exists(json, 'principalName') ? undefined : json['principalName'],\r\n };\r\n}\r\n\r\nexport function PrincipalTypeToJSON(value?: PrincipalType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'customerId': value.customerId,\r\n 'principalName': value.principalName,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n CaseIdStatus,\r\n CaseIdStatusFromJSON,\r\n CaseIdStatusFromJSONTyped,\r\n CaseIdStatusToJSON,\r\n CustomerIdType,\r\n CustomerIdTypeFromJSON,\r\n CustomerIdTypeFromJSONTyped,\r\n CustomerIdTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Process definition\r\n * @export\r\n * @interface ProcessType\r\n */\r\nexport interface ProcessType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof ProcessType\r\n */\r\n processId: string;\r\n /**\r\n * Array of customer in a application (processid)\r\n * @type {Array}\r\n * @memberof ProcessType\r\n */\r\n customers?: Array;\r\n /**\r\n * reserved caseId in Loan Process (ignoreras i V1)\r\n * @type {string}\r\n * @memberof ProcessType\r\n */\r\n caseId?: string;\r\n /**\r\n * \r\n * @type {CaseIdStatus}\r\n * @memberof ProcessType\r\n */\r\n caseIdStatus?: CaseIdStatus;\r\n /**\r\n * model, processId created date\r\n * @type {string}\r\n * @memberof ProcessType\r\n */\r\n processCreatedDate?: string;\r\n /**\r\n * updated timestamp when customer login to the site\r\n * @type {string}\r\n * @memberof ProcessType\r\n */\r\n lastAccessed?: string;\r\n /**\r\n * Unique identity for each application to be use for conversation LH-->customer short number serie starting at 1000 and incrementing\r\n * @type {number}\r\n * @memberof ProcessType\r\n */\r\n referenceId?: number;\r\n /**\r\n * Version of the current process\r\n * @type {string}\r\n * @memberof ProcessType\r\n */\r\n processVersion?: string;\r\n}\r\n\r\nexport function ProcessTypeFromJSON(json: any): ProcessType {\r\n return ProcessTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ProcessTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): ProcessType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': json['processId'],\r\n 'customers': !exists(json, 'Customers') ? undefined : ((json['Customers'] as Array).map(CustomerIdTypeFromJSON)),\r\n 'caseId': !exists(json, 'caseId') ? undefined : json['caseId'],\r\n 'caseIdStatus': !exists(json, 'caseIdStatus') ? undefined : CaseIdStatusFromJSON(json['caseIdStatus']),\r\n 'processCreatedDate': !exists(json, 'processCreatedDate') ? undefined : json['processCreatedDate'],\r\n 'lastAccessed': !exists(json, 'lastAccessed') ? undefined : json['lastAccessed'],\r\n 'referenceId': !exists(json, 'referenceId') ? undefined : json['referenceId'],\r\n 'processVersion': !exists(json, 'processVersion') ? undefined : json['processVersion'],\r\n };\r\n}\r\n\r\nexport function ProcessTypeToJSON(value?: ProcessType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'Customers': value.customers === undefined ? undefined : ((value.customers as Array).map(CustomerIdTypeToJSON)),\r\n 'caseId': value.caseId,\r\n 'caseIdStatus': CaseIdStatusToJSON(value.caseIdStatus),\r\n 'processCreatedDate': value.processCreatedDate,\r\n 'lastAccessed': value.lastAccessed,\r\n 'referenceId': value.referenceId,\r\n 'processVersion': value.processVersion,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n ProcessType,\r\n ProcessTypeFromJSON,\r\n ProcessTypeFromJSONTyped,\r\n ProcessTypeToJSON,\r\n} from './';\r\n\r\n/**\r\n * Get a list of processes and all associated customerId\r\n * @export\r\n * @interface ProcessesType\r\n */\r\nexport interface ProcessesType {\r\n /**\r\n * Return a list of type processType\r\n * @type {Array}\r\n * @memberof ProcessesType\r\n */\r\n processes?: Array;\r\n}\r\n\r\nexport function ProcessesTypeFromJSON(json: any): ProcessesType {\r\n return ProcessesTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ProcessesTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): ProcessesType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processes': !exists(json, 'processes') ? undefined : ((json['processes'] as Array).map(ProcessTypeFromJSON)),\r\n };\r\n}\r\n\r\nexport function ProcessesTypeToJSON(value?: ProcessesType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processes': value.processes === undefined ? undefined : ((value.processes as Array).map(ProcessTypeToJSON)),\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * Omsättning sker på föråegående år och två år tillbaka\r\n * @export\r\n * @interface RevenueType\r\n */\r\nexport interface RevenueType {\r\n /**\r\n * year of revenue (bruttoomsättning), föregående år och 2 år tillbaka. Även om resultat inte fastställt så ber vi kunden registrera uppskattat. När vi väl kommer till LP så kommer handläggaren ändå verifiera bokslutet. Detta fält är read-only i användargränssnittet\r\n * @type {number}\r\n * @memberof RevenueType\r\n */\r\n revenueYear: number;\r\n /**\r\n * Företagets bruttoomsättning för året angivet i revenueYear (2 år)\r\n * @type {number}\r\n * @memberof RevenueType\r\n */\r\n revenue: number;\r\n}\r\n\r\nexport function RevenueTypeFromJSON(json: any): RevenueType {\r\n return RevenueTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function RevenueTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): RevenueType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'revenueYear': json['revenueYear'],\r\n 'revenue': json['revenue'],\r\n };\r\n}\r\n\r\nexport function RevenueTypeToJSON(value?: RevenueType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'revenueYear': value.revenueYear,\r\n 'revenue': value.revenue,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * This represent loan in other institute to redeem\r\n * @export\r\n * @interface TakeoverLoanType\r\n */\r\nexport interface TakeoverLoanType {\r\n /**\r\n * application model unique identification\r\n * @type {string}\r\n * @memberof TakeoverLoanType\r\n */\r\n processId?: string;\r\n /**\r\n * takeoverLoanId identity\r\n * @type {string}\r\n * @memberof TakeoverLoanType\r\n */\r\n takeoverLoanId: string;\r\n /**\r\n * Lånet är hos kredit institut\r\n * @type {string}\r\n * @memberof TakeoverLoanType\r\n */\r\n creditInstitute?: string;\r\n /**\r\n * This will only be a temporary loanNumber, when can we reserve a loan number in SAP\r\n * @type {string}\r\n * @memberof TakeoverLoanType\r\n */\r\n loanNumber?: string;\r\n /**\r\n * Dept of loan in other institute to redeem\r\n * @type {number}\r\n * @memberof TakeoverLoanType\r\n */\r\n debtAmount?: number;\r\n /**\r\n * Ändamål och syfte ska sättas på respektive lån som går över till LP. I de fall där det inte specifiseras ska handläggaren göra det innan överföring till SAP. Detta för att de ska bli rätt i uppföljning ned i SAS och den finsiella rapporteringen.\r\n * @type {string}\r\n * @memberof TakeoverLoanType\r\n */\r\n purposeText?: string;\r\n /**\r\n * Delsyfte på respektive lån, läses från mainPurposes.json\r\n * @type {string}\r\n * @memberof TakeoverLoanType\r\n */\r\n aimText?: string;\r\n /**\r\n * Aktuell ränta hos nuvarande institute inför lösen\r\n * @type {number}\r\n * @memberof TakeoverLoanType\r\n */\r\n interest?: number;\r\n /**\r\n * Aktuell bindningstid hos nuvarande institue inför lösen\r\n * @type {string}\r\n * @memberof TakeoverLoanType\r\n */\r\n conditionchangedate?: string;\r\n}\r\n\r\nexport function TakeoverLoanTypeFromJSON(json: any): TakeoverLoanType {\r\n return TakeoverLoanTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TakeoverLoanTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): TakeoverLoanType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'processId': !exists(json, 'processId') ? undefined : json['processId'],\r\n 'takeoverLoanId': json['takeoverLoanId'],\r\n 'creditInstitute': !exists(json, 'creditInstitute') ? undefined : json['creditInstitute'],\r\n 'loanNumber': !exists(json, 'loanNumber') ? undefined : json['loanNumber'],\r\n 'debtAmount': !exists(json, 'debtAmount') ? undefined : json['debtAmount'],\r\n 'purposeText': !exists(json, 'purposeText') ? undefined : json['purposeText'],\r\n 'aimText': !exists(json, 'aimText') ? undefined : json['aimText'],\r\n 'interest': !exists(json, 'interest') ? undefined : json['interest'],\r\n 'conditionchangedate': !exists(json, 'conditionchangedate') ? undefined : json['conditionchangedate'],\r\n };\r\n}\r\n\r\nexport function TakeoverLoanTypeToJSON(value?: TakeoverLoanType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'processId': value.processId,\r\n 'takeoverLoanId': value.takeoverLoanId,\r\n 'creditInstitute': value.creditInstitute,\r\n 'loanNumber': value.loanNumber,\r\n 'debtAmount': value.debtAmount,\r\n 'purposeText': value.purposeText,\r\n 'aimText': value.aimText,\r\n 'interest': value.interest,\r\n 'conditionchangedate': value.conditionchangedate,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * Taxerad ägare\r\n * @export\r\n * @interface TaxedOwnerType\r\n */\r\nexport interface TaxedOwnerType {\r\n /**\r\n * Unique identifier\r\n * @type {string}\r\n * @memberof TaxedOwnerType\r\n */\r\n taxedOwnerId: string;\r\n /**\r\n * Taxerad ägare till fastigheten\r\n * @type {string}\r\n * @memberof TaxedOwnerType\r\n */\r\n taxedOwner: string;\r\n}\r\n\r\nexport function TaxedOwnerTypeFromJSON(json: any): TaxedOwnerType {\r\n return TaxedOwnerTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TaxedOwnerTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): TaxedOwnerType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'taxedOwnerId': json['taxedOwnerId'],\r\n 'taxedOwner': json['taxedOwner'],\r\n };\r\n}\r\n\r\nexport function TaxedOwnerTypeToJSON(value?: TaxedOwnerType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'taxedOwnerId': value.taxedOwnerId,\r\n 'taxedOwner': value.taxedOwner,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * SelmaSME API\r\n * This definition is the API between customer SME-Gui and the persistence layer for the application NOT FOR V1 When customer logg-in to Selma-EN, we will create a processId with applicant CustomerId (from BankID). When a customer added attachment to the application, we don\\'t have a CaseId i LP, should we add a LP-Service to create/reserve a caseId to be able to attach a document to the caseId in DM.\r\n *\r\n * The version of the OpenAPI document: 0.7.4\r\n * Contact: developer@landshypotek.se\r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * Array of BudgetType, Budget records, minusposter registreras som minusposter value1; Resultaträkning; Skog value2; Resultaträkning; Växtodling value3; Resultaträkning; EU-stöd value4; Resultaträkning; Övrig djurproduktion value5; Resultaträkning; Förändring av lager produktion value6; Resultaträkning; Mjölk value7; Resultaträkning; Övriga intäkter value8; Omsättning totalt (Totala intäkter) summa value1-7 value9; Inköp (Råvaror och förnödenheter) value10; Arrendekostnader value11; Personalkostnader value12; Övriga rörelsekostnader value13; S:a kostnader (summa value9-12) value14; Resultat före avskrivningar (value8 + (-value13)) value15; Avskrivning inventarier (exkl. byggnadsinventerier) value16; Övriga avskrivningar value17; S:a avskrivningar (-value15) + (-value16) value18; Resultat före avskrivningar value14 + (-value17) value19; Finansiella intäkter value20; Finansiellakonstnader value21; Resultat finansiella poster (value18) + value19 + (-value20) value22; Extraordinärar intäkter och kostnader value23; Bokslutsdispositioner value24; Skatt (ägaruttag prognosår EF) value25; Åretsresultat (value21) sum (value22+value23+value24)\r\n * @export\r\n * @interface ValueType\r\n */\r\nexport interface ValueType {\r\n /**\r\n * Intäkter skog\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value1?: number;\r\n /**\r\n * Intäkter växtodling\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value2?: number;\r\n /**\r\n * Intäkter EU-Stöd\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value3?: number;\r\n /**\r\n * Intäkter Övrig djurproduktion\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value4?: number;\r\n /**\r\n * Intäkter Förändring av lager produktion\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value5?: number;\r\n /**\r\n * Intäkter Mjölk\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value6?: number;\r\n /**\r\n * Övriga intäkter\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value7?: number;\r\n /**\r\n * Bruttoomsättning totalt (totala intäkter)\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value8?: number;\r\n /**\r\n * Kostnader, inköp (Råvaror och förnödenheter)\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value9?: number;\r\n /**\r\n * Kostnader, arrendekostnader\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value10?: number;\r\n /**\r\n * Kostnader, personalkostnader\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value11?: number;\r\n /**\r\n * Kostnader, övriga rörelsekostnader\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value12?: number;\r\n /**\r\n * Kostnader, summa kostnader\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value13?: number;\r\n /**\r\n * Resultat för avskrivningar\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value14?: number;\r\n /**\r\n * Avskrivningar inventarier (exkl byggn.inventarier)\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value15?: number;\r\n /**\r\n * Avskrivningar, övriga avskrivningar och nedskrivningar\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value16?: number;\r\n /**\r\n * Summa Avskrivningar\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value17?: number;\r\n /**\r\n * Resultat efter avskrivningar\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value18?: number;\r\n /**\r\n * Finansiella intäkter\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value19?: number;\r\n /**\r\n * Finansiella kostnader\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value20?: number;\r\n /**\r\n * Resultat efter finansiella poster\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value21?: number;\r\n /**\r\n * Extraordinärar intäkter och kostnader\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value22?: number;\r\n /**\r\n * Bokslutdispositioner\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value23?: number;\r\n /**\r\n * Skatt (Ägaruttag prognosår EF)\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value24?: number;\r\n /**\r\n * Årets resultat\r\n * @type {number}\r\n * @memberof ValueType\r\n */\r\n value25?: number;\r\n}\r\n\r\nexport function ValueTypeFromJSON(json: any): ValueType {\r\n return ValueTypeFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ValueTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): ValueType {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'value1': !exists(json, 'value1') ? undefined : json['value1'],\r\n 'value2': !exists(json, 'value2') ? undefined : json['value2'],\r\n 'value3': !exists(json, 'value3') ? undefined : json['value3'],\r\n 'value4': !exists(json, 'value4') ? undefined : json['value4'],\r\n 'value5': !exists(json, 'value5') ? undefined : json['value5'],\r\n 'value6': !exists(json, 'value6') ? undefined : json['value6'],\r\n 'value7': !exists(json, 'value7') ? undefined : json['value7'],\r\n 'value8': !exists(json, 'value8') ? undefined : json['value8'],\r\n 'value9': !exists(json, 'value9') ? undefined : json['value9'],\r\n 'value10': !exists(json, 'value10') ? undefined : json['value10'],\r\n 'value11': !exists(json, 'value11') ? undefined : json['value11'],\r\n 'value12': !exists(json, 'value12') ? undefined : json['value12'],\r\n 'value13': !exists(json, 'value13') ? undefined : json['value13'],\r\n 'value14': !exists(json, 'value14') ? undefined : json['value14'],\r\n 'value15': !exists(json, 'value15') ? undefined : json['value15'],\r\n 'value16': !exists(json, 'value16') ? undefined : json['value16'],\r\n 'value17': !exists(json, 'value17') ? undefined : json['value17'],\r\n 'value18': !exists(json, 'value18') ? undefined : json['value18'],\r\n 'value19': !exists(json, 'value19') ? undefined : json['value19'],\r\n 'value20': !exists(json, 'value20') ? undefined : json['value20'],\r\n 'value21': !exists(json, 'value21') ? undefined : json['value21'],\r\n 'value22': !exists(json, 'value22') ? undefined : json['value22'],\r\n 'value23': !exists(json, 'value23') ? undefined : json['value23'],\r\n 'value24': !exists(json, 'value24') ? undefined : json['value24'],\r\n 'value25': !exists(json, 'value25') ? undefined : json['value25'],\r\n };\r\n}\r\n\r\nexport function ValueTypeToJSON(value?: ValueType | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'value1': value.value1,\r\n 'value2': value.value2,\r\n 'value3': value.value3,\r\n 'value4': value.value4,\r\n 'value5': value.value5,\r\n 'value6': value.value6,\r\n 'value7': value.value7,\r\n 'value8': value.value8,\r\n 'value9': value.value9,\r\n 'value10': value.value10,\r\n 'value11': value.value11,\r\n 'value12': value.value12,\r\n 'value13': value.value13,\r\n 'value14': value.value14,\r\n 'value15': value.value15,\r\n 'value16': value.value16,\r\n 'value17': value.value17,\r\n 'value18': value.value18,\r\n 'value19': value.value19,\r\n 'value20': value.value20,\r\n 'value21': value.value21,\r\n 'value22': value.value22,\r\n 'value23': value.value23,\r\n 'value24': value.value24,\r\n 'value25': value.value25,\r\n };\r\n}\r\n\r\n\r\n","import { BaseService } from './BaseService';\r\nimport { Configuration, RequestContext, FetchParams } from '../libs/SMELPOClient';\r\nimport { ProcessesApi, UpdateProcessStatusCaseIdStatusEnum} from '../libs/SMELPOClient/apis';\r\nimport { ProcessType, LinksAll, ProcessesType } from '../libs/SMELPOClient/models';\r\nimport { SessionService } from './SessionService';\r\nimport { AddProcessRequest } from '../libs/SMELPOClient/apis/ProcessesApi';\r\nimport { CaseIdStatus } from '../libs/SMELPOClient/models/CaseIdStatus';\r\nimport { AdminCasesSearch, AdminCasesSearchResult } from '../models/extendedlpo/Admin';\r\nimport { FullProcess } from '../models/extendedlpo/FullProcess';\r\nimport { SearchApplicantResult } from '../models/extendedlpo/ApplicantSearch';\r\n\r\nexport interface SMELPOResult {\r\n\tresultTime: Date;\r\n\tdata:T;\r\n}\r\n\r\nexport class SMELPOService extends BaseService {\r\n\r\n\tprivate url: string;\r\n\tprivate apiConfiguration: Configuration;\r\n\r\n\tconstructor(url: string, private sessionService: SessionService) {\r\n\t\tsuper();\r\n\t\tthis.url = url;\r\n\r\n\t\tthis.apiConfiguration = new Configuration({\r\n\t\t\tbasePath: this.url,\r\n\t\t\tmiddleware: [{\r\n\t\t\t\t//pre?(context: RequestContext): Promise;\r\n\t\t\t\tpre: this.preRequest\r\n\t\t\t\t//post?(context: ResponseContext): Promise;\r\n\t\t\t}]\r\n\t\t\t//accessToken: \"token\"\r\n\t\t});\r\n\t}\r\n\r\n\tpreRequest = (context: RequestContext): Promise => {\r\n\t\tlet init = context.init;\r\n\t\tinit.credentials = \"include\";\r\n\t\tlet params:FetchParams = {\r\n\t\t\turl: context.url,\r\n\t\t\tinit: init\r\n\t\t};\r\n\t\treturn Promise.resolve(params);\r\n\t}\r\n\r\n\r\n\t// Gets a an API with interface of type T. func is the factory for the type.\r\n\tprivate api(func): T {\r\n\t\t//console.log(\"SMELPOService api \" + func.name);\r\n\t\tvar apiObj = new func(this.apiConfiguration /*, fetch, basePath*/);\r\n\t\treturn apiObj;\r\n\t}\r\n\r\n\tprivate result(promise: Promise): Promise> {\r\n\t\treturn promise.then(result => {\r\n\t\t\t//console.log(\"SMELPOService 200OK\");\r\n\t\t\treturn {\r\n\t\t\t\tresultTime: new Date(),\r\n\t\t\t\tdata: result\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tokResult() {\r\n\t\treturn Promise.resolve({\r\n\t\t\tresultTime: new Date()\r\n\t\t});\r\n\t}\r\n\r\n\tprivate mySsn(): string {\r\n\t\tlet login = this.sessionService.getLogin();\r\n\t\treturn login.ssn;\r\n\t}\r\n\r\n\tprivate post(op:string, body:any) : Promise {\r\n\t\tlet bodyJson = JSON.stringify(body);\r\n\t\treturn fetch(this.url+'/'+op, {\r\n\t\t\tmethod:\"POST\",\r\n\t\t\tcache: 'no-cache',\r\n\t\t\tcredentials: \"include\",\r\n\t\t\theaders: {\r\n\t\t\t\t'Accept': 'application/json',\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t},\r\n\t\t\tbody: bodyJson\r\n\t\t})\r\n\t\t.then(result => {\r\n\t\t\treturn result.json();\r\n\t\t})\r\n\t\t.then((result) => {\r\n\t\t\tlet bidResult = result;\r\n\t\t\treturn bidResult;\r\n\t\t});\r\n\t}\r\n\r\n\t// ==== PROCESS ======================\r\n\r\n\tgetProcess(processId: string): Promise> {\r\n\t\treturn this.result(\r\n\t\t\tthis.api(ProcessesApi).getProcessAll({\r\n\t\t\t\txProcessID: processId\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tgetProcesses(customerId?: string): Promise> {\r\n\t\tif (!customerId)\r\n\t\t\tcustomerId = this.mySsn();\r\n\t\treturn this.result(\r\n\t\t\tthis.api(ProcessesApi).getProcesses({\r\n\t\t\t\tcustomerId: customerId\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\taddProcess(process: ProcessType, customerId?: string): Promise> {\r\n\t\tif (!customerId)\r\n\t\t\tcustomerId = this.mySsn();\r\n\r\n\t\tlet arg:AddProcessRequest = {\r\n\t\t\tprocess: {\r\n\t\t\t\tprocessId: process.processId,\r\n\t\t\t\tcaseIdStatus: CaseIdStatus.STARTEDBYAPPLICANT, // 'STARTEDBYAPPLICANT', //AddProcessCaseIdStatusEnum.STARTEDBYAPPLICANT,\r\n\t\t\t\tcustomers: [{ customerId: customerId, customerAdded: new Date().toISOString() }]\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.result(\r\n\t\t\tthis.api(ProcessesApi).addProcess(arg)\r\n\t\t\t.then(result => { \r\n\t\t\t\treturn result;\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tsaveProcess(process: FullProcess): Promise> {\r\n\t\treturn this.result(\r\n\t\t\tthis.api(ProcessesApi).saveProcessAll({\r\n\t\t\t\tprocessSaveAll: process\r\n\t\t\t})\r\n\t\t); \r\n\t}\r\n\r\n\t// ==== CASE ======================\r\n\r\n\tdeleteCase(processId: string, caseId: string, status:UpdateProcessStatusCaseIdStatusEnum): Promise> {\r\n\t\treturn this.setCaseStatus(processId, caseId, status);\r\n\t}\r\n\r\n\tsetCaseStatus(processId: string, caseId: string, //caseStatus: 'CLOSEDBYAPPLICANT' | 'STARTEDBYAPPLICANT' | 'CLOSEDBYOFFICER' | 'CLOSEDBYTHINNING' | 'READYFOROFFICER'\r\n\t\tcaseStatus: UpdateProcessStatusCaseIdStatusEnum\r\n\t): Promise> {\r\n\t\treturn this.result(\r\n\t\t\tthis.api(ProcessesApi).updateProcessStatus({ xProcessID: processId, caseIdStatus: caseStatus, caseId: caseId })\r\n\t\t);\r\n\t}\r\n\r\n\t// ==== ADMIN ======================\r\n\r\n\tadminSearchProcesses(search:AdminCasesSearch) : Promise {\r\n\t\treturn this.post('Admin/SearchAdminCases', search); \r\n\t}\r\n\r\n\tdownloadFetchResult(result:Promise) {\r\n\t\tvar httpResponse;\r\n\t\treturn result.then(response => {\r\n\t\t\thttpResponse = response;\r\n\t\t\treturn response.blob()\r\n\t\t})\r\n\t\t.then(blob => {\r\n\t\t\tvar cd = httpResponse.headers[\"Content-Disposition\"];\r\n\t\t\tvar fileName = cd;\r\n\r\n\t\t\tvar url = URL.createObjectURL(blob);\r\n\t\t\tvar a = document.createElement('a');\r\n\t\t\ta.href = url;\r\n\t\t\ta.download = fileName;\r\n\t\t\tdocument.body.appendChild(a); // we need to append the element to the dom -> otherwise it will not work in firefox\r\n\t\t\ta.click(); \r\n\t\t\ta.remove(); //afterwards we remove the element again \r\n\t\t})\r\n\t\t// .then(blob => URL.createObjectURL(blob))\r\n\t\t// .then(url => {\r\n\t\t// \twindow.open(url, '_blank');\r\n\t\t// \tURL.revokeObjectURL(url);\r\n\t\t// });\r\n\t}\r\n\r\n\r\n\t// ==== APPLICANT ======================\r\n\r\n\tsearchApplicant(processId: string, customerId:string): Promise {\r\n\t\t// return fetch(this.url+'/Search/searchapplicant', {\r\n\t\t// \tmethod: 'POST',\r\n\t\t// \tcredentials: \"include\",\r\n\t\t// \theaders: {\r\n\t\t// \t\t'Accept': 'application/json',\r\n\t\t// \t\t'Content-Type': 'application/json'\r\n\t\t// \t},\r\n\t\t// \tbody: JSON.stringify({\r\n\t\t// \t\tProcessId:processId,\r\n\t\t// \t\tCustomerId:customerId\r\n\t\t// \t})\r\n\t\t// })\r\n\t\t// .then(result => {\r\n\t\t// \treturn result.json();\r\n\t\t// });\r\n\t\treturn this.post('Search/searchapplicant', {\r\n\t\t\tProcessId:processId,\r\n\t\t\tCustomerId:customerId\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t// addApplicant(processId: string, applicant: Applicant): Promise {\r\n\t// \treturn this.result(\r\n\t// \t\tthis.api(ApplicantsApi).addApplicant({processId, applicant})\r\n\t// \t);\r\n\t// }\r\n\r\n\t// updateApplicant(processId: string, updateApplicant: UpdateApplicantType): Promise {\r\n\t// \treturn this.result(\r\n\t// \t\tthis.api(ApplicantsApi).updateApplicant(processId, updateApplicant)\r\n\t// \t);\r\n\t// }\r\n\r\n\t// deleteApplicant(processId: string, customerId: string): Promise {\r\n\t// \treturn this.result(\r\n\t// \t\tthis.api(ApplicantsApi).deleteApplicant(processId, customerId)\r\n\t// \t);\r\n\t// }\r\n\r\n\r\n\t// ==== COMPANIES ======================\r\n\r\n\t// addCompany(processId:string, applicant:Applicant) : Promise {\r\n\t// return this.result(\r\n\t// this.api(ApplicantsApi).addApplicant(processId, applicant)\r\n\t// );\r\n\t// }\r\n\r\n\t// updateCompany(processId:string, updateApplicant:UpdateApplicantType) : Promise {\r\n\t// return this.result(\r\n\t// this.api(ApplicantsApi).updateApplicant(processId, updateApplicant)\r\n\t// );\r\n\t// }\r\n\r\n\t// deleteCompany(processId:string, customerId:string) : Promise {\r\n\t// return this.result(\r\n\t// this.api(ApplicantsApi).deleteApplicant(processId, customerId)\r\n\t// );\r\n\t// } \r\n\r\n\r\n}\r\n","\r\n\r\nexport interface BidLoginResult {\r\n\tsuccess: boolean;\r\n\ttoken: string;\r\n\t//tooYoung:boolean;\r\n\t//mustContact:boolean;\r\n}\r\n\r\nexport interface QrCodeResult {\r\n\tdata: string;\r\n\tsuccess: boolean;\r\n}\r\n\r\nexport interface BidCheckLoginResult {\r\n\tstatus: string;\r\n\tisComplete: boolean;\r\n\tisAborted: boolean;\r\n\tmessage: string;\r\n}\r\n\r\nexport interface ServerSession {\r\n\tisLoggedIn: boolean;\r\n\tisAdmin: boolean;\r\n\tssn: string;\r\n\tfirstName: string;\r\n\tlastName: string;\r\n}\r\n\r\n/*\r\nLHB Bank ID service. Logs in with a SSN and gets a token and user name.\r\n*/\r\nexport class BIDLoginService {\r\n\tprivate url: string;\r\n\r\n\tconstructor(url: string) {\r\n\t\tthis.url = url;\r\n\t}\r\n\r\n\t// Starts BID login procedure.\r\n\tlogin(ssn: string, device: ('MOBILE' | 'SAME')): Promise {\r\n\t\treturn this.bidPost('Login', {\r\n\t\t\tssn: ssn,\r\n\t\t\tdevice: device\r\n\t\t}).then(result => {\r\n\t\t\tif (device === \"SAME\") {\r\n\t\t\t\tthis.redirectToBankIDApp(result.token)\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t// Check login status.\r\n\tcheckLogin(loginToken: string): Promise {\r\n\t\treturn this.bidPost('CheckLogin', { token: loginToken });\r\n\t}\r\n\r\n\tcollect(startToken: string): Promise {\r\n\t\treturn this.bidPost('Collect', { startToken: startToken });\r\n\t}\r\n\r\n\t// DEBUG ONLY.\r\n\t// Call server and set all state as logged in.\r\n\tfakeLogin(ssn: string, device: string): Promise {\r\n\t\treturn this.bidPost('FakeLogin', {\r\n\t\t\tssn: ssn,\r\n\t\t\tdevice: device\r\n\t\t}).then(result => {\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t// Log out current session.\r\n\tlogout(): Promise {\r\n\t\treturn this.bidPost('Logout', {\r\n\t\t}).then(result => {\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t// Get session info from server.\r\n\tgetSession(): Promise {\r\n\t\treturn this.bidGet('Session')\r\n\t\t\t.then(result => {\r\n\t\t\t\treturn result;\r\n\t\t\t});\r\n\t}\r\n\r\n\t// ==== TOOLS ======================\r\n\r\n\r\n\tgetFakeLogin(ssn: string = \"196834108512\"): Promise {\r\n\t\tlet result = {\r\n\t\t\tsuccess: true,\r\n\t\t\ttoken: \"QWERWEQWEQWEQE\",\r\n\t\t\ttooYoung: false,\r\n\t\t\tmustContact: false\r\n\t\t} as BidLoginResult;\r\n\t\treturn Promise.resolve(result);\r\n\t}\r\n\r\n\tstatic createBankIdAutostartUrl(token: string, returnUrl?: string | null): string {\r\n\t\t// bankid:///?autostarttoken=[TOKEN]&redirect=[RETURNURL]\r\n\t\t// todo Se sida 7 \"Launching the BankID app From a Browser\"\r\n\t\t// https://www.bankid.com/assets/bankid/rp/bankid-relying-party-guidelines-v3.2.2.pdf\r\n\t\t// verkar som att om man sätter \"redirect url\" så laddas webbläsaren om, om man sätter NULL så återfår den kallande applikationen fokus\r\n\r\n\t\tlet url = \"bankid:///?autostarttoken=\" + encodeURIComponent(token)\r\n\t\tif (returnUrl === null)\r\n\t\t\turl += \"&redirect=null\";\r\n\t\telse if (returnUrl)\r\n\t\t\turl += \"&redirect=\" + encodeURIComponent(returnUrl);\r\n\r\n\t\treturn url;\r\n\t}\r\n\r\n\tredirectToBankIDApp(token: string) {\r\n\t\tlet returnUrl;\r\n\t\tif (!returnUrl)\r\n\t\t\treturnUrl = \"null\"; //document.location.href;\r\n\r\n\t\tconst url = BIDLoginService.createBankIdAutostartUrl(token, returnUrl);\r\n\t\tdocument.location.href = url;\r\n\t}\r\n\r\n\t// ==== HTTP CALL ======================\r\n\r\n\tprivate bidPost(op: string, body: any): Promise {\r\n\t\tlet bodyJson = JSON.stringify(body);\r\n\t\treturn fetch(this.url + '/' + op, {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\tcache: 'no-cache',\r\n\t\t\tcredentials: 'include', //include cookies\r\n\t\t\theaders: {\r\n\t\t\t\t'Accept': 'application/json',\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t},\r\n\t\t\tbody: bodyJson\r\n\t\t})\r\n\t\t\t.then(result => {\r\n\t\t\t\treturn result.json();\r\n\t\t\t})\r\n\t\t\t.then((result) => {\r\n\t\t\t\tlet bidResult: T = result;\r\n\t\t\t\treturn bidResult;\r\n\t\t\t});\r\n\t}\r\n\r\n\r\n\tprivate bidGet(op: string): Promise {\r\n\t\treturn fetch(this.url + '/' + op, {\r\n\t\t\tmethod: \"GET\",\r\n\t\t\tcache: 'no-cache',\r\n\t\t\tcredentials: 'include', //include cookies\r\n\t\t\theaders: {\r\n\t\t\t\t'Accept': 'application/json'\r\n\t\t\t},\r\n\t\t})\r\n\t\t\t.then(result => {\r\n\t\t\t\treturn result.json();\r\n\t\t\t})\r\n\t\t\t.then((result) => {\r\n\t\t\t\tlet bidResult: T = result;\r\n\t\t\t\treturn bidResult;\r\n\t\t\t});\r\n\t}\r\n\r\n}\r\n","import { UiLanguageService, UiLanguage } from './UiLanguageService';\r\nimport { BaseService } from './BaseService';\r\nimport { StateService } from './StateService';\r\n\r\nexport class TextService extends BaseService {\r\n\r\n\tprivate stateService: StateService;\r\n\tprivate uiLanguageService: UiLanguageService;\r\n\r\n\tconstructor(stateService: StateService, uiLanguageService: UiLanguageService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.uiLanguageService = uiLanguageService;\r\n\t}\r\n\r\n\ttext(key: string): string | undefined {\r\n\t\tlet l = this.stateService.state.language;\r\n\t\tif (l)\r\n\t\t\treturn l.texts[key];\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\ttexts(keys: string[]): (string|undefined)[] {\r\n\t\tlet l = this.stateService.state.language;\r\n\t\tif (!l) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tlet ll = l;\r\n\t\treturn keys.map(key => { return ll.texts[key];});\r\n\t}\r\n\r\n\ttextsOrEmpty(keys: string[]): string[] {\r\n\t\treturn this.texts(keys).map(str => { return str?str:''; });\r\n\t}\r\n\r\n\ttextOrKey(key: string): string {\r\n\t\treturn this.textOrDefault(key,key);\r\n\t}\r\n\r\n\ttextOrEmpty(key: string): string {\r\n\t\treturn this.textOrDefault(key,'');\r\n\t}\r\n\r\n\tformattedTextOrEmpty(key: string, data:any): string {\r\n\t\tconst t = this.textOrDefault(key,'');\r\n\t\tconst ft = this.format(t, data);\r\n\t\treturn ft;\r\n\t}\r\n\r\n\t// Takes a string such as \"foo bar {paramA}, {paramB} xxx yyy\"\r\n\t// and formats with data from object such as {paramA:\"Patrik\", paramB:\"Awesome\"}\r\n\t// into a string.\r\n\tformat(text:string, data:any) : string {\r\n\t\tfor (var property in data) {\r\n\t\t\t// eslint-disable-next-line no-prototype-builtins\r\n\t\t\tif (data.hasOwnProperty(property)) {\r\n\t\t\t\tlet r = new RegExp(\"{\"+property+\"}\",\"g\")\r\n\t\t\t\tlet val = data[property];\r\n\t\t\t\ttext = text.replace(r, val);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\ttextOrDefault(key: string, defaultText:string): string {\r\n\t\tvar t = this.text(key);\r\n\t\tif (t)\r\n\t\t\treturn t;\r\n\t\treturn defaultText;\r\n\t}\r\n\r\n\t/**\r\n\t * Nils never return empty values. If empty, the value==key, ex \"lang|sv-SE|SME.Settings_MaintenanceMode\": \"lang|sv-SE|SME.Settings_MaintenanceMode\"\r\n\t * Editors in nils can \"empty\" the value by setting a whitespace \" \" which is returned by Nils Service\r\n\t * this method returns defaultText if key==value or value.lengt <3 chars\r\n\t * @param key Text key\r\n\t * @param defaultText Default value\r\n\t */\r\n\tnilsEmptyOrDefault(key:string, defaultText:string): string {\r\n\t\tlet value = this.text(key);\r\n\r\n\t\tif (value === undefined)\r\n\t\t\treturn defaultText;\r\n\r\n\t\t// keys in SME api are stripped from 'lang|sv-SE|SME.' so just compare last part of value against 'key'\r\n\t\tif (value.toLowerCase().endsWith(key.toLocaleLowerCase()))\r\n\t\t\treturn defaultText;\r\n\r\n\t\tif (value.length < 3)\r\n\t\t\treturn defaultText;\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tuseLanguage(languageCode: string): Promise {\r\n\t\treturn this.uiLanguageService\r\n\t\t\t.load(languageCode)\r\n\t\t\t.then((result) => {\r\n\t\t\t\tlet oldLang = this.stateService.state.language;\r\n\t\t\t\tthis.stateService.state.language = result;\r\n\t\t\t\tthis.stateService.replace(oldLang, result);\r\n\t\t\t\treturn result;\r\n\t\t\t})\r\n\t}\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { StateService } from './StateService';\r\n\r\n\r\nexport interface Configuration {\r\n\tmaintenanceMode: boolean;\r\n\tsmeBaseUrl: string;\r\n\tbidBaseUrl: string;\r\n\tlpBaseUrl: string;\r\n\tebbotChatEnabled: boolean;\r\n\tebbotChatBotId: string;\r\n}\r\n\r\n\r\nexport class ConfigurationService extends BaseService {\r\n\r\n\tprivate configuration?: Configuration; // current config.\r\n\tprivate stateService: StateService;\r\n\tprivate protectAgainstPageLeaveEnabled: boolean = true;\r\n\r\n\tconstructor(stateService: StateService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t}\r\n\r\n\tload(url: string): Promise {\r\n\t\tlet promise = fetch(url)\r\n\t\t\t.then((result) => {\r\n\t\t\t\treturn result.json();\r\n\t\t\t}).then((result: Configuration) => {\r\n\t\t\t\tlet prevConfig = this.configuration;\r\n\t\t\t\tthis.configuration = result;\r\n\t\t\t\tthis.stateService.state.configuration = this.configuration;\r\n\t\t\t\tthis.stateService.replace(prevConfig, this.configuration);\r\n\t\t\t\treturn this.configuration;\r\n\t\t\t});\r\n\t\treturn promise;\r\n\t}\r\n\r\n\tgetConfiguration(): Configuration {\r\n\t\tif (!this.configuration)\r\n\t\t\tthrow 'No config';\r\n\t\treturn this.configuration;\r\n\t}\r\n\r\n\tmaintenanceMode(): boolean {\r\n\t\treturn this.configuration && this.configuration.maintenanceMode === true ? true : false;\r\n\t}\r\n\r\n\tebbotChatEnabled(): boolean {\r\n\t\treturn this.configuration && this.configuration.ebbotChatEnabled === true ? true : false;\r\n\t}\r\n\r\n\tebbotChatBotId(): string {\r\n\t\treturn this.configuration?.ebbotChatBotId ?? '';\r\n\t}\r\n\r\n\tprotectAgainstPageLeave(): boolean {\r\n\t\treturn this.protectAgainstPageLeaveEnabled;\r\n\t}\r\n\r\n\tsetProtectAgainstPageLeave(enabled: boolean): void {\r\n\t\tthis.protectAgainstPageLeaveEnabled = enabled;\r\n\t}\r\n}\r\n","/* eslint-disable no-control-regex */\r\nimport { BaseService } from './BaseService';\r\nimport { ConvertService } from './ConvertService';\r\n\r\nexport class GuardService extends BaseService {\r\n\r\n\tconvertService?:ConvertService;\r\n\r\n\t// http://emailregex.com/ General Email Regex (RFC 5322 Official Standard)\r\n\temailPattern = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\r\n\r\n\t// https://sv.wikipedia.org/wiki/Diakritiskt_tecken\r\n\tlatinUnicodeDiacritics = \"ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİĴĵĶķĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽŽƂƃƇƈƋƌƑƒƓƘƙƝƠơƣƤƥƨƫƬƭƮƯưƳƴƵƶǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǤǥǦǧǨǩǪǫǬǭǰǴǵǸǹǺǻǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȞȟȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ\";\r\n\temailNegPattern = new RegExp('[' + this.latinUnicodeDiacritics + ']');\r\n\r\n\t// === Type checks =========\r\n\tisString(val: any): boolean {\r\n\t\treturn typeof(val)===\"string\" || val instanceof String;\r\n\t}\r\n\tisNumber(val: any): boolean {\r\n\t\treturn typeof(val)===\"number\";\r\n\t}\r\n\tisObject(val: any): boolean {\r\n\t\treturn typeof(val)===\"object\";\r\n\t}\r\n\r\n\t// === Undefined (=undef) =========\r\n\tisUndefined(val: any): boolean {\r\n\t\treturn typeof (val) === \"undefined\";\r\n\t}\r\n\tisUndefinedOrEmpty(val: string | Array | undefined): boolean {\r\n\t\treturn this.isUndefined(val) || !val || val.length === 0;\r\n\t}\r\n\tisUndefinedOrLessThanZero(val: number): boolean {\r\n\t\treturn this.isUndefined(val) || val < 0;\r\n\t}\r\n\tisDefined(val: any): boolean {\r\n\t\treturn typeof (val) !== \"undefined\";\r\n\t}\r\n\r\n\t// === Unvalued (=undef or =null) =========\r\n\tisUnvalued(val: any): boolean {\r\n\t\treturn this.isUndefined(val) || val === null;\r\n\t}\r\n\tisUnvaluedOrFalse(val: boolean | undefined): boolean {\r\n\t\treturn this.isUndefined(val) || val === null || val === false;\r\n\t}\r\n\tisUnvaluedOrTrue(val: boolean | undefined): boolean {\r\n\t\treturn this.isUndefined(val) || val === null || val === true;\r\n\t}\r\n\tisUnvaluedOrEmpty(val: string | Array | undefined): boolean {\r\n\t\treturn this.isUndefined(val) || val === null || val===undefined || val.length === 0;\r\n\t}\r\n\tisUnvaluedOrLessThanZero(val: number | undefined): boolean {\r\n\t\treturn this.isUndefined(val) || val === null || val===undefined || val < 0;\r\n\t}\r\n\tisUnvaluedOrLessThan(val: number | undefined, limit: number): boolean {\r\n\t\treturn this.isUndefined(val) || val === null || val===undefined || val < limit;\r\n\t}\r\n\tisUnvaluedOrZero(val: any): boolean {\r\n\t\treturn this.isUndefined(val) || val === null || val === 0;\r\n\t}\r\n\r\n\thasLengthGreaterThan(list: string | Array | undefined, limit: number): boolean {\r\n\t\tif( !list ) return false;\r\n\t\tif( this.isString(list) )\r\n\t\t\treturn list.length>limit;\r\n\t\telse \r\n\t\t\treturn list.length>limit;\r\n\t}\r\n\thasLengthGreaterThanZero(list: string | Array | undefined): boolean {\r\n\t\treturn this.hasLengthGreaterThan(list,0);\r\n\t}\r\n\thasLengthLessThan(list: string | Array | undefined, limit: number): boolean {\r\n\t\tif( !list ) return false;\r\n\t\tif( this.isString(list) )\r\n\t\t\treturn list.length limit;\r\n\t}\r\n\tisGreaterThanOrEqual(val: number|undefined, limit: number): boolean {\r\n\t\treturn this.isDefined(val) && val!==undefined && val !== null && val >= limit;\r\n\t}\r\n\tisInRange(val: number|undefined, min: number, max: number): boolean {\r\n\t\treturn this.isDefined(val) && val!==undefined&& val !== null && val >= min && val <= max;\r\n\t}\r\n\tisGreaterThanZero(val: number|undefined): boolean {\r\n\t\treturn this.isDefined(val) && val!==undefined&& val !== null && val > 0;\r\n\t}\r\n\tisZeroOrGreater(val: number|undefined): boolean {\r\n\t\treturn this.isDefined(val) && val!==undefined && val !== null && val >= 0;\r\n\t}\r\n\r\n\t// === Validations =====\r\n\tisValidEmail(str: string): boolean {\r\n\t\tif (this.isUnvaluedOrEmpty(str))\r\n\t\t\treturn false;\r\n\t\tif (this.emailNegPattern.test(str))\r\n\t\t\treturn false;\r\n\t\treturn this.emailPattern.test(str);\r\n\t}\r\n\tisValidSsn(str: string): boolean {\r\n\t\tif (this.isUnvaluedOrEmpty(str))\r\n\t\t\treturn false;\r\n\r\n\t\t// Remove non normalized chars.\r\n\t\tstr = str.replace(\"-\", \"\");\r\n\r\n\t\t// Check for invalid chars.\r\n\t\t// const badChars = (/\\D/g).test(str);\r\n\t\t// if(badChars) {\r\n\t\t// \treturn false;\r\n\t\t// }\r\n\r\n\t\t// Remove century and check number\r\n\t\tif (str.length === 12) {\r\n\t\t\tstr = str.substr(2, 10);\r\n\t\t} else if (str.length === 10) {\r\n\t\t\tstr = str.substr(0, 10);\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar year = parseInt(str.substr(0, 2), 10);\r\n\t\tvar month = parseInt(str.substr(2, 2), 10) - 1;\r\n\t\tvar day = parseInt(str.substr(4, 2), 10);\r\n\r\n\t\tvar date = new Date(year, month, day);\r\n\t\tvar dateYear = parseInt(date.getFullYear().toString().substr(2, 2));\r\n\t\tif (dateYear !== year || date.getMonth() !== month || date.getDate() !== day) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Remove check number\r\n\t\tvar check = parseInt(str.substr(9, 1), 10);\r\n\t\tstr = str.substr(0, 9);\r\n\r\n\t\t// Calculate check number\r\n\t\tvar result = 0;\r\n\t\tfor (var i = 0, len = str.length; i < len; i++) {\r\n\r\n\t\t\tvar number = parseInt(str.substr(i, 1), 10);\r\n\r\n\t\t\t// Multiply every other number with two\r\n\t\t\tif ((i % 2) === 0) {\r\n\t\t\t\tnumber = (number * 2);\r\n\t\t\t}\r\n\r\n\t\t\t// If result is greater than 10, 'sum the digits' which is the same as 1 + (number mod 10)\r\n\t\t\tif (number > 9) {\r\n\t\t\t\tresult += (1 + (number % 10));\r\n\t\t\t} else {\r\n\t\t\t\tresult += number;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn (((check + result) % 10) === 0);\r\n\r\n\t}\r\n\tisValidOrgNr(str: string): boolean {\r\n\t\tif (this.isUnvaluedOrEmpty(str))\r\n\t\t\treturn false;\r\n\r\n\t\t// Remove non numeric\r\n\t\tstr = str.replace(/\\D/g, \"\");\r\n\r\n\t\t// Remove century and check number\r\n\t\tif (str.length !== 10) {\r\n\t\t\treturn false;\r\n\t\t} \r\n\r\n\t\t// Remove check number\r\n\t\tvar check = parseInt(str.substr(9, 1), 10);\r\n\t\tstr = str.substr(0, 9);\r\n\r\n\t\t// Calculate check number\r\n\t\tvar result = 0;\r\n\t\tfor (var i = 0, len = str.length; i < len; i++) {\r\n\r\n\t\t\tvar number = parseInt(str.substr(i, 1), 10);\r\n\r\n\t\t\t// Multiply every other number with two\r\n\t\t\tif ((i % 2) === 0) {\r\n\t\t\t\tnumber = (number * 2);\r\n\t\t\t}\r\n\r\n\t\t\t// If result is greater than 10, 'sum the digits' which is the same as 1 + (number mod 10)\r\n\t\t\tif (number > 9) {\r\n\t\t\t\tresult += (1 + (number % 10));\r\n\t\t\t} else {\r\n\t\t\t\tresult += number;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn (((check + result) % 10) === 0);\r\n\r\n\t}\r\n\tisValidMobileNumber(str: string): boolean {\r\n\t\t/*\r\n\t\t0701234567\r\n\t\t070-1234567\r\n\t\t*/\r\n\t\tif (this.isUnvaluedOrEmpty(str))\r\n\t\t\treturn false;\r\n\r\n\t\tconst pattern = /^(07\\d{1}-\\d{7})$|^(07\\d{8})$/;\r\n\r\n\t\treturn pattern.test(str);\r\n\t}\r\n\r\n\tisDate(value: any): boolean {\r\n\t\tif (value && value.getDate)\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tisValidDate(value: any): boolean {\r\n\t\tif (!this.isDate(value))\r\n\t\t\treturn false;\r\n\t\tif (isNaN(value.getTime()))\r\n\t\t\treturn false;\r\n\t\treturn true;\r\n\t}\r\n\r\n\tisBeforeDate(date: Date, dateLimit: Date): boolean {\r\n\t\tif (!this.isDate(date))\r\n\t\t\treturn false;\r\n\t\tif (!dateLimit)\r\n\t\t\treturn true;\r\n\t\treturn date < dateLimit;\r\n\t}\r\n\r\n\tisAfterDate(date: Date, dateLimit: Date): boolean {\r\n\t\tif (!this.isDate(date))\r\n\t\t\treturn false;\r\n\t\tif (!dateLimit)\r\n\t\t\treturn true;\r\n\t\treturn date > dateLimit;\r\n\t}\r\n\r\n\tisBeforeNow(date: Date): boolean {\r\n\t\treturn this.isBeforeDate(date, new Date());\r\n\t}\r\n\r\n\tisAfterNow(date: Date): boolean {\r\n\t\treturn this.isAfterDate(date, new Date());\r\n\t}\r\n\r\n\tcompareSsn(ssn1: string, ssn2: string): boolean {\r\n\t\tif (!ssn1 || !ssn2)\r\n\t\t\treturn false;\r\n\t\tif (ssn1.replace(\"-\", \"\") === ssn2.replace(\"-\", \"\"))\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnormalizeAndCompareSsn(ssn1: string, ssn2: string): boolean {\r\n\t\tif (!ssn1 || !ssn2)\r\n\t\t\treturn false;\r\n\t\tif( this.convertService ) {\r\n\t\t\tssn1 = this.convertService.toNormalizedSsn(ssn1);\r\n\t\t\tssn2 = this.convertService.toNormalizedSsn(ssn2);\r\n\t\t}\r\n\r\n\t\tif (ssn1===ssn2)\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tcompareCustomerId(customerId1: string , customerId2: string): boolean {\r\n\t\treturn this.normalizeAndCompareSsn(customerId1, customerId2);\r\n\t}\r\n}","import { BaseService } from './BaseService';\r\nimport { UiLanguage } from './UiLanguageService';\r\nimport { Objserver } from '../utils/Objserver';\r\nimport { Case as SelmaCase } from '../models/SelmaModels';\r\nimport { Session } from './SessionService';\r\nimport { Configuration } from './ConfigurationService';\r\n\r\nexport interface ApplicationState {\r\n\tloaded: boolean;\r\n\tconfiguration?: Configuration;\r\n\tlanguage?: UiLanguage;\r\n\tsession: Session;\r\n\tcases?: SelmaCase[];\r\n\tcase?: SelmaCase;\r\n}\r\n\r\nexport class StateService extends BaseService {\r\n\r\n\tpublic state: ApplicationState; // TODO: dont expose this.\r\n\tpublic stateObjserver: Objserver; // should be private.\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.state = {\r\n\t\t\tloaded: false,\r\n\t\t\tsession: {\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.stateObjserver = new Objserver();\r\n\t}\r\n\r\n\tupdate(obj: any) {\r\n\t\tthis.stateObjserver.update(obj);\r\n\t\tthis.writeStateToStorage();\r\n\t}\r\n\r\n\tupdateState() {\r\n\t\tthis.update(this.state);\r\n\t}\r\n\r\n\treplace(oldObj: any, newObj: any) {\r\n\t\tthis.stateObjserver.replace(oldObj, newObj);\r\n\t}\r\n\r\n\t// Mutates list so that (first) item is removed.\r\n\tlistRemove(list:Array, item:T):void {\r\n\t\tconst ix = list.indexOf(item);\r\n\t\tif( ix<0 )\r\n\t\t\treturn;\r\n\t\telse {\r\n\t\t\tlist.splice(ix,1);\r\n\t\t\tthis.update(list);\r\n\t\t}\r\n\t}\r\n\r\n\t// Mutates list so that (first) item is removed.\r\n\tlistRemoveWhere(list:Array, match:(x:T) => boolean):number {\r\n\t\tvar toRemove = list.filter(match);\r\n\t\tif( toRemove.length===0 ) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tvar cnt = 0;\r\n\t\ttoRemove.forEach(item => {\r\n\t\t\tconst ix = list.indexOf(item);\r\n\t\t\tif( ix>=0 ) {\r\n\t\t\t\tlist.splice(ix,1);\r\n\t\t\t\tcnt++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.update(list);\r\n\t\treturn cnt;\r\n\t}\r\n\r\n\tlistRemoveAll(list:Array):void {\r\n\t\tconst len = list.length;\r\n\t\tif( len<=0 )\r\n\t\t\treturn;\r\n\t\telse {\r\n\t\t\tconst deleted = list.splice(0);\r\n\t\t\tdeleted.forEach(x => { this.update(x)});\r\n\t\t\tthis.update(list);\r\n\t\t}\r\n\t}\r\n\r\n\tlistAdd(list:Array, item:T) {\r\n\t\tlist.push(item);\r\n\t\tthis.update(list);\r\n\t}\r\n\r\n\tloadState(state: string, replace: boolean = false): Promise {\r\n\t\tif (state.startsWith('{'))\r\n\t\t\treturn this.setState(JSON.parse(state), replace); // Assume 'state' is json.\r\n\t\telse if (state.startsWith('http'))\r\n\t\t\treturn this.loadStateByUrl(state, replace); // Assume 'state' is URL.\r\n\t\telse\r\n\t\t\treturn this.loadStateByName(state, replace); // Assume 'state' is name of state file.\r\n\t}\r\n\r\n\tprivate fixStateAfterLoad(state: ApplicationState) {\r\n\t\tif (state && state.case && state.case.id && state.cases) {\r\n\t\t\tconst caseId = state.case.id;\r\n\t\t\tconst r = state.cases.filter(x => x.id === caseId);\r\n\t\t\tif( r.length===1 )\r\n\t\t\t\tstate.case = r[0];\r\n\t\t}\r\n\t}\r\n\r\n\tsetState(state: ApplicationState, replace: boolean = false): Promise {\r\n\t\tif (replace) {\r\n\t\t\tlet prevState = this.state;\r\n\t\t\tthis.state = state;\r\n\t\t\tthis.stateObjserver.replace(prevState, this.state);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tObject.assign(this.state, state);\r\n\t\t\tthis.stateObjserver.update(this.state);\r\n\t\t}\r\n\t\treturn Promise.resolve(this.state);\r\n\t}\r\n\r\n\tloadStateByName(name: string, replace: boolean = false): Promise {\r\n\t\tlet url = \"state/\" + name + \".appstate.json\";\r\n\t\tlet promise = this.loadStateByUrl(url, replace);\r\n\t\treturn promise;\r\n\t}\r\n\r\n\tloadStateByUrl(url: string, replace: boolean = false): Promise {\r\n\t\tlet promise = fetch(url)\r\n\t\t\t.then((result) => {\r\n\t\t\t\treturn result.json();\r\n\t\t\t}).then((state: ApplicationState) => {\r\n\t\t\t\tthis.fixStateAfterLoad(state);\r\n\t\t\t\treturn this.setState(state, replace);\r\n\t\t\t});\r\n\t\treturn promise;\r\n\t}\r\n\r\n\tprivate writeStateToStorage() {\r\n\t\twindow.sessionStorage.setItem('smeState', JSON.stringify(this.state));\r\n\t}\r\n\r\n\tloadStateFromStorage(replace: boolean = false): ApplicationState|undefined {\r\n\t\tlet stateString = window.sessionStorage.getItem('smeState');\r\n\t\tif( !stateString )\r\n\t\t\treturn undefined;\r\n\t\tlet state = JSON.parse(stateString);\r\n\t\tthis.setState(state, replace);\r\n\t\treturn state;\r\n\t}\r\n}\r\n","\r\nexport interface ValidationResultItem {\r\n\tvalidator: Function;\r\n\tobject?: any;\r\n\targs?: any[];\r\n\tok: boolean;\r\n}\r\n\r\nexport class ValidationResult {\r\n\r\n\tprivate items: ValidationResultItem[];\r\n\r\n\tconstructor(validator?: Function) {\r\n\t\tthis.items = [];\r\n\t}\r\n\r\n\tadd(item: ValidationResultItem): void {\r\n\t\tthis.items.push(item);\r\n\t}\r\n\r\n\taddItem(item: ValidationResultItem): void {\r\n\t\tthis.items.push(item);\r\n\t}\r\n\r\n\taddMultiple(items: ValidationResultItem[]): void {\r\n\t\titems.forEach(x => {\r\n\t\t\tthis.items.push(x)\r\n\t\t});\r\n\t}\r\n\r\n\taddResult(result: ValidationResult): void {\r\n\t\tthis.addMultiple(result.items);\r\n\t}\r\n\r\n\tgetItems() {\r\n\t\treturn this.items;\r\n\t}\r\n\r\n\tgetCount(): number {\r\n\t\treturn this.items.length;\r\n\t}\r\n\r\n\tanyItems(): boolean {\r\n\t\treturn this.items && this.items.length>0;\r\n\t}\r\n\r\n\tgetOkCount(): number {\r\n\t\treturn this.items.filter(x => x.ok).length;\r\n\t}\r\n\r\n\tgetFailCount(): number {\r\n\t\treturn this.items.filter(x => !x.ok).length;\r\n\t}\r\n\r\n\t// Checks if one specifik validator is ok.\r\n\tvalidatorOk(validator: Function): boolean {\r\n\t\tlet vri = this.getValidatorResult(validator);\r\n\t\treturn vri && vri.ok ? true : false;\r\n\t}\r\n\r\n\tgetValidatorResult(validator: Function): ValidationResultItem|undefined {\r\n\t\tfor( let item of this.items ) {\r\n\t\t\tif( item.validator===validator )\r\n\t\t\t\treturn item;\r\n\t\t}\r\n\t}\r\n\r\n\t// Returns a value between 0 and 1, ok/total.\r\n\tgetOkRate(): number {\r\n\t\tlet total = this.getCount();\r\n\t\tif (total === 0)\r\n\t\t\treturn 1;\r\n\t\tlet ok = this.getOkCount();\r\n\t\treturn ok / total;\r\n\t}\r\n\r\n\tok(): boolean {\r\n\t\tfor( let item of this.items ) {\r\n\t\t\tif( !item.ok )\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tfailed(): boolean {\r\n\t\tfor( let item of this.items ) {\r\n\t\t\tif( !item.ok )\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n}\r\n","import { BaseService } from './BaseService';\r\n\r\nexport class IdService extends BaseService {\r\n\r\n\tprivate id: number;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.id = 1;\r\n\t}\r\n\r\n\tnewId(): number {\r\n\t\treturn ++this.id;\r\n\t}\r\n\r\n\tnewIdString(): string {\r\n\t\treturn this.newId().toString();\r\n\t}\r\n\r\n\tnewGuid() : string {\r\n\t\treturn this.generateUUID();\r\n\t}\r\n\r\n\t//// Public Domain/MIT\r\n\t// From https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\r\n\tprivate generateUUID() { \r\n\t\tvar d = new Date().getTime();\r\n\t\tif (typeof performance !== 'undefined' && typeof performance.now === 'function'){\r\n\t\t\td += performance.now(); //use high-precision timer if available\r\n\t\t}\r\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n\t\t\tvar r = (d + Math.random() * 16) % 16 | 0;\r\n\t\t\td = Math.floor(d / 16);\r\n\t\t\treturn (c === 'x' ? r : ((r & 0x3) | 0x8)).toString(16);\r\n\t\t});\r\n\t}\r\n}\r\n","import { IdService } from \"../services/IdService\";\r\n\r\nimport { Case, Company, Loan, Aim, Applicant, CompanyEconomy, \r\n\tBudget, Revenue, EUSupport, KYC, PersonalEconomy, LPEmploymentEnum, Guarantor,\r\n\tEUSupportEnum as SmeEUSupportType, BudgetYear as SmeBudgetYear,\r\n\tExtLoan, Household, MaintenanceCost, MaintenanceHouse, \r\n\tChild, HouseholdMember, ExtLoanOwner, LoanOwner, DownpaymentSource, BusinessCategory, Collateral, TaxedOwner, Principal } from \"./SelmaModels\";\r\n\r\nimport { CompanyType, LoanType, AimType, KycInformationType, ApplicantType, ProcessType, \r\n\tCaseIdStatus, LinksAll, CompanyEconomyType, BudgetType, EUType,\r\n\tRevenueType, EUSupportType, PersonalEconomyType, HouseholdType, ChildType, HouseholdMemberType, \r\n\tGuarantorType, ExtLoanType, TypeOfEmployeement, MaintenanceCostType, MaintenanceHouseType, \r\n\tTypeOfHouse, DownPaymentType, BusinessCategoryType, BudgetYearType, CollateralType, TaxedOwnerType, PrincipalType, TakeoverLoanType} from \"../libs/SMELPOClient\";\r\n\r\nimport { LoanOwnerType } from \"../libs/SMELPOClient/models/LoanOwnerType\";\r\nimport { AttachmentRequest, Attachment } from \"./selmamodels/Attachment\";\r\nimport { LpoAttachmentRequest, LpoAttachment } from \"./extendedlpo/Attachment\";\r\nimport { TakeoverLoan } from \"./selmamodels/Loan\";\r\n\r\n\r\nexport class LpoModelConverter {\r\n\tstatic idService = new IdService();\r\n\r\n\tstatic toCase(process:ProcessType) : Case {\r\n\t\tlet createdDate = this.fromDateString(process.processCreatedDate);\r\n\t\tlet lastAccessedDate = this.fromDateString(process.lastAccessed);\r\n\t\tlet c: Case = {\r\n\t\t\tid: process.processId,\r\n\t\t\tnumber: process.referenceId||0,\r\n\t\t\tversion: process.processVersion||'v1',\r\n\t\t\tlpCaseId: process.caseId,\r\n\t\t\tstatus: process.caseIdStatus?process.caseIdStatus:CaseIdStatus.STARTEDBYAPPLICANT,\r\n\t\t\tcustomers: process.customers||[],\r\n\t\t\tcreatedDate: createdDate?createdDate:new Date(),\r\n\t\t\tlastAccessedDate: lastAccessedDate?lastAccessedDate:new Date(),\r\n\t\t}\r\n\t\treturn c;\r\n\t}\r\n\r\n\tstatic fromDateString(str: string | undefined): Date|undefined {\r\n\t\tif( !str )\r\n\t\t\treturn;\r\n\r\n\t\tlet date = new Date(str);\r\n\t\treturn date;\r\n\t}\r\n\r\n\tstatic linksAllToCase(linksAll:LinksAll) : Case {\r\n\t\tif( !linksAll.processes ||linksAll.processes.length!==1 )\r\n\t\t\tthrow 'Not single links all'\r\n\t\tlet process = linksAll.processes[0];\r\n\r\n\t\tlet c: Case = this.toCase(process);\r\n\t\tc.applicants = this.toApplicants(linksAll.applicants, linksAll.kycinformations);\r\n\t\tc.loan = linksAll.loans?this.toLoan(linksAll.loans[0]):undefined;\r\n\t\tc.companies = this.toCompanies(linksAll.companies);\r\n\t\tc.companyEconomies = this.toCompanyEconomies(linksAll.companyeconomies);\r\n\t\tc.collaterals = this.toCollaterals(linksAll.collaterals);\r\n\t\tc.euSupports = this.toEuSupports(linksAll.eusupports);\r\n\t\tc.extLoans = this.toExtLoans(linksAll.extloans);\r\n\t\tc.budgets = this.toBudgets(linksAll.budgets);\r\n\t\tc.guarantors = this.toGuarantors(linksAll.guarantors);\r\n\t\tc.households = this.toHouseholds(linksAll.households);\r\n\t\tc.personalEconomies = this.toPersonalEconomies(linksAll.personaleconomies);\r\n\t\tc.maintenanceCosts = this.toMaintenanceCosts(linksAll.maintenancecosts);\r\n\t\tc.attachments = this.toAttachments((linksAll).attachments);\r\n\t\tc.attachmentRequests = this.toAttachmentRequests((linksAll).attachmentRequests);\r\n\t\treturn c;\r\n\t}\r\n\tstatic toCollaterals(collaterals: CollateralType[] | undefined): Collateral[] | undefined {\r\n\t\tif( !collaterals) return;\r\n\t\treturn collaterals.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tid: x.collateralId,\r\n\t\t\t\tcustomerId: x.customerId,\r\n\t\t\t\tcode: x.collateralCode, \r\n\t\t\t\tname: x.collateralName, \r\n\t\t\t\tmunicipality: x.collateralMunicipality,\r\n\t\t\t\tstreet: x.collateralStreet,\r\n\t\t\t\t//age: x.collateralAge,\r\n\t\t\t\tareal: x.collateralAreal,\r\n\t\t\t\tuseAsCollateral: x.useAsCollateral,\r\n\t\t\t\tbuyCollateral: x.buyCollateral,\r\n\t\t\t\ttaxedOwners: this.toTaxedOwners(x.taxedOwners)\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toTaxedOwners(taxedOwners: TaxedOwnerType[] | undefined): TaxedOwner[]|undefined {\r\n\t\tif( !taxedOwners) return;\r\n\t\treturn taxedOwners.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tid: x.taxedOwnerId,\r\n\t\t\t\tcustomerId: x.taxedOwner\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toBudgets(budgets: BudgetType[] | undefined): Budget[] | undefined {\r\n\t\tif( !budgets ) return;\r\n\t\treturn budgets.map(x => {\r\n\t\t\treturn this.toBudget(x);\r\n\t\t})\r\n\t}\r\n\tstatic toAttachmentRequests(attachmentRequests: LpoAttachmentRequest[]|undefined): AttachmentRequest[] | undefined {\r\n\t\tif( !attachmentRequests) return;\r\n\t\treturn attachmentRequests.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tid: x.id,\r\n\t\t\t\tcustomerId: x.customerId,\r\n\t\t\t\trequestType: x.requestType,\r\n\t\t\t\trequestVariation: x.requestVariation,\r\n\t\t\t\trequired: x.required\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toAttachments(attachments: LpoAttachment[]| undefined): Attachment[] | undefined {\r\n\t\tif( !attachments) return;\r\n\t\treturn attachments.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tid: x.id,\r\n\t\t\t\tcustomerId: x.customerId,\r\n\t\t\t\trequestType: x.requestType,\r\n\t\t\t\trequestVariation: x.requestVariation,\r\n\t\t\t\tmimeType: x.mimeType,\r\n\t\t\t\tfileName: x.fileName,\r\n\t\t\t\tfileSize: x.fileSize\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toMaintenanceCosts(maintenancecosts: MaintenanceCostType[] | undefined): MaintenanceCost[] | undefined {\r\n\t\tif( !maintenancecosts)\r\n\t\t\treturn;\r\n\t\treturn maintenancecosts.map(x=> {\r\n\t\t\treturn this.toMaintenanceCost(x);\r\n\t\t})\r\n\t}\r\n\tstatic toMaintenanceCost(x: MaintenanceCostType): MaintenanceCost {\r\n\t\treturn {\r\n\t\t\tid: x.maintenanceCostId,\r\n\t\t\tcustomerId: x.customerId,\r\n\t\t\ttypeofhouses: this.toMaintenanceHouses(x.typeofhouses)\r\n\t\t}\r\n\t}\r\n\tstatic toMaintenanceHouses(typeofhouses: MaintenanceHouseType[] | undefined): MaintenanceHouse[] | undefined {\r\n\t\tif( !typeofhouses )\r\n\t\t\treturn;\r\n\t\treturn typeofhouses.map(x=> {\r\n\t\t\treturn this.toMaintenanceHouse(x);\r\n\t\t})\r\n\t}\r\n\tstatic toMaintenanceHouse(x: MaintenanceHouseType): MaintenanceHouse {\r\n\t\treturn {\r\n\t\t\thouseType: x.typeOfHouse, //this.toHouseTypeCode(x.typeOfHouse),\r\n\t\t\tkeepHouse: x.keepHouse,\r\n\t\t\tloanInOtherInstitute: x.loanInOtherInstitute,\r\n\t\t\tredeemLoan: x.redeemLoan,\r\n\t\t\tloanOwners: this.toLoanOwners(x.loanOwners),\r\n\t\t\thouseLoanAmount: x.houseLoanAmount,\r\n\t\t\tmaintenanceCost: x.maintenanceCost \r\n\t\t}\r\n\t}\r\n\tstatic toLoanOwners(extLoanOwners: LoanOwnerType[] | undefined): LoanOwner[] | undefined {\r\n\t\tif( !extLoanOwners)\r\n\t\t\treturn;\r\n\t\treturn extLoanOwners.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tcustomerId : x.customerId||'',\r\n\t\t\t\townershipPart: x.ownershipPart\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\t// static toHouseTypeCode(houseType: TypeOfHouse | undefined): string | undefined {\r\n\t// \tif( !houseType ) return;\r\n\t// \tif( houseType==TypeOfHouse.Villa) return 'HOUSE';\r\n\t// \tif( houseType==TypeOfHouse.VrigtBoende) return 'OTHER';\r\n\t// \tif( houseType==TypeOfHouse.Hyresrtt) return 'TENANCY';\r\n\t// \tif( houseType==TypeOfHouse.Landbruksfastighet) return 'FARM';\r\n\t// \tif( houseType==TypeOfHouse.Bostadsrtt) return 'APARTMENT';\r\n\t// \tif( houseType==TypeOfHouse.Fritidshus) return 'VACATIONHOUSE';\r\n\t// }\r\n\tstatic toPersonalEconomies(personaleconomies: PersonalEconomyType[] | undefined): PersonalEconomy[] | undefined {\r\n\t\tif( !personaleconomies)\r\n\t\t\treturn;\r\n\t\treturn personaleconomies.map(x=> {\r\n\t\t\treturn this.toPersonalEconomy(x);\r\n\t\t})\r\n\t}\r\n\tstatic toPersonalEconomy(x: PersonalEconomyType): PersonalEconomy {\r\n\t\treturn {\r\n\t\t\tid: x.personalEconomyId,\r\n\t\t\tcustomerId: x.customerId, // guid\r\n\t\t\t//sapEmployment?: SAPEmploymentEnum; // originally defined in Applicant\r\n\t\t\t//lpEmployment?: LPEmploymentEnum; // originally defined in Applicant\r\n\t\t\tincome: x.income, // // SEK / month\r\n\t\t\tyearlyIncome: x.yearlyIncome, // SEK / year\r\n\t\t\ttypeOfEmployment: this.toTypeOfEmployment(x.typeOfEmployeement), // EmployeementType;\r\n\t\t\temployer: x.employeer, // name of company\r\n\t\t\tyearOfEmployment: x.yearOfEmployment,\r\n\t\t\tmonthOfEmployment: x.monthOfEmployment\r\n\t\t}\r\n\t}\r\n\tstatic toTypeOfEmployment(typeOfEmployeement: TypeOfEmployeement | undefined): LPEmploymentEnum | undefined {\r\n\t\tconst t = typeOfEmployeement;\r\n\t\tif( !t )\r\n\t\t\treturn;\r\n\r\n\t\tif( t===TypeOfEmployeement.PERMANENT) return LPEmploymentEnum.PERMANENT; // - Anställd, tills-vidare-anställd \r\n\t\tif( t===TypeOfEmployeement.TEMPORARY) return LPEmploymentEnum.TEMPORARY; // - Tidbegränsad anställning \r\n\t\tif( t===TypeOfEmployeement.PROBATIONARY) return LPEmploymentEnum.PROBATIONARY; // - Provanställning \r\n\t\tif( t===TypeOfEmployeement.UNEMPLOYMENTINSURANCE) return LPEmploymentEnum.UNEMPLOYMENT_INSURANCE; // - Arbetslöshetskassa \r\n\t\tif( t===TypeOfEmployeement.SELFEMPLOYED) return LPEmploymentEnum.SELF_EMPLOYED; //- Eget företag \r\n\t\tif( t===TypeOfEmployeement.STUDENTAID) return LPEmploymentEnum.STUDENT_AID; // - Studiestöd \r\n\t\tif( t===TypeOfEmployeement.PENSION) return LPEmploymentEnum.PENSION; // - Inkomst av pension\r\n\t}\r\n\tstatic toHouseholds(households: HouseholdType[] | undefined): Household[] | undefined {\r\n\t\tif( !households)\r\n\t\t\treturn;\r\n\t\treturn households.map(x=> {\r\n\t\t\treturn this.toHousehold(x);\r\n\t\t})\r\n\t}\r\n\tstatic toHousehold(x: HouseholdType): Household {\r\n\t\treturn {\r\n\t\t\tid: x.householdId,\r\n\t\t\tmembers: this.toHouseholdMembers(x.householdMembers),\r\n\t\t\tnumberOfChildrenAtHome: x.numberOfChildsAtHome, // integer\r\n\t\t\tchildren: this.toChildren(x.childs),\r\n\t\t\tnumberOfCars: x.numberOfCars, // integer\r\n\t\t\tchildMaintenanceCost: x.childMaintenaceCost, // Money, SEK/year\r\n\t\t\tchildMaintenanceIncome: x.receiveChildMaintenanceCost, // Money, SEK/year\r\n\t\t\tchildCareAmount: x.childCareAmount\r\n\t\t}\r\n\t}\r\n\tstatic toChildren(childs: ChildType[] | undefined): Child[] | undefined {\r\n\t\tif( !childs )\r\n\t\t\treturn;\r\n\t\treturn childs.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tid: x.childId,\r\n\t\t\t\tchildsAge:x.childsAge,\r\n\t\t\t\tpartInHousehold:x.partInHousehold\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toHouseholdMembers(householdMembers: HouseholdMemberType[] | undefined): HouseholdMember[] | undefined {\r\n\t\tif( !householdMembers )\r\n\t\t\treturn;\r\n\t\t\r\n\t\treturn householdMembers.map(x => {\r\n\t\t\treturn this.toHouseholdMember(x);\r\n\r\n\t\t})\r\n\t\t\r\n\t}\r\n\tstatic toHouseholdMember(x: HouseholdMemberType): HouseholdMember {\r\n\t\treturn {\r\n\t\t\t//id: x.householdMemberId||'', // TODO: should not be undefined-able.\r\n\t\t\thouseholdMember: x.householdMember\r\n\t\t}\r\n\t}\r\n\tstatic toGuarantors(guarantors: GuarantorType[] | undefined): Guarantor[] | undefined {\r\n\t\tif( !guarantors)\r\n\t\t\treturn;\r\n\t\treturn guarantors.map(x=> {\r\n\t\t\treturn this.toGuarantor(x);\r\n\t\t})\r\n\t}\r\n\tstatic toGuarantor(x: GuarantorType): Guarantor {\r\n\t\treturn {\r\n\t\t\tid: x.guarantorId||'',\r\n\t\t\tname: x.guarantorName,\r\n\t\t\tphone: x.guarantorPhone,\r\n\t\t\tguarantorCustomerId: x.guarantorCustomerId\t\r\n\t\t}\r\n\t}\r\n\tstatic toExtLoans(extloans: ExtLoanType[] | undefined): ExtLoan[] | undefined {\r\n\t\tif( !extloans)\r\n\t\t\treturn;\r\n\t\treturn extloans.map(x => {\r\n\t\t\treturn this.toExtLoan(x);\r\n\t\t})\r\n\t}\r\n\tstatic toExtLoan(x: ExtLoanType): ExtLoan {\r\n\t\treturn {\r\n\t\t\tid: x.extloanId,\r\n\t\t\ttype: x.typeOfLoan,\r\n\t\t\tloanOwners: this.toExtLoanOwners(x.extLoanOwners),\r\n\t\t\tcreditInstitute: x.extCreditInstitute,\r\n\t\t\tloanClearing: x.extloanClearing, // extloanClearing\r\n\t\t\tloanNumber: x.extloanNumber, // extloanNumber\r\n\t\t\tamount: x.extloanAmount, // SEK, extloanAmount\r\n\t\t\tmonthlyCost: x.extMonthlyCost,\r\n\t\t\tredeemLoan: x.extRedeemLoan // extRedeemLoan, skall lånet lösas?\r\n\t\t}\r\n\t}\r\n\tstatic toExtLoanOwners(extLoanOwners: string[] | undefined): ExtLoanOwner[] | undefined {\r\n\t\tif( !extLoanOwners)\r\n\t\t\treturn;\r\n\t\treturn extLoanOwners.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tcustomerId : x\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toEuSupports(euSupports: EUSupportType[] | undefined): EUSupport[] | undefined {\r\n\t\tif( !euSupports )\r\n\t\t\treturn;\r\n\t\treturn euSupports.map(x => {\r\n\t\t\treturn this.toEuSupport(x);\r\n\t\t})\r\n\t}\r\n\tstatic toEuSupport(euSupport: EUSupportType): EUSupport {\r\n\t\tconst e = euSupport;\r\n\t\treturn {\r\n\t\t\t\tid: e.euId,\r\n\t\t\t\teuType: this.toEUSupportType( e.euType),\r\n\t\t\t\tsupportAmount: e.supportAmount,\r\n\t\t\t\tsupportYear: e.supportYear,\r\n\t\t}\r\n\t}\r\n\tstatic toEUSupportType(euType: EUType | undefined): SmeEUSupportType | undefined {\r\n\t\tif( !euType)\r\n\t\t\treturn;\r\n\t\tif( euType==EUType.EUStd)\r\n\t\t\treturn SmeEUSupportType.EU;\r\n\t\tif( euType==EUType.EUStdOchNationelltStd)\r\n\t\t\treturn SmeEUSupportType.EUNAT;\r\n\t\tif( euType==EUType.EUStdOchNationelltStdUtanMjlk)\r\n\t\t\treturn SmeEUSupportType.EUNAT_NOMILK;\r\n\t\tif( euType==EUType.NationellStdUtanMjlk)\r\n\t\t\treturn SmeEUSupportType.NAT_NOMILK;\r\n\t}\r\n\tstatic toCompanyEconomies(companyeconomies: CompanyEconomyType[] | undefined): CompanyEconomy[] | undefined {\r\n\t\tif( !companyeconomies )\r\n\t\t\treturn;\r\n\t\treturn companyeconomies.map(x=> {\r\n\t\t\t//let budget:BudgetType|undefined = this.getBudgetTypeByCompanyEconomyType(budgets, x);\r\n\t\t\treturn this.toCompanyEconomy(x);\r\n\t\t})\r\n\t}\r\n\tstatic toCompanyEconomy(companyEconomy: CompanyEconomyType): CompanyEconomy {\r\n\t\tconst cet = companyEconomy;\r\n\t\tconst ce:CompanyEconomy = {\r\n\t\t\tid: cet.companyEconomyId,\r\n\t\t\tcompanyId: cet.companyId,\r\n\t\t\tcustomerCategory: cet.customerCategory,\r\n\t\t\trevenues: this.toRevenues(cet.revenues), // NOT IN USE.\r\n\t\t}\r\n\t\treturn ce;\r\n\t}\r\n\tstatic toBudget(budget: BudgetType):Budget {\r\n\t\treturn {\r\n\t\t\tcompanyEconomyId: budget.companyEconomyId||'',\r\n\t\t\tbudgetYears: this.toBudgetYears(budget.budgetYears) // TODO: LHB must fix.\r\n\t\t}\r\n\t}\r\n\tstatic toBudgetYears(budgetYears: BudgetYearType[] | undefined): SmeBudgetYear[] | undefined {\r\n\t\tif( !budgetYears ) return;\r\n\t\treturn budgetYears.map(x => {\r\n\t\t\treturn this.toBudgetYear(x);\r\n\t\t})\r\n\t}\r\n\tstatic toBudgetYear(x: BudgetYearType): SmeBudgetYear {\r\n\t\tlet v = x.budget||{};\r\n\t\treturn {\r\n\t\t\tbudgetId: x.budgetId,\r\n\t\t\tyear: x.budgetyear,\r\n\t\t\tvalue1: v.value1,\r\n\t\t\tvalue2: v.value2,\r\n\t\t\tvalue3: v.value3,\r\n\t\t\tvalue4: v.value4,\r\n\t\t\tvalue5: v.value5,\r\n\t\t\tvalue6: v.value6,\r\n\t\t\tvalue7: v.value7,\r\n\t\t\tvalue8: v.value8,\r\n\t\t\tvalue9: v.value9,\r\n\t\t\tvalue10: v.value10,\r\n\t\t\tvalue11: v.value11,\r\n\t\t\tvalue12: v.value12,\r\n\t\t\tvalue13: v.value13,\r\n\t\t\tvalue14: v.value14,\r\n\t\t\tvalue15: v.value15,\r\n\t\t\tvalue16: v.value16,\r\n\t\t\tvalue17: v.value17,\r\n\t\t\tvalue18: v.value18,\r\n\t\t\tvalue19: v.value19,\r\n\t\t\tvalue20: v.value20,\r\n\t\t\tvalue21: v.value21,\r\n\t\t\tvalue22: v.value22,\r\n\t\t\tvalue23: v.value23,\r\n\t\t\tvalue24: v.value24,\r\n\t\t\tvalue25: v.value25\r\n\t\t}\r\n\t}\r\n\tstatic toRevenues(revenues: RevenueType[] | undefined): Revenue[] | undefined {\r\n\t\tif( !revenues) return;\r\n\t\treturn revenues.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tyear: x.revenueYear,\r\n\t\t\t\trevenue: x.revenue\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tstatic toLoan(loan: LoanType): Loan {\r\n\r\n\t\tlet tol:TakeoverLoanType[]|undefined = loan.takeoverloans;\r\n\t\t// if( loan.takeoverloans && loan.takeoverloans.takeoverloans) {\r\n\t\t// \ttol = loan.takeoverloans.takeoverloans;\r\n\t\t// }\r\n\t\t\r\n\t\treturn {\r\n\t\t\tid: loan.loanId,\r\n\t\t\tnumber: loan.loanNumber,\r\n\t\t\tamount: loan.loanAmount, // obsolete\r\n\t\t\taims: this.toAims(loan.aims),\r\n\t\t\ttakeoverLoans: this.toTakeoverLoans(tol), // TODO.\r\n\t\t\ttakeOver: loan.loanTakeOver, // obsolete\r\n\t\t\tdownpaymentOther: loan.downPaymentOther,\r\n\t\t\tdownpaymentType: this.toDownpaymentSource(loan.downPaymentType),\r\n\t\t\tdownPaymentAmount: loan.downPaymentAmount,\r\n\t\t\tpurposeDescription: loan.purposeDescription\r\n\t\t}\r\n\t}\r\n\tstatic toDownpaymentSource(downPaymentType: DownPaymentType | undefined): DownpaymentSource | undefined {\r\n\t\tconst d = downPaymentType;\r\n\t\tif( d==DownPaymentType.Blanco)\r\n\t\t\treturn DownpaymentSource.BLANCO_LOAN;\r\n\t\telse if( d==DownPaymentType.FrsljningBostad)\r\n\t\t\treturn DownpaymentSource.SALE_OF_PROPERTY;\r\n\t\telse if( d==DownPaymentType.Sparande)\r\n\t\t\treturn DownpaymentSource.SAVINGS;\r\n\t\telse if( d==DownPaymentType.Vrigt)\r\n\t\t\treturn DownpaymentSource.OTHER;\r\n\t\telse\r\n\t\t\treturn;\r\n\t}\r\n\tstatic toAims(aims: AimType[] | undefined): Aim[] | undefined {\r\n\t\tif( !aims ) return;\r\n\t\treturn aims.map(x => {\r\n\t\t\tconst aimCategory:string|undefined = x.purposeText;\r\n\t\t\tconst aimDetail:string|undefined = x.aimText;\r\n\t\t\treturn {\r\n\t\t\t\tid: x.aimId,\r\n\t\t\t\tloanAmountPart: x.loanAmountPart,\r\n\t\t\t\taimCategory: aimCategory,\r\n\t\t\t\taimDetail: aimDetail\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toTakeoverLoans(takeoverLoans: TakeoverLoanType[] | undefined): TakeoverLoan[] | undefined {\r\n\t\tif( !takeoverLoans ) return;\r\n\t\treturn takeoverLoans.map(x => {\r\n\t\t\tconst aimCategory:string|undefined = x.purposeText;\r\n\t\t\tconst aimDetail:string|undefined = x.aimText;\r\n\t\t\treturn {\r\n\t\t\t\tid: x.takeoverLoanId,\r\n\t\t\t\taimCategory: aimCategory,\r\n\t\t\t\taimDetail: aimDetail,\r\n\t\t\t\tdebtAmount: x.debtAmount,\r\n\t\t\t\tcreditInstitute: x.creditInstitute,\r\n\t\t\t\tloanNumber: x.loanNumber\r\n\t\t\t\t//interest: x.interest,\r\n\t\t\t\t//period: x.period\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\t// static toMainPurpose(purposeOfLoan: MainPurposes | undefined): SmeMainPurposes | undefined {\r\n\t// \tif( !purposeOfLoan )\r\n\t// \t\treturn;\r\n\t// \tif( purposeOfLoan==MainPurposes.Kp)\r\n\t// \t\treturn SmeMainPurposes.BUY;\r\n\t// \tif( purposeOfLoan==MainPurposes.UtkningLn)\r\n\t// \t\treturn SmeMainPurposes.EXTENSION;\r\n\t// \tif( purposeOfLoan==MainPurposes.UtlningMotObelnat)\r\n\t// \t\treturn SmeMainPurposes.UNPLEDGED;\r\n\t// \tif( purposeOfLoan==MainPurposes.Vertag)\r\n\t// \t\treturn SmeMainPurposes.TAKEOVER;\r\n\t// }\r\n\tstatic toApplicants(applicants: ApplicantType[] | undefined, kycs:KycInformationType[]|undefined): Applicant[] | undefined {\r\n\t\tif( !applicants )\r\n\t\t\treturn;\r\n\r\n\t\treturn applicants.map(x => {\r\n\t\t\tlet kycResult = kycs?kycs.filter(k => k.customerId==x.customerId):[];\r\n\t\t\tlet kyc = kycResult.length==1?kycResult[0]:undefined;\r\n\t\t\treturn this.toApplicant(x, kyc);\r\n\t\t});\r\n\t}\r\n\r\n\tstatic toApplicant(applicant:ApplicantType, kyc?:KycInformationType|undefined) : Applicant {\r\n\t\tconst x = applicant;\r\n\r\n\t\tlet firstName = x.applicantName||'';\r\n\t\tlet lastName;\r\n\t\tlet spPos = firstName.lastIndexOf(' ');\r\n\t\tif( spPos>0 ) {\r\n\t\t\tlastName = firstName.slice(spPos).trim();\r\n\t\t\tfirstName = firstName.slice(0,spPos).trim();\r\n\t\t}\r\n\r\n\t\tlet email = x.contactInformation?x.contactInformation.applicanteMail:undefined;\r\n\r\n\t\tlet a:Applicant = {\r\n\t\t\tid: x.applicantId,\r\n\t\t\tfirstName: firstName,\r\n\t\t\tlastName: lastName,\r\n\t\t\tcustomerId: x.customerId,\r\n\t\t\tstreetAddress: x.applicantAddress,\r\n\t\t\tpostalAddress: x.applicantPostAddress,\r\n\t\t\tpostalCode: x.applicantPostalCode,\r\n\t\t\temail: email,\r\n\t\t\temailConfirm: email,\r\n\t\t\tmobilePhone: x.contactInformation?x.contactInformation.applicantMobileNumber:undefined,\r\n\t\t\tstakeholderType: x.stakeholderType,\r\n\t\t\tkyc: this.toKyc(kyc),\r\n\t\t\tnotifyByEmail: x.applicantByeMail,\r\n\t\t\tnotifyByMobilePhone: x.applicantBySms,\r\n\t\t\twillBuyAgriForestryProperty: x.applicantCollateralToBuy\r\n\t\t}\r\n\t\treturn a;\r\n\t}\r\n\tstatic toApplicantOrUndefined(applicant:ApplicantType|undefined, kyc?:KycInformationType|undefined) : Applicant|undefined {\r\n\t\tif( !applicant )\r\n\t\t\treturn; \r\n\t\treturn this.toApplicant(applicant, kyc);\r\n\t}\r\n\tstatic toKyc(kyc: KycInformationType | undefined): KYC | undefined {\r\n\t\tif( !kyc )\r\n\t\t\treturn undefined;\r\n\t\treturn {\r\n\t\t\tid:kyc.kycId||'',\r\n\t\t\thighRiskCategoryCode: kyc.kycHighRiskIndustryText,\r\n\t\t\tapprovedInfoSharing: kyc.kycUCAware, // ucAware\r\n\t\t\tapprovedCreditCheck: kyc.kycAcceptUC, // ucAccepted\r\n\t\t\tapprovedInfoHandling: kyc.kycAcceptGDPR, // gdprAccepted\r\n\t\t\tapprovedInfoSharingDB: kyc.kycUCAware, // ucAware\r\n\t\t\tapprovedCreditCheckDB: kyc.kycAcceptUC, // ucAccepted\r\n\t\t\tapprovedInfoHandlingDB: kyc.kycAcceptGDPR, // gdprAccepted\t\t\t\r\n\t\t\tisPep: kyc.kycPublicFunction,\r\n\t\t\t//isPepFunction: kyc.kycRelatedPublicFunction,\r\n\t\t\tisPepRelated: kyc.kycRelatedPublicFunction,\r\n\t\t\t//isPepRelatedFunction: kyc.kycRelatedPublicFunction,\r\n\t\t\tisAmericanCitizen: kyc.kycAmericanCitizen,\r\n\t\t\tisCrsTaxObligated: kyc.kycCrsTaxObligation\r\n\t\t}\r\n\t}\r\n\r\n\tstatic toCompany(company:CompanyType|undefined) : Company|undefined {\r\n\t\tif( !company )\r\n\t\t\treturn;\r\n\t\tconst x = company;\r\n\t\tlet c:Company = {\r\n\t\t\tid: x.companyId,\r\n\t\t\torgNumber: x.orgNumber,\r\n\t\t\tname: x.companyName,\r\n\t\t\tstatusCode: x.statusCode,\r\n\t\t\thighRiskCode: x.statusTextHigh,\r\n\t\t\tcreated:x.created?new Date(x.created):undefined,\r\n\t\t\tbusinessFocuses: this.toBusinessCategories(x.businessFocuses),\r\n\t\t\tindustriCode: x.industriCode,\r\n\t\t\tindustriText: x.industriText,\r\n\t\t\t//selectedCompany: x.selectedCompany,\r\n\t\t\tlegalGroupCode: x.leagalGroupCode,\r\n\t\t\tlegalGroupText: x.legalGroupText,\r\n\t\t\tbrokenFiscalYear: x.brokenFiscalYear,\r\n\t\t\tfiscalYearEndDate: x.fiscalYearEndDate,\r\n\t\t\tprincipals: this.toPrincipals(x.principals)\r\n\t\t}\r\n\t\treturn c;\r\n\t}\r\n\r\n\tstatic toPrincipals(principals: PrincipalType[] | undefined): Principal[] | undefined {\r\n\t\tif( !principals) return;\r\n\t\treturn principals.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tcustomerId: x.customerId,\r\n\t\t\t\tname: x.principalName\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tstatic toBusinessCategories(businessCategories: BusinessCategoryType[] | undefined): BusinessCategory[] | undefined {\r\n\t\tif( !businessCategories) return;\r\n\t\treturn businessCategories.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tid: x.businessId||this.idService.newGuid(),\r\n\t\t\t\tbusinessCategoryCode: x.businessCategory,\r\n\t\t\t\tbusinessCategoryText: x.businessCategory,\r\n\t\t\t\tbusinessPart: x.businessPart,\r\n\t\t\t\tmainDirection: x.mainBusiness\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tstatic toCompanies(companies:CompanyType[]|undefined) : Company[]|undefined {\r\n\t\tif( !companies)\r\n\t\t\treturn;\r\n\t\tlet r = companies.filter(x=>x!==undefined).map(x => this.toCompany(x));\r\n\t\treturn r as Company[];\r\n\t}\r\n\r\n\r\n\r\n}","import { BaseService } from './BaseService';\r\nimport { Case, Applicant, } from '../models/SelmaModels';\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { GuardService } from './GuardService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { ApplicantService } from './ApplicantService';\r\nimport { IdService } from './IdService';\r\nimport { UpdateProcessStatusCaseIdStatusEnum, CaseIdStatus, LinksAllFromJSON, StakeholderType, CustomerIdType } from '../libs/SMELPOClient';\r\nimport { Login, SessionService } from './SessionService';\r\nimport { SmeModelConverter } from '../models/SmeModelConverter';\r\nimport { LpoModelConverter } from '../models/LpoModelConverter';\r\nimport { ConfigurationService } from './ConfigurationService';\r\nimport { AdminCasesSearch } from '../models/extendedlpo/Admin';\r\nimport { AttachmentService } from './AttachmentService';\r\n\r\n\r\nexport class CaseService extends BaseService {\r\n\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\tprivate applicantService: ApplicantService;\r\n\tpublic attachmentService?: AttachmentService;\r\n\r\n\tconstructor(stateService: StateService, smelpoService: SMELPOService, guardService: GuardService,\r\n\t\tapplicantService: ApplicantService, private idService: IdService,\r\n\t\tprivate sessionService: SessionService,\r\n\t\tprivate configurationService: ConfigurationService) {\r\n\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t\tthis.applicantService = applicantService;\r\n\t}\r\n\r\n\tupdate(c: Case) {\r\n\t\tthis.stateService.update(c);\r\n\t}\r\n\r\n\tsetCurrentCase(c: Case): Case {\r\n\t\tif (this.stateService.state.case !== c) {\r\n\t\t\tthis.stateService.state.case = c;\r\n\t\t\tthis.stateService.update(this.stateService.state);\r\n\t\t}\r\n\t\treturn this.stateService.state.case;\r\n\t}\r\n\r\n\tgetCurrentCase(): Case | undefined {\r\n\t\treturn this.stateService.state.case;\r\n\t}\r\n\r\n\thasOngoingCase(cases: Case[]): boolean {\r\n\t\tlet r = cases.filter(x => x.status === CaseIdStatus.STARTEDBYAPPLICANT);\r\n\t\treturn r.length > 0;\r\n\t}\r\n\r\n\taddNewCase(): Promise {\r\n\t\tif (!this.stateService.state.cases)\r\n\t\t\tthis.stateService.state.cases = [];\r\n\t\tlet cases = this.stateService.state.cases;\r\n\t\tlet login = this.sessionService.getLogin();\r\n\t\treturn this.addCaseOnClient(login, cases);\r\n\t}\r\n\r\n\t// ensureCustomerIdOnCase = (c:Case, customerId:string):void => {\r\n\t// \tlet customer = this.getCustomerByCustomerId(c, customerId);\r\n\t// \tif( !customer ) {\r\n\t// \t\tthis.addNewCustomerToCase(c, customerId);\r\n\t// \t}\r\n\t// }\r\n\r\n\tprivate addNewCustomerToCase(c: Case, customerId: string): CustomerIdType {\r\n\t\tif (!c.customers)\r\n\t\t\tc.customers = [];\r\n\r\n\t\tlet customer = {\r\n\t\t\tcustomerId: customerId,\r\n\t\t\tcustomerAdded: new Date().toISOString()\r\n\t\t};\r\n\t\tc.customers.push(customer);\r\n\t\treturn customer;\r\n\t}\r\n\r\n\t// getCustomerByCustomerId = (c:Case, customerId:string):CustomerIdType|undefined => {\r\n\t// \tif( !c.customers )\r\n\t// \t\treturn;\r\n\t// \tconst g = this.guardService;\r\n\t// \tconst compareCustomerId = g.compareCustomerId;\r\n\t// \tlet customer = c.customers.find(x => compareCustomerId(x.customerId||'', customerId));\r\n\t// \treturn customer;\r\n\t// }\r\n\r\n\tprivate addCaseOnClient(login: Login, cases: Case[]): Promise {\r\n\t\tlet c: Case = {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t\tnumber: 0,\r\n\t\t\tcustomers: [],\r\n\t\t\tcreatedDate: new Date(),\r\n\t\t\tlastAccessedDate: new Date(),\r\n\t\t\tlpCaseId: \"\",\r\n\t\t\tstatus: CaseIdStatus.STARTEDBYAPPLICANT,\r\n\t\t\tapplicants: [{\r\n\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\tstakeholderType: StakeholderType.SOKANDE,\r\n\t\t\t\tcustomerId: login.ssn,\r\n\t\t\t\tfirstName: login.firstName,\r\n\t\t\t\tlastName: login.lastName\r\n\t\t\t}]\r\n\t\t}\r\n\t\tthis.addNewCustomerToCase(c, login.ssn);\r\n\t\tthis.addCaseToStateCases(c);\r\n\t\treturn Promise.resolve(c);\r\n\t}\r\n\r\n\t// Checks if case originates from database.\r\n\tisServerCase(c: Case): boolean {\r\n\t\treturn c.number ? true : false;\r\n\t}\r\n\r\n\tprivate addCaseOnServer(cases: Case[]): Promise {\r\n\t\tif (!this.stateService.state.session || !this.stateService.state.session.login)\r\n\t\t\tthrow new Error(\"No session and login.\");\r\n\r\n\t\tlet login = this.stateService.state.session.login;\r\n\t\tconst customerId = login.ssn;\r\n\r\n\t\t// Create process on server.\r\n\t\tlet processId = this.idService.newGuid();\r\n\t\tlet promise = this.smelpoService.addProcess({\r\n\t\t\tprocessId: processId,\r\n\t\t}, customerId).then(result => {\r\n\t\t\t// Attach process from server as case on client. \r\n\t\t\tconst process = result.data;\r\n\t\t\tconst processId = process.processId;\r\n\t\t\treturn this.loadCase(processId);\r\n\t\t});\r\n\r\n\t\treturn promise;\r\n\t}\r\n\r\n\tcanDeleteCase(c: Case): boolean {\r\n\t\treturn c.status && c.status === CaseIdStatus.STARTEDBYAPPLICANT ? true : false;\r\n\t}\r\n\r\n\tdeleteCase(cases: Case[], c: Case): Promise {\r\n\t\tif (this.isServerCase(c)) {\r\n\t\t\treturn this.smelpoService\r\n\t\t\t\t.deleteCase(c.id, c.lpCaseId || '', UpdateProcessStatusCaseIdStatusEnum.CLOSEDBYAPPLICANT)\r\n\t\t\t\t.then(result => {\r\n\t\t\t\t\tthis.removeCaseFromCases(cases, c);\r\n\t\t\t\t\treturn c;\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.removeCaseFromCases(cases, c);\r\n\t\t\treturn Promise.resolve(c);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate removeCaseFromCases(cases: Case[], c: Case): void {\r\n\t\tthis.stateService.listRemove(cases, c);\r\n\t\tthis.stateService.updateState();\r\n\t}\r\n\r\n\tvalidateCase(c: Case): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif (c.applicants) {\r\n\t\t\tc.applicants.forEach(applicant => {\r\n\t\t\t\tvr.addResult(this.applicantService.validateApplicant(applicant));\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tsendInApplication(c: Case): Promise {\r\n\t\treturn this.smelpoService\r\n\t\t\t.setCaseStatus(c.id, c.lpCaseId || '', UpdateProcessStatusCaseIdStatusEnum.READYFOROFFICER)\r\n\t\t\t.then(x => {\r\n\t\t\t\tc.status = CaseIdStatus.READYFOROFFICER;\r\n\t\t\t\tthis.stateService.update(c);\r\n\t\t\t\treturn c;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate saveCaseToServer(c: Case): Promise {\r\n\t\tlet process = SmeModelConverter.toFullProcess(c);\r\n\t\treturn this.smelpoService\r\n\t\t\t.saveProcess(process)\r\n\t\t\t.then(result => {\r\n\t\t\t\treturn c;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate moveDataFromCreatedServerCaseToClientCase(clientCase: Case, serverCase: Case) {\r\n\t\tconst cc = clientCase;\r\n\t\tconst sc = serverCase;\r\n\r\n\t\tcc.id = sc.id;\r\n\t\tcc.number = sc.number;\r\n\t\tcc.status = sc.status;\r\n\t\tcc.createdDate = sc.createdDate;\r\n\t\tcc.lastAccessedDate = sc.lastAccessedDate;\r\n\t\tcc.customers = sc.customers;\r\n\t\tif (cc.applicants && sc.applicants) {\r\n\t\t\tconst cca = cc.applicants[0];\r\n\t\t\tconst csa = sc.applicants[0];\r\n\t\t\tcca.id = csa.id;\r\n\t\t\tif (csa.firstName)\r\n\t\t\t\tcca.firstName = csa.firstName;\r\n\t\t\tif (csa.lastName)\r\n\t\t\t\tcca.lastName = csa.lastName;\r\n\t\t\tcca.postalAddress = csa.postalAddress;\r\n\t\t\tcca.postalCode = csa.postalCode;\r\n\t\t\tcca.streetAddress = csa.streetAddress;\r\n\t\t}\r\n\r\n\t\tthis.update(cc);\r\n\t}\r\n\r\n\tsaveCase(c: Case): Promise {\r\n\t\tlet promise: Promise;\r\n\t\tif (!this.isServerCase(c)) {\r\n\t\t\t// Create case on server and then save.\r\n\t\t\tif (!this.stateService.state.cases)\r\n\t\t\t\tthis.stateService.state.cases = [];\r\n\t\t\tpromise = this.addCaseOnServer(this.stateService.state.cases)\r\n\t\t\t\t.then(result => {\r\n\t\t\t\t\t// Merge data from created case to client case.\r\n\t\t\t\t\tthis.moveDataFromCreatedServerCaseToClientCase(c, result);\r\n\t\t\t\t\t// Perform proper save.\r\n\t\t\t\t\treturn this.saveCaseToServer(c);\r\n\t\t\t\t}).then(result => {\r\n\t\t\t\t\t// Return original client case but with updated data.\r\n\t\t\t\t\treturn c;\r\n\t\t\t\t})\r\n\t\t} else {\r\n\t\t\t// Case already exists on server. Just save. \r\n\t\t\tpromise = this.saveCaseToServer(c);\r\n\t\t}\r\n\r\n\t\t// After saving, always do this.\r\n\t\treturn promise.then((result: Case) => {\r\n\t\t\tthis.setApplicantsApprovalAsSavedToDB(c.applicants)\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\tsetApplicantsApprovalAsSavedToDB(applicants: Applicant[] | undefined) {\r\n\t\tif (!applicants)\r\n\t\t\treturn;\r\n\t\tapplicants.forEach(x => {\r\n\t\t\tif (x.kyc) {\r\n\t\t\t\tconst kyc = x.kyc;\r\n\t\t\t\tkyc.approvedCreditCheckDB = kyc.approvedCreditCheck;\r\n\t\t\t\tkyc.approvedInfoHandlingDB = kyc.approvedInfoHandling;\r\n\t\t\t\tkyc.approvedInfoSharingDB = kyc.approvedInfoSharing;\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tcanSaveCase(c: Case): boolean {\r\n\t\tconst hasApproval = this.applicantService.allApplicantsHaveGivenFullApproval(c);\r\n\t\treturn hasApproval;\r\n\t}\r\n\r\n\tprivate later(delay: number, value: T): Promise {\r\n\t\treturn new Promise(function (resolve) {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tresolve(value);\r\n\t\t\t}, delay);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate loadCase = (processId: string): Promise => {\r\n\t\treturn this.smelpoService.getProcess(processId)\r\n\t\t\t.then(x => {\r\n\t\t\t\tlet linksAll = x.data;\r\n\t\t\t\tlet c = LpoModelConverter.linksAllToCase(linksAll);\r\n\t\t\t\tif (this.attachmentService)\r\n\t\t\t\t\tthis.attachmentService.ensureCorrectAttachmentRequests(c);\r\n\t\t\t\treturn c;\r\n\t\t\t})\r\n\t}\r\n\r\n\tprivate addCaseToStateCases = (c: Case) => {\r\n\t\tconst state = this.stateService.state;\r\n\t\tif (!state.cases) {\r\n\t\t\tstate.cases = [c];\r\n\t\t} else {\r\n\t\t\tstate.cases.push(c);\r\n\t\t}\r\n\t\tthis.stateService.update(state.cases);\r\n\t\tthis.stateService.updateState();\r\n\t}\r\n\r\n\tprivate addCasesToStateCases = (cases: Case[]) => {\r\n\t\tconst state = this.stateService.state;\r\n\t\tif (cases && cases.length > 0) {\r\n\t\t\tcases.sort((a, b) => {\r\n\t\t\t\tif (a.number < b.number)\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\telse\r\n\t\t\t\t\treturn 1;\r\n\t\t\t})\r\n\t\t\tif (!state.cases) {\r\n\t\t\t\tstate.cases = cases;\r\n\t\t\t} else {\r\n\t\t\t\tstate.cases.length = 0;\r\n\t\t\t\tstate.cases.splice(0, 0, ...cases);\r\n\t\t\t}\r\n\t\t\tthis.stateService.update(state.cases);\r\n\t\t\tthis.stateService.updateState();\r\n\t\t}\r\n\t}\r\n\r\n\tloadCases = (): Promise => {\r\n\t\treturn this.getMyCases().then(cases => {\r\n\t\t\tthis.addCasesToStateCases(cases);\r\n\t\t\treturn cases;\r\n\t\t})\r\n\t}\r\n\r\n\tprivate getMyCases = (): Promise => {\r\n\t\tif (this.stateService.state.session && this.stateService.state.session.login) {\r\n\t\t\tlet mySSN = this.stateService.state.session.login.ssn;\r\n\r\n\t\t\tvar promise = new Promise((resolve, reject) => {\r\n\r\n\t\t\t\tthis.smelpoService.getProcesses(mySSN)\r\n\t\t\t\t\t.then(x => {\r\n\t\t\t\t\t\tif (x.data.processes) {\r\n\t\t\t\t\t\t\tlet cases: Case[] = [];\r\n\t\t\t\t\t\t\tlet fails = 0;\r\n\t\t\t\t\t\t\tlet processes = x.data.processes || [];\r\n\t\t\t\t\t\t\tprocesses.forEach(process => {\r\n\t\t\t\t\t\t\t\tthis.loadCase(process.processId)\r\n\t\t\t\t\t\t\t\t\t.then(c => {\r\n\t\t\t\t\t\t\t\t\t\tcases.push(c);\r\n\t\t\t\t\t\t\t\t\t\tif (fails + cases.length === processes.length)\r\n\t\t\t\t\t\t\t\t\t\t\tresolve(cases);\r\n\t\t\t\t\t\t\t\t\t}, () => {\r\n\t\t\t\t\t\t\t\t\t\tfails++;\r\n\t\t\t\t\t\t\t\t\t\tif (fails + cases.length === processes.length) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (cases.length > 0)\r\n\t\t\t\t\t\t\t\t\t\t\t\tresolve(cases);\r\n\t\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t\t\treject(cases);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\treturn cases;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn [];\r\n\t\t\t\t\t});\r\n\r\n\t\t\t});\r\n\r\n\t\t\treturn (promise as Promise);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn Promise.resolve([]);\r\n\t\t}\r\n\t}\r\n\r\n\t// === ADMIN =======\r\n\r\n\r\n\tadminDeleteCase(cases: Case[], c: Case): Promise {\r\n\t\treturn this.smelpoService\r\n\t\t\t.deleteCase(c.id, c.lpCaseId || '', UpdateProcessStatusCaseIdStatusEnum.CLOSEDBYTHINNING)\r\n\t\t\t.then(result => {\r\n\t\t\t\tthis.stateService.listRemove(cases, c);\r\n\t\t\t\tthis.stateService.updateState();\r\n\t\t\t\treturn c;\r\n\t\t\t});\r\n\t}\r\n\r\n\tadminMarkCaseAsHandled(c: Case): Promise {\r\n\t\treturn this.smelpoService\r\n\t\t\t.setCaseStatus(c.id, c.lpCaseId || '', UpdateProcessStatusCaseIdStatusEnum.CLOSEDBYOFFICER)\r\n\t\t\t.then(result => {\r\n\t\t\t\tthis.stateService.updateState();\r\n\t\t\t\treturn c;\r\n\t\t\t});\r\n\t}\r\n\r\n\tadminSearchCases(search: AdminCasesSearch): Promise {\r\n\t\treturn this.smelpoService.adminSearchProcesses(search)\r\n\t\t\t.then(result => {\r\n\t\t\t\tconst cases = result.cases.map(x => {\r\n\t\t\t\t\t// UGLY REMAPPING b/c of casing differences.\r\n\t\t\t\t\t//let json = JSON.stringify(x);\r\n\t\t\t\t\tlet goodLinksAll = LinksAllFromJSON(x);\r\n\t\t\t\t\tlet c = LpoModelConverter.linksAllToCase(goodLinksAll);\r\n\t\t\t\t\treturn c;\r\n\t\t\t\t});\r\n\t\t\t\treturn cases;\r\n\t\t\t})\r\n\t}\r\n\r\n}\r\n","import { Case, Company, Loan, Aim, Applicant, ExtLoan, ExtLoanOwner, Household, EUSupport,\r\n\tEUSupportEnum as SmeEUSupportType, \r\n\tBudgetYear as SmeBudgetYear,\r\n\tLPEmploymentEnum, HouseholdMember,\r\n\tCompanyEconomy,\r\n\tBudget,\r\n\tKYC,\r\n\tMaintenanceCost,\r\n\tMaintenanceHouse,\r\n\tGuarantor,\r\n\tChild,\r\n\tRevenue,\r\n\tCollateral,\r\n\tTaxedOwner,\r\n\tLoanOwner,\r\n\tDownpaymentSource,\r\n\tBusinessCategory,\r\n\tAttachmentRequest,\r\n\tAttachment,\r\n\tPrincipal} from \"./SelmaModels\";\r\nimport { CompanyType, LoanType, AimType, KycInformationType, ApplicantType, \r\n\tExtLoanType, HouseholdMemberType, EUSupportType, EUType, PersonalEconomyType, \r\n\tTypeOfEmployeement, CompanyEconomyType, RevenueType, BudgetType, \r\n\tMaintenanceCostType, MaintenanceHouseType, ChildType, \r\n\tTaxedOwnerType, ProcessType, DownPaymentType, BusinessCategoryType, BudgetYearType, PrincipalType, TakeoverLoanType, TakeoverLoansType } from \"../libs/SMELPOClient\";\r\nimport { HouseholdType } from '../libs/SMELPOClient/models/HouseholdType';\r\nimport { CollateralType } from '../libs/SMELPOClient/models/CollateralType';\r\nimport { PersonalEconomy } from './selmamodels/Applicant';\r\nimport { GuarantorType } from '../libs/SMELPOClient/models/GuarantorType';\r\nimport { LoanOwnerType } from \"../libs/SMELPOClient/models/LoanOwnerType\";\r\nimport { FullProcess } from \"./extendedlpo/FullProcess\";\r\nimport { LpoAttachmentRequest, LpoAttachment } from \"./extendedlpo/Attachment\";\r\nimport { TakeoverLoan } from \"./selmamodels/Loan\";\r\n\r\n// Takes Selma SME client models and converts to other models such as Lpo server API models.\r\nexport class SmeModelConverter {\r\n\r\n\tstatic toFullProcess(c:Case) : FullProcess {\r\n\t\tlet fp:FullProcess = {\r\n\t\t\tprocesses: [this.toLpoProcess(c)],\r\n\t\t\tcompanies: this.toLpoCompanies(c, c.companies),\r\n\t\t\tloans: this.toLpoLoans(c, c.loan),\r\n\t\t\tapplicants: this.toLpoApplicants(c, c.applicants),\r\n\t\t\textloans: this.toLpoExtLoans(c, c.extLoans),\r\n\t\t\thouseholds: this.toLpoHouseholds(c, c.households),\r\n\t\t\tcollaterals: this.toLpoCollaterals(c, c.collaterals),\r\n\t\t\teusupports: this.toLpoEuSupports(c, c.euSupports),\r\n\t\t\tpersonaleconomies: this.toLpoPersonalEconomies(c, c.personalEconomies),\r\n\t\t\tcompanyeconomies: this.toLpoCompanyEconomies(c, c.companyEconomies),\r\n\t\t\tbudgets: this.toLpoBudgets(c, c.budgets),\r\n\t\t\tkycinformations: this.toLpoKycInfos(c, c.applicants),\r\n\t\t\tguarantors: this.toLpoGuarantors(c, c.guarantors),\r\n\t\t\tmaintenancecosts: this.toLpoMaintenanceCosts(c, c.maintenanceCosts),\r\n\t\t};\r\n\r\n\t\t(fp as any).attachments = this.toLpoAttachments(c, c.attachments);\r\n\t\t(fp as any).attachmentRequests = this.toLpoAttachmentRequests(c, c.attachmentRequests);\r\n\r\n\t\treturn fp;\r\n\t}\r\n\tstatic toLpoAttachmentRequests(c:Case, attachmentRequests: AttachmentRequest[]|undefined): LpoAttachmentRequest[] | undefined {\r\n\t\tif( !attachmentRequests) return;\r\n\t\treturn attachmentRequests.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tid: x.id,\r\n\t\t\t\tprocessId: c.id,\r\n\t\t\t\tcustomerId: x.customerId,\r\n\t\t\t\trequestType: x.requestType,\r\n\t\t\t\trequestVariation: x.requestVariation,\r\n\t\t\t\trequired: x.required\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toLpoAttachments(c:Case, attachments: Attachment[]| undefined): LpoAttachment[] | undefined {\r\n\t\tif( !attachments) return;\r\n\t\treturn attachments.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tid: x.id,\r\n\t\t\t\tprocessId: c.id,\r\n\t\t\t\tcustomerId: x.customerId,\r\n\t\t\t\trequestType: x.requestType,\r\n\t\t\t\trequestVariation: x.requestVariation,\r\n\t\t\t\tmimeType: x.mimeType,\r\n\t\t\t\tfileName: x.fileName,\r\n\t\t\t\tfileSize: x.fileSize\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toLpoMaintenanceCosts(c: Case, maintenanceCosts: MaintenanceCost[] | undefined): MaintenanceCostType[] | undefined {\r\n\t\tif( !maintenanceCosts ) return;\r\n\t\treturn maintenanceCosts.map(x => {\r\n\t\t\treturn this.toLpoMaintenanceCost(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoMaintenanceCost(c: Case, x: MaintenanceCost): MaintenanceCostType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tmaintenanceCostId: x.id,\r\n\t\t\tcustomerId: x.customerId,\r\n\t\t\ttypeofhouses: this.toLpoMaintenanceHouses(c, x.typeofhouses)\r\n\t\t}\r\n\t}\r\n\tstatic toLpoMaintenanceHouses(c:Case, maintenanceHouses: MaintenanceHouse[] | undefined):MaintenanceHouseType[] | undefined {\r\n\t\tif( !maintenanceHouses ) return;\r\n\t\treturn maintenanceHouses.map(x => {\r\n\t\t\treturn this.toLpoMaintenanceHouse(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoMaintenanceHouse(c: Case, x: MaintenanceHouse): MaintenanceHouseType {\r\n\t\treturn {\r\n\t\t\ttypeOfHouse: x.houseType, // this.toLpoTypeOfHouse(x.houseType),\r\n\t\t\tkeepHouse: x.keepHouse,\r\n\t\t\tloanInOtherInstitute: x.loanInOtherInstitute,\r\n\t\t\tredeemLoan: x.redeemLoan,\r\n\t\t\t// creditInstitut: x. // NOT IN USE\r\n\t\t\t// loanClearing: x // NOT IN USE\r\n\t\t\t//institutLoanNumber?: string; // NOT IN USE\r\n\t\t\tloanOwners: this.toLpoLoanOwners(x.loanOwners),\r\n\t\t\thouseLoanAmount: x.houseLoanAmount,\r\n\t\t\tmaintenanceCost: x.maintenanceCost\r\n\t\t}\r\n\t}\r\n\tstatic toLpoLoanOwners(loanOwners: LoanOwner[] | undefined): LoanOwnerType[] | undefined {\r\n\t\tif( !loanOwners ) return;\r\n\t\treturn loanOwners.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tcustomerId: x.customerId,\r\n\t\t\t\townershipPart: x.ownershipPart\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\t// static toLpoTypeOfHouse(houseType: string | undefined): TypeOfHouse | undefined {\r\n\t// \tif( !houseType|| houseType=='') return;\r\n\t// \tif( houseType=='HOUSE') return TypeOfHouse.Villa;\r\n\t// \tif( houseType=='OTHER') return TypeOfHouse.VrigtBoende;\r\n\t// \tif( houseType=='TENANCY') return TypeOfHouse.Hyresrtt;\r\n\t// \tif( houseType=='FARM') return TypeOfHouse.Landbruksfastighet;\r\n\t// \tif( houseType=='APARTMENT') return TypeOfHouse.Bostadsrtt;\r\n\t// \tif( houseType=='VACATIONHOUSE') return TypeOfHouse.Fritidshus;\r\n\t// }\r\n\tstatic toLpoGuarantors(c: Case, guarantors: Guarantor[] | undefined): GuarantorType[] | undefined {\r\n\t\tif( !guarantors ) return;\r\n\t\treturn guarantors.map(x => {\r\n\t\t\treturn this.toLpoGuarantor(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoGuarantor(c: Case, x: Guarantor): GuarantorType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tguarantorId: x.id,\r\n\t\t\tguarantorName: x.name,\r\n\t\t\tguarantorPhone: x.phone,\r\n\t\t\tguarantorCustomerId: x.guarantorCustomerId\r\n\t\t}\r\n\t}\r\n\tstatic toLpoKycInfos(c: Case, applicants: Applicant[] | undefined): KycInformationType[] | undefined {\r\n\t\tif( !applicants ) return;\r\n\t\treturn applicants\r\n\t\t.filter(x => x.kyc?true:false)\r\n\t\t.map(x => {\r\n\t\t\tconst kyc: KYC = x.kyc as KYC;\r\n\t\t\treturn this.toLpoKycInfo(c, x, kyc);\r\n\t\t});\r\n\t}\r\n\tstatic toLpoKycInfo(c: Case, x: Applicant, kyc: KYC): KycInformationType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tcustomerId: x.customerId,\r\n\t\t\tkycId: kyc.id,\r\n\t\t\tkycAcceptUC: kyc.approvedCreditCheck,\r\n\t\t\tkycAcceptGDPR: kyc.approvedInfoHandling,\r\n\t\t\tkycUCAware: kyc.approvedInfoSharing,\r\n\t\t\tkycPublicFunction: kyc.isPep,\r\n\t\t\tkycRelatedPublicFunction: kyc.isPepRelated,\r\n\t\t\tkycAmericanCitizen: kyc.isAmericanCitizen,\r\n\t\t\tkycCrsTaxObligation: kyc.isCrsTaxObligated,\r\n\t\t\tkycHighRiskIndustry: (!kyc.highRiskCategoryCode || kyc.highRiskCategoryCode==='' || kyc.highRiskCategoryCode==='0')?false:true,\r\n\t\t\tkycHighRiskIndustryText: kyc.highRiskCategoryCode\r\n\t\t}\r\n\t}\r\n\r\n\tstatic toLpoBudgets(c: Case, budgets: Budget[] | undefined): BudgetType[] | undefined {\r\n\t\tif( !budgets) return;\r\n\t\treturn budgets\r\n\t\t.map(x => {\r\n\t\t\treturn this.toLpoBudget(c, x)\r\n\t\t})\r\n\t}\r\n\tstatic toLpoBudget(c: Case, budget: Budget): BudgetType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tcompanyEconomyId: budget.companyEconomyId,\r\n\t\t\tbudgetYears: this.toLpoBudgetYears(c, budget.budgetYears)\r\n\t\t}\r\n\t}\r\n\tstatic toLpoBudgetYears(c: Case, budgetYears: SmeBudgetYear[] | undefined): BudgetYearType[] | undefined {\r\n\t\tif( !budgetYears ) return;\r\n\t\treturn budgetYears.map(x => {\r\n\t\t\treturn this.toLpoBudgetYear(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoBudgetYear(c: Case, x: SmeBudgetYear): BudgetYearType {\r\n\t\treturn {\r\n\t\t\tbudgetId: x.budgetId,\r\n\t\t\tbudgetyear: x.year,\r\n\t\t\tbudget: {\r\n\t\t\t\tvalue1: x.value1,\r\n\t\t\t\tvalue2: x.value2,\r\n\t\t\t\tvalue3: x.value3,\r\n\t\t\t\tvalue4: x.value4,\r\n\t\t\t\tvalue5: x.value5,\r\n\t\t\t\tvalue6: x.value6,\r\n\t\t\t\tvalue7: x.value7,\r\n\t\t\t\tvalue8: x.value8,\r\n\t\t\t\tvalue9: x.value9,\r\n\t\t\t\tvalue10: x.value10,\r\n\t\t\t\tvalue11: x.value11,\r\n\t\t\t\tvalue12: x.value12,\r\n\t\t\t\tvalue13: x.value13,\r\n\t\t\t\tvalue14: x.value14,\r\n\t\t\t\tvalue15: x.value15,\r\n\t\t\t\tvalue16: x.value16,\r\n\t\t\t\tvalue17: x.value17,\r\n\t\t\t\tvalue18: x.value18,\r\n\t\t\t\tvalue19: x.value19,\r\n\t\t\t\tvalue20: x.value20,\r\n\t\t\t\tvalue21: x.value21,\r\n\t\t\t\tvalue22: x.value22,\r\n\t\t\t\tvalue23: x.value23,\r\n\t\t\t\tvalue24: x.value24,\r\n\t\t\t\tvalue25: x.value25\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tstatic toLpoCompanyEconomies(c: Case, companyEconomies: CompanyEconomy[] | undefined):\r\n\t\tCompanyEconomyType[] | undefined {\r\n\t\tif( !companyEconomies )\r\n\t\t\treturn;\r\n\t\treturn companyEconomies.map(x => {\r\n\t\t\treturn this.toLpoCompanyEconomy(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoCompanyEconomy(c: Case, x: CompanyEconomy): CompanyEconomyType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tcompanyId: x.companyId,\r\n\t\t\tcompanyEconomyId: x.id,\r\n\t\t\trevenues: this.toLpoRevenues(x.revenues), // TODO must be fixed by Kjell. NOT IN USE.\r\n\t\t\tcustomerCategory: x.customerCategory\r\n\t\t}\r\n\t}\r\n\tstatic toLpoRevenues(revenues: Revenue[] | undefined) : RevenueType[]|undefined {\r\n\t\tif( !revenues ) return;\r\n\t\treturn revenues.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\trevenueYear: x.year,\r\n\t\t\t\trevenue: x.revenue||0\r\n\t\t\t};\r\n\t\t})\r\n\t}\r\n\tstatic toLpoPersonalEconomies(c: Case, personalEconomies: PersonalEconomy[] | undefined): PersonalEconomyType[] | undefined {\r\n\t\tif( !personalEconomies )\r\n\t\t\treturn;\r\n\t\treturn personalEconomies.map(x => {\r\n\t\t\treturn this.toLpoPersonalEconomy(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoPersonalEconomy(c: Case, x: PersonalEconomy): PersonalEconomyType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tcustomerId: x.customerId,\r\n\t\t\tpersonalEconomyId: x.id,\r\n\t\t\tyearlyIncome: x.yearlyIncome,\r\n\t\t\tincome: x.income,\r\n\t\t\ttypeOfEmployeement: this.toLpoLPEmploymentEnum(x.typeOfEmployment),\r\n\t\t\temployeer: x.employer,\r\n\t\t\tyearOfEmployment: x.yearOfEmployment,\r\n\t\t\tmonthOfEmployment: x.monthOfEmployment\r\n\t\t}\r\n\t}\r\n\r\n\tstatic toLpoLPEmploymentEnum(typeOfEmployeement: LPEmploymentEnum | undefined): TypeOfEmployeement | undefined {\r\n\t\tconst t = typeOfEmployeement;\r\n\t\tif( t===undefined )\r\n\t\t\treturn;\r\n\r\n\t\tif( t===LPEmploymentEnum.PERMANENT ) return TypeOfEmployeement.PERMANENT; // - Anställd, tills-vidare-anställd \r\n\t\tif( t===LPEmploymentEnum.TEMPORARY ) return TypeOfEmployeement.TEMPORARY; // - Tidbegränsad anställning \r\n\t\tif( t===LPEmploymentEnum.PROBATIONARY ) return TypeOfEmployeement.PROBATIONARY; // - Provanställning \r\n\t\tif( t===LPEmploymentEnum.UNEMPLOYMENT_INSURANCE ) return TypeOfEmployeement.UNEMPLOYMENTINSURANCE; // - Arbetslöshetskassa \r\n\t\tif( t===LPEmploymentEnum.SELF_EMPLOYED ) return TypeOfEmployeement.SELFEMPLOYED; //- Eget företag \r\n\t\tif( t===LPEmploymentEnum.STUDENT_AID ) return TypeOfEmployeement.STUDENTAID; // - Studiestöd \r\n\t\tif( t===LPEmploymentEnum.PENSION) return TypeOfEmployeement.PENSION; // - Inkomst av pension\r\n\t}\r\n\tstatic toLpoEuSupports(c:Case, euSupports: EUSupport[] | undefined): EUSupportType[] | undefined {\r\n\t\tif( !euSupports )\r\n\t\t\treturn;\r\n\t\treturn euSupports.map(x => {\r\n\t\t\treturn this.toLpoEuSupport(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoEuSupport(c:Case, euSupport: EUSupport): EUSupportType {\r\n\t\tconst e = euSupport;\r\n\t\treturn {\r\n\t\t\teuId: e.id,\r\n\t\t\tprocessId: c.id,\r\n\t\t\teuType: this.toEUSupportType(e.euType),\r\n\t\t\tsupportAmount: e.supportAmount,\r\n\t\t\tsupportYear: e.supportYear,\r\n\t\t}\r\n\t}\r\n\tstatic toEUSupportType(euType: SmeEUSupportType | undefined): EUType | undefined {\r\n\t\tconst t = euType;\r\n\t\tif( t===undefined)\r\n\t\t\treturn;\r\n\t\tif( t===SmeEUSupportType.EU)\r\n\t\t\treturn EUType.EUStd;\r\n\t\tif( t===SmeEUSupportType.EUNAT)\r\n\t\t\treturn EUType.EUStdOchNationelltStd;\r\n\t\tif( t===SmeEUSupportType.EUNAT_NOMILK)\r\n\t\t\treturn EUType.EUStdOchNationelltStdUtanMjlk;\r\n\t\tif( t===SmeEUSupportType.NAT_NOMILK)\r\n\t\t\treturn EUType.NationellStdUtanMjlk;\r\n\t}\r\n\tstatic toLpoCollaterals(c: Case, collaterals: Collateral[] | undefined): CollateralType[] | undefined {\r\n\t\tif( !collaterals) return;\r\n\t\treturn collaterals.map(x => {\r\n\t\t\treturn this.toLpoCollateral(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoCollateral(c: Case, x: Collateral): CollateralType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tcustomerId: x.customerId,\r\n\t\t\t//typeOfCollateral: x.t;\r\n\t\t\tcollateralId: x.id,\r\n\t\t\tcollateralCode: x.code,\r\n\t\t\tcollateralName: x.name,\r\n\t\t\ttaxedOwners: this.toLpoTaxedOwners(x.taxedOwners),\r\n\t\t\tcollateralMunicipality: x.municipality,\r\n\t\t\tcollateralStreet: x.street,\r\n\t\t\tcollateralAreal: x.areal,\r\n\t\t\t//collateralAge: x.age, // NOT IN USE.\r\n\t\t\tuseAsCollateral: x.useAsCollateral,\r\n\t\t\tbuyCollateral: x.buyCollateral\r\n\t\t}\r\n\t}\r\n\tstatic toLpoTaxedOwners(taxedOwners: TaxedOwner[] | undefined): TaxedOwnerType[] | undefined {\r\n\t\tif( !taxedOwners) return;\r\n\t\treturn taxedOwners.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\ttaxedOwnerId: x.id,\r\n\t\t\t\ttaxedOwner: x.customerId\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toLpoHouseholds(c: Case, households: Household[] | undefined): HouseholdType[] | undefined {\r\n\t\tif( !households ) return;\r\n\t\treturn households.map(x=>{\r\n\t\t\treturn this.toLpoHousehold(c, x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoHousehold(c: Case, x: Household):HouseholdType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\thouseholdId: c.id,\r\n\t\t\thouseholdMembers: this.toLpoHouseholdMembers(c, x.members),\r\n\t\t\tnumberOfChildsAtHome: x.numberOfChildrenAtHome,\r\n\t\t\tchilds: this.toLpoChildren(x.children),\r\n\t\t\tnumberOfCars: x.numberOfCars,\r\n\t\t\tchildMaintenaceCost: x.childMaintenanceCost,\r\n\t\t\treceiveChildMaintenanceCost: x.childMaintenanceIncome,\r\n\t\t\tchildCareAmount: x.childCareAmount\r\n\t\t}\r\n\t}\r\n\tstatic toLpoHouseholdMembers(c:Case, members: HouseholdMember[]|undefined): HouseholdMemberType[] | undefined {\r\n\t\tif( !members ) return;\r\n\t\treturn members.map(x => {\r\n\t\t\treturn this.toLpoHouseholdMember(x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoHouseholdMember(x: HouseholdMember): HouseholdMemberType {\r\n\t\treturn {\r\n\t\t\thouseholdMember: x.householdMember\r\n\t\t}\r\n\t}\r\n\tstatic toLpoChildren(children: Child[] | undefined): ChildType[] | undefined {\r\n\t\tif( !children ) return;\r\n\t\treturn children.map(x => {\r\n\t\t\treturn this.toLpoChild(x);\r\n\t\t})\r\n\t}\r\n\tstatic toLpoChild(x: Child): ChildType {\r\n\t\treturn {\r\n\t\t\tchildId: x.id,\r\n\t\t\tchildsAge: x.childsAge,\r\n\t\t\tpartInHousehold: x.partInHousehold\r\n\t\t}\r\n\t}\r\n\tstatic toLpoExtLoans(c:Case, extLoans:ExtLoan[] | undefined): ExtLoanType[] | undefined {\r\n\t\tif( !extLoans) return;\r\n\t\treturn extLoans.map(x => {\r\n\t\t\treturn this.toLpoExtLoan(c, x);\r\n\t\t});\r\n\t}\r\n\tstatic toLpoExtLoan(c:Case, x:ExtLoan) : ExtLoanType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\textloanId: x.id,\r\n\t\t\ttypeOfLoan: x.type,\r\n\t\t\textLoanOwners: this.toExtLoanOwnersCustomerIds(x.loanOwners),\r\n\t\t\textCreditInstitute: x.creditInstitute,\r\n\t\t\textloanClearing: x.loanClearing,\r\n\t\t\textloanNumber: x.loanNumber,\r\n\t\t\textloanAmount: x.amount,\r\n\t\t\textRedeemLoan: x.redeemLoan,\r\n\t\t\textMonthlyCost: x.monthlyCost\r\n\t\t}\r\n\t}\r\n\tstatic toExtLoanOwnersCustomerIds(loanOwners: ExtLoanOwner[] | undefined): string[] | undefined {\r\n\t\tif( !loanOwners) return;\r\n\t\treturn loanOwners.map(x=>{ return x.customerId});\r\n\t}\r\n\tstatic toLpoProcess(c: Case): ProcessType {\r\n\t\treturn {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tcustomers: c.customers, // DIRECT COPY.\r\n\t\t\treferenceId: c.number,\r\n\t\t\tprocessVersion: c.version,\r\n\t\t\tcaseId: c.lpCaseId,\r\n\t\t\tcaseIdStatus: c.status,\r\n\t\t\tprocessCreatedDate: this.toDateString(c.createdDate),\r\n\t\t\tlastAccessed: this.toDateString(c.lastAccessedDate)\r\n\t\t}\r\n\t}\r\n\tstatic toDateString(date: Date): string {\r\n\t\tif( !date || (date as any)==='' ) return '';\r\n\t\treturn date.toISOString();\r\n\t}\r\n\tstatic toLpoCompanies(c: Case, companies: Company[] | undefined): CompanyType[] | undefined {\r\n\t\tif( !companies )\r\n\t\t\treturn;\r\n\t\tlet result = companies.map(co => {\r\n\t\t\tlet company:CompanyType = {\r\n\t\t\t\tprocessId: c.id,\r\n\t\t\t\tcompanyId: co.id,\r\n\t\t\t\torgNumber: co.orgNumber,\r\n\t\t\t\tcompanyName: co.name,\r\n\t\t\t\tstatusCode: co.statusCode,\r\n\t\t\t\t//statusTextHigh: co.statusTextHigh,\r\n\t\t\t\tcreated: this.toYYYY_MM_DD(co.created),\r\n\t\t\t\tbusinessFocuses: this.toLpoBusinessCategories(co.businessFocuses), // DIRECT COPY.\r\n\t\t\t\tindustriCode: co.industriCode,\r\n\t\t\t\tindustriText: co.industriText,\r\n\t\t\t\tleagalGroupCode: co.legalGroupCode,\r\n\t\t\t\tlegalGroupText: co.legalGroupText,\r\n\t\t\t\tbrokenFiscalYear: co.brokenFiscalYear,\r\n\t\t\t\tfiscalYearEndDate: co.fiscalYearEndDate,\r\n\t\t\t\tprincipals: this.toLpoPrincipals(co.principals)\r\n\r\n\t\t\t\t//streetAddress: co.streetAddress,\r\n\t\t\t\t//postalAddress: co.postalAddress,\r\n\t\t\t\t//postalCode: co.postalCode,\r\n\t\t\t\t//selectedCompany: co.selectedCompany,\r\n\t\t\t}\r\n\t\t\treturn company;\r\n\t\t})\r\n\t\treturn result;\r\n\t}\r\n\tstatic toYYYY_MM_DD(d:Date|undefined):string|undefined {\r\n\t\tif( !d )\r\n\t\t\treturn;\r\n\r\n\t\treturn new Date(d.getTime() - (d.getTimezoneOffset() * 60000 ))\r\n\t\t\t.toISOString()\r\n\t\t\t.split(\"T\")[0];\r\n\t}\r\n\t\r\n\tstatic toLpoPrincipals(principals: Principal[] | undefined): PrincipalType[] | undefined {\r\n\t\tif( !principals ) return;\r\n\t\treturn principals.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tprincipalName: x.name,\r\n\t\t\t\tcustomerId: x.customerId\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\tstatic toLpoBusinessCategories(businessFocuses: BusinessCategory[] | undefined): BusinessCategoryType[] | undefined {\r\n\t\tif( !businessFocuses) return;\r\n\t\treturn businessFocuses.map(x => {\r\n\t\t\treturn {\r\n\t\t\t\tbusinessId: x.id,\r\n\t\t\t\tbusinessCategory:x.businessCategoryCode,\r\n\t\t\t\tbusinessPart: x.businessPart,\r\n\t\t\t\tmainBusiness: x.mainDirection \r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\tstatic toLpoLoans(c:Case, loan: Loan | undefined):LoanType[]|undefined {\r\n\t\tif( !loan )\r\n\t\t\treturn;\r\n\t\tlet result:LoanType = {\r\n\t\t\tprocessId: c.id,\r\n\t\t\tloanId: loan.id,\r\n\t\t\tloanNumber: loan.number,\r\n\t\t\tloanTakeOver: loan.takeOver, // obsolete.\r\n\t\t\t//purposeOfLoan: loan.purposeOfLoan, // not in use.\r\n\t\t\tloanAmount: loan.amount, // obsolete.\r\n\t\t\tdownPaymentAmount: loan.downPaymentAmount,\r\n\t\t\tdownPaymentOther: loan.downpaymentOther,\r\n\t\t\taims: this.toLpoAims(loan.aims),\r\n\t\t\ttakeoverloans: this.toLpoTakeoverLoans(loan.takeoverLoans), // TODO.\r\n\t\t\tdownPaymentType: this.toLpoDownpaymentType(loan.downpaymentType),\r\n\t\t\tpurposeDescription: loan.purposeDescription,\r\n\t\t}\r\n\t\treturn [result];\r\n\t}\r\n\tstatic toLpoDownpaymentType(downpaymentType: DownpaymentSource | undefined): DownPaymentType | undefined {\r\n\t\tconst d = downpaymentType;\r\n\t\tif( d===DownpaymentSource.BLANCO_LOAN )\r\n\t\t\treturn DownPaymentType.Blanco;\r\n\t\telse if( d===DownpaymentSource.OTHER )\r\n\t\t\treturn DownPaymentType.Vrigt;\r\n\t\telse if( d===DownpaymentSource.SALE_OF_PROPERTY )\r\n\t\t\treturn DownPaymentType.FrsljningBostad;\r\n\t\telse if( d===DownpaymentSource.SAVINGS )\r\n\t\t\treturn DownPaymentType.Sparande;\r\n\t\telse \r\n\t\t\treturn;\r\n\t}\r\n\tstatic toLpoAims(aims: Aim[] | undefined): AimType[] | undefined {\r\n\t\tif( !aims )\r\n\t\t\treturn;\r\n\t\tconst result:AimType[] = aims.map(aim => {\r\n\t\t\tconst purposeText = aim.aimCategory;\r\n\t\t\tconst aimText = aim.aimDetail;\r\n\r\n\t\t\tconst a:AimType = {\r\n\t\t\t\taimId: aim.id, \r\n\t\t\t\tpurposeText: purposeText,\r\n\t\t\t\taimText: aimText, \r\n\t\t\t\tloanAmountPart: aim.loanAmountPart\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t})\r\n\t\treturn result;\r\n\t}\r\n\t\r\n\tstatic toLpoTakeoverLoansType(takeoverLoans: TakeoverLoan[] | undefined): TakeoverLoansType | undefined {\r\n\t\tif( !takeoverLoans )\r\n\t\t\treturn undefined;\r\n\t\telse {\r\n\t\t\tconst tolst:TakeoverLoansType = {\r\n\t\t\t\ttakeoverloans: this.toLpoTakeoverLoans(takeoverLoans)\r\n\t\t\t};\r\n\t\t\treturn tolst;\r\n\t\t}\r\n\t}\r\n\tstatic toLpoTakeoverLoans(takeoverLoans: TakeoverLoan[] | undefined): TakeoverLoanType[] | undefined {\r\n\t\tif( !takeoverLoans )\r\n\t\t\treturn;\r\n\t\tconst result:TakeoverLoanType[] = takeoverLoans.map(x => {\r\n\t\t\tconst purposeText = x.aimCategory;\r\n\t\t\tconst aimText = x.aimDetail;\r\n\r\n\t\t\tconst a:TakeoverLoanType = {\r\n\t\t\t\ttakeoverLoanId: x.id, \r\n\t\t\t\tpurposeText: purposeText,\r\n\t\t\t\taimText: aimText, \r\n\t\t\t\tdebtAmount: x.debtAmount,\r\n\t\t\t\tcreditInstitute: x.creditInstitute,\r\n\t\t\t\tloanNumber: x.loanNumber,\r\n\t\t\t\t//interest: x.interest,\r\n\t\t\t\t//period: x.period\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t})\r\n\t\treturn result;\r\n\t}\r\n\tstatic toLpoApplicants(c:Case, applicants: Applicant[] | undefined) : ApplicantType[]|undefined {\r\n\t\tif( !applicants )\r\n\t\t\treturn;\r\n\t\treturn applicants.map(a => {\r\n\t\t\tlet name = (a.firstName||'') + ' ' + (a.lastName||'');\r\n\t\t\tname = name.trim();\r\n\r\n\t\t\tconst at:ApplicantType = {\r\n\t\t\t\tapplicantId: a.id,\r\n\t\t\t\tprocessId: c.id,\r\n\t\t\t\tcustomerId: a.customerId,\r\n\t\t\t\tapplicantName: name,\r\n\t\t\t\tapplicantAddress: a.streetAddress,\r\n\t\t\t\tapplicantPostAddress: a.postalAddress,\r\n\t\t\t\tstakeholderType: a.stakeholderType,\r\n\t\t\t\tcontactInformation: {\r\n\t\t\t\t\tapplicanteMail: a.email,\r\n\t\t\t\t\tapplicantMobileNumber: a.mobilePhone,\r\n\t\t\t\t},\r\n\t\t\t\tapplicantBySms: a.notifyByMobilePhone,\r\n\t\t\t\tapplicantByeMail: a.notifyByEmail,\r\n\t\t\t\tapplicantCollateralToBuy: a.willBuyAgriForestryProperty\r\n\t\t\t}\r\n\t\t\treturn at;\r\n\t\t})\r\n\t}\r\n}","import { BaseService } from './BaseService';\r\nimport { Case, KYC, Household, AttachmentRequest, Attachment, Collateral } from '../models/SelmaModels';\r\nimport { Applicant } from \"../models/selmamodels/Applicant\";\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { IdService } from './IdService';\r\nimport { Company } from '../models/selmamodels/Company';\r\nimport { LpoModelConverter } from '../models/LpoModelConverter';\r\nimport { ConfigurationService } from './ConfigurationService';\r\nimport { StakeholderType, CustomerIdType } from '../libs/SMELPOClient';\r\nimport { CompanyService } from './CompanyService';\r\nimport { SearchApplicantResult } from '../models/extendedlpo/ApplicantSearch';\r\nimport { HouseholdService } from './HouseholdService';\r\nexport interface SearchForApplicantResult {\r\n\tapplicant?: Applicant;\r\n\tcompanies?: Company[];\r\n\ttooManyRequests: boolean\r\n}\r\n\r\nexport class ApplicantService extends BaseService {\r\n\r\n\tcompanyService?: CompanyService;\r\n\thouseholdService?: HouseholdService;\r\n\r\n\tconstructor(private stateService: StateService, private smelpoService: SMELPOService,\r\n\t\tprivate guardService: GuardService, private idService: IdService,\r\n\t\tprivate configurationService: ConfigurationService) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tupdate(obj: Applicant | KYC | Case): void {\r\n\t\tthis.stateService.update(obj);\r\n\t}\r\n\r\n\r\n\tnewApplicant(c: Case, ssn: string): Applicant {\r\n\t\tlet applicant: Applicant = {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t\tcustomerId: ssn,\r\n\t\t};\r\n\t\treturn applicant;\r\n\t}\r\n\r\n\tnewKyc(): KYC {\r\n\t\treturn {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t\tapprovedCreditCheck: false,\r\n\t\t\tapprovedInfoHandling: false,\r\n\t\t\tapprovedInfoSharing: false\r\n\t\t}\r\n\t}\r\n\r\n\tensureKyc(applicant: Applicant): KYC {\r\n\t\tif (applicant.kyc) {\r\n\t\t\treturn applicant.kyc;\r\n\t\t} else {\r\n\t\t\tconst kyc = this.newKyc();\r\n\t\t\tapplicant.kyc = kyc;\r\n\t\t\tthis.update(applicant);\r\n\t\t\treturn kyc;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\taddApplicant(c: Case, applicant: Applicant): Applicant {\r\n\t\tif (!c.applicants) {\r\n\t\t\tc.applicants = [applicant];\r\n\t\t\tthis.ensureCustomer(c, applicant.customerId);\r\n\t\t\tthis.afterApplicantChange(c);\r\n\t\t\tthis.update(c);\r\n\t\t\treturn applicant;\r\n\t\t} else {\r\n\t\t\tthis.ensureCustomer(c, applicant.customerId);\r\n\t\t\tlet existingApplicant = this.getApplicantBySsn(c, applicant.customerId);\r\n\t\t\tif (existingApplicant) {\r\n\t\t\t\treturn existingApplicant;\r\n\t\t\t} else {\r\n\t\t\t\tc.applicants.push(applicant);\r\n\t\t\t\tthis.afterApplicantChange(c);\r\n\t\t\t\tthis.update(c);\r\n\t\t\t\treturn applicant;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetCustomer(c: Case, customerId: string): CustomerIdType | undefined {\r\n\t\tif (!c.customers)\r\n\t\t\treturn;\r\n\t\tlet r = c.customers.find(x => { return this.guardService.compareCustomerId(x.customerId || '', customerId) });\r\n\t\treturn r;\r\n\t}\r\n\r\n\tensureCustomer(c: Case, customerId: string): void {\r\n\t\tif (!c.customers)\r\n\t\t\tc.customers = [];\r\n\t\tlet customer = this.getCustomer(c, customerId);\r\n\t\tif (!customer) {\r\n\t\t\tc.customers.push({\r\n\t\t\t\tcustomerId: customerId,\r\n\t\t\t\tcustomerAdded: new Date().toUTCString()\r\n\t\t\t});\r\n\t\t\tthis.update(c);\r\n\t\t}\r\n\t}\r\n\r\n\tremoveCustomer(c: Case, customerId: string): void {\r\n\t\tlet customer = this.getCustomer(c, customerId);\r\n\t\tif (customer) {\r\n\t\t\tthis.stateService.listRemove(c.customers, customer);\r\n\t\t}\r\n\t}\r\n\r\n\thasApplicants(c: Case): boolean {\r\n\t\tif (c.applicants && c.applicants.length > 0)\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetApplicants(c: Case): Applicant[] {\r\n\t\tif (!c.applicants)\r\n\t\t\treturn [];\r\n\t\treturn c.applicants;\r\n\t}\r\n\r\n\tgetPhysicumApplicants(c: Case): Applicant[] {\r\n\t\tlet applicants = this.getApplicants(c);\r\n\t\tif (applicants.length === 0)\r\n\t\t\treturn applicants;\r\n\r\n\t\tlet r = applicants.filter(x => {\r\n\t\t\tlet isPP = this.isPhysicum(c, x);\r\n\t\t\treturn isPP;\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\tsetWillBuyAgriForestryProperty(c: Case, applicant: Applicant, checked: boolean) {\r\n\t\tif (applicant.willBuyAgriForestryProperty === checked)\r\n\t\t\treturn;\r\n\r\n\t\tapplicant.willBuyAgriForestryProperty = checked;\r\n\r\n\t\tif (checked) {\r\n\t\t\t// Remove current selected company, if any.\r\n\t\t\tconst companyService = this.companyService;\r\n\t\t\tif (companyService) {\r\n\t\t\t\tconst company = companyService.getApplicantCompany(c, applicant);\r\n\t\t\t\tif (company) {\r\n\t\t\t\t\tcompanyService.removeCompany(c, company);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.afterApplicantChange(c);\r\n\t\tthis.update(applicant);\r\n\t}\r\n\r\n\tvalidateMyApplicantKycApproval(c: Case): ValidationResult {\r\n\t\tlet myApplicant = this.getMyApplicant(c);\r\n\t\treturn this.validateApplicantKycApproval(myApplicant);\r\n\t}\r\n\tvalidateApplicantKycApproval(applicant: Applicant): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({ validator: this.hasKycApprovedCreditCheck, object: applicant, ok: this.hasKycApprovedCreditCheck(applicant) });\r\n\t\tvr.add({ validator: this.hasKycApprovedInfoHandling, object: applicant, ok: this.hasKycApprovedInfoHandling(applicant) });\r\n\t\tvr.add({ validator: this.hasKycApprovedInfoSharing, object: applicant, ok: this.hasKycApprovedInfoSharing(applicant) });\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasKycApprovedCreditCheck(applicant: Applicant): boolean {\r\n\t\treturn applicant && applicant.kyc && applicant.kyc.approvedCreditCheck ? true : false;\r\n\t}\r\n\thasKycApprovedInfoHandling(applicant: Applicant): boolean {\r\n\t\treturn applicant && applicant.kyc && applicant.kyc.approvedInfoHandling ? true : false;\r\n\t}\r\n\thasKycApprovedInfoSharing(applicant: Applicant): boolean {\r\n\t\treturn applicant && applicant.kyc && applicant.kyc.approvedInfoSharing ? true : false;\r\n\t}\r\n\r\n\tmyApplicantHasGivenFullApproval(c: Case): boolean {\r\n\t\tlet applicant = this.getMyApplicant(c);\r\n\t\tif (!applicant || !applicant.kyc)\r\n\t\t\treturn false;\r\n\r\n\t\treturn this.applicantHasGivenFullApproval(applicant);\r\n\t}\r\n\r\n\tapplicantHasGivenFullApproval(applicant: Applicant): boolean {\r\n\t\tlet kyc = applicant.kyc;\r\n\t\tif (!kyc)\r\n\t\t\treturn false;\r\n\t\treturn kyc.approvedCreditCheck === true\r\n\t\t\t&& kyc.approvedInfoHandling === true\r\n\t\t\t&& kyc.approvedInfoSharing === true;\r\n\t}\r\n\r\n\tallApplicantsHaveGivenFullApproval(c: Case): boolean {\r\n\t\tif (!c.applicants) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfor (let applicant of c.applicants) {\r\n\t\t\tif (applicant && !this.applicantHasGivenFullApproval(applicant)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tgetApplicantByCustomerId(c: Case, customerId: string): Applicant | undefined {\r\n\t\tif (!c.applicants)\r\n\t\t\treturn;\r\n\r\n\t\tlet applicants = c.applicants.filter(x => x.customerId === customerId);\r\n\t\tif (applicants && applicants.length === 1)\r\n\t\t\treturn applicants[0];\r\n\t\telse\r\n\t\t\treturn;\r\n\t}\r\n\r\n\tgetApplicantBySsn(c: Case, ssn: string): Applicant | undefined {\r\n\t\tif (!c.applicants)\r\n\t\t\treturn;\r\n\t\tconst g = this.guardService;\r\n\t\tlet applicants = c.applicants.filter(x => x.customerId && g.compareSsn(x.customerId, ssn))\r\n\t\tif (applicants && applicants.length === 1)\r\n\t\t\treturn applicants[0];\r\n\t\telse\r\n\t\t\treturn;\r\n\t}\r\n\r\n\tgetMyApplicant(c: Case): Applicant {\r\n\t\tif (!c.applicants)\r\n\t\t\tthrow new Error(\"No applicants on case.\");\r\n\r\n\t\tif (!this.stateService.state.session || !this.stateService.state.session.login)\r\n\t\t\tthrow new Error(\"No session and login.\");\r\n\r\n\t\tlet login = this.stateService.state.session.login;\r\n\t\tlet applicant = this.getApplicantBySsn(c, login.ssn);\r\n\t\tif (!applicant)\r\n\t\t\tthrow new Error(\"No my applicant.\");\r\n\t\treturn applicant;\r\n\t}\r\n\r\n\tgetMainApplicant(c: Case): Applicant {\r\n\t\tif (!c.applicants)\r\n\t\t\tthrow new Error(\"No main applicant on case (no applicants).\");\r\n\r\n\t\tif (c.applicants.length === 1)\r\n\t\t\treturn c.applicants[0];\r\n\r\n\t\tlet customer: CustomerIdType | undefined;\r\n\r\n\t\tc.customers.forEach(x => {\r\n\t\t\tif (!customer)\r\n\t\t\t\tcustomer = x;\r\n\t\t\telse if (x.customerAdded && customer.customerAdded\r\n\t\t\t\t&& x.customerAdded < customer.customerAdded) {\r\n\t\t\t\tcustomer = x;\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tlet applicant = customer && customer.customerId\r\n\t\t\t? this.getApplicantBySsn(c, customer.customerId) : undefined;\r\n\r\n\t\tif (!applicant)\r\n\t\t\tthrow new Error(\"No main applicant on case.\");\r\n\r\n\t\treturn applicant;\r\n\t}\r\n\r\n\r\n\tremoveApplicant = (c: Case, applicant: Applicant): void => {\r\n\t\tif (!c.applicants)\r\n\t\t\treturn;\r\n\r\n\t\tconst g = this.guardService;\r\n\t\tthis.stateService.listRemove(c.applicants, applicant);\r\n\r\n\t\tthis.removeCustomer(c, applicant.customerId);\r\n\r\n\t\t// Remove applicant from households.\r\n\t\tif (c.households) {\r\n\t\t\tlet householdsToRemove: Household[] = [];\r\n\t\t\tc.households.forEach(hh => {\r\n\t\t\t\tif (hh.members) {\r\n\t\t\t\t\tlet member = hh.members.find(x => { return g.compareCustomerId(x.householdMember || '', applicant.customerId); });\r\n\t\t\t\t\tif (member) {\r\n\t\t\t\t\t\tthis.stateService.listRemove(hh.members, member);\r\n\t\t\t\t\t\tif (hh.members.length === 0) {\r\n\t\t\t\t\t\t\thouseholdsToRemove.push(hh); // household lost its only member.\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\t// Remove households that lost their last member.\r\n\t\t\thouseholdsToRemove.forEach(x => {\r\n\t\t\t\tif (this.householdService)\r\n\t\t\t\t\tthis.householdService.removeHousehold(c, x);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Remove applicant from extloans.\r\n\t\tif (c.extLoans) {\r\n\t\t\tc.extLoans.forEach(x => {\r\n\t\t\t\tif (x.loanOwners) {\r\n\t\t\t\t\tlet loanOwner = x.loanOwners.find(o => { return g.compareCustomerId(o.customerId, applicant.customerId); });\r\n\t\t\t\t\tif (loanOwner) {\r\n\t\t\t\t\t\tthis.stateService.listRemove(x.loanOwners, loanOwner);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\t// Remove applicant from maintenance cost/house.\r\n\t\tif (c.maintenanceCosts) {\r\n\t\t\tc.maintenanceCosts.forEach(x => {\r\n\t\t\t\tif (x.typeofhouses) {\r\n\t\t\t\t\tx.typeofhouses.forEach(h => {\r\n\t\t\t\t\t\tif (h.loanOwners) {\r\n\t\t\t\t\t\t\tlet loanOwner = h.loanOwners.find(o => { return g.compareCustomerId(o.customerId, applicant.customerId); });\r\n\t\t\t\t\t\t\tif (loanOwner) {\r\n\t\t\t\t\t\t\t\tthis.stateService.listRemove(h.loanOwners, loanOwner);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\t// Remove attachments.\r\n\t\tif (c.attachments) {\r\n\t\t\tlet remove: Attachment[] = [];\r\n\t\t\tc.attachments.forEach(x => {\r\n\t\t\t\tif (x.customerId && g.compareCustomerId(x.customerId, applicant.customerId)) {\r\n\t\t\t\t\tremove.push(x);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\tremove.forEach(x => {\r\n\t\t\t\tif (c.attachments)\r\n\t\t\t\t\tthis.stateService.listRemove(c.attachments, x);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Remove attachment requests.\r\n\t\tif (c.attachmentRequests) {\r\n\t\t\tlet remove: AttachmentRequest[] = [];\r\n\t\t\tc.attachmentRequests.forEach(x => {\r\n\t\t\t\tif (x.customerId && g.compareCustomerId(x.customerId, applicant.customerId)) {\r\n\t\t\t\t\tremove.push(x);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\tremove.forEach(x => {\r\n\t\t\t\tif (c.attachmentRequests)\r\n\t\t\t\t\tthis.stateService.listRemove(c.attachmentRequests, x);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Remove collateral estate of applicant.\r\n\t\tif (c.collaterals) {\r\n\t\t\tlet remove: Collateral[] = [];\r\n\t\t\tc.collaterals.forEach(x => {\r\n\t\t\t\tif (x.customerId && g.compareCustomerId(x.customerId, applicant.customerId)) {\r\n\t\t\t\t\tremove.push(x);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tremove.forEach(x => {\r\n\t\t\t\tif (c.collaterals)\r\n\t\t\t\t\tthis.stateService.listRemove(c.collaterals, x);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Remove company connected to applicant, and all its related data.\r\n\t\tif (this.companyService) {\r\n\t\t\tlet company = this.companyService.getApplicantCompany(c, applicant);\r\n\t\t\tif (company) {\r\n\t\t\t\tthis.companyService.removeCompany(c, company);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.afterApplicantChange(c);\r\n\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\t// Perform changes after set of applicants changed.\r\n\tprivate afterApplicantChange(c: Case): void {\r\n\t\tconst householdService = this.householdService;\r\n\t\tif (householdService) {\r\n\t\t\tconst shouldHaveHouseholds = householdService.shouldHaveHouseholds(c);\r\n\t\t\tif (shouldHaveHouseholds)\r\n\t\t\t\thouseholdService.ensureHouseholds(c);\r\n\t\t\telse {\r\n\t\t\t\thouseholdService.removeAllHouseholds(c);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcanRemoveApplicant(c: Case, applicant: Applicant) {\r\n\t\tconst myApplicant = this.getMyApplicant(c);\r\n\t\tconst mainApplicant = this.getMainApplicant(c);\r\n\t\tconst isMe = applicant === myApplicant;\r\n\t\tconst isMain = applicant === mainApplicant;\r\n\t\tconst canNotDelete = isMe || isMain || !c.applicants || c.applicants.length <= 1;\r\n\t\tconst canDelete = !canNotDelete;\r\n\t\treturn canDelete;\r\n\t}\r\n\r\n\r\n\tgetFullName(c: Case, applicant: Applicant): string {\r\n\t\tif (this.companyService) {\r\n\t\t\tconst company = this.companyService.getApplicantCompany(c, applicant);\r\n\t\t\tif (company) {\r\n\t\t\t\treturn this.companyService.getDisplayName(company)\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.getPersonFullName(applicant);\r\n\t}\r\n\r\n\tgetPersonFullName(applicant: Applicant): string {\r\n\t\tlet name = applicant.firstName;\r\n\t\tif (!name || name.length === 0)\r\n\t\t\tname = applicant.lastName;\r\n\t\telse if (applicant.lastName && applicant.lastName.length > 0)\r\n\t\t\tname = name + \" \" + applicant.lastName;\r\n\t\tif (!name)\r\n\t\t\tname = \"\";\r\n\t\treturn name;\r\n\t}\r\n\r\n\tvalidateApplicant(applicant: Applicant): ValidationResult {\r\n\t\tconst g = this.guardService;\r\n\t\tlet vf = this.validateApplicant;\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({ validator: vf, ok: g.hasValue(applicant.customerId) });\r\n\t\tvr.add({ validator: vf, ok: g.hasValue(applicant.firstName) });\r\n\t\tvr.add({ validator: vf, ok: g.hasValue(applicant.lastName) });\r\n\t\treturn vr;\r\n\t}\r\n\r\n\r\n\r\n\tvalidateApplicantContact(applicant: Applicant): ValidationResult {\r\n\r\n\t\t// TODO: Only if applicant is P or EF, not AB.\r\n\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({ validator: this.hasValidEmail, object: applicant, ok: this.hasValidEmail(applicant) });\r\n\t\tvr.add({ validator: this.hasMatchingConfirmEmail, object: applicant, ok: this.hasMatchingConfirmEmail(applicant) });\r\n\t\tvr.add({ validator: this.hasValidMobilePhone, object: applicant, ok: this.hasValidMobilePhone(applicant) });\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasValidEmail(applicant: Applicant): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn applicant.email && g.isValidEmail(applicant.email) ? true : false;\r\n\t}\r\n\r\n\thasMatchingConfirmEmail(applicant: Applicant): boolean {\r\n\t\tif (!applicant.email && !applicant.emailConfirm)\r\n\t\t\treturn true;\r\n\r\n\t\tlet a = applicant.email || '';\r\n\t\tlet b = applicant.emailConfirm || '';\r\n\r\n\t\treturn a.toLowerCase() === b.toLowerCase();\r\n\t}\r\n\r\n\thasValidMobilePhone(applicant: Applicant): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn applicant.mobilePhone && g.isValidMobileNumber(applicant.mobilePhone) ? true : false;\r\n\t}\r\n\r\n\treformatMobilePhone(applicant: Applicant):void {\r\n\t\tconst numericMobilePhone = applicant.mobilePhone?.replace(/\\D/g, '') ?? '';\r\n\r\n\t\tif (numericMobilePhone.length === 10) {\r\n\t\t\tapplicant.mobilePhone = numericMobilePhone.slice(0, 3) + '-' + numericMobilePhone.slice(3);\r\n\t\t\tthis.update(applicant);\r\n\t\t}\r\n\t}\r\n\r\n\tvalidateApplicantPep(applicant: Applicant): ValidationResult {\r\n\t\t// TODO: Only if applicant is P or EF, not AB.\r\n\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({ validator: this.hasKycPep, object: applicant, ok: this.hasKycPep(applicant) });\r\n\t\tvr.add({ validator: this.hasKycPepRelated, object: applicant, ok: this.hasKycPepRelated(applicant) });\r\n\t\tvr.add({ validator: this.hasKycAmericanCitizen, object: applicant, ok: this.hasKycAmericanCitizen(applicant) });\r\n\t\tvr.add({ validator: this.hasKycCrsTaxObligation, object: applicant, ok: this.hasKycCrsTaxObligation(applicant) });\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasKycPep(applicant: Applicant): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn applicant.kyc && g.hasValue(applicant.kyc.isPep) ? true : false\r\n\t}\r\n\r\n\thasKycPepRelated(applicant: Applicant): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn applicant.kyc && g.hasValue(applicant.kyc.isPepRelated) ? true : false\r\n\t}\r\n\r\n\thasKycAmericanCitizen(applicant: Applicant): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn applicant.kyc && g.hasValue(applicant.kyc.isAmericanCitizen) ? true : false\r\n\t}\r\n\r\n\thasKycCrsTaxObligation(applicant: Applicant): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn applicant.kyc && g.hasValue(applicant.kyc.isCrsTaxObligated) ? true : false\r\n\t}\r\n\r\n\thasSelectedHighRiskCategory(applicant: Applicant): boolean {\r\n\t\treturn applicant &&\r\n\t\t\tapplicant.kyc !== undefined &&\r\n\t\t\tthis.guardService.hasValue(applicant.kyc.highRiskCategoryCode);\r\n\t}\r\n\r\n\thasSelectedHighRiskCategoryAndItIsRisky(applicant: Applicant): boolean {\r\n\t\tlet highRiskCategoryCode = this.getHighRiskCategory(applicant);\r\n\t\treturn highRiskCategoryCode && highRiskCategoryCode !== '0' ? true : false;\r\n\t}\r\n\r\n\tgetHighRiskCategory(applicant: Applicant): string | undefined {\r\n\t\treturn applicant && applicant.kyc && applicant.kyc.highRiskCategoryCode;\r\n\t}\r\n\r\n\tvalidateHasSelectedHighRiskCategory(applicant: Applicant): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({ validator: this.hasSelectedHighRiskCategory, object: applicant, ok: this.hasSelectedHighRiskCategory(applicant) });\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tclearHighRiskCategory(applicant: Applicant): void {\r\n\t\tif (applicant &&\r\n\t\t\tapplicant.kyc !== undefined &&\r\n\t\t\tthis.guardService.hasValue(applicant.kyc.highRiskCategoryCode)) {\r\n\t\t\tapplicant.kyc.highRiskCategoryCode = undefined;\r\n\t\t\tthis.update(applicant);\r\n\t\t\tthis.update(applicant.kyc);\r\n\t\t}\r\n\t}\r\n\r\n\tselectHighRiskCategory(applicant: Applicant, value: string) {\r\n\t\tif (!applicant.kyc)\r\n\t\t\tapplicant.kyc = this.newKyc();\r\n\t\tif (applicant.kyc) {\r\n\t\t\tapplicant.kyc.highRiskCategoryCode = value;\r\n\t\t\tthis.update(applicant);\r\n\t\t\tthis.update(applicant.kyc);\r\n\t\t}\r\n\t}\r\n\r\n\ttoSearchForApplicantResult(result: SearchApplicantResult): SearchForApplicantResult {\r\n\t\tlet r: SearchForApplicantResult = {\r\n\t\t\tapplicant: LpoModelConverter.toApplicantOrUndefined(result.applicant),\r\n\t\t\tcompanies: LpoModelConverter.toCompanies(result.companies),\r\n\t\t\ttooManyRequests: false\r\n\t\t}\r\n\t\treturn r;\r\n\t}\r\n\r\n\tsearchForApplicant(c: Case, ssnOrOrgNumber: string): Promise {\r\n\t\treturn this.smelpoService\r\n\t\t\t.searchApplicant(c.id, ssnOrOrgNumber)\r\n\t\t\t.then(result => {\r\n\t\t\t\tlet r = this.toSearchForApplicantResult(result);\r\n\t\t\t\treturn r;\r\n\t\t\t});\r\n\t}\r\n\r\n\tisPhysicum(c: Case, applicant: Applicant): boolean {\r\n\t\tlet start = applicant.customerId.substr(0, 2);\r\n\t\tlet isPhysicum = start === \"18\" || start === \"19\" || start === \"20\" || start === \"21\" || start === \"10\";\r\n\t\tif (this.companyService) {\r\n\t\t\tlet company = this.companyService.getApplicantCompany(c, applicant);\r\n\t\t\tif (company && this.companyService.isJuridicum(company)) {\r\n\t\t\t\tisPhysicum = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn isPhysicum;\r\n\t}\r\n\r\n\tisJuridicum(c: Case, applicant: Applicant): boolean {\r\n\t\treturn !this.isPhysicum(c, applicant);\r\n\t}\r\n\r\n\tisPrivatePerson(c: Case, applicant: Applicant): boolean {\r\n\t\treturn this.isPhysicum(c, applicant)\r\n\t\t\t&& !this.isPersonalCompany(c, applicant);\r\n\t}\r\n\r\n\tisPersonalCompany(c: Case, applicant: Applicant): boolean {\r\n\t\tif (this.isPhysicum(c, applicant)) {\r\n\t\t\tif (this.companyService) {\r\n\t\t\t\tlet company = this.companyService.getApplicantCompany(c, applicant);\r\n\t\t\t\tif (company && this.companyService.isPhysicum(company)) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// isCompany(c:Case, applicant: Applicant) : boolean {\r\n\t// \tlet company = this.companyService && \r\n\t// \t\tthis.companyService.getApplicantCompany(c, applicant);\r\n\t// \tif( company ) {\r\n\t// \t\treturn true;\r\n\t// \t}\r\n\t// \treturn false;\r\n\t// }\r\n\r\n\tisJuridicumCompany(c: Case, applicant: Applicant): boolean {\r\n\t\tif (!this.companyService)\r\n\t\t\treturn false;\r\n\r\n\t\tconst companyService = this.companyService;\r\n\r\n\t\tif (this.isJuridicum(c, applicant)) {\r\n\t\t\tlet company = companyService.getApplicantCompany(c, applicant);\r\n\t\t\tif (company && companyService.isJuridicum(company)) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// BUGFIX:\r\n\t\t\tif (c.companies) {\r\n\t\t\t\tlet selectedCompanies = companyService.getSelectedCompaniesInArray(c.companies, applicant);\r\n\t\t\t\tif (selectedCompanies && selectedCompanies.length > 0) {\r\n\t\t\t\t\tlet ret = selectedCompanies.filter(x => { return companyService.isJuridicum(x); });\r\n\t\t\t\t\tif (ret.length > 0)\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Case, CompanyEconomy } from '../models/SelmaModels';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { Application } from '../models/AppModels';\r\nimport { CaseIdStatus } from '../libs/SMELPOClient/models/CaseIdStatus';\r\nimport { TextService } from './TextService';\r\n\r\nexport enum CaseStep {\r\n\tCompany, // Lista företag som berörs av lånet.\r\n\tLoan, // Information om lånet som önskas.\r\n\tApplicant, // Information om sökande personer\r\n\tCollateral, // Val av säkerhet för lånet\r\n\tHousehold, // Beskriv hushållet för medsökande.\r\n\tBudget, // Beskrivning av företagets budget.\r\n\tSummary, // Sammanställning av ärendet innan det skickas in.\r\n\tDone // Ansökan inskickad.\r\n}\r\n\r\nexport interface StepDefinition {\r\n\ttype: CaseStep;\r\n\t//ordinal: number;\r\n\tnameTextKey: string;\r\n\tcanGoHome: boolean;\r\n}\r\n\r\nexport interface SaveStepResult {\r\n\tstep: StepDefinition;\r\n}\r\n\r\nconst stepDefinitions: StepDefinition[] = [\r\n\t{\r\n\t\ttype: CaseStep.Company,\r\n\t\t//ordinal: 1,\r\n\t\tnameTextKey: 'Company_Title',\r\n\t\tcanGoHome: true,\r\n\t},\r\n\t{\r\n\t\ttype: CaseStep.Loan,\r\n\t\t//ordinal: 2,\r\n\t\tnameTextKey: 'Loan_Title',\r\n\t\tcanGoHome: true,\r\n\t},\r\n\t{\r\n\t\ttype: CaseStep.Applicant,\r\n\t\t//ordinal: 3,\r\n\t\tnameTextKey: 'Applicant_Title',\r\n\t\tcanGoHome: true,\r\n\t},\r\n\t{\r\n\t\ttype: CaseStep.Collateral,\r\n\t\t//ordinal: 4,\r\n\t\tnameTextKey: 'Collateral_Title',\r\n\t\tcanGoHome: true,\r\n\t},\r\n\t{\r\n\t\ttype: CaseStep.Household,\r\n\t\t//ordinal: 5,\r\n\t\tnameTextKey: 'Household_Title',\r\n\t\tcanGoHome: true,\r\n\t},\r\n\t{\r\n\t\ttype: CaseStep.Budget,\r\n\t\t//ordinal: 6,\r\n\t\tnameTextKey: 'Budget_Title',\r\n\t\tcanGoHome: true,\r\n\t},\r\n\t{\r\n\t\ttype: CaseStep.Summary,\r\n\t\t//ordinal: 7,\r\n\t\tnameTextKey: 'Summary_Title',\r\n\t\tcanGoHome: true,\r\n\t},\r\n\t{\r\n\t\ttype: CaseStep.Done,\r\n\t\t//ordinal: 8,\r\n\t\tnameTextKey: 'Done_StepTitle',\r\n\t\tcanGoHome: false,\r\n\t}\r\n];\r\n\r\n\r\nexport class StepService extends BaseService {\r\n\tconstructor(private application: Application, private textService:TextService) {\r\n\t\tsuper(); \r\n\t}\r\n\r\n\tgetStepDefinitions(c: Case): StepDefinition[] {\r\n\t\tlet steps = stepDefinitions;\r\n\t\tif( !c.companies || c.companies.length===0 ) {\r\n\t\t\tsteps = steps.filter(x => x.type!==CaseStep.Budget);\r\n\t\t}\r\n\t\tif( !c.households || c.households.length===0 ) {\r\n\t\t\tsteps = steps.filter(x => x.type!==CaseStep.Household);\r\n\t\t}\r\n\r\n\t\tif(!this.shouldShowBudgetStep(c)) {\r\n\t\t\tsteps = steps.filter(x => x.type!==CaseStep.Budget);\r\n\t\t}\r\n\r\n\t\treturn steps;\r\n\t}\r\n\r\n\tshouldShowBudgetStep(c: Case): boolean {\r\n\t\tconst companyEconomyService = this.application.services.companyEconomyService;\r\n\t\tconst selectedCompany = this.application.services.companyService.getMySelectedCompany(c);\r\n\t\tconst selectedCompanyEconomy = companyEconomyService.getCompanyEconomy(c, selectedCompany);\r\n\r\n\t\treturn !!companyEconomyService.hasRevenue(selectedCompanyEconomy || {} as CompanyEconomy);\r\n\t}\r\n\r\n\tgetStepIndex(step: StepDefinition, c: Case): number {\r\n\t\tlet steps = this.getStepDefinitions(c);\r\n\t\tlet index = steps.indexOf(step);\r\n\t\treturn index;\r\n\t}\r\n\r\n\tgetStepOrdinal(step: StepDefinition, c: Case): number {\r\n\t\tlet index = this.getStepIndex(step, c);\r\n\t\treturn index+1;\r\n\t}\r\n\r\n\tgetStepDefinitionByType(steps: StepDefinition[], type: CaseStep): StepDefinition | undefined {\r\n\t\tvar r = steps.filter(x => { return x.type===type});\r\n\t\tif( r && r.length===1 ) return r[0]\r\n\t\telse return;\r\n\t}\r\n\r\n\tvalidateStepCompany(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\t\tconst companyService = this.application.services.companyService;\r\n\t\tconst companyEconomyService = this.application.services.companyEconomyService;\r\n\t\t//const applicantService = this.application.services.applicantService;\r\n\t\t//const caseService = this.application.services.caseService;\r\n\r\n\t\t// Must have selected company, or promise that they will buy a company.\r\n\t\tvr.add({ validator:companyService.hasSelectedCompany, ok: companyService.hasSelectedCompany(c) });\r\n\r\n\t\t// Must have selected company economy.\r\n\r\n\t\t// Must have selected HasRevenue yes/no\r\n\t\t// If hasRevenue=true\r\n\t\t// Must have selected high risk businiess\r\n\t\t// Must have all required Revenues.\r\n\t\t// All Revenues must have value zero or higher.\r\n\t\t// Must have at least one business focus.\r\n\t\t// Sum of one business focus parts (percent) must be 100.\r\n\t\t// If the maxmimum business focus part exists two or more times, mainFocus must be set on one of them.\r\n\t\t// If hasRevenue=false\r\n\t\t// Nothing.\r\n\t\tvr.addResult(companyEconomyService.validateMySelectedCompanies(c));\r\n\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateStepLoan(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\r\n\t\tconst applicantService = this.application.services.applicantService;\r\n\t\tconst loanService = this.application.services.loanService;\r\n\r\n\t\t// Validate loan and data under loan.\r\n\t\tvr.addResult(loanService.validateCaseLoan(c));\r\n\r\n\t\t// My applicant must have checked all KYC approvals.\r\n\t\tvr.addResult(applicantService.validateMyApplicantKycApproval(c));\r\n\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateStepApplicant(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\r\n\t\tconst applicantService = this.application.services.applicantService;\r\n\t\tconst myApplicantHasGivenFullApproval = applicantService.myApplicantHasGivenFullApproval(c);\r\n\t\tif( !myApplicantHasGivenFullApproval )\r\n\t\t\treturn vr;\r\n\r\n\t\tconst personalEconomyService = this.application.services.personalEconomyService;\r\n\t\tconst companyService = this.application.services.companyService;\r\n\t\tconst companyEconomyService = this.application.services.companyEconomyService;\r\n\r\n\t\tlet hasApplicants = applicantService.hasApplicants(c);\r\n\t\tvr.add({ validator: applicantService.hasApplicants, object:c, ok: hasApplicants});\r\n\t\tif( hasApplicants && c.applicants ) {\r\n\t\t\tconst myApplicant = applicantService.getMyApplicant(c);\r\n\r\n\t\t\t// For every Person applicant...\r\n\t\t\t// Must have mobile phone.\r\n\t\t\t// Must have mobile email.\r\n\t\t\t// Must have one notification type selected.\r\n\t\t\tc.applicants.forEach(applicant => {\r\n\t\t\t\tconst isMe = applicant===myApplicant;\r\n\t\t\t\tvr.addResult(applicantService.validateApplicantContact(applicant));\r\n\t\t\t\tvr.addResult(applicantService.validateApplicantKycApproval(applicant));\r\n\r\n\t\t\t\tconst isJuridicumCompany = applicantService.isJuridicumCompany(c, applicant);\r\n\r\n\t\t\t\tconst isPhysicum = !isJuridicumCompany && applicantService.isPhysicum(c, applicant);\r\n\t\t\t\tif( isPhysicum ) {\r\n\t\t\t\t\tvr.addResult(personalEconomyService.validateApplicantPersonalEconomy(c, applicant));\r\n\t\t\t\t\tvr.addResult(applicantService.validateApplicantPep(applicant));\r\n\r\n\t\t\t\t\tconst isPersonalCompany = applicantService.isPersonalCompany(c, applicant);\r\n\t\t\t\t\tif( isPersonalCompany ) {\r\n\t\t\t\t\t\tif( !isMe ) {\r\n\t\t\t\t\t\t\tconst company = companyService.getApplicantCompany(c, applicant);\r\n\t\t\t\t\t\t\tif( company ) {\r\n\t\t\t\t\t\t\t\tvr.addResult(companyEconomyService.validateCompany(c, company, applicant));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else { // Private Person.\r\n\t\t\t\t\t\t// Nothing.\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( isJuridicumCompany ) {\r\n\t\t\t\t\t\tconst company = companyService.getApplicantCompany(c, applicant);\r\n\t\t\t\t\t\tif( company ) {\r\n\t\t\t\t\t\t\tvr.addResult(companyEconomyService.validateCompany(c, company, applicant));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateStepCollateral(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\r\n\t\tconst applicantService = this.application.services.applicantService;\r\n\t\tconst myApplicantHasGivenFullApproval = applicantService.myApplicantHasGivenFullApproval(c);\r\n\t\tif( !myApplicantHasGivenFullApproval )\r\n\t\t\treturn vr;\r\n\r\n\t\tconst collateralService = this.application.services.collateralService;\r\n\r\n\t\t// Must have at least one collateral.\r\n\t\tvr.add({validator:this.validateStepCollateral, object:c, \r\n\t\t\tok: ((c.collaterals && c.collaterals.length > 0) ? true:false) \r\n\t\t\t|| ((c.euSupports && c.euSupports.length > 0) ? true:false)\r\n\t\t\t|| ((c.guarantors && c.guarantors.length > 0) ? true:false) \r\n\t\t});\r\n\r\n\t\t// For every Estate (type Collateral)...\r\n\t\t// Must have municipality\r\n\t\t// Must have house code.\r\n\t\tif( c.collaterals ) {\r\n\t\t\tc.collaterals.forEach(x => {\r\n\t\t\t\tvr.addResult(collateralService.validateCollateral(c, x));\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\t// For every EU-support ...\r\n\t\t// Must have type\r\n\t\t// Must have amount.\r\n\t\tif( c.euSupports ) {\r\n\t\t\tconst euSupportService = this.application.services.euSupportService;\r\n\t\t\tc.euSupports.forEach(x => {\r\n\t\t\t\tvr.addResult(euSupportService.validateEuSupport(c, x));\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\t// For every Guarantor ...\r\n\t\t// Must have name\r\n\t\t// Must have phone.\r\n\t\t// Must have ssn.\r\n\t\tif( c.guarantors ) {\r\n\t\t\tconst guarantorService = this.application.services.guarantorService;\r\n\t\t\tvr.addResult(guarantorService.validateGuarantors(c));\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateStepHousehold(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\r\n\t\tconst applicantService = this.application.services.applicantService;\r\n\t\tconst myApplicantHasGivenFullApproval = applicantService.myApplicantHasGivenFullApproval(c);\r\n\t\tif( !myApplicantHasGivenFullApproval )\r\n\t\t\treturn vr;\r\n\r\n\t\tconst householdService = this.application.services.householdService;\r\n\r\n\t\t// Must have at least one household.\r\n\t\tconst mustHaveHousehold = householdService.shouldHaveHouseholds(c);\r\n\t\tif( !mustHaveHousehold ) {\r\n\t\t\tvr.add({validator:this.validateStepHousehold, object:c, ok: true });\r\n\t\t}\r\n\t\telse //if( mustHaveHousehold )\r\n\t\t{\r\n\t\t\tvr.add({validator:this.validateStepHousehold, object:c, \r\n\t\t\t\tok: (c.households && c.households.length>0?true:mustHaveHousehold) \r\n\t\t\t});\r\n\r\n\t\t\t// For every Person or EF applicant...\r\n\t\t\t// Must be part of household.\r\n\r\n\t\t\t// For every Household...\r\n\t\t\t// Must have at least one member.\r\n\t\t\tif( c.households ) {\r\n\t\t\t\tc.households.forEach(x => {\r\n\t\t\t\t\tvr.addResult(householdService.validateHousehold(c, x));\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\t// For every Household...\r\n\t\t\t// Must have at least one member.\r\n\t\t\t// Must have selected child count.\r\n\t\t\t// Must have selected car count.\r\n\t\t\t// If child count > 0 ...\r\n\t\t\t// Age must be 0 or higher.\r\n\t\t\t// Partial must be selected.\r\n\r\n\t\t\t// For every Maintenance cost\r\n\t\t\t// TODO: Must be valid.\r\n\t\t\tif( c.maintenanceCosts ) {\r\n\t\t\t\tconst maintenanceCostService = this.application.services.maintenanceCostService;\r\n\t\t\t\tc.maintenanceCosts.forEach(x => {\r\n\t\t\t\t\tvr.addResult(maintenanceCostService.validateMaintenanceCost(c, x));\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\t// For every ExtLoan \r\n\t\t\t// TODO: Must be valid.\r\n\t\t\tif( c.extLoans ) {\r\n\t\t\t\tconst extLoanService = this.application.services.extLoanService;\r\n\t\t\t\tc.extLoans.forEach(x => {\r\n\t\t\t\t\tvr.addResult(extLoanService.validateExtLoan(c, x));\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateStepBudget(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\r\n\t\tconst applicantService = this.application.services.applicantService;\r\n\t\tconst myApplicantHasGivenFullApproval = applicantService.myApplicantHasGivenFullApproval(c);\r\n\t\tif( !myApplicantHasGivenFullApproval )\r\n\t\t\treturn vr;\r\n\r\n\t\t// For every required attachement request...\r\n\t\t// Must have matching attachment.\r\n\t\tconst attachmentService = this.application.services.attachmentService;\r\n\t\tvr.addResult(attachmentService.validateAttachmentRequestsByRequestType(c, \"COMPANYBUDGET\"));\r\n\r\n\t\tconst budgetService = this.application.services.budgetService;\r\n\t\tvr.addResult(budgetService.validateBudgets(c));\r\n\r\n\t\tif( vr.getItems().length===0 ) {\r\n\t\t\t// Add a single ok item if no items to signal that step is finished.\r\n\t\t\tlet v = this.validateStepBudget;\r\n\t\t\tvr.add({validator: v, object:c, ok: true});\r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateStepSummary(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\r\n\t\tconst applicantService = this.application.services.applicantService;\r\n\t\tconst myApplicantHasGivenFullApproval = applicantService.myApplicantHasGivenFullApproval(c);\r\n\t\tif( !myApplicantHasGivenFullApproval )\r\n\t\t\treturn vr;\r\n\r\n\t\tconst summaryService = this.application.services.summaryService;\r\n\t\tvr.addResult(summaryService.validateSummary(c));\r\n\r\n\t\t// Validate all previous steps.\r\n\t\tlet v = this.validateStepSummary;\r\n\t\tvr.add({validator: v, object:c, ok: this.validateStepCompany(c).ok()});\r\n\t\tvr.add({validator: v, object:c, ok: this.validateStepLoan(c).ok()});\r\n\t\tvr.add({validator: v, object:c, ok: this.validateStepApplicant(c).ok()});\r\n\t\tvr.add({validator: v, object:c, ok: this.validateStepCollateral(c).ok()});\r\n\t\tvr.add({validator: v, object:c, ok: this.validateStepHousehold(c).ok()});\r\n\r\n\t\tif (this.shouldShowBudgetStep(c)) {\r\n\t\t\tvr.add({validator: v, object:c, ok: this.validateStepBudget(c).ok()});\r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\t\r\n\tvalidateStepDone(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\r\n\t\tif( c.status===CaseIdStatus.READYFOROFFICER || c.status===CaseIdStatus.CLOSEDBYOFFICER ) {\r\n\t\t\t// Add one ok for the fact that we have reached this step.\r\n\t\t\tvr.add({ validator: this.validateStepDone, object:c, ok:true});\r\n\r\n\t\t\t// For every required attachement request...\r\n\t\t\t// Must have matching attachment.\r\n\t\t\tconst attachmentService = this.application.services.attachmentService;\r\n\t\t\tvr.addResult(attachmentService.validateAttachmentRequests(c));\r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateStep(step: StepDefinition, c: Case) : ValidationResult {\r\n\r\n\t\tif( c.status===CaseIdStatus.STARTEDBYAPPLICANT ) {\r\n\t\t\tif( step.type===CaseStep.Company) {\r\n\t\t\t\treturn this.validateStepCompany(c);\r\n\t\t\t} else if( step.type===CaseStep.Loan ) {\r\n\t\t\t\treturn this.validateStepLoan(c);\r\n\t\t\t} else if( step.type===CaseStep.Applicant ) {\r\n\t\t\t\treturn this.validateStepApplicant(c);\r\n\t\t\t} else if( step.type===CaseStep.Collateral ) {\r\n\t\t\t\treturn this.validateStepCollateral(c);\r\n\t\t\t} else if( step.type===CaseStep.Household ) {\r\n\t\t\t\treturn this.validateStepHousehold(c);\r\n\t\t\t} else if( step.type===CaseStep.Budget ) {\r\n\t\t\t\treturn this.validateStepBudget(c);\r\n\t\t\t} else if( step.type===CaseStep.Summary ) {\r\n\t\t\t\treturn this.validateStepSummary(c);\r\n\t\t\t} \r\n\t\t}\r\n\r\n\t\t// Application sent in and not last step.\r\n\t\telse if( c.status===CaseIdStatus.READYFOROFFICER || c.status===CaseIdStatus.CLOSEDBYOFFICER ) {\r\n\t\t\t\r\n\t\t\tif(step.type===CaseStep.Done) {\r\n\t\t\t\treturn this.validateStepDone(c);\r\n\t\t\t} else {\r\n\t\t\t\tvar vr = new ValidationResult();\r\n\t\t\t\tvr.add({ validator: this.validateStep, object: c, ok: true})\r\n\t\t\t\treturn vr;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// else if( c.status==CaseIdStatus.CLOSEDBYOFFICER ) {\r\n\t\t// \tvar vr = new ValidationResult();\r\n\t\t// \tvr.add({ validator: this.validateStep, object: c, ok: true})\r\n\t\t// \treturn vr;\r\n\t\t// }\r\n\t\telse if( c.status===CaseIdStatus.CLOSEDBYAPPLICANT || c.status===CaseIdStatus.CLOSEDBYTHINNING ) {\r\n\t\t\tvar vr2 = new ValidationResult();\r\n\t\t\tvr2.add({ validator: this.validateStep, object: c, ok: false})\r\n\t\t\treturn vr2;\r\n\t\t}\r\n\r\n\t\treturn new ValidationResult(); // Should never happen.\r\n\t}\r\n\r\n\tsaveStep(step: StepDefinition, c: Case) : Promise {\r\n\r\n\t\tif( step.type===CaseStep.Summary || step.type===CaseStep.Done )\r\n\t\t\treturn Promise.resolve({step: step}); // dont save these steps.\r\n\r\n\t\tconst canSaveCase = this.application.services.caseService.canSaveCase(c);\r\n\t\tif( !canSaveCase ) {\r\n\t\t\treturn Promise.resolve({step: step});\r\n\t\t}\r\n\t\t\r\n\t\treturn this.application.services.caseService\r\n\t\t.saveCase(c)\r\n\t\t.then(result => {\r\n\t\t\treturn {\r\n\t\t\t\tstep: step\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// The first step that needs more info.\r\n\tgetStartStep(c: Case): StepDefinition|undefined {\r\n\t\tconst steps = this.getStepDefinitions(c);\r\n\t\tif( c.status===CaseIdStatus.READYFOROFFICER ) {\r\n\t\t\treturn this.getStepDefinitionByType(steps, CaseStep.Done);\r\n\t\t}\r\n\t\tlet currentStep:StepDefinition|undefined;\r\n\t\tfor(let i=0; i x.companyId === companyId);\r\n\t\t\tif (ces.length === 1) companyEconomy = ces[0];\r\n\t\t}\r\n\t\treturn companyEconomy;\r\n\t}\r\n\r\n\tensureCompanyEconomy(c: Case, company: Company): CompanyEconomy {\r\n\t\tlet companyEconomy = this.getCompanyEconomyByCompanyId(c, company.id);\r\n\t\tif (!companyEconomy) {\r\n\t\t\tcompanyEconomy = this.newCompanyEconomy(c, company);\r\n\t\t\tthis.addCompanyEconomy(c, companyEconomy);\r\n\t\t}\r\n\t\treturn companyEconomy;\r\n\t}\r\n\r\n\tensureRequiredRevenueYears(companyEconomy: CompanyEconomy) {\r\n\t\tthis.getRequiredYearsOfRevenue().forEach((year) => {\r\n\t\t\tthis.ensureRevenueYear(companyEconomy, year);\r\n\t\t});\r\n\t}\r\n\r\n\tsetNoRevenueYears(companyEconomy: CompanyEconomy) {\r\n\t\tif( !companyEconomy.revenues || companyEconomy.revenues.length>0 ) {\r\n\t\t\tcompanyEconomy.revenues = [];\r\n\t\t\tthis.update(companyEconomy);\r\n\t\t}\r\n\t}\r\n\r\n\thasRevenue(companyEconomy: CompanyEconomy) : boolean|undefined {\r\n\t\tif( !companyEconomy.revenues ) {\r\n\t\t\treturn; // no array.\r\n\t\t} else if( companyEconomy.revenues.length>0 ) { // array with item(s)\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false; // Empty array.\r\n\t\t}\r\n\t}\r\n\r\n\thasRevenueSelected(companyEconomy: CompanyEconomy) : boolean {\r\n\t\tlet hasRevenue = this.hasRevenue(companyEconomy);\r\n\t\treturn this.guardService.hasValue(hasRevenue);\r\n\t}\r\n\r\n\t\r\n\tprivate ensureRevenueYear(\r\n\t\tcompanyEconomy: CompanyEconomy,\r\n\t\tyear: number\r\n\t): BudgetYear {\r\n\t\tlet revenue: Revenue | undefined;\r\n\t\tif (!companyEconomy.revenues) companyEconomy.revenues = [];\r\n\t\telse revenue = this.getRevenueByYear(companyEconomy, year);\r\n\t\tif (!revenue) {\r\n\t\t\trevenue = {\r\n\t\t\t\tyear: year,\r\n\t\t\t\trevenue: undefined\r\n\t\t\t};\r\n\t\t\tcompanyEconomy.revenues.push(revenue);\r\n\t\t\tthis.update(companyEconomy);\r\n\t\t}\r\n\t\treturn revenue;\r\n\t}\r\n\r\n\tgetRevenueByYear(companyEconomy: CompanyEconomy, year: number): Revenue | undefined {\r\n\t\tif (!companyEconomy.revenues) return;\r\n\t\tlet r = companyEconomy.revenues.filter((x) => x.year === year);\r\n\t\tif (r.length === 1) {\r\n\t\t\treturn r[0];\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tgetRequiredYearsOfRevenue(): number[] {\r\n\t\tconst thisYear = new Date().getFullYear();\r\n\t\tconst minYearsOfBudget = 2;\r\n\t\tconst firstYear = thisYear - minYearsOfBudget + 1;\r\n\t\tconst lastYear = thisYear;\r\n\r\n\t\tlet years: number[] = [];\r\n\t\tfor (let year = firstYear; year <= lastYear; year++) {\r\n\t\t\tyears.push(year);\r\n\t\t}\r\n\t\treturn years;\r\n\t}\r\n\r\n\tsetRevenueValue(\r\n\t\tcompanyEconomy: CompanyEconomy,\r\n\t\trevenue: Revenue,\r\n\t\treveneuValue: number | undefined\r\n\t) {\r\n\t\trevenue.revenue = reveneuValue;\r\n\t\tthis.update(revenue);\r\n\t\tthis.update(companyEconomy);\r\n\t}\r\n\r\n\tvalidateMySelectedCompanies(c: Case): ValidationResult {\r\n\t\tconst myApplicant = this.applicantService.getMyApplicant(c);\r\n\t\tlet companies = this.companyService.getMySelectedCompanies(c);\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif( companies && companies.length ) {\r\n\t\t\tcompanies.forEach(company => {\r\n\t\t\t\tvr.addResult(this.validateCompany(c, company, myApplicant));\r\n\t\t\t})\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateCompany(c: Case, company:Company, applicant: Applicant): ValidationResult {\r\n\t\tlet companyEconomy:CompanyEconomy|undefined;\r\n\t\tif( company ) {\r\n\t\t\tcompanyEconomy = this.getCompanyEconomy(c, company);\r\n\t\t}\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif( company && companyEconomy ) {\r\n\t\t\tvr.add({validator: this.hasRevenueSelected, object: companyEconomy, ok: this.hasRevenueSelected(companyEconomy) })\r\n\r\n\t\t\tlet hasRevenue = companyEconomy && this.hasRevenue(companyEconomy);\r\n\t\t\tif( hasRevenue===true ) {\r\n\t\t\t\tvr.addResult(this.applicantService.validateHasSelectedHighRiskCategory(applicant));\r\n\t\t\t\tvr.addResult(this.validateRequiredRevenues(companyEconomy));\r\n\t\t\t\tvr.addResult(this.companyService.validateHasMinimumBussinessFocuses(company));\r\n\t\t\t\tvr.addResult(this.companyService.validateBussinessFocuses(company));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tprivate getRequiredRevenues(companyEconomy: CompanyEconomy): \r\n\t\t{ year: number; revenue: Revenue | undefined }[] {\r\n\t\tlet years = this.getRequiredYearsOfRevenue();\r\n\t\tlet r = years.map((year) => {\r\n\t\t\treturn {\r\n\t\t\t\tyear: year,\r\n\t\t\t\trevenue: this.getRevenueByYear(companyEconomy, year),\r\n\t\t\t};\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\tprivate validateRequiredRevenues(companyEconomy: CompanyEconomy): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif (\r\n\t\t\t!companyEconomy ||\r\n\t\t\t!companyEconomy.revenues ||\r\n\t\t\t!companyEconomy.revenues\r\n\t\t)\r\n\t\t\treturn vr;\r\n\r\n\t\tthis.getRequiredRevenues(companyEconomy).forEach((x) => {\r\n\t\t\tif( x.revenue ) {\r\n\t\t\t\tvr.add({\r\n\t\t\t\t\tvalidator: this.revenueHasZeroOrHigherRevenue,\r\n\t\t\t\t\tobject: x.revenue,\r\n\t\t\t\t\tok: this.revenueHasZeroOrHigherRevenue(x.revenue),\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tvr.add({\r\n\t\t\t\t\tvalidator: this.getRevenueByYear,\r\n\t\t\t\t\tobject: companyEconomy,\r\n\t\t\t\t\targs: [x.year],\r\n\t\t\t\t\tok: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn vr;\r\n\t}\r\n\r\n\trevenueHasZeroOrHigherRevenue(revenue: Revenue): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isZeroOrGreater(revenue.revenue);\r\n\t}\r\n\t\r\n}\r\n","export class UiModelConverter {\r\n\r\n\tstatic prettySsn(ssn: string): string {\r\n\t\tif( ssn.length===12 )\r\n\t\t\treturn ssn.substr(0,8)+'-'+ssn.substr(8,4);\r\n\t\telse\r\n\t\t\treturn ssn;\r\n\t}\r\n\r\n\tstatic prettyOrgNr(orgNr: string|undefined): string {\r\n\t\tif( !orgNr )\r\n\t\t\treturn '';\r\n\t\telse if( orgNr.length===10 )\r\n\t\t\treturn orgNr.substr(0,6)+'-'+orgNr.substr(6,4);\r\n\t\telse\r\n\t\t\treturn orgNr;\r\n\t}\r\n\r\n\tstatic prettyCustomerId(customerId: string|undefined): string {\r\n\t\tif( !customerId )\r\n\t\t\treturn '';\r\n\t\telse if( customerId.length===12 )\r\n\t\t\treturn this.prettySsn(customerId);\r\n\t\telse if( customerId.length===10 )\r\n\t\t\treturn this.prettyOrgNr(customerId);\r\n\t\treturn customerId;\r\n\t}\r\n\r\n\tstatic prettyDateString(date: string|Date|undefined): string {\r\n\t\tif( !date || date===null )\r\n\t\t\treturn '';\r\n\t\telse if( typeof(date) == 'string' ) {\r\n\t\t\tlet d = Date.parse(date as string);\r\n\t\t\tdate = new Date(d);\r\n\t\t}\r\n\t\r\n\t\tif( date instanceof Date ) {\r\n\t\t\treturn date.toLocaleDateString();\r\n\t\t} else {\r\n\t\t\treturn '?';\r\n\t\t}\r\n\t}\r\n\r\n\tstatic numberToIntegerThousandSeparatedString (value: number, separator: string = \"\\u0020\"): string {\r\n\t\tif (value===undefined || value === null)\r\n\t\t\treturn \"\";\r\n\r\n\t\tvar v = Math.round(value);\r\n\r\n\t\tif (v > -1000 && v < 1000)\r\n\t\t\treturn value.toString();\r\n\r\n\t\tvar str = value.toString();\r\n\r\n\t\t// Add thousands separator. \r\n\t\t// Originally it was the unicode character \"\\u2009\" == THIN SPACE\r\n\t\t// but it was replaced with a regular space \"\\u0200\" since Safari on iOS\r\n\t\t// couldn't render thin space.\r\n\t\tfor (var i = str.length - 3; i > 0; i -= 3) {\r\n\t\t\tstr = str.substring(0, i) + separator + str.substring(i);\r\n\t\t}\r\n\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t// static integerThousandSeparatedStringToNumber(value: string): number {\r\n\t// \tif (angular.isUndefined(value) || value === null)\r\n\t// \t\treturn null;\r\n\r\n\t// \tvalue = value.replace(/\\D/g, \"\");\r\n\r\n\t// \tvar num = parseFloat(value);\r\n\t// \tif (isNaN(num))\r\n\t// \t\treturn null;\r\n\r\n\t// \treturn num;\r\n\t// }\r\n\t\r\n\t\t\t// Takes an ssn on any form. returns it in normalized form: YYYYMMDDNNNN.\r\n\tstatic toNormalizedSsn(ssn: string): string {\r\n\t\tif (!ssn || !ssn.toLowerCase)\r\n\t\t\treturn ssn;\r\n\t\tif (ssn.length === 12) // YYYYMMDDNNNN\r\n\t\t\treturn ssn;\r\n\t\tif (ssn.length === 13) // YYYYMMDD-NNNN\r\n\t\t\treturn ssn.replace(/-/, \"\");\r\n\t\tif (ssn.length === 10)// YYMMDDNNNN\r\n\t\t\treturn \"19\" + ssn;\r\n\t\tif (ssn.length === 11)// YYMMDD-NNNN\r\n\t\t\treturn \"19\" + ssn.replace(/-/, \"\");\r\n\t\treturn ssn;\r\n\t}\r\n\t\r\n\t\t// Takes an ssn on any form. returns it in normalized form: YYYYMMDD-NNNN.\r\n\t\t// toPrettyNormalizedSsn: function (ssn: string): string {\r\n\t\t// \tif (!angular.isString(ssn))\r\n\t\t// \t\treturn ssn;\r\n\t\t// \tssn = svc.toNormalizedSsn(ssn);\r\n\t\t// \tif (ssn.length === 12) // YYYYMMDDNNNN\r\n\t\t// \t\tssn = ssn.substr(0, 8) + \"-\" + ssn.substr(8, 4); // YYYYMMDD-NNNN\r\n\t\t// \treturn ssn;\r\n\t\t// },\r\n\r\n\tstatic getSsnDate(ssn: string): Date|undefined {\r\n\t\tif (!ssn || ssn.length === 0)\r\n\t\t\treturn;\r\n\r\n\t\tssn = UiModelConverter.toNormalizedSsn(ssn.replace('-', ''));\r\n\t\tif (ssn.length !== 12)\r\n\t\t\treturn;\r\n\r\n\t\tlet year = parseInt(ssn.substr(0, 4));\r\n\t\tlet month = parseInt(ssn.substr(4, 2));\r\n\t\tlet day = parseInt(ssn.substr(6, 2));\r\n\r\n\t\treturn new Date(year, month, day);\r\n\t};\r\n\r\n\tstatic getAgeByDate(date: Date, now?: Date) : number {\r\n\t\tif (!now)\r\n\t\t\tnow = new Date();\r\n\r\n\t\tvar ageDifMs = now.getTime() - date.getTime();\r\n\t\tvar ageDate = new Date(ageDifMs); // miliseconds from epoch\r\n\t\treturn Math.abs(ageDate.getUTCFullYear() - 1970);\r\n\t};\r\n\r\n\tstatic getAgeBySsn(ssn: string): number {\r\n\t\tlet ssnDate = UiModelConverter.getSsnDate(ssn);\r\n\t\tif (!ssnDate)\r\n\t\t\treturn -9999;\r\n\r\n\t\treturn UiModelConverter.getAgeByDate(ssnDate);\r\n\t};\r\n\r\n\t// toIsoDateString: function(value: Date): string {\r\n\t// \tlet yyyy = value.getFullYear().toString();\r\n\t// \tlet mm = (value.getMonth() + 1).toString(); // getMonth() is zero-based \r\n\t// \tlet dd = value.getDate().toString();\r\n\t// \treturn yyyy + \"-\" + (mm[1] ? mm : \"0\" + mm[0]) + \"-\" + (dd[1] ? dd : \"0\" + dd[0]) + \"T00:00:00.000Z\";\r\n\t// }\r\n\t\r\n}","import { BaseService } from './BaseService';\r\nimport { BusinessCategory, Case, Applicant } from '../models/SelmaModels';\r\nimport { Company, Principal } from \"../models/selmamodels/Company\";\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { CompanyEconomyService } from './CompanyEconomyService';\r\nimport { IdService } from './IdService';\r\nimport { ApplicantService } from './ApplicantService';\r\nimport { ConvertService } from './ConvertService';\r\nimport { UiModelConverter } from '../models/UiModelConverter';\r\n\r\n/*\r\nHandles all logic for Company.\r\n*/\r\nexport class CompanyService extends BaseService {\r\n\r\n\tcompanyEconomyService?:CompanyEconomyService;\r\n\r\n\tconstructor(private stateService: StateService, \r\n\t\tprivate smelpoService: SMELPOService,\r\n\t\tprivate guardService: GuardService, \r\n\t\tprivate idService:IdService,\r\n\t\tprivate applicantService: ApplicantService,\r\n\t\tprivate convertService:ConvertService) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tupdate(company: Company|BusinessCategory|Case): void {\r\n\t\tthis.stateService.update(company);\r\n\t}\r\n\r\n\tnormalizeOrgnr(orgNr:string):string {\r\n\t\tlet normalizedOrgNr = orgNr.trim().replace(/-/g,'');\r\n\t\treturn normalizedOrgNr;\r\n\t}\r\n\r\n\tcompareOrgnr(a:string, b:string):boolean {\r\n\t\treturn this.normalizeOrgnr(a)===this.normalizeOrgnr(b);\r\n\t}\r\n\r\n\tgetDisplayName(company: Company): string {\r\n\t\tlet name:string = \"\";\r\n\t\tif( company.name ) {\r\n\t\t\tname = company.name;\r\n\t\t} else if( company.orgNumber ) {\r\n\t\t\tname = UiModelConverter.prettyOrgNr(company.orgNumber);\r\n\t\t} else {\r\n\t\t\tname = \"ID \" + company.id;\r\n\t\t}\r\n\t\treturn name;\r\n\t}\r\n\r\n\taddCompany(c:Case, company:Company) : Company {\r\n\r\n\t\tthis.ensureMinimumBusinessFocuses(company);\r\n\r\n\t\tlet existingCompany = this.getCompanyByOrgnr(c, company.orgNumber);\r\n\t\tif( !existingCompany ) {\r\n\t\t\tif( !c.companies )\r\n\t\t\t\tc.companies = [company];\r\n\t\t\telse \r\n\t\t\t\tc.companies.push(company);\r\n\t\t\t\r\n\t\t\tthis.update(company);\r\n\t\t\tthis.update(c);\r\n\t\t\treturn company;\r\n\t\t}\r\n\t\telse \r\n\t\t\treturn existingCompany;\r\n\t}\r\n\r\n\tremoveCompany(c:Case, company:Company) {\r\n\t\tif( c.companies ) {\r\n\t\t\tthis.stateService.listRemove(c.companies, company);\r\n\t\t\tif( this.companyEconomyService ) {\r\n\t\t\t\tlet ce = this.companyEconomyService.getCompanyEconomyByCompanyId(c, company.id);\r\n\t\t\t\tif( ce ) {\r\n\t\t\t\t\tthis.companyEconomyService.removeCompanyEconomy(c, ce);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif( c.attachmentRequests ) {\r\n\t\t\t\tvar attachmentRequestsToRemove = c.attachmentRequests.filter(ar => {\r\n\t\t\t\t\tif( !ar.customerId || !company.orgNumber )\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\treturn this.guardService.compareCustomerId(ar.customerId, company.orgNumber);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif( attachmentRequestsToRemove && attachmentRequestsToRemove.length>0 ) {\r\n\t\t\t\t\tattachmentRequestsToRemove.forEach(ar => {\r\n\t\t\t\t\t\tif( c.attachmentRequests )\r\n\t\t\t\t\t\t\tthis.stateService.listRemove(c.attachmentRequests, ar);\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.update(c);\r\n\t\t}\r\n\t}\r\n\r\n\tgetCompanyByOrgnr(c:Case, orgNr:string|undefined): Company|undefined {\r\n\t\tif( !c.companies || c.companies.length===0 || !orgNr)\r\n\t\t\treturn undefined;\r\n\t\treturn this.getCompanyByOrgnrInArray(c.companies, orgNr);\r\n\t}\r\n\r\n\tgetCompanyByOrgnrInArray(companies:Company[], orgNr:string): Company|undefined {\r\n\t\tif( !companies || companies.length===0)\r\n\t\t\treturn undefined;\r\n\t\tconst g = this.guardService;\r\n\t\tconst orgNrIsAlsoSsn = g.isValidSsn(orgNr);\r\n\t\torgNr = this.normalizeOrgnr(orgNr);\r\n\r\n\t\tlet r = companies.filter(x => {\r\n\t\t\tif( !x.orgNumber )\r\n\t\t\t\treturn false;\r\n\t\t\tconst n = this.normalizeOrgnr(x.orgNumber);\r\n\t\t\tif( !n )\r\n\t\t\t\treturn false;\r\n\t\t\tif( n===orgNr )\r\n\t\t\t\treturn true;\r\n\t\t\t\r\n\t\t\t// Special case when matching \r\n\t\t\tif( orgNrIsAlsoSsn && g.isValidSsn(x.orgNumber)) {\r\n\t\t\t\tconst nOrgNr = this.convertService.toNormalizedSsn(orgNr);\r\n\t\t\t\tconst nOrgNumber = this.convertService.toNormalizedSsn(x.orgNumber);\r\n\t\t\t\tconst eq = g.compareSsn(nOrgNr, nOrgNumber);\r\n\t\t\t\tif( eq )\r\n\t\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t});\r\n\t\tif( r.length===1 )\r\n\t\t\treturn r[0];\r\n\t\telse\r\n\t\t\treturn undefined;\r\n\t}\r\n\r\n\tgetCompanyById(c: Case, companyId: string): Company|undefined {\r\n\t\tif( !c.companies || c.companies.length===0 || !companyId)\r\n\t\t\treturn undefined;\r\n\t\treturn this.getCompanyByIdInArray(c.companies, companyId);\r\n\t}\r\n\r\n\tgetCompanyByIdInArray(companies:Company[], companyId:string): Company|undefined {\r\n\t\tif( !companies || companies.length===0)\r\n\t\t\treturn undefined;\r\n\t\tlet r = companies.filter(x => {\r\n\t\t\t\treturn x.id===companyId;\r\n\t\t});\r\n\t\tif( r.length===1 )\r\n\t\t\treturn r[0];\r\n\t\telse\r\n\t\t\treturn undefined;\r\n\t}\r\n\r\n\taddCompaniesToArrayByOrgnr(companies: Company[], availableCompanies: Company[]) : void {\r\n\t\tif( !availableCompanies || availableCompanies.length===0)\r\n\t\t\treturn;\r\n\t\tavailableCompanies.forEach(x => {\r\n\t\t\tif( !x.orgNumber )\r\n\t\t\t\treturn;\r\n\t\t\tlet existingCompany = this.getCompanyByOrgnrInArray(companies, x.orgNumber);\r\n\t\t\tif( !existingCompany )\r\n\t\t\t\tcompanies.push(x);\r\n\t\t});\r\n\t}\r\n\r\n\tgetApplicantCompany(c:Case, applicant: Applicant) : Company | undefined {\r\n\t\tlet applicantCompany = this.getCompanyByOrgnr(c, applicant.customerId);\r\n\t\tif( !applicantCompany ) {\r\n\t\t\tlet companies = this.getSelectedCompanies(c, applicant);\r\n\t\t\tif( companies && companies.length>0 ) {\r\n\t\t\t\treturn companies[0];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn applicantCompany;\r\n\t}\r\n\r\n\tgetMySelectedCompanies(c: Case): Company[] | undefined {\r\n\t\tconst applicant = this.applicantService.getMyApplicant(c);\r\n\t\treturn this.getSelectedCompanies(c, applicant);\r\n\t}\r\n\r\n\t\r\n\tgetSelectedCompanies(c: Case, applicant:Applicant): Company[] | undefined {\r\n\t\tif( !c.companies )\r\n\t\t\treturn undefined;\r\n\t\telse {\r\n\t\t\tlet r = this.getSelectedCompaniesInArray(c.companies, applicant);\r\n\t\t\treturn r;\r\n\t\t}\r\n\t}\r\n\r\n\tgetMySelectedCompany(c: Case): Company | undefined {\r\n\t\tconst mySelectedCompanies = this.getMySelectedCompanies(c);\r\n\t\tif( mySelectedCompanies && mySelectedCompanies.length>0 ) {\r\n\t\t\treturn mySelectedCompanies[0];\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\tgetSelectedCompaniesInArray(companies: Company[], applicant:Applicant): Company[] | undefined {\r\n\t\tif( !companies || companies.length===0)\r\n\t\t\treturn undefined;\r\n\r\n\t\tlet r = companies.filter(x => {\r\n\t\t\treturn this.isSelectedByApplicant(x, applicant);\r\n\t\t});\r\n\t\tif( r.length>0 )\r\n\t\t\treturn r;\r\n\t\telse\r\n\t\t\treturn undefined;\r\n\t}\r\n\r\n\tisSelectedByApplicant(company:Company, applicant:Applicant):boolean {\r\n\t\tlet r = this.getPrincipalByCustomerId(company,applicant.customerId);\r\n\t\treturn r?true:false;\r\n\t}\r\n\r\n\tgetPrincipalByCustomerId(company:Company,customerId:string):Principal|undefined {\r\n\t\tif( !company.principals )\r\n\t\t\treturn;\r\n\t\tconst g = this.guardService;\r\n\t\tlet r = company.principals.find(x => g.compareSsn(x.customerId||'',customerId));\r\n\t\treturn r;\r\n\t}\r\n\r\n\taddPrincipalFromApplicant(company:Company, applicant:Applicant):Principal {\r\n\t\tif( !company.principals )\r\n\t\t\tcompany.principals = [];\r\n\t\telse {\r\n\t\t\tlet p = this.getPrincipalByCustomerId(company, applicant.customerId);\r\n\t\t\tif( p )\r\n\t\t\t\treturn p;\r\n\t\t}\r\n\t\tlet principal = {\r\n\t\t\tcustomerId:applicant.customerId,\r\n\t\t\tname: this.applicantService.getPersonFullName(applicant)\r\n\t\t}\r\n\t\tcompany.principals.push(principal);\r\n\t\treturn principal;\r\n\t}\r\n\r\n\tvalidateHasSelectedCompany(c: Case) : ValidationResult {\r\n\r\n\t\tlet vr = this.validateHasCompanies(c);\r\n\t\tif( vr.failed() )\r\n\t\t\treturn vr;\r\n\r\n\t\tvr.add({validator:this.hasSelectedCompany, object:c, ok: this.hasSelectedCompany(c)});\r\n\t\treturn vr;\r\n\t}\r\n\r\n\r\n\tisPhysicum(company: Company):boolean {\r\n\t\treturn company.legalGroupCode!==undefined && company.legalGroupCode!==null && company.legalGroupCode===\"EF\";\r\n\t}\r\n\r\n\tisJuridicum(company: Company):boolean {\r\n\t\treturn company.legalGroupCode!==undefined && company.legalGroupCode!==null && company.legalGroupCode!==\"EF\";\r\n\t}\r\n\r\n\tanyPhysicumCompanies(companies: Company[]):boolean {\r\n\t\treturn companies.filter(x => {\r\n\t\t\treturn this.isPhysicum(x);\r\n\t\t}).length>0;\r\n\t}\r\n\r\n\thasCompanies(c: Case): boolean {\r\n\t\treturn c.companies?true:false;\r\n\t}\r\n\tvalidateHasCompanies(c: Case): ValidationResult {\r\n\t\tvar vr = new ValidationResult();\r\n\t\tvr.add({ validator:this.hasCompanies, object: c, ok: this.hasCompanies(c) });\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasMinimumBusinessFocuses(company: Company):boolean {\r\n\t\tif( company.businessFocuses && company.businessFocuses.length>0 )\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tensureMinimumBusinessFocuses(company: Company) {\r\n\t\tif( !this.hasMinimumBusinessFocuses(company)) {\r\n\t\t\tthis.addNewBusinessFocus(company);\r\n\t\t}\r\n\t}\r\n\r\n\tsetBusiniessFocusesPart(company: Company, businessCategory: BusinessCategory, value: number|undefined) {\r\n\r\n\t\tif( value!==undefined && company.businessFocuses && company.businessFocuses.length===2) {\r\n\t\t\tlet otherBusinessFocus = company.businessFocuses[0]===businessCategory?company.businessFocuses[1]:company.businessFocuses[0];\r\n\t\t\totherBusinessFocus.businessPart = 100-value;\r\n\t\t\tthis.updateBusinessFocus(company, otherBusinessFocus);\r\n\t\t}\r\n\r\n\t\tbusinessCategory.businessPart = value;\r\n\t\tthis.updateBusinessFocus(company, businessCategory);\r\n\t}\r\n\r\n\tgetPossibleMainDirectionBusinessFocuses(company:Company) : BusinessCategory[] {\r\n\t\tif( !company.businessFocuses )\r\n\t\t\treturn [];\r\n\t\tif( company.businessFocuses.length<2 )\r\n\t\t\treturn [];\r\n\r\n\t\tconst maxBusinessPart = company.businessFocuses.map(x => x.businessPart||0).reduce((agg,x) => Math.max(agg,x), 0);\r\n\t\tconst countMaxBusinessPart = company.businessFocuses.filter(x => x.businessPart===maxBusinessPart);\r\n\t\tif( countMaxBusinessPart.length>=2 )\r\n\t\t\treturn countMaxBusinessPart;\r\n\t\t\r\n\t\treturn [];\r\n\t}\r\n\r\n\tneedsToSpecifyMainDirectionForBusiniessFocuses(company:Company) : boolean {\r\n\t\treturn this.getPossibleMainDirectionBusinessFocuses(company).length>1;\r\n\t}\r\n\r\n\thasSpecifiedMainDirectionForBusiniessFocuses(company:Company) : boolean {\r\n\t\tlet r = this.getPossibleMainDirectionBusinessFocuses(company).filter(x => x.mainDirection===true);\r\n\t\tif( r.length===1 )\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tsetBusinessFocusMainDirection(company:Company, businessFocus:BusinessCategory):void {\r\n\t\tif( !company.businessFocuses )\r\n\t\t\treturn;\r\n\r\n\t\tlet changed = false;\r\n\t\tcompany.businessFocuses.forEach(x => {\r\n\t\t\tconst currentMainDirection = x.mainDirection===true;\r\n\t\t\tconst newMainDirection = x===businessFocus;\r\n\t\t\tif( currentMainDirection!==newMainDirection ) {\r\n\t\t\t\tx.mainDirection = newMainDirection;\r\n\t\t\t\tthis.update(x);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif( changed ) {\r\n\t\t\tthis.update(company);\r\n\t\t}\r\n\t}\r\n\r\n\tvalidateHasMinimumBussinessFocuses(company: Company): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({validator: this.hasMinimumBusinessFocuses, object: company, ok: this.hasMinimumBusinessFocuses(company) })\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tbusinessFocusHasCategory(businessFocus: BusinessCategory) :boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(businessFocus.businessCategoryCode);\r\n\t}\r\n\r\n\tbusinessFocusHasBusinessPart(businessFocus: BusinessCategory) :boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isGreaterThan(businessFocus.businessPart, 0);\r\n\t}\r\n\r\n\tcompanyBusinessFocusBusinessPartSumIsCorrect(company:Company, sum:number) : boolean {\r\n\t\treturn sum===100;\r\n\t}\r\n\r\n\tvalidateBussinessFocuses(company: Company): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif( company.businessFocuses ) {\r\n\t\t\tcompany.businessFocuses.forEach(x => {\r\n\t\t\t\tvr.add({validator: this.businessFocusHasCategory, object: x, ok: this.businessFocusHasCategory(x) })\r\n\t\t\t})\r\n\r\n\t\t\tlet businessPartSum = 0;\r\n\t\t\tcompany.businessFocuses.forEach(x => {\r\n\t\t\t\tvr.add({validator: this.businessFocusHasBusinessPart, object: x, ok: this.businessFocusHasBusinessPart(x) })\r\n\t\t\t\tconst businessPart = x.businessPart?x.businessPart:0;\r\n\t\t\t\tbusinessPartSum += businessPart;\r\n\t\t\t});\r\n\t\t\tvr.add({validator: this.companyBusinessFocusBusinessPartSumIsCorrect, object: company, args:[businessPartSum], \r\n\t\t\t\tok: this.companyBusinessFocusBusinessPartSumIsCorrect(company, businessPartSum) });\r\n\r\n\t\t\tif( this.needsToSpecifyMainDirectionForBusiniessFocuses(company) ) {\r\n\t\t\t\tlet hasSpecifiedMainDirectionForBusiniessFocuses = this.hasSpecifiedMainDirectionForBusiniessFocuses(company);\r\n\t\t\t\tlet r = this.getPossibleMainDirectionBusinessFocuses(company);\r\n\t\t\t\tr.forEach(x => {\r\n\t\t\t\t\tvr.add({validator: this.hasSpecifiedMainDirectionForBusiniessFocuses, object: x, ok: hasSpecifiedMainDirectionForBusiniessFocuses })\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasSelectedCompany(c: Case) :boolean {\r\n\t\tconst r = this.getMySelectedCompanies(c);\r\n\t\tconst hasSelectedCompany = r && r.length>0 ? true : false;\r\n\t\tif( hasSelectedCompany )\r\n\t\t\treturn true;\r\n\t\telse {\r\n\t\t\tif( c.applicants && c.applicants.filter(x => x.willBuyAgriForestryProperty===true).length>0 ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetBusinessFocusesPartSum(company:Company) : number {\r\n\t\tif( !company.businessFocuses )\r\n\t\t\treturn 0;\r\n\t\tlet sum = company.businessFocuses.reduce((agg,x) => agg+(x.businessPart||0), 0);\r\n\t\treturn sum;\r\n\t}\r\n\r\n\taddNewBusinessFocus(company:Company) {\r\n\t\tif( !company.businessFocuses ) {\r\n\t\t\tcompany.businessFocuses = [];\r\n\t\t}\r\n\t\tlet businessFocus:BusinessCategory = {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t};\r\n\t\tif( company.businessFocuses.length===0) {\r\n\t\t\tbusinessFocus.businessPart = 100;\r\n\t\t} else {\r\n\t\t\tlet sum = this.getBusinessFocusesPartSum(company);\r\n\t\t\tif( sum<100 ) {\r\n\t\t\t\tbusinessFocus.businessPart = 100-sum;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.stateService.listAdd(company.businessFocuses, businessFocus);\r\n\t\tthis.update(company);\r\n\t}\r\n\r\n\tremoveBusinessFocus(company: Company, businessCategory: BusinessCategory) {\r\n\t\tif( !company.businessFocuses ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.stateService.listRemove(company.businessFocuses, businessCategory);\r\n\t\tthis.update(company);\r\n\r\n\t\tif( company.businessFocuses.length===1 ) {\r\n\t\t\tcompany.businessFocuses[0].businessPart = 100;\r\n\t\t\tthis.update(company.businessFocuses[0]);\r\n\t\t}\r\n\t}\r\n\r\n\tupdateBusinessFocus(company: Company, businessFocus: BusinessCategory) {\r\n\t\tthis.update(company);\r\n\t\tthis.update(businessFocus); \r\n\t}\r\n\r\n\r\n}\r\n","\r\nexport interface UIBusinessCategory {\r\n\tBusinessCategoryID: string;\r\n\tBusinessCategory: string;\r\n}\r\n\r\nexport interface UIBusinessDirection {\r\n\tBusinessDirectionID: string;\r\n\tBusinessDirection: string;\r\n}\r\n\r\n// This array is provided as-is from LHB.\r\nexport let uiBusinessCategories: UIBusinessCategory[] = [\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"1\",\r\n\t\t\"BusinessCategory\": \"Jordbruksväxter\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"2\",\r\n\t\t\"BusinessCategory\": \"Trädgårdsväxter\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"3\",\r\n\t\t\"BusinessCategory\": \"Nötkreatur\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"4\",\r\n\t\t\"BusinessCategory\": \"Får och getter\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"5\",\r\n\t\t\"BusinessCategory\": \"Svinproduktion\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"6\",\r\n\t\t\"BusinessCategory\": \"Fjäderfäskötsel\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"7\",\r\n\t\t\"BusinessCategory\": \"Hästverksamhet\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"8\",\r\n\t\t\"BusinessCategory\": \"Annan djurskötsel\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"9\",\r\n\t\t\"BusinessCategory\": \"Prod av skog\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"10\",\r\n\t\t\"BusinessCategory\": \"Förädling av skog\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"11\",\r\n\t\t\"BusinessCategory\": \"Övrik skogsverksam.\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"12\",\r\n\t\t\"BusinessCategory\": \"Maskinenteprenad\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"13\",\r\n\t\t\"BusinessCategory\": \"Lokaler\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"14\",\r\n\t\t\"BusinessCategory\": \"Turism\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"15\",\r\n\t\t\"BusinessCategory\": \"Tillverkning\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"16\",\r\n\t\t\"BusinessCategory\": \"Tjäns. - konsultv\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"17\",\r\n\t\t\"BusinessCategory\": \"Övrigt\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"101\",\r\n\t\t\"BusinessCategory\": \"Jordbruksväxter\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"102\",\r\n\t\t\"BusinessCategory\": \"Trädgård, grönsaker, frukt & bär\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"103\",\r\n\t\t\"BusinessCategory\": \"Mjölkproduktion\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"104\",\r\n\t\t\"BusinessCategory\": \"Nötkreatur (kött etc.)\"\r\n\t},\t\t\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"105\",\r\n\t\t\"BusinessCategory\": \"Svinproduktion\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"106\",\r\n\t\t\"BusinessCategory\": \"Fjäderfäproduktion\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"107\",\r\n\t\t\"BusinessCategory\": \"Hästverksamhet\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"108\",\r\n\t\t\"BusinessCategory\": \"Annan djurskötsel\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"109\",\r\n\t\t\"BusinessCategory\": \"Skog - Produktion/Förädling/övrigt\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"110\",\r\n\t\t\"BusinessCategory\": \"Maskinentreprenad\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"111\",\r\n\t\t\"BusinessCategory\": \"Elproduktion\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"112\",\r\n\t\t\"BusinessCategory\": \"Förädling av egna produkter/Konferens & Upplevelseverksamhet\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"113\",\r\n\t\t\"BusinessCategory\": \"Inkomst av tjänst och kapital/övrigt\"\r\n\t},\r\n\t{\r\n\t\t\"BusinessCategoryID\": \"114\",\r\n\t\t\"BusinessCategory\": \"Arrende- och hyresintäkter\"\r\n\t}\t\t\t\r\n];\r\n","import { UIKeyed } from \"./UIKeyed\";\r\nimport { UINamed } from \"./UINamed\";\r\nimport { EUSupportEnum } from \"../SelmaModels\";\r\n\r\nexport interface UIEUSupport extends UIKeyed, UINamed {\r\n\ttype: EUSupportEnum;\r\n}\r\n\r\nexport const uiEUSupports:UIEUSupport[] = [\r\n\t{ key:'EU', name:'EU-stöd', nameTextkey:\"UIEUSupport_EU\", type:EUSupportEnum.EU },\r\n\t{ key:'EUNAT', name:'EU-stöd och nationellt stöd', nameTextkey:\"UIEUSupport_EUNAT\", type:EUSupportEnum.EUNAT },\r\n\t{ key:'EUNAT_NOMILK', name:'EU-stöd och nationellt stöd, utan mjölk', nameTextkey:\"UIEUSupport_EUNAT_NOMILK\", type:EUSupportEnum.EUNAT_NOMILK },\r\n\t{ key:'NAT_NOMILK', name:'Nationellt stöd, utan mjölk', nameTextkey:\"UIEUSupport_NAT_NOMILK\", type:EUSupportEnum.NAT_NOMILK }\r\n];\r\n\r\n","import { UIKeyed } from \"./UIKeyed\";\r\nimport { UINamed } from \"./UINamed\";\r\nimport { TypeOfHouse } from \"../../libs/SMELPOClient\";\r\n\r\nexport interface UIEstateType extends UIKeyed, UINamed {\r\n\tid:number;\r\n\ttype: TypeOfHouse;\r\n}\r\n\r\nexport const uiEstateTypes:UIEstateType[] = [\r\n\t{ id: 1, key: 'HOUSE', name: \"Villa\", nameTextkey: \"EstateType_HOUSE\", type:TypeOfHouse.Villa }, \r\n\t{ id: 2, key: 'VACATIONHOUSE', name: \"Fritidshus\", nameTextkey: \"EstateType_VACATIONHOUSE\", type:TypeOfHouse.Fritidshus },\r\n\t{ id: 3, key: 'TENANCY', name: \"Hyresrätt\", nameTextkey: \"EstateType_TENANCY\", type:TypeOfHouse.Hyresrtt },\r\n\t{ id: 4, key: 'APARTMENT', name: \"Bostadsrätt\", nameTextkey: \"EstateType_APARTMENT\", type:TypeOfHouse.Bostadsrtt },\r\n\t{ id: 6, key: 'FARM', name: \"Lantbruksfastighet\", nameTextkey: \"EstateType_FARM\", type:TypeOfHouse.Landbruksfastighet },\r\n\t{ id: 5, key: 'OTHER', name: \"Övrigt boende\", nameTextkey: \"EstateType_OTHER\", type:TypeOfHouse.VrigtBoende }\r\n];","import { UINamed } from \"./UINamed\";\r\n\r\nexport interface UIHighRiskCategory extends UINamed {\r\n\tid: number;\r\n}\r\n\r\nexport const uiHighRiskCategories: UIHighRiskCategory[] = [\r\n\t{ id: 0, name: 'Nej, inget av nedanstående', nameTextkey: 'HighRiskCategory_EMPTY' },\r\n\t{\r\n\t\tid: 1,\r\n\t\tname: 'Utvinning av uran- och/eller toriummalm/Vapenhandlare',\r\n\t\tnameTextkey: 'HighRiskCategory_07210',\r\n\t},\r\n\t{\r\n\t\tid: 2,\r\n\t\tname: 'Sprängämnestillverkning/Vapenhandlare',\r\n\t\tnameTextkey: 'HighRiskCategory_20510',\r\n\t},\r\n\t{\r\n\t\tid: 3,\r\n\t\tname: 'Tillverkning av kärnbränsle/Vapenhandlare',\r\n\t\tnameTextkey: 'HighRiskCategory_24460',\r\n\t},\r\n\t{\r\n\t\tid: 4,\r\n\t\tname: 'Tillverkning av vapen och ammunition/Vapenhandlare',\r\n\t\tnameTextkey: 'HighRiskCategory_25400',\r\n\t},\r\n\t{\r\n\t\tid: 5,\r\n\t\tname: 'Tillverkning av militära stridsfordon/Vapenhandlare',\r\n\t\tnameTextkey: 'HighRiskCategory_30400',\r\n\t},\r\n\t{\r\n\t\tid: 6,\r\n\t\tname: 'Specialiserad butikshandel med ur',\r\n\t\tnameTextkey: 'HighRiskCategory_47771',\r\n\t},\r\n\t{\r\n\t\tid: 7,\r\n\t\tname:\r\n\t\t\t'Specialiserad butikshandel med guldsmedsvaror och smycken (av ädel metall)',\r\n\t\tnameTextkey: 'HighRiskCategory_47772',\r\n\t},\r\n\t{\r\n\t\tid: 8,\r\n\t\tname: 'Specialiserad butikshandel med konst samt galleriverksamhet',\r\n\t\tnameTextkey: 'HighRiskCategory_47783',\r\n\t},\r\n\t{\r\n\t\tid: 9,\r\n\t\tname: 'Specialiserad butikshandel med mynt och frimärken',\r\n\t\tnameTextkey: 'HighRiskCategory_47784',\r\n\t},\r\n\t{\r\n\t\tid: 10,\r\n\t\tname: 'Specialiserad butikshandel med antikviteter',\r\n\t\tnameTextkey: 'HighRiskCategory_47791',\r\n\t},\r\n\t{ id: 11, name: 'Auktioner i butik', nameTextkey: 'HighRiskCategory_47793' },\r\n\t{ id: 12, name: 'Auktioner på Internet', nameTextkey: 'HighRiskCategory_47917' },\r\n\t{\r\n\t\tid: 13,\r\n\t\tname:\r\n\t\t\t'Postorderhandel och detaljhandel på Internet med övriga varor (apoteksartiklar)',\r\n\t\tnameTextkey: 'HighRiskCategory_47919',\r\n\t},\r\n\t{\r\n\t\tid: 14,\r\n\t\tname: 'Auktioner ej i butiker eller på Internet',\r\n\t\tnameTextkey: 'HighRiskCategory_47994',\r\n\t},\r\n\t{\r\n\t\tid: 15,\r\n\t\tname: 'Valutaväxling, växlingskontor',\r\n\t\tnameTextkey: 'HighRiskCategory_66120',\r\n\t},\r\n\t{ id: 16, name: 'Betalningsförmedling', nameTextkey: 'HighRiskCategory_66190' },\r\n\t{ id: 17, name: 'Fastighetsförmedling', nameTextkey: 'HighRiskCategory_68310' },\r\n\t{ id: 18, name: 'Humanitära insatser', nameTextkey: 'HighRiskCategory_88994' },\r\n\t{\r\n\t\tid: 19,\r\n\t\tname: 'Spel- och vadhållningsverksamhet',\r\n\t\tnameTextkey: 'HighRiskCategory_92000',\r\n\t},\r\n\t{\r\n\t\tid: 101,\r\n\t\tname: 'Handel, service och reparation av motorfordon, motorcyklar, båt mm',\r\n\t\tnameTextkey: 'HighRiskCategory_45'\r\n\t},\r\n\t{\r\n\t\tid: 102,\r\n\t\tname: 'Taxiverksamhet',\r\n\t\tnameTextkey: 'HighRiskCategory_49'\r\n\t},\r\n\t{\r\n\t\tid: 103,\r\n\t\tname: 'Butikshandel med klockor, smycken, konst, antikviteter, auktioner mm',\r\n\t\tnameTextkey: 'HighRiskCategory_4777'\r\n\t},\r\n\t{\r\n\t\tid: 104,\r\n\t\tname: 'Gruvdrift, stenkol',\r\n\t\tnameTextkey: 'HighRiskCategory_5100'\r\n\t},\r\n\t{\r\n\t\tid: 105,\r\n\t\tname: 'Gruvdrift, brytning brunkol',\r\n\t\tnameTextkey: 'HighRiskCategory_5200'\r\n\t},\r\n\t{\r\n\t\tid: 106,\r\n\t\tname: 'Förvaltning och uthyrning av egna eller arrenderade fastigheter',\r\n\t\tnameTextkey: 'HighRiskCategory_6820'\r\n\t},\r\n\t{\r\n\t\tid: 107,\r\n\t\tname: 'Juridisk verksamhet',\r\n\t\tnameTextkey: 'HighRiskCategory_6910'\r\n\t},\r\n\t{\r\n\t\tid: 108,\r\n\t\tname: 'Revision, bokföring, skatterådgivning',\r\n\t\tnameTextkey: 'HighRiskCategory_6920'\r\n\t},\r\n\t{\r\n\t\tid: 109,\r\n\t\tname: 'Gruvdrift, järnmalm',\r\n\t\tnameTextkey: 'HighRiskCategory_7100'\r\n\t},\r\n\t{\r\n\t\tid: 110,\r\n\t\tname: 'Utvinning av uran- och toriummalm',\r\n\t\tnameTextkey: 'HighRiskCategory_7210'\r\n\t},\r\n\t{\r\n\t\tid: 111,\r\n\t\tname: 'Gruvdrift, icke-järnmalm (utom uranmalm och toriummalm)',\r\n\t\tnameTextkey: 'HighRiskCategory_7290'\r\n\t},\r\n\t{\r\n\t\tid: 113,\r\n\t\tname: 'Petroleumraffinering',\r\n\t\tnameTextkey: 'HighRiskCategory_19200'\r\n\t},\r\n\t{\r\n\t\tid: 114,\r\n\t\tname: 'Industrigasframställning',\r\n\t\tnameTextkey: 'HighRiskCategory_20110'\r\n\t},\r\n\t{\r\n\t\tid: 115,\r\n\t\tname: 'Sprängämnestillverkning',\r\n\t\tnameTextkey: 'HighRiskCategory_20510'\r\n\t},\r\n\t{\r\n\t\tid: 116,\r\n\t\tname: 'Tillverkning av kärnbränsle',\r\n\t\tnameTextkey: 'HighRiskCategory_24460'\r\n\t},\r\n\t{\r\n\t\tid: 117,\r\n\t\tname: 'Tillverkning av vapen och ammunition/Vapenhandlare',\r\n\t\tnameTextkey: 'HighRiskCategory_25400'\r\n\t},\r\n\t{\r\n\t\tid: 118,\r\n\t\tname: 'Tillverkning av militära stridsfordon',\r\n\t\tnameTextkey: 'HighRiskCategory_30400'\r\n\t},\r\n\t{\r\n\t\tid: 119,\r\n\t\tname: 'Övriga anläggningsarbeten',\r\n\t\tnameTextkey: 'HighRiskCategory_42990'\r\n\t},\r\n\t{\r\n\t\tid: 120,\r\n\t\tname: 'Uthyrning av bygg- och anläggningsmaskiner',\r\n\t\tnameTextkey: 'HighRiskCategory_43991'\r\n\t},\r\n\t{\r\n\t\tid: 121,\r\n\t\tname: 'Övrig specialiserad bygg- och anläggningsverksamhet',\r\n\t\tnameTextkey: 'HighRiskCategory_43999'\r\n\t},\r\n\t{\r\n\t\tid: 122,\r\n\t\tname: 'Provisionshandel med bränsle, malm, metaller och industrikemikalier',\r\n\t\tnameTextkey: 'HighRiskCategory_46120'\r\n\t},\r\n\t{\r\n\t\tid: 123,\r\n\t\tname: 'Partihandel med diverse andra maskiner och diverse annan utrustning',\r\n\t\tnameTextkey: 'HighRiskCategory_46699'\r\n\t},\r\n\t{\r\n\t\tid: 124,\r\n\t\tname: 'Partihandel med bränsle',\r\n\t\tnameTextkey: 'HighRiskCategory_46710'\r\n\t},\r\n\t{\r\n\t\tid: 125,\r\n\t\tname: 'Specialiserad detaljhandel med drivmedel',\r\n\t\tnameTextkey: 'HighRiskCategory_47300'\r\n\t},\r\n\t{\r\n\t\tid: 126,\r\n\t\tname: 'Butikshandel med konst samt galleriverksamhet',\r\n\t\tnameTextkey: 'HighRiskCategory_47783'\r\n\t},\r\n\t{\r\n\t\tid: 127,\r\n\t\tname: 'Butikshandel med mynt och frimärken',\r\n\t\tnameTextkey: 'HighRiskCategory_47784'\r\n\t},\r\n\t{\r\n\t\tid: 128,\r\n\t\tname: 'Vapen för krigsändamål-partihandel vapen och ammunition',\r\n\t\tnameTextkey: 'HighRiskCategory_47789'\r\n\t},\r\n\t{\r\n\t\tid: 129,\r\n\t\tname: 'Butikshandel med antikviteter',\r\n\t\tnameTextkey: 'HighRiskCategory_47791'\r\n\t},\r\n\t{\r\n\t\tid: 130,\r\n\t\tname: 'Auktioner i butik',\r\n\t\tnameTextkey: 'HighRiskCategory_47793'\r\n\t},\r\n\t{\r\n\t\tid: 131,\r\n\t\tname: 'Auktioner på Internet',\r\n\t\tnameTextkey: 'HighRiskCategory_47917'\r\n\t},\r\n\t{\r\n\t\tid: 132,\r\n\t\tname: 'Postorderhandel och detaljhandel på Internet med övriga varor',\r\n\t\tnameTextkey: 'HighRiskCategory_47919'\r\n\t},\r\n\t{\r\n\t\tid: 133,\r\n\t\tname: 'Auktioner ej i butiker eller på Internet',\r\n\t\tnameTextkey: 'HighRiskCategory_47994'\r\n\t},\r\n\t{\r\n\t\tid: 134,\r\n\t\tname: 'Restaurang, fik, gårdförsäljning mm',\r\n\t\tnameTextkey: 'HighRiskCategory_56100'\r\n\t},\r\n\t{\r\n\t\tid: 135,\r\n\t\tname: 'Värdepappersfonder',\r\n\t\tnameTextkey: 'HighRiskCategory_64301'\r\n\t},\r\n\t{\r\n\t\tid: 136,\r\n\t\tname: 'Annan kreditgivning',\r\n\t\tnameTextkey: 'HighRiskCategory_64920'\r\n\t},\r\n\t{\r\n\t\tid: 137,\r\n\t\tname: 'Handel med och förvaltning av värdepapper, för egen räkning (med tillstånd från Finansinspektionen)',\r\n\t\tnameTextkey: 'HighRiskCategory_64992'\r\n\t},\r\n\t{\r\n\t\tid: 138,\r\n\t\tname: 'Förvaltning och handel med värdepapper för annans räkning i mindre krets',\r\n\t\tnameTextkey: 'HighRiskCategory_64993'\r\n\t},\r\n\t{\r\n\t\tid: 139,\r\n\t\tname: 'Drift av auktoriserade marknadsplatser för värdepapper och råvaror',\r\n\t\tnameTextkey: 'HighRiskCategory_66110'\r\n\t},\r\n\t{\r\n\t\tid: 140,\r\n\t\tname: 'Valutaväxling, växlingskontor',\r\n\t\tnameTextkey: 'HighRiskCategory_66120'\r\n\t},\r\n\t{\r\n\t\tid: 141,\r\n\t\tname: 'Andra stödtjänster till finansiella tjänster utom försäkring och pensionsfondsverksamhet',\r\n\t\tnameTextkey: 'HighRiskCategory_66190'\r\n\t},\r\n\t{\r\n\t\tid: 142,\r\n\t\tname: 'Fondförvaltning av värdepappersfonder, för annans räkning (tillstånd krävs från Finansinspektionen)',\r\n\t\tnameTextkey: 'HighRiskCategory_66301'\r\n\t},\r\n\t{\r\n\t\tid: 143,\r\n\t\tname: 'Fastighetsförmedling',\r\n\t\tnameTextkey: 'HighRiskCategory_68310'\r\n\t},\r\n\t{\r\n\t\tid: 144,\r\n\t\tname: 'Övriga företagstjänster',\r\n\t\tnameTextkey: 'HighRiskCategory_82990'\r\n\t},\r\n\t{\r\n\t\tid: 145,\r\n\t\tname: 'Utrikesförvaltning',\r\n\t\tnameTextkey: 'HighRiskCategory_84210'\r\n\t},\r\n\t{\r\n\t\tid: 146,\r\n\t\tname: 'Heldygnsvård med boende för barn och ungdomar',\r\n\t\tnameTextkey: 'HighRiskCategory_87901'\r\n\t},\r\n\t{\r\n\t\tid: 147,\r\n\t\tname: 'Öppna sociala insatser för äldre personer',\r\n\t\tnameTextkey: 'HighRiskCategory_88101'\r\n\t},\r\n\t{\r\n\t\tid: 148,\r\n\t\tname: 'Öppna sociala insatser för personer med funktionshinder',\r\n\t\tnameTextkey: 'HighRiskCategory_88102'\r\n\t},\r\n\t{\r\n\t\tid: 149,\r\n\t\tname: 'Humanitära insatser',\r\n\t\tnameTextkey: 'HighRiskCategory_88994'\r\n\t},\r\n\t{\r\n\t\tid: 150,\r\n\t\tname: 'Drift av flyktingförläggning',\r\n\t\tnameTextkey: 'HighRiskCategory_88995'\r\n\t},\r\n\t{\r\n\t\tid: 151,\r\n\t\tname: 'Spel- och vadhållningsverksamhet',\r\n\t\tnameTextkey: 'HighRiskCategory_92000'\r\n\t},\r\n\t{\r\n\t\tid: 152,\r\n\t\tname: 'Skönhetsbehandling, manikyr, mm',\r\n\t\tnameTextkey: 'HighRiskCategory_96022'\r\n\t},\r\n\t{\r\n\t\tid: 153,\r\n\t\tname: 'Massage, kroppsvård mm',\r\n\t\tnameTextkey: 'HighRiskCategory_96040'\r\n\t},\r\n\t{\r\n\t\tid: 154,\r\n\t\tname: 'Verksamhet vid internationella organisationer, utländska ambassader o.d.',\r\n\t\tnameTextkey: 'HighRiskCategory_99000'\r\n\t}\r\n];\r\n\r\n\r\n/*\r\n[\r\n\t\"Andra stödtjänster till finansiella tjänster utom försäkring och pensionsfondsverksamhet\",\r\n\t\"Annan kreditgivning\",\r\n\t\"Auktioner ej i butiker eller på Internet\",\r\n\t\"Auktioner i butik\",\r\n\t\"Auktioner på Internet\",\r\n\t\"Butikshandel med antikviteter\",\r\n\t\"Butikshandel med klockor, smycken, konst, antikviteter, auktioner mm\",\r\n\t\"Butikshandel med konst samt galleriverksamhet\",\r\n\t\"Butikshandel med mynt och frimärken\",\r\n\t\"Drift av auktoriserade marknadsplatser för vardepapper och råvaror\",\r\n\t\"Drift av flyktingförläggning\",\r\n\t\"Fastighetsförmedling\",\r\n\t\"Fondförvaltning av värdepappersfonder, för annans räkning (tillstånd krävs från Finansinspektionen)\",\r\n\t\"Förvaltning och handel med värdepapper för annans räkning i mindre krets\",\r\n\t\"Förvaltning och uthyrning av egna eller arrenderade fastigheter\",\r\n\t\"Gruvdrift, brytning brunkol\",\r\n\t\"Gruvdrift, icke-järnmalm (utom uranmalm och toriummalm)\",\r\n\t\"Gruvdrift, järnmalm\",\r\n\t\"Gruvdrift, stenkol\",\r\n\t\"Handel med och förvaltning av värdepapper för egen räkning (med tillstånd från Finansinspektionen)\",\r\n\t\"Handel, service och reparation av motorfordon, motorcyklar, båt mm\",\r\n\t\"Heldygnsvård med boende för barn och ungdomar\",\r\n\t\"Humanitära insatser\",\r\n\t\"Industrigasframställning\",\r\n\t\"Juridisk verksamhet\",\r\n\t\"Massage, kroppsvård mm\",\r\n\t\"Oppna sociala insatser för personer med funktionshinder\",\r\n\t\"Oppna sociala insatser för äldre personer\",\r\n\t\"Ovriga företagstjänster\",\r\n\t\"Partihandel med bränslen\",\r\n\t\"Partihandel med diverse andra maskiner och diverse annan utrustning\",\r\n\t\"Petroleumraffinering\",\r\n\t\"Postorderhandel och detaljhandel på Internet med övriga varor\",\r\n\t\"Provisionshandel med bränsle, malm, metaller och industrikemikalier\",\r\n\t\"Restaurang, fik, gårdsförsäljning mm\",\r\n\t\"Revision, bokföring, skatterådgivning\",\r\n\t\"Skönhetsbehandling, manikyr, mm\",\r\n\t\"Specialiserad detaljhandel med drivmedel\",\r\n\t\"Spel- och vadhållningsverksamhet\",\r\n\t\"Sprängämnestillverkning\",\r\n\t\"Taxiverksamhet\",\r\n\t\"Tillverkning av kärnbränsle\",\r\n\t\"Tillverkning av militära stridsfordon\",\r\n\t\"Tillverkning av vapen och ammunitionNapenhandlare\",\r\n\t\"Uthyrning av bygg- och anläggningsmaskiner\",\r\n\t\"Utrikesförvaltning\",\r\n\t\"Utvinning av uran- och toriummalm\",\r\n\t\"Valutaväxling, växlingskontor\",\r\n\t\"Vapen för krigsändamål-partihandel vapen och ammunition\",\r\n\t\"Verksamhet vid internationella organisationer, utländska ambassader o d\",\r\n\t\"Värdepappersfonder\",\r\n\t\"Övrig specialiserad bygg- och anläggningsverksamhet\",\r\n\t\"Övriga anläggningsarbeten\"\r\n];\r\n*/","\r\nexport interface UIMunicipality {\r\n\tid: string;\r\n\tname: string;\r\n}\r\n\r\nexport const uiMunicipalities:UIMunicipality[] = [\r\n\t{ id: \"0114\", name: \"Upplands Väsby\"},\r\n\t{ id: \"0115\", name: \"Vallentuna\"},\r\n\t{ id: \"0117\", name: \"Österåker\"},\r\n\t{ id: \"0120\", name: \"Värmdö\"},\r\n\t{ id: \"0123\", name: \"Järfälla\"},\r\n\t{ id: \"0125\", name: \"Ekerö\"},\r\n\t{ id: \"0126\", name: \"Huddinge\"},\r\n\t{ id: \"0127\", name: \"Botkyrka\"},\r\n\t{ id: \"0128\", name: \"Salem\"},\r\n\t{ id: \"0136\", name: \"Haninge\"},\r\n\t{ id: \"0138\", name: \"Tyresö\"},\r\n\t{ id: \"0139\", name: \"Upplands-Bro\"},\r\n\t{ id: \"0140\", name: \"Nykvarn\"},\r\n\t{ id: \"0160\", name: \"Täby\"},\r\n\t{ id: \"0162\", name: \"Danderyd\"},\r\n\t{ id: \"0163\", name: \"Sollentuna\"},\r\n\t{ id: \"0180\", name: \"Stockholm\"},\r\n\t{ id: \"0181\", name: \"Södertälje\"},\r\n\t{ id: \"0182\", name: \"Nacka\"},\r\n\t{ id: \"0183\", name: \"Sundbyberg\"},\r\n\t{ id: \"0184\", name: \"Solna\"},\r\n\t{ id: \"0186\", name: \"Lidingö\"},\r\n\t{ id: \"0187\", name: \"Vaxholm\"},\r\n\t{ id: \"0188\", name: \"Norrtälje\"},\r\n\t{ id: \"0191\", name: \"Sigtuna\"},\r\n\t{ id: \"0192\", name: \"Nynäshamn\"},\r\n\r\n\t{ id: \"0305\", name: \"Håbo\"},\r\n\t{ id: \"0319\", name: \"Älvkarleby\"},\r\n\t{ id: \"0330\", name: \"Knivsta\"},\r\n\t{ id: \"0331\", name: \"Heby\"},\r\n\t{ id: \"0360\", name: \"Tierp\"},\r\n\t{ id: \"0380\", name: \"Uppsala\"},\r\n\t{ id: \"0381\", name: \"Enköping\"},\r\n\t{ id: \"0382\", name: \"Östhammar\"},\r\n\r\n\t{ id: \"0428\", name: \"Vingåker\"},\r\n\t{ id: \"0461\", name: \"Gnesta\"},\r\n\t{ id: \"0480\", name: \"Nyköping\"},\r\n\t{ id: \"0481\", name: \"Oxelösund\"},\r\n\t{ id: \"0482\", name: \"Flen\"},\r\n\t{ id: \"0483\", name: \"Katrineholm\"},\r\n\t{ id: \"0484\", name: \"Eskilstuna\"},\r\n\t{ id: \"0486\", name: \"Strängnäs\"},\r\n\t{ id: \"0488\", name: \"Trosa\"},\r\n\r\n\t{ id: \"0509\", name: \"Ödeshög\"},\r\n\t{ id: \"0512\", name: \"Ydre\"},\r\n\t{ id: \"0513\", name: \"Kinda\"},\r\n\t{ id: \"0560\", name: \"Boxholm\"},\r\n\t{ id: \"0561\", name: \"Åtvidaberg\"},\r\n\t{ id: \"0562\", name: \"Finspång\"},\r\n\t{ id: \"0563\", name: \"Valdemarsvik\"},\r\n\t{ id: \"0580\", name: \"Linköping\"},\r\n\t{ id: \"0581\", name: \"Norrköping\"},\r\n\t{ id: \"0582\", name: \"Söderköping\"},\r\n\t{ id: \"0583\", name: \"Motala\"},\r\n\t{ id: \"0584\", name: \"Vadstena\"},\r\n\t{ id: \"0586\", name: \"Mjölby\"},\r\n\r\n\t{ id: \"0604\", name: \"Aneby\"},\r\n\t{ id: \"0617\", name: \"Gnosjö\"},\r\n\t{ id: \"0642\", name: \"Mullsjö\"},\r\n\t{ id: \"0643\", name: \"Habo\"},\r\n\t{ id: \"0662\", name: \"Gislaved\"},\r\n\t{ id: \"0665\", name: \"Vaggeryd\"},\r\n\t{ id: \"0680\", name: \"Jönköping\"},\r\n\t{ id: \"0682\", name: \"Nässjö\"},\r\n\t{ id: \"0683\", name: \"Värnamo\"},\r\n\t{ id: \"0684\", name: \"Sävsjö\"},\r\n\t{ id: \"0685\", name: \"Vetlanda\"},\r\n\t{ id: \"0686\", name: \"Eksjö\"},\r\n\t{ id: \"0687\", name: \"Tranås\"},\r\n\r\n\t{ id: \"0760\", name: \"Uppvidinge\"},\r\n\t{ id: \"0761\", name: \"Lessebo\"},\r\n\t{ id: \"0763\", name: \"Tingsryd\"},\r\n\t{ id: \"0764\", name: \"Alvesta\"},\r\n\t{ id: \"0765\", name: \"Älmhult\"},\r\n\t{ id: \"0767\", name: \"Markaryd\"},\r\n\t{ id: \"0780\", name: \"Växjö\"},\r\n\t{ id: \"0781\", name: \"Ljungby\"},\r\n\r\n\t{ id: \"0821\", name: \"Högsby\"},\r\n\t{ id: \"0834\", name: \"Torsås\"},\r\n\t{ id: \"0840\", name: \"Mörbylånga\"},\r\n\t{ id: \"0860\", name: \"Hultsfred\"},\r\n\t{ id: \"0861\", name: \"Mönsterås\"},\r\n\t{ id: \"0862\", name: \"Emmaboda\"},\r\n\t{ id: \"0880\", name: \"Kalmar\"},\r\n\t{ id: \"0881\", name: \"Nybro\"},\r\n\t{ id: \"0882\", name: \"Oskarshamn\"},\r\n\t{ id: \"0883\", name: \"Västervik\"},\r\n\t{ id: \"0884\", name: \"Vimmerby\"},\r\n\t{ id: \"0885\", name: \"Borgholm\"},\r\n\r\n\t{ id: \"0980\", name: \"Gotland\"},\r\n\r\n\t{ id: \"1060\", name: \"Olofström\"},\r\n\t{ id: \"1080\", name: \"Karlskrona\"},\r\n\t{ id: \"1081\", name: \"Ronneby\"},\r\n\t{ id: \"1082\", name: \"Karlshamn\"},\r\n\t{ id: \"1083\", name: \"Sölvesborg\"},\r\n\r\n\t{ id: \"1214\", name: \"Svalöv\"},\r\n\t{ id: \"1230\", name: \"Staffanstorp\"},\r\n\t{ id: \"1231\", name: \"Burlöv\"},\r\n\t{ id: \"1233\", name: \"Vellinge\"},\r\n\t{ id: \"1256\", name: \"Östra Göinge\"},\r\n\t{ id: \"1257\", name: \"Örkelljunga\"},\r\n\t{ id: \"1260\", name: \"Bjuv\"},\r\n\t{ id: \"1261\", name: \"Kävlinge\"},\r\n\t{ id: \"1262\", name: \"Lomma\"},\r\n\t{ id: \"1263\", name: \"Svedala\"},\r\n\t{ id: \"1264\", name: \"Skurup\"},\r\n\t{ id: \"1265\", name: \"Sjöbo\"},\r\n\t{ id: \"1266\", name: \"Hörby\"},\r\n\t{ id: \"1267\", name: \"Höör\"},\r\n\t{ id: \"1270\", name: \"Tomelilla\"},\r\n\t{ id: \"1272\", name: \"Bromölla\"},\r\n\t{ id: \"1273\", name: \"Osby\"},\r\n\t{ id: \"1275\", name: \"Perstorp\"},\r\n\t{ id: \"1276\", name: \"Klippan\"},\r\n\t{ id: \"1277\", name: \"Åstorp\"},\r\n\t{ id: \"1278\", name: \"Båstad\"},\r\n\t{ id: \"1280\", name: \"Malmö\"},\r\n\t{ id: \"1281\", name: \"Lund\"},\r\n\t{ id: \"1282\", name: \"Landskrona\"},\r\n\t{ id: \"1283\", name: \"Helsingborg\"},\r\n\t{ id: \"1284\", name: \"Höganäs\"},\r\n\t{ id: \"1285\", name: \"Eslöv\"},\r\n\t{ id: \"1286\", name: \"Ystad\"},\r\n\t{ id: \"1287\", name: \"Trelleborg\"},\r\n\t{ id: \"1290\", name: \"Kristianstad\"},\r\n\t{ id: \"1291\", name: \"Simrishamn\"},\r\n\t{ id: \"1292\", name: \"Ängelholm\"},\r\n\t{ id: \"1293\", name: \"Hässleholm\"},\r\n\r\n\t{ id: \"1315\", name: \"Hylte\"},\r\n\t{ id: \"1380\", name: \"Halmstad\"},\r\n\t{ id: \"1381\", name: \"Laholm\"},\r\n\t{ id: \"1382\", name: \"Falkenberg\"},\r\n\t{ id: \"1383\", name: \"Varberg\"},\r\n\t{ id: \"1384\", name: \"Kungsbacka\"},\r\n\r\n\t{ id: \"1401\", name: \"Härryda\"},\r\n\t{ id: \"1402\", name: \"Partille\"},\r\n\t{ id: \"1407\", name: \"Öckerö\"},\r\n\t{ id: \"1415\", name: \"Stenungsund\"},\r\n\t{ id: \"1419\", name: \"Tjörn\"},\r\n\t{ id: \"1421\", name: \"Orust\"},\r\n\t{ id: \"1427\", name: \"Sotenäs\"},\r\n\t{ id: \"1430\", name: \"Munkedal\"},\r\n\t{ id: \"1435\", name: \"Tanum\"},\r\n\t{ id: \"1438\", name: \"Dals-Ed\"},\r\n\t{ id: \"1439\", name: \"Färgelanda\"},\r\n\t{ id: \"1440\", name: \"Ale\"},\r\n\t{ id: \"1441\", name: \"Lerum\"},\r\n\t{ id: \"1442\", name: \"Vårgårda\"},\r\n\t{ id: \"1443\", name: \"Bollebygd\"},\r\n\t{ id: \"1444\", name: \"Grästorp\"},\r\n\t{ id: \"1445\", name: \"Essunga\"},\r\n\t{ id: \"1446\", name: \"Karlsborg\"},\r\n\t{ id: \"1447\", name: \"Gullspång\"},\r\n\t{ id: \"1452\", name: \"Tranemo\"},\r\n\t{ id: \"1460\", name: \"Bengtsfors\"},\r\n\t{ id: \"1461\", name: \"Mellerud\"},\r\n\t{ id: \"1462\", name: \"Lilla Edet\"},\r\n\t{ id: \"1463\", name: \"Mark\"},\r\n\t{ id: \"1465\", name: \"Svenljunga\"},\r\n\t{ id: \"1466\", name: \"Herrljunga\"},\r\n\t{ id: \"1470\", name: \"Vara\"},\r\n\t{ id: \"1471\", name: \"Götene\"},\r\n\t{ id: \"1472\", name: \"Tibro\"},\r\n\t{ id: \"1473\", name: \"Töreboda\"},\r\n\t{ id: \"1480\", name: \"Göteborg\"},\r\n\t{ id: \"1481\", name: \"Mölndal\"},\r\n\t{ id: \"1482\", name: \"Kungälv\"},\r\n\t{ id: \"1484\", name: \"Lysekil\"},\r\n\t{ id: \"1485\", name: \"Uddevalla\"},\r\n\t{ id: \"1486\", name: \"Strömstad\"},\r\n\t{ id: \"1487\", name: \"Vänersborg\"},\r\n\t{ id: \"1488\", name: \"Trollhättan\"},\r\n\t{ id: \"1489\", name: \"Alingsås\"},\r\n\t{ id: \"1490\", name: \"Borås\"},\r\n\t{ id: \"1491\", name: \"Ulricehamn\"},\r\n\t{ id: \"1492\", name: \"Åmål\"},\r\n\t{ id: \"1493\", name: \"Mariestad\"},\r\n\t{ id: \"1494\", name: \"Lidköping\"},\r\n\t{ id: \"1495\", name: \"Skara\"},\r\n\t{ id: \"1496\", name: \"Skövde\"},\r\n\t{ id: \"1497\", name: \"Hjo\"},\r\n\t{ id: \"1498\", name: \"Tidaholm\"},\r\n\t{ id: \"1499\", name: \"Falköping\"},\r\n\r\n\t{ id: \"1715\", name: \"Kil\"},\r\n\t{ id: \"1730\", name: \"Eda\"},\r\n\t{ id: \"1737\", name: \"Torsby\"},\r\n\t{ id: \"1760\", name: \"Storfors\"},\r\n\t{ id: \"1761\", name: \"Hammarö\"},\r\n\t{ id: \"1762\", name: \"Munkfors\"},\r\n\t{ id: \"1763\", name: \"Forshaga\"},\r\n\t{ id: \"1764\", name: \"Grums\"},\r\n\t{ id: \"1765\", name: \"Årjäng\"},\r\n\t{ id: \"1766\", name: \"Sunne\"},\r\n\t{ id: \"1780\", name: \"Karlstad\"},\r\n\t{ id: \"1781\", name: \"Kristinehamn\"},\r\n\t{ id: \"1782\", name: \"Filipstad\"},\r\n\t{ id: \"1783\", name: \"Hagfors\"},\r\n\t{ id: \"1784\", name: \"Arvika\"},\r\n\t{ id: \"1785\", name: \"Säffle\"},\r\n\r\n\t{ id: \"1814\", name: \"Lekeberg\"},\r\n\t{ id: \"1860\", name: \"Laxå\"},\r\n\t{ id: \"1861\", name: \"Hallsberg\"},\r\n\t{ id: \"1862\", name: \"Degerfors\"},\r\n\t{ id: \"1863\", name: \"Hällefors\"},\r\n\t{ id: \"1864\", name: \"Ljusnarsberg\"},\r\n\t{ id: \"1880\", name: \"Örebro\"},\r\n\t{ id: \"1881\", name: \"Kumla\"},\r\n\t{ id: \"1882\", name: \"Askersund\"},\r\n\t{ id: \"1883\", name: \"Karlskoga\"},\r\n\t{ id: \"1884\", name: \"Nora\"},\r\n\t{ id: \"1885\", name: \"Lindesberg\"},\r\n\r\n\t{ id: \"1904\", name: \"Skinnskatteberg\"},\r\n\t{ id: \"1907\", name: \"Surahammar\"},\r\n\t{ id: \"1960\", name: \"Kungsör\"},\r\n\t{ id: \"1961\", name: \"Hallstahammar\"},\r\n\t{ id: \"1962\", name: \"Norberg\"},\r\n\t{ id: \"1980\", name: \"Västerås\"},\r\n\t{ id: \"1981\", name: \"Sala\"},\r\n\t{ id: \"1982\", name: \"Fagersta\"},\r\n\t{ id: \"1983\", name: \"Köping\"},\r\n\t{ id: \"1984\", name: \"Arboga\"},\r\n\r\n\t{ id: \"2021\", name: \"Vansbro\"},\r\n\t{ id: \"2023\", name: \"Malung-Sälen\"},\r\n\t{ id: \"2026\", name: \"Gagnef\"},\r\n\t{ id: \"2029\", name: \"Leksand\"},\r\n\t{ id: \"2031\", name: \"Rättvik\"},\r\n\t{ id: \"2034\", name: \"Orsa\"},\r\n\t{ id: \"2039\", name: \"Älvdalen\"},\r\n\t{ id: \"2061\", name: \"Smedjebacken\"},\r\n\t{ id: \"2062\", name: \"Mora\"},\r\n\t{ id: \"2080\", name: \"Falun\"},\r\n\t{ id: \"2081\", name: \"Borlänge\"},\r\n\t{ id: \"2082\", name: \"Säter\"},\r\n\t{ id: \"2083\", name: \"Hedemora\"},\r\n\t{ id: \"2084\", name: \"Avesta\"},\r\n\t{ id: \"2085\", name: \"Ludvika\"},\r\n\r\n\t{ id: \"2101\", name: \"Ockelbo\"},\r\n\t{ id: \"2104\", name: \"Hofors\"},\r\n\t{ id: \"2121\", name: \"Ovanåker\"},\r\n\t{ id: \"2132\", name: \"Nordanstig\"},\r\n\t{ id: \"2161\", name: \"Ljusdal\"},\r\n\t{ id: \"2180\", name: \"Gävle\"},\r\n\t{ id: \"2181\", name: \"Sandviken\"},\r\n\t{ id: \"2182\", name: \"Söderhamn\"},\r\n\t{ id: \"2183\", name: \"Bollnäs\"},\r\n\t{ id: \"2184\", name: \"Hudiksvall\"},\r\n\r\n\t{ id: \"2260\", name: \"Ånge\"},\r\n\t{ id: \"2262\", name: \"Timrå\"},\r\n\t{ id: \"2280\", name: \"Härnösand\"},\r\n\t{ id: \"2281\", name: \"Sundsvall\"},\r\n\t{ id: \"2282\", name: \"Kramfors\"},\r\n\t{ id: \"2283\", name: \"Sollefteå\"},\r\n\t{ id: \"2284\", name: \"Örnsköldsvik\"},\r\n\r\n\t{ id: \"2303\", name: \"Ragunda\"},\r\n\t{ id: \"2305\", name: \"Bräcke\"},\r\n\t{ id: \"2309\", name: \"Krokom\"},\r\n\t{ id: \"2313\", name: \"Strömsund\"},\r\n\t{ id: \"2321\", name: \"Åre\"},\r\n\t{ id: \"2326\", name: \"Berg\"},\r\n\t{ id: \"2361\", name: \"Härjedalen\"},\r\n\t{ id: \"2380\", name: \"Östersund\"},\r\n\r\n\t{ id: \"2401\", name: \"Nordmaling\"},\r\n\t{ id: \"2403\", name: \"Bjurholm\"},\r\n\t{ id: \"2404\", name: \"Vindeln\"},\r\n\t{ id: \"2409\", name: \"Robertsfors\"},\r\n\t{ id: \"2417\", name: \"Norsjö\"},\r\n\t{ id: \"2418\", name: \"Malå\"},\r\n\t{ id: \"2421\", name: \"Storuman\"},\r\n\t{ id: \"2422\", name: \"Sorsele\"},\r\n\t{ id: \"2425\", name: \"Dorotea\"},\r\n\t{ id: \"2460\", name: \"Vännäs\"},\r\n\t{ id: \"2462\", name: \"Vilhelmina\"},\r\n\t{ id: \"2463\", name: \"Åsele\"},\r\n\t{ id: \"2480\", name: \"Umeå\"},\r\n\t{ id: \"2481\", name: \"Lycksele\"},\r\n\t{ id: \"2482\", name: \"Skellefteå\"},\r\n\r\n\t{ id: \"2505\", name: \"Arvidsjaur\"},\r\n\t{ id: \"2506\", name: \"Arjeplog\"},\r\n\t{ id: \"2510\", name: \"Jokkmokk\"},\r\n\t{ id: \"2513\", name: \"Överkalix\"},\r\n\t{ id: \"2514\", name: \"Kalix\"},\r\n\t{ id: \"2518\", name: \"Övertorneå\"},\r\n\t{ id: \"2521\", name: \"Pajala\"},\r\n\t{ id: \"2523\", name: \"Gällivare\"},\r\n\t{ id: \"2560\", name: \"Älvsbyn\"},\r\n\t{ id: \"2580\", name: \"Luleå\"},\r\n\t{ id: \"2581\", name: \"Piteå\"},\r\n\t{ id: \"2582\", name: \"Boden\"},\r\n\t{ id: \"2583\", name: \"Haparanda\"},\r\n\t{ id: \"2584\", name: \"Kiruna\"}\r\n];\r\n","\r\nexport interface UILoanAimCategory {\r\n\tid: string;\r\n\tname: string;\r\n\tdetails: UILoanAimDetail[];\r\n}\r\n\r\nexport interface UILoanAimDetail {\r\n\tid: string;\r\n\tname: string;\r\n}\r\n\r\n\r\n// This array is provided as-is from LHB. See mapper function at the end.\r\nexport const uiLoanAimCategories: UILoanAimCategory[] =\r\n[\r\n\t{\r\n\t\tid: \"01\",\r\n\t\tmainText: \"Nybyggnad\",\r\n\t\tmainDisplayText: \"Nybyggnad\",\r\n\t\taims: [\r\n\t\t\t{\r\n\t\t\t\taimText: \"Bostad\",\r\n\t\t\t\taimDisplayText: \"Bostad\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Fjäderfä\",\r\n\t\t\t\taimDisplayText: \"Stall fjäderfä\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Maskinhall\",\r\n\t\t\t\taimDisplayText: \"Maskinhall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Mjölkstall\",\r\n\t\t\t\taimDisplayText: \"Mjölkstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Nötstall\",\r\n\t\t\t\taimDisplayText: \"Nötstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Svinstall\",\r\n\t\t\t\taimDisplayText: \"Svinstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Övr. djurslag\",\r\n\t\t\t\taimDisplayText: \"Övriga djurslag\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Övr. ekonomibyggnad\",\r\n\t\t\t\taimDisplayText: \"Övrig ekonomibyggnad\"\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\tid: \"02\",\r\n\t\tmainText: \"Renovering\",\r\n\t\tmainDisplayText: \"Renovering\",\r\n\t\taims: [\r\n\t\t\t{\r\n\t\t\t\taimText: \"Bostad\",\r\n\t\t\t\taimDisplayText: \"Bostad\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Fjäderfä\",\r\n\t\t\t\taimDisplayText: \"Stall fjäderfä\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Maskinhall\",\r\n\t\t\t\taimDisplayText: \"Maskinhall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Mjölkstall\",\r\n\t\t\t\taimDisplayText: \"Mjölkstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Nötstall\",\r\n\t\t\t\taimDisplayText: \"Nötstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Svinstall\",\r\n\t\t\t\taimDisplayText: \"Svinstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Övr. djurslag\",\r\n\t\t\t\taimDisplayText: \"Övriga djurslag\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Övr. ekonomibyggnad\",\r\n\t\t\t\taimDisplayText: \"Övrig ekonomibyggnad\"\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\tid: \"03\",\r\n\t\tmainText: \"Tillbyggnad\",\r\n\t\tmainDisplayText: \"Tillbyggnad\",\r\n\t\taims: [\r\n\t\t\t{\r\n\t\t\t\taimText: \"Bostad\",\r\n\t\t\t\taimDisplayText: \"Bostad\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Fjäderfä\",\r\n\t\t\t\taimDisplayText: \"Stall fjäderfä\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Maskinhall\",\r\n\t\t\t\taimDisplayText: \"Maskinhall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Mjölkstall\",\r\n\t\t\t\taimDisplayText: \"Mjölkstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Nötstall\",\r\n\t\t\t\taimDisplayText: \"Nötstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Svinstall\",\r\n\t\t\t\taimDisplayText: \"Svinstall\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Övr. djurslag\",\r\n\t\t\t\taimDisplayText: \"Övriga djurslag\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Övr. ekonomibyggnad\",\r\n\t\t\t\taimDisplayText: \"Övrig ekonomibyggnad\"\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\tid: \"04\",\r\n\t\tmainText: \"Maskininvestering\",\r\n\t\tmainDisplayText: \"Maskininvestering\",\r\n\t\taims: [\r\n\t\t\t{\r\n\t\t\t\taimText: \"Maskiner\",\r\n\t\t\t\taimDisplayText: \"Maskiner\"\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\tid: \"05\",\r\n\t\tmainText: \"Fastighetsköp\",\r\n\t\tmainDisplayText: \"Fastighetsköp\",\r\n\t\taims: [\r\n\t\t\t{\r\n\t\t\t\taimText: \"Jordbruk\",\r\n\t\t\t\taimDisplayText: \"Jordbruk\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Annan fastighet\",\r\n\t\t\t\taimDisplayText: \"Annan fastighet\"\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\tid: \"06\",\r\n\t\tmainText: \"Rörelsekapital\",\r\n\t\tmainDisplayText: \"Rörelsekapital\",\r\n\t\taims: [\r\n\t\t\t{\r\n\t\t\t\taimText: \"Djur\",\r\n\t\t\t\taimDisplayText: \"Djur\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Lager\",\r\n\t\t\t\taimDisplayText: \"Lager\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Likvid förstärkning\",\r\n\t\t\t\taimDisplayText: \"Likvid förstärkning\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Rekonstruktion\",\r\n\t\t\t\taimDisplayText: \"Rekonstrukt\"\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\tid: \"07\",\r\n\t\tmainText: \"Energiproduktion\",\r\n\t\tmainDisplayText: \"Energiproduktion\",\r\n\t\taims: [\r\n\t\t\t{\r\n\t\t\t\taimText: \"Biogas\",\r\n\t\t\t\taimDisplayText: \"Biogas\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\taimText: \"Vindkraft\",\r\n\t\t\t\taimDisplayText: \"Vindkraft\"\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n].map(x => {\r\n\tlet cat: UILoanAimCategory = {\r\n\t\tid: x.mainText,\r\n\t\tname: x.mainDisplayText,\r\n\t\tdetails: x.aims.map(y => {\r\n\t\t\tlet aim: UILoanAimDetail = {\r\n\t\t\t\tid: y.aimText,\r\n\t\t\t\tname: y.aimDisplayText\r\n\t\t\t};\r\n\t\t\treturn aim;\r\n\t\t})\r\n\t}\r\n\treturn cat;\r\n});\r\n","import { UIKeyed } from \"./UIKeyed\";\r\nimport { UINamed } from \"./UINamed\";\r\nimport { TypeOfLoan } from \"../../libs/SMELPOClient\";\r\n\r\nexport interface UIExtLoanType extends UIKeyed, UINamed {\r\n\tid: number;\r\n\ttype: TypeOfLoan;\r\n}\r\n\r\nexport const uiExtLoanTypes:UIExtLoanType[] = [\r\n\t{ key: \"STUDENT\", id: 0, name: \"Studielån\", nameTextkey: \"LoanType_STUDENT\", type:TypeOfLoan.Studieln }, // STUDENT // (Studielån)\r\n\t{ key: \"ACCOUNTCREDIT\", id: 2, name: \"Kontokredit/Kortkredit\", nameTextkey: \"LoanType_ACCOUNTCREDIT\", type:TypeOfLoan.KontoKortkredit }, // ACCOUNTCREDIT // (Kort/Kontokredit)\r\n\t{ key: \"INSTALLMENT\", id: 3, name: \"Avbetalningskredit/Billån/Båtlån\", nameTextkey: \"LoanType_INSTALLMENT\", type:TypeOfLoan.AvbetalningskreditBillnBtln }, // INSTALLMENT // (Avbetalning/Leasing)\r\n\t//{ key: 4, name: \"Bolån\", nameTextkey: \"LoanType_MORTGAGE\", type:TypeOfLoan.Studieln }, //MORTGAGE // (Bolån)\r\n\t{ key: \"SECURITY\", id: 5, name: \"Borgen\", nameTextkey: \"LoanType_SECURITY\", type:TypeOfLoan.Borgenstagande }, //SECURITY // (Borgen)\r\n\t{ key: \"GUARANTEES\", id: 6, name: \"Garantier\", nameTextkey: \"LoanType_GUARANTEES\", type:TypeOfLoan.Garantier }, //GUARANTEES // (Garanti)\r\n\t{ key: \"BUSINESS\", id: 8, name: \"Näringskredit\", nameTextkey: \"LoanType_BUSINESS\", type:TypeOfLoan.Nringskredit }, //BUSINESS // (Näringskredit)\r\n\t{ key: \"BLANCO\", id: 1, name: \"Blancolån/Övriga lån\", nameTextkey: \"LoanType_BLANCO\", type:TypeOfLoan.BlancokreditVrigaLn } //UNSECURED // (Blancolån)\r\n];\r\n","import { DownpaymentSource } from \"../SelmaModels\";\r\nimport { UIKeyed } from \"./UIKeyed\";\r\nimport { UINamed } from \"./UINamed\";\r\n\r\nexport interface UILoanDownpaymentType extends UIKeyed, UINamed {\r\n\ttype: DownpaymentSource;\r\n}\r\n\r\nexport const uiLoanDownpaymentTypes: UILoanDownpaymentType[] = [\r\n\t{ key: 'SALE_OF_PROPERTY', name: 'Försäljning bostad', nameTextkey:\"UILoanDownpaymentType_SALE_OF_PROPERTY\", type: DownpaymentSource.SALE_OF_PROPERTY },\r\n\t{ key: 'SAVINGS', name: 'Sparande', nameTextkey:\"UILoanDownpaymentType_SAVINGS\",type: DownpaymentSource.SAVINGS },\r\n\t{ key: 'BLANCO', name: 'Blancolån', nameTextkey:\"UILoanDownpaymentType_BLANCO\",type: DownpaymentSource.BLANCO_LOAN },\r\n\t{ key: 'OTHER', name: 'Övrigt', nameTextkey:\"UILoanDownpaymentType_OTHER\",type: DownpaymentSource.OTHER },\r\n];","import { LPEmploymentEnum } from \"../selmamodels/Applicant\";\r\nimport { UIKeyed } from \"./UIKeyed\";\r\nimport { UINamed } from \"./UINamed\";\r\n\r\nexport interface UIEmploymentType extends UIKeyed, UINamed {\r\n\ttype: LPEmploymentEnum;\r\n}\r\n\r\nexport const uiEmploymentType: UIEmploymentType[] = [\r\n\t{ key: 'PERMANENT', name: 'Anställning, tillsvidareanställning', nameTextkey:\"UIEmploymentType_PERMANENT\", type: LPEmploymentEnum.PERMANENT },\r\n\t{ key: 'TEMPORARY', name: 'Tidbegränsad anställning', nameTextkey:\"UIEmploymentType_TEMPORARY\", type: LPEmploymentEnum.TEMPORARY},\r\n\t{ key: 'PROBATIONARY', name: ' Provanställning', nameTextkey:\"UIEmploymentType_PROBATIONARY\", type: LPEmploymentEnum.PROBATIONARY },\r\n\t{ key: 'SELF_EMPLOYED', name: 'Eget företag', nameTextkey:\"UIEmploymentType_SELF_EMPLOYED\", type: LPEmploymentEnum.SELF_EMPLOYED },\r\n\t{ key: 'PENSION', name: 'Inkomst av pension', nameTextkey:\"UIEmploymentType_PENSION\", type: LPEmploymentEnum.PENSION },\r\n\t{ key: 'UNEMPLOYMENT_INSURANCE', name: 'Arbetslöshetskassa', nameTextkey:\"UIEmploymentType_UNEMPLOYMENT_INSURANCE\", type: LPEmploymentEnum.UNEMPLOYMENT_INSURANCE },\r\n\t{ key: 'STUDENT_AID', name: 'Studiestöd', nameTextkey:\"UIEmploymentType_STUDENT_AID\", type: LPEmploymentEnum.STUDENT_AID },\r\n];\r\n","import { UIKeyed } from \"./UIKeyed\";\r\nimport { UINamed } from \"./UINamed\";\r\n\r\nexport interface UIBank extends UIKeyed, UINamed {\r\n}\r\n\r\nexport const uiBanks: UIBank[] = [\r\n// Lista enligt Daniel Stenman 2016-09-16\r\n{ key: \"Landshypotek Bank\", name: \"Landshypotek Bank\", nameTextkey: \"UIBank_LandshypotekBank\" },\r\n{ key: \"Danske Bank\" , name: \"Danske Bank\", nameTextkey: \"UIBank_DanskeBank\" },\r\n{ key: \"Handelsbanken\"\t, name: \"Handelsbanken\", nameTextkey: \"UIBank_Handelsbanken\" },\r\n{ key: \"Länsförsäkringar\", name: \"Länsförsäkringar\", nameTextkey: \"UIBank_Länsförsäkringar\" },\r\n{ key: \"Nordea\", name: \"Nordea\", nameTextkey: \"UIBank_Nordea\" },\r\n{ key: \"SEB\", name: \"SEB\", nameTextkey: \"UIBank_SEB\" },\r\n{ key: \"Skandiabanken\", name: \"Skandiabanken\", nameTextkey: \"UIBank_Skandiabanken\" },\r\n{ key: \"Stadshypotek\", name: \"Stadshypotek\", nameTextkey: \"UIBank_Stadshypotek\" },\r\n{ key: \"Swedbank\", name: \"Swedbank\", nameTextkey: \"UIBank_Swedbank\" },\r\n{ key: \"Annan bank\", name: \"Annan bank\", nameTextkey: \"UIBank_Other\" }\r\n];\r\n\r\n","import { BaseService } from './BaseService';\r\nimport { Case, Aim, DownpaymentSource } from '../models/SelmaModels';\r\nimport { Loan, TakeoverLoan } from \"../models/selmamodels/Loan\";\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { Application } from '../models/AppModels';\r\nimport { uiLoanAimCategories, UILoanAimCategory } from '../models/UiModels';\r\n\r\nexport class LoanService extends BaseService {\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tconstructor(private application: Application, stateService: StateService, smelpoService: SMELPOService, guardService: GuardService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t}\r\n\r\n\tupdate(loan: Loan|TakeoverLoan): void {\r\n\t\tthis.stateService.update(loan);\r\n\t}\r\n\r\n\tvalidateLoan(loan: Loan): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasAmount(loan: Loan): boolean {\r\n\t\treturn loan &&\r\n\t\t\tthis.guardService.isGreaterThanZero(this.getLoanAmount(loan));\r\n\t}\r\n\r\n\thasLoan(c: Case): boolean {\r\n\t\treturn c.loan?true:false;\r\n\t}\r\n\r\n\tensureLoan(c: Case): Loan {\r\n\t\tif( !c.loan ) {\r\n\t\t\tc.loan = { id: this.application.services.idService.newGuid()};\r\n\t\t}\r\n\t\treturn c.loan;\r\n\t}\r\n\r\n\tgetMinimumLoanAmount(c: Case) {\r\n\t\treturn 50000; // the minimum amount in total to borrow per process.\r\n\t}\r\n\r\n\tgetMinimumSubLoanAmount() {\r\n\t\treturn 10000; // the minimum amount to borrow per aim or takeoverLoan.\r\n\t}\r\n\r\n\tgetMaximumLoanAmount(c: Case) {\r\n\t\treturn 1000*1000*1000;\r\n\t}\r\n\r\n\thasTakeoverLoans(loan: Loan): boolean {\r\n\t\treturn this.guardService.hasLengthGreaterThanZero(loan.takeoverLoans);\r\n\t}\r\n\r\n\thasAims(loan: Loan): boolean {\r\n\t\treturn this.guardService.hasLengthGreaterThanZero(loan.aims);\r\n\t}\r\n\r\n\thasSubLoans(loan: Loan): boolean {\r\n\t\treturn this.hasTakeoverLoans(loan) || this.hasAims(loan);\r\n\t}\r\n\r\n\t// setLoanAmount(c: Case, loan: Loan, amount: number): void {\r\n\t// \tif( amount>=0) {\r\n\t// \t\tconst prevAmount = loan.amount||0;\r\n\t// \t\tif( prevAmount!=amount ) {\r\n\t// \t\t\tloan.amount = amount;\r\n\t// \t\t\tthis.update(loan);\r\n\t// \t\t}\r\n\r\n\t// \t\tif( loan.aims && loan.aims.length===1 ) {\r\n\t// \t\t\tconst aim = loan.aims[0];\r\n\t// \t\t\tif( this.guardService.isUnvaluedOrZero(aim.loanAmountPart) || aim.loanAmountPart===prevAmount ) {\r\n\t// \t\t\t\tif( aim.loanAmountPart != amount) {\r\n\t// \t\t\t\t\taim.loanAmountPart = amount;\r\n\t// \t\t\t\t\tthis.stateService.update(aim);\r\n\t// \t\t\t\t}\r\n\t// \t\t\t}\r\n\t// \t\t}\r\n\r\n\t// \t}\r\n\t// }\r\n\r\n\tgetLoanAmount(loan:Loan): number {\r\n\t\tlet amountSum = this.getAimsAmountSum(loan) + this.getTakeoverLoansDebtSum(loan);\r\n\t\treturn amountSum;\r\n\t}\r\n\r\n\tgetAimsAmountSum(loan:Loan): number {\r\n\t\tlet amountSum = 0;\r\n\t\tif( loan && loan.aims ) {\r\n\t\t\tloan.aims.forEach(x => {\r\n\t\t\t\tamountSum += x.loanAmountPart||0;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn amountSum;\r\n\t}\r\n\r\n\tgetTakeoverLoansDebtSum(loan:Loan): number {\r\n\t\tlet amountSum = 0;\r\n\t\tif( loan && loan.takeoverLoans ) {\r\n\t\t\tloan.takeoverLoans.forEach(x => {\r\n\t\t\t\tamountSum += x.debtAmount||0;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn amountSum;\r\n\t}\r\n\r\n\r\n\thasValidLoanAmount(c: Case): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\tif( !c || !c.loan )\r\n\t\t\treturn false;\r\n\r\n\t\tconst loan = c.loan;\r\n\t\tconst loanAmount = this.getLoanAmount(loan);\r\n\t\treturn loanAmount && \r\n\t\t\tg.isGreaterThanOrEqual(loanAmount, this.getMinimumLoanAmount(c)) \r\n\t\t\t? true : false;\r\n\t}\r\n\r\n\t// getAimSum(loan: Loan): number {\r\n\t// \tif( !loan.aims ) return 0;\r\n\t// \tconst sum = loan.aims.reduce((acc,val)=> {\r\n\t// \t\treturn acc + (val.loanAmountPart||0);\r\n\t// \t}, 0);\r\n\t// \treturn sum;\r\n\t// }\r\n\r\n/****************************************** */\r\n/* LOAN AIMS */\r\n/****************************************** */\r\n\taddNewAim(loan: Loan): Aim {\r\n\t\tif( !loan.aims ) {\r\n\t\t\tloan.aims = [];\r\n\t\t}\r\n\t\t// const loanAmount = loan.amount||0;\r\n\t\t// const aimSum = this.getAimsAmountSum(loan);\r\n\t\tconst aim = {\r\n\t\t\tid: this.application.services.idService.newGuid(),\r\n\t\t\tloanAmountPart: undefined\r\n\t\t};\r\n\t\tthis.stateService.listAdd(loan.aims, aim);\r\n\t\tthis.update(loan);\r\n\t\treturn aim;\r\n\t}\r\n\r\n\tupdateAim(loan: Loan, aim: Aim) {\r\n\t\tthis.update(loan);\r\n\t\tthis.stateService.update(aim);\r\n\t}\r\n\r\n\tremoveAim(loan: Loan, aim: Aim) {\r\n\t\tif( !loan || !loan.aims ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.stateService.listRemove(loan.aims, aim);\r\n\t\tthis.update(loan);\r\n\t}\r\n\r\n\tremoveAllAims(loan: Loan):void {\r\n\t\tif( !loan || !loan.aims ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tloan.aims = undefined;\r\n\t\tthis.update(loan);\r\n\t}\r\n\r\n\tsetAimLoanAmountPart(loan: Loan, aim: Aim, amountPart: number|undefined) {\r\n\t\taim.loanAmountPart = amountPart;\r\n\t\tthis.updateAim(loan, aim);\r\n\t}\r\n\r\n\tgetMaximumAimAmount() {\r\n\t\treturn 1000*1000*1000;\r\n\t}\r\n\r\n\t\r\n\t// hasMinimumLoanParts(loan: Loan) : boolean {\r\n\t// \treturn loan.aims && loan.aims.length>0?true:false;\r\n\t// }\r\n\r\n\tensureMinimumLoanAims(loan: Loan) {\r\n\t\tif( this.guardService.isUnvaluedOrEmpty(loan.aims) ) {\r\n\t\t\tthis.addNewAim(loan);\r\n\t\t}\r\n\t}\r\n\r\n\r\n/****************************************** */\r\n/* LOAN TAKEOVERS */\r\n/****************************************** */\r\n\taddNewLoanTakeOver(loan: Loan): TakeoverLoan {\r\n\t\tif( !loan.takeoverLoans ) {\r\n\t\t\tloan.takeoverLoans = [];\r\n\t\t}\r\n\r\n\t\tconst takeoverLoan = {\r\n\t\t\tid: this.application.services.idService.newGuid()\r\n\t\t};\r\n\r\n\t\tthis.stateService.listAdd(loan.takeoverLoans, takeoverLoan);\r\n\t\tthis.update(loan);\r\n\t\treturn takeoverLoan;\r\n\t}\r\n\r\n\tensureMinimumTakeoverLoans(loan: Loan) {\r\n\t\tif( this.guardService.isUnvaluedOrEmpty(loan.takeoverLoans) ) {\r\n\t\t\tthis.addNewLoanTakeOver(loan);\r\n\t\t}\r\n\t}\r\n\r\n\tupdateLoanTakeOver(loan: Loan, takeoverLoan: TakeoverLoan) {\r\n\t\tthis.update(loan);\r\n\t\tthis.stateService.update(takeoverLoan);\r\n\t}\r\n\r\n\tremoveLoanTakeOver(loan: Loan, takeoverLoan: TakeoverLoan) {\r\n\t\tif( !loan || !loan.takeoverLoans ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.stateService.listRemove(loan.takeoverLoans, takeoverLoan);\r\n\t\tthis.update(loan);\r\n\t}\r\n\r\n\tremoveAllTakeOverLoans(loan: Loan):void {\r\n\t\tif( !loan || !loan.takeoverLoans ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tloan.takeoverLoans = undefined;\r\n\t\tthis.update(loan);\r\n\t}\r\n\r\n\tsetLoanTakeOverDebtAmount(loan: Loan, takeoverLoan: TakeoverLoan, debtAmount: number|undefined) {\r\n\t\ttakeoverLoan.debtAmount = debtAmount;\r\n\t\tthis.updateLoanTakeOver(loan, takeoverLoan);\r\n\t}\r\n\r\n\tsetLoanTakeOverBank(loan: Loan, takeoverLoan: TakeoverLoan, creditInstitute: string) {\r\n\t\ttakeoverLoan.creditInstitute = creditInstitute;\r\n\t\tthis.updateLoanTakeOver(loan, takeoverLoan);\r\n\t}\r\n\r\n\tsetLoanTakeOverLoanNumber(loan: Loan, takeoverLoan: TakeoverLoan, loanNumber: string) {\r\n\t\ttakeoverLoan.loanNumber = loanNumber;\r\n\t\tthis.updateLoanTakeOver(loan, takeoverLoan);\r\n\t}\r\n\r\n\r\n\taskAboutDownpayment(loan: Loan) : boolean {\r\n\t\tif( !loan.aims || loan.aims.length===0 ) return false;\r\n\r\n\t\tconst r = loan.aims.filter(x => x.aimCategory===\"Fastighetsköp\");\r\n\t\treturn r.length>0;\r\n\t}\r\n\r\n\taskAboutDownpaymentOther(loan: Loan) : boolean {\r\n\t\tif( !this.askAboutDownpayment(loan) ) return false;\r\n\t\tif( loan.downpaymentType === DownpaymentSource.OTHER ) return true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\tgetMaximumTakeoverLoanDebtAmount() {\r\n\t\treturn 1000*1000*1000;\r\n\t}\r\n\r\n\tclearTakeoverLoanDetails(takeoverLoan: TakeoverLoan) {\r\n\t\ttakeoverLoan.loanNumber = undefined;\r\n\t\ttakeoverLoan.creditInstitute = undefined;\r\n\t\tthis.update(takeoverLoan);\r\n\t}\r\n\r\n\thasTakeoverLoanDetails(takeoverLoan: TakeoverLoan): boolean | undefined {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(takeoverLoan.loanNumber) || g.hasValue(takeoverLoan.creditInstitute);\r\n\t}\r\n\r\n\thasValidPurposeDescription(l:Loan):boolean {\r\n\t\tconst g = this.guardService;\r\n\r\n\t\tif (g.isUnvaluedOrEmpty(l.purposeDescription))\r\n\t\t\treturn true;\r\n\r\n\t\treturn g.hasLengthLessThan(l.purposeDescription, 3500);\r\n\t}\r\n\r\n\r\n\t// === Validation ===\r\n\r\n\tvalidateCaseLoan(c: Case): ValidationResult {\r\n\t\tconst vr = new ValidationResult();\r\n\t\tconst loanService = this;\r\n\r\n\t\t// Must have loan sum.\r\n\t\tconst loan = c.loan;\r\n\t\tconst hasLoan = loanService.hasLoan(c);\r\n\t\tvr.add({ validator: loanService.hasLoan, object:c, ok: hasLoan});\r\n\t\tif( loan && hasLoan ) {\r\n\t\t\t// Must have at least one sub-loan (takeover or aim).\r\n\t\t\tvr.add({ validator: loanService.hasSubLoans, object:c.loan, ok:loanService.hasSubLoans(loan) });\r\n\r\n\t\t\t// Loan sum must be greater than 1000 SEK and even to 1000 SEK\r\n\t\t\tvr.add({ validator: loanService.hasValidLoanAmount, object:c.loan, ok:loanService.hasValidLoanAmount(c) });\r\n\t\t\t\r\n\t\t\t// Purpose description must not be longer than 3500 chars\r\n\t\t\tvr.add({ validator: loanService.hasValidPurposeDescription, object:c.loan, ok:loanService.hasValidPurposeDescription(loan) });\r\n\r\n\t\t\t// Must have at least one aim.\r\n\t\t\t// vr.add({ validator: loanService.hasMinimumLoanAims, object:c.loan, \r\n\t\t\t// \tok: (c.loan && loanService.hasMinimumLoanAims(c.loan))?true:false });\r\n\r\n\t\t\tvr.addResult(loanService.validateAimsAndDownpayment(loan));\r\n\t\t\tvr.addResult(loanService.validateTakeoverLoans(loan));\r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\r\n\taimHasCategory(x: Aim): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(x.aimCategory,0);\r\n\t}\r\n\r\n\taimHasDetail(x: Aim): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(x.aimDetail,0);\r\n\t}\r\n\r\n\taimHasAmount(x: Aim): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isGreaterThanZero(x.loanAmountPart);\r\n\t}\r\n\r\n\taimHasValidAmount(x: Aim): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isGreaterThanOrEqual(x.loanAmountPart, this.getMinimumSubLoanAmount());\r\n\t}\r\n\r\n\ttakeoverLoanHasCategory(x: TakeoverLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(x.aimCategory,0);\r\n\t}\r\n\r\n\ttakeoverLoanHasDetail(x: TakeoverLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(x.aimDetail,0);\r\n\t}\r\n\r\n\ttakeoverLoanHasAmount(x: TakeoverLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isGreaterThanZero(x.debtAmount);\r\n\t}\r\n\r\n\ttakeoverLoanHasValidAmount(x: TakeoverLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isGreaterThanOrEqual(x.debtAmount, this.getMinimumSubLoanAmount());\r\n\t}\r\n\r\n\taimsHaveValidAmountSum(loan: Loan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\tconst sum = this.getAimsAmountSum(loan);\r\n\t\treturn g.isGreaterThanZero(sum);\r\n\t}\r\n\r\n\ttakeoverLoansHaveValidAmountSum(loan: Loan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\tconst sum = this.getTakeoverLoansDebtSum(loan);\r\n\t\treturn g.isGreaterThanZero(sum);\r\n\t}\r\n\r\n\tvalidateTakeoverLoans(loan: Loan): ValidationResult {\r\n\t\tconst vr = new ValidationResult();\r\n\r\n\t\tif( loan.takeoverLoans && this.hasTakeoverLoans(loan) ) {\r\n\t\t\tloan.takeoverLoans.forEach(x => {\r\n\t\t\t\tvr.addResult(this.validateTakeoverLoan(x));\r\n\t\t\t});\r\n\t\t\tvr.add({ validator: this.takeoverLoansHaveValidAmountSum, object:loan, ok: this.takeoverLoansHaveValidAmountSum(loan)}); \r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\tvalidateTakeoverLoan(x: TakeoverLoan): ValidationResult {\r\n\t\tconst vr = new ValidationResult();\r\n\t\tvr.add({ validator: this.takeoverLoanHasCategory, object:x, ok: this.takeoverLoanHasCategory(x)});\r\n\t\tvr.add({ validator: this.takeoverLoanHasDetail, object:x, ok: this.takeoverLoanHasDetail(x)});\r\n\t\tvr.add({ validator: this.takeoverLoanHasAmount, object:x, ok: this.takeoverLoanHasAmount(x)});\r\n\t\tvr.add({ validator: this.takeoverLoanHasValidAmount, object:x, ok: this.takeoverLoanHasValidAmount(x)});\r\n\t\treturn vr; \r\n\t}\r\n\r\n\tvalidateAimsAndDownpayment(loan: Loan): ValidationResult {\r\n\t\tconst vr = new ValidationResult();\r\n\r\n\t\t// Every aim must have detail code.\r\n\t\t// Every aim must have amount.\r\n\t\t// Sum of all aim amount must be equal to loan amount.\r\n\t\tif( loan.aims && this.hasAims(loan) ) {\r\n\t\t\tloan.aims.forEach(x => {\r\n\t\t\t\tvr.addResult(this.validateAim(x));\r\n\t\t\t});\r\n\t\t\tvr.add({ validator: this.aimsHaveValidAmountSum, object:loan, ok: this.aimsHaveValidAmountSum(loan)}); \r\n\t\t}\r\n\r\n\r\n\t\t// If at least one aim category is Fastighetsköp ...\r\n\t\tif( this.askAboutDownpayment(loan) ) {\r\n\t\t\t// DownpaymentSource must be selected.\r\n\r\n\t\t\tvr.add({ validator: this.hasDownpaymentType, object:loan, ok: this.hasDownpaymentType(loan)});\r\n\r\n\t\t\tif( this.askAboutDownpaymentOther(loan) ) {\r\n\t\t\t\t// If DownpaymentSource is OTHER ...\r\n\t\t\t\t// DownpaymentSourceText must have length > 0.\r\n\t\t\t\tvr.add({ validator: this.hasDownpaymentOther, object:loan, ok: this.hasDownpaymentOther(loan)});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\tvalidateAim(x: Aim): ValidationResult {\r\n\t\tconst vr = new ValidationResult();\r\n\t\tvr.add({ validator: this.aimHasCategory, object:x, ok: this.aimHasCategory(x)});\r\n\t\tvr.add({ validator: this.aimHasDetail, object:x, ok: this.aimHasDetail(x)});\r\n\t\tvr.add({ validator: this.aimHasAmount, object:x, ok: this.aimHasAmount(x)});\r\n\t\tvr.add({ validator: this.aimHasValidAmount, object:x, ok: this.aimHasValidAmount(x)});\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasDownpaymentType(loan: Loan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(loan.downpaymentType);\r\n\t}\r\n\thasDownpaymentOther(loan: Loan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn !g.isUnvaluedOrEmpty(loan.downpaymentOther);\r\n\t}\r\n\r\n\r\n\t// === Value look up tools ===\r\n\r\n\tgetUiAimCategory(aimCategory: string | undefined): UILoanAimCategory|undefined {\r\n\t\tif( !aimCategory || aimCategory === \"\") return;\r\n\r\n\t\tconst uiAimCategory = uiLoanAimCategories.find((x) => x.id === aimCategory);\r\n\t\treturn uiAimCategory;\r\n\t}\r\n\r\n\tgetAimCategoryName(aimCategory: string | undefined): string {\r\n\t\tconst uiAimCategory = this.getUiAimCategory(aimCategory);\r\n\t\tif( !uiAimCategory ) return \"\";\r\n\t\treturn uiAimCategory.name;\r\n\t}\r\n\r\n\tgetAimDetailName(aimCategory: string | undefined, aimDetail: string | undefined): string {\r\n\t\tconst uiAimCategory = this.getUiAimCategory(aimCategory);\r\n\t\tif( !uiAimCategory ) return \"\";\r\n\r\n\t\tconst uiAimDetail = uiAimCategory.details.find((x) => x.id === aimDetail);\r\n\t\tif( !uiAimDetail ) return \"\";\r\n\r\n\t\treturn uiAimDetail.name;\r\n\t}\r\n\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Case, HouseholdMember } from '../models/SelmaModels';\r\nimport { Household, Child } from '../models/selmamodels/Household';\r\nimport { Applicant } from \"../models/selmamodels/Applicant\";\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { ApplicantService } from './ApplicantService';\r\nimport { IdService } from './IdService';\r\nimport { CompanyService } from './CompanyService';\r\nimport { ExtLoanService } from './ExtLoanService';\r\nimport { MaintenanceCostService } from './MaintenanceCostService';\r\n\r\n/*\r\nHandles all logic for Household.\r\n*/\r\nexport class HouseholdService extends BaseService {\r\n\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tpublic companyService?:CompanyService; \r\n\tpublic extLoanService?:ExtLoanService;\r\n\tpublic maintenanceCostService?:MaintenanceCostService;\r\n\r\n\tconstructor(stateService: StateService, smelpoService: SMELPOService, \r\n\t\tguardService: GuardService, private applicantService:ApplicantService,\r\n\t\tprivate idService:IdService\r\n\t\t) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t} \r\n\r\n\tupdate(household: Household|Case|Child): void {\r\n\t\tthis.stateService.update(household);\r\n\t}\r\n\r\n\tgetHouseholdDescription(c: Case, household: Household) {\r\n\t\tif( !household.members || household.members.length===0 )\r\n\t\t\treturn \"Tomt hushåll\";\r\n\r\n\t\tlet desc:string = \"\";\r\n\r\n\t\thousehold.members.forEach(x => {\r\n\t\t\tif( x.householdMember ) {\r\n\t\t\t\tlet applicant = this.applicantService.getApplicantByCustomerId(c, x.householdMember);\r\n\t\t\t\tif( applicant ) {\r\n\t\t\t\t\tlet name = this.applicantService.getPersonFullName(applicant);\r\n\t\t\t\t\tif( name ) {\r\n\t\t\t\t\t\tif( desc.length>0 )\r\n\t\t\t\t\t\t\tdesc += \" och \"\r\n\t\t\t\t\t\tdesc += name;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Creates all missing sure there is at least one household for this applicant\r\n\tensureHouseholds(c:Case):void {\r\n\t\tvar applicansThatShouldHaveHouseholds = this.getApplicantsForHouseholds(c);\r\n\t\tapplicansThatShouldHaveHouseholds.forEach(x => {\r\n\t\t\tthis.ensureHouseholdForApplicant(c, x);\r\n\t\t})\r\n\t}\r\n\r\n\tprivate ensureHouseholdForApplicant(c:Case, applicant:Applicant):void {\r\n\t\tif( !applicant.customerId )\r\n\t\t\treturn;\r\n\t\tif( !this.applicantService.isPhysicum(c,applicant))\r\n\t\t\treturn;\r\n\r\n\t\tif( this.hasHouseholds(c))\r\n\t\t\treturn; // TODO: Fix this in the future by convincing LHB that they should have multiple households.\r\n\r\n\t\tlet households = this.getHouseholdsByCustomerId(c, applicant.customerId);\r\n\t\tif( households.length===0 ) {\r\n\t\t\tlet household = this.newHousehold(applicant);\r\n\t\t\tthis.addHousehold(c, household);\r\n\t\t}\r\n\t}\r\n\r\n\tnewHousehold(applicant: Applicant) : Household {\r\n\t\tif( !applicant.customerId )\r\n\t\t\tthrow Error('No applicant customer id');\r\n\r\n\t\tlet hhMember:HouseholdMember = {\r\n\t\t\t//id: this.idService.newGuid(),\r\n\t\t\thouseholdMember: applicant.customerId||''\r\n\t\t}\r\n\t\tlet hh:Household = {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t\tmembers: [\r\n\t\t\t\thhMember\r\n\t\t\t]\r\n\t\t}\r\n\t\treturn hh;\r\n\t}\r\n\r\n\tremoveHousehold(c:Case, household:Household):void {\r\n\t\tif( !c.households ) \r\n\t\t\treturn;\r\n\r\n\t\tthis.removeHouseholdExtLoans(c, household);\r\n\t\tthis.removeHouseholdMaintenanceCosts(c, household);\r\n\t\t\t\t\r\n\t\tthis.stateService.listRemove(c.households, household);\r\n\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tremoveHouseholdExtLoans(c: Case, household: Household):void {\r\n\t\tif( this.extLoanService ) {\r\n\t\t\tthis.extLoanService.removeExtLoansForHousehold(c, household);\r\n\t\t}\r\n\t}\r\n\r\n\tremoveHouseholdMaintenanceCosts(c: Case, household: Household):void {\r\n\t\tif( this.maintenanceCostService ) {\r\n\t\t\tthis.maintenanceCostService.removeMaintenanceCostsForHousehold(c, household);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\tremoveAllHouseholds(c: Case) {\r\n\t\tif( !c.households ) \r\n\t\t\treturn;\r\n\r\n\t\tif( this.extLoanService)\r\n\t\t\tthis.extLoanService.removeAllExtLoans(c);\r\n\t\tif( this.maintenanceCostService )\r\n\t\t\tthis.maintenanceCostService.removeAllMaintenanceCosts(c);\r\n\t\t\t\r\n\t\tthis.stateService.listRemoveAll(c.households);\r\n\t\tc.households = undefined;\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tshouldHaveHouseholds(c: Case):boolean {\r\n\t\tconst r = this.getApplicantsForHouseholds(c);\r\n\t\treturn r.length>0;\r\n\t}\r\n\r\n\tgetApplicantsForHouseholds(c: Case):Applicant[] {\r\n\t\tconst r = this.applicantService.getPhysicumApplicants(c);\r\n\t\treturn r;\r\n\t}\r\n\r\n\tgetFirstHousehold(c:Case) : Household|undefined {\r\n\t\tif( c.households && c.households.length>0 ) {\r\n\t\t\treturn c.households[0];\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tgetHouseholdMembersApplicants(c: Case, household:Household|undefined):Applicant[]|undefined {\r\n\t\tif( !household || !household.members )\r\n\t\t\treturn;\r\n\t\t\r\n\t\tvar applicants = household.members\r\n\t\t\t.map(x => x.householdMember?this.applicantService.getApplicantByCustomerId(c, x.householdMember) : undefined)\r\n\t\t\t.filter(x => x!==undefined) as Applicant[];\r\n\t\treturn applicants;\r\n\t}\r\n\r\n\thasHouseholds(c: Case):boolean {\r\n\t\treturn c.households && c.households.length>0 ? true:false;\r\n\t}\r\n\t\r\n\taddHousehold(c: Case, household: Household) {\r\n\t\tif( !c.households )\r\n\t\t\tc.households = [];\r\n\t\tc.households.push(household);\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tgetHouseholdsByCustomerId(c:Case, customerId: string) : Household[] {\r\n\t\tif( !c.households )\r\n\t\t\treturn [];\r\n\r\n\t\tconst r = c.households.filter(x=>{\r\n\t\t\treturn this.isHouseholdMember(x, customerId)\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\tisHouseholdMember(household:Household, customerId:string) : boolean {\r\n\t\tif( !household.members )\r\n\t\t\treturn false;\r\n\t\t\r\n\t\tfor( let householdMember of household.members ) {\r\n\t\t\tif( householdMember.householdMember && this.guardService.compareCustomerId(householdMember.householdMember, customerId) )\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tsetHouseholdMembersByCustomerIds(c:Case, household:Household, customerIds:string[]) : void {\r\n\r\n\t\tvar customerIdsToAdd = customerIds.filter(customerId => !this.getMember(household, customerId));\r\n\t\t\r\n\t\tvar householdMembersToRemove:HouseholdMember[] = [];\r\n\t\tif( household.members ) {\r\n\t\t\thouseholdMembersToRemove = household.members.filter(member => customerIds.findIndex(x=>this.guardService.compareCustomerId(x,member.householdMember||''))<0 )\r\n\t\t}\r\n\r\n\t\tif( customerIdsToAdd.length ) {\r\n\t\t\tcustomerIdsToAdd.forEach(x => {\r\n\t\t\t\tthis.addHouseholdMember(household, x);\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif( householdMembersToRemove.length ) {\r\n\t\t\thouseholdMembersToRemove.forEach(x => {\r\n\t\t\t\tif( x.householdMember )\r\n\t\t\t\t\tthis.removeHouseholdMember(c, household, x.householdMember);\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tremoveCustomerFromAllHouseholds(c:Case, customerId:string) : void {\r\n\t\tconst households = this.getHouseholdsByCustomerId(c, customerId);\r\n\t\thouseholds.forEach(hh => {this.removeHouseholdMember(c, hh, customerId)});\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\taddHouseholdMember(household:Household, customerId:string) : void {\r\n\t\tif( !household.members )\r\n\t\t\thousehold.members = [];\r\n\r\n\t\tvar member = {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t\thouseholdMember: customerId\r\n\t\t};\r\n\t\tthis.stateService.listAdd(household.members, member);\r\n\t\tthis.update(household);\r\n\t}\r\n\r\n\tremoveHouseholdMember(c: Case, household:Household, customerId:string) : void {\r\n\t\tif( !household.members )\r\n\t\t\treturn;\r\n\r\n\t\tvar member = this.getMember(household, customerId);\r\n\t\tif( member ) {\r\n\r\n\t\t\t// Remove member from extloans\r\n\t\t\tif( this.extLoanService ) {\r\n\t\t\t\tthis.extLoanService.removeLoanOwnerForHousehold(c, household, customerId);\r\n\t\t\t}\r\n\r\n\t\t\t// Remove member from maintenance costs.\r\n\t\t\tif( this.maintenanceCostService ) {\r\n\t\t\t\tthis.maintenanceCostService.removeLoanOwnerForHousehold(c, household, customerId);\r\n\t\t\t}\r\n\r\n\t\t\tthis.stateService.listRemove(household.members, member);\r\n\t\t\tthis.update(household);\r\n\t\t}\r\n\t}\r\n\r\n\tgetMember(household: Household, customerId: string) : HouseholdMember|undefined {\r\n\t\tif( !household.members )\r\n\t\t\treturn;\r\n\t\t\r\n\t\tfor( let householdMember of household.members ) {\r\n\t\t\tif( householdMember.householdMember && this.guardService.compareCustomerId(householdMember.householdMember, customerId) )\r\n\t\t\t\treturn householdMember;\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\tsetNumberOfChildrenAtHome(c: Case, household: Household, numberOfChildrenAtHome: number) {\r\n\t\tif( household.numberOfChildrenAtHome !== numberOfChildrenAtHome ) {\r\n\t\t\tif( numberOfChildrenAtHome<=0 ) {\r\n\t\t\t\thousehold.numberOfChildrenAtHome = 0;\r\n\t\t\t\thousehold.children = undefined;\r\n\t\t\t} else {\r\n\t\t\t\tif( !household.children )\r\n\t\t\t\t\thousehold.children = [];\r\n\t\t\t\telse \r\n\t\t\t\t\thousehold.children.length = numberOfChildrenAtHome; \r\n\t\t\t\tfor( let i=0; i {\r\n\t\t\t\tvr.add({validator:this.childHasAge, object:child, ok: this.childHasAge(child)});\r\n\t\t\t\tvr.add({validator:this.childHasPartial, object:child, ok: this.childHasPartial(child)});\r\n\t\t\t})\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tchildHasAge(child: Child): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isNumber(child.childsAge) && g.isZeroOrGreater(child.childsAge);\r\n\t}\r\n\r\n\tchildHasPartial(child: Child): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(child.partInHousehold);\r\n\t}\r\n\r\n\thasValidMembers(x: Household): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(x.members,0) && g.hasLengthLessThan(x.members,3);\r\n\t}\r\n\r\n\thasNumberOfChildren(x: Household): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isNumber(x.numberOfChildrenAtHome) \r\n\t\t\t&& (\r\n\t\t\t\tx.numberOfChildrenAtHome===0 \r\n\t\t\t\t|| (x.children && x.children.length===x.numberOfChildrenAtHome ? true:false)\r\n\t\t\t);\r\n\t}\r\n\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Case } from '../models/SelmaModels';\r\nimport { Collateral } from \"../models/selmamodels/Collateral\";\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { IdService } from './IdService';\r\n\r\n/*\r\nHandles all logic for Collateral.\r\n*/\r\nexport class CollateralService extends BaseService {\r\n\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tconstructor(stateService: StateService, smelpoService: SMELPOService, \r\n\t\tguardService: GuardService, private idService:IdService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t}\r\n\r\n\tupdate(collateral: Collateral|Case): void {\r\n\t\tthis.stateService.update(collateral);\r\n\t}\r\n\r\n\taddCollateral(c: Case, collateral: Collateral): void {\r\n\t\tif (!c.collaterals) \r\n\t\t\tc.collaterals = [];\r\n\r\n\t\tthis.stateService.listAdd(c.collaterals, collateral);\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tremoveCollateral(c: Case, collateral: Collateral): void {\r\n\t\tif( !c.collaterals )\r\n\t\t\treturn;\r\n\t\tthis.stateService.listRemove(c.collaterals, collateral);\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tremoveAllCollaterals(c: Case): void {\r\n\t\tif( !c.collaterals || c.collaterals.length===0 )\r\n\t\t\treturn;\r\n\t\tc.collaterals = undefined;\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\thasCollateral(c: Case): boolean {\r\n\t\treturn this.guardService.hasLengthGreaterThanZero(c.collaterals);\r\n\t}\r\n\r\n\tvalidateCollateral(c: Case, x: Collateral): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\r\n\t\tif(!x.postponeCollateralCode) {\r\n\t\t\tvr.add({validator:this.hasMunicipality, object:x, ok: this.hasMunicipality(x)});\r\n\t\t\tvr.add({validator:this.hasCode, object:x, ok: this.hasCode(x)});\r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateCollaterals(c:Case): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif ( c.collaterals ) {\r\n\t\t\tc.collaterals.forEach(x => {\r\n\t\t\t\tvar r = this.validateCollateral(c, x);\r\n\t\t\t\tvr.addResult(r);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasMunicipality(x: Collateral): boolean {\r\n\t\treturn !this.guardService.isUnvaluedOrEmpty(x.municipality);\r\n\t}\r\n\r\n\thasCode(x: Collateral): boolean {\r\n\t\treturn !this.guardService.isUnvaluedOrEmpty(x.code);\r\n\t}\r\n\r\n\tneedsForestryPlan(x: Collateral):boolean {\r\n\t\treturn false; // TODO: implement.\r\n\t}\r\n\r\n\tensureMinimumCollaterals(c: Case): void {\r\n\t\tif( !c.collaterals )\r\n\t\t\tc.collaterals = [];\r\n\r\n\t\tif( c.collaterals.length<1 ) {\r\n\t\t\tlet collateral:Collateral = this.newCollateral();\r\n\t\t\tc.collaterals.push(collateral);\r\n\t\t\tthis.update(c);\r\n\t\t}\r\n\t}\r\n\r\n\tnewCollateral(): Collateral {\r\n\t\tlet collateral:Collateral = {};\r\n\t\treturn collateral;\r\n\t}\r\n\r\n}\r\n","import { BaseService } from './BaseService';\r\n\r\nexport class ArrayService extends BaseService {\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tfirst(list:T[], match: (item:T) => boolean): T|undefined {\r\n\t\tfor(let i = 0, len=list.length; i(list:T[], match: (item:T) => boolean): boolean {\r\n\t\tfor(let i = 0, len=list.length; i(list: Array, keyGetter: (input: V) => K) : Map> {\r\n\r\n\t\tconst map = new Map>();\r\n\r\n\t\tlist.forEach((item) => {\r\n\t\t\tconst key = keyGetter(item);\r\n\t\t\tconst collection = map.get(key);\r\n\t\t\tif (!collection) {\r\n\t\t\t\tmap.set(key, [item]);\r\n\t\t\t} else {\r\n\t\t\t\tcollection.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn map;\r\n\t}\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Case, PersonalEconomy, LPEmploymentEnum } from '../models/SelmaModels';\r\nimport { Applicant } from \"../models/selmamodels/Applicant\";\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { IdService } from './IdService';\r\n\r\nexport class PersonalEconomyService extends BaseService {\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tconstructor(stateService: StateService, smelpoService: SMELPOService, guardService: GuardService, private idService:IdService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t}\r\n\r\n\tupdate(personalEconomy: PersonalEconomy|Case): void {\r\n\t\tthis.stateService.update(personalEconomy);\r\n\t}\r\n\r\n\t\r\n\taddPersonalEconomy(c:Case, personalEconomy: PersonalEconomy): void {\r\n\t\tif( !c.personalEconomies )\r\n\t\t\tc.personalEconomies = [];\r\n\r\n\t\tc.personalEconomies.push(personalEconomy);\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tnewPersonalEconomy(c:Case, applicant: Applicant): PersonalEconomy {\r\n\t\tconst personalEconomy = {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t\tprocessId: c.id,\r\n\t\t\tcustomerId: applicant.customerId\r\n\t\t}\r\n\t\treturn personalEconomy;\r\n\t}\r\n\r\n\tensurePersonalEconomy(c:Case, applicant: Applicant): PersonalEconomy {\r\n\t\tlet personalEconomy = this.getPersonalEconomy(c, applicant);\r\n\t\tif( !personalEconomy ) {\r\n\t\t\tpersonalEconomy = this.newPersonalEconomy(c, applicant);\r\n\t\t\tthis.addPersonalEconomy(c, personalEconomy);\r\n\t\t}\r\n\t\treturn personalEconomy;\r\n\t}\r\n\r\n\tgetPersonalEconomy(c:Case, applicant: Applicant): PersonalEconomy | undefined {\r\n\t\tif( !c.personalEconomies || c.personalEconomies.length===0 )\r\n\t\t\treturn undefined;\r\n\t\t\r\n\t\tconst r = c.personalEconomies.filter(x => x.customerId===applicant.customerId);\r\n\t\tif( r.length===1 )\r\n\t\t\treturn r[0];\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tsetTypeOfEmployment(c:Case, personalEconomy: PersonalEconomy, typeOfEmployment:LPEmploymentEnum|undefined): void {\r\n\t\tif( personalEconomy.typeOfEmployment===typeOfEmployment) {\r\n\t\t\treturn; // Already set.\r\n\t\t}\r\n\r\n\t\tpersonalEconomy.typeOfEmployment = typeOfEmployment;\r\n\r\n\t\tif( this.mayHaveIncomeOfEmployment(personalEconomy)) {\r\n\t\t\tif( !this.needsEmployerInformation(personalEconomy) ) {\r\n\t\t\t\tthis.clearEmployerInformation(personalEconomy);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.update(personalEconomy);\r\n\t}\r\n\r\n\tneedsIncomeOfEmployment(personalEconomy: PersonalEconomy): boolean {\r\n\t\tif( personalEconomy.typeOfEmployment===LPEmploymentEnum.PERMANENT\r\n\t\t\t|| personalEconomy.typeOfEmployment===LPEmploymentEnum.TEMPORARY\r\n\t\t\t|| personalEconomy.typeOfEmployment===LPEmploymentEnum.PROBATIONARY\r\n\t\t\t|| personalEconomy.typeOfEmployment===LPEmploymentEnum.PENSION\t\r\n\t\t\t|| personalEconomy.typeOfEmployment===LPEmploymentEnum.STUDENT_AID\r\n\t\t\t|| personalEconomy.typeOfEmployment===LPEmploymentEnum.UNEMPLOYMENT_INSURANCE ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tmayHaveIncomeOfEmployment(personalEconomy: PersonalEconomy): boolean {\r\n\t\tif( personalEconomy.typeOfEmployment===LPEmploymentEnum.SELF_EMPLOYED ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tneedsEmployerInformation(personalEconomy: PersonalEconomy): boolean {\r\n\t\tif( personalEconomy.typeOfEmployment===LPEmploymentEnum.PERMANENT\r\n\t\t\t|| personalEconomy.typeOfEmployment===LPEmploymentEnum.TEMPORARY\r\n\t\t\t|| personalEconomy.typeOfEmployment===LPEmploymentEnum.SELF_EMPLOYED\r\n\t\t\t|| personalEconomy.typeOfEmployment===LPEmploymentEnum.PROBATIONARY \r\n\t\t\t) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tsetYearOfEmployment(personalEconomy: PersonalEconomy, year: number|undefined) {\r\n\t\tpersonalEconomy.yearOfEmployment = year;\r\n\t\tif ( !this.needsMonthOfEmployment(personalEconomy) ) {\r\n\t\t\tpersonalEconomy.monthOfEmployment = undefined;\r\n\t\t}\r\n\t\tthis.update(personalEconomy);\r\n\t}\r\n\r\n\tneedsMonthOfEmployment(personalEconomy: PersonalEconomy): boolean {\r\n\t\tif( !this.needsEmployerInformation(personalEconomy) )\r\n\t\t\treturn false;\r\n\r\n\t\tconst thisYear = new Date().getFullYear();\r\n\t\tif( personalEconomy.yearOfEmployment && personalEconomy.yearOfEmployment>=(thisYear-1) ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tclearEmploymentInformation(personalEconomy: PersonalEconomy):void {\r\n\t\tthis.clearIncomeOfEmployment(personalEconomy);\r\n\t\tthis.clearEmployerInformation(personalEconomy);\r\n\t}\r\n\r\n\tclearIncomeOfEmployment(personalEconomy: PersonalEconomy):void {\r\n\t\tpersonalEconomy.income = undefined;\r\n\t\tthis.update(personalEconomy);\r\n\t}\r\n\r\n\tclearEmployerInformation(personalEconomy: PersonalEconomy):void {\r\n\t\tpersonalEconomy.employer = undefined;\r\n\t\tpersonalEconomy.yearOfEmployment = undefined;\r\n\t\tpersonalEconomy.monthOfEmployment = undefined;\r\n\t\tthis.update(personalEconomy);\r\n\t}\r\n\r\n\thasEmploymentInformation(personalEconomy: PersonalEconomy):boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(personalEconomy.income)\r\n\t\t\t|| g.hasValue(personalEconomy.employer)\r\n\t\t\t|| g.hasValue(personalEconomy.yearOfEmployment)\r\n\t\t\t|| g.hasValue(personalEconomy.monthOfEmployment);\r\n\t}\r\n\r\n\tgetEmploymentDate(pe: PersonalEconomy):Date|undefined {\r\n\t\tif( !this.needsEmployerInformation(pe) )\r\n\t\t\treturn;\r\n\r\n\t\tlet year = pe.yearOfEmployment;\r\n\t\tif( !year )\r\n\t\t\treturn;\r\n\r\n\t\tconst needsMonthOfEmployment = this.needsMonthOfEmployment(pe);\r\n\t\tif( needsMonthOfEmployment && !pe.monthOfEmployment)\r\n\t\t\treturn;\r\n\r\n\t\tlet month = needsMonthOfEmployment?(pe.monthOfEmployment||1):1;\r\n\r\n\t\tlet date = new Date(year, month, 1);\r\n\t\treturn date;\r\n\t}\r\n\r\n\tneedsProofOfEmployment(pe: PersonalEconomy):boolean {\r\n\t\tif( pe.typeOfEmployment===LPEmploymentEnum.PERMANENT ) {\r\n\t\t\tconst date = this.getEmploymentDate(pe);\r\n\t\t\tconst now = new Date();\r\n\t\t\tconst limit = new Date(now.getFullYear()-1, now.getMonth(), now.getDate());\r\n\t\t\tif( date && this.guardService.isAfterDate(date, limit)) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvalidateApplicantPersonalEconomy(c:Case, applicant: Applicant):ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tconst hasPersonalEconomy = this.hasPersonalEconomy(c, applicant);\r\n\t\tvr.add({validator:this.hasPersonalEconomy, object:applicant, ok:hasPersonalEconomy});\r\n\t\tif( hasPersonalEconomy ) {\r\n\t\t\tlet personalEconomy = this.getPersonalEconomy(c, applicant);\r\n\t\t\tif( personalEconomy)\r\n\t\t\t\tvr.addResult(this.validatePersonalEconomy(personalEconomy));\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\thasPersonalEconomy(c:Case, applicant: Applicant): boolean {\r\n\t\tlet r = this.getPersonalEconomy(c, applicant);\r\n\t\treturn r ? true:false;\r\n\t}\r\n\r\n\tprivate validatePersonalEconomy(personalEconomy: PersonalEconomy):ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tlet hasTypeOfEmployement = this.hasTypeOfEmployment(personalEconomy);\r\n\t\tvr.add({validator:this.hasTypeOfEmployment, object:personalEconomy, ok:hasTypeOfEmployement});\r\n\r\n\t\tif( this.needsIncomeOfEmployment(personalEconomy) ) {\r\n\t\t\tvr.add({validator:this.hasIncome, object:personalEconomy, ok:this.hasIncome(personalEconomy)});\r\n\t\t\tif( this.needsEmployerInformation(personalEconomy) ) {\r\n\t\t\t\tthis.validateEmployerInformation(vr, personalEconomy);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if ( this.mayHaveIncomeOfEmployment(personalEconomy) ) {\r\n\t\t\tif( this.hasEmploymentInformation(personalEconomy)) {\r\n\t\t\t\tif( this.needsEmployerInformation(personalEconomy) ) {\r\n\t\t\t\t\tthis.validateEmployerInformation(vr, personalEconomy);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn vr;\r\n\t}\r\n\tprivate validateEmployerInformation(vr:ValidationResult, personalEconomy: PersonalEconomy):void {\r\n\t\tvr.add({validator:this.hasEmployer, object:personalEconomy, ok:this.hasEmployer(personalEconomy)});\r\n\t\tvr.add({validator:this.hasEmploymentYear, object:personalEconomy, ok:this.hasEmploymentYear(personalEconomy)});\r\n\t\tif( this.needsMonthOfEmployment(personalEconomy) ) {\r\n\t\t\tvr.add({validator:this.hasEmploymentMonth, object:personalEconomy, ok:this.hasEmploymentMonth(personalEconomy)});\r\n\t\t}\r\n\t}\r\n\thasTypeOfEmployment(personalEconomy: PersonalEconomy):boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(personalEconomy.typeOfEmployment);\r\n\t}\r\n\thasIncome(personalEconomy: PersonalEconomy):boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isGreaterThanOrEqual(personalEconomy.income, 0);\r\n\t}\r\n\thasEmployer(personalEconomy: PersonalEconomy):boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(personalEconomy.employer, 0);\r\n\t}\r\n\thasEmploymentYear(personalEconomy: PersonalEconomy):boolean {\r\n\t\tconst g = this.guardService;\r\n\t\tconst year = personalEconomy.yearOfEmployment;\r\n\t\tif( g.isNumber(year) && year && year > 1900 ) {\r\n\t\t\tconst thisYear = new Date().getFullYear();\r\n\t\t\tif( year<=thisYear )\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\thasEmploymentMonth(personalEconomy: PersonalEconomy):boolean {\r\n\t\tconst g = this.guardService;\r\n\t\tconst month = personalEconomy.monthOfEmployment;\r\n\t\treturn g.isNumber(month) && month && month>=1 && month<=12 ? true:false;\r\n\t}\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Guarantor, Case } from '../models/SelmaModels';\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { IdService } from './IdService';\r\n\r\n/*\r\nHandles all logic for Guarantor.\r\n*/\r\nexport class GuarantorService extends BaseService {\r\n\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tconstructor(stateService: StateService, smelpoService: SMELPOService,\r\n\t\tguardService: GuardService, private idService:IdService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t}\r\n\r\n\tupdate(guarantor: Guarantor|Case): void {\r\n\t\tthis.stateService.update(guarantor);\r\n\t}\r\n\r\n\tensureMinimumGuarantors(c: Case): void {\r\n\t\tif( !c.guarantors || c.guarantors.length<1 ) {\r\n\t\t\tlet guarantor = this.newGuarantor();\r\n\t\t\tthis.addGuarantor(c, guarantor);\r\n\t\t}\r\n\t}\r\n\r\n\taddGuarantor(c: Case, guarantor:Guarantor): void {\r\n\t\tif( !c.guarantors )\r\n\t\t\tc.guarantors = [];\r\n\r\n\t\tc.guarantors.push(guarantor);\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tnewGuarantor() : Guarantor {\r\n\t\treturn {\r\n\t\t\tid: this.idService.newGuid()\r\n\t\t}\r\n\t}\r\n\r\n\thasGuarantor(c: Case): boolean {\r\n\t\treturn this.guardService.hasLengthGreaterThanZero(c.guarantors);\r\n\t}\r\n\r\n\tremoveGuarantor(c: Case, guarantor: Guarantor) {\r\n\t\tif(!c.guarantors)\r\n\t\t\treturn;\r\n\t\tthis.stateService.listRemove(c.guarantors, guarantor)\r\n\t\tthis.update(guarantor);\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tremoveAllGuarantors(c: Case): void {\r\n\t\tif( !c.guarantors || c.guarantors.length===0 )\r\n\t\t\treturn;\r\n\t\tc.guarantors = undefined;\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tvalidateGuarantor(c: Case, x: Guarantor): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({validator:this.hasName, object:x, ok: this.hasName(x)});\r\n\t\tvr.add({validator:this.hasPhone, object:x, ok: this.hasPhone(x)});\r\n\t\tvr.add({validator:this.hasCustomerId, object:x, ok: this.hasCustomerId(x)});\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateGuarantors(c:Case): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif (c.guarantors) {\r\n\t\t\tc.guarantors?.forEach(x => {\r\n\t\t\t\tvr.addResult(this.validateGuarantor(c, x));\r\n\t\t\t})\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasName(x: Guarantor): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isString(x.name) && this.guardService.hasLengthGreaterThan(x.name, 1);\r\n\t}\r\n\r\n\thasPhone(x: Guarantor): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(x.phone) && this.guardService.hasLengthGreaterThan(x.phone, 5);\r\n\t}\r\n\r\n\thasCustomerId(x: Guarantor): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\tconst ret = x.guarantorCustomerId && g.isString(x.guarantorCustomerId) && g.isValidSsn(x.guarantorCustomerId) ? true : false;\r\n\t\treturn ret;\r\n\t}\r\n}\r\n","import { TextService } from \"../../services/TextService\"\r\n\r\nexport interface UINamed {\r\n\tname: string;\r\n\tnameTextkey: string;\r\n}\r\n\r\nexport function getUIName(uiNamed: UINamed, textService: TextService) : string {\r\n\tvar name = textService.text(uiNamed.nameTextkey);\r\n\tif( name )\r\n\t\treturn name;\r\n\telse\r\n\t\treturn uiNamed.name;\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Case, EUSupport, EUSupportEnum } from '../models/SelmaModels';\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { IdService } from './IdService';\r\nimport { uiEUSupports } from '../models/UiModels';\r\nimport { TextService } from './TextService';\r\nimport { getUIName } from '../models/uimodels/UINamed';\r\n\r\n/*\r\nHandles all logic for EuSupport.\r\n*/\r\nexport class EuSupportService extends BaseService {\r\n\r\n\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tconstructor(stateService: StateService, smelpoService: SMELPOService, \r\n\t\tguardService: GuardService, private idService:IdService, private textService: TextService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t}\r\n\r\n\tupdate(euSupport: EUSupport|Case): void {\r\n\t\tthis.stateService.update(euSupport);\r\n\t}\r\n\r\n\tgetThisYearsEuSupports(c: Case): EUSupport[] {\r\n\t\tif( !c.euSupports )\r\n\t\t\treturn [];\r\n\r\n\t\tconst thisYear = new Date().getFullYear().toString();\r\n\t\treturn c.euSupports.filter(x=> {return x.supportYear && x.supportYear===thisYear})\r\n\t}\r\n\r\n\tensureMinimumEuSupports(c: Case): void {\r\n\t\tif( !c.euSupports )\r\n\t\t\tc.euSupports = [];\r\n\r\n\t\tconst euSupports = this.getThisYearsEuSupports(c);\r\n\t\tif( euSupports.length<1 ) {\r\n\t\t\tlet euSupport = this.newEuSupport();\r\n\t\t\tc.euSupports.push(euSupport);\r\n\t\t\tthis.update(c);\r\n\t\t}\r\n\t}\r\n\r\n\thasEuSupport(c: Case): boolean {\r\n\t\treturn this.guardService.hasLengthGreaterThanZero(c.euSupports);\r\n\t}\r\n\r\n\tremoveAllEuSupports(c: Case): void {\r\n\t\tif( !c.euSupports || c.euSupports.length===0 )\r\n\t\t\treturn;\r\n\t\tc.euSupports = undefined;\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tnewEuSupport() : EUSupport {\r\n\t\tconst thisYear = new Date().getFullYear().toString();\r\n\t\treturn {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t\tsupportYear: thisYear\r\n\t\t}\r\n\t}\r\n\r\n\tvalidateEuSupport(c: Case, x: EUSupport): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({validator:this.hasType, object:x, ok: this.hasType(x)});\r\n\t\tvr.add({validator:this.hasAmount, object:x, ok: this.hasAmount(x)});\r\n\t\tvr.add({validator:this.hasValidYear, object:x, ok: this.hasValidYear(x)});\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasType(x: EUSupport): boolean {\r\n\t\treturn this.guardService.hasValue(x.euType);\r\n\t}\r\n\r\n\thasAmount(x: EUSupport): boolean {\r\n\t\treturn this.guardService.isGreaterThanZero(x.supportAmount);\r\n\t}\r\n\r\n\thasValidYear(x: EUSupport): boolean {\r\n\t\tconst validYear = new Date().getFullYear().toString();\r\n\t\treturn x.supportYear===validYear;\r\n\t}\r\n\r\n\tgetEuTypeDisplayName(euType: EUSupportEnum | undefined): string {\r\n\t\tvar r = uiEUSupports.find(x => x.type===euType);\r\n\t\tif( r)\r\n\t\t\treturn getUIName(r, this.textService);\r\n\t\telse \r\n\t\t\treturn \"\";\r\n\t}\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Case, ExtLoan, Household } from '../models/SelmaModels';\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { ApplicantService } from './ApplicantService';\r\nimport { IdService } from './IdService';\r\nimport { TypeOfLoan } from '../libs/SMELPOClient';\r\n\r\n/*\r\nHandles all logic for ExtLoan.\r\n*/\r\nexport class ExtLoanService extends BaseService {\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tconstructor(stateService: StateService, smelpoService: SMELPOService, \r\n\t\tguardService: GuardService, private applicantService:ApplicantService, private idService:IdService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t} \r\n\r\n\tupdate(extLoan: ExtLoan|Case): void {\r\n\t\tthis.stateService.update(extLoan);\r\n\t}\r\n\r\n\tnewExtLoan() : ExtLoan {\r\n\t\treturn {\r\n\t\t\tid: this.idService.newGuid()\r\n\t\t};\r\n\t}\r\n\t\r\n\taddExtLoan(c: Case, extLoan: ExtLoan) {\r\n\t\tif( !c.extLoans )\r\n\t\t\tc.extLoans = [];\r\n\t\tc.extLoans.push(extLoan); \r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tremoveExtLoan(c: Case, extLoan: ExtLoan): void {\r\n\t\tif (!c.extLoans) \r\n\t\t\treturn;\r\n\t\telse {\r\n\t\t\tthis.stateService.listRemove(c.extLoans, extLoan);\r\n\t\t\tthis.update(c);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tgetExtLoansByCustomerId(c:Case, customerId: string) : ExtLoan[] {\r\n\t\tif( !c.extLoans )\r\n\t\t\treturn [];\r\n\r\n\t\tconst r = c.extLoans.filter(x=>{\r\n\t\t\treturn this.isExtLoanOwner(x, customerId)\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\tremoveExtLoansForHousehold(c: Case, household: Household) {\r\n\t\t// TODO: Only works as long as we have one household!\r\n\t\tif( c.extLoans ) {\r\n\t\t\tthis.stateService.listRemoveAll(c.extLoans);\r\n\t\t\tthis.update(c);\r\n\t\t} \r\n\t}\r\n\r\n\tremoveAllExtLoans(c:Case):void {\r\n\t\tif( c.extLoans ) {\r\n\t\t\tthis.stateService.listRemoveAll(c.extLoans);\r\n\t\t\tthis.update(c);\r\n\t\t} \r\n\t}\r\n\r\n\tremoveLoanOwnerForHousehold(c:Case, household:Household, customerId:string) : void {\r\n\t\tvar extLoans = this.getExtLoansByCustomerId(c, /*household,*/ customerId);\r\n\t\tif( extLoans ) {\r\n\t\t\textLoans.forEach(x => {\r\n\t\t\t\tthis.removeLoanOwner(x, customerId);\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tremoveLoanOwner(extLoan:ExtLoan, customerId:string) : void {\r\n\t\tif( extLoan.loanOwners ) {\r\n\t\t\tif( 0!==this.stateService.listRemoveWhere(extLoan.loanOwners, \r\n\t\t\t\tx => this.guardService.compareCustomerId(x.customerId, customerId)) ) {\r\n\t\t\t\t\tthis.update(extLoan);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisExtLoanOwner(extLoan:ExtLoan, customerId:string) : boolean {\r\n\t\tif( !extLoan.loanOwners )\r\n\t\t\treturn false;\r\n\t\t\r\n\t\tfor( let extLoanMember of extLoan.loanOwners ) {\r\n\t\t\tif( this.guardService.compareCustomerId(extLoanMember.customerId, customerId) )\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvalidateExtLoan(c: Case, x: ExtLoan): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tconst hasType = this.hasType(x);\r\n\t\tvr.add({validator:this.hasType, object:x, ok: hasType});\r\n\t\tif( hasType ) {\r\n\t\t\tvr.add({validator:this.hasValidLoanOwners, object:x, ok: this.hasValidLoanOwners(x)});\r\n\r\n\t\t\tconst isStudentLoan = this.isStudentLoan(x);\r\n\t\t\tif( isStudentLoan ) {\r\n\t\t\t\tvr.add({validator:this.hasMonthlyCost, object:x, ok: this.hasMonthlyCost(x)});\r\n\t\t\t} else {\r\n\t\t\t\tvr.add({validator:this.hasAmount, object:x, ok: this.hasAmount(x)});\r\n\t\t\t\tvr.add({validator:this.hasRedeem, object:x, ok: this.hasRedeem(x)});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasType(x: ExtLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(x.type);\r\n\t}\r\n\r\n\tisStudentLoan(x: ExtLoan):boolean {\r\n\t\treturn x.type==TypeOfLoan.Studieln; // see uiExtLoanTypes\r\n\t}\r\n\r\n\t// Used for student loans. \r\n\thasMonthlyCost(x: ExtLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isGreaterThanZero(x.monthlyCost);\r\n\t}\r\n\r\n\t// Used for everything except student loans. \r\n\thasAmount(x: ExtLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isGreaterThanZero(x.amount);\r\n\t}\r\n\r\n\thasRedeem(x: ExtLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(x.redeemLoan);\r\n\t}\r\n\r\n\thasValidLoanOwners(x: ExtLoan): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(x.loanOwners,0);\r\n\t}\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Case, MaintenanceCost, MaintenanceHouse, Applicant, LoanOwner, Household } from '../models/SelmaModels';\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { ApplicantService } from './ApplicantService';\r\nimport { IdService } from './IdService';\r\nimport { TypeOfHouse } from '../libs/SMELPOClient';\r\n\r\n/*\r\nHandles all logic for MaintenanceCost.\r\n*/\r\nexport class MaintenanceCostService extends BaseService {\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tconstructor(stateService: StateService, smelpoService: SMELPOService, \r\n\t\tguardService: GuardService, private applicantService:ApplicantService, private idService:IdService) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t} \r\n\r\n\tupdate(maintenanceCost: MaintenanceCost|MaintenanceHouse|Case|LoanOwner): void { \r\n\t\tthis.stateService.update(maintenanceCost);\r\n\t}\r\n\r\n\tnewMaintenanceCost(c: Case, applicant:Applicant) : MaintenanceCost {\r\n\t\treturn {\r\n\t\t\tid: this.idService.newGuid(), \r\n\t\t\tcustomerId: applicant.customerId,\r\n\t\t\ttypeofhouses: [\r\n\t\t\t\tthis.newMaintenanceHouse(c)\r\n\t\t\t]\r\n\t\t};\r\n\t}\r\n\r\n\tnewMaintenanceHouse(c: Case) : MaintenanceHouse {\r\n\t\treturn {\r\n\t\t};\r\n\t}\r\n\t\r\n\taddMaintenanceCost(c: Case, maintenanceCost: MaintenanceCost) {\r\n\t\tif( !c.maintenanceCosts )\r\n\t\t\tc.maintenanceCosts = [];\r\n\t\tc.maintenanceCosts.push(maintenanceCost); \r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tremoveMaintenanceCost(c: Case, maintenanceCost: MaintenanceCost): void {\r\n\t\tif (!c.maintenanceCosts) \r\n\t\t\treturn;\r\n\t\telse {\r\n\t\t\tthis.stateService.listRemove(c.maintenanceCosts, maintenanceCost);\r\n\t\t\tthis.update(c);\r\n\t\t}\r\n\t}\r\n\r\n\tremoveMaintenanceCostsForHousehold(c: Case, household: Household) {\r\n\t\t// TODO: Only works as long as we have one household!\r\n\t\tif( c.maintenanceCosts ) {\r\n\t\t\tthis.stateService.listRemoveAll(c.maintenanceCosts);\r\n\t\t\tthis.update(c);\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n\tremoveAllMaintenanceCosts(c: Case) {\r\n\t\tif( c.maintenanceCosts ) {\r\n\t\t\tthis.stateService.listRemoveAll(c.maintenanceCosts);\r\n\t\t\tthis.update(c);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tensureMaintenanceHouse(c:Case, maintenanceCost: MaintenanceCost) : MaintenanceHouse {\r\n\t\tif( !maintenanceCost.typeofhouses)\r\n\t\t\tmaintenanceCost.typeofhouses = [];\r\n\r\n\t\tif( maintenanceCost.typeofhouses.length===0 ) {\r\n\t\t\tmaintenanceCost.typeofhouses.push(this.newMaintenanceHouse(c));\r\n\t\t\tthis.update(maintenanceCost);\r\n\t\t}\r\n\r\n\t\treturn maintenanceCost.typeofhouses[0];\r\n\t}\r\n\r\n\tgetLoanOwnersOwnershipPartSum(maintenanceHouse: MaintenanceHouse):number {\r\n\t\tlet sum = 0;\r\n\t\tif( maintenanceHouse.loanOwners ) {\r\n\t\t\tmaintenanceHouse.loanOwners.forEach(x => {\r\n\t\t\t\tsum += (x.ownershipPart||0);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn sum;\r\n\t}\r\n\r\n\tensureLoanOwner(maintenanceHouse: MaintenanceHouse, customerId: string):LoanOwner {\r\n\t\tif (!maintenanceHouse.loanOwners)\r\n\t\t\tmaintenanceHouse.loanOwners = [];\r\n\t\t\r\n\t\tconst g = this.guardService;\r\n\t\tlet loanOwner = maintenanceHouse.loanOwners.find(x => g.compareCustomerId(x.customerId, customerId));\r\n\t\tif( !loanOwner ) {\r\n\t\t\tconst sum = this.getLoanOwnersOwnershipPartSum(maintenanceHouse);\r\n\t\t\tconst rest = 100-sum;\r\n\t\t\tconst ownershipPart = rest>0?rest:0;\r\n\t\t\tloanOwner = {\r\n\t\t\t\tcustomerId: customerId,\r\n\t\t\t\townershipPart: ownershipPart\r\n\t\t\t}\r\n\t\t\tmaintenanceHouse.loanOwners.push(loanOwner);\r\n\t\t\tthis.update(maintenanceHouse);\r\n\t\t}\r\n\t\treturn loanOwner;\r\n\t}\r\n\r\n\tremoveLoanOwnerForHousehold(c:Case, household:Household, customerId:string) : void {\r\n\t\tvar maintenanceHouses = this.getMaintenanceHousesByCustomerId(c, /*household,*/ customerId);\r\n\t\tif( maintenanceHouses && maintenanceHouses.length ) {\r\n\t\t\tmaintenanceHouses.forEach(x => {\r\n\t\t\t\tthis.removeLoanOwnerByCustomerId(x, customerId);\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tgetMaintenanceHousesByCustomerId(c:Case, customerId: string) : MaintenanceHouse[] {\r\n\t\tif( !c.maintenanceCosts )\r\n\t\t\treturn [];\r\n\t\t\r\n\t\tvar maintenanceHouses:MaintenanceHouse[] = c.maintenanceCosts\r\n\t\t\t.map(x => x.typeofhouses??[])\r\n\t\t\t.flat();\r\n\r\n\t\tconst r = maintenanceHouses.filter(x => {\r\n\t\t\treturn this.isLoanOwner(x, customerId)\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\tisLoanOwner(maintenanceHouse:MaintenanceHouse, customerId:string) : boolean {\r\n\t\tif( !maintenanceHouse.loanOwners )\r\n\t\t\treturn false;\r\n\t\t\r\n\t\tfor( let loanOwner of maintenanceHouse.loanOwners ) {\r\n\t\t\tif( this.guardService.compareCustomerId(loanOwner.customerId, customerId) )\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tremoveLoanOwnerByCustomerId(maintenanceHouse: MaintenanceHouse, customerId:string) : void {\r\n\t\tif( maintenanceHouse.loanOwners ) {\r\n\t\t\tif( 0!==this.stateService.listRemoveWhere(maintenanceHouse.loanOwners, \r\n\t\t\t\tx => this.guardService.compareCustomerId(x.customerId, customerId)) ) {\r\n\t\t\t\t\tthis.update(maintenanceHouse);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveLoanOwner(maintenanceHouse: MaintenanceHouse, loanOwner: LoanOwner):void {\r\n\t\tif( !maintenanceHouse.loanOwners )\r\n\t\t\treturn;\r\n\t\tthis.stateService.listRemove(maintenanceHouse.loanOwners, loanOwner);\r\n\t\tthis.update(maintenanceHouse);\r\n\t}\r\n\r\n\tvalidateMaintenanceCost(c: Case, x: MaintenanceCost): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tvr.add({validator:this.hasCustomerId, object:x, ok: this.hasCustomerId(x)});\r\n\r\n\t\tconst hasTypesOfHouses = this.hasTypesOfHouses(x);\r\n\t\tvr.add({validator:this.hasTypesOfHouses, object:x, ok: hasTypesOfHouses});\r\n\t\tif( hasTypesOfHouses && x.typeofhouses ) {\r\n\t\t\tx.typeofhouses.forEach(h => {\r\n\t\t\t\tvr.addResult(this.validateMaintenanceHouse(c,h));\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tprivate validateMaintenanceHouse(c:Case, h: MaintenanceHouse) : ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tconst hasSetHouseType = this.hasSetHouseType(h);\r\n\t\tvr.add({validator:this.hasSetHouseType, object:h, ok: hasSetHouseType});\r\n\t\tvr.add({validator:this.hasSetKeepHouse, object:h, ok: this.hasSetKeepHouse(h)});\r\n\t\tconst keepHouse = this.hasKeepHouse(h);\r\n\t\tif( hasSetHouseType && keepHouse ) {\r\n\t\t\tif( h.houseType===TypeOfHouse.Hyresrtt ) {\r\n\t\t\t\tvr.add({validator:this.hasMaintenanceCost, object:h, ok: this.hasMaintenanceCost(h)});\r\n\t\t\t} else {\r\n\t\t\t\tif( h.houseType===TypeOfHouse.Bostadsrtt ) {\r\n\t\t\t\t\tvr.add({validator:this.hasMaintenanceCost, object:h, ok: this.hasMaintenanceCost(h)});\r\n\t\t\t\t}\r\n\t\t\t\tvr.add({validator:this.hasSetLoanInOtherInstitute, object:h, ok:this.hasSetLoanInOtherInstitute(h)});\r\n\t\t\t\tif( this.hasLoanInOtherInstitute(h) ) {\r\n\t\t\t\t\tvr.add({validator:this.hasSetRedeemHouseLoan, object:h, ok: this.hasSetRedeemHouseLoan(h)});\r\n\t\t\t\t\tvr.add({validator:this.hasHouseLoanAmount, object:h, ok: this.hasHouseLoanAmount(h)});\r\n\t\t\t\t\tvr.add({validator:this.hasHouseLoanOwners, object:h, ok: this.hasHouseLoanOwners(h)});\r\n\t\t\t\t\tif( h.loanOwners && h.loanOwners.length>0 ) {\r\n\t\t\t\t\t\tlet partSum = 0;\r\n\t\t\t\t\t\th.loanOwners.forEach(lo => {\r\n\t\t\t\t\t\t\tvr.add({validator:this.hasHouseLoanOwnersOwnershipPart, object:lo, ok: this.hasHouseLoanOwnersOwnershipPart(lo)});\r\n\t\t\t\t\t\t\tpartSum += lo.ownershipPart||0;\r\n\t\t\t\t\t\t\tif( partSum > 100 ) {\r\n\t\t\t\t\t\t\t\tvr.add({validator:this.hasHouseLoanOwnersOwnershipPartBelow100InSum, object:lo, ok: false});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\thasHouseLoanOwners(h: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(h.loanOwners, 0);\r\n\t}\r\n\r\n\thasHouseLoanOwnersOwnershipPart(lo: LoanOwner): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isInRange(lo.ownershipPart,0,100) && g.isGreaterThanZero(lo.ownershipPart);\r\n\t}\r\n\r\n\thasHouseLoanOwnersOwnershipPartBelow100InSum(lo: LoanOwner, accumulatedSum:number): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isInRange(lo.ownershipPart,0,100);\r\n\t}\r\n\r\n\thasSetLoanInOtherInstitute(h: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(h.loanInOtherInstitute);\r\n\t}\r\n\r\n\thasLoanInOtherInstitute(h: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(h.loanInOtherInstitute) && h.loanInOtherInstitute===true;\r\n\t}\r\n\r\n\thasMaintenanceCost(h: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isZeroOrGreater(h.maintenanceCost);\r\n\t}\r\n\r\n\thasHouseLoanAmount(h: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.isZeroOrGreater(h.houseLoanAmount);\r\n\t}\r\n\r\n\thasCustomerId(x: MaintenanceCost): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn x.customerId && g.isString(x.customerId) && g.isValidSsn(x.customerId) ? true : false;\r\n\t}\r\n\r\n\thasTypesOfHouses(x: MaintenanceCost): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasLengthGreaterThan(x.typeofhouses, 0);\r\n\t}\r\n\r\n\thasSetHouseType(x: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(x.houseType);\r\n\t}\r\n\r\n\thasSetKeepHouse(x: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(x.keepHouse);\r\n\t}\r\n\r\n\thasKeepHouse(x: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(x.keepHouse) && x.keepHouse===true;\r\n\t}\r\n\r\n\t\r\n\thasSetRedeemHouseLoan(x: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(x.redeemLoan);\r\n\t}\r\n\r\n\thasRedeemHouseLoan(x: MaintenanceHouse): boolean {\r\n\t\tconst g = this.guardService;\r\n\t\treturn g.hasValue(x.redeemLoan) && x.redeemLoan===true;\r\n\t}\r\n\r\n/*\r\n\tgetMaintenanceCostsByHouseholdId(c:Case, householdId: string) : MaintenanceCost[] {\r\n\t\tif( !c.maintenanceCosts )\r\n\t\t\treturn [];\r\n\r\n\t\tconst r = c.maintenanceCosts.filter(x=>{\r\n\t\t\treturn this.isMaintenanceCostOwner(x, customerId)\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\tisMaintenanceCostOwner(maintenanceCost:MaintenanceCost, customerId:string) : boolean {\r\n\t\tif( !maintenanceCost.loanOwners )\r\n\t\t\treturn false;\r\n\t\t\r\n\t\tfor( let maintenanceCostMember of maintenanceCost.householdId ) {\r\n\t\t\tif( maintenanceCostMember.customerId==customerId )\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}*/\r\n}\r\n","import { UIKeyed } from \"./UIKeyed\";\r\nimport { UINamed } from \"./UINamed\";\r\n\r\nexport interface UIAttachmentType extends UIKeyed, UINamed {\r\n}\r\n\r\nexport const uiAttachmentTypes:UIAttachmentType[] = [\r\n\t{ key: 'FORESTRYPLAN', name: \"Skogsbruksplan\", nameTextkey: \"UIAttachmentType_FORESTRYPLAN\" }, // SKOGSBRUKSPLAN\r\n\t{ key: 'PROOFOFEMPLOYMENT', name: \"Anställningsbevis\", nameTextkey: \"UIAttachmentType_PROOFOFEMPLOYMENT\" }, // ANSTÄLLNINGSBEVIS\r\n\t{ key: 'EUSUPPORT', name: \"EU-stöd\", nameTextkey: \"UIAttachmentType_EUSUPPORT\" }, // EU-STÖD\r\n\t{ key: 'COMPANYBUDGET', name: \"Företagsbudget\", nameTextkey: \"UIAttachmentType_COMPANYBUDGET\" }, // Företagsbudget\r\n\t{ key: 'COMPANYTAXRETURN', name: \"Inkomstdeklaration med samtliga bilagor\", nameTextkey: \"UIAttachmentType_COMPANYTAXRETURN\" }, // Inkomstdeklaration med samtliga bilagor\r\n\t{ key: 'COMPANYFINREPORT', name: \"Bokslut med resultat- och balansräkning\", nameTextkey: \"UIAttachmentType_COMPANYFINREPORT\" }, // Bokslut med resultat- och balansräkning \r\n\t{ key: 'ANNUALACCOUNT', name:\"Inkomst med samtliga bilagor eller bokslut med resultat och balansräkning\", nameTextkey: \"UIAttachmentType_ANNUALACCOUNT\"}, // En sammanslagning av COMPANYTAXRETURN och COMPANYFINREPORT\r\n\t{ key: 'BUILDINGESTIMATE', name: \"Byggnadskalkyl\", nameTextkey: \"UIAttachmentType_BUILDINGESTIMATE\" }, // Kalkyl för nybyggnad, utbyggnad, renovering. Se Aims.\r\n\t{ key: 'OTHER', name: \"Övrigt\", nameTextkey: \"UIAttachmentType_OTHER\" } \r\n];\r\n","import { BaseService } from './BaseService';\r\nimport { Case, AttachmentRequest, Attachment } from '../models/SelmaModels';\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { IdService } from './IdService';\r\nimport { ApplicantService } from './ApplicantService';\r\nimport { CompanyService } from './CompanyService';\r\nimport { PersonalEconomyService } from './PersonalEconomyService';\r\nimport { uiAttachmentTypes } from '../models/uimodels/UIAttachmentType';\r\nimport { UiModelConverter } from '../models/UiModelConverter';\r\nimport { EuSupportService } from './EuSupportService';\r\nimport { LoanService } from './LoanService';\r\nimport { CompanyEconomyService } from './CompanyEconomyService';\r\nimport { CollateralService } from './CollateralService';\r\nimport { TextService } from './TextService';\r\nimport { getUIName } from '../models/uimodels/UINamed';\r\nimport { ConfigurationService } from './ConfigurationService';\r\nimport { BudgetService } from './BudgetService';\r\n\r\n/*\r\nHandles all logic for attachments.\r\n*/\r\nexport class AttachmentService extends BaseService {\r\n\r\n\tprivate url: string;\r\n\tpublic budgetService?: BudgetService;\r\n\r\n\tconstructor(\r\n\t\tprivate stateService: StateService,\r\n\t\tprivate smelpoService: SMELPOService,\r\n\t\tprivate guardService: GuardService,\r\n\t\tprivate applicantService: ApplicantService,\r\n\t\tprivate personalEconomyService: PersonalEconomyService,\r\n\t\tprivate companyService: CompanyService,\r\n\t\tprivate companyEconomyService: CompanyEconomyService,\r\n\t\tprivate configurationService: ConfigurationService,\r\n\t\tprivate collateralService: CollateralService,\r\n\t\tprivate idService: IdService,\r\n\t\tprivate loanService: LoanService,\r\n\t\tprivate textService: TextService,\r\n\t\turl: string) {\r\n\t\tsuper();\r\n\t\tthis.url = url + \"/attachments\";\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t}\r\n\r\n\tprivate update(item: Case | AttachmentRequest): void {\r\n\t\tthis.stateService.update(item);\r\n\t}\r\n\r\n\tprivate postFile(\r\n\t\top: string,\r\n\t\trequest: AttachmentRequest,\r\n\t\tc: Case,\r\n\t\tfile: File\r\n\t): Promise {\r\n\t\tvar formData = new FormData();\r\n\r\n\t\tformData.append('customerId', request.customerId || '');\r\n\t\tformData.append('requestType', request.requestType);\r\n\t\tformData.append('requestVariation', request.requestVariation || '');\r\n\t\tformData.append('required', request.required === true ? 'true' : 'false');\r\n\t\tformData.append('processId', c.id);\r\n\t\tformData.append('file', file);\r\n\r\n\t\treturn fetch(this.url + '/' + op, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tcache: 'no-cache',\r\n\t\t\tcredentials: 'include', //include cookies\r\n\t\t\t//mode: 'cors',\r\n\t\t\theaders: {\r\n\t\t\t\tAccept: 'application/json',\r\n\t\t\t\t//'Content-Type': 'application/json'\r\n\t\t\t},\r\n\t\t\tbody: formData,\r\n\t\t})\r\n\t\t\t.then((result) => {\r\n\t\t\t\treturn result.json();\r\n\t\t\t})\r\n\t\t\t.then((result) => {\r\n\t\t\t\tlet postResult: T = result;\r\n\t\t\t\treturn postResult;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate get(op: string): Promise {\r\n\t\treturn fetch(this.url + '/' + op, {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\tcache: 'no-cache',\r\n\t\t\tcredentials: 'include', //include cookies\r\n\t\t\t//mode: 'cors',\r\n\t\t\theaders: {\r\n\t\t\t\t'Accept': 'application/json',\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t},\r\n\t\t\t//body: file\r\n\t\t})\r\n\t\t\t.then(result => {\r\n\t\t\t\treturn result.json();\r\n\t\t\t})\r\n\t\t\t.then((result) => {\r\n\t\t\t\tlet bidResult: T = result;\r\n\t\t\t\treturn bidResult;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate post(op: string): Promise {\r\n\t\treturn fetch(this.url + '/' + op, {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\tcache: 'no-cache',\r\n\t\t\tcredentials: 'include', //include cookies\r\n\t\t\t//mode: 'cors',\r\n\t\t\theaders: {\r\n\t\t\t\t'Accept': 'application/json',\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t},\r\n\t\t\t//body: file\r\n\t\t})\r\n\t\t\t.then(result => {\r\n\t\t\t\treturn result.json();\r\n\t\t\t})\r\n\t\t\t.then((result) => {\r\n\t\t\t\tlet bidResult: T = result;\r\n\t\t\t\treturn bidResult;\r\n\t\t\t});\r\n\t}\r\n\r\n\r\n\tdownloadAttachment(c: Case, attachmentId: string): void {\r\n\t\tthis.redirectToDownloadUrl(c.id, attachmentId);\r\n\t}\r\n\r\n\tremoveAttachment(c: Case, attachmentId: string): Promise {\r\n\t\treturn this.post(\"delete?id=\" + attachmentId + \"&processId=\" + c.id)\r\n\t\t\t.then(result => {\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tif (c.attachments) {\r\n\t\t\t\t\t\tlet a = this.findAttachmentInArray(c.attachments, attachmentId);\r\n\t\t\t\t\t\tif (a) {\r\n\t\t\t\t\t\t\tthis.stateService.listRemove(c.attachments, a);\r\n\t\t\t\t\t\t\tthis.update(c);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn c;\r\n\t\t\t})\r\n\t}\r\n\r\n\tfindAttachmentInArray(attachments: Attachment[], attachmentId: string): Attachment | undefined {\r\n\t\tlet r = attachments.filter(x => {\r\n\t\t\treturn x.id == attachmentId;\r\n\t\t})\r\n\t\tif (r.length === 1)\r\n\t\t\treturn r[0];\r\n\t\telse\r\n\t\t\treturn;\r\n\t}\r\n\r\n\tprivate redirectToDownloadUrl(processId: string, fileId: string) {\r\n\t\tconst protectAgainstPageLeave = this.configurationService.protectAgainstPageLeave();\r\n\t\tif (protectAgainstPageLeave)\r\n\t\t\tthis.configurationService.setProtectAgainstPageLeave(false);\r\n\t\tconst url = this.url + '/' + \"download?processId=\" + encodeURIComponent(processId) + \"&id=\" + encodeURIComponent(fileId);\r\n\t\tdocument.location.href = url;\r\n\t\tif (protectAgainstPageLeave)\r\n\t\t\tthis.configurationService.setProtectAgainstPageLeave(true);\r\n\t}\r\n\r\n\tuploadAttachment(c: Case, attachmentRequest: AttachmentRequest, file: File): Promise {\r\n\t\treturn this.postFile(\"upload\", attachmentRequest, c, file)\r\n\t\t\t.then((result: Attachment) => {\r\n\t\t\t\tif (!c.attachments)\r\n\t\t\t\t\tc.attachments = [];\r\n\t\t\t\tconst a = result;\r\n\t\t\t\tc.attachments.push(a);\r\n\t\t\t\tthis.update(c);\r\n\t\t\t\treturn result;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate addAttachmentRequestNoUpdate(c: Case, attachmentRequest: AttachmentRequest): void {\r\n\t\tif (!c.attachmentRequests)\r\n\t\t\tc.attachmentRequests = [];\r\n\r\n\t\tc.attachmentRequests.push(attachmentRequest);\r\n\t}\r\n\r\n\taddAttachmentRequest(c: Case, attachmentRequest: AttachmentRequest): void {\r\n\t\tthis.addAttachmentRequestNoUpdate(c, attachmentRequest);\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tensureAttachmentRequest(c: Case, attachmentRequest: AttachmentRequest, considerRequestVariation: boolean = true): void {\r\n\t\tif (!c.attachmentRequests) {\r\n\t\t\tc.attachmentRequests = [attachmentRequest];\r\n\t\t} else {\r\n\t\t\tlet ars = this.findAttachmentRequests(c, attachmentRequest.requestType, attachmentRequest.requestVariation, attachmentRequest.customerId, considerRequestVariation);\r\n\t\t\tif (ars.length === 0) {\r\n\t\t\t\tthis.addAttachmentRequest(c, attachmentRequest);\r\n\t\t\t} else {\r\n\t\t\t\tvar ar = ars[0];\r\n\t\t\t\tif (ar.required !== attachmentRequest.required) {\r\n\t\t\t\t\tar.required = attachmentRequest.required; // update missmatching value.\r\n\t\t\t\t\tthis.update(ar);\r\n\t\t\t\t\tthis.update(c);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetAttachmentRequestsByType(c: Case, requestType: string): AttachmentRequest[] | undefined {\r\n\t\tif (!c.attachmentRequests) return;\r\n\t\tlet r = c.attachmentRequests.filter(x => x.requestType === requestType);\r\n\t\treturn r;\r\n\t}\r\n\r\n\tgetAttachmentsByType(c: Case, requestType: string): Attachment[] {\r\n\t\tif (!c.attachments) return [];\r\n\t\tlet r = c.attachments.filter(x => x.requestType === requestType);\r\n\t\treturn r;\r\n\t}\r\n\r\n\tprivate findAttachmentRequests(c: Case, requestType: string, requestVariation: string, customerId: string | undefined, considerRequestVariation: boolean = false): AttachmentRequest[] {\r\n\t\tif (!c.attachmentRequests) return [];\r\n\t\tlet r = c.attachmentRequests.filter(x => {\r\n\t\t\tconst sameRequstVariation = (x.requestVariation || '') == (requestVariation || '');\r\n\t\t\tif (!considerRequestVariation || sameRequstVariation) {\r\n\t\t\t\tif (x.requestType === requestType) {\r\n\t\t\t\t\tif ((customerId || '') == (x.customerId || '')) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\r\n\tfindAttachments(c: Case, requestType: string, requestVariation: string, customerId: string | undefined): Attachment[] {\r\n\t\tif (!c.attachments) return [];\r\n\t\tlet r = c.attachments.filter(x => {\r\n\t\t\t//if( x.requestType===requestType && (x.requestVariation||'')==(requestVariation||'') ) {\r\n\t\t\tif (this.compareEffectiveRequestType(x.requestType || '', requestType)) {\r\n\t\t\t\tif ((customerId || '') == (x.customerId || '')) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\thasAttachments(c: Case, requestType: string, requestVariation: string, customerId: string | undefined): boolean {\r\n\t\tlet r = this.findAttachments(c, requestType, requestVariation, customerId);\r\n\t\tif (r.length > 0)\r\n\t\t\treturn true;\r\n\t\telse\r\n\t\t\treturn false;\r\n\t}\r\n\r\n\tattachmentRequestHasAttachments(c: Case, x: AttachmentRequest): boolean {\r\n\t\tlet r = this.hasAttachments(c, x.requestType, x.requestVariation, x.customerId);\r\n\t\treturn r;\r\n\t}\r\n\r\n\tvalidateAttachmentRequests(c: Case): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif (c.attachmentRequests && c.attachmentRequests.length > 0) {\r\n\t\t\tvr.addResult(this.validateAttachmentRequestsInArray(c, c.attachmentRequests));\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tvalidateAttachmentRequestsByRequestType(c: Case, requestType: string): ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif (c.attachmentRequests && c.attachmentRequests.length > 0) {\r\n\t\t\tlet r = c.attachmentRequests.filter(x => this.compareEffectiveRequestType(x.requestType, requestType));\r\n\t\t\tvr.addResult(this.validateAttachmentRequestsInArray(c, r));\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\t// Returns true if request types are effectively the same.\r\n\tcompareEffectiveRequestType(requestTypeA: string, requestTypeB: string): boolean {\r\n\t\treturn this.getEffectiveRequestType(requestTypeA) == this.getEffectiveRequestType(requestTypeB);\r\n\t}\r\n\r\n\tgetEffectiveRequestType(requestType: string): string {\r\n\t\tif (requestType == \"COMPANYFINREPORT\" || requestType == \"COMPANYTAXRETURN\")\r\n\t\t\treturn \"ANNUALACCOUNT\";\r\n\t\treturn requestType;\r\n\t}\r\n\r\n\tprivate validateAttachmentRequestsInArray(c: Case, attachmentRequests: AttachmentRequest[]): ValidationResult {\r\n\t\tconst vr = new ValidationResult();\r\n\t\tif (attachmentRequests.length > 0) {\r\n\t\t\tattachmentRequests.forEach(x => {\r\n\t\t\t\tif (x.required === true) {\r\n\t\t\t\t\tvr.add({ validator: this.attachmentRequestHasAttachments, object: x, ok: this.attachmentRequestHasAttachments(c, x) });\r\n\t\t\t\t\t//console.log(\"validateAttachmentRequestsInArray\", x, this.attachmentRequestHasAttachments(c, x))\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\r\n\r\n\t/*\r\n\tSSL-103, SSL-80\r\n\tCOMPANYBUDGET - Budget\tOmsättning i företaget = JA, och ej manuellt ifylld budget\r\n\tCOMPANYTAXRETURN - Inkomstdeklaration med samtliga bilagor\tOmsättning i företaget= JA (om inte bokslut är uppladdat)\r\n\tCOMPANYFINREPORT - Bokslut med resultat- och balansräkning \tOmsättning i företaget=JA (och inte inkomstdeklaration är uppladdad)\r\n\tBUILDINGESTIMATE - Kalkyl för utbyggnad\tMinst ett syfte i ärendet är utbyggnad\r\n\tBUILDINGESTIMATE - Kalkyl för renovering\tMinst ett syfte i ärendet är renovering\r\n\tBUILDINGESTIMATE - Kalkyl för nybyggnation\tMinst ett syfte i ärendet är nybyggnation\r\n\tFORESTRYPLAN - Skogsbruksplan\tManuellt, info till kund \"Om det är en skogsfastighet....\" \r\n\tPROOFOFEMPLOYMENT - Anställningsbevis\tHar en ny tjänst - anställd < 12 mån.\r\n\tEUSUPPORT - Beräkningsunderlaget från rådgivningsföretag\tHar angivit EU-stöd som säkerhet\r\n\tEUSUPPORT - Jordbruksverkets mottagningskvitto\tHar angivit EU-stöd som säkerhet\r\n\tEUSUPPORT - Föregående årsbesked från Jordbruksverket\tHar angivit EU-stöd som säkerhet\r\n\tEUSUPPORT - Sammanställning Sam-internet \tHar angivit EU-stöd som säkerhet\r\n\tOTHER - Andra bilagor (*inkl förklaring, typ \"Om du har andra bilagor som kan vara av värde i kreditprövningen kan du även skicka in dessa\".)\tKänner att inget av ovanstående passar in men har behov att bifoga material för att ladda upp dokument.\r\n\t*/\r\n\t/*\r\n\t\"UIAttachmentType_FORESTRYPLAN\": \"Skogsbruksplan\",\r\n\t\"UIAttachmentType_PROOFOFEMPLOYMENT\": \"Anställningsbevis\",\r\n\t\"UIAttachmentType_EUSUPPORT\":\"EU-stöd\",\r\n\t\"UIAttachmentType_COMPANYBUDGET\": \"Företagsbudget\",\r\n\t\"UIAttachmentType_COMPANYTAXRETURN\": \"Inkomstdeklaration med samtliga bilagor\",\r\n\t\"UIAttachmentType_COMPANYFINREPORT\": \"Bokslut med resultat- och balansräkning\",\r\n\t\"UIAttachmentType_BUILDINGESTIMATE\": \"Byggnadskalkyl\",\r\n\t\"UIAttachmentType_OTHER\": \"Övrigt\",\r\n\t\"UIAttachmentType_ANNUALACCOUNT\": \"Inkomst med samtliga bilagor eller bokslut med resultat och balansräkning\",\r\n\t*/\r\n\tensureCorrectAttachmentRequests(c: Case) {\r\n\r\n\t\tif (this.budgetService) {\r\n\t\t\tthis.budgetService.ensureBudgetAttachmentRequests(c);\r\n\t\t}\r\n\r\n\t\t// Inkomstdeklaration med samtliga bilagor\tOmsättning i företaget=JA (om inte bokslut är uppladdat)\r\n\t\t// Bokslut med resultat- och balansräkning \tOmsättning i företaget=JA (och inte inkomstdeklaration är uppladdad)\r\n\t\tif (c.companies && c.companyEconomies) {\r\n\t\t\tconst companyEconomyService = this.companyEconomyService;\r\n\t\t\tc.companies.forEach(company => {\r\n\t\t\t\tconst companyEconomy = companyEconomyService.getCompanyEconomy(c, company);\r\n\t\t\t\tif (!companyEconomy)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tconst hasRevenue = companyEconomyService.hasRevenue(companyEconomy);\r\n\t\t\t\tif (hasRevenue) {\r\n\t\t\t\t\tconst requestVariation = company.name || UiModelConverter.prettyOrgNr(company.orgNumber);\r\n\t\t\t\t\tconst customerId = company.orgNumber;\r\n\r\n\t\t\t\t\t// Begär ANNUALACCOUNT istället för finreport/taxreturn\r\n\t\t\t\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\t\t\tcustomerId: customerId,\r\n\t\t\t\t\t\trequestType: \"ANNUALACCOUNT\",\r\n\t\t\t\t\t\trequestVariation: '',\r\n\t\t\t\t\t\trequired: true\r\n\t\t\t\t\t})\r\n\r\n\r\n\t\t\t\t\t//if( !hasUploadedCompanyTaxReturn ) {\r\n\t\t\t\t\t// this.ensureAttachmentRequest(c, {\r\n\t\t\t\t\t// \tid: this.idService.newGuid(),\r\n\t\t\t\t\t// \t\tcustomerId: customerId,\r\n\t\t\t\t\t// \t\trequestType:\"COMPANYFINREPORT\",\r\n\t\t\t\t\t// \t\trequestVariation: companyFinReportVariationText,\r\n\t\t\t\t\t// \t\trequired: !hasUploadedCompanyTaxReturn\r\n\t\t\t\t\t// })\r\n\t\t\t\t\t//}\r\n\t\t\t\t\t//if( !hasUploadedCompanyFinReport ) {\r\n\t\t\t\t\t// this.ensureAttachmentRequest(c, {\r\n\t\t\t\t\t// \tid: this.idService.newGuid(),\r\n\t\t\t\t\t// \t\tcustomerId: customerId,\r\n\t\t\t\t\t// \t\trequestType:\"COMPANYTAXRETURN\",\r\n\t\t\t\t\t// \t\trequestVariation: companyTaxReturnVariationText,\r\n\t\t\t\t\t// \t\trequired: !hasUploadedCompanyFinReport\r\n\t\t\t\t\t// })\r\n\t\t\t\t\t//}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t// Kalkyl för nybyggnation\tMinst ett syfte i ärendet är nybyggnation\r\n\t\t// Kalkyl för utbyggnad\tMinst ett syfte i ärendet är utbyggnad\r\n\t\t// Kalkyl för renovering\tMinst ett syfte i ärendet är renovering\r\n\t\tif (c.loan && c.loan.aims) {\r\n\t\t\tconst loanService = this.loanService;\r\n\r\n\t\t\tc.loan.aims.forEach(x => {\r\n\t\t\t\tconst needsAttachment = (x.aimCategory == \"Nybyggnad\" || x.aimCategory == \"Renovering\" || x.aimCategory == \"Tillbyggnad\") && x.aimDetail && x.aimDetail != \"\";\r\n\t\t\t\tif (needsAttachment) {\r\n\t\t\t\t\tconst aimCategoryName = loanService.getAimCategoryName(x.aimCategory);\r\n\t\t\t\t\tconst aimDetailName = loanService.getAimDetailName(x.aimCategory, x.aimDetail);\r\n\t\t\t\t\tlet requestVariation = aimCategoryName + \", \" + aimDetailName;\r\n\r\n\t\t\t\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\t\t\tcustomerId: undefined,\r\n\t\t\t\t\t\trequestType: \"BUILDINGESTIMATE\",\r\n\t\t\t\t\t\trequestVariation: requestVariation,\r\n\t\t\t\t\t\trequired: true\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t// Anställningsbevis\tHar en ny tjänst - anställd < 12 mån.\r\n\t\tif (c.applicants) {\r\n\t\t\tc.applicants.forEach(applicant => {\r\n\t\t\t\tconst isPersonOrPersonalCompany = this.applicantService.isPhysicum(c, applicant);\r\n\t\t\t\tif (isPersonOrPersonalCompany) {\r\n\t\t\t\t\tconst pe = this.personalEconomyService.getPersonalEconomy(c, applicant);\r\n\t\t\t\t\tif (pe) {\r\n\t\t\t\t\t\tconst needsProofOfEmployment = this.personalEconomyService.needsProofOfEmployment(pe);\r\n\t\t\t\t\t\tif (needsProofOfEmployment) {\r\n\t\t\t\t\t\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\t\t\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\t\t\t\t\tcustomerId: applicant.customerId,\r\n\t\t\t\t\t\t\t\trequestType: \"PROOFOFEMPLOYMENT\",\r\n\t\t\t\t\t\t\t\trequestVariation: \"\",\r\n\t\t\t\t\t\t\t\trequired: true\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Skogsbruksplan.\r\n\t\tif (c.collaterals && c.collaterals.length > 0) {\r\n\t\t\tconst collateralService = this.collateralService;\r\n\t\t\t// USE IN THE FUTURE.\r\n\t\t\t// c.collaterals.forEach(x => {\r\n\t\t\t// \tconst needsForestryPlan = collateralService.needsForestryPlan(x);\r\n\t\t\t// \tif( needsForestryPlan ) {\r\n\t\t\t// \t\tthis.ensureAttachmentRequest(c,{\r\n\t\t\t// \t\t\tid: this.idService.newGuid(),\r\n\t\t\t// \t\t\t\trequestType:\"FORESTRYPLAN\",\r\n\t\t\t// \t\t\t\trequestVariation: \"Skogsbruksplan\",\r\n\t\t\t// \t\t\t\trequired: true\r\n\t\t\t// \t\t});\r\n\t\t\t// \t}\r\n\t\t\t// })\r\n\r\n\t\t\t// Simple logic. See SSL-419.\r\n\t\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\trequestType: \"FORESTRYPLAN\",\r\n\t\t\t\trequestVariation: \"Skogsbruksplan\",\r\n\t\t\t\trequired: false\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\r\n\t\t// Beräkningsunderlaget från rådgivningsföretag:\tHar angivit EU-stöd som säkerhet\r\n\t\t// Jordbruksverkets mottagningskvitto:\tHar angivit EU-stöd som säkerhet\r\n\t\t// Föregående årsbesked från Jordbruksverket:\tHar angivit EU-stöd som säkerhet\r\n\t\t// Sammanställning Sam-internet: \tHar angivit EU-stöd som säkerhet\r\n\t\tif (c.euSupports && c.euSupports.length > 0) {\r\n\r\n\t\t\tc.euSupports.forEach(x => {\r\n\r\n\t\t\t\t//let variator = \"\"; // TODO: maybe add euType name here.\r\n\r\n\t\t\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\t\trequestType: \"EUSUPPORT\",\r\n\t\t\t\t\trequestVariation: \"Beräkningsunderlag från rådgivningsföretag\",\r\n\t\t\t\t\trequired: true\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// DISME-558 Ändra texter i SME - legacy support for old variation text \"Jordbruksverkets mottagningskvitto\" 20210621 /RH\r\n\t\t\t\t//TODO: Remove the if-statement after 20210921\r\n\t\t\t\tlet hasLegacyBoardOfAgricultureRecieptAttachmentRequest = this.findAttachmentRequests(c, \"EUSUPPORT\", \"Jordbruksverkets mottagningskvitto\", undefined, true).length > 0;\r\n\t\t\t\tif (hasLegacyBoardOfAgricultureRecieptAttachmentRequest == false) {\r\n\t\t\t\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\t\t\trequestType: \"EUSUPPORT\",\r\n\t\t\t\t\t\t//requestVariation:\"Jordbruksverkets mottagningskvitto\",\r\n\t\t\t\t\t\trequestVariation: \"Mottagningskvitto från Jordbruksverket\",\r\n\t\t\t\t\t\trequired: true\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\t\trequestType: \"EUSUPPORT\",\r\n\t\t\t\t\trequestVariation: \"Föregående årsbesked från Jordbruksverket\",\r\n\t\t\t\t\trequired: true\r\n\t\t\t\t});\r\n\r\n\r\n\t\t\t\t// DISME-558 Ändra texter i SME - legacy support for old variation text \"Sammanställning Sam-internet\" 20210621 /RH\r\n\t\t\t\t//TODO: Remove the if-statement after 20210921\r\n\t\t\t\tlet hasLegacySamInternetAttachmentRequest = this.findAttachmentRequests(c, \"EUSUPPORT\", \"Sammanställning Sam-internet\", undefined, true).length > 0;\r\n\t\t\t\tif (hasLegacySamInternetAttachmentRequest == false) {\r\n\t\t\t\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\t\t\trequestType: \"EUSUPPORT\",\r\n\t\t\t\t\t\t//requestVariation: \"Sammanställning Sam-internet\",\r\n\t\t\t\t\t\trequestVariation: \"Sammanställning Sam-internet (samansökan)\",\r\n\t\t\t\t\t\trequired: true\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\t// Övrigt.\r\n\t\tthis.ensureAttachmentRequest(c, {\r\n\t\t\tid: this.idService.newGuid(),\r\n\t\t\trequestType: \"OTHER\",\r\n\t\t\trequestVariation: \"\",\r\n\t\t\trequired: false\r\n\t\t});\r\n\r\n\t\tthis.stateService.update(c);\r\n\t}\r\n\r\n\tgetAttachmentRequestTypeDisplayName(attachmentRequest: AttachmentRequest): string {\r\n\t\tlet name = this.getAttachmentRequestTypeName(attachmentRequest.requestType);\r\n\t\t// if( attachmentRequest.requestVariation && attachmentRequest.requestVariation.length>0 ) {\r\n\t\t// \tname += ', '+attachmentRequest.requestVariation;\r\n\t\t// }\r\n\t\tif (attachmentRequest.customerId && attachmentRequest.customerId.length > 0) {\r\n\t\t\tname += ' ' + this.textService.textOrEmpty(\"For\") + ' ' + UiModelConverter.prettyCustomerId(attachmentRequest.customerId);\r\n\t\t}\r\n\t\treturn name;\r\n\t}\r\n\r\n\tgetAttachmentRequestTypeName(requestType: string): string {\r\n\t\tconst r = uiAttachmentTypes.filter(x => {\r\n\t\t\treturn x.key == requestType;\r\n\t\t});\r\n\t\tif (r.length === 1)\r\n\t\t\treturn getUIName(r[0], this.textService);\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\tgetAttachmentTypeDisplayName(attachment: Attachment): string {\r\n\t\tlet name = this.getAttachmentRequestTypeName(attachment.requestType || '');\r\n\t\t// if( attachment.requestVariation && attachment.requestVariation.length>0 ) {\r\n\t\t// \tname += ' '+attachment.requestVariation;\r\n\t\t// }\r\n\t\tif (attachment.customerId && attachment.customerId.length > 0) {\r\n\t\t\tname += ' ' + this.textService.textOrEmpty(\"For\") + ' ' + UiModelConverter.prettyCustomerId(attachment.customerId);\r\n\t\t}\r\n\t\treturn name;\r\n\t}\r\n\r\n\tfilterRequiredAttachmentRequests(attachmentRequests: AttachmentRequest[] | undefined, required: boolean | undefined): AttachmentRequest[] {\r\n\t\tif (!attachmentRequests || attachmentRequests.length === 0)\r\n\t\t\treturn [];\r\n\t\tif (required == undefined)\r\n\t\t\treturn attachmentRequests;\r\n\t\tlet r = attachmentRequests.filter(x => x.required === required);\r\n\t\treturn r;\r\n\t}\r\n\r\n\tfilterOutAttachments(attachments: Attachment[] | undefined, removeAttachments: any[] | undefined): Attachment[] | undefined {\r\n\t\tif (!attachments || attachments.length === 0 || !removeAttachments || removeAttachments.length === 0)\r\n\t\t\treturn attachments;\r\n\r\n\t\tlet r = attachments.filter(x => {\r\n\t\t\treturn removeAttachments.findIndex(remove => x === remove) === -1;\r\n\t\t})\r\n\t\treturn r;\r\n\t}\r\n\r\n\tfilterOutAttachmentsByRequestType(attachments: Attachment[] | undefined, requestType: string): Attachment[] | undefined {\r\n\t\tif (!attachments || attachments.length === 0)\r\n\t\t\treturn attachments;\r\n\r\n\t\tlet r = attachments.filter(x => {\r\n\t\t\treturn x.requestType != requestType;\r\n\t\t})\r\n\t\treturn r;\r\n\t}\r\n\r\n\tfilterOutAttachmentRequestsByRequestType(attachmentRequests: AttachmentRequest[] | undefined, requestType: string): AttachmentRequest[] | undefined {\r\n\t\tif (!attachmentRequests || attachmentRequests.length === 0)\r\n\t\t\treturn attachmentRequests;\r\n\r\n\t\tlet r = attachmentRequests.filter(x => {\r\n\t\t\treturn x.requestType != requestType;\r\n\t\t})\r\n\t\treturn r;\r\n\t}\r\n\r\n\tgetAttachmentsByAttachmentRequest(c: Case, attachmentRequest: AttachmentRequest): Attachment[] {\r\n\t\tif (!c.attachments)\r\n\t\t\treturn [];\r\n\t\tlet x = attachmentRequest;\r\n\t\tlet r = this.findAttachments(c, x.requestType, x.requestVariation, x.customerId);\r\n\t\treturn r;\r\n\t}\r\n\r\n\tgetAttachmentsByAttachmentRequests(c: Case, attachmentRequests: AttachmentRequest[]): Attachment[] {\r\n\t\tif (!c.attachments)\r\n\t\t\treturn [];\r\n\t\tlet attachments: Attachment[] = [];\r\n\t\tattachmentRequests.forEach(x => {\r\n\t\t\tlet r = this.getAttachmentsByAttachmentRequest(c, x);\r\n\t\t\tif (r.length > 0)\r\n\t\t\t\tr.forEach(y => { attachments.push(y); });\r\n\t\t})\r\n\t\treturn attachments;\r\n\t}\r\n\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport {\r\n\tCase,\r\n\tCompanyEconomy,\r\n\tBudget,\r\n\tBudgetYear,\r\n} from '../models/SelmaModels';\r\nimport { SMELPOService } from './SMELPOService';\r\nimport { StateService } from './StateService';\r\nimport { GuardService } from './GuardService';\r\nimport { IdService } from './IdService';\r\nimport { CompanyEconomyService } from './CompanyEconomyService';\r\nimport { UiModelConverter } from '../models/UiModelConverter';\r\nimport { AttachmentService } from './AttachmentService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\n\r\n/*\r\nHandles all logic for Budget, BudgetYears.\r\n*/\r\nexport class BudgetService extends BaseService {\r\n\r\n\tprivate stateService: StateService;\r\n\tprivate smelpoService: SMELPOService;\r\n\tprivate guardService: GuardService;\r\n\r\n\tconstructor(\r\n\t\tstateService: StateService, \r\n\t\tsmelpoService: SMELPOService,\r\n\t\tguardService: GuardService, \r\n\t\tprivate idService: IdService,\r\n\t\tprivate companyEconomyService: CompanyEconomyService,\r\n\t\tprivate attachmentService: AttachmentService\r\n\t) {\r\n\t\tsuper();\r\n\t\tthis.stateService = stateService;\r\n\t\tthis.smelpoService = smelpoService;\r\n\t\tthis.guardService = guardService;\r\n\t}\r\n\r\n\tupdate(companyEconomy: Case | CompanyEconomy | Budget | BudgetYear): void {\r\n\t\tthis.stateService.update(companyEconomy);\r\n\t}\r\n\r\n\tgetBudgetByCompanyEconomy(c:Case, companyEconomy:CompanyEconomy) : Budget|undefined {\r\n\t\tif( !c.budgets )\r\n\t\t\treturn;\r\n\t\tconst r = c.budgets.filter(x => x.companyEconomyId===companyEconomy.id);\r\n\t\tif( r.length===1 ) \r\n\t\t\treturn r[0];\r\n\t\telse\r\n\t\t\treturn;\r\n\t}\r\n\r\n\tensureBudgetsForAllCompanyEconomies(c: Case): void {\r\n\t\tif( !c.companyEconomies )\r\n\t\t\treturn;\r\n\t\tc.companyEconomies.forEach(x => {\r\n\t\t\tthis.ensureBudget(c, x);\r\n\t\t})\r\n\t}\r\n\r\n\tensureBudget(c: Case, companyEconomy:CompanyEconomy): Budget {\r\n\t\tlet budget = this.getBudgetByCompanyEconomy(c, companyEconomy);\r\n\t\tif( !budget ) {\r\n\t\t\tbudget = {\r\n\t\t\t\tcompanyEconomyId: companyEconomy.id\r\n\t\t\t};\r\n\t\t\tthis.addBudget(c,budget);\r\n\t\t}\r\n\r\n\t\tthis.ensureRequiredBudgetYears(companyEconomy, budget);\r\n\t\treturn budget;\r\n\t}\r\n\r\n\taddBudget(c: Case, budget: Budget):void {\r\n\t\tif (!c.budgets) {\r\n\t\t\tc.budgets = [];\r\n\t\t}\r\n\t\tthis.stateService.listAdd(c.budgets, budget);\r\n\t\tthis.update(c);\r\n\t}\r\n\r\n\tremoveBudget(c: Case, budget: Budget):void {\r\n\t\tif (!c.budgets)\r\n\t\t\treturn;\r\n\r\n\t\tthis.stateService.listRemove(c.budgets, budget);\r\n\t\tthis.stateService.update(c);\r\n\t}\r\n\r\n\t// TODO: Different budget year requirements for different types of companies?\r\n\tprivate getRequiredYearsOfBudget(): number[] {\r\n\t\tconst thisYear = new Date().getFullYear();\r\n\t\tconst minYearsOfBudget = 2;\r\n\t\tconst firstYear = thisYear;\r\n\t\tconst lastYear = thisYear + minYearsOfBudget-1;\r\n\r\n\t\tlet years: number[] = [];\r\n\t\tfor (let year = firstYear; year <= lastYear; year++) {\r\n\t\t\tyears.push(year);\r\n\t\t}\r\n\t\treturn years;\r\n\t}\r\n\r\n\tgetRequiredBudgetYears(\r\n\t\tbudget: Budget\r\n\t): { year: number; budgetYear: BudgetYear | undefined }[] {\r\n\t\tlet years = this.getRequiredYearsOfBudget();\r\n\t\tlet r = years.map((year) => {\r\n\t\t\treturn {\r\n\t\t\t\tyear: year,\r\n\t\t\t\tbudgetYear: this.getBudgetYearByYear(budget, year),\r\n\t\t\t};\r\n\t\t});\r\n\t\treturn r;\r\n\t}\r\n\r\n\tprivate ensureRequiredBudgetYears(\r\n\t\tcompanyEconomy: CompanyEconomy,\r\n\t\tbudget: Budget\r\n\t): void {\r\n\t\tthis.getRequiredYearsOfBudget().forEach((year) => {\r\n\t\t\tthis.ensureBudgetYear(companyEconomy, budget, year);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate ensureBudgetYear(\r\n\t\tcompanyEconomy: CompanyEconomy,\r\n\t\tbudget: Budget,\r\n\t\tyear: number\r\n\t): BudgetYear {\r\n\t\tlet budgetYear: BudgetYear | undefined;\r\n\t\tif (!budget.budgetYears) budget.budgetYears = [];\r\n\t\telse budgetYear = this.getBudgetYearByYear(budget, year);\r\n\t\tif (!budgetYear) {\r\n\t\t\tbudgetYear = {\r\n\t\t\t\tyear: year,\r\n\t\t\t};\r\n\t\t\tbudget.budgetYears.push(budgetYear);\r\n\t\t\tthis.update(budgetYear);\r\n\t\t\tthis.update(companyEconomy);\r\n\t\t}\r\n\t\treturn budgetYear;\r\n\t}\r\n\r\n\tgetBudgetYearByYear(budget: Budget, year: number): BudgetYear | undefined {\r\n\t\tif (!budget.budgetYears) return;\r\n\t\tlet brs = budget.budgetYears.filter((x) => x.year === year);\r\n\t\tif (brs.length === 1) {\r\n\t\t\treturn brs[0];\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tensureBudgetAttachmentRequests(c:Case) {\r\n\t\tif( c.companies ) {\r\n\t\t\tc.companies.forEach(company => {\r\n\t\t\t\t\r\n\t\t\t\tlet v = company.name||UiModelConverter.prettyOrgNr(company.orgNumber);\r\n\r\n\t\t\t\tlet years = this.getRequiredYearsOfBudget();\r\n\t\t\t\tyears.forEach(year => { \r\n\t\t\t\t\tconst requestVariation = v + \", år \" + year;\r\n\t\t\t\t\tthis.attachmentService.ensureAttachmentRequest(c, {\r\n\t\t\t\t\t\tid: this.idService.newGuid(),\r\n\t\t\t\t\t\tcustomerId: company.orgNumber,\r\n\t\t\t\t\t\trequestType:\"COMPANYBUDGET\",\r\n\t\t\t\t\t\trequestVariation: requestVariation\r\n\t\t\t\t\t});\r\n\t\t\t\t})\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tvalidateBudgets(c: Case): ValidationResult {\r\n\t\tconst vr = new ValidationResult();\r\n\t\tif( c.companyEconomies ) {\r\n\t\t\tc.companyEconomies.forEach(companyEconomy => {\r\n\t\t\t\tconst companyEconomyHasBudget = this.companyEconomyHasBudget(c, companyEconomy);\r\n\t\t\t\tvr.add({object:companyEconomy, validator:this.companyEconomyHasBudget, ok: companyEconomyHasBudget});\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n\r\n\tcompanyEconomyHasBudget(c:Case, companyEconomy: CompanyEconomy):boolean {\r\n\t\treturn this.getBudgetByCompanyEconomy(c, companyEconomy)!==undefined;\r\n\t}\r\n\r\n}\r\n","import { BaseService } from './BaseService';\r\nimport { Case, Summary } from '../models/SelmaModels';\r\nimport { StateService } from './StateService';\r\nimport { ValidationResult } from '../utils/ValidationResult';\r\nimport { GuardService } from './GuardService';\r\nimport { IdService } from './IdService';\r\nimport { CaseIdStatus } from '../libs/SMELPOClient';\r\n\r\n/*\r\nHandles all logic for Summary.\r\n*/\r\nexport class SummaryService extends BaseService {\r\n\tconstructor(private stateService: StateService, \r\n\t\tprivate guardService: GuardService, private idService:IdService) {\r\n\t\tsuper();\r\n\t} \r\n\r\n\t\r\n\tupdate(x: Summary|Case): void {\r\n\t\tthis.stateService.update(x);\r\n\t}\r\n\r\n\tensureSummary(c:Case) : Summary {\r\n\t\tif( !c.summary ) {\r\n\t\t\tc.summary = {\r\n\t\t\t}\r\n\t\t\tthis.update(c.summary);\r\n\t\t}\r\n\t\treturn c.summary;\r\n\t}\r\n\r\n\tcanApproveCase(c:Case) : boolean {\r\n\t\treturn this.hasCheckedSummaryApproveInformationHandling(c)\r\n\t\t\t&& this.hasCheckedSummaryGuranteeCorrectInformation(c);\r\n\t}\r\n\r\n\thasCheckedSummaryApproveInformationHandling(c:Case) : boolean {\r\n\t\tif( c.status===CaseIdStatus.STARTEDBYAPPLICANT && c.summary ) {\r\n\t\t\treturn c.summary.approveInformationHandling===true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thasCheckedSummaryGuranteeCorrectInformation(c:Case) : boolean {\r\n\t\tif( c.status===CaseIdStatus.STARTEDBYAPPLICANT && c.summary ) {\r\n\t\t\treturn c.summary.guaranteeCorrectInformation===true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thasSentCaseToApproval(c:Case) : boolean {\r\n\t\tif( c.status!==CaseIdStatus.STARTEDBYAPPLICANT ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvalidateSummary(c:Case) : ValidationResult {\r\n\t\tlet vr = new ValidationResult();\r\n\t\tif( c.status===CaseIdStatus.STARTEDBYAPPLICANT ) {\r\n\t\t\tvr.add({validator:this.hasCheckedSummaryApproveInformationHandling, object:c, ok: this.hasCheckedSummaryApproveInformationHandling(c)});\r\n\t\t\tvr.add({validator:this.hasCheckedSummaryGuranteeCorrectInformation, object:c, ok: this.hasCheckedSummaryGuranteeCorrectInformation(c)});\r\n\t\t\t//vr.add({validator:this.hasSentCaseToApproval, object:c, ok: this.hasSentCaseToApproval(c)});\r\n\t\t} else if( c.status===CaseIdStatus.READYFOROFFICER || c.status===CaseIdStatus.CLOSEDBYOFFICER ) {\r\n\t\t\tvr.add({validator:this.hasSentCaseToApproval, object:c, ok: this.hasSentCaseToApproval(c)});\r\n\t\t}\r\n\t\treturn vr;\r\n\t}\r\n}\r\n","import { BaseService } from \"./BaseService\";\r\nimport { GuardService } from \"./GuardService\";\r\n\r\nexport class ConvertService extends BaseService {\r\n\tprivate guard:GuardService;\r\n\r\n\tconstructor(guardService:GuardService) {\r\n\t\tsuper();\r\n\t\tthis.guard = guardService;\r\n\t}\r\n\r\n\tnumberToIntegerThousandSeparatedString(value: number, separator: string = \"\\u0020\"): string {\r\n\t\tif (this.guard.isUndefined(value) || value === null)\r\n\t\t\treturn \"\";\r\n\r\n\t\tvar v = Math.round(value);\r\n\r\n\t\tif (v > -1000 && v < 1000)\r\n\t\t\treturn value.toString();\r\n\r\n\t\tvar str = value.toString();\r\n\r\n\t\t// Add thousands separator. \r\n\t\t// Originally it was the unicode character \"\\u2009\" == THIN SPACE\r\n\t\t// but it was replaced with a regular space \"\\u0200\" since Safari on iOS\r\n\t\t// couldn't render thin space.\r\n\t\tfor (var i = str.length - 3; i > 0; i -= 3) {\r\n\t\t\tstr = str.substring(0, i) + separator + str.substring(i);\r\n\t\t}\r\n\r\n\t\treturn str;\r\n\t}\r\n\r\n\tintegerThousandSeparatedStringToNumber(value: string): number|null {\r\n\t\tif (this.guard.isUndefined(value) || value === null)\r\n\t\t\treturn null;\r\n\r\n\t\tvalue = value.replace(/\\D/g, \"\");\r\n\r\n\t\tvar num = parseFloat(value);\r\n\t\tif (isNaN(num))\r\n\t\t\treturn null;\r\n\r\n\t\treturn num;\r\n\t}\r\n\r\n\t// Takes an ssn on any form. returns it in normalized form: YYYYMMDDNNNN.\r\n\ttoNormalizedSsn(ssn: string): string {\r\n\t\tif (!this.guard.isString(ssn))\r\n\t\t\treturn ssn;\r\n\t\tif (ssn.length === 12) // YYYYMMDDNNNN\r\n\t\t\treturn ssn;\r\n\t\tif (ssn.length === 13) // YYYYMMDD-NNNN\r\n\t\t\treturn ssn.replace(/-/, \"\");\r\n\t\tif (ssn.length === 10)// YYMMDDNNNN\r\n\t\t\treturn \"19\" + ssn;\r\n\t\tif (ssn.length === 11)// YYMMDD-NNNN\r\n\t\t\treturn \"19\" + ssn.replace(/-/, \"\");\r\n\t\treturn ssn;\r\n\t}\r\n\r\n\t// Takes an ssn on any form. returns it in normalized form: YYYYMMDD-NNNN.\r\n\ttoPrettyNormalizedSsn(ssn: string): string {\r\n\t\tif (!this.guard.isString(ssn))\r\n\t\t\treturn ssn;\r\n\t\tssn = this.toNormalizedSsn(ssn);\r\n\t\tif (ssn.length === 12) // YYYYMMDDNNNN\r\n\t\t\tssn = ssn.substr(0, 8) + \"-\" + ssn.substr(8, 4); // YYYYMMDD-NNNN\r\n\t\treturn ssn;\r\n\t}\r\n\r\n\tgetSsnDate(ssn: string): Date|null {\r\n\t\tif (!ssn || ssn.length === 0)\r\n\t\t\treturn null;\r\n\r\n\t\tssn = this.toNormalizedSsn(ssn.replace('-', ''));\r\n\t\tif (ssn.length !== 12)\r\n\t\t\treturn null;\r\n\r\n\t\tlet year = parseInt(ssn.substr(0, 4));\r\n\t\tlet month = parseInt(ssn.substr(4, 2));\r\n\t\tlet day = parseInt(ssn.substr(6, 2));\r\n\r\n\t\treturn new Date(year, month, day);\r\n\t}\r\n\r\n\tgetAgeByDate(date: Date, now?: Date):number {\r\n\t\tif (!now)\r\n\t\t\tnow = new Date();\r\n\r\n\t\tvar ageDifMs = now.getTime() - date.getTime();\r\n\t\tvar ageDate = new Date(ageDifMs); // miliseconds from epoch\r\n\t\treturn Math.abs(ageDate.getUTCFullYear() - 1970);\r\n\t}\r\n\r\n\tgetAgeBySsn(ssn: string): number {\r\n\t\tlet ssnDate = this.getSsnDate(ssn);\r\n\t\tif (!ssnDate)\r\n\t\t\treturn -9999;\r\n\r\n\t\treturn this.getAgeByDate(ssnDate);\r\n\t}\r\n\r\n\ttoIsoDateString(value: Date): string {\r\n\t\tlet yyyy = value.getFullYear().toString();\r\n\t\tlet mm = (value.getMonth() + 1).toString(); // getMonth() is zero-based \r\n\t\tlet dd = value.getDate().toString();\r\n\t\treturn yyyy + \"-\" + (mm[1] ? mm : \"0\" + mm[0]) + \"-\" + (dd[1] ? dd : \"0\" + dd[0]) + \"T00:00:00.000Z\";\r\n\t}\r\n\r\n\t\r\n\tformatBytes = (bytes:number, decimals:number = 0): string => {\r\n\t\tif (bytes === 0) return '0 bytes';\r\n\r\n\t\tconst k = 1000;\r\n\t\tconst dm = decimals < 0 ? 0 : decimals;\r\n\t\tconst sizes = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n\r\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\r\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\r\n\t}\r\n}","import { UiLanguageService } from '../services/UiLanguageService';\r\nimport { SessionService } from '../services/SessionService';\r\nimport { SMELPOService } from '../services/SMELPOService';\r\nimport { BIDLoginService } from '../services/BIDLoginService';\r\nimport { TextService } from '../services/TextService';\r\nimport { ConfigurationService, Configuration } from '../services/ConfigurationService';\r\nimport { GuardService } from '../services/GuardService';\r\nimport { StateService } from '../services/StateService';\r\nimport { CaseService } from '../services/CaseService';\r\nimport { ApplicantService } from '../services/ApplicantService';\r\nimport { StepService } from '../services/StepService';\r\nimport { CompanyEconomyService } from '../services/CompanyEconomyService';\r\nimport { CompanyService } from '../services/CompanyService';\r\nimport { LoanService } from '../services/LoanService';\r\nimport { HouseholdService } from '../services/HouseholdService';\r\nimport { CollateralService } from '../services/CollateralService';\r\nimport { IdService } from '../services/IdService';\r\nimport { ArrayService } from '../services/ArrayService';\r\nimport { PersonalEconomyService } from '../services/PersonalEconomyService';\r\nimport { GuarantorService } from '../services/GuarantorService';\r\nimport { EuSupportService } from '../services/EuSupportService';\r\nimport { ExtLoanService } from '../services/ExtLoanService';\r\nimport { MaintenanceCostService } from '../services/MaintenanceCostService';\r\nimport { AttachmentService } from '../services/AttachmentService';\r\nimport { BudgetService } from '../services/BudgetService';\r\nimport { SummaryService } from '../services/SummaryService';\r\nimport { ConvertService } from '../services/ConvertService';\r\n\r\nexport class Application {\r\n\r\n\tservices: ApplicationServices;\r\n\r\n\tprivate constructor() {\r\n\t\tthis.services = {} as ApplicationServices;\r\n\t}\r\n\r\n\tstatic instance: Application;\r\n\tstatic alloc(): Application {\r\n\t\treturn this.instance = new Application();\r\n\t}\r\n\r\n\tinit(): Promise {\r\n\t\tconst stateService = new StateService();\r\n\t\tconst configurationService = new ConfigurationService(stateService);\r\n\r\n\t\tlet configuration: Configuration;\r\n\t\tlet textService: TextService;\r\n\t\treturn configurationService.load(\"/config.json\")\r\n\t\t\t.then(result => {\r\n\t\t\t\tconfiguration = result;\r\n\r\n\t\t\t\tconst uiLanguageService = new UiLanguageService(configurationService);\r\n\t\t\t\ttextService = new TextService(stateService, uiLanguageService);\r\n\t\t\t\tconst loadingTexts = textService.useLanguage(\"sv-SE\");\r\n\t\t\t\treturn loadingTexts;\r\n\r\n\t\t\t}).then(uiLanguage => {\r\n\t\t\t\tconst bidLoginService = new BIDLoginService(configuration.bidBaseUrl);\r\n\t\t\t\tconst sessionService = new SessionService(stateService, bidLoginService, configurationService);\r\n\t\t\t\tconst smelpoService = new SMELPOService(configuration.lpBaseUrl, sessionService);\r\n\t\t\t\tconst guardService = new GuardService();\r\n\t\t\t\tconst idService = new IdService();\r\n\t\t\t\tconst arrayService = new ArrayService();\r\n\t\t\t\tconst convertService = new ConvertService(guardService);\r\n\t\t\t\tguardService.convertService = convertService;\r\n\t\t\t\tconst applicantService = new ApplicantService(stateService, smelpoService, guardService, idService, configurationService);\r\n\t\t\t\tconst personalEconomyService = new PersonalEconomyService(stateService, smelpoService, guardService, idService);\r\n\t\t\t\tconst loanService = new LoanService(this, stateService, smelpoService, guardService);\r\n\t\t\t\tconst caseService = new CaseService(stateService, smelpoService, guardService, applicantService, idService, sessionService, configurationService);\r\n\t\t\t\tconst collateralService = new CollateralService(stateService, smelpoService, guardService, idService);\r\n\t\t\t\tconst guarantorService = new GuarantorService(stateService, smelpoService, guardService, idService);\r\n\t\t\t\tconst euSupportService = new EuSupportService(stateService, smelpoService, guardService, idService, textService);\r\n\t\t\t\tconst householdService = new HouseholdService(stateService, smelpoService, guardService, applicantService, idService);\r\n\t\t\t\tapplicantService.householdService = householdService;\r\n\t\t\t\tconst extLoanService = new ExtLoanService(stateService, smelpoService, guardService, applicantService, idService);\r\n\t\t\t\tconst maintenanceCostService = new MaintenanceCostService(stateService, smelpoService, guardService, applicantService, idService);\r\n\t\t\t\tconst companyService = new CompanyService(stateService, smelpoService, guardService, idService, applicantService, convertService);\r\n\t\t\t\tapplicantService.companyService = companyService;\r\n\t\t\t\thouseholdService.companyService = companyService;\r\n\t\t\t\thouseholdService.extLoanService = extLoanService;\r\n\t\t\t\thouseholdService.maintenanceCostService = maintenanceCostService;\r\n\t\t\t\tconst companyEconomyService = new CompanyEconomyService(stateService, smelpoService, guardService, caseService, companyService, idService, applicantService);\r\n\t\t\t\tcompanyService.companyEconomyService = companyEconomyService;\r\n\t\t\t\tconst attachmentService = new AttachmentService(stateService, smelpoService, guardService, applicantService, personalEconomyService,\r\n\t\t\t\t\tcompanyService, companyEconomyService, configurationService, collateralService, idService, loanService, textService, configuration.smeBaseUrl);\r\n\t\t\t\tcaseService.attachmentService = attachmentService;\r\n\t\t\t\tconst budgetService = new BudgetService(stateService, smelpoService, guardService, idService, companyEconomyService, attachmentService);\r\n\t\t\t\tcompanyEconomyService.budgetService = budgetService;\r\n\t\t\t\tattachmentService.budgetService = budgetService;\r\n\t\t\t\tconst summaryService = new SummaryService(stateService, guardService, idService);\r\n\t\t\t\tconst stepService = new StepService(this, textService);\r\n\r\n\t\t\t\tthis.services = {\r\n\t\t\t\t\tstateService: stateService,\r\n\t\t\t\t\tconfigurationService: configurationService,\r\n\t\t\t\t\ttextService: textService,\r\n\t\t\t\t\tsessionService: sessionService,\r\n\t\t\t\t\tguardService: guardService,\r\n\t\t\t\t\tidService: idService,\r\n\t\t\t\t\tarrayService: arrayService,\r\n\t\t\t\t\tconvertService: convertService,\r\n\t\t\t\t\tcaseService: caseService,\r\n\t\t\t\t\tloanService: loanService,\r\n\t\t\t\t\tapplicantService: applicantService,\r\n\t\t\t\t\tpersonalEconomyService: personalEconomyService,\r\n\t\t\t\t\thouseholdService: householdService,\r\n\t\t\t\t\tmaintenanceCostService: maintenanceCostService,\r\n\t\t\t\t\textLoanService: extLoanService,\r\n\t\t\t\t\tcollateralService: collateralService,\r\n\t\t\t\t\tguarantorService: guarantorService,\r\n\t\t\t\t\teuSupportService: euSupportService,\r\n\t\t\t\t\tcompanyService: companyService,\r\n\t\t\t\t\tcompanyEconomyService: companyEconomyService,\r\n\t\t\t\t\tbudgetService: budgetService,\r\n\t\t\t\t\tattachmentService: attachmentService,\r\n\t\t\t\t\tsummaryService: summaryService,\r\n\t\t\t\t\tstepService: stepService,\r\n\r\n\t\t\t\t} as ApplicationServices;\r\n\t\t\t\treturn this.services;\r\n\t\t\t}).then(services => {\r\n\t\t\t\tstateService.state.loaded = true;\r\n\t\t\t\tstateService.update(stateService.state);\r\n\t\t\t\t//return this.services.sessionService.loadSession();\r\n\t\t\t}).then(() => {\r\n\t\t\t\treturn this;\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\nexport interface ApplicationServices {\r\n\tstateService: StateService;\r\n\tconfigurationService: ConfigurationService;\r\n\ttextService: TextService;\r\n\tsessionService: SessionService;\r\n\tidService: IdService;\r\n\tarrayService: ArrayService;\r\n\tconvertService: ConvertService;\r\n\tguardService: GuardService;\r\n\tcaseService: CaseService;\r\n\tapplicantService: ApplicantService;\r\n\tpersonalEconomyService: PersonalEconomyService;\r\n\tloanService: LoanService;\r\n\tcompanyService: CompanyService;\r\n\tcompanyEconomyService: CompanyEconomyService;\r\n\tbudgetService: BudgetService;\r\n\tcollateralService: CollateralService;\r\n\tguarantorService: GuarantorService;\r\n\teuSupportService: EuSupportService;\r\n\thouseholdService: HouseholdService;\r\n\tmaintenanceCostService: MaintenanceCostService;\r\n\textLoanService: ExtLoanService;\r\n\tattachmentService: AttachmentService;\r\n\tsummaryService: SummaryService;\r\n\tstepService: StepService;\r\n}\r\n\r\n","import { Component } from 'react';\r\n\r\nexport abstract class BaseComponent \r\n\textends Component {\r\n\t\tconstructor(props:TProps) {\r\n\t\t\tsuper(props);\r\n\t\t}\r\n}","import { BaseComponent } from './BaseComponent';\r\nimport { Application } from '../models/AppModels';\r\nimport { Objserver, ObsCallback } from '../utils/Objserver';\r\n\r\ninterface TExtendedState {\r\n\trefreshed?: Date;\r\n}\r\n\r\nexport abstract class AppComponent\r\n\textends BaseComponent {\r\n\r\n\tprotected application: Application;\r\n\r\n\tconstructor(props: TProps) {\r\n\t\tsuper(props);\r\n\t\tthis.application = Application.instance;\r\n\t}\r\n\r\n\tonUnmount(func):void {\r\n\t\tlet cwu = this.componentWillUnmount;\r\n\t\tthis.componentWillUnmount = function () {\r\n\t\t\tif (cwu) cwu();\r\n\t\t\tfunc();\r\n\t\t}\r\n\t}\r\n\r\n\tobserveUpdate(obj: any):void {\r\n\t\tthis.specificObserveUpdate(\r\n\t\t\tApplication.instance.services.stateService.stateObjserver, obj);\r\n\t}\r\n\tobserveDeepUpdate(obj: any):void {\r\n\t\tthis.specificObserveDeepUpdate(\r\n\t\t\tApplication.instance.services.stateService.stateObjserver, obj);\r\n\t}\r\n\r\n\tobserve(obj: any, func: ObsCallback):void {\r\n\t\tthis.specificObserve(\r\n\t\t\tApplication.instance.services.stateService.stateObjserver, obj, func);\r\n\t}\r\n\tobserveDeep(obj: any, func: ObsCallback):void {\r\n\t\tthis.specificObserveDeep(\r\n\t\t\tApplication.instance.services.stateService.stateObjserver, obj, func);\r\n\t}\r\n\r\n\tprotected refresh():void {\r\n\t\tthis.setState({\r\n\t\t\trefreshed: new Date()\r\n\t\t});\r\n\t}\r\n\r\n\tprivate specificObserveUpdate(objserver: Objserver, obj: any):void {\r\n\t\tconst t = this;\r\n\t\tthis.observe(obj, (event) => {\r\n\t\t\tt.setState({\r\n\t\t\t\trefreshed: new Date()\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n\tprivate specificObserveDeepUpdate(objserver: Objserver, obj: any):void {\r\n\t\tconst t = this;\r\n\t\tthis.observeDeep(obj, (event) => {\r\n\t\t\tt.setState({\r\n\t\t\t\trefreshed: new Date()\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n\r\n\tprivate specificObserve(objserver: Objserver, obj: any, func: ObsCallback):void {\r\n\t\tif (!obj)\r\n\t\t\treturn;\r\n\t\tlet unobserve = objserver.observe(obj, func);\r\n\t\tthis.onUnmount(unobserve);\r\n\t}\r\n\tprivate specificObserveDeep(objserver: Objserver, obj: any, func: ObsCallback):void {\r\n\t\tif (!obj)\r\n\t\t\treturn;\r\n\t\tlet unobserve = objserver.observeDeep(obj, func);\r\n\t\tthis.onUnmount(unobserve);\r\n\t}\r\n\r\n}\r\n","import React from 'react';\r\nimport { AppComponent } from '../../AppComponent';\r\n\r\ninterface Props {\r\n\tk: string;\r\n\tclassName?: string;\r\n}\r\n\r\n// Displays a translated HTML fragment in the DOM.\r\nexport class THtml extends AppComponent {\r\n\tstatic defaultProps = {\r\n\t\tclassName: 'Thtml',\r\n\t};\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t}\r\n\trender() {\r\n\t\tconst textService = this.application.services.textService;\r\n\t\tconst t = textService && textService.text(this.props.k);\r\n\t\tif (t && t.length > 0) {\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport { AppComponent } from '../../AppComponent';\r\n\r\ninterface Props {\r\n\tk: string;\r\n}\r\n\r\n// Displays a translated text in the DOM.\r\nexport class T extends AppComponent {\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t}\r\n\trender() {\r\n\t\tlet textService = this.application.services.textService;\r\n\t\treturn (\r\n\t\t\t<>{textService && textService.textOrEmpty(this.props.k)}\r\n\t\t);\r\n\t}\r\n}\r\n\r\n","import React from 'react';\r\nimport './Bottom.scss';\r\nimport { THtml } from '../../widget/display/THtml';\r\nimport { withRouter, RouteComponentProps } from 'react-router-dom';\r\nimport { Row, Col } from 'react-flexbox-grid';\r\nimport { T } from '../../widget/display/T';\r\n\r\ninterface Props extends RouteComponentProps { }\r\n\r\nconst Bottom: React.FunctionComponent = (props) => {\r\n\t// No footer on case or admin pages\r\n\tconst path = props.location.pathname;\r\n\tif (path === \"/case\" || path === \"/admin\") return null;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default withRouter(Bottom);\r\n","/* eslint-disable react/display-name */\r\nimport React from 'react';\r\nimport BrowserDetection from 'react-browser-detection';\r\nimport './BirdLoader.scss';\r\n\r\nexport enum gifBackground {\r\n\t'white' = 'white',\r\n\t'hintOfRedGray' = 'hintOfRedGray',\r\n\t'waferGray' = 'waferGray',\r\n\t'botticelliBlue' = 'botticelliBlue'\r\n}\r\n\r\ninterface Props {\r\n\tgifBackground?: gifBackground;\r\n}\r\n\r\nexport const BirdLoader: React.FunctionComponent = (props) => {\r\n\tconst browserHandler = {\r\n\t\tie: () => {\r\n\t\t\tswitch (props.gifBackground) {\r\n\t\t\t\tcase 'hintOfRedGray':\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\tcase 'waferGray':\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\tcase 'botticelliBlue':\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t}\r\n\t\t},\r\n\t\tdefault: () =>
,\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{browserHandler}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nBirdLoader.defaultProps = {\r\n\tgifBackground: gifBackground.white,\r\n};\r\n","import React from 'react';\r\nimport { BaseComponent } from '../BaseComponent';\r\nimport {\r\n\tBirdLoader,\r\n\tgifBackground,\r\n} from '../widget/display/BirdLoader/BirdLoader';\r\nimport './LoadingPage.scss';\r\n\r\ninterface Props {}\r\n\r\nexport class LoadingPage extends BaseComponent {\r\n\tinterval;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = { showLoadingAnimation: false };\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.interval = setTimeout(() => {\r\n\t\t\tthis.setState({\r\n\t\t\t\tshowLoadingAnimation: true,\r\n\t\t\t});\r\n\t\t}, 500);\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tclearTimeout(this.interval);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{this.state.showLoadingAnimation ? (\r\n\t\t\t\t\t\r\n\t\t\t\t) : null}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport './PageContent.scss';\r\n\r\nexport enum PageStyle {\r\n\tGray,\r\n\tTransparent,\r\n\tBlue\r\n}\r\n\r\ninterface Props {\r\n\tstyle: PageStyle;\r\n\tclassName?: string;\r\n}\r\n\r\nexport const PageContent: React.FunctionComponent = (props) => {\r\n\tconst classNames = ClassNames(\r\n\t\t'PageContent',\r\n\t\tprops.className,\r\n\t\tPageStyle[props.style]\r\n\t);\r\n\r\n\treturn
{props.children}
;\r\n};\r\n","/* eslint-disable react/prop-types */\r\nimport React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport { Application } from '../../../../models/AppModels';\r\nimport './Button.scss';\r\n\r\ninterface Props {\r\n\tlabelTextkey?: string;\r\n\tlabel?:string;\r\n\tclassName?: string;\r\n\tid?: string;\r\n\tname?: string;\r\n\tonClick?: React.MouseEventHandler; //(React.MouseEvent) => void;\r\n\ttype?: 'submit' | 'reset' | 'button';\r\n\tvalue?: string | number;\r\n\tstyle?: 'normal' | 'round' | 'link' | 'icon';\r\n\tenabled?: boolean;\r\n\ttitle?: string | undefined;\r\n\tautofocus?: boolean;\r\n}\r\n\r\nexport const Button: React.FunctionComponent = (props) => {\r\n\tconst className = ClassNames(\r\n\t\tprops.className, {\r\n\t\tround: props.style === 'round',\r\n\t\tlink: props.style === 'link',\r\n\t\ticon: props.style === 'icon'\r\n\t});\r\n\r\n\tlet label = (props.labelTextkey?Application.instance.services.textService.textOrEmpty(props.labelTextkey):'');\r\n\tif( props.label ) {\r\n\t\tif( label.length===0)\r\n\t\t\tlabel = props.label;\r\n\t\telse\r\n\t\t\tlabel += ' ' + props.label;\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{props.style === 'round' ? null : (\r\n\t\t\t\t{label}\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n};\r\n\r\n\r\n\r\n// Default props\r\nButton.defaultProps = {\r\n\tenabled: true,\r\n\tclassName: 'Button',\r\n\ttype: 'button',\r\n\tstyle: 'normal',\r\n\tautofocus: false,\r\n};\r\n","import React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport './FormUnit.scss';\r\n\r\nexport enum FormUnitPadding {\r\n\tNone = 'PaddingNone',\r\n\tSmall = 'PaddingSmall',\r\n\tNormal = 'PaddingNormal',\r\n\tLarge = 'PaddingLarge',\r\n\tXL = 'PaddingXL',\r\n}\r\n\r\nexport enum FormUnitSize {\r\n\tXlarge = 'SizeXLarge',\r\n\tLarge = 'SizeLarge',\r\n\tNormal = 'SizeNormal',\r\n\tSmall = 'SizeSmall',\r\n\tXSmall = 'SizeXSmall',\r\n}\r\n\r\nexport enum FormLeftMargin {\r\n\tNone = 'LeftMarginNone',\r\n\tNormal = 'LeftMarginNormal',\r\n}\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tpadding?: FormUnitPadding;\r\n\tleftMargin?: FormLeftMargin;\r\n\tsize?: FormUnitSize;\r\n\tflex?: boolean;\r\n}\r\n \r\nexport const FormUnit: React.FunctionComponent = (props) => {\r\n const classNames = ClassNames(\r\n\t\t\tprops.className,\r\n\t\t\tprops.size,\r\n\t\t\tprops.padding,\r\n\t\t\tprops.leftMargin,\r\n\t\t\t{ 'Flex': props.flex }\r\n\t\t);\r\n\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{props.children}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nFormUnit.defaultProps = {\r\n\tflex: false,\r\n\tclassName: 'FormUnit',\r\n\tsize: FormUnitSize.Normal,\r\n\tpadding: FormUnitPadding.Normal,\r\n\tleftMargin: FormLeftMargin.None\r\n};\r\n","import React from 'react';\r\nimport './Loader.scss';\r\nimport { T } from '../T';\r\nimport { BirdLoader, gifBackground } from '../BirdLoader/BirdLoader';\r\n\r\ninterface Props {\r\n\tloaderTextKey?: string;\r\n}\r\nexport const Loader: React.FunctionComponent = (props) => {\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{props.loaderTextKey ? (\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t) : null}\r\n\t\t
\r\n\t);\r\n};\r\n\r\n// Default props\r\nLoader.defaultProps = {\r\n\tloaderTextKey: undefined,\r\n};\r\n","import React from 'react';\r\nimport { AppComponent } from '../AppComponent';\r\nimport { Button } from '../widget/input/Button/Button';\r\nimport { FormUnit, FormUnitPadding, FormUnitSize } from '../layout/FormUnit/FormUnit';\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\nimport { NumberFormatValues } from 'react-number-format';\r\nimport { BidLoginResult, BIDLoginService } from '../../services/BIDLoginService';\r\nimport { Loader } from '../widget/display/Loader/Loader';\r\nimport { THtml } from '../widget/display/THtml';\r\nimport QRCode from 'qrcode.react';\r\n\r\nimport './LoginPage.scss';\r\n\r\nconst LoginStateCancelled = ['Aborted', 'LoadingSession', 'LoginFailed_MustContact', 'LoginFailed_TooYoung'];\r\n\r\ninterface Props extends RouteComponentProps { }\r\n\r\ninterface State {\r\n\tssn: string;\r\n\tdevice: string;\r\n\tloginToken: string;\r\n\tloginStateCode: string;\r\n\tloginStart: number; // time in ms.\r\n\tloginErrorCount: number;\r\n\tqrCode: string;\r\n}\r\n\r\nclass BankIdLogin extends AppComponent {\r\n\tguardService = this.application.services.guardService;\r\n\tsessionService = this.application.services.sessionService;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tssn: '',\r\n\t\t\tdevice: '',\r\n\t\t\tloginStateCode: '',\r\n\t\t\tloginToken: '',\r\n\t\t\tloginStart: 0,\r\n\t\t\tloginErrorCount: 0,\r\n\t\t\tqrCode: ''\r\n\t\t};\r\n\t}\r\n\tssnChange = (values: NumberFormatValues) => {\r\n\t\tlet val = values.formattedValue;\r\n\t\tif (!val) val = '';\r\n\t\tthis.setState({ ssn: val });\r\n\t};\r\n\thandleLoginResult(promise: Promise): Promise {\r\n\t\tthis.setState({ loginErrorCount: 0 });\r\n\r\n\t\treturn promise.then((result) => {\r\n\t\t\tif (!result.success) {\r\n\t\t\t\t// if (result.tooYoung) {\r\n\t\t\t\t// \tthis.setLoginStateCode('LoginFailed_TooYoung');\r\n\t\t\t\t// } else if (result.mustContact) {\r\n\t\t\t\t// \tthis.setLoginStateCode('LoginFailed_MustContact');\r\n\t\t\t\t// } else {\r\n\t\t\t\tthis.setLoginStateCode('LoginFailed');\r\n\t\t\t\t//}\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.setState({\r\n\t\t\t\t\tloginStateCode: 'LoginStarted',\r\n\t\t\t\t\tloginToken: result.token,\r\n\t\t\t\t\tloginStart: new Date().getTime(),\r\n\t\t\t\t});\r\n\t\t\t\t// Start loop to see if user has completed BankId login process.\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.checkLoginStatus();\r\n\t\t\t\t}, 4000);\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.collect();\r\n\t\t\t\t}, 1000);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}, (error) => {\r\n\t\t\tthis.setLoginStateCode('LoginFailed');\r\n\t\t\treturn error;\r\n\t\t});\r\n\t}\r\n\tcollect = () => {\r\n\t\tif (LoginStateCancelled.includes(this.state.loginStateCode)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst otherDevice = this.state.device === 'OTHER';\r\n\t\tif (!otherDevice) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst autostartToken = this.state.loginToken;\r\n\t\tconst hasAutostartToken = autostartToken && autostartToken.length > 0;\r\n\t\tif (!hasAutostartToken) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.sessionService\r\n\t\t\t.collect(autostartToken)\r\n\t\t\t.then((result) => {\r\n\t\t\t\tif (!result.success) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setState({ qrCode: result.data });\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.collect();\r\n\t\t\t\t}, 1000);\r\n\t\t\t});\r\n\t}\r\n\tcheckLoginStatus() {\r\n\t\tif (LoginStateCancelled.includes(this.state.loginStateCode)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.sessionService\r\n\t\t\t.checkLoginState(this.state.loginToken)\r\n\t\t\t.then((result) => {\r\n\t\t\t\tlet code = result.status;\r\n\t\t\t\tif (code === 'Complete' && !result.isComplete) code = 'NotComplete';\r\n\r\n\t\t\t\tif (code === 'Error') {\r\n\t\t\t\t\tconst errorsSoFar = this.state.loginErrorCount;\r\n\t\t\t\t\tif (errorsSoFar > 5) {\r\n\t\t\t\t\t\tresult.isAborted = true; // abort.\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthis.setState({ loginErrorCount: errorsSoFar + 1 }); // increase error count.\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Auto abort after 60s.\r\n\t\t\t\tlet timeNow = new Date().getTime();\r\n\t\t\t\tif (timeNow - this.state.loginStart > 60000) {\r\n\t\t\t\t\tresult.isAborted = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setLoginStateCode(code);\r\n\r\n\t\t\t\tif (code === 'ContactBank') {\r\n\t\t\t\t\tthis.setLoginStateCode('LoginFailed_MustContact');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if (code === 'TooYoung') {\r\n\t\t\t\t\tthis.setLoginStateCode('LoginFailed_TooYoung');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if (result.isAborted) {\r\n\t\t\t\t\tthis.setLoginStateCode('Aborted');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if (result.isComplete) {\r\n\t\t\t\t\tthis.redirectAfterOkLogin();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tthis.checkLoginStatus();\r\n\t\t\t\t\t}, 2000);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\tsetLoginDevice = (other: boolean): void => {\r\n\t\tthis.setState({ device: other ? 'OTHER' : 'SAME' });\r\n\t};\r\n\tsetLoginStateCode = (code: string): void => {\r\n\t\tif (this.state.loginStateCode !== code)\r\n\t\t\tthis.setState({ loginStateCode: code });\r\n\t};\r\n\tredirectAfterOkLogin = (): void => {\r\n\t\tthis.setLoginStateCode('LoadingSession');\r\n\t\tthis.sessionService.loadSession().then((result) => {\r\n\t\t\tthis.props.history.push('/');\r\n\t\t});\r\n\t}\r\n\tloginMobile = () => {\r\n\t\tthis.setLoginDevice(true);\r\n\t\tthis.handleLoginResult(\r\n\t\t\tthis.sessionService.loginMobile(this.state.ssn)\r\n\t\t);\r\n\t};\r\n\tloginLocal = () => {\r\n\t\tthis.setLoginDevice(false);\r\n\t\tthis.handleLoginResult(\r\n\t\t\tthis.sessionService.loginLocal(this.state.ssn)\r\n\t\t);\r\n\t};\r\n\tstartLoginManually = () => {\r\n\t\tconst autostartToken = this.state.loginToken;\r\n\t\tif (autostartToken)\r\n\t\t\tthis.sessionService.loginWithAutostartToken(autostartToken);\r\n\t};\r\n\tcancelLogin = () => {\r\n\t\tthis.setLoginStateCode('Aborted');\r\n\t\tthis.setState({ loginToken: '' });\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst loginStateCode = this.state.loginStateCode;\r\n\t\tconst canLogin =\r\n\t\t\t!loginStateCode ||\r\n\t\t\tloginStateCode === '' ||\r\n\t\t\tloginStateCode === 'LoginFailed' ||\r\n\t\t\tloginStateCode === 'Aborted' ||\r\n\t\t\tloginStateCode === 'LoginFailed_TooYoung' ||\r\n\t\t\tloginStateCode === 'LoginFailed_MustContact';\r\n\t\tconst isLoggingIn = loginStateCode && loginStateCode.length && !canLogin;\r\n\t\tconst otherDevice = this.state.device === 'OTHER';\r\n\t\tconst sameDevice = !otherDevice;\r\n\t\tconst autostartToken = this.state.loginToken;\r\n\t\tconst hasAutostartToken = autostartToken && autostartToken.length > 0;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t{!isLoggingIn && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{isLoggingIn && otherDevice && hasAutostartToken && this.state.qrCode &&\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{/*
*/}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{isLoggingIn && sameDevice && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\r\n\t\t\t\t

\r\n\t\t\t\t\t{isLoggingIn && otherDevice && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'LoginStarted' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'LoginFailed' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'LoginFailed_TooYoung' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'LoginFailed_MustContact' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'Aborted' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'LoadingSession' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'NotComplete' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/*Operation is returning complete but not done.*/}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'Complete' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/*Operation is complete*/}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'UserSign' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/*App has started. Waiting for user to enter PIN or password*/}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'OutstandingTransaction' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/*Waiting for the app to start.*/}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'NoClient' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/*Waiting for the app to start.*/}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'UserReq' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/*Not used*/}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{loginStateCode === 'Started' && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/*App has started, but no eID has not been opened yet*/}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t

\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t{isLoggingIn && sameDevice && hasAutostartToken &&\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t{isLoggingIn &&\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withRouter(BankIdLogin);\r\n","import React from 'react';\r\nimport './Required.scss';\r\n\r\nexport const Required: React.FunctionComponent = (props) => {\r\n\treturn (\r\n\t\t<> *\r\n\t);\r\n};\r\n","import React from 'react';\r\nimport Tooltip from 'react-tooltip-lite';\r\nimport { THtml } from '../THtml';\r\n\r\nimport './Help.scss';\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tdirection?: string;\r\n\teventOff?: string;\r\n\teventOn?: string;\r\n\teventToggle?: string;\r\n\tforceDirection?: boolean;\r\n\thelpTextkey?: string;\r\n\thelpText?: string;\r\n\ttipContentHover?: boolean;\r\n\tuseHover?: boolean;\r\n}\r\n\r\nexport const Help: React.FunctionComponent = (props) => {\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\t\t{props.helpTextkey && } \r\n\t\t\t\t\t{props.helpText}\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\tdirection={props.direction}\r\n\t\t\tdistance={15}\r\n\t\t\teventOn={props.eventOn}\r\n\t\t\teventOff={props.eventOff}\r\n\t\t\teventToggle={props.eventToggle}\r\n\t\t\tforceDirection={props.forceDirection}\r\n\t\t\thoverDelay={100}\r\n\t\t\tpadding=\"0\"\r\n\t\t\ttagName=\"div\"\r\n\t\t\ttipContentHover={props.tipContentHover}\r\n\t\t\tuseDefaultStyles={false}\r\n\t\t\tuseHover={props.useHover}>\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n}\r\n\r\nHelp.defaultProps = {\r\n\tclassName: 'Help',\r\n\tdirection: 'down',\r\n\teventOn: '',\r\n\teventOff: '',\r\n\teventToggle: '',\r\n\tforceDirection: false,\r\n\ttipContentHover: true,\r\n\tuseHover: true,\r\n};\r\n","import React from 'react';\r\nimport { T } from '../T';\r\nimport { Application } from '../../../../models/AppModels';\r\nimport { Required } from '../Required/Required';\r\nimport { Help } from '../Help/Help';\r\nimport './Heading.scss';\r\n\r\ninterface Props {\r\n\tlevel:number; \r\n\tlabelTextkey?: string;\r\n\tlabelText?: string;\r\n\thelpTextkey?: string;\r\n\thelpText?: string;\r\n\tclassName?: string; \r\n\trequired?: boolean; // adds a marker for required fields\r\n}\r\n\r\nexport const Heading: React.FunctionComponent = (props) => {\r\n\r\n\tconst hasValidHelpTextkey =\r\n\t\tprops.helpTextkey && Application.instance.services.textService.text(props.helpTextkey)\r\n\t\t\t? true\r\n\t\t\t: false;\r\n\r\n\r\n\tconst helpTextkey = props.helpTextkey || props.labelTextkey + \"_Help\";\r\n\tconst helpText = props.helpText;\r\n\r\n\tlet content = () => {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{props.labelTextkey && }\r\n\t\t\t\t{props.labelText && props.labelText}\r\n\t\t\t\t{props.required && }\r\n\t\t\t\t{(hasValidHelpTextkey || helpText) && (\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tconst level = props.level;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t{level===1 &&

{content()}

}\r\n\t\t{level===2 &&

{content()}

}\r\n\t\t{level===3 &&

{content()}

}\r\n\t\t{level===4 &&

{content()}

}\r\n\t\t\r\n\t);\r\n};\r\n\r\n// Default props\r\nHeading.defaultProps = {\r\n\tclassName: 'Heading',\r\n};\r\n","import React from 'react';\r\nimport './InfoBox.scss';\r\nimport { THtml } from '../THtml';\r\nimport ClassNames from 'classnames';\r\n\r\nexport enum InfoBoxIcon {\r\n\t'warning'='warning-icon',\r\n\t'info'='info-icon'\r\n}\r\n\r\ninterface Props {\r\n\ticon: InfoBoxIcon;\r\n\tclassName?: string;\r\n\ttextkey?: string;\r\n\ttext?: string;\r\n\tvisible?: boolean;\r\n}\r\n\r\nexport const InfoBox: React.FunctionComponent = (props) => {\r\n\tif(!props.text && !props.textkey) \r\n\t\treturn null;\r\n\r\n\tif(props.visible === false)\r\n\t\treturn null;\r\n\r\n\tconst className = ClassNames(\r\n\t\t'InfoBox',\r\n\t\tprops.className,\r\n\t\tprops.icon\r\n\t);\r\n\r\n\tconst getContent = () => {\r\n\t\tif (props.textkey) {\r\n\t\t\treturn \r\n\t\t} else if (props.text) {\r\n\t\t\treturn

{props.text}

\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{getContent()}\r\n\t\t
\r\n\t);\r\n};\r\n\r\n// Default props\r\nInfoBox.defaultProps = {\r\n\tvisible: true,\r\n};\r\n","import React from 'react';\r\nimport { AppComponent } from '../AppComponent';\r\nimport { PageContent, PageStyle } from '../layout/PageContent/PageContent';\r\nimport { THtml } from '../widget/display/THtml';\r\nimport { Redirect, RouteComponentProps, withRouter } from 'react-router-dom';\r\nimport BankIdLogin from './BankIdLogin';\r\nimport './LoginPage.scss';\r\nimport { Heading } from '../widget/display/Heading/Heading';\r\nimport { InfoBox, InfoBoxIcon } from '../widget/display/InfoBox/InfoBox';\r\n\r\n\r\ninterface Props extends RouteComponentProps{\r\n}\r\n\r\nclass LoginPage extends AppComponent {\r\n\tsessionService = this.application.services.sessionService;\r\n\ttextService = this.application.services.textService;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst isLoggedIn = this.sessionService.isLoggedIn();\r\n\t\tif (isLoggedIn) \r\n\t\t\treturn \r\n\t\t\tlet infoTextKey = 'Login_InfoMessage';\r\n\t\t\tlet warningTextKey = 'Login_WarningMessage';\r\n\r\n\t\t\tlet showInfoMessage = this.textService.nilsEmptyOrDefault(infoTextKey, '') !== '';\r\n\t\t\tlet showWarningMessage = this.textService.nilsEmptyOrDefault(warningTextKey, '') !== '';\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withRouter(LoginPage);\r\n","import React from 'react';\r\nimport { useSpring, animated } from 'react-spring';\r\nimport ClassNames from 'classnames';\r\n\r\nimport './StatusIndicator.scss';\r\n\r\ninterface ProgressCircleProps {\r\n\tchildren: object;\r\n\tflipped: boolean;\r\n};\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tordinal: number;\r\n\tprogress: number;\r\n\ticon?: string;\r\n\tsize: number;\r\n\tisCurrentStep?: boolean;\r\n}\r\n\r\n\r\nfunction stepCompleteIcon(progress): React.ReactNode {\r\n\tif (progress >= 1) {\r\n\t\treturn
;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction round(value:number, precision:number):number {\r\n\tif (Number.isInteger(precision)) {\r\n\t\tvar shift = Math.pow(10, precision);\r\n\t\treturn Math.round(value * shift) / shift;\r\n\t} else {\r\n\t\treturn Math.round(value);\r\n\t}\r\n}\r\n\r\nexport const StatusIndicator: React.FunctionComponent = (props) => {\r\n\tconst strokeWidth = round(props.size * 0.08, 0);\r\n\tconst circleRadius = props.size / 2 - strokeWidth;\r\n\tconst statusIndicatorSizePx = `${props.size}px`;\r\n\tconst circleCenter = props.size / 2;\r\n\tconst circleCenterPx = `${circleCenter}px`;\r\n\tconst ordinalFontSize = `${round(circleCenter * 0.92, 0)}px`;\r\n\tconst circleRadiusPx = `${circleRadius}px`;\r\n\r\n\tconst max = round(Math.PI * circleRadius * 2, 2);\r\n\tconst current = round(max - max * props.progress, 2);\r\n\r\n\tconst StatusIndicatorClassName = ClassNames(props.className);\r\n\r\n\tconst iconClassName = ClassNames('icon', props.icon);\r\n\r\n\tconst isComplete = props.progress >= 1;\r\n\tconst isCurrent = props.isCurrentStep;\r\n\r\n\tconst ordinalClassName = ClassNames('ordinal', {\r\n\t\tcomplete: isComplete,\r\n\t\tcurrent: isCurrent\r\n\t});\r\n\r\n\tconst circleClassName = ClassNames('circle', {\r\n\t\tcomplete: isComplete,\r\n\t\tcurrent: isCurrent\r\n\t});\r\n\r\n\t// Other animations are handled using CSS\r\n\tconst animationProps = useSpring({ x: current, from: {x: max} });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{props.ordinal}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{props.icon ? (\r\n\t\t\t\t
\r\n\t\t\t) : (\r\n\t\t\t\tstepCompleteIcon(props.progress)\r\n\t\t\t)}\r\n\t\t
\r\n\t);\r\n};\r\n\r\n\r\n// Default props\r\nStatusIndicator.defaultProps = {\r\n\tclassName: 'StatusIndicator',\r\n\ticon: '',\r\n\tsize: 48,\r\n\tisCurrentStep: false,\r\n};\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Classnames from 'classnames';\r\nimport './Modal.scss';\r\nimport { Button } from '../../widget/input/Button/Button';\r\n\r\nexport enum OverlayStyles {\r\n\t'Transparent' = 'Transparent',\r\n\t'Darken' = 'Darken',\r\n}\r\n\r\ninterface Props {\r\n\tmodalClassName?: string;\r\n\toverlayClassName?: string;\r\n\toverlayStyle?: OverlayStyles;\r\n\toverlayCloseOnClick?: boolean;\r\n\thandleClose?: (event: React.MouseEvent | React.MouseEvent) => void;\r\n}\r\n\r\nexport const Modal: React.FunctionComponent = (props) => {\r\n\tconst modalDomHandle = document.getElementById('modal-root');\r\n\r\n\tconst overlayClassNames = Classnames(\r\n\t\tprops.overlayClassName,\r\n\t\tprops.overlayStyle\r\n\t);\r\n\r\n\tconst handleOverlayClick = (event: React.MouseEvent) => {\r\n\t\tif (props.overlayCloseOnClick && props.handleClose) {\r\n\t\t\tprops.handleClose(event);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleCloseButtonClick = (\r\n\t\tevent: React.MouseEvent\r\n\t) => {\r\n\t\tif (props.handleClose) {\r\n\t\t\tprops.handleClose(event);\r\n\t\t}\r\n\t};\r\n\r\n\treturn ReactDOM.createPortal(\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t{props.children}\r\n\t\t\t
\r\n\t\t
,\r\n\t\tmodalDomHandle\r\n\t);\r\n};\r\n\r\nModal.defaultProps = {\r\n\tmodalClassName: 'Modal',\r\n\toverlayClassName: 'ModalOverlay',\r\n\toverlayStyle: OverlayStyles.Darken,\r\n\toverlayCloseOnClick: true,\r\n};\r\n","import React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport './ButtonGroup.scss';\r\n\r\nexport enum ButtonGroupLayout {\r\n\t'Stretch' = 'Stretch',\r\n\t'Nowrap' = 'Nowrap',\r\n}\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tlayout?: ButtonGroupLayout;\r\n}\r\n\r\nexport const ButtonGroup: React.FunctionComponent = (props) => {\r\n\tconst classNames = ClassNames(props.className, {\r\n\t\tStretch: props.layout === 'Stretch',\r\n\t\tNowrap: props.layout === 'Nowrap',\r\n\t});\r\n\r\n\treturn
{props.children}
;\r\n};\r\n\r\nButtonGroup.defaultProps = {\r\n\tlayout: undefined,\r\n\tclassName: 'ButtonGroup',\r\n};\r\n","import React, { useState } from 'react';\r\nimport { T } from '../../display/T';\r\nimport { Application } from '../../../../models/AppModels';\r\nimport { Button } from '../Button/Button';\r\nimport { Modal, OverlayStyles } from '../../../layout/Modal/Modal';\r\nimport { ButtonGroup, ButtonGroupLayout } from '../ButtonGroup/ButtonGroup';\r\n\r\nimport './DeleteButton.scss';\r\n\r\ninterface Props {\r\n\tlabelTextkey: string;\r\n\tlabel?: string;\r\n\tquestionTextkey?: string;\r\n\tonClick?: (event: React.MouseEvent) => void;\r\n\tenabled?: boolean;\r\n}\r\n\r\nexport const DeleteButton: React.FunctionComponent = (props) => {\r\n\tlet label = Application.instance.services.textService.textOrEmpty(\r\n\t\tprops.labelTextkey\r\n\t);\r\n\r\n\tif (props.label) {\r\n\t\tlabel += props.label;\r\n\t}\r\n\r\n\tconst [modal, setOpen] = useState({ isOpen: false });\r\n\r\n\tconst onClick = (\r\n\t\tevent: React.MouseEvent\r\n\t): void => {\r\n\t\tsetOpen((s) => {\r\n\t\t\treturn { isOpen: !s.isOpen };\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleClickYes = (\r\n\t\tevent: React.MouseEvent\r\n\t): void => {\r\n\t\tsetOpen({ isOpen: false });\r\n\t\tif (props.onClick) props.onClick(event);\r\n\t};\r\n\r\n\tconst handleClickNo = (\r\n\t\tevent:\r\n\t\t\t| React.MouseEvent\r\n\t\t\t| React.MouseEvent\r\n\t): void => {\r\n\t\tsetOpen({ isOpen: false });\r\n\t};\r\n\r\n\tconst questionTextkey = props.questionTextkey;\r\n\r\n\tconst id =\r\n\t\t'deleteButton_' + Application.instance.services.idService.newIdString();\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t{modal.isOpen ? (\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

{label}

\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t{questionTextkey ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t) : null}\r\n\t\t\r\n\t);\r\n};\r\n","import React from 'react';\r\nimport { Case as SelmaCase } from '../../../models/SelmaModels';\r\nimport { T } from '../../widget/display/T';\r\nimport { AppComponent } from '../../AppComponent';\r\nimport { Button } from '../../widget/input/Button/Button';\r\nimport { StatusIndicator } from '../../widget/display/StatusIndicator/StatusIndicator';\r\n\r\nimport './HomeCase.scss';\r\nimport { DeleteButton } from '../../widget/input/DeleteButton/DeleteButton';\r\n\r\ninterface Props {\r\n\tcase: SelmaCase;\r\n\tselectedCase: (c: SelmaCase) => void;\r\n\tdeletedCase: (c: SelmaCase) => void;\r\n}\r\n\r\nexport class HomeCase extends AppComponent {\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tselectedCase = (event: React.MouseEvent): void => {\r\n\t\tthis.props.selectedCase(this.props.case);\r\n\t};\r\n\r\n\tdeleteCase = (event: React.MouseEvent): void => {\r\n\t\tthis.props.deletedCase(this.props.case);\r\n\t};\r\n\r\n\trender() {\r\n\r\n\t\tconst c = this.props.case;\r\n\t\tconst stepService = this.application.services.stepService;\r\n\t\tconst caseService = this.application.services.caseService;\r\n\r\n\t\tconst startStep = stepService.getStartStep(c);\r\n\t\tconst canDelete = caseService.canDeleteCase(c)\r\n\r\n\t\tlet ordinal = 0;\r\n\t\tlet progress = 0;\r\n\t\tlet statusText = '';\r\n\t\tlet needsComplement;\r\n\t\tif (startStep) {\r\n\t\t\tordinal = stepService.getStepOrdinal(startStep, c);\r\n\t\t\tprogress = stepService.calcStepProgress(startStep, c);\r\n\t\t\tstatusText = stepService.getStepStatusText(startStep);\r\n\t\t\tneedsComplement = stepService.stepNeedsComplement(startStep, c);\r\n\t\t}\r\n\r\n\t\tconst euSupportService = this.application.services.euSupportService;\r\n\r\n\t\tconst isServerCase = caseService.isServerCase(c);\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t{isServerCase && <>{this.props.case.number}}\r\n\t\t\t\t\t\t{!isServerCase && }\r\n\t\t\t\t\t

\r\n\t\t\t\t\t{canDelete &&\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
{statusText}
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{this.props.case.applicants &&\r\n\t\t\t\t\t\t\tthis.props.case.applicants.map((x, ix) => (\r\n\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t{x.firstName || ''} {x.lastName || ''}\r\n\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{/*this.props.case.companies && false &&\r\n\t\t\t\t\t\t\tthis.props.case.companies.map((x, ix) => (\r\n\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t{x.name||''} {x.orgNumber||''}\r\n\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t*/}\r\n\t\t\t\t\t\t{c.collaterals && c.collaterals.map((x, ix) => (\r\n\t\t\t\t\t\t\t
  • {x.name || ''} {x.municipality || ''}
  • \r\n\t\t\t\t\t\t))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{c.euSupports && c.euSupports.map((x, ix) => (\r\n\t\t\t\t\t\t\t
  • {euSupportService.getEuTypeDisplayName(x.euType)}
  • \r\n\t\t\t\t\t\t))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{c.guarantors && c.guarantors.map((x, ix) => (\r\n\t\t\t\t\t\t\t
  • {x.name || ''}
  • \r\n\t\t\t\t\t\t))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport { Case } from '../../../models/SelmaModels';\r\nimport { T } from '../../widget/display/T';\r\nimport { AppComponent } from '../../AppComponent';\r\nimport { HomeCase } from '../HomeCase/HomeCase';\r\nimport { PageContent, PageStyle } from '../../layout/PageContent/PageContent';\r\nimport { THtml } from '../../widget/display/THtml';\r\nimport { Button } from '../../widget/input/Button/Button';\r\nimport { RouteComponentProps, withRouter } from 'react-router';\r\n\r\nimport './HomePage.scss';\r\nimport { Heading } from '../../widget/display/Heading/Heading';\r\nimport { UiModelConverter } from '../../../models/UiModelConverter';\r\n\r\ninterface Props extends RouteComponentProps {\r\n\tcases: Case[];\r\n\tcase?: Case;\r\n\tselectedCase: (c: Case) => void;\r\n}\r\n\r\nclass HomePage extends AppComponent {\r\n\tcases: Case[];\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t\tthis.cases = this.props.cases;\r\n\t\tthis.observeUpdate(this.cases);\r\n\r\n\t\tconst caseService = this.application.services.caseService;\r\n\t\tif (!this.props.cases || !this.props.cases.length) {\r\n\t\t\tcaseService.loadCases().then(cases => {\r\n\t\t\t\t// nothing.\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tselectedCase = (c: Case): void => {\r\n\t\tthis.application.services.caseService.setCurrentCase(c);\r\n\t\tthis.redirectToCase(c);\r\n\t};\r\n\r\n\tredirectToCase(c: Case): any {\r\n\t\tthis.props.history.push('/case');\r\n\t}\r\n\r\n\taddCase = (event: React.MouseEvent): void => {\r\n\t\tthis.application.services.caseService\r\n\t\t\t.addNewCase()\r\n\t\t\t.then((c: Case) => {\r\n\t\t\t\treturn this.selectedCase(c);\r\n\t\t\t});\r\n\t};\r\n\r\n\tdeleteCase = (c: Case): void => {\r\n\t\tthis.application.services.caseService\r\n\t\t\t.deleteCase(this.props.cases, c);\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst caseService = this.application.services.caseService;\r\n\t\tconst c = this.props.case;\r\n\t\tlet cases = this.props.cases; // this.cases; \r\n\t\tconst hasCases = cases && cases.length > 0;\r\n\r\n\t\tconst hasOngoingCase = caseService.hasOngoingCase(cases);\r\n\t\tconst tooYoung = UiModelConverter.getAgeBySsn(this.application.services.sessionService.getSsn()) < 18;\r\n\t\tconst canAddCase = !hasOngoingCase && !tooYoung;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{hasCases ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{hasCases &&\r\n\t\t\t\t\t\t\tthis.props.cases.map((x) => {\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t} catch {\r\n\t\t\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{hasOngoingCase &&\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{tooYoung &&\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withRouter(HomePage);\r\n","import React, { Component } from 'react';\r\nimport { AppComponent } from '../AppComponent';\r\nimport { T } from '../widget/display/T';\r\nimport { THtml } from '../widget/display/THtml';\r\nimport { Heading } from '../widget/display/Heading/Heading';\r\nimport { StepContext } from './CaseSteps';\r\n\r\ninterface Props {\r\n\tcontext: StepContext;\r\n\ttitleTextkey: string;\r\n\tdescriptionTextkey: string;\r\n}\r\n\r\nexport class StepHeader extends AppComponent {\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst c = this.props.context.case;\r\n\t\tlet helpText;\r\n\t\tif(c.number) {\r\n\t\t\thelpText = this.application.services.textService.textOrEmpty(\"Home_CaseN\") + c.number;\r\n\t\t\t\r\n\t\t\thelpText += \", ändrat \" + c.lastAccessedDate.toLocaleString();\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t

\r\n\t\t\t\t\t\r\n\t\t\t\t

\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport { T } from '../T';\r\nimport { Required } from '../Required/Required';\r\nimport { Help } from '../Help/Help';\r\nimport { Application } from '../../../../models/AppModels';\r\nimport './Label.scss';\r\n\r\ninterface Props {\r\n\tlabelTextkey?: string;\r\n\tlabelText?: string;\r\n\tfor?: string;\r\n\tclassName?: string;\r\n\trequired?: boolean; // adds a marker for required fields\r\n}\r\n\r\nexport const Label: React.FunctionComponent = (props) => {\r\n\r\n\tconst helpTextkey = (props.labelTextkey) ? props.labelTextkey + '_Help' : null;\r\n\tconst hasValidHelpTextkey = (helpTextkey && Application.instance.services.textService.text(helpTextkey))\r\n\t\t\t? true\r\n\t\t\t: false;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{props.labelTextkey && }\r\n\t\t\t{props.labelText && props.labelText}\r\n\t\t\t{props.required && }\r\n\t\t\t{hasValidHelpTextkey && (\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n};\r\n\r\n\r\n// Default props\r\nLabel.defaultProps = {\r\n\tclassName: 'Label',\r\n};\r\n","import React from 'react';\r\nimport './Messages.scss';\r\nimport { T } from '../T';\r\nimport { Application } from '../../../../models/AppModels';\r\n\r\nexport interface MessageItem {\r\n\ttextkey?: string;\r\n\ttext?: string;\r\n\tok?:boolean;\r\n}\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\titems: MessageItem[];\r\n\tlineBreak?:boolean;\r\n\tvisible?:boolean;\r\n}\r\n\r\nexport const Messages: React.FunctionComponent = (props) => {\r\n\tif(!props.items) \r\n\t\treturn null;\r\n\r\n\tif(props.visible === false)\r\n\t\treturn null;\r\n\r\n\tconst uq = 'message_'+Application.instance.services.idService.newIdString();\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t{\r\n\t\t\tprops.items.map((x, ix) => {\r\n\t\t\t\tconst id = uq+'_'+ix;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t{x.textkey && } {x.text} {props.lineBreak &&
}
\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t}\r\n\t\t
\r\n\t);\r\n};\r\n\r\n// Default props\r\nMessages.defaultProps = {\r\n\tclassName: 'Messages',\r\n};\r\n","import React, { Children } from 'react';\r\nimport { AppComponent } from '../AppComponent';\r\nimport { Button } from '../widget/input/Button/Button';\r\nimport { ButtonGroup, ButtonGroupLayout } from '../widget/input/ButtonGroup/ButtonGroup';\r\nimport { StepContext } from './CaseSteps';\r\nimport { Messages, MessageItem } from '../widget/display/Messages/Messages';\r\nimport { T } from '../widget/display/T';\r\n\r\ninterface Props {\r\n\tcontext: StepContext;\r\n\tcanGoHome?: boolean;\r\n\tcanGoToPrev?: boolean;\r\n\tcanGoToNext?: boolean;\r\n\tgoHomeTextkey?: string;\r\n\tgoToPrevTextkey?: string;\r\n\tgoToNextTextkey?: string;\r\n\tonGoHome?: () => void;\r\n\tonGoToPrev?: () => void;\r\n\tonGoToNext?: () => void;\r\n\tonTriggerImmidiateValidation?: () => void;\r\n}\r\n\r\ninterface State {\r\n\thasTouchedNextButton?: boolean;\r\n}\r\n\r\nexport class StepFooter extends AppComponent {\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\thasTouchedNextButton: false\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tinnerGoToNext = (): void => {\r\n\r\n\t\tlet stepIsValid = this.props.context.getValidation().ok();\r\n\t\tif (stepIsValid === false) {\r\n\t\t\tthis.setState({ hasTouchedNextButton: true })\r\n\r\n\t\t\t// Trigger function for 'visible' validation of validators (if implemented in parent)\r\n\t\t\tif (this.props.onTriggerImmidiateValidation)\r\n\t\t\t\tthis.props.onTriggerImmidiateValidation();\r\n\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Trigger goToNext function\r\n\t\tif (this.props.onGoToNext)\r\n\t\t\tthis.props.onGoToNext();\r\n\r\n\t}\r\n\r\n\r\n\trender() {\r\n\r\n\t\tconst canSave = this.props.context.canSave();\r\n\r\n\t\tlet goHomeTextkey = this.props.goHomeTextkey\r\n\t\t\t? this.props.goHomeTextkey\r\n\t\t\t: 'GoHome';\r\n\t\tif (canSave) {\r\n\t\t\tgoHomeTextkey += \"WithSave\";\r\n\t\t}\r\n\r\n\t\tlet displayGenericErrorMessage = this.state.hasTouchedNextButton === true && this.props.context.getValidation().ok() !== true;\r\n\t\t// let goToPrevTextkey = this.props.goToPrevTextkey\r\n\t\t// \t? this.props.goToPrevTextkey\r\n\t\t// \t: 'GoToPrev';\r\n\t\tlet goToNextTextkey = this.props.goToNextTextkey\r\n\t\t\t? this.props.goToNextTextkey\r\n\t\t\t: 'GoToNext';\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{this.props.canGoHome !== undefined && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{this.props.canGoToNext !== undefined && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t this.innerGoToNext()}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\r\n\t\t\t
\r\n\t\t)\r\n\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport { BaseComponent } from '../../../BaseComponent';\r\nimport { uniqueId } from 'lodash';\r\nimport { T } from '../../display/T';\r\nimport './Checkbox.scss';\r\n\r\ninterface Props {\r\n\tchecked?: boolean;\r\n\tclassName?: string;\r\n\tenabled?: boolean;\r\n\thandleBlur?: (event: React.FocusEvent) => void;\r\n\thandleChange: (event: React.ChangeEvent) => void;\r\n\tlabel?: string;\r\n\tlabelTextkey?: string;\r\n\tname?: string;\r\n\ttype?: string;\r\n\tvalue?: string;\r\n\ttouched?: boolean;\r\n\thasErrors?: boolean;\r\n\tdirty?: boolean;\r\n}\r\n\r\nexport class Checkbox extends BaseComponent {\r\n\tid: string;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.id = uniqueId('checkbox_');\r\n\t}\r\n\r\n\tstatic defaultProps = {\r\n\t\ttype: 'checkbox',\r\n\t\tclassName: 'Checkbox',\r\n\t\tenabled: true,\r\n\t\ttouched: false,\r\n\t\thasErrors: false,\r\n\t\tdirty: false,\r\n\t};\r\n\r\n\trender () {\r\n\r\n const classNames = ClassNames(this.props.className, {\r\n\t\terror: this.props.touched && this.props.hasErrors,\r\n\t});\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{this.props.children}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n};\r\n\r\n\r\n","import React from 'react';\r\nimport { BaseComponent } from '../../../BaseComponent';\r\nimport { Checkbox } from '../Checkbox/Checkbox';\r\nimport { T } from '../../display/T';\r\n\r\nimport './CheckboxText.scss';\r\nimport { THtml } from '../../display/THtml';\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tchecked: boolean;\r\n\tenabled?: boolean;\r\n\thandleCheckedChange?: (checked: boolean) => void;\r\n\thandleChange?: (event: React.ChangeEvent) => void;\r\n\thandleBlur?: (event: React.FocusEvent) => void;\r\n\ttextKey?: string;\r\n\ttextIsHtml?:boolean;\r\n\ttouched?: boolean;\r\n\thasErrors?: boolean;\r\n\tdirty?: boolean;\r\n}\r\n\r\nexport class CheckboxText extends BaseComponent {\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tchecked: this.props.checked,\r\n\t\t};\r\n\t}\r\n\r\n\thandleClick = (event: React.MouseEvent): void => {\r\n\t\tlet changeEvent:React.ChangeEvent = {\r\n\t\t\t...event,\r\n\t\t}\r\n\t\tthis.handleChange(changeEvent);\r\n\t}\r\n\r\n\thandleChange = (event: React.ChangeEvent) => {\t\r\n\t\tif (this.props.enabled) {\r\n\t\t\tthis.setState (\r\n\t\t\t\t{ checked: !this.state.checked}, \r\n\t\t\t\t() => {\r\n\t\t\t\t\tif( this.props.handleChange)\r\n\t\t\t\t\t\tthis.props.handleChange(event);\r\n\t\t\t\t\tif( this.props.handleCheckedChange ) {\r\n\t\t\t\t\t\tthis.props.handleCheckedChange(\r\n\t\t\t\t\t\t\tthis.state.checked\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t}\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tclassName: 'CheckboxText',\r\n\t\tenabled: true,\r\n\t\tchecked: false,\r\n\t\ttouched: false,\r\n\t\thasErrors: false,\r\n\t\tdirty: false,\r\n\t};\r\n\r\n\r\n\trender() {\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t{this.props.textKey ? (\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t{this.props.textIsHtml===true && }\r\n\t\t\t\t\t\t{this.props.textIsHtml!==true && }\r\n\t\t\t\t\t

\r\n\t\t\t\t) : null}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n","import React, { useCallback, useState } from 'react';\r\nimport { StepContext } from '../../../case/CaseSteps';\r\n\r\ninterface Props {\r\n\tcontext: StepContext;\r\n\t//immidiateAllValidators?: boolean;\r\n\timmidiateAllValidatorsVisibleBefore?: Date;\r\n}\r\n\r\nexport interface StepFormData {\r\n\tcontext?: StepContext;\r\n\ttouches: string[];\r\n\t//immidiateAllValidators:boolean;\r\n\timmidiateAllValidatorsVisibleBefore?: Date;\r\n}\r\n\r\nconst StepFormContext = React.createContext({\r\n\tcontext: undefined,\r\n\ttouches: [],\r\n\t//immidiateAllValidators: false,\r\n\timmidiateAllValidatorsVisibleBefore: undefined\r\n});\r\nexport default StepFormContext;\r\n\r\nexport const StepForm: React.FunctionComponent = (props) => {\r\n\r\n\tconst theFormData: StepFormData = {\r\n\t\tcontext: props.context,\r\n\t\ttouches: [],\r\n\t\t//immidiateAllValidators : props.immidiateAllValidators === true,\r\n\t\timmidiateAllValidatorsVisibleBefore: props.immidiateAllValidatorsVisibleBefore\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{props.children}\r\n\t\t\r\n\t);\r\n};\r\n","import React, { useState } from 'react';\r\nimport { ValidationResult } from '../../../../utils/ValidationResult';\r\nimport { MessageItem, Messages } from '../Messages/Messages';\r\nimport StepFormContext, { StepFormData } from '../StepForm/StepForm';\r\n// import { eventNames } from 'cluster';\r\n\r\ninterface ErrorDefinition {\r\n\tvalidator: Function;\r\n\ttextkey: string;\r\n}\r\n\r\nconst createErrorItems = (\r\n\tresult: ValidationResult,\r\n\terrors: ErrorDefinition[],\r\n\tforObject: any\r\n): MessageItem[] => {\r\n\t// Get validation errors\r\n\tvar errorItems: MessageItem[] = [];\r\n\r\n\tresult.getItems().reduce((agg: MessageItem[], x) => {\r\n\t\tif (!x.ok) {\r\n\t\t\tlet r = errors.filter(\r\n\t\t\t\t(y) => y.validator === x.validator && x.object === forObject\r\n\t\t\t);\r\n\t\t\tif (r.length > 0) {\r\n\t\t\t\tagg.push(r[0]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn agg;\r\n\t}, errorItems);\r\n\r\n\treturn errorItems;\r\n};\r\n\r\ninterface Props {\r\n\tvalidate?: boolean;\r\n\tforObject: any;\r\n\tlocalValidationResult?:ValidationResult;\r\n\terrors: ErrorDefinition[];\r\n\timmediate?: boolean; // show errors directly, dont wait for touch.\r\n\ttouchValidation?: (stepFormData: StepFormData) => boolean;\r\n}\r\n\r\nexport const Validation: React.FunctionComponent = (props: Props) => {\r\n\t// State\r\n\tconst [touched, setTouched] = useState(false);\r\n\tconst [dirty, setDirty] = useState(false);\r\n\tconst [rendered, setRendered] = useState(new Date())\r\n\r\n\tconst children = (props as any).children;\r\n\r\n\tif( props.validate===false) {\r\n\t\treturn children; // dont perform validation.\r\n\t}\r\n\r\n\t// Event handlers\r\n\tconst handleChange = (event: React.ChangeEvent) => {\r\n\t\tsetDirty(true);\r\n\r\n\t\tif (children && (children as any).props.handleChange) {\r\n\t\t\tlet dynprops = children as any;\r\n\t\t\tdynprops.props.handleChange(event);\r\n\t\t} else return false;\r\n\t};\r\n\r\n\tconst handleBlurInner = (\r\n\t\tevent: React.FocusEvent,\r\n\t\tstepFormData: StepFormData\r\n\t) => {\r\n\t\tsetTouched(true);\r\n\t\t\r\n\t\t// Add component to object with touched elements\r\n\t\tstepFormData.touches[event.target.id]\r\n\t\t\t? (stepFormData.touches[event.target.id] = true)\r\n\t\t\t: (stepFormData.touches = {\r\n\t\t\t\t\t...stepFormData.touches,\r\n\t\t\t\t\t[event.target.id]: true,\r\n\t\t\t});\r\n\r\n\t\t// Run the childs own handleBlur event handler\r\n\t\tif (children && (children as any).props.handleBlur) {\r\n\t\t\tlet dynprops = children as any;\r\n\t\t\tdynprops.props.handleBlur(event);\r\n\t\t} else return false;\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{(stepFormData) => {\r\n\t\t\t\t// Construct messages.\r\n\t\t\t\tlet errorItems: MessageItem[] = [];\r\n\r\n\t\t\t\tif (stepFormData.context) {\r\n\t\t\t\t\tlet validationResult = stepFormData.context.getValidation();\r\n\t\t\t\t\tif( props.localValidationResult ) {\r\n\t\t\t\t\t\tlet vr = new ValidationResult();\r\n\t\t\t\t\t\tvr.addResult(validationResult);\r\n\t\t\t\t\t\tvr.addResult(props.localValidationResult);\r\n\t\t\t\t\t\tvalidationResult = vr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\terrorItems = createErrorItems(\r\n\t\t\t\t\t\tvalidationResult,\r\n\t\t\t\t\t\tprops.errors,\r\n\t\t\t\t\t\tprops.forObject\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Do we have any messages.\r\n\t\t\t\tlet shouldBeImmidiated = stepFormData.immidiateAllValidatorsVisibleBefore != undefined \r\n\t\t\t\t\t&& stepFormData.immidiateAllValidatorsVisibleBefore > rendered;\r\n\t\t\t\tlet isTouchedOrImmidiated = touched || props.immediate === true || shouldBeImmidiated;\r\n\r\n\t\t\t\tconst hasErrors = errorItems.length > 0 ? true : false;\r\n\t\t\t\tconst showMessages =\r\n\t\t\t\t\thasErrors && isTouchedOrImmidiated &&\r\n\t\t\t\t\t(!props.touchValidation || props.touchValidation(stepFormData));\r\n\r\n\t\t\t\tlet handleBlur = (event: React.FocusEvent) => {\r\n\t\t\t\t\thandleBlurInner(event, stepFormData);\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\tconst cloneChildren = children as any;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{children &&\r\n\t\t\t\t\t\t\tReact.cloneElement(cloneChildren, {\r\n\t\t\t\t\t\t\t\t...cloneChildren.props,\r\n\t\t\t\t\t\t\t\thandleChange,\r\n\t\t\t\t\t\t\t\thandleBlur,\r\n\t\t\t\t\t\t\t\ttouched : isTouchedOrImmidiated,\r\n\t\t\t\t\t\t\t\tdirty,\r\n\t\t\t\t\t\t\t\thasErrors,\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t);\r\n\t\t\t}}\r\n\t\t\r\n\t);\r\n};\r\n","import React, { Component } from 'react';\r\nimport { KYC } from '../../../../models/SelmaModels';\r\nimport { Applicant as SelmaApplicant } from \"../../../../models/selmamodels/Applicant\";\r\nimport { AppComponent } from '../../../AppComponent';\r\nimport { FormUnit, FormUnitSize } from '../../../layout/FormUnit/FormUnit';\r\nimport { CheckboxText } from '../../../widget/input/CheckboxText/CheckboxText';\r\nimport { Heading } from '../../../widget/display/Heading/Heading';\r\nimport { Validation } from '../../../widget/display/Validation/Validation';\r\n\r\ninterface Props {\r\n\tapplicant: SelmaApplicant;\r\n}\r\n\r\nexport class ApplicantApproval extends AppComponent {\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t\tthis.observeUpdate(this.props.applicant);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.ensureKyc();\r\n\t}\r\n\r\n\t// ensureKyc() : KYC {\r\n\t// \tif (!this.props.applicant.kyc) {\r\n\t// \t\tthis.props.applicant.kyc = {\r\n\t// \t\t\tid: this.application.services.idService.newGuid(),\r\n\t// \t\t\tapprovedCreditCheck: false,\r\n\t// \t\t\tapprovedInfoHandling: false,\r\n\t// \t\t\tapprovedInfoSharing: false\r\n\t// \t\t};\r\n\t// \t\tthis.observeUpdate(this.props.applicant.kyc);\r\n\t// \t}\r\n\t// \treturn this.props.applicant.kyc;\r\n\t// }\r\n\r\n\tensureKyc() : KYC {\r\n\t\tconst applicantService = this.application.services.applicantService; \r\n\t\tconst kyc = applicantService.ensureKyc(this.props.applicant);\r\n\t\treturn kyc;\r\n\t}\r\n\r\n\tonCreditCheckChange = (checked:boolean): void => {\r\n\t\tconst kyc = this.ensureKyc();\r\n\t\tkyc.approvedCreditCheck = checked;\r\n\t\tthis.application.services.applicantService.update(this.props.applicant);\r\n\t};\r\n\tonInfoHandlingChange = (checked: boolean): void => {\r\n\t\tconst kyc = this.ensureKyc();\r\n\t\tkyc.approvedInfoHandling = checked;\r\n\t\tthis.application.services.applicantService.update(this.props.applicant);\r\n\t};\r\n\tonInfoSharingChange = (checked: boolean): void => {\r\n\t\tconst kyc = this.ensureKyc();\r\n\t\tkyc.approvedInfoSharing = checked;\r\n\t\tthis.application.services.applicantService.update(this.props.applicant);\r\n\t};\r\n\trender() {\r\n\t\tconst applicant = this.props.applicant;\r\n\t\tconst kyc = applicant.kyc;\r\n\t\tconst applicantService = this.application.services.applicantService;\r\n\t\tlet canEdit = true;\r\n\t\tif( kyc ) {\r\n\t\t\tif( kyc.approvedCreditCheckDB===true\r\n\t\t\t\t&& kyc.approvedInfoHandlingDB===true\r\n\t\t\t\t&& kyc.approvedInfoSharingDB===true) {\r\n\t\t\t\t\tcanEdit = false;\r\n\t\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{ kyc &&\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport './FormUnitRow.scss';\r\n\r\nexport enum Justify {\r\n\tFlexStart = 'flex-start',\r\n\tFlexEnd = 'flex-end',\r\n\tCenter = 'center',\r\n\tSpaceBetween = 'space-between',\r\n\tSpaceAround = 'space-around',\r\n\tSpaceEvenly = 'space-evenly',\r\n}\r\n\r\nexport enum AlignItems {\r\n\tFlexStart = 'flex-start',\r\n\tFlexEnd = 'flex-end',\r\n\tCenter = 'center',\r\n}\r\n\r\nexport interface layout {\r\n\tlayout: Justify;\r\n\talignItems: AlignItems\r\n}\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tlayout?: Justify;\r\n\talignItems?: AlignItems;\r\n\ttouched?: boolean;\r\n\thasErrors?: boolean;\r\n\tdirty?: boolean;\r\n}\r\n\r\nexport const FormUnitRow: React.FunctionComponent = (props) => {\r\n\tconst classNames = ClassNames(props.className, {\r\n\t\terror: props.touched && props.hasErrors,\r\n\t});\r\n\r\n\tconst style = {\r\n\t\tjustifyContent: props.layout,\r\n\t\talignItems: props.alignItems\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{props.children}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nFormUnitRow.defaultProps = {\r\n\tclassName: 'FormUnitRow',\r\n\tlayout: Justify.SpaceBetween,\r\n\talignItems: AlignItems.FlexStart\r\n};\r\n","import { BudgetYear } from '../SelmaModels';\r\nimport { UINamed } from './UINamed';\r\n\r\nexport interface UIBudgetYearItem extends UINamed {\r\n\tordinal: number;\r\n\tnameTextkey: string;\r\n\tname: string;\r\n\tvalueType: ValueType;\r\n\tcalculation?: (budgetYear: BudgetYear) => number;\r\n}\r\n\r\nexport enum ValueType {\r\n\t'positive' = 'positive',\r\n\t'negative' = 'negative',\r\n\t'both' = 'both',\r\n}\r\n\r\nexport const uiBudgetYearItems = [\r\n\t{\r\n\t\tordinal: 1,\r\n\t\tnameTextkey: 'Budget_Value_Value1',\r\n\t\tname: 'Skog',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, // Resultaträkning; Skog\r\n\t{\r\n\t\tordinal: 2,\r\n\t\tnameTextkey: 'Budget_Value_Value2',\r\n\t\tname: 'Växtodling',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, // Resultaträkning; Växtodling\r\n\t{\r\n\t\tordinal: 3,\r\n\t\tnameTextkey: 'Budget_Value_Value3',\r\n\t\tname: 'EU-stöd',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, // Resultaträkning; EU-stöd\r\n\t{\r\n\t\tordinal: 4,\r\n\t\tnameTextkey: 'Budget_Value_Value4',\r\n\t\tname: 'Övrig djurproduktion',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, // Resultaträkning; Övrig djurproduktion\r\n\t{\r\n\t\tordinal: 5,\r\n\t\tnameTextkey: 'Budget_Value_Value5',\r\n\t\tname: 'Förändring av lager produktion',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, // Resultaträkning; Förändring av lager produktion\r\n\t{\r\n\t\tordinal: 6,\r\n\t\tnameTextkey: 'Budget_Value_Value6',\r\n\t\tname: 'Mjölk',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, // Resultaträkning; Mjölk\r\n\t{\r\n\t\tordinal: 7,\r\n\t\tnameTextkey: 'Budget_Value_Value7',\r\n\t\tname: 'Övriga intäkter',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, // Resultaträkning; Övriga intäkter\r\n\t{\r\n\t\tordinal: 8,\r\n\t\tnameTextkey: 'Budget_Value_Value8',\r\n\t\tname: 'Omsättning totalt (Totala intäkter)',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, // Omsättning totalt (Totala intäkter) summa value1-7\r\n\t{\r\n\t\tordinal: 9,\r\n\t\tnameTextkey: 'Budget_Value_Value9',\r\n\t\tname: 'Inköp (Råvaror och förnödenheter)',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 10,\r\n\t\tnameTextkey: 'Budget_Value_Value10',\r\n\t\tname: 'Arrendekostnader',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 11,\r\n\t\tnameTextkey: 'Budget_Value_Value11',\r\n\t\tname: 'Personalkostnader',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 12,\r\n\t\tnameTextkey: 'Budget_Value_Value12',\r\n\t\tname: 'Övriga rörelsekostnader',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 13,\r\n\t\tnameTextkey: 'Budget_Value_Value13',\r\n\t\tname: 'S:a kostnader',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, // S:a kostnader (summa value9-12)\"\r\n\t{\r\n\t\tordinal: 14,\r\n\t\tnameTextkey: 'Budget_Value_Value14',\r\n\t\tname: 'Resultat före avskrivningar',\r\n\t\tvalueType: ValueType.both,\r\n\t}, // Resultat före avskrivningar (value8 + (-value13))\r\n\t{\r\n\t\tordinal: 15,\r\n\t\tnameTextkey: 'Budget_Value_Value15',\r\n\t\tname: 'Avskrivning inventarier (exkl. byggnadsinventarier)',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 16,\r\n\t\tnameTextkey: 'Budget_Value_Value16',\r\n\t\tname: 'Övriga avskrivningar',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 17,\r\n\t\tnameTextkey: 'Budget_Value_Value17',\r\n\t\tname: 'S:a avskrivningar',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, // S:a avskrivningar (-value15) + (-value16)\r\n\t{\r\n\t\tordinal: 18,\r\n\t\tnameTextkey: 'Budget_Value_Value18',\r\n\t\tname: 'Resultat efter avskrivningar',\r\n\t\tvalueType: ValueType.both,\r\n\t}, // Resultat före avskrivningar value14 + (-value17)\r\n\t{\r\n\t\tordinal: 19,\r\n\t\tnameTextkey: 'Budget_Value_Value19',\r\n\t\tname: 'Finansiella intäkter',\r\n\t\tvalueType: ValueType.positive,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 20,\r\n\t\tnameTextkey: 'Budget_Value_Value20',\r\n\t\tname: 'Finansiella kostnader',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 21,\r\n\t\tnameTextkey: 'Budget_Value_Value21',\r\n\t\tname: 'Resultat efter finansiella poster',\r\n\t\tvalueType: ValueType.both,\r\n\t}, // Resultat finansiella poster (value18) + value19 + (-value20)\r\n\t{\r\n\t\tordinal: 22,\r\n\t\tnameTextkey: 'Budget_Value_Value22',\r\n\t\tname: 'Extraordinära intäkter och kostnader',\r\n\t\tvalueType: ValueType.both,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 23,\r\n\t\tnameTextkey: 'Budget_Value_Value23',\r\n\t\tname: 'Bokslutsdispositioner',\r\n\t\tvalueType: ValueType.both,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 24,\r\n\t\tnameTextkey: 'Budget_Value_Value24',\r\n\t\tname: 'Skatt (ägaruttag prognosår EF)',\r\n\t\tvalueType: ValueType.negative,\r\n\t}, //\r\n\t{\r\n\t\tordinal: 25,\r\n\t\tnameTextkey: 'Budget_Value_Value25',\r\n\t\tname: 'Årets resultat',\r\n\t\tvalueType: ValueType.both,\r\n\t}, // Åretsresultat (value21) sum (value22+value23+value24)\r\n];\r\n","import React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport NumberFormat, { NumberFormatValues } from 'react-number-format';\r\nimport { ValueType } from '../../../../models/uimodels/UIBudgetYearItem';\r\n\r\nimport './Money.scss';\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\r\n\tdisplayType?: 'input' | 'text';\r\n\tenabled?: boolean;\r\n\thandleBlur?: (event: React.FocusEvent) => void;\r\n\thandleChange: (values: NumberFormatValues) => void;\r\n\tid?: string;\r\n\tmax?: number;\r\n\tmin?: number;\r\n\tname?: string;\r\n\tplaceholder?: string;\r\n\tsuffix?: string;\r\n\tthousandGroupStyle?: 'thousand' | 'lakh' | 'wan';\r\n\tthousandSeparator?: boolean | string;\r\n\ttype?: string;\r\n\tvalue?: number;\r\n\tvalueType?: ValueType;\r\n\thasErrors?: boolean;\r\n\ttouched?: boolean;\r\n\tdirty?: boolean;\r\n}\r\n\r\nexport const Money: React.FunctionComponent = (props) => {\r\n\tlet value = props.value;\r\n\r\n\tif (value !== undefined) {\r\n\t\tswitch (props.valueType) {\r\n\t\t\tcase 'positive':\r\n\t\t\t\tif (value < 0) value = value * -1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'negative':\r\n\t\t\t\tif (value > 0) value = value * -1;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (props.min !== undefined && value < props.min) {\r\n\t\t\tvalue = props.min;\r\n\t\t} else if (props.max !== undefined && value > props.max) {\r\n\t\t\tvalue = props.max;\r\n\t\t}\r\n\t}\r\n\r\n const classNames = ClassNames(props.className, {\r\n\t\terror: props.touched && props.hasErrors,\r\n\t});\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n\r\nMoney.defaultProps = {\r\n\tclassName: 'Money',\r\n\ttype: 'text',\r\n\tthousandSeparator: ' ',\r\n\tthousandGroupStyle: 'thousand',\r\n\tsuffix: ' kr',\r\n\tdisplayType: 'input',\r\n\tvalueType: ValueType.both,\r\n\tenabled: true,\r\n\ttouched: false,\r\n\tdirty: false,\r\n\thasErrors: false,\r\n};\r\n","import React from 'react';\r\nimport ReactSelect, { components } from 'react-select';\r\nimport SelectCustomStyles from './SelectCustomStyles';\r\nimport { T } from '../../display/T';\r\nimport './Select.scss';\r\nimport { Application } from '../../../../models/AppModels';\r\n\r\nconst customStyles = SelectCustomStyles;\r\n\r\nconst DropdownIndicator = (props) => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nconst ClearIndicator = (props) => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nconst GetText = (key) => {\r\n\treturn ;\r\n};\r\n\r\nexport interface SelectOption {\r\n\tvalue: string;\r\n\tlabel: string;\r\n}\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tenabled?: boolean;\r\n\thandleBlur?: (event: React.FocusEvent) => void;\r\n\thandleChange: (value: string) => void;\r\n\tid: string;\r\n\tisMulti?: boolean;\r\n\tisSearchable?: boolean;\r\n\tnoSelectableOptionsTextkey: string;\r\n\toptions: SelectOption[];\r\n\tplaceholderTextkey: string;\r\n\tvalue: string;\r\n\thasErrors?: boolean;\r\n\ttouched?: boolean;\r\n\tdirty?: boolean;\r\n}\r\n\r\nexport const Select: React.FunctionComponent = (props) => {\r\n\r\n\tlet value;\r\n\r\n\tif (props.options) {\r\n\t\tvalue = props.options.find((option) => option.value === props.value);\r\n\t\tif (value === undefined) {\r\n\t\t\tvalue = '';\r\n\t\t}\r\n\t} else {\r\n\t\tvalue = '';\r\n\t}\r\n\r\n\t//const noSelectableOptionText = GetText(props.noSelectableOptionsTextkey);\r\n\tlet noSelectableOptionsText:string|null = null;\r\n\tif( props.noSelectableOptionsTextkey) {\r\n\t\tlet t = Application.instance.services.textService.text(props.noSelectableOptionsTextkey);\r\n\t\tif( t ) \r\n\t\t\tnoSelectableOptionsText = t;\r\n\t}\r\n\r\n\treturn (\r\n\t\t noSelectableOptionsText }\r\n\t\t\tvalue={value}\r\n\t\t\tisSearchable={props.isSearchable}\r\n\t\t\tisMulti={props.isMulti}\r\n\t\t\tisDisabled={props.enabled === false ? true : false}\r\n\t\t\tonChange={(option) => props.handleChange(option.value)}\r\n\t\t\tonBlur={props.handleBlur}\r\n\t\t\tinputProps={{autocomplete:'off'}}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nSelect.defaultProps = {\r\n\tclassName: 'Select',\r\n\tisSearchable: false,\r\n\tisMulti: false,\r\n\tenabled: true,\r\n\ttouched: false,\r\n\thasErrors: false,\r\n\tdirty: false,\r\n};\r\n","export default function(hasErrors, touched) {\r\n\treturn {\r\n\t\tcontrol: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\tborderWidth: 0,\r\n\t\t\tborderRadius: 0,\r\n\t\t\tbackgroundColor: touched && hasErrors ? '#FFF8F8' : '#FFF',\r\n\t\t\tboxShadow: '0',\r\n\t\t\tminHeight: '42px',\r\n\t\t\toutline: state.isFocused ? '5px auto #4292AF' : null,\r\n\t\t}),\r\n\t\toption: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\tborder: 0,\r\n\t\t\tbackgroundColor: state.isDisabled\r\n\t\t\t\t? null\r\n\t\t\t\t: state.isSelected\r\n\t\t\t\t? '#D7E6EA'\r\n\t\t\t\t: state.isFocused\r\n\t\t\t\t? '#E9F2F5'\r\n\t\t\t\t: null,\r\n\t\t\tcolor: '#4A4646',\r\n\t\t\tminHeight: '42px',\r\n\t\t\tfontSize: '1rem',\r\n\t\t\tlineHeight: '26px',\r\n\t\t\tpadding: '8px 16px',\r\n\t\t\t':hover': {\r\n\t\t\t\tbackgroundColor: '#E9F2F5',\r\n\t\t\t},\r\n\t\t}),\r\n\t\tsingleValue: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\tcolor: '#4A4646',\r\n\t\t\tfontSize: '1rem',\r\n\t\t\tlineHeight: '26px',\r\n\t\t\topacity: state.isDisabled ? 0.5 : 1,\r\n\t\t\ttransition: 'opacity 300ms',\r\n\t\t}),\r\n\t\tplaceholder: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\tcolor: '#4A4646',\r\n\t\t\tfontSize: '1rem',\r\n\t\t\tlineHeight: '26px',\r\n\t\t\topacity: state.isDisabled ? 0.5 : 1,\r\n\t\t\ttransition: 'opacity 300ms',\r\n\t\t}),\r\n\t\tvalueContainer: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\tminHeight: '42px',\r\n\t\t\theight: '42px',\r\n\t\t\tpadding: '8px 16px',\r\n\t\t\tborderColor:\r\n\t\t\t\ttouched && hasErrors\r\n\t\t\t\t\t? '#E16548'\r\n\t\t\t\t\t: state.menuIsOpen\r\n\t\t\t\t\t? '#4292AF'\r\n\t\t\t\t\t: '#D5D4D4',\r\n\t\t\t'&:hover': { borderColor: '#4292AF' },\r\n\t\t\tborderStyle: 'solid',\r\n\t\t\tborderLeftWidth: '1px',\r\n\t\t\tborderTopWidth: '1px',\r\n\t\t\tborderBottomWidth: '1px',\r\n\t\t\tborderRightWidth: '0',\r\n\t\t}),\r\n\t\tmenuList: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\tmargin: 0,\r\n\t\t\tpadding: 0,\r\n\t\t}),\r\n\t\tmenu: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\tborderRadius: 0,\r\n\t\t\tmargin: 0,\r\n\t\t\tpadding: 0,\r\n\t\t}),\r\n\t\tindicatorsContainer: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t}),\r\n\t\tindicatorSeparator: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\tdisplay: 'none',\r\n\t\t}),\r\n\t\tdropdownIndicator: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\twidth: '42px',\r\n\t\t\theight: '42px',\r\n\t\t\tjustifyContent: 'center',\r\n\t\t\talignItems: 'center',\r\n\t\t\tcolor: '#FFF',\r\n\t\t\tbackgroundColor: '#4292AF',\r\n\t\t\tborderStyle: 'solid',\r\n\t\t\tborderLeftWidth: '0',\r\n\t\t\tborderTopWidth: '1px',\r\n\t\t\tborderBottomWidth: '1px',\r\n\t\t\tborderRightWidth: '1px',\r\n\t\t\tborderColor: touched && hasErrors ? '#E16548' : '#4292AF',\r\n\t\t}),\r\n\t\tclearIndicator: (providedStyles, state) => ({\r\n\t\t\t...providedStyles,\r\n\t\t\twidth: '42px',\r\n\t\t\theight: '42px',\r\n\t\t\tjustifyContent: 'center',\r\n\t\t\talignItems: 'center',\r\n\t\t\tcolor: '#FFF',\r\n\t\t\tbackgroundColor: '#4292AF',\r\n\t\t}),\r\n\t};\r\n};\r\n","import React from 'react';\r\nimport { AppComponent } from '../../../AppComponent';\r\nimport { AlignItems, FormUnitRow, Justify } from '../../../layout/FormUnitRow/FormUnitRow';\r\nimport { Money } from '../../../widget/input/Money/Money';\r\nimport { Label } from '../../../widget/display/Label/Label';\r\nimport { DeleteButton } from '../../../widget/input/DeleteButton/DeleteButton';\r\nimport { Validation } from '../../../widget/display/Validation/Validation';\r\nimport { Aim, Loan } from '../../../../models/SelmaModels';\r\nimport { LoanService } from '../../../../services/LoanService';\r\nimport { SelectOption, Select } from '../../../widget/input/Select/Select';\r\nimport { NumberFormatValues } from 'react-number-format';\r\nimport { T } from '../../../widget/display/T';\r\n\r\ninterface Props {\r\n\taim: Aim;\r\n\tloan: Loan;\r\n\tindex: number;\r\n\tcanEditAmountPart: boolean;\r\n\tcanDelete: boolean;\r\n\taimCategoryOptions: SelectOption[];\r\n}\r\n\r\nexport class LoanNewAim extends AppComponent {\r\n\tloanService: LoanService;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.loanService = this.application.services.loanService;\r\n\r\n\t}\r\n\r\n\tremoveAimClicked = (): void => {\r\n\t\tthis.loanService.removeAim(this.props.loan, this.props.aim);\r\n\t}\r\n\r\n\taimCategoryCodeChanged = (value: string): void => {\r\n\t\tthis.props.aim.aimCategory = value;\r\n\t\tthis.props.aim.aimDetail = '';\r\n\t\tthis.loanService.updateAim(this.props.loan, this.props.aim);\r\n\t}\r\n\r\n\taimDetailCodeChanged = (value: string): void => {\r\n\t\tthis.props.aim.aimDetail = value;\r\n\t\tthis.loanService.updateAim(this.props.loan, this.props.aim);\r\n\t}\r\n\r\n\tloanAmountPartChanged = (values: NumberFormatValues): void => {\r\n\t\tlet value: number | undefined = values.floatValue;\r\n\t\tif (value === undefined || values.value === '') {\r\n\t\t\tvalue = undefined;\r\n\t\t}\r\n\t\tthis.loanService.setAimLoanAmountPart(\r\n\t\t\tthis.props.loan,\r\n\t\t\tthis.props.aim,\r\n\t\t\tvalue\r\n\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst loanService = this.loanService;\r\n\t\tconst aim = this.props.aim;\r\n\t\tconst index = this.props.index;\r\n\t\tconst aimCategoryCode = this.props.aim.aimCategory || '';\r\n\t\tconst hasAimCategoryCode = this.props.aim.aimCategory ? true : false;\r\n\t\tconst aimDetailCode = this.props.aim.aimDetail || '';\r\n\t\tconst maxAmount = this.loanService.getMaximumAimAmount();\r\n\r\n\t\tconst aimCounter = (index + 1).toString();\r\n\r\n\t\tlet aimCategoryOption;\r\n\t\tlet detailOptions;\r\n\t\tif (hasAimCategoryCode) {\r\n\t\t\tconst aimCategoryOptionResult = this.props.aimCategoryOptions.filter(\r\n\t\t\t\t(x) => x.value === aimCategoryCode\r\n\t\t\t);\r\n\t\t\tif (aimCategoryOptionResult.length === 1) {\r\n\t\t\t\taimCategoryOption = aimCategoryOptionResult[0];\r\n\t\t\t\tdetailOptions = aimCategoryOption.detailOptions.filter((x) => {\r\n\t\t\t\t\t// TODO: remove items that have aleady been selected.\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\r\n\t\t\t\t{this.props.canDelete && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t {aimCounter}\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport { Loan } from '../../../../models/selmamodels/Loan';\r\nimport { AppComponent } from '../../../AppComponent';\r\nimport { Button } from '../../../widget/input/Button/Button';\r\nimport { LoanService } from '../../../../services/LoanService';\r\nimport { Validation } from '../../../widget/display/Validation/Validation';\r\nimport { LoanNewAim } from './LoanNewAim';\r\nimport { SelectOption } from '../../../widget/input/Select/Select';\r\nimport { uiLoanAimCategories } from '../../../../models/UiModels';\r\n\r\ninterface Props {\r\n\tloan: Loan;\r\n}\r\n\r\nexport class LoanNewAims extends AppComponent {\r\n\tloanService: LoanService;\r\n\taimCategoryOptions: SelectOption[];\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t\tthis.observeUpdate(this.props.loan);\r\n\r\n\t\tthis.loanService = this.application.services.loanService;\r\n\r\n\t\t// Create aim drop down options in two levels.\r\n\t\tthis.aimCategoryOptions = uiLoanAimCategories.map((x) => {\r\n\t\t\tconst bcOption = {\r\n\t\t\t\tlabel: x.name,\r\n\t\t\t\tvalue: x.id,\r\n\t\t\t};\r\n\t\t\t(bcOption as any).detailOptions = x.details.map((y) => {\r\n\t\t\t\tconst bdOption = {\r\n\t\t\t\t\tlabel: y.name,\r\n\t\t\t\t\tvalue: y.id,\r\n\t\t\t\t};\r\n\t\t\t\treturn bdOption;\r\n\t\t\t});\r\n\t\t\treturn bcOption;\r\n\t\t});\r\n\t}\r\n\r\n\ttouchValidationMatchingSums = (stepFormData) => {\r\n\t\tlet allTouched = true;\r\n\r\n\t\tconst requiredTouches = ['amount', 'loanAmountPart_0'];\r\n\t\trequiredTouches.map((x, ix) => {\r\n\t\t\t// eslint-disable-next-line no-prototype-builtins\r\n\t\t\tif (!stepFormData.touches.hasOwnProperty(x)) allTouched = false;\r\n\t\t});\r\n\r\n\t\treturn allTouched;\r\n\t}\r\n\r\n\taddAimClicked = (): void => {\r\n\t\tthis.loanService.addNewAim(this.props.loan);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst loanService = this.loanService;\r\n\t\tconst loan = this.props.loan;\r\n\t\tconst aims = loan.aims || [];\r\n\t\tconst canDelete = true;\r\n\r\n\t\tconst canEditAmountPart = true; //aims.length > 1 || (loan.amount || 0) <= 0;\r\n\t\tconst canAddNewLoanAim = loanService.validateAimsAndDownpayment(loan).ok();\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{aims.map((aim, ix) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport { Application } from '../../../../models/AppModels';\r\nimport './Textbox.scss';\r\n\r\nexport enum TextboxType {\r\n\temail = 'email',\r\n\tnumber = 'number',\r\n\tpassword = 'password',\r\n\ttel = 'tel',\r\n\ttext = 'text',\r\n}\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tdirty?: boolean;\r\n\tenabled?: boolean;\r\n\thandleBlur?: (event: React.FocusEvent) => void;\r\n\thandleChange: (event: React.ChangeEvent) => void;\r\n\thasErrors?: boolean;\r\n\tid?: string;\r\n\tname?: string;\r\n\tplaceholderTextkey?: string;\r\n\ttouched?: boolean;\r\n\ttype?: TextboxType;\r\n\tvalue?: string;\r\n\tmaxlength?:number;\r\n}\r\n\r\nexport const Textbox: React.FunctionComponent = (props) => {\r\n\r\n\tlet placeholder: string | undefined = undefined;\r\n\tif (props.placeholderTextkey)\r\n\t\tplaceholder = Application.instance.services.textService.text(props.placeholderTextkey);\r\n\r\n\tconst classNames = ClassNames(\r\n\t\tprops.className,\r\n\t\t{ error: props.touched && props.hasErrors }\r\n\t);\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n\r\n// Default props\r\nTextbox.defaultProps = {\r\n\tclassName: 'Textbox',\r\n\ttype: TextboxType.text,\r\n\tenabled: true,\r\n\ttouched: false,\r\n\tdirty: false,\r\n\thasErrors: false,\r\n};\r\n","import React from 'react';\r\nimport { Loan } from '../../../../models/selmamodels/Loan';\r\nimport { AppComponent } from '../../../AppComponent';\r\nimport { Select, SelectOption } from '../../../widget/input/Select/Select';\r\nimport {\r\n\tuiLoanDownpaymentTypes,\r\n} from '../../../../models/UiModels';\r\nimport { LoanService } from '../../../../services/LoanService';\r\nimport { Textbox } from '../../../widget/input/Textbox/Textbox';\r\nimport { Label } from '../../../widget/display/Label/Label';\r\nimport { FormUnit } from '../../../layout/FormUnit/FormUnit';\r\nimport { getUIName } from '../../../../models/uimodels/UINamed';\r\n\r\ninterface Props {\r\n\tloan: Loan;\r\n}\r\n\r\nexport class LoanDownpayment extends AppComponent {\r\n\tloanService: LoanService;\r\n\tdownpaymentTypeOptions: SelectOption[];\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t\tthis.observeUpdate(this.props.loan);\r\n\r\n\t\tthis.loanService = this.application.services.loanService;\r\n\t\tconst textService = this.application.services.textService;\r\n\t\tthis.downpaymentTypeOptions = uiLoanDownpaymentTypes.map((x) => {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: x.key,\r\n\t\t\t\tlabel: getUIName(x, textService),\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\tdownpaymentSourceChanged = (value: string): void => {\r\n\t\tlet r = uiLoanDownpaymentTypes.filter(x=> x.key===value);\r\n\t\tif( r.length ) {\r\n\t\t\tthis.props.loan.downpaymentType = r[0].type;\r\n\t\t\tthis.loanService.update(this.props.loan);\r\n\t\t}\r\n\t};\r\n\r\n\tdownpaymentOtherChanged = (\r\n\t\tevent: React.ChangeEvent\r\n\t): void => {\r\n\t\tthis.props.loan.downpaymentOther = event.target.value;\r\n\t\tthis.loanService.update(this.props.loan);\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst loan = this.props.loan;\r\n\t\tlet downpaymentType: string = '';\r\n\t\tif( loan.downpaymentType!==undefined ) {\r\n\t\t\tlet r = uiLoanDownpaymentTypes.filter(x=> x.type===loan.downpaymentType);\r\n\t\t\tif( r.length )\r\n\t\t\t\tdownpaymentType = r[0].key;\r\n\t\t}\r\n\t\tlet downpaymentOther: string = loan.downpaymentOther||'';\r\n\t\tconst askAboutOther = this.loanService.askAboutDownpaymentOther(\r\n\t\t\tthis.props.loan\r\n\t\t);\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t{askAboutOther && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport ClassNames from 'classnames';\r\nimport { Checkbox } from '../Checkbox/Checkbox';\r\nimport { BaseComponent } from '../../../BaseComponent';\r\nimport { uniqueId } from 'lodash';\r\n\r\nimport './CheckboxGroup.scss';\r\n\r\nexport interface CheckboxOption {\r\n\tvalue?: string;\r\n\tchecked?: boolean;\r\n\tlabel?: string;\r\n\tlabelTextkey?: string;\r\n\tenabled?: boolean;\r\n}\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tenabled?: boolean;\r\n\thandleBlur?: (event: React.FocusEvent) => void;\r\n\thandleChange: (value: string[]) => void;\r\n\toptions: CheckboxOption[];\r\n\torientation?: string;\r\n\tvalue: string[];\r\n\thasErrors?: boolean;\r\n\ttouched?: boolean;\r\n\tdirty?: boolean;\r\n}\r\n\r\nexport class CheckboxGroup extends BaseComponent {\r\n\tstatic defaultProps = {\r\n\t\torientation: 'horizontal',\r\n\t\tclassName: 'CheckboxGroup',\r\n\t};\r\n\r\n\tid: string;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.id = uniqueId('checkboxGroup_');\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tconst target = event.currentTarget;\r\n\t\tconst valueArray = [...this.props.value] || [];\r\n\r\n\t\tif (target.checked) {\r\n\t\t\tvalueArray.push(target.value);\r\n\t\t} else {\r\n\t\t\tvalueArray.splice(valueArray.indexOf(target.value), 1);\r\n\t\t}\r\n\r\n\t\tthis.props.handleChange(valueArray);\r\n\t}\r\n\r\n\tisChecked = (value?: string) => {\r\n\t\tif (!value) return undefined;\r\n\t\treturn this.props.value.indexOf(value) > -1 ? true : false;\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tconst classNames = ClassNames(\r\n\t\t\tthis.props.className,\r\n\t\t\t{ Horizontal: this.props.orientation === 'horizontal' },\r\n\t\t\t{ Vertical: this.props.orientation === 'vertical' }\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{this.props.options.map((checkbox, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n","import React from 'react';\r\nimport { AppComponent } from '../../../AppComponent';\r\nimport { AlignItems, FormUnitRow, Justify } from '../../../layout/FormUnitRow/FormUnitRow';\r\nimport { Money } from '../../../widget/input/Money/Money';\r\nimport { Label } from '../../../widget/display/Label/Label';\r\nimport { DeleteButton } from '../../../widget/input/DeleteButton/DeleteButton';\r\nimport { Validation } from '../../../widget/display/Validation/Validation';\r\nimport { Loan, TakeoverLoan } from '../../../../models/SelmaModels';\r\nimport { LoanService } from '../../../../services/LoanService';\r\nimport { SelectOption, Select } from '../../../widget/input/Select/Select';\r\nimport { NumberFormatValues } from 'react-number-format';\r\nimport { Textbox } from '../../../widget/input/Textbox/Textbox';\r\nimport { Checkbox } from '../../../widget/input/Checkbox/Checkbox';\r\nimport { Help } from '../../../widget/display/Help/Help';\r\nimport { T } from '../../../widget/display/T';\r\n\r\ninterface Props {\r\n\tbankOptions: SelectOption[];\r\n\tcanDelete: boolean;\r\n\tindex: number;\r\n\tloan: Loan;\r\n\taimCategoryOptions: SelectOption[];\r\n\ttakeoverLoan: TakeoverLoan;\r\n}\r\n\r\ninterface State {\r\n\tshowTakeoverLoanDetails?: boolean;\r\n}\r\n\r\nexport class LoanTakeOver extends AppComponent {\r\n\tloanService: LoanService;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.loanService = this.application.services.loanService;\r\n\r\n\t\tthis.state = { showTakeoverLoanDetails: this.loanService.hasTakeoverLoanDetails(this.props.takeoverLoan) };\r\n\t}\r\n\r\n\tloanNumberChanged = (event: React.ChangeEvent) => {\r\n\t\tconst loanNumber = event.target.value ? event.target.value : '';\r\n\t\tthis.loanService.setLoanTakeOverLoanNumber(this.props.loan, this.props.takeoverLoan, loanNumber);\r\n\t}\r\n\r\n\tloanAmountChanged = (values: NumberFormatValues) => {\r\n\t\tlet value: number | undefined = values.floatValue;\r\n\t\tif (value === undefined || values.value === '') {\r\n\t\t\tvalue = undefined;\r\n\t\t}\r\n\t\tthis.loanService.setLoanTakeOverDebtAmount(\r\n\t\t\tthis.props.loan,\r\n\t\t\tthis.props.takeoverLoan,\r\n\t\t\tvalue\r\n\t\t);\r\n\t}\r\n\r\n\tinitialAimCategoryChanged = (aim: string): void => {\r\n\t\tthis.props.takeoverLoan.aimCategory = aim;\r\n\t\tthis.props.takeoverLoan.aimDetail = '';\r\n\t\tthis.loanService.updateLoanTakeOver(this.props.loan, this.props.takeoverLoan);\r\n\t}\r\n\r\n\tinitialAimDetailChanged = (aim: string) => {\r\n\t\tthis.props.takeoverLoan.aimDetail = aim;\r\n\t\tthis.loanService.updateLoanTakeOver(this.props.loan, this.props.takeoverLoan);\r\n\t}\r\n\r\n\tloanBankChanged = (creditInstitute: string) => {\r\n\t\tthis.loanService.setLoanTakeOverBank(this.props.loan, this.props.takeoverLoan, creditInstitute);\r\n\t}\r\n\r\n\tdeleteLoan = () => {\r\n\t\tthis.loanService.removeLoanTakeOver(this.props.loan, this.props.takeoverLoan);\r\n\t}\r\n\r\n\thasTakeoverLoanDetailsChanged = (event: React.ChangeEvent): void => {\r\n\t\tconst checked = event.target.checked;\r\n\t\tif (!checked) {\r\n\t\t\tthis.loanService.clearTakeoverLoanDetails(this.props.takeoverLoan);\r\n\t\t\tthis.setState({ showTakeoverLoanDetails: false });\r\n\t\t} else {\r\n\t\t\tthis.setState({ showTakeoverLoanDetails: true });\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trender() {\r\n\t\tconst loanService = this.loanService;\r\n\t\tconst takeoverLoan = this.props.takeoverLoan;\r\n\t\tconst index = this.props.index;\r\n\t\tconst aimCategoryCode = takeoverLoan.aimCategory || '';\r\n\t\tconst hasAimCategoryCode = takeoverLoan.aimCategory ? true : false;\r\n\t\tconst aimDetailCode = takeoverLoan.aimDetail || '';\r\n\t\tconst maxAmount = this.loanService.getMaximumTakeoverLoanDebtAmount();\r\n\r\n\t\tconst loanCounter = (index + 1).toString();\r\n\r\n\t\tlet aimCategoryOption;\r\n\t\tlet detailOptions;\r\n\t\tif (hasAimCategoryCode) {\r\n\t\t\tconst aimCategoryOptionResult = this.props.aimCategoryOptions.filter(\r\n\t\t\t\t(x) => x.value === aimCategoryCode\r\n\t\t\t);\r\n\t\t\tif (aimCategoryOptionResult.length === 1) {\r\n\t\t\t\taimCategoryOption = aimCategoryOptionResult[0];\r\n\t\t\t\tdetailOptions = aimCategoryOption.detailOptions.filter((x) => {\r\n\t\t\t\t\t// TODO: remove items that have aleady been selected.\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst creditInstitute = takeoverLoan.creditInstitute || '';\r\n\t\tconst loanNumber = takeoverLoan.loanNumber || '';\r\n\r\n\t\tconst hasTakeoverLoanDetails = this.state.showTakeoverLoanDetails === true || this.loanService.hasTakeoverLoanDetails(takeoverLoan);\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{this.props.canDelete && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t {loanCounter}\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t{hasTakeoverLoanDetails &&\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport { Loan } from '../../../../models/selmamodels/Loan';\r\nimport { AppComponent } from '../../../AppComponent';\r\nimport { SelectOption } from '../../../widget/input/Select/Select';\r\nimport { LoanTakeOver } from './LoanTakeOver';\r\nimport { Button } from '../../../widget/input/Button/Button';\r\nimport { uiLoanAimCategories, uiBanks } from '../../../../models/UiModels';\r\nimport { LoanService } from '../../../../services/LoanService';\r\nimport { getUIName } from '../../../../models/uimodels/UINamed';\r\n\r\ninterface Props {\r\n\tloan: Loan;\r\n}\r\n\r\nexport class LoanTakeOvers extends AppComponent {\r\n\taimCategoryOptions: SelectOption[];\r\n\tbankOptions: SelectOption[];\r\n\tloanService: LoanService;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.loanService = this.application.services.loanService;\r\n\r\n\t\t// Create drop down options in two levels.\r\n\t\tthis.aimCategoryOptions = uiLoanAimCategories.map((x) => {\r\n\t\t\tconst bcOption = {\r\n\t\t\t\tlabel: x.name,\r\n\t\t\t\tvalue: x.id,\r\n\t\t\t};\r\n\t\t\t(bcOption as any).detailOptions = x.details.map((y) => {\r\n\t\t\t\tconst bdOption = {\r\n\t\t\t\t\tlabel: y.name,\r\n\t\t\t\t\tvalue: y.id,\r\n\t\t\t\t};\r\n\t\t\t\treturn bdOption;\r\n\t\t\t});\r\n\t\t\treturn bcOption;\r\n\t\t});\r\n\r\n\t\t// Create bank drop down options\r\n\t\tconst textService = this.application.services.textService;\r\n\t\tthis.bankOptions = uiBanks.map((bank) => {\r\n\t\t\treturn {\r\n\t\t\t\tlabel: getUIName(bank, textService),\r\n\t\t\t\tvalue: bank.key\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\taddLoanTakeOver = (): void => {\r\n\t\tthis.loanService.addNewLoanTakeOver(this.props.loan);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst loanService = this.loanService;\r\n\t\tconst loan = this.props.loan;\r\n\t\tconst takeoverLoans = loan.takeoverLoans || [];\r\n\t\tconst canDelete = true;\r\n\t\tconst enableAddTakeoverLoan = loanService.validateTakeoverLoans(loan).ok();\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{takeoverLoans.map((takeoverLoan, ix) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport './Textarea.scss';\r\nimport ClassNames from 'classnames';\r\n\r\ninterface Props {\r\n\tid?: string;\r\n\tclassName?: string;\r\n\tvalue?: string;\r\n\tonChange: (event: React.ChangeEvent) => void;\r\n\tonBlur?: (event: React.FocusEvent) => void;\r\n\tenabled?: boolean;\r\n\ttouched?: boolean;\r\n\thasErrors?: boolean;\r\n\tsize?: 'small' | 'medium' | 'large';\r\n\tdisableResize?: boolean;\r\n\tmaxlength?: number;\r\n}\r\n\r\nexport const Textarea: React.FunctionComponent = (props) => {\r\n\r\n\tconst classNames = ClassNames(\r\n\t\tprops.className,\r\n\t\t{\r\n\t\t\terror: props.touched && props.hasErrors,\r\n\t\t\tsmall: props.size === 'small',\r\n\t\t\tmedium: props.size === 'medium',\r\n\t\t\tlarge: props.size === 'large',\r\n\t\t\t'no-resize': props.disableResize === true\r\n\t\t}\r\n\t);\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n\r\nTextarea.defaultProps = {\r\n\tclassName: 'Textarea',\r\n\thasErrors: false,\r\n\ttouched: false,\r\n\tsize: 'small'\r\n}\r\n","import React from 'react';\r\nimport { AppComponent } from '../../../AppComponent';\r\nimport { StepHeader } from '../../StepHeader';\r\nimport { Case, Applicant, Loan } from '../../../../models/SelmaModels';\r\nimport { Label } from '../../../widget/display/Label/Label';\r\nimport {\r\n\tFormUnit,\r\n\tFormUnitSize,\r\n\tFormUnitPadding,\r\n} from '../../../layout/FormUnit/FormUnit';\r\nimport { StepFooter } from '../../StepFooter';\r\nimport { StepContext } from '../../CaseSteps';\r\nimport { ApplicantApproval } from './ApplicantApproval';\r\nimport NumberFormat, { NumberFormatValues } from 'react-number-format';\r\nimport { LoanNewAims } from './LoanNewAims';\r\nimport { LoanDownpayment } from './LoanDownpayment';\r\nimport { THtml } from '../../../widget/display/THtml';\r\nimport { LoanService } from '../../../../services/LoanService';\r\nimport { Validation } from '../../../widget/display/Validation/Validation';\r\nimport { Heading } from '../../../widget/display/Heading/Heading';\r\nimport StepFormContext, { StepForm } from '../../../widget/display/StepForm/StepForm';\r\nimport {\r\n\tCheckboxGroup,\r\n\tCheckboxOption,\r\n} from '../../../widget/input/CheckboxGroup/CheckboxGroup';\r\nimport { LoanTakeOvers } from './LoanTakeOvers';\r\nimport { FormUnitRow, Justify } from '../../../layout/FormUnitRow/FormUnitRow';\r\nimport \"./StepLoan.scss\";\r\nimport { ButtonGroup, ButtonGroupLayout } from '../../../widget/input/ButtonGroup/ButtonGroup';\r\nimport { Modal, OverlayStyles } from '../../../layout/Modal/Modal';\r\nimport { Button } from '../../../widget/input/Button/Button';\r\nimport { Textarea } from '../../../widget/input/Textarea/Textarea';\r\nimport { CaseService } from '../../../../services/CaseService';\r\n\r\ninterface Props {\r\n\tcase: Case;\r\n\tcontext: StepContext;\r\n}\r\n\r\ninterface State {\r\n\tmainPurposeTouched: boolean;\r\n\tshowClearAimsModal: boolean;\r\n\tshowClearTakeoverLoansModal: boolean;\r\n\timmidiateAllValidatorsVisibleBefore?:Date;\r\n}\r\n\r\nexport class StepLoan extends AppComponent {\r\n\r\n\tloanService: LoanService;\r\n\tmyApplicant: Applicant;\r\n\tcaseService: CaseService;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.loanService = this.application.services.loanService;\r\n\t\tthis.caseService = this.application.services.caseService;\r\n\t\tconst applicantService = this.application.services.applicantService;\r\n\t\tconst c = this.props.case;\r\n\t\tthis.myApplicant = applicantService.getMyApplicant(c);\r\n\r\n\t\tthis.state = { \r\n\t\t\tmainPurposeTouched:false, \r\n\t\t\tshowClearAimsModal:false, \r\n\t\t\tshowClearTakeoverLoansModal:false,\r\n\t\t\timmidiateAllValidatorsVisibleBefore:undefined\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.observeUpdate(this.myApplicant);\r\n\r\n\t\tconst c = this.props.case;\r\n\t\tconst loan = this.loanService.ensureLoan(c); // Move somewhere else?\r\n\t\tthis.observeUpdate(c.loan);\r\n\t}\r\n\r\n\tmainLoanPurposeChanged = (values: string[]): void => {\r\n\t\tconst loan = this.props.case.loan;\r\n\t\tif (!loan) return;\r\n\r\n\t\tconst takeoverChecked = values.filter(x=>x==\"TAKEOVERLOAN\").length>0;\r\n\t\tconst newloanChecked = values.filter(x=>x==\"NEWLOAN\").length>0; // aims\r\n\r\n\t\tconst loanService = this.loanService;\r\n\t\tconst hasTakeoverLoans = loanService.hasTakeoverLoans(loan);\r\n\t\tconst hasAims = loanService.hasAims(loan);\r\n\r\n\t\tif( takeoverChecked ) {\r\n\t\t\tif( !hasTakeoverLoans ) {\r\n\t\t\t\t// Add default takeoverloan.\r\n\t\t\t\tthis.loanService.ensureMinimumTakeoverLoans(loan);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif( hasTakeoverLoans ) {\r\n\t\t\t\t// Ask about deleting all takeoverloans.\r\n\t\t\t\tthis.confirmRemoveAllTakeOverLoans(loan);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif( newloanChecked ) {\r\n\t\t\tif( !hasAims ) {\r\n\t\t\t\t// Add default aims.\r\n\t\t\t\tthis.loanService.ensureMinimumLoanAims(loan);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif( hasAims ) {\r\n\t\t\t\t// Ask about deleting all aims.\r\n\t\t\t\tthis.confirmRemoveAllAims(loan);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tmainLoanPurposeBlur = (event: React.FocusEvent): void | undefined => {\r\n\t\t// if you leave (blur) the last checkbox in list then we need to validate.\r\n\t\tif(event.target.value==\"NEWLOAN\") {\r\n\t\t\tthis.setState({ mainPurposeTouched:true });\r\n\t\t}\r\n\t}\r\n\r\n\tpurpouseDescriptionOnChange = (event: React.ChangeEvent): void | undefined => {\r\n\t\tlet loan = this.props.case.loan;\r\n\t\tif(!loan) return;\r\n\t\tloan.purposeDescription = event.target.value;\r\n\t\tthis.loanService.update(loan);\r\n\t}\r\n\r\n\tconfirmRemoveAllTakeOverLoans(loan:Loan) {\r\n\t\t// TODO: Confirm with modal.\r\n\t\t//this.loanService.removeAllTakeOverLoans(loan);\r\n\t\tthis.setState({showClearTakeoverLoansModal:true});\r\n\t}\r\n\r\n\tconfirmRemoveAllAims(loan:Loan) {\r\n\t\t// TODO: Confirm with modal.\r\n\t\t//this.loanService.removeAllAims(loan);\r\n\t\tthis.setState({showClearAimsModal:true});\r\n\t}\r\n\r\n\ttriggerImmidiateValidation():void {\r\n\t\tthis.setState({ immidiateAllValidatorsVisibleBefore : new Date() })\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst c = this.props.case;\r\n\t\tconst loan = c.loan;\r\n\t\tif (!loan) return null;\r\n\r\n\t\tconst loanService = this.loanService;\r\n\t\tconst applicant = this.myApplicant;\r\n\t\tconst askAboutDownpayment = loanService.askAboutDownpayment(loan);\r\n\r\n\t\tconst validationResult = this.props.context.getValidation();\r\n\t\tconst loanAmount = loanService.getLoanAmount(loan);\r\n\r\n\t\tconst hasTakeoverLoans = loanService.hasTakeoverLoans(loan);\r\n\t\tconst hasAims = loanService.hasAims(loan);\r\n\t\tconst showSum = hasTakeoverLoans || hasAims;\r\n\t\tconst mainLoanPurposesOptions: CheckboxOption[] = [\r\n\t\t\t{\r\n\t\t\t\tvalue: 'TAKEOVERLOAN',\r\n\t\t\t\tchecked: hasTakeoverLoans,\r\n\t\t\t\tlabelTextkey: 'Loan_TakeOver',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tvalue: 'NEWLOAN',\r\n\t\t\t\tchecked: hasAims,\r\n\t\t\t\tlabelTextkey: 'Loan_New',\r\n\t\t\t}\r\n\t\t];\r\n\r\n\t\tconst mainLoanPurposesValues = mainLoanPurposesOptions.filter(x => x.checked).map(x => x.value||'');\r\n\t\tconst immidiateAllValidatorsVisibleBefore = this.state.immidiateAllValidatorsVisibleBefore;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t */}\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t{hasTakeoverLoans && \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t{hasAims && \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t{showSum &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t {value}}\r\n\t\t\t\t\t\t\tthousandSeparator=\" \"\r\n\t\t\t\t\t\t\tsuffix=\" kr\"\r\n\t\t\t\t\t\t\tdisplayType=\"text\"\r\n\t\t\t\t\t\t\tvalue={loanAmount}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{loanAmount>0 && \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t{askAboutDownpayment && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{(hasTakeoverLoans || hasAims) && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t