hl-core 0.0.8-beta.15 → 0.0.8-beta.17

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.
package/api/index.ts CHANGED
@@ -283,6 +283,14 @@ export class ApiClass {
283
283
  });
284
284
  }
285
285
 
286
+ async registerNumber(data: RegNumberDataType): Promise<string> {
287
+ return this.axiosCall({
288
+ method: Methods.POST,
289
+ url: `/${this.productUrl}/api/Application/FinCenterRegNumberSave`,
290
+ data: data,
291
+ });
292
+ }
293
+
286
294
  async sendSms(data: SmsDataType): Promise<void> {
287
295
  return this.axiosCall({
288
296
  method: Methods.POST,
@@ -61,7 +61,7 @@
61
61
  <div
62
62
  v-if="isMultiple && more && !isShort"
63
63
  :class="[$libStyles.blueBg, $libStyles.whiteText, $libStyles.textSimple, disabled ? $libStyles.disabled : 'cursor-pointer']"
64
- class="rounded-b-lg h-[36px] flex items-center font-medium justify-center"
64
+ class="transition-all rounded-b-lg h-[36px] flex items-center font-medium justify-center opacity-50 hover:opacity-90"
65
65
  @click="!disabled && memberStore.addMember(whichForm)"
66
66
  >
67
67
  {{ $t('buttons.add') }}
@@ -21,6 +21,7 @@
21
21
  :prepend-inner-icon="prependInnerIcon ? prependInnerIcon : ''"
22
22
  :append-inner-icon="appendInnerIcon ? appendInnerIcon : ''"
23
23
  :bg-color="bgColor ? bgColor : ''"
24
+ :suffix="suffix"
24
25
  @keyup.enter.prevent="submitted"
25
26
  @click:control="!props.readonly && $emit('append')"
26
27
  @click:clear="(props.readonly ? false : clearable) && $emit('update:modelValue', new Value())"
@@ -115,6 +116,10 @@ export default defineComponent({
115
116
  bgColor: {
116
117
  type: String,
117
118
  },
119
+ suffix: {
120
+ type: String,
121
+ default: '',
122
+ },
118
123
  },
119
124
  emits: ['update:modelValue', 'submitted', 'prepend', 'append', 'prepend-out', 'append-out', 'clear'],
120
125
 
@@ -1,8 +1,14 @@
1
1
  <template>
2
2
  <header class="relative w-full h-[70px] text-center font-medium align-middle flex items-center border-b-[1px]" :class="[$libStyles.blueBgLight, $libStyles.textSimple]">
3
- <i v-if="hasBack" @click="$emit('onBack')" class="absolute left-5 mdi text-xl cursor-pointer" :class="[backIcon]"></i>
3
+ <i v-if="hasBack" @click="$emit('onBack')" class="absolute left-5 mdi text-xl cursor-pointer transition-all" :class="[backIcon, backIconAnim]"></i>
4
4
  <span class="mx-10">{{ title }}</span>
5
- <i v-if="hasMore" @click="$emit('onMore')" class="mdi absolute right-5 text-xl cursor-pointer" :class="[moreIcon, hideMoreOnLg ? 'lg:!hidden' : '']"> </i>
5
+ <i
6
+ v-if="hasMore"
7
+ @click="$emit('onMore')"
8
+ class="mdi absolute right-5 text-xl cursor-pointer transition-all"
9
+ :class="[moreIcon, hideMoreOnLg ? 'lg:!hidden' : '', moreIconAnim]"
10
+ >
11
+ </i>
6
12
  </header>
7
13
  </template>
8
14
 
@@ -35,14 +41,44 @@ export default defineComponent({
35
41
  },
36
42
  },
37
43
  emits: ['onBack', 'onMore'],
38
- setup() {
44
+ setup(props) {
39
45
  const dataStore = useDataStore();
40
46
 
41
47
  const onClickOutside = () => {
42
48
  dataStore.settings.open = false;
43
49
  };
44
50
 
45
- return { onClickOutside };
51
+ const backIconAnim = computed(() => {
52
+ const icon = props.backIcon;
53
+ switch (icon) {
54
+ case 'mdi-arrow-left':
55
+ case 'mdi-account-arrow-left':
56
+ return 'hover:-translate-x-[2px]';
57
+ case 'mdi-close':
58
+ return 'hover:scale-110';
59
+ default:
60
+ return '';
61
+ }
62
+ });
63
+
64
+ const moreIconAnim = computed(() => {
65
+ const icon = props.moreIcon;
66
+ switch (icon) {
67
+ case 'mdi-cog-outline':
68
+ return 'hover:rotate-[30deg]';
69
+ default:
70
+ return '';
71
+ }
72
+ });
73
+
74
+ return {
75
+ // Computed
76
+ backIconAnim,
77
+ moreIconAnim,
78
+
79
+ // Functions
80
+ onClickOutside,
81
+ };
46
82
  },
47
83
  });
48
84
  </script>
@@ -45,7 +45,11 @@
45
45
  <span :class="[$libStyles.textTitle]" class="border-b-[1px] border-b-[#F3F6FC] p-6 flex items-center justify-between">
46
46
  {{ question.first.name }}
47
47
  <base-fade-transition>
48
- <i v-if="question.first.answerName === 'Да' && secondQuestionList" class="mdi mdi-chevron-right text-2xl cursor-pointer" @click="openFirstPanel(question)"></i>
48
+ <i
49
+ v-if="question.first.answerName === 'Да' && secondQuestionList && secondQuestionList.length"
50
+ class="mdi mdi-chevron-right text-2xl cursor-pointer"
51
+ @click="openFirstPanel(question)"
52
+ ></i>
49
53
  </base-fade-transition>
50
54
  </span>
51
55
  <div class="flex items-center justify-start gap-5 px-4 pt-4" :class="[$libStyles.textSimple]">
@@ -17,7 +17,7 @@
17
17
  </aside>
18
18
  <section v-if="isLogin" class="w-full lg:w-3/4 flex flex-col justify-center">
19
19
  <img :class="{ '!block': !$display().lgAndUp.value }" draggable="false" class="hidden w-2/4 sm:w-1/3 mb-10 self-center" src="~/assets/auth-logo.svg" />
20
- <div class="flex flex-col items-center mb-8">
20
+ <div class="flex flex-col items-center mb-8 text-center">
21
21
  <h1 class="text-[28px] font-medium mb-1">{{ $t('labels.welcomeHL') }}</h1>
22
22
  <span :class="[$libStyles.greyTextDark]" class="text-[16px]">{{ $t('labels.needAuth') }}</span>
23
23
  </div>
@@ -53,8 +53,8 @@
53
53
  <h1 class="text-[28px] font-medium mb-1">{{ $t('labels.resetPassword') }}</h1>
54
54
  <span :class="[$libStyles.greyTextDark]" class="text-[16px]">{{ $t('labels.resetType') }}</span>
55
55
  </div>
56
- <div class="p-[2px] mb-8 rounded-[12px] border-[1px]" :class="[$libStyles.whiteBg]">
57
- <v-tabs v-model="resetPasswordType" density="compact" slider-color="#009c73" class="base-reset-password rounded-[12px] w-2/3 lg:w-[25vw]" :class="[$libStyles.whiteBg]">
56
+ <div class="p-[2px] mb-8 rounded-[12px] border-[1px] w-2/3 lg:w-[25vw]" :class="[$libStyles.whiteBg]">
57
+ <v-tabs v-model="resetPasswordType" density="compact" slider-color="#009c73" class="w-full base-reset-password rounded-[12px]" :class="[$libStyles.whiteBg]">
58
58
  <v-tab :ripple="false" value="phone"> {{ $t('form.phoneNumber') }} </v-tab>
59
59
  <v-tab :ripple="false" value="email"> {{ $t('form.email') }} </v-tab>
60
60
  </v-tabs>
@@ -968,6 +968,9 @@ export default {
968
968
  }
969
969
  }
970
970
  const memberFromApplicaiton = memberStore.getMemberFromApplication(whichForm.value as MemberKeys, whichIndex.value ? Number(whichIndex.value) : undefined);
971
+ if (typeof member.value.id !== 'number' || (typeof member.value.id === 'number' && member.value.id > 0 === false)) {
972
+ return false;
973
+ }
971
974
  const isSaved = await dataStore.saveMember(member.value, memberStore.getMemberCode(whichForm.value as MemberKeys), memberFromApplicaiton);
972
975
  if (!isSaved) return false;
973
976
  if (whichForm.value === formStore.policyholderFormKey) {
@@ -1086,6 +1089,21 @@ export default {
1086
1089
  }
1087
1090
  };
1088
1091
 
1092
+ const setDefaultValues = async () => {
1093
+ const setDefaults = dataStore.controls.setDefaults;
1094
+ if (setDefaults.sectorCode) {
1095
+ await setSectorCode();
1096
+ }
1097
+ };
1098
+
1099
+ const setSectorCode = async () => {
1100
+ if (member.value.id === 0 && route.query.id === '0') {
1101
+ const sectorList = await dataStore.getSectorCodeList();
1102
+ const defaultValue = sectorList.find(item => item.ids === '500003.9') as Value;
1103
+ member.value.economySectorCode = defaultValue ? defaultValue : new Value();
1104
+ }
1105
+ };
1106
+
1089
1107
  const onInit = async () => {
1090
1108
  if (route.params.taskId === '0' || (route.params.taskId !== '0' && dataStore.isProcessEditable(formStore.applicationData.statusCode))) {
1091
1109
  await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
@@ -1108,6 +1126,7 @@ export default {
1108
1126
  const filteredDocuments: DocumentItem[] = dataStore.getFilesByIIN(member.value.iin!.replace(/-/g, '')) as DocumentItem[];
1109
1127
  if (filteredDocuments && filteredDocuments.length) memberDocument.value = filteredDocuments[0];
1110
1128
  }
1129
+ await setDefaultValues();
1111
1130
  };
1112
1131
 
1113
1132
  onMounted(async () => {
@@ -198,6 +198,7 @@
198
198
  :clearable="!isDisabled"
199
199
  :label="term.coverTypeName"
200
200
  append-inner-icon="mdi mdi-chevron-right"
201
+ :suffix="!!term.amount ? `${$dataStore.getNumberWithSpaces(term.amount)} ${$constants.currencySymbols.kzt}` : ''"
201
202
  @append="openTermPanel(term.coverTypeName, $dataStore.getAdditionalInsuranceTermsAnswers, term.coverTypeId, index)"
202
203
  ></base-panel-input>
203
204
  </div>
@@ -780,10 +780,16 @@ export class ProductConditions {
780
780
  export class MemberSettings {
781
781
  has?: boolean;
782
782
  isMultiple?: boolean;
783
- constructor(options?: { has?: boolean; isMultiple?: boolean }) {
783
+ required?: boolean;
784
+ constructor(options?: { has?: boolean; isMultiple?: boolean; required?: boolean }) {
784
785
  if (options) {
785
786
  this.has = options.has;
786
787
  this.isMultiple = options.isMultiple;
788
+ if (this.has === true) {
789
+ this.required = options.required;
790
+ } else {
791
+ this.required = false;
792
+ }
787
793
  }
788
794
  }
789
795
  }
@@ -791,6 +797,10 @@ export class MemberSettings {
791
797
  export class DataStoreClass {
792
798
  // IMP Контроллер фич
793
799
  controls: {
800
+ // Cтавит значения по дефолту полям
801
+ setDefaults: {
802
+ sectorCode: boolean;
803
+ };
794
804
  // Проверка на роль при авторизации
795
805
  onAuth: boolean;
796
806
  // Согласие на главной странице
@@ -926,6 +936,9 @@ export class DataStoreClass {
926
936
  spokesmanApp: new MemberSettings(),
927
937
  };
928
938
  this.controls = {
939
+ setDefaults: {
940
+ sectorCode: true,
941
+ },
929
942
  onAuth: false,
930
943
  hasAnketa: true,
931
944
  hasAgreement: true,
@@ -1066,6 +1079,11 @@ export class FormStoreClass {
1066
1079
  number: string | number | null;
1067
1080
  date: string | number | null;
1068
1081
  };
1082
+ finCenterData: {
1083
+ processInstanceId: string | number | null;
1084
+ regNumber: string | number | null;
1085
+ date: string | number | null;
1086
+ };
1069
1087
  signedDocumentList: IDocument[];
1070
1088
  surveyByHealthBase: AnketaFirst | null;
1071
1089
  surveyByCriticalBase: AnketaFirst | null;
@@ -1141,6 +1159,11 @@ export class FormStoreClass {
1141
1159
  number: null,
1142
1160
  date: null,
1143
1161
  };
1162
+ this.finCenterData = {
1163
+ processInstanceId: null,
1164
+ regNumber: null,
1165
+ date: null,
1166
+ };
1144
1167
  this.signedDocumentList = [];
1145
1168
  this.surveyByHealthBase = null;
1146
1169
  this.surveyByCriticalBase = null;
package/locales/en.json CHANGED
@@ -89,7 +89,13 @@
89
89
  "needToRecalculate": "You need to recalculate the product conditions",
90
90
  "noUrl": "No link available",
91
91
  "pickFamilyMember": "Pick a family member",
92
- "numberRegistered": "Регистрационный номер успешно записан в реестр"
92
+ "numberRegistered": "Регистрационный номер успешно записан в реестр",
93
+ "requiredMember": "В заявке должен присутствовать {text}",
94
+ "client": "страхователь",
95
+ "insured": "застрахованный",
96
+ "beneficiary": "выгодоприобретатель",
97
+ "beneficialOwner": "бенефициарный собственник",
98
+ "spokesman": "представитель страхователя"
93
99
  },
94
100
  "buttons": {
95
101
  "createStatement": "Create Statement",
@@ -271,7 +277,123 @@
271
277
  "decision": "Status",
272
278
  "userFullName": "Assignee"
273
279
  },
280
+ "agent": {
281
+ "menu": "Меню",
282
+ "main": "Главное",
283
+ "reports": "Отчеты",
284
+ "report": "Отчет",
285
+ "notifications": "Уведомления",
286
+ "support": "Тех. поддержка",
287
+ "agentsInfo": "Сведения о страховых агентах",
288
+ "info": "Данные об агенте",
289
+ "about": "Сведения об Агенте",
290
+ "level": "Уровень",
291
+ "subAgents": "Суб-агенты",
292
+ "done": "Оформлено договоров",
293
+ "myContracts": "Оформлено договоров",
294
+ "nextLevel": "Следующий уровень {text}",
295
+ "leftMy": "Осталось оформить лично",
296
+ "leftAll": "Осталось оформить всего",
297
+ "donePolicies": "Оформлено полисов",
298
+ "successStat": "Статистика успешных сделок",
299
+ "doneMy": "Оформлено лично",
300
+ "doneAll": "Всего оформлено",
301
+ "progressAll": "Прогресс за все время работы",
302
+ "subagentsCalled": "Привлечено суб-агентов",
303
+ "myActivity": "Моя активность",
304
+ "teamActivity": "Активность команды",
305
+ "careerUp": "Карьерная лестница",
306
+ "direction": "Дирекция",
307
+ "leader": "Руководитель",
308
+ "agentic": "Агенство",
309
+ "agentCurator": "Куратор агента",
310
+ "agentId": "ID агента",
311
+ "reportType": "Тип отчета",
312
+ "reportFile": "Файл отчета",
313
+ "reportDate": "Отчетная дата",
314
+ "paymentJournal": "Журнал оплаты",
315
+ "journal": {
316
+ "incomeKz": "Приходы KZT",
317
+ "outcomeKz": "Расходы KZT",
318
+ "leftKz": "Остаток KZT",
319
+ "description": "Описание",
320
+ "delayMonth": "Месяц просрочки"
321
+ },
322
+ "unallocatedPayments": "Нераспределенные платежи",
323
+ "unallocation": {
324
+ "paymentId": "ID платежа",
325
+ "voucherNumber": "Номер ваучера",
326
+ "voucherDate": "Дата ваучера",
327
+ "voucherStatus": "Статус ваучера"
328
+ },
329
+ "unpaidPremiums": "Неоплаченные премии",
330
+ "unpaidDelay": "Просрочка",
331
+ "reportText": {
332
+ "reward": "Награда",
333
+ "cuWith": "Общие единицы с",
334
+ "cuBy": "Общие единицы по",
335
+ "puWith": "Личные единицы с",
336
+ "puBy": "Личные единицы по",
337
+ "minLevel": "Минимальный уровень",
338
+ "minNumOfSubs": "Мин. количество подчиненных",
339
+ "subsLevel": "Уровни подчиненных",
340
+ "daysAfter": "Дни после договора"
341
+ },
342
+ "supportText": {
343
+ "toChat": "Чат с тех. поддержкой"
344
+ },
345
+ "test": {
346
+ "testing": "Тестирование",
347
+ "results": "Результаты тестирования",
348
+ "type": "Вид тестирования",
349
+ "date": "Дата прохождения тестирования",
350
+ "resultInProcents": "Результат тестирования в процентах"
351
+ }
352
+ },
353
+ "jobApplication": {
354
+ "title": "Заявление на трудоустройсво",
355
+ "sent": "Заявление отправлено в страховую компанию",
356
+ "whichRegion": "Агентом какого региона вы хотите стать",
357
+ "requisites": "Реквизиты",
358
+ "conductReport": "Справка о несудимости",
359
+ "diplom": "Диплом",
360
+ "new": "Подать заявление"
361
+ },
274
362
  "labels": {
363
+ "photo": "Фото",
364
+ "attachPhoto": "Вложить фото",
365
+ "form": "Форма",
366
+ "toSign": "Отправить на подпись",
367
+ "contract": "Договор",
368
+ "sections": "Разделы",
369
+ "chat": "Чат",
370
+ "today": "Сегодня",
371
+ "message": "Сообщение",
372
+ "category": "Категория",
373
+ "debt": "Долг",
374
+ "premiumDate": "Дата премии",
375
+ "delayDays": "Дни просрочки",
376
+ "dischargeDate": "Дата выписки",
377
+ "covering": "Покрытие",
378
+ "agentsContacts": "Контакты агента",
379
+ "clientsContacts": "Контакты страхователя",
380
+ "agentNumber": "Номер агента",
381
+ "additionalStatus": "Дополнительный статус",
382
+ "activeTime": "Время действия",
383
+ "statementNumber": "Номер заявления",
384
+ "dogovorDate": "Дата договора",
385
+ "dateCreated": "Дата создания",
386
+ "fileName": "Имя файла",
387
+ "reset": "Сбросить",
388
+ "toExcel": "Экспорт в Excel",
389
+ "condition": "Условие",
390
+ "bet": "Ставка",
391
+ "statistics": "Статистика",
392
+ "progressBar": "Шкала прогресса",
393
+ "toAgent": "Оформить",
394
+ "notification": "Уведомление",
395
+ "news": "Новости",
396
+ "profile": "Профиль",
275
397
  "needAuth": "You are required to authorize",
276
398
  "welcomeHL": "Welcome to Halyk Life",
277
399
  "resetType": "Pick resetting method",
package/locales/kz.json CHANGED
@@ -89,7 +89,13 @@
89
89
  "needToRecalculate": "Необходимо пересчитать условия продукта",
90
90
  "noUrl": "Отсутствует ссылка",
91
91
  "pickFamilyMember": "Выберите члена семьи",
92
- "numberRegistered": "Регистрационный номер успешно записан в реестр"
92
+ "numberRegistered": "Регистрационный номер успешно записан в реестр",
93
+ "requiredMember": "В заявке должен присутствовать {text}",
94
+ "client": "страхователь",
95
+ "insured": "застрахованный",
96
+ "beneficiary": "выгодоприобретатель",
97
+ "beneficialOwner": "бенефициарный собственник",
98
+ "spokesman": "представитель страхователя"
93
99
  },
94
100
  "buttons": {
95
101
  "createStatement": "Создать заявку",
@@ -271,7 +277,123 @@
271
277
  "decision": "Статус",
272
278
  "userFullName": "Исполнитель"
273
279
  },
280
+ "agent": {
281
+ "menu": "Меню",
282
+ "main": "Главное",
283
+ "reports": "Отчеты",
284
+ "report": "Отчет",
285
+ "notifications": "Уведомления",
286
+ "support": "Тех. поддержка",
287
+ "agentsInfo": "Сведения о страховых агентах",
288
+ "info": "Данные об агенте",
289
+ "about": "Сведения об Агенте",
290
+ "level": "Уровень",
291
+ "subAgents": "Суб-агенты",
292
+ "done": "Оформлено договоров",
293
+ "myContracts": "Оформлено договоров",
294
+ "nextLevel": "Следующий уровень {text}",
295
+ "leftMy": "Осталось оформить лично",
296
+ "leftAll": "Осталось оформить всего",
297
+ "donePolicies": "Оформлено полисов",
298
+ "successStat": "Статистика успешных сделок",
299
+ "doneMy": "Оформлено лично",
300
+ "doneAll": "Всего оформлено",
301
+ "progressAll": "Прогресс за все время работы",
302
+ "subagentsCalled": "Привлечено суб-агентов",
303
+ "myActivity": "Моя активность",
304
+ "teamActivity": "Активность команды",
305
+ "careerUp": "Карьерная лестница",
306
+ "direction": "Дирекция",
307
+ "leader": "Руководитель",
308
+ "agentic": "Агенство",
309
+ "agentCurator": "Куратор агента",
310
+ "agentId": "ID агента",
311
+ "reportType": "Тип отчета",
312
+ "reportFile": "Файл отчета",
313
+ "reportDate": "Отчетная дата",
314
+ "paymentJournal": "Журнал оплаты",
315
+ "journal": {
316
+ "incomeKz": "Приходы KZT",
317
+ "outcomeKz": "Расходы KZT",
318
+ "leftKz": "Остаток KZT",
319
+ "description": "Описание",
320
+ "delayMonth": "Месяц просрочки"
321
+ },
322
+ "unallocatedPayments": "Нераспределенные платежи",
323
+ "unallocation": {
324
+ "paymentId": "ID платежа",
325
+ "voucherNumber": "Номер ваучера",
326
+ "voucherDate": "Дата ваучера",
327
+ "voucherStatus": "Статус ваучера"
328
+ },
329
+ "unpaidPremiums": "Неоплаченные премии",
330
+ "unpaidDelay": "Просрочка",
331
+ "reportText": {
332
+ "reward": "Награда",
333
+ "cuWith": "Общие единицы с",
334
+ "cuBy": "Общие единицы по",
335
+ "puWith": "Личные единицы с",
336
+ "puBy": "Личные единицы по",
337
+ "minLevel": "Минимальный уровень",
338
+ "minNumOfSubs": "Мин. количество подчиненных",
339
+ "subsLevel": "Уровни подчиненных",
340
+ "daysAfter": "Дни после договора"
341
+ },
342
+ "supportText": {
343
+ "toChat": "Чат с тех. поддержкой"
344
+ },
345
+ "test": {
346
+ "testing": "Тестирование",
347
+ "results": "Результаты тестирования",
348
+ "type": "Вид тестирования",
349
+ "date": "Дата прохождения тестирования",
350
+ "resultInProcents": "Результат тестирования в процентах"
351
+ }
352
+ },
353
+ "jobApplication": {
354
+ "title": "Заявление на трудоустройсво",
355
+ "sent": "Заявление отправлено в страховую компанию",
356
+ "whichRegion": "Агентом какого региона вы хотите стать",
357
+ "requisites": "Реквизиты",
358
+ "conductReport": "Справка о несудимости",
359
+ "diplom": "Диплом",
360
+ "new": "Подать заявление"
361
+ },
274
362
  "labels": {
363
+ "photo": "Фото",
364
+ "attachPhoto": "Вложить фото",
365
+ "form": "Форма",
366
+ "toSign": "Отправить на подпись",
367
+ "contract": "Договор",
368
+ "sections": "Разделы",
369
+ "chat": "Чат",
370
+ "today": "Сегодня",
371
+ "message": "Сообщение",
372
+ "category": "Категория",
373
+ "debt": "Долг",
374
+ "premiumDate": "Дата премии",
375
+ "delayDays": "Дни просрочки",
376
+ "dischargeDate": "Дата выписки",
377
+ "covering": "Покрытие",
378
+ "agentsContacts": "Контакты агента",
379
+ "clientsContacts": "Контакты страхователя",
380
+ "agentNumber": "Номер агента",
381
+ "additionalStatus": "Дополнительный статус",
382
+ "activeTime": "Время действия",
383
+ "statementNumber": "Номер заявления",
384
+ "dogovorDate": "Дата договора",
385
+ "dateCreated": "Дата создания",
386
+ "fileName": "Имя файла",
387
+ "reset": "Сбросить",
388
+ "toExcel": "Экспорт в Excel",
389
+ "condition": "Условие",
390
+ "bet": "Ставка",
391
+ "statistics": "Статистика",
392
+ "progressBar": "Шкала прогресса",
393
+ "toAgent": "Оформить",
394
+ "notification": "Уведомление",
395
+ "news": "Новости",
396
+ "profile": "Профиль",
275
397
  "needAuth": "Для получения доступа Вам необходимо авторизоваться",
276
398
  "welcomeHL": "Добро пожаловать в Halyk Life",
277
399
  "resetType": "Выберите способ восстановление пароля",
package/locales/ru.json CHANGED
@@ -89,7 +89,13 @@
89
89
  "needToRecalculate": "Необходимо пересчитать условия продукта",
90
90
  "noUrl": "Отсутствует ссылка",
91
91
  "pickFamilyMember": "Выберите члена семьи",
92
- "numberRegistered": "Регистрационный номер успешно записан в реестр"
92
+ "numberRegistered": "Регистрационный номер успешно записан в реестр",
93
+ "requiredMember": "В заявке должен присутствовать {text}",
94
+ "client": "страхователь",
95
+ "insured": "застрахованный",
96
+ "beneficiary": "выгодоприобретатель",
97
+ "beneficialOwner": "бенефициарный собственник",
98
+ "spokesman": "представитель страхователя"
93
99
  },
94
100
  "buttons": {
95
101
  "createStatement": "Создать заявку",
@@ -271,7 +277,123 @@
271
277
  "decision": "Статус",
272
278
  "userFullName": "Исполнитель"
273
279
  },
280
+ "agent": {
281
+ "menu": "Меню",
282
+ "main": "Главное",
283
+ "reports": "Отчеты",
284
+ "report": "Отчет",
285
+ "notifications": "Уведомления",
286
+ "support": "Тех. поддержка",
287
+ "agentsInfo": "Сведения о страховых агентах",
288
+ "info": "Данные об агенте",
289
+ "about": "Сведения об Агенте",
290
+ "level": "Уровень",
291
+ "subAgents": "Суб-агенты",
292
+ "done": "Оформлено договоров",
293
+ "myContracts": "Оформлено договоров",
294
+ "nextLevel": "Следующий уровень {text}",
295
+ "leftMy": "Осталось оформить лично",
296
+ "leftAll": "Осталось оформить всего",
297
+ "donePolicies": "Оформлено полисов",
298
+ "successStat": "Статистика успешных сделок",
299
+ "doneMy": "Оформлено лично",
300
+ "doneAll": "Всего оформлено",
301
+ "progressAll": "Прогресс за все время работы",
302
+ "subagentsCalled": "Привлечено суб-агентов",
303
+ "myActivity": "Моя активность",
304
+ "teamActivity": "Активность команды",
305
+ "careerUp": "Карьерная лестница",
306
+ "direction": "Дирекция",
307
+ "leader": "Руководитель",
308
+ "agentic": "Агенство",
309
+ "agentCurator": "Куратор агента",
310
+ "agentId": "ID агента",
311
+ "reportType": "Тип отчета",
312
+ "reportFile": "Файл отчета",
313
+ "reportDate": "Отчетная дата",
314
+ "paymentJournal": "Журнал оплаты",
315
+ "journal": {
316
+ "incomeKz": "Приходы KZT",
317
+ "outcomeKz": "Расходы KZT",
318
+ "leftKz": "Остаток KZT",
319
+ "description": "Описание",
320
+ "delayMonth": "Месяц просрочки"
321
+ },
322
+ "unallocatedPayments": "Нераспределенные платежи",
323
+ "unallocation": {
324
+ "paymentId": "ID платежа",
325
+ "voucherNumber": "Номер ваучера",
326
+ "voucherDate": "Дата ваучера",
327
+ "voucherStatus": "Статус ваучера"
328
+ },
329
+ "unpaidPremiums": "Неоплаченные премии",
330
+ "unpaidDelay": "Просрочка",
331
+ "reportText": {
332
+ "reward": "Награда",
333
+ "cuWith": "Общие единицы с",
334
+ "cuBy": "Общие единицы по",
335
+ "puWith": "Личные единицы с",
336
+ "puBy": "Личные единицы по",
337
+ "minLevel": "Минимальный уровень",
338
+ "minNumOfSubs": "Мин. количество подчиненных",
339
+ "subsLevel": "Уровни подчиненных",
340
+ "daysAfter": "Дни после договора"
341
+ },
342
+ "supportText": {
343
+ "toChat": "Чат с тех. поддержкой"
344
+ },
345
+ "test": {
346
+ "testing": "Тестирование",
347
+ "results": "Результаты тестирования",
348
+ "type": "Вид тестирования",
349
+ "date": "Дата прохождения тестирования",
350
+ "resultInProcents": "Результат тестирования в процентах"
351
+ }
352
+ },
353
+ "jobApplication": {
354
+ "title": "Заявление на трудоустройсво",
355
+ "sent": "Заявление отправлено в страховую компанию",
356
+ "whichRegion": "Агентом какого региона вы хотите стать",
357
+ "requisites": "Реквизиты",
358
+ "conductReport": "Справка о несудимости",
359
+ "diplom": "Диплом",
360
+ "new": "Подать заявление"
361
+ },
274
362
  "labels": {
363
+ "photo": "Фото",
364
+ "attachPhoto": "Вложить фото",
365
+ "form": "Форма",
366
+ "toSign": "Отправить на подпись",
367
+ "contract": "Договор",
368
+ "sections": "Разделы",
369
+ "chat": "Чат",
370
+ "today": "Сегодня",
371
+ "message": "Сообщение",
372
+ "category": "Категория",
373
+ "debt": "Долг",
374
+ "premiumDate": "Дата премии",
375
+ "delayDays": "Дни просрочки",
376
+ "dischargeDate": "Дата выписки",
377
+ "covering": "Покрытие",
378
+ "agentsContacts": "Контакты агента",
379
+ "clientsContacts": "Контакты страхователя",
380
+ "agentNumber": "Номер агента",
381
+ "additionalStatus": "Дополнительный статус",
382
+ "activeTime": "Время действия",
383
+ "statementNumber": "Номер заявления",
384
+ "dogovorDate": "Дата договора",
385
+ "dateCreated": "Дата создания",
386
+ "fileName": "Имя файла",
387
+ "reset": "Сбросить",
388
+ "toExcel": "Экспорт в Excel",
389
+ "condition": "Условие",
390
+ "bet": "Ставка",
391
+ "statistics": "Статистика",
392
+ "progressBar": "Шкала прогресса",
393
+ "toAgent": "Оформить",
394
+ "notification": "Уведомление",
395
+ "news": "Новости",
396
+ "profile": "Профиль",
275
397
  "needAuth": "Для получения доступа Вам необходимо авторизоваться",
276
398
  "welcomeHL": "Добро пожаловать в Halyk Life",
277
399
  "resetType": "Выберите способ восстановление пароля",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hl-core",
3
- "version": "0.0.8-beta.15",
3
+ "version": "0.0.8-beta.17",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "main": "nuxt.config.ts",
@@ -712,8 +712,8 @@ export const useDataStore = defineStore('data', {
712
712
  addressData.push({
713
713
  id: 'response' in user && user.response && 'addresses' in user.response ? user.response.addresses[0].id : 0,
714
714
  contragentId: user.id,
715
- countryCode: user.birthPlace.ids,
716
- countryName: user.birthPlace.nameRu,
715
+ countryCode: user.registrationCountry.ids,
716
+ countryName: user.registrationCountry.nameRu,
717
717
  stateCode: user.registrationProvince.ids,
718
718
  stateName: user.registrationProvince.nameRu,
719
719
  cityCode: user.registrationCity.code,
@@ -727,7 +727,7 @@ export const useDataStore = defineStore('data', {
727
727
  cityTypeName: user.registrationRegionType.nameRu,
728
728
  blockNumber: user.registrationNumberHouse,
729
729
  apartmentNumber: user.registrationNumberApartment,
730
- address: `${checkForNull(user.birthPlace.nameRu)}, ${checkForNull(user.registrationRegionType.nameRu)} ${checkForNull(user.registrationCity.nameRu)}, ул. ${checkForNull(
730
+ address: `${checkForNull(user.registrationCountry.nameRu)}, ${checkForNull(user.registrationRegionType.nameRu)} ${checkForNull(user.registrationCity.nameRu)}, ул. ${checkForNull(
731
731
  user.registrationStreet,
732
732
  )}, д. ${checkForNull(user.registrationNumberHouse)} кв. ${checkForNull(user.registrationNumberApartment)}`,
733
733
  type: 'H',
@@ -742,9 +742,11 @@ export const useDataStore = defineStore('data', {
742
742
  };
743
743
 
744
744
  const personId = await this.api.saveContragent(data);
745
- if (personId) {
745
+ if (personId > 0) {
746
746
  await this.getContragentById(personId, whichForm, false, whichIndex);
747
747
  user.otpTokenId = null;
748
+ } else {
749
+ return false;
748
750
  }
749
751
  } catch (err) {
750
752
  this.isLoading = false;
@@ -1277,8 +1279,7 @@ export const useDataStore = defineStore('data', {
1277
1279
  this.showToaster('success', this.t('toaster.successSaved'));
1278
1280
  return true;
1279
1281
  } catch (err) {
1280
- this.showToaster('error', this.t('toaster.error'));
1281
- return false;
1282
+ return ErrorHandler(err);
1282
1283
  } finally {
1283
1284
  this.isLoading = false;
1284
1285
  }
@@ -1485,6 +1486,12 @@ export const useDataStore = defineStore('data', {
1485
1486
  const beneficiaryPolicyholderIndex = beneficiaryData.findIndex(i => i.insisId === clientData.insisId);
1486
1487
  this.formStore.isPolicyholderBeneficiary = beneficiaryPolicyholderIndex !== -1;
1487
1488
 
1489
+ if ('finCenterData' in applicationData && !!applicationData.finCenterData) {
1490
+ this.formStore.finCenterData = applicationData.finCenterData;
1491
+ this.formStore.finCenterData.regNumber = applicationData.finCenterData.regNumber;
1492
+ this.formStore.finCenterData.date = reformatDate(applicationData.finCenterData.date);
1493
+ }
1494
+
1488
1495
  if (fetchMembers) {
1489
1496
  let allMembers = [
1490
1497
  {
@@ -1832,6 +1839,22 @@ export const useDataStore = defineStore('data', {
1832
1839
  ErrorHandler(err);
1833
1840
  }
1834
1841
  },
1842
+ async registerNumber() {
1843
+ try {
1844
+ this.isLoading = true;
1845
+ const data = {
1846
+ processInstanceId: this.formStore.applicationData.processInstanceId,
1847
+ regNumber: this.formStore.finCenterData.regNumber,
1848
+ date: this.formStore.finCenterData.date,
1849
+ };
1850
+ const result = await this.api.registerNumber(data);
1851
+ return result;
1852
+ } catch (err) {
1853
+ return ErrorHandler(err);
1854
+ } finally {
1855
+ this.isLoading = false;
1856
+ }
1857
+ },
1835
1858
  async sendSMS(type, phoneNumber, text) {
1836
1859
  if (!type || !phoneNumber || !text) return;
1837
1860
  const smsData = {
@@ -1951,22 +1974,45 @@ export const useDataStore = defineStore('data', {
1951
1974
  this.showToaster('error', this.t('toaster.notSavedMember', { text: 'страхователя' }), 3000);
1952
1975
  return false;
1953
1976
  }
1954
- if (!this.isGons) {
1977
+ if (this.members.insuredApp.has) {
1955
1978
  if (this.validateMultipleMembers(this.formStore.insuredFormKey, 'insuredApp', 'застрахованных') === false) {
1956
1979
  return false;
1957
1980
  }
1981
+ if (this.members.insuredApp.required) {
1982
+ const inStatement = this.formStore.insuredForm.every(i => i.id > 0);
1983
+ if (inStatement === false) {
1984
+ this.showToaster('error', this.t('toaster.requiredMember', { text: this.t('toaster.insured') }));
1985
+ return false;
1986
+ }
1987
+ }
1958
1988
  }
1959
- if (this.validateMultipleMembers(this.formStore.beneficiaryFormKey, 'beneficiaryApp', 'выгодоприобретателей') === false) {
1960
- return false;
1989
+ if (this.members.beneficiaryApp.has) {
1990
+ if (this.validateMultipleMembers(this.formStore.beneficiaryFormKey, 'beneficiaryApp', 'выгодоприобретателей') === false) {
1991
+ return false;
1992
+ }
1993
+ if (this.members.beneficiaryApp.required) {
1994
+ const inStatement = this.formStore.beneficiaryForm.every(i => i.id > 0);
1995
+ if (inStatement === false) {
1996
+ this.showToaster('error', this.t('toaster.requiredMember', { text: this.t('toaster.beneficiary') }));
1997
+ return false;
1998
+ }
1999
+ }
1961
2000
  }
1962
- if (!this.isGons) {
2001
+ if (this.members.beneficialOwnerApp.has) {
1963
2002
  if (this.formStore.isActOwnBehalf === false) {
1964
2003
  if (this.validateMultipleMembers(this.formStore.beneficialOwnerFormKey, 'beneficialOwnerApp', 'бенефициарных собственников') === false) {
1965
2004
  return false;
1966
2005
  }
1967
2006
  }
2007
+ if (this.members.beneficialOwnerApp.required) {
2008
+ const inStatement = this.formStore.beneficialOwnerForm.every(i => i.id > 0);
2009
+ if (inStatement === false) {
2010
+ this.showToaster('error', this.t('toaster.requiredMember', { text: this.t('toaster.beneficialOwner') }));
2011
+ return false;
2012
+ }
2013
+ }
1968
2014
  }
1969
- if (!this.isGons) {
2015
+ if (this.members.spokesmanApp.has) {
1970
2016
  if (this.formStore.hasRepresentative) {
1971
2017
  if (this.formStore.applicationData.spokesmanApp && this.formStore.policyholdersRepresentativeForm.id !== this.formStore.applicationData.spokesmanApp.insisId) {
1972
2018
  this.showToaster(
@@ -1979,6 +2025,13 @@ export const useDataStore = defineStore('data', {
1979
2025
  return false;
1980
2026
  }
1981
2027
  }
2028
+ if (this.members.spokesmanApp.required) {
2029
+ const inStatement = this.formStore.policyholdersRepresentativeForm.id > 0;
2030
+ if (inStatement === false) {
2031
+ this.showToaster('error', this.t('toaster.requiredMember', { text: this.t('toaster.spokesman') }));
2032
+ return false;
2033
+ }
2034
+ }
1982
2035
  }
1983
2036
  if (this.controls.hasAttachment) {
1984
2037
  const areValid = this.formStore.SaleChanellPolicy.nameRu && this.formStore.RegionPolicy.nameRu && this.formStore.ManagerPolicy.nameRu && this.formStore.AgentData.fullName;
@@ -159,8 +159,9 @@ export const useMemberStore = defineStore('members', {
159
159
  } else {
160
160
  if (memberData) await this.dataStore.api.deleteMember(memberCode, memberData.id as number);
161
161
  }
162
+ const cleared = this.clearMember(whichForm, whichIndex);
162
163
  if (memberData && refetch) await this.dataStore.getApplicationData(taskId, true, true, true, false);
163
- return this.clearMember(whichForm, whichIndex);
164
+ return cleared;
164
165
  } catch (err) {
165
166
  console.log(err);
166
167
  return ErrorHandler(err);
@@ -202,6 +203,12 @@ export const useMemberStore = defineStore('members', {
202
203
 
203
204
  if (successTranser.value === true) {
204
205
  if (toIndex.value !== null && taskId !== '0' && this.formStore.applicationData.processInstanceId !== 0) {
206
+ if (
207
+ typeof this.formStore[to][toIndex.value].id !== 'number' ||
208
+ (typeof this.formStore[to][toIndex.value].id === 'number' && this.formStore[to][toIndex.value].id > 0 === false)
209
+ ) {
210
+ return false;
211
+ }
205
212
  const hasSaved = await this.dataStore.saveMember(this.formStore[to][toIndex.value], this.getMemberCode(to), this.getMemberFromApplication(to, toIndex.value));
206
213
  if (hasSaved) {
207
214
  await this.dataStore.getApplicationData(taskId, false, true, true, false);
package/types/index.ts CHANGED
@@ -271,6 +271,8 @@ declare global {
271
271
  text: string;
272
272
  };
273
273
 
274
+ type RegNumberDataType = { processInstanceId: string; regNumber: string; date: string };
275
+
274
276
  type EpayShortResponse = {
275
277
  id: string;
276
278
  link: string;