hl-core 0.0.9-beta.3 → 0.0.9-beta.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/api/base.api.ts +862 -0
  2. package/api/index.ts +2 -620
  3. package/api/interceptors.ts +58 -14
  4. package/components/Button/Btn.vue +3 -3
  5. package/components/Complex/ContentBlock.vue +1 -1
  6. package/components/Complex/MessageBlock.vue +2 -2
  7. package/components/Complex/Page.vue +8 -2
  8. package/components/Complex/WhiteBlock.vue +7 -0
  9. package/components/Dialog/Dialog.vue +60 -15
  10. package/components/Dialog/FamilyDialog.vue +5 -5
  11. package/components/Form/DynamicForm.vue +99 -0
  12. package/components/Form/FormBlock.vue +36 -29
  13. package/components/Form/FormData.vue +48 -0
  14. package/components/Form/FormSection.vue +2 -2
  15. package/components/Form/FormTextSection.vue +3 -3
  16. package/components/Form/FormToggle.vue +3 -3
  17. package/components/Form/ManagerAttachment.vue +104 -52
  18. package/components/Form/ProductConditionsBlock.vue +73 -20
  19. package/components/Input/DynamicInput.vue +23 -0
  20. package/components/Input/EmptyFormField.vue +1 -1
  21. package/components/Input/FileInput.vue +15 -4
  22. package/components/Input/Monthpicker.vue +33 -0
  23. package/components/Input/PanelInput.vue +5 -1
  24. package/components/Input/RoundedEmptyField.vue +5 -0
  25. package/components/Input/RoundedSelect.vue +13 -0
  26. package/components/Input/SwitchInput.vue +64 -0
  27. package/components/Input/TextInput.vue +161 -0
  28. package/components/Layout/Drawer.vue +17 -4
  29. package/components/Layout/Header.vue +2 -2
  30. package/components/Layout/SettingsPanel.vue +10 -15
  31. package/components/List/ListEmpty.vue +1 -1
  32. package/components/Menu/MenuHover.vue +1 -1
  33. package/components/Menu/MenuNav.vue +3 -3
  34. package/components/Menu/MenuNavItem.vue +4 -4
  35. package/components/Pages/Anketa.vue +144 -65
  36. package/components/Pages/Auth.vue +21 -10
  37. package/components/Pages/ContragentForm.vue +505 -0
  38. package/components/Pages/Documents.vue +57 -11
  39. package/components/Pages/InvoiceInfo.vue +2 -2
  40. package/components/Pages/MemberForm.vue +253 -89
  41. package/components/Pages/ProductAgreement.vue +2 -11
  42. package/components/Pages/ProductConditions.vue +777 -164
  43. package/components/Panel/PanelHandler.vue +297 -54
  44. package/components/Panel/PanelSelectItem.vue +18 -3
  45. package/components/Panel/RightPanelCloser.vue +7 -0
  46. package/components/Utilities/IconBorder.vue +17 -0
  47. package/composables/axios.ts +1 -1
  48. package/composables/classes.ts +405 -9
  49. package/composables/constants.ts +40 -0
  50. package/composables/fields.ts +203 -0
  51. package/composables/index.ts +48 -0
  52. package/composables/styles.ts +22 -10
  53. package/configs/i18n.ts +0 -2
  54. package/layouts/default.vue +46 -4
  55. package/layouts/full.vue +1 -1
  56. package/locales/ru.json +423 -11
  57. package/nuxt.config.ts +1 -1
  58. package/package.json +30 -39
  59. package/pages/500.vue +2 -2
  60. package/pages/Token.vue +1 -0
  61. package/plugins/helperFunctionsPlugins.ts +6 -7
  62. package/plugins/vuetifyPlugin.ts +2 -0
  63. package/store/data.store.ts +936 -217
  64. package/store/extractStore.ts +17 -0
  65. package/store/form.store.ts +13 -1
  66. package/store/member.store.ts +1 -1
  67. package/store/rules.ts +38 -2
  68. package/types/enum.ts +8 -0
  69. package/types/form.ts +94 -0
  70. package/types/index.ts +162 -10
  71. package/components/Button/BtnIcon.vue +0 -47
  72. package/locales/kz.json +0 -590
@@ -1,7 +1,14 @@
1
1
  <template>
2
2
  <section class="flex flex-col gap-4 px-[10px]">
3
- <v-form ref="vForm" @submit="submitForm" class="max-h-[82svh] overflow-y-scroll">
4
- <base-form-section v-if="whichProduct === 'gons'" :title="$dataStore.t('productConditionsForm.requestedProductConditions')" :class="[$libStyles.textSimple]">
3
+ <v-form ref="vForm" @submit="submitForm" class="overflow-y-scroll" :class="[!$dataStore.isCalculator && isCalculator && hasCalculated ? 'max-h-[73svh]' : 'max-h-[80svh]']">
4
+ <base-message-block
5
+ v-if="isCalculator"
6
+ class="mt-4"
7
+ :color="$styles.blueBgLight"
8
+ :text="$dataStore.t('preliminaryCalculation')"
9
+ icon="mdi-alert text-[#FCB016]"
10
+ ></base-message-block>
11
+ <base-form-section v-if="whichProduct === 'gons'" :title="$dataStore.t('productConditionsForm.requestedProductConditions')" :class="[$styles.textSimple]">
5
12
  <base-form-text-section
6
13
  class="mb-4"
7
14
  title="Инвалидность I или II группы по причине несчастного случая, начиная с третьего года по любой причине, с освобождением от уплаты страховых взносов"
@@ -37,7 +44,7 @@
37
44
  <base-form-input v-model="formStore.policyholderForm.age" :label="$dataStore.t('form.age')" :readonly="true" />
38
45
  <base-form-input v-model="formStore.policyholderForm.gender.nameRu" class="mb-4" :label="$dataStore.t('form.gender')" :readonly="true" />
39
46
  </base-form-section>
40
- <base-form-section v-if="isUnderwriterRole && $dataStore.members.insuredApp.has === true" :title="$dataStore.t('insuredForm')">
47
+ <base-form-section v-if="isUnderwriterRole && $dataStore.members.insuredApp.has === true && whichProduct !== 'lifebusiness'" :title="$dataStore.t('insuredForm')">
41
48
  <div v-for="(insured, index) of formStore.insuredForm" :key="index">
42
49
  <base-form-input v-model="insured.longName" :label="$dataStore.t('labels.insurerLongName')" :readonly="true" />
43
50
  <base-form-input v-model="insured.job" :label="$dataStore.t('form.job')" :readonly="true" />
@@ -54,14 +61,14 @@
54
61
  :clearable="isRecalculationDisabled === false"
55
62
  :label="$dataStore.t('percent') + `Life Multiply`"
56
63
  :readonly="isRecalculationDisabled"
57
- :rules="$dataStore.rules.recalculationMultiply"
64
+ :rules="whichProduct === 'gons' ? $dataStore.rules.recalculationMultiplyBetween : $dataStore.rules.recalculationMultiply"
58
65
  />
59
66
  <base-form-input
60
67
  v-model="productConditionsForm.lifeAdditive"
61
68
  :maska="$maska.numbers"
62
69
  :clearable="isRecalculationDisabled === false"
63
70
  :label="$dataStore.t('percent') + `Life Additive`"
64
- :readonly="isRecalculationDisabled"
71
+ :readonly="readonlyLifeAdditive"
65
72
  :rules="$dataStore.rules.recalculationAdditive"
66
73
  />
67
74
  <base-form-input
@@ -87,21 +94,21 @@
87
94
  :maska="$maska.numbers"
88
95
  :clearable="isRecalculationDisabled === false"
89
96
  :label="$dataStore.t('percent') + `Disability Multiply`"
90
- :readonly="isRecalculationDisabled"
91
- :rules="$dataStore.rules.recalculationMultiply"
97
+ :readonly="readonlyDisabilityMultiply"
98
+ :rules="whichProduct === 'gons' ? [] : $dataStore.rules.recalculationMultiply"
92
99
  />
93
100
  <base-form-input
94
101
  v-model="productConditionsForm.disabilityAdditive"
95
102
  :maska="$maska.numbers"
96
103
  :clearable="isRecalculationDisabled === false"
97
104
  :label="$dataStore.t('percent') + `Disability Additive`"
98
- :readonly="isRecalculationDisabled"
105
+ :readonly="readonlyDisabilityAdditive"
99
106
  :rules="$dataStore.rules.recalculationAdditive"
100
107
  />
101
108
  <base-panel-input
102
109
  v-if="hasRiskGroup"
103
110
  v-model="productConditionsForm.riskGroup"
104
- :value="productConditionsForm.riskGroup.nameRu"
111
+ :value="productConditionsForm.riskGroup?.nameRu"
105
112
  :label="$dataStore.t('productConditionsForm.riskGroup')"
106
113
  :clearable="isRecalculationDisabled === false"
107
114
  :readonly="isRecalculationDisabled"
@@ -109,8 +116,8 @@
109
116
  @append="openPanel($dataStore.t('productConditionsForm.riskGroup'), $dataStore.riskGroup, 'riskGroup')"
110
117
  />
111
118
  </base-form-section>
112
- <base-form-section :title="$dataStore.t('generalConditions')">
113
- <div v-if="isRecalculation && ($route.params.taskId === '0' || $dataStore.isCalculator)">
119
+ <base-form-section v-if="hasDefault" :title="$dataStore.t('generalConditions')">
120
+ <div v-if="isCalculator && ($route.params.taskId === '0' || $dataStore.isCalculator)">
114
121
  <base-form-input
115
122
  v-model="productConditionsForm.signDate"
116
123
  :maska="$maska.date"
@@ -120,6 +127,7 @@
120
127
  append-inner-icon="mdi mdi-calendar-blank-outline"
121
128
  />
122
129
  <base-form-input
130
+ v-if="hasBirthDate"
123
131
  v-model="productConditionsForm.birthDate"
124
132
  :maska="$maska.date"
125
133
  :readonly="isDisabled"
@@ -129,8 +137,9 @@
129
137
  append-inner-icon="mdi mdi-calendar-blank-outline"
130
138
  />
131
139
  <base-panel-input
140
+ v-if="hasGender"
132
141
  v-model="productConditionsForm.gender"
133
- :value="productConditionsForm.gender.nameRu"
142
+ :value="productConditionsForm.gender?.nameRu"
134
143
  :readonly="isDisabled"
135
144
  :clearable="!isDisabled"
136
145
  :label="$dataStore.t('form.gender')"
@@ -142,15 +151,15 @@
142
151
  <base-form-input
143
152
  v-model="productConditionsForm.coverPeriod"
144
153
  :maska="$maska.numbers"
145
- :readonly="isDisabled"
154
+ :readonly="isDisabledCoverPeriod"
146
155
  :clearable="!isDisabled"
147
156
  :rules="coverPeriodRule"
148
- :label="$dataStore.t(whichProduct === 'gons' ? 'productConditionsForm.coverPeriodFrom3to20' : 'productConditionsForm.coverPeriod')"
157
+ :label="coverPeriodLabel"
149
158
  />
150
159
  <base-panel-input
151
160
  v-if="hasPaymentPeriod"
152
161
  v-model="productConditionsForm.paymentPeriod"
153
- :value="productConditionsForm.paymentPeriod.nameRu"
162
+ :value="productConditionsForm.paymentPeriod?.nameRu"
154
163
  :readonly="isDisabled"
155
164
  :clearable="!isDisabled"
156
165
  :rules="$rules.objectRequired"
@@ -161,7 +170,7 @@
161
170
  <base-panel-input
162
171
  v-if="hasProcessIndexRate"
163
172
  v-model="productConditionsForm.processIndexRate"
164
- :value="productConditionsForm.processIndexRate.nameRu"
173
+ :value="productConditionsForm.processIndexRate?.nameRu"
165
174
  :readonly="isDisabled"
166
175
  :clearable="!isDisabled"
167
176
  :rules="$rules.objectRequired"
@@ -172,8 +181,8 @@
172
181
  <base-form-input
173
182
  v-model="productConditionsForm.requestedSumInsured"
174
183
  :readonly="isDisabledSum"
175
- :clearable="!isDisabled"
176
- :rules="requestedSumInsured"
184
+ :clearable="!isDisabledSum"
185
+ :rules="requestedSumInsuredRule"
177
186
  :label="requestedSumInsuredLabel"
178
187
  :suffix="$constants.currencySymbols.kzt"
179
188
  @input="onInputSum"
@@ -183,8 +192,8 @@
183
192
  v-if="hasRequestedSumInsuredInDollar"
184
193
  v-model="productConditionsForm.requestedSumInsuredInDollar"
185
194
  :readonly="isDisabledSumDollar"
186
- :clearable="!isDisabled"
187
- :rules="requestedSumInsured"
195
+ :clearable="!isDisabledSumDollar"
196
+ :rules="requestedSumInsuredRule"
188
197
  :label="$dataStore.t('productConditionsForm.requestedSumInsuredInDollar')"
189
198
  :suffix="$constants.currencySymbols.usd"
190
199
  @input="onInputSumDollar"
@@ -192,10 +201,10 @@
192
201
  />
193
202
  <base-form-input
194
203
  v-model="productConditionsForm.insurancePremiumPerMonth"
195
- :readonly="isDisabled"
196
- :clearable="!isDisabled"
197
- :rules="insurancePremiumPerMonth"
198
- :label="$dataStore.t('productConditionsForm.insurancePremiumAmount')"
204
+ :readonly="insurancePremiumPerMonthDisabled"
205
+ :clearable="!insurancePremiumPerMonthDisabled"
206
+ :rules="insurancePremiumPerMonthRule"
207
+ :label="insurancePremiumPerMonthLabel"
199
208
  :suffix="$constants.currencySymbols.kzt"
200
209
  @input="onInputInsurancePremiumPerMonth"
201
210
  @onClear="onClearPremium"
@@ -203,9 +212,9 @@
203
212
  <base-form-input
204
213
  v-if="hasInsurancePremiumPerMonthInDollar"
205
214
  v-model="productConditionsForm.insurancePremiumPerMonthInDollar"
206
- :readonly="isDisabled"
207
- :clearable="!isDisabled"
208
- :rules="insurancePremiumPerMonth"
215
+ :readonly="insurancePremiumPerMonthDisabled"
216
+ :clearable="!insurancePremiumPerMonthDisabled"
217
+ :rules="insurancePremiumPerMonthRule"
209
218
  :label="$dataStore.t('productConditionsForm.insurancePremiumAmountInDollar')"
210
219
  :suffix="$constants.currencySymbols.usd"
211
220
  @input="onInputInsurancePremiumPerMonthInDollar"
@@ -218,8 +227,57 @@
218
227
  :label="$dataStore.t('productConditionsForm.dollarExchangeRateNBRK')"
219
228
  :suffix="$constants.currencySymbols.kzt"
220
229
  />
230
+ <base-form-input
231
+ v-if="whichProduct === 'gons'"
232
+ v-model="productConditionsForm.totalAmount5"
233
+ :readonly="true"
234
+ :label="$dataStore.t('productConditionsForm.totalAmount5')"
235
+ :suffix="$constants.currencySymbols.kzt"
236
+ />
237
+ <base-form-input
238
+ v-if="whichProduct === 'gons'"
239
+ v-model="productConditionsForm.statePremium5"
240
+ :readonly="true"
241
+ :label="$dataStore.t('productConditionsForm.statePremium5')"
242
+ :suffix="$constants.currencySymbols.kzt"
243
+ />
244
+ <base-form-input
245
+ v-if="whichProduct === 'gons'"
246
+ v-model="productConditionsForm.totalAmount7"
247
+ :readonly="true"
248
+ :label="$dataStore.t('productConditionsForm.totalAmount7')"
249
+ :suffix="$constants.currencySymbols.kzt"
250
+ />
251
+ <base-form-input
252
+ v-if="whichProduct === 'gons'"
253
+ v-model="productConditionsForm.statePremium7"
254
+ :readonly="true"
255
+ :label="$dataStore.t('productConditionsForm.statePremium7')"
256
+ :suffix="$constants.currencySymbols.kzt"
257
+ />
258
+ <base-panel-input
259
+ v-if="hasAgencyPart"
260
+ v-model="productConditionsForm.processTariff"
261
+ :value="productConditionsForm.processTariff?.nameRu"
262
+ :readonly="isDisabled"
263
+ :clearable="!isDisabled"
264
+ :rules="$rules.objectRequired"
265
+ :label="$dataStore.t('productConditionsForm.agencyPart')"
266
+ append-inner-icon="mdi mdi-chevron-right"
267
+ @append="openPanel($dataStore.t('productConditionsForm.agencyPart'), $dataStore.processTariff, 'processTariff', $dataStore.getProcessTariff)"
268
+ />
269
+ <base-panel-input
270
+ v-if="hasProcessGfot"
271
+ v-model="productConditionsForm.processGfot"
272
+ :value="productConditionsForm.processGfot?.nameRu"
273
+ :readonly="isDisabledProcessGfot"
274
+ :clearable="!isDisabledProcessGfot"
275
+ :label="$dataStore.t('productConditionsForm.processGfot')"
276
+ append-inner-icon="mdi mdi-chevron-right"
277
+ @append="openPanel($dataStore.t('productConditionsForm.processGfot'), $dataStore.processGfot, 'processGfot', $dataStore.getProcessGfot)"
278
+ />
221
279
  </base-form-section>
222
- <base-form-section :title="$dataStore.t('calculationAnnuityPayments')" v-if="hasAnnuityPayments">
280
+ <base-form-section v-if="hasAnnuityPayments" :title="$dataStore.t('calculationAnnuityPayments')">
223
281
  <base-form-toggle
224
282
  v-model="productConditionsForm.additionalConditionAnnuityPayments"
225
283
  :title="$dataStore.t('productConditionsForm.guaranteedTermAnnuityPayments')"
@@ -240,7 +298,7 @@
240
298
  />
241
299
  <base-panel-input
242
300
  v-model="productConditionsForm.typeAnnuityInsurance"
243
- :value="productConditionsForm.typeAnnuityInsurance.nameRu"
301
+ :value="productConditionsForm.typeAnnuityInsurance?.nameRu"
244
302
  :readonly="isDisabled"
245
303
  :clearable="!isDisabled"
246
304
  :rules="$rules.objectRequired"
@@ -258,7 +316,7 @@
258
316
  />
259
317
  <base-panel-input
260
318
  v-model="productConditionsForm.periodAnnuityPayment"
261
- :value="productConditionsForm.periodAnnuityPayment.nameRu"
319
+ :value="productConditionsForm.periodAnnuityPayment?.nameRu"
262
320
  :readonly="isDisabled"
263
321
  :clearable="!isDisabled"
264
322
  :rules="$rules.objectRequired"
@@ -281,6 +339,128 @@
281
339
  :label="$dataStore.t('productConditionsForm.amountAnnuityPayments')"
282
340
  />
283
341
  </base-form-section>
342
+ <base-form-section v-if="whichProduct === 'lifetrip'" :title="$dataStore.t('generalConditions')">
343
+ <base-panel-input
344
+ v-model="calculatorForm.type"
345
+ :value="calculatorForm.type.nameRu ?? $dataStore.t('form.notChosen')"
346
+ :readonly="isDisabled"
347
+ :clearable="!isDisabled"
348
+ :rules="$rules.objectRequired"
349
+ :label="$dataStore.t('calculatorForm.type')"
350
+ append-inner-icon="mdi mdi-chevron-right"
351
+ @append="openPanel($dataStore.t('calculatorForm.type'), [], 'type', $dataStore.getDicTripType)"
352
+ />
353
+ <base-panel-input
354
+ v-model="calculatorForm.countries"
355
+ :value="calculatorForm?.countries![0]?.nameRu && calculatorForm.countries.length ? countriesComputed : $dataStore.t('form.notChosen')"
356
+ :readonly="isDisabled"
357
+ :clearable="!isDisabled"
358
+ :clear-value="[]"
359
+ :label="$dataStore.t('calculatorForm.countries')"
360
+ append-inner-icon="mdi mdi-chevron-right"
361
+ @append="openMultiplePanel($dataStore.t('calculatorForm.countries'), $dataStore.dicAllCountries, 'countries', $dataStore.getDicCountries)"
362
+ />
363
+ <base-panel-input
364
+ v-model="calculatorForm.amount"
365
+ :value="calculatorForm.amount.nameRu ? calculatorForm.amount.nameRu + $dataStore.currency : $dataStore.t('form.notChosen')"
366
+ :readonly="isDisabled"
367
+ :clearable="!isDisabled"
368
+ :rules="$rules.objectRequired"
369
+ :label="$dataStore.t('calculatorForm.amount')"
370
+ append-inner-icon="mdi mdi-chevron-right"
371
+ @append="openPanel($dataStore.t('calculatorForm.amount'), $dataStore.amountArray, 'amount')"
372
+ />
373
+ <base-panel-input
374
+ v-model="calculatorForm.purpose"
375
+ :value="calculatorForm.purpose.nameRu ?? $dataStore.t('form.notChosen')"
376
+ :readonly="isDisabled"
377
+ :clearable="!isDisabled"
378
+ :rules="$rules.objectRequired"
379
+ :label="$dataStore.t('calculatorForm.purpose')"
380
+ append-inner-icon="mdi mdi-chevron-right"
381
+ @append="openPanel($dataStore.t('calculatorForm.purpose'), [], 'purpose', $dataStore.getDicTripPurpose)"
382
+ />
383
+ <base-panel-input
384
+ v-if="calculatorForm.purpose.code === 'WorkStudy'"
385
+ v-model="calculatorForm.workType"
386
+ :value="calculatorForm.workType.nameRu ?? $dataStore.t('form.notChosen')"
387
+ :readonly="isDisabled"
388
+ :clearable="!isDisabled"
389
+ :rules="$rules.objectRequired"
390
+ :label="$dataStore.t('calculatorForm.workType')"
391
+ append-inner-icon="mdi mdi-chevron-right"
392
+ @append="openPanel($dataStore.t('calculatorForm.workType'), [], 'workType', $dataStore.getDicTripWorkType)"
393
+ />
394
+ <base-panel-input
395
+ v-if="calculatorForm.purpose.code === 'Sport'"
396
+ v-model="calculatorForm.sportsType"
397
+ :value="calculatorForm.sportsType.nameRu ?? $dataStore.t('form.notChosen')"
398
+ :readonly="isDisabled"
399
+ :clearable="!isDisabled"
400
+ :rules="$rules.objectRequired"
401
+ :label="$dataStore.t('calculatorForm.sportsType')"
402
+ append-inner-icon="mdi mdi-chevron-right"
403
+ @append="openPanel($dataStore.t('calculatorForm.sportsType'), [], 'sportsType', $dataStore.getDicSportsType)"
404
+ />
405
+ <base-panel-input
406
+ v-if="calculatorForm.type.code === 'Multiple'"
407
+ v-model="calculatorForm.period"
408
+ :value="calculatorForm.period && calculatorForm.period.nameRu ? calculatorForm.period.nameRu : $dataStore.t('form.notChosen')"
409
+ :readonly="isDisabled"
410
+ :clearable="!isDisabled"
411
+ :rules="$rules.objectRequired"
412
+ :label="$dataStore.t('calculatorForm.period')"
413
+ append-inner-icon="mdi mdi-chevron-right"
414
+ @append="openPanel($dataStore.t('calculatorForm.period'), $dataStore.periodArray, 'period')"
415
+ />
416
+ <base-panel-input
417
+ v-if="calculatorForm.type.code === 'Multiple'"
418
+ v-model="calculatorForm.maxDays"
419
+ :value="calculatorForm.period && calculatorForm.maxDays.nameRu ? calculatorForm.maxDays.nameRu : $dataStore.t('form.notChosen')"
420
+ :readonly="isDisabled"
421
+ :clearable="!isDisabled"
422
+ :rules="$rules.objectRequired"
423
+ :label="$dataStore.t('calculatorForm.maxDays')"
424
+ append-inner-icon="mdi mdi-chevron-right"
425
+ @append="openPanel($dataStore.t('calculatorForm.maxDays'), $dataStore.maxDaysFiltered, 'maxDays')"
426
+ />
427
+ <base-form-input
428
+ v-if="calculatorForm.type.code === 'Single'"
429
+ v-model="calculatorForm.days"
430
+ :readonly="isDisabled || !isCalculator"
431
+ :label="$dataStore.t('calculatorForm.days')"
432
+ :rules="$rules.required"
433
+ />
434
+ <base-form-input
435
+ v-if="isCalculator && whichProduct === 'lifetrip'"
436
+ v-model="calculatorForm.age"
437
+ :rules="$rules.required"
438
+ :readonly="isDisabledSum"
439
+ :clearable="!isDisabled"
440
+ :label="$dataStore.t('calculatorForm.age')"
441
+ />
442
+ <base-form-input
443
+ v-if="!isCalculator && whichProduct === 'lifetrip'"
444
+ v-model="calculatorForm.startDate"
445
+ :readonly="isDisabled"
446
+ :clearable="!isDisabled"
447
+ :label="$dataStore.t('calculatorForm.startDate')"
448
+ :rules="$dataStore.rules.required.concat($dataStore.rules.planDate)"
449
+ :maska="$maska.date"
450
+ append-inner-icon="mdi mdi-calendar-blank-outline"
451
+ />
452
+ <base-form-input
453
+ v-if="!isCalculator && calculatorForm.type.code != 'Multiple'"
454
+ v-model="calculatorForm.endDate"
455
+ :readonly="isDisabled"
456
+ :clearable="!isDisabled"
457
+ :label="$dataStore.t('calculatorForm.endDate')"
458
+ :rules="$dataStore.rules.required"
459
+ :maska="$maska.date"
460
+ append-inner-icon="mdi mdi-calendar-blank-outline"
461
+ />
462
+ <base-form-input v-model="calculatorForm.price" :readonly="true" :label="isCalculator ? $dataStore.t('calculatorForm.premium') : $dataStore.t('calculatorForm.price')" />
463
+ </base-form-section>
284
464
  <base-form-section v-if="additionalTerms && additionalTerms.length" :title="$dataStore.t('productConditionsForm.additional')">
285
465
  <div v-for="(term, index) of additionalTerms" :key="index">
286
466
  <base-panel-input
@@ -288,7 +468,7 @@
288
468
  v-model="additionalTerms[index]"
289
469
  :value="term.coverSumName"
290
470
  :readonly="isTermsDisabled"
291
- :clearable="!isTermsDisabled"
471
+ :clearable="false"
292
472
  :label="term.coverTypeName"
293
473
  append-inner-icon="mdi mdi-chevron-right"
294
474
  :suffix="!!term.amount ? `${formatTermValue(term.amount)} ${currencySymbolsAddTerm}` : ''"
@@ -297,12 +477,7 @@
297
477
  </div>
298
478
  </base-form-section>
299
479
  </v-form>
300
- <base-btn
301
- v-if="!$dataStore.isCalculator && isRecalculation && hasCalculated"
302
- :btn="$libStyles.greenLightBtn"
303
- :text="$dataStore.t('buttons.toStatement')"
304
- @click="toStatement"
305
- />
480
+ <base-btn v-if="!$dataStore.isCalculator && isCalculator && hasCalculated" :btn="$styles.greenLightBtn" :text="$dataStore.t('buttons.toStatement')" @click="toStatement" />
306
481
  <base-btn
307
482
  v-if="$dataStore.isCalculator ? true : !isDisabled && isTask && ($dataStore.isInitiator() || $dataStore.isUnderwriter())"
308
483
  :loading="isCalculating"
@@ -313,8 +488,8 @@
313
488
  <base-btn :text="$dataStore.t('buttons.calcSum')" type="submit" @click.prevent="underwriterCalculate('sum')" :loading="isCalculating" />
314
489
  <base-btn :text="$dataStore.t('buttons.calcPremium')" type="submit" @click.prevent="underwriterCalculate('premium')" :loading="isCalculating" />
315
490
  </div>
316
- <Teleport v-if="isPanelOpen" to="#panel-actions">
317
- <div :class="[$libStyles.scrollPage]" class="flex flex-col items-center">
491
+ <Teleport v-if="isPanelOpen" to="#right-panel-actions">
492
+ <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
318
493
  <base-rounded-input v-model.trim="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
319
494
  <div v-if="panelList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
320
495
  <base-panel-select-item :text="$dataStore.t('form.notChosen')" :selected="panelValue.nameRu === null" @click="pickPanelValue(new Value())" />
@@ -329,8 +504,31 @@
329
504
  <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
330
505
  </div>
331
506
  </Teleport>
332
- <Teleport v-if="isTermsPanelOpen" to="#panel-actions">
333
- <div :class="[$libStyles.scrollPage]" class="flex flex-col items-center">
507
+ <Teleport v-if="isMultiplePanelOpen && calculatorForm.countries !== null" to="#right-panel-actions">
508
+ <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
509
+ <base-rounded-input v-model.trim="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
510
+ <v-fade-transition>
511
+ <base-form-section v-if="countriesComputed" class="w-[95%]" :title="$dataStore.t('calculatorForm.selectedCountries')">
512
+ <base-white-block class="text-center" :class="[$styles.textSimple]"> {{ countriesComputed }} </base-white-block>
513
+ </base-form-section>
514
+ </v-fade-transition>
515
+ <div v-if="multiplePanelList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
516
+ <base-panel-select-item :text="$dataStore.t('buttons.clearOrReset')" @click="calculatorForm.countries = []" false-icon="mdi-close-circle-outline" />
517
+ <base-panel-select-item
518
+ v-for="(item, index) of multiplePanelList.filter(i => i.nameRu && (i.nameRu as string).match(new RegExp(searchQuery, 'i')))"
519
+ :key="index"
520
+ :text="(item.nameRu as string)"
521
+ :selected="calculatorForm.countries && calculatorForm.countries.some(option => option.id === item.id)"
522
+ :disabled="calculatorForm.countries.length >= 3 && !calculatorForm.countries.some(option => option.id === item.id)"
523
+ true-icon="mdi-check-circle-outline"
524
+ @click="selectOption(item)"
525
+ />
526
+ </div>
527
+ <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
528
+ </div>
529
+ </Teleport>
530
+ <Teleport v-if="isTermsPanelOpen" to="#right-panel-actions">
531
+ <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
334
532
  <base-rounded-input v-model.trim="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
335
533
  <div v-if="panelList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
336
534
  <base-panel-select-item
@@ -344,20 +542,48 @@
344
542
  <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
345
543
  </div>
346
544
  </Teleport>
545
+ <Teleport v-if="isFixInsAmountPanelOpen" to="#right-panel-actions">
546
+ <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
547
+ <base-rounded-input v-model.trim="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
548
+ <div class="w-full flex flex-col gap-2 p-2">
549
+ <base-panel-select-item
550
+ v-for="(item, index) of $constants.fixInsAmount.filter(i => i.nameRu && (i.nameRu as string).match(new RegExp(searchQuery, 'i')))"
551
+ :key="index"
552
+ :text="(item.nameRu as string)"
553
+ :selected="item.code === fixInsValue"
554
+ @click="pickfixInsValue(item)"
555
+ />
556
+ </div>
557
+ </div>
558
+ </Teleport>
559
+ <Teleport v-if="isCoverPeriodPanelOpen" to="#right-panel-actions">
560
+ <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
561
+ <base-rounded-input v-model.trim="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
562
+ <div class="w-full flex flex-col gap-2 p-2">
563
+ <base-panel-select-item
564
+ v-for="(item, index) of panelList.filter(i => i.nameRu && (i.nameRu as string).match(new RegExp(searchQuery, 'i')))"
565
+ :key="index"
566
+ :text="(item.nameRu as string)"
567
+ :selected="item.code === coverPeriodValue"
568
+ @click="pickCoverPeriodValue(item)"
569
+ />
570
+ </div>
571
+ </div>
572
+ </Teleport>
347
573
  </section>
348
574
  </template>
349
575
 
350
576
  <script lang="ts">
351
- import { Member, Value } from '../../composables/classes';
577
+ import { Member, Value, CountryValue, CalculatorForm } from '../../composables/classes';
352
578
 
353
579
  export default defineComponent({
354
580
  props: {
355
- isRecalculation: {
581
+ isCalculator: {
356
582
  type: Boolean,
357
583
  default: false,
358
584
  },
359
585
  product: {
360
- type: String,
586
+ type: String as PropType<Projects>,
361
587
  default: false,
362
588
  },
363
589
  },
@@ -369,11 +595,15 @@ export default defineComponent({
369
595
  const dataStore = useDataStore();
370
596
  const memberStore = useMemberStore();
371
597
 
372
- const whichProduct = ref<string>(dataStore.isCalculator ? props.product : dataStore.product!);
598
+ const whichProduct = ref<Projects | null>(dataStore.isCalculator ? props.product : dataStore.product!);
373
599
  const isCalculating = ref<boolean>(false);
374
600
  const isPanelLoading = ref<boolean>(false);
375
601
  const isPanelOpen = ref<boolean>(false);
376
602
  const isTermsPanelOpen = ref<boolean>(false);
603
+ const isFixInsAmountPanelOpen = ref<boolean>(false);
604
+ const isCoverPeriodPanelOpen = ref<boolean>(false);
605
+ const fixInsValue = ref<string | number>();
606
+ const coverPeriodValue = ref<string>('');
377
607
  const panelValue = ref<Value>(new Value());
378
608
  const termValue = ref<AddCover>();
379
609
  const panelList = ref<Value[]>([]);
@@ -384,8 +614,14 @@ export default defineComponent({
384
614
  const whichSum = ref<'insurancePremiumPerMonth' | 'requestedSumInsured' | ''>('');
385
615
 
386
616
  const additionalTerms = ref<AddCover[]>([]);
617
+ const isMultiplePanelOpen = ref<boolean>(false);
618
+
619
+ const multiplePanelValue = ref<CountryValue>(new CountryValue());
620
+ const multiplePanelList = ref<CountryValue[]>([]);
621
+ const calculatorForm = productConditionsForm.calculatorForm;
622
+
387
623
  const isUnderwriterForm = computed(() => {
388
- if (route.params.taskId === '0 ' || props.isRecalculation === true) {
624
+ if (route.params.taskId === '0 ' || props.isCalculator === true) {
389
625
  return false;
390
626
  } else {
391
627
  return formStore.applicationData.statusCode === 'UnderwriterForm';
@@ -393,20 +629,34 @@ export default defineComponent({
393
629
  });
394
630
  const isDisabled = computed(() => (dataStore.isCalculator ? false : !memberStore.isStatementEditible('productConditionsForm')));
395
631
  const isTermsDisabled = computed(() => {
396
- if (dataStore.isGons) {
632
+ if (whichProduct.value === 'gons') {
397
633
  return true;
398
634
  }
399
635
  return isDisabled.value;
400
636
  });
401
- const isTask = computed(() => (route.params.taskId === '0' && props.isRecalculation === true) || dataStore.isTask());
402
- const isRecalculationDisabled = computed(() => formStore.isDisabled.recalculationForm);
637
+ const isTask = computed(() => (route.params.taskId === '0' && props.isCalculator === true) || dataStore.isTask());
638
+ const isRecalculationDisabled = computed(() => formStore.isDisabled.recalculationForm || formStore.canBeClaimed === true);
403
639
  const isUnderwriterRole = computed(() => dataStore.isUnderwriter() || dataStore.isAdmin() || dataStore.isSupport());
404
- const insurancePremiumPerMonth = computed(() => (!!productConditionsForm.insurancePremiumPerMonth ? dataStore.rules.required.concat(dataStore.rules.sums) : []));
405
- const requestedSumInsured = computed(() => (!!productConditionsForm.requestedSumInsured ? dataStore.rules.required.concat(dataStore.rules.sums) : []));
406
- const hasCalculated = computed(() => !!productConditionsForm.requestedSumInsured && !!productConditionsForm.insurancePremiumPerMonth);
640
+ const insurancePremiumPerMonthRule = computed(() => (!!productConditionsForm.insurancePremiumPerMonth ? dataStore.rules.required.concat(dataStore.rules.sums) : []));
641
+ const insurancePremiumPerMonthDisabled = computed(() => {
642
+ if (dataStore.isUnderwriter() && !isRecalculationDisabled.value) {
643
+ return false;
644
+ }
645
+ if (whichProduct.value === 'lifebusiness') {
646
+ return true;
647
+ }
648
+ return isDisabled.value;
649
+ });
650
+ const requestedSumInsuredRule = computed(() => (!!productConditionsForm.requestedSumInsured ? dataStore.rules.required.concat(dataStore.rules.sums) : []));
407
651
  const amountAnnuityPayments = computed(() => (!!productConditionsForm.amountAnnuityPayments ? dataStore.rules.required.concat(dataStore.rules.sums) : []));
652
+ const hasCalculated = computed(() => {
653
+ if (whichProduct.value === 'lifebusiness' && productConditionsForm.requestedSumInsured === null) {
654
+ return !!productConditionsForm.insurancePremiumPerMonth;
655
+ }
656
+ return !!productConditionsForm.requestedSumInsured && !!productConditionsForm.insurancePremiumPerMonth;
657
+ });
408
658
  const hasProcessIndexRate = computed(() => {
409
- if (whichProduct.value === 'gons' || whichProduct.value === 'halykkazyna' || whichProduct.value === 'liferenta') {
659
+ if (whichProduct.value === 'gons' || whichProduct.value === 'halykkazyna' || whichProduct.value === 'liferenta' || whichProduct.value === 'lifebusiness') {
410
660
  return false;
411
661
  }
412
662
  return true;
@@ -441,6 +691,24 @@ export default defineComponent({
441
691
  }
442
692
  return true;
443
693
  });
694
+ const readonlyLifeAdditive = computed(() => {
695
+ if (whichProduct.value === 'gons') {
696
+ return true;
697
+ }
698
+ return isRecalculationDisabled.value;
699
+ });
700
+ const readonlyDisabilityMultiply = computed(() => {
701
+ if (whichProduct.value === 'gons') {
702
+ return true;
703
+ }
704
+ return isRecalculationDisabled.value;
705
+ });
706
+ const readonlyDisabilityAdditive = computed(() => {
707
+ if (whichProduct.value === 'gons') {
708
+ return true;
709
+ }
710
+ return isRecalculationDisabled.value;
711
+ });
444
712
  const hasAdbAdditive = computed(() => {
445
713
  if (whichProduct.value === 'gons') {
446
714
  return false;
@@ -459,6 +727,30 @@ export default defineComponent({
459
727
  }
460
728
  return false;
461
729
  });
730
+ const hasBirthDate = computed(() => {
731
+ if (whichProduct.value === 'lifebusiness') {
732
+ return false;
733
+ }
734
+ return true;
735
+ });
736
+ const hasGender = computed(() => {
737
+ if (whichProduct.value === 'lifebusiness') {
738
+ return false;
739
+ }
740
+ return true;
741
+ });
742
+ const hasAgencyPart = computed(() => {
743
+ if (whichProduct.value === 'lifebusiness') {
744
+ return true;
745
+ }
746
+ return false;
747
+ });
748
+ const hasProcessGfot = computed(() => {
749
+ if (whichProduct.value === 'lifebusiness') {
750
+ return true;
751
+ }
752
+ return false;
753
+ });
462
754
  const coverPeriodRule = computed(() => {
463
755
  const baseCondition = dataStore.rules.required.concat(dataStore.rules.numbers);
464
756
  if (whichProduct.value === 'gons') {
@@ -479,30 +771,86 @@ export default defineComponent({
479
771
  if (whichProduct.value === 'halykkazyna') {
480
772
  return dataStore.t('productConditionsForm.requestedSumInsuredInTenge');
481
773
  }
774
+ if (whichProduct.value === 'lifebusiness') {
775
+ return dataStore.t('productConditionsForm.totalRequestedSumInsured');
776
+ }
482
777
  return dataStore.t('productConditionsForm.requestedSumInsured');
483
778
  });
779
+ const coverPeriodLabel = computed(() => {
780
+ if (whichProduct.value === 'gons') {
781
+ return dataStore.t('productConditionsForm.coverPeriodFrom3to20');
782
+ }
783
+ if (whichProduct.value === 'lifebusiness') {
784
+ return dataStore.t('productConditionsForm.coverPeriodMonth');
785
+ }
786
+ return dataStore.t('productConditionsForm.coverPeriod');
787
+ });
788
+ const insurancePremiumPerMonthLabel = computed(() => {
789
+ if (whichProduct.value === 'lifebusiness') {
790
+ return dataStore.t('productConditionsForm.totalInsurancePremiumAmount');
791
+ }
792
+ return dataStore.t('productConditionsForm.insurancePremiumAmount');
793
+ });
484
794
  const isDisabledSum = computed(() => {
485
795
  if (whichProduct.value === 'halykkazyna') {
486
796
  return true;
487
797
  }
798
+ if (dataStore.isUnderwriter() && !isRecalculationDisabled.value) {
799
+ return false;
800
+ }
801
+ if (whichProduct.value === 'lifebusiness' && productConditionsForm.processGfot.id !== null) {
802
+ return true;
803
+ }
488
804
  return isDisabled.value;
489
805
  });
490
806
  const isDisabledSumDollar = computed(() => {
491
807
  if (whichProduct.value === 'halykkazyna') {
492
808
  return true;
493
809
  }
810
+ if (dataStore.isUnderwriter() && !isRecalculationDisabled.value) {
811
+ return false;
812
+ }
813
+ return isDisabled.value;
814
+ });
815
+ const countriesComputed = computed(() => {
816
+ let message = '';
817
+ for (let country in calculatorForm.countries) {
818
+ message += calculatorForm.countries[country as any].nameRu + ', ';
819
+ }
820
+ return message.slice(0, -2);
821
+ });
822
+ const isDisabledCoverPeriod = computed(() => {
823
+ if (whichProduct.value === 'lifebusiness') {
824
+ return true;
825
+ }
826
+ return isDisabled.value;
827
+ });
828
+ const hasDefault = computed(() => {
829
+ if (whichProduct.value === 'lifetrip') {
830
+ return false;
831
+ }
832
+ return true;
833
+ });
834
+ const isDisabledProcessGfot = computed(() => {
835
+ if (whichProduct.value === 'lifebusiness' && !!productConditionsForm.requestedSumInsured) {
836
+ return true;
837
+ }
494
838
  return isDisabled.value;
495
839
  });
496
-
497
840
  const formatTermValue = (term: number) => {
498
841
  if (term !== null) {
499
- return Number.isInteger(term) ? dataStore.getNumberWithSpaces(term) : dataStore.getNumberWithDot(term);
842
+ const termNumber = Number(term);
843
+ return Number.isInteger(termNumber) ? dataStore.getNumberWithSpaces(termNumber) : dataStore.getNumberWithDot(termNumber);
500
844
  }
501
845
  return null;
502
846
  };
503
847
 
504
848
  const toStatement = async () => {
505
849
  const statementItem = dataStore.menuItems.find(i => i.id === 'statement');
850
+ if (whichProduct.value === 'lifebusiness') {
851
+ await router.push({ name: 'taskId-NewApp', params: route.params, query: { tab: 'statement' } });
852
+ return;
853
+ }
506
854
  if (statementItem) {
507
855
  dataStore.menu.selectedItem = statementItem;
508
856
  await router.replace({
@@ -516,30 +864,97 @@ export default defineComponent({
516
864
  };
517
865
 
518
866
  const pickPanelValue = (item: Value) => {
519
- dataStore.panel.open = false;
867
+ dataStore.rightPanel.open = false;
520
868
  isPanelOpen.value = false;
869
+ isMultiplePanelOpen.value = false;
870
+ if (item.id === null) {
871
+ calculatorForm.countries = [];
872
+ }
521
873
  if (!currentPanel.value) return;
522
- // @ts-ignore
523
- productConditionsForm[currentPanel.value] = item.nameRu === null ? new Value() : item;
874
+ if (whichProduct.value === 'lifetrip') {
875
+ // @ts-ignore
876
+ calculatorForm[currentPanel.value] = item.nameRu === null ? new Value() : item;
877
+ } else {
878
+ // @ts-ignore
879
+ productConditionsForm[currentPanel.value] = item.nameRu === null ? new Value() : item;
880
+ }
524
881
  };
525
-
526
- const pickTermValue = (item: Value) => {
527
- dataStore.panel.open = false;
882
+ const selectOption = (value: CountryValue) => {
883
+ if (calculatorForm.countries !== null) {
884
+ if (value.id == 0) {
885
+ calculatorForm.countries = [];
886
+ return (dataStore.dicCountries = dataStore.dicAllCountries);
887
+ }
888
+ if (calculatorForm.countries.some((option: CountryValue) => option.id == value.id)) {
889
+ calculatorForm.countries = calculatorForm.countries.filter((obj: CountryValue) => obj.id !== value.id);
890
+ dataStore.dicCountries = dataStore.dicAllCountries;
891
+ } else {
892
+ dataStore.dicCountries = dataStore.dicAllCountries.filter(i =>
893
+ i.id == 0 || (value.countryTypeCode == '1' && i.countryTypeCode == value.countryTypeCode) || (value.countryTypeCode != '1' && i.countryTypeCode != '1') ? true : false,
894
+ );
895
+ if (value.countryTypeCode == 1) {
896
+ dataStore.showToaster('success', dataStore.t('toaster.shengenZoneCondition'), 3000);
897
+ formStore.insuredForm.length = 1;
898
+ }
899
+ if (calculatorForm.countries.length < 3) {
900
+ calculatorForm.countries.push(value);
901
+ } else if (calculatorForm.countries.length >= 3) {
902
+ closeMultiplePanel();
903
+ }
904
+ }
905
+ }
906
+ };
907
+ const pickTermValue = async (item: Value) => {
908
+ dataStore.rightPanel.open = false;
528
909
  isTermsPanelOpen.value = false;
529
910
  if (typeof currentIndex.value !== 'number') return;
530
911
  additionalTerms.value[currentIndex.value].coverSumId = item.id as string;
531
912
  additionalTerms.value[currentIndex.value].coverSumName = item.nameRu as string;
913
+ if (whichProduct.value === 'lifebusiness') {
914
+ if (item.code === 'fixedinssum') {
915
+ openFixInsPanel(dataStore.t('clients.selectInsSum'), additionalTerms.value[currentIndex.value].amount);
916
+ } else {
917
+ additionalTerms.value[currentIndex.value].amount = 0;
918
+ }
919
+ if (termValue.value && termValue.value.coverTypeCode === 6) {
920
+ const res = await dataStore.getFromApi('DicCoverTypePeriod', 'getArmDicts', 'DicCoverTypePeriod');
921
+ panelList.value = filterList(res, '');
922
+ const coverPeriodName = panelList.value.find(i => i.id === String(termValue.value!.coverPeriodId));
923
+ if (coverPeriodName) coverPeriodValue.value = coverPeriodName.code as string;
924
+ isPanelOpen.value = false;
925
+ isTermsPanelOpen.value = false;
926
+ isFixInsAmountPanelOpen.value = false;
927
+ isCoverPeriodPanelOpen.value = true;
928
+ dataStore.panelAction = null;
929
+ dataStore.rightPanel.open = true;
930
+ isMultiplePanelOpen.value = false;
931
+ dataStore.rightPanel.title = dataStore.t('clients.coveragePeriod');
932
+ }
933
+ }
532
934
  };
533
935
 
534
936
  const openPanel = async (title: string, list: Value[], key: string, asyncFunction?: Function, filterKey?: string) => {
535
937
  if (!isDisabled.value || (key === 'riskGroup' && !isRecalculationDisabled.value)) {
938
+ if (key === 'amount') {
939
+ if (calculatorForm.type.nameRu === null || !calculatorForm.countries || (calculatorForm.countries && calculatorForm.countries.length === 0)) {
940
+ return dataStore.showToaster('error', dataStore.t('toaster.noAmountBeforeTypeAndCountries'), 2000);
941
+ }
942
+ }
943
+ if (key === 'maxDays') {
944
+ if (calculatorForm.period.code === null) {
945
+ return dataStore.showToaster('error', dataStore.t('toaster.noMaxDaysBeforePeriod'), 2000);
946
+ }
947
+ }
536
948
  searchQuery.value = '';
537
949
  currentPanel.value = key as keyof typeof productConditionsForm;
538
950
  isPanelOpen.value = true;
539
951
  isTermsPanelOpen.value = false;
952
+ isFixInsAmountPanelOpen.value = false;
953
+ isCoverPeriodPanelOpen.value = false;
540
954
  dataStore.panelAction = null;
541
- dataStore.panel.open = true;
542
- dataStore.panel.title = title;
955
+ dataStore.rightPanel.open = true;
956
+ dataStore.rightPanel.title = title;
957
+ isMultiplePanelOpen.value = false;
543
958
 
544
959
  let newList = list;
545
960
  if (asyncFunction) {
@@ -547,13 +962,55 @@ export default defineComponent({
547
962
  newList = await asyncFunction(filterKey, formStore.productConditionsFormKey);
548
963
  }
549
964
  panelList.value = filterList(newList, key);
550
- // @ts-ignore
551
- panelValue.value = productConditionsForm[currentPanel.value];
965
+ if (whichProduct.value === 'lifetrip') {
966
+ // @ts-ignore
967
+ panelValue.value = calculatorForm[currentPanel.value];
968
+ } else {
969
+ // @ts-ignore
970
+ panelValue.value = productConditionsForm[currentPanel.value];
971
+ }
552
972
  isPanelLoading.value = false;
553
973
  } else {
554
974
  dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
555
975
  }
556
976
  };
977
+ const openMultiplePanel = async (title: string, list: CountryValue[], key: string, asyncFunction?: Function, filterKey?: string) => {
978
+ if (!isDisabled.value || !isRecalculationDisabled.value) {
979
+ isPanelOpen.value = false;
980
+ isFixInsAmountPanelOpen.value = false;
981
+ isCoverPeriodPanelOpen.value = false;
982
+ isMultiplePanelOpen.value = true;
983
+ isPanelLoading.value = true;
984
+ let newList = list;
985
+ if (asyncFunction !== null) {
986
+ // @ts-ignore
987
+ newList = await asyncFunction(filterKey, formStore.productConditionsFormKey);
988
+ }
989
+ if (newList[0].nameRu !== null) {
990
+ // @ts-ignore
991
+ newList.unshift(new CountryValue(0, null));
992
+ }
993
+
994
+ dataStore.panelAction = null;
995
+ dataStore.rightPanel.open = true;
996
+ dataStore.rightPanel.title = title;
997
+
998
+ // @ts-ignore
999
+ multiplePanelList.value = filterList(newList, key);
1000
+ // @ts-ignore
1001
+ multiplePanelValue.value = calculatorForm[currentPanel.value];
1002
+ isPanelLoading.value = false;
1003
+ } else {
1004
+ dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'), 2000);
1005
+ }
1006
+ };
1007
+ const closeMultiplePanel = (item?: CountryValue) => {
1008
+ dataStore.rightPanel.open = false;
1009
+ isMultiplePanelOpen.value = false;
1010
+ if (!currentPanel.value) return;
1011
+ // @ts-ignore
1012
+ calculatorForm[currentPanel.value] = item?.nameRu === null ? new Value() : item;
1013
+ };
557
1014
 
558
1015
  const filterList = (list: Value[], key: string) => {
559
1016
  if (whichProduct.value === 'baiterek') {
@@ -569,10 +1026,13 @@ export default defineComponent({
569
1026
  searchQuery.value = '';
570
1027
  currentIndex.value = index;
571
1028
  isPanelOpen.value = false;
1029
+ isMultiplePanelOpen.value = false;
1030
+ isFixInsAmountPanelOpen.value = false;
1031
+ isCoverPeriodPanelOpen.value = false;
572
1032
  isTermsPanelOpen.value = true;
573
1033
  dataStore.panelAction = null;
574
- dataStore.panel.open = true;
575
- dataStore.panel.title = title;
1034
+ dataStore.rightPanel.open = true;
1035
+ dataStore.rightPanel.title = title;
576
1036
 
577
1037
  let newList;
578
1038
  if (asyncFunction) {
@@ -588,6 +1048,41 @@ export default defineComponent({
588
1048
  }
589
1049
  };
590
1050
 
1051
+ const openFixInsPanel = async (title: string, amount: number) => {
1052
+ if (!isDisabled.value) {
1053
+ searchQuery.value = '';
1054
+ isPanelOpen.value = false;
1055
+ isTermsPanelOpen.value = false;
1056
+ isMultiplePanelOpen.value = false;
1057
+ isCoverPeriodPanelOpen.value = false;
1058
+ isFixInsAmountPanelOpen.value = true;
1059
+ dataStore.panelAction = null;
1060
+ dataStore.rightPanel.open = true;
1061
+ dataStore.rightPanel.title = title;
1062
+ panelList.value = constants.fixInsAmount;
1063
+ fixInsValue.value = String(amount);
1064
+ } else {
1065
+ dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
1066
+ }
1067
+ };
1068
+
1069
+ const pickfixInsValue = (item: Value) => {
1070
+ dataStore.rightPanel.open = false;
1071
+ isFixInsAmountPanelOpen.value = false;
1072
+ if (typeof currentIndex.value !== 'number') return;
1073
+ additionalTerms.value[currentIndex.value].amount = Number(item.code);
1074
+ };
1075
+
1076
+ const pickCoverPeriodValue = (item: Value) => {
1077
+ coverPeriodValue.value = item.code as string;
1078
+ dataStore.rightPanel.open = false;
1079
+ isCoverPeriodPanelOpen.value = false;
1080
+ if (typeof currentIndex.value !== 'number') return;
1081
+ additionalTerms.value[currentIndex.value].coverPeriodCode = item.code as string;
1082
+ additionalTerms.value[currentIndex.value].coverPeriodId = item.id as string;
1083
+ additionalTerms.value[currentIndex.value].coverPeriodName = item.nameRu as string;
1084
+ };
1085
+
591
1086
  const underwriterCalculate = async (type: 'sum' | 'premium') => {
592
1087
  if (!type) return;
593
1088
  if (type === 'sum') {
@@ -687,6 +1182,12 @@ export default defineComponent({
687
1182
  productConditionsForm.requestedSumInsuredInDollar = null;
688
1183
  productConditionsForm.insurancePremiumPerMonth = null;
689
1184
  productConditionsForm.insurancePremiumPerMonthInDollar = null;
1185
+ if (whichProduct.value === 'lifetrip') {
1186
+ Object.keys(calculatorForm).forEach(key => {
1187
+ //@ts-ignore
1188
+ calculatorForm[key] = new CalculatorForm()[key];
1189
+ });
1190
+ }
690
1191
  };
691
1192
 
692
1193
  const filterTermConditions = (term: AddCover) => {
@@ -695,89 +1196,111 @@ export default defineComponent({
695
1196
  }
696
1197
  return true;
697
1198
  };
698
-
699
1199
  const submitForm = async () => {
700
1200
  vForm.value.validate().then(async (v: { valid: Boolean; errors: any }) => {
701
1201
  if (v.valid) {
702
- if (whichSum.value === 'requestedSumInsured') {
703
- productConditionsForm.insurancePremiumPerMonth = null;
704
- if (whichProduct.value === 'halykkazyna') {
705
- productConditionsForm.insurancePremiumPerMonthInDollar = null;
1202
+ if (whichProduct.value === 'lifetrip') {
1203
+ if (calculatorForm.type.code === 'Single' && calculatorForm.startDate && calculatorForm.endDate) {
1204
+ const formattedStartDate = formatDate(calculatorForm.startDate);
1205
+ const formattedEndDate = formatDate(calculatorForm.endDate);
1206
+ if (formattedStartDate && formattedEndDate && formattedStartDate.getTime() > formattedEndDate.getTime()) {
1207
+ return dataStore.showToaster('error', dataStore.t('toaster.startMoreEnd'));
1208
+ }
706
1209
  }
707
- }
708
- if (whichSum.value === 'insurancePremiumPerMonth') {
709
- productConditionsForm.requestedSumInsured = null;
710
- if (whichProduct.value === 'halykkazyna') {
711
- productConditionsForm.requestedSumInsuredInDollar = null;
1210
+ if (dataStore.isTask()) {
1211
+ await dataStore.calculatePrice(route.params.taskId as string);
1212
+ } else {
1213
+ await dataStore.calculatePrice();
1214
+ }
1215
+ } else {
1216
+ if (whichSum.value === 'requestedSumInsured') {
1217
+ productConditionsForm.insurancePremiumPerMonth = null;
1218
+ if (whichProduct.value === 'halykkazyna') {
1219
+ productConditionsForm.insurancePremiumPerMonthInDollar = null;
1220
+ }
1221
+ }
1222
+ if (whichSum.value === 'insurancePremiumPerMonth') {
1223
+ productConditionsForm.requestedSumInsured = null;
1224
+ if (whichProduct.value === 'halykkazyna') {
1225
+ productConditionsForm.requestedSumInsuredInDollar = null;
1226
+ }
1227
+ }
1228
+ if (productConditionsForm.requestedSumInsured !== '' && productConditionsForm.requestedSumInsured != null) {
1229
+ productConditionsForm.insurancePremiumPerMonth = null;
1230
+ if (props.isCalculator) whichSum.value = 'requestedSumInsured';
1231
+ }
1232
+ if (productConditionsForm.insurancePremiumPerMonth !== '' && productConditionsForm.insurancePremiumPerMonth != null) {
1233
+ productConditionsForm.requestedSumInsured = null;
1234
+ if (props.isCalculator) whichSum.value = 'insurancePremiumPerMonth';
712
1235
  }
713
- }
714
- if (productConditionsForm.requestedSumInsured !== '' && productConditionsForm.requestedSumInsured != null) {
715
- productConditionsForm.insurancePremiumPerMonth = null;
716
- if (props.isRecalculation) whichSum.value = 'requestedSumInsured';
717
- }
718
- if (productConditionsForm.insurancePremiumPerMonth !== '' && productConditionsForm.insurancePremiumPerMonth != null) {
719
- productConditionsForm.requestedSumInsured = null;
720
- if (props.isRecalculation) whichSum.value = 'insurancePremiumPerMonth';
721
- }
722
1236
 
723
- if (!whichSum.value && isUnderwriterForm.value === false) {
724
- dataStore.showToaster('error', dataStore.t('toaster.emptyProductConditions'));
725
- return;
726
- }
1237
+ if (!whichSum.value && isUnderwriterForm.value === false) {
1238
+ dataStore.showToaster('error', dataStore.t('toaster.emptyProductConditions'));
1239
+ return;
1240
+ }
727
1241
 
728
- if (isUnderwriterForm.value) {
729
- type recalculationInfo = {
730
- lifeMultiply: string | null | number;
731
- lifeAdditive: string | null | number;
732
- lifeMultiplyClient?: string | number | null;
733
- lifeAdditiveClient?: string | number | null;
734
- adbMultiply: string | null | number;
735
- adbAdditive: string | null | number;
736
- disabilityMultiply: string | null | number;
737
- disabilityAdditive: string | null | number;
738
- amount?: string | number | null;
739
- premium?: string | number | null;
740
- riskGroup?: string | string | number | null;
741
- };
742
- const recalculationData: recalculationInfo = (({ lifeMultiply, lifeAdditive, adbMultiply, adbAdditive, disabilityMultiply, disabilityAdditive }) => ({
743
- lifeMultiply,
744
- lifeAdditive,
745
- adbMultiply,
746
- adbAdditive,
747
- disabilityMultiply,
748
- disabilityAdditive,
749
- }))(productConditionsForm);
750
- Object.keys(recalculationData).forEach(key => {
751
- // @ts-ignore
752
- recalculationData[key] = formatProcents(recalculationData[key]);
753
- });
754
- recalculationData.lifeMultiplyClient = dataStore.isClientAnketaCondition
755
- ? formStore.productConditionsForm.lifeMultiplyClient === null
756
- ? null
757
- : formatProcents(formStore.productConditionsForm.lifeMultiplyClient)
758
- : null;
759
- recalculationData.lifeAdditiveClient = dataStore.isClientAnketaCondition
760
- ? formStore.productConditionsForm.lifeAdditiveClient === null
761
- ? null
762
- : formatProcents(formStore.productConditionsForm.lifeAdditiveClient)
763
- : null;
764
- recalculationData.amount = Number((productConditionsForm.requestedSumInsured as string)?.replace(/\s/g, ''));
765
- recalculationData.premium = Number((productConditionsForm.insurancePremiumPerMonth as string)?.replace(/\s/g, ''));
766
- recalculationData.riskGroup = productConditionsForm.riskGroup?.id ? productConditionsForm.riskGroup.id : 1;
1242
+ if (
1243
+ whichProduct.value === 'gons' &&
1244
+ (formStore.applicationData.statusCode === 'EditForm' || formStore.applicationData.statusCode === 'StartForm') &&
1245
+ getNumber(productConditionsForm.requestedSumInsured as string)! >= 10_000_000
1246
+ ) {
1247
+ dataStore.showToaster('info', dataStore.t('toaster.calcSumForUnder'), 6000);
1248
+ }
1249
+ if (isUnderwriterForm.value) {
1250
+ type recalculationInfo = {
1251
+ lifeMultiply: string | null | number;
1252
+ lifeAdditive: string | null | number;
1253
+ lifeMultiplyClient?: string | number | null;
1254
+ lifeAdditiveClient?: string | number | null;
1255
+ adbMultiply: string | null | number;
1256
+ adbAdditive: string | null | number;
1257
+ disabilityMultiply: string | null | number;
1258
+ disabilityAdditive: string | null | number;
1259
+ amount?: string | number | null;
1260
+ premium?: string | number | null;
1261
+ riskGroup?: string | string | number | null;
1262
+ };
1263
+ const recalculationData: recalculationInfo = (({ lifeMultiply, lifeAdditive, adbMultiply, adbAdditive, disabilityMultiply, disabilityAdditive }) => ({
1264
+ lifeMultiply,
1265
+ lifeAdditive,
1266
+ adbMultiply,
1267
+ adbAdditive,
1268
+ disabilityMultiply,
1269
+ disabilityAdditive,
1270
+ }))(productConditionsForm);
1271
+ Object.keys(recalculationData).forEach(key => {
1272
+ // @ts-ignore
1273
+ recalculationData[key] = formatProcents(recalculationData[key]);
1274
+ });
1275
+ recalculationData.lifeMultiplyClient = dataStore.isClientAnketaCondition
1276
+ ? formStore.productConditionsForm.lifeMultiplyClient === null
1277
+ ? null
1278
+ : formatProcents(formStore.productConditionsForm.lifeMultiplyClient)
1279
+ : null;
1280
+ recalculationData.lifeAdditiveClient = dataStore.isClientAnketaCondition
1281
+ ? formStore.productConditionsForm.lifeAdditiveClient === null
1282
+ ? null
1283
+ : formatProcents(formStore.productConditionsForm.lifeAdditiveClient)
1284
+ : null;
1285
+ recalculationData.amount = Number((productConditionsForm.requestedSumInsured as string)?.replace(/\s/g, ''));
1286
+ recalculationData.premium = Number((productConditionsForm.insurancePremiumPerMonth as string)?.replace(/\s/g, ''));
1287
+ recalculationData.riskGroup = productConditionsForm.riskGroup?.id ? productConditionsForm.riskGroup.id : 1;
1288
+ isCalculating.value = true;
1289
+ await dataStore.reCalculate(formStore.applicationData.processInstanceId, recalculationData, route.params.taskId as string, whichSum.value);
1290
+ }
767
1291
  isCalculating.value = true;
768
- await dataStore.reCalculate(formStore.applicationData.processInstanceId, recalculationData, route.params.taskId as string, whichSum.value);
769
- }
770
- isCalculating.value = true;
771
- if (props.isRecalculation) {
772
- //@ts-ignore
773
- await dataStore.calculateWithoutApplication(true, whichProduct.value);
774
- additionalTerms.value = formStore.additionalInsuranceTermsWithout;
775
- } else {
776
- if (dataStore.isProcessEditable(formStore.applicationData.statusCode)) {
777
- await dataStore.calculate(route.params.taskId as string);
778
- additionalTerms.value = formStore.additionalInsuranceTerms;
1292
+ if (props.isCalculator) {
1293
+ //@ts-ignore
1294
+ await dataStore.calculateWithoutApplication(true, whichProduct.value);
1295
+ additionalTerms.value = formStore.additionalInsuranceTermsWithout;
1296
+ } else {
1297
+ if (dataStore.isProcessEditable(formStore.applicationData.statusCode)) {
1298
+ await dataStore.calculate(route.params.taskId as string);
1299
+ additionalTerms.value = formStore.additionalInsuranceTerms;
1300
+ }
779
1301
  }
780
1302
  }
1303
+
781
1304
  isCalculating.value = false;
782
1305
  } else {
783
1306
  const errors = document.querySelector('.v-input--error');
@@ -802,38 +1325,50 @@ export default defineComponent({
802
1325
  };
803
1326
 
804
1327
  onMounted(async () => {
805
- if (props.isRecalculation === true) {
1328
+ if (props.isCalculator === true) {
806
1329
  if (dataStore.isCalculator) {
807
1330
  clearFields();
808
1331
  }
809
- if (
810
- (dataStore.isCalculator || route.params.taskId === '0') &&
811
- productConditionsForm.requestedSumInsured === null &&
812
- productConditionsForm.insurancePremiumPerMonth === null
813
- ) {
814
- // @ts-ignore
815
- const defaultData = await dataStore.getDefaultCalculationData(true, whichProduct.value);
816
- if (!defaultData) {
817
- dataStore.showToaster('error', 'Отсутствуют базовые данные');
818
- return;
1332
+ if (whichProduct.value !== 'lifetrip') {
1333
+ if (
1334
+ (dataStore.isCalculator || route.params.taskId === '0') &&
1335
+ productConditionsForm.requestedSumInsured === null &&
1336
+ productConditionsForm.insurancePremiumPerMonth === null
1337
+ ) {
1338
+ // @ts-ignore
1339
+ const defaultData = await dataStore.getDefaultCalculationData(true, whichProduct.value);
1340
+ if (!defaultData) {
1341
+ dataStore.showToaster('error', 'Отсутствуют базовые данные');
1342
+ return;
1343
+ }
1344
+ formStore.additionalInsuranceTermsWithout = defaultData.addCovers;
1345
+ productConditionsForm.requestedSumInsured = defaultData.amount;
1346
+ productConditionsForm.insurancePremiumPerMonth = defaultData.premium;
1347
+ const indexRate = dataStore.processIndexRate.find(i => i.id === defaultData.indexRateId);
1348
+ if (indexRate) productConditionsForm.processIndexRate = indexRate;
1349
+ const paymendPeriod = dataStore.processPaymentPeriod.find(i => i.id === defaultData.paymentPeriodId);
1350
+ if (paymendPeriod) productConditionsForm.paymentPeriod = paymendPeriod;
1351
+ if (defaultData.signDate) {
1352
+ productConditionsForm.signDate = reformatDate(defaultData.signDate);
1353
+ }
1354
+ if (whichProduct.value === 'lifebusiness') {
1355
+ productConditionsForm.coverPeriod = defaultData.insTermInMonth ?? null;
1356
+ productConditionsForm.requestedSumInsured = null;
1357
+ productConditionsForm.insurancePremiumPerMonth = null;
1358
+ }
819
1359
  }
820
- formStore.additionalInsuranceTermsWithout = defaultData.addCovers;
821
- productConditionsForm.requestedSumInsured = defaultData.amount;
822
- productConditionsForm.insurancePremiumPerMonth = defaultData.premium;
823
- const indexRate = dataStore.processIndexRate.find(i => i.id === defaultData.indexRateId);
824
- if (indexRate) productConditionsForm.processIndexRate = indexRate;
825
- const paymendPeriod = dataStore.processPaymentPeriod.find(i => i.id == defaultData.paymentPeriodId);
826
- if (paymendPeriod) productConditionsForm.paymentPeriod = paymendPeriod;
827
- productConditionsForm.signDate = reformatDate(defaultData.signDate);
828
1360
  }
829
1361
  }
830
- additionalTerms.value = props.isRecalculation ? formStore.additionalInsuranceTermsWithout : formStore.additionalInsuranceTerms;
1362
+ additionalTerms.value = props.isCalculator ? formStore.additionalInsuranceTermsWithout : formStore.additionalInsuranceTerms;
831
1363
  if (!!productConditionsForm.insurancePremiumPerMonth) {
832
1364
  whichSum.value = 'insurancePremiumPerMonth';
833
1365
  }
834
1366
  if (!!productConditionsForm.requestedSumInsured) {
835
1367
  whichSum.value = 'requestedSumInsured';
836
1368
  }
1369
+ if (whichProduct.value === 'lifebusiness' && !productConditionsForm.requestedSumInsured) {
1370
+ whichSum.value = 'requestedSumInsured';
1371
+ }
837
1372
  if (dataStore.isCalculator) {
838
1373
  dataStore.processCode = constants.products[whichProduct.value as keyof typeof constants.products];
839
1374
  await dataStore.getProcessPaymentPeriod();
@@ -864,9 +1399,9 @@ export default defineComponent({
864
1399
  },
865
1400
  );
866
1401
  watch(
867
- () => dataStore.panel.open,
1402
+ () => dataStore.rightPanel.open,
868
1403
  () => {
869
- if (dataStore.panel.open === false) {
1404
+ if (dataStore.rightPanel.open === false) {
870
1405
  isPanelOpen.value = false;
871
1406
  isTermsPanelOpen.value = false;
872
1407
  dataStore.panelAction = null;
@@ -875,6 +1410,57 @@ export default defineComponent({
875
1410
  { immediate: true },
876
1411
  );
877
1412
 
1413
+ if (whichProduct.value === 'lifetrip') {
1414
+ watch(
1415
+ () => calculatorForm.type,
1416
+ async val => {
1417
+ if (val.code === 'Multiple') {
1418
+ await dataStore.getPeriod();
1419
+ calculatorForm.period = new Value();
1420
+ calculatorForm.endDate = null;
1421
+ }
1422
+ if (calculatorForm.countries?.length != 0) {
1423
+ await dataStore.getTripInsuredAmount();
1424
+ }
1425
+ },
1426
+ );
1427
+ watch(
1428
+ () => calculatorForm.countries,
1429
+ async val => {
1430
+ if (val?.length && val.every(option => option.id != 0) && calculatorForm.type?.nameRu != null) {
1431
+ await dataStore.getTripInsuredAmount();
1432
+ }
1433
+ },
1434
+ { deep: true },
1435
+ );
1436
+
1437
+ watch(
1438
+ () => calculatorForm.period,
1439
+ val => {
1440
+ if (val) {
1441
+ dataStore.maxDaysFiltered = dataStore.maxDaysAllArray.filter(days => days.code == val.code);
1442
+ calculatorForm.maxDays = new Value();
1443
+ }
1444
+ },
1445
+ );
1446
+
1447
+ watch(
1448
+ () => calculatorForm.startDate,
1449
+ val => {
1450
+ if (val !== null && val.length === 10 && calculatorForm.endDate != null && calculatorForm.endDate.length === 10) {
1451
+ calculatorForm.days = productConditionsForm.getSingleTripDays();
1452
+ }
1453
+ },
1454
+ );
1455
+ watch(
1456
+ () => calculatorForm.endDate,
1457
+ val => {
1458
+ if (val !== null && val.length === 10 && calculatorForm.startDate != null && calculatorForm.startDate.length === 10) {
1459
+ calculatorForm.days = productConditionsForm.getSingleTripDays();
1460
+ }
1461
+ },
1462
+ );
1463
+ }
878
1464
  return {
879
1465
  // State
880
1466
  formStore,
@@ -885,21 +1471,30 @@ export default defineComponent({
885
1471
  isCalculating,
886
1472
  isPanelLoading,
887
1473
  isPanelOpen,
1474
+ isMultiplePanelOpen,
888
1475
  isTermsPanelOpen,
889
1476
  panelValue,
890
1477
  termValue,
891
1478
  panelList,
1479
+ multiplePanelList,
1480
+ multiplePanelValue,
892
1481
  searchQuery,
893
1482
  whichSum,
894
1483
  Value,
1484
+ calculatorForm,
1485
+ isFixInsAmountPanelOpen,
1486
+ isCoverPeriodPanelOpen,
1487
+ fixInsValue,
1488
+ coverPeriodValue,
895
1489
 
896
1490
  // Computed
897
1491
  isTask,
898
1492
  isDisabled,
899
1493
  isTermsDisabled,
900
1494
  isUnderwriterForm,
901
- insurancePremiumPerMonth,
902
- requestedSumInsured,
1495
+ insurancePremiumPerMonthRule,
1496
+ insurancePremiumPerMonthDisabled,
1497
+ requestedSumInsuredRule,
903
1498
  isRecalculationDisabled,
904
1499
  isUnderwriterRole,
905
1500
  hasProcessIndexRate,
@@ -908,15 +1503,28 @@ export default defineComponent({
908
1503
  hasInsurancePremiumPerMonthInDollar,
909
1504
  hasCurrency,
910
1505
  hasAdbMultiply,
1506
+ readonlyLifeAdditive,
1507
+ readonlyDisabilityMultiply,
1508
+ readonlyDisabilityAdditive,
911
1509
  hasAdbAdditive,
912
1510
  hasRiskGroup,
913
1511
  hasCalculated,
914
1512
  hasAnnuityPayments,
1513
+ hasAgencyPart,
1514
+ hasProcessGfot,
915
1515
  currencySymbolsAddTerm,
916
1516
  amountAnnuityPayments,
917
1517
  requestedSumInsuredLabel,
918
1518
  isDisabledSum,
919
1519
  isDisabledSumDollar,
1520
+ countriesComputed,
1521
+ hasBirthDate,
1522
+ hasGender,
1523
+ coverPeriodLabel,
1524
+ insurancePremiumPerMonthLabel,
1525
+ isDisabledCoverPeriod,
1526
+ hasDefault,
1527
+ isDisabledProcessGfot,
920
1528
 
921
1529
  // Rules
922
1530
  coverPeriodRule,
@@ -926,6 +1534,7 @@ export default defineComponent({
926
1534
  pickPanelValue,
927
1535
  pickTermValue,
928
1536
  openPanel,
1537
+ openMultiplePanel,
929
1538
  openTermPanel,
930
1539
  pickCalculation,
931
1540
  underwriterCalculate,
@@ -941,6 +1550,10 @@ export default defineComponent({
941
1550
  clearFields,
942
1551
  formatTermValue,
943
1552
  filterTermConditions,
1553
+ selectOption,
1554
+ pickfixInsValue,
1555
+ openFixInsPanel,
1556
+ pickCoverPeriodValue,
944
1557
  };
945
1558
  },
946
1559
  });