diff --git a/src/client/stores/CalculationStore/Effects/reactions/index.ts b/src/client/stores/CalculationStore/Effects/reactions/index.ts index 4dda424..998d83c 100644 --- a/src/client/stores/CalculationStore/Effects/reactions/index.ts +++ b/src/client/stores/CalculationStore/Effects/reactions/index.ts @@ -1,5 +1,6 @@ import eltReactions from './eltReactions'; import gibddReactions from './gibddReactions'; +import insuranceReactions from './insuranceReactions'; import loadKpReaction from './loadKpReaction'; import otherReactions from './otherReactions'; import priceReactions from './priceReactions'; @@ -17,5 +18,6 @@ export default [ ...recalcWoRevisionReactions, ...gibddReactions, ...eltReactions, + ...insuranceReactions, loadKpReaction, ]; diff --git a/src/client/stores/CalculationStore/Effects/reactions/insuranceReactions.ts b/src/client/stores/CalculationStore/Effects/reactions/insuranceReactions.ts new file mode 100644 index 0000000..ce70f59 --- /dev/null +++ b/src/client/stores/CalculationStore/Effects/reactions/insuranceReactions.ts @@ -0,0 +1,60 @@ +import { IReactionEffect } from 'core/types/Calculation/Store/effect'; + +const mapObjectCategoryToUseFor = { + 100000000: [100000000, 100000002], + 100000001: [ + 100000000, + 100000001, + 100000002, + 100000003, + 100000004, + 100000005, + 100000006, + 100000007, + 100000008, + 100000009, + 100000010, + 100000011, + 100000012, + 100000013, + ], + 100000002: [100000002, 100000004, 100000005, 100000006, 100000009, 100000010], + 100000003: [ + 100000002, + 100000004, + 100000006, + 100000007, + 100000008, + 100000011, + 100000012, + 100000013, + ], + 100000004: [100000002, 100000009], +}; + +const insuranceReactions: IReactionEffect[] = [ + calculationStore => ({ + expression: () => { + return calculationStore.getValue('leaseObjectCategory'); + }, + effect: leaseObjectCategory => { + if (leaseObjectCategory) { + const allowedObjectUseFor: number[] = + mapObjectCategoryToUseFor[leaseObjectCategory]; + calculationStore.setFilter('selectLeaseObjectUseFor', options => + options.filter( + option => + option.value && + typeof option.value === 'number' && + allowedObjectUseFor && + allowedObjectUseFor.includes(option.value), + ), + ); + } else { + calculationStore.setFilter('selectLeaseObjectUseFor', undefined); + } + }, + }), +]; + +export default insuranceReactions; diff --git a/src/client/stores/CalculationStore/config/initialOptions.ts b/src/client/stores/CalculationStore/config/initialOptions.ts index 42eea06..57f5ac3 100644 --- a/src/client/stores/CalculationStore/config/initialOptions.ts +++ b/src/client/stores/CalculationStore/config/initialOptions.ts @@ -1,5 +1,6 @@ import { TElements } from 'core/types/Calculation/Store/elements'; import { IBaseOption } from 'core/types/Calculation/Store/options'; +import { orderBy } from 'lodash'; const initialOptions: TElements = { selectChannel: [ @@ -213,65 +214,69 @@ const initialOptions: TElements = { }, ], - selectLeaseObjectUseFor: [ - { - name: 'Для представительских целей', - value: 100000000, - }, - { - name: 'Для использования в качестве «такси»', - value: 100000001, - }, - { - name: 'Для передачи третьим лицам (прокат; аренда)', - value: 100000002, - }, - { - name: 'Каршеринг', - value: 100000003, - }, - { - name: 'Тест-драйв', - value: 100000004, - }, - { - name: 'Для доставки продуктов конечному потребителю', - value: 100000005, - }, - { - name: 'Для обучения вождению', - value: 100000006, - }, - { - name: 'Маршрутные такси / Рейсовые автобусы', - value: 100000007, - }, - { - name: 'Междугородние перевозки', - value: 100000008, - }, - { - name: 'Для перевозки крупногабаритных грузов', - value: 100000009, - }, - { - name: 'Для перевозки малогабаритных грузов', - value: 100000010, - }, - { - name: 'Для перевозки сотрудников других организаций (водитель ЛП)', - value: 100000011, - }, - { - name: 'Для перевозки сотрудников ЛП', - value: 100000012, - }, - { - name: - 'Для экскурсионных перевозок в т.ч. на торжества; трансфер в аэропорт и пр.', - value: 100000013, - }, - ], + selectLeaseObjectUseFor: orderBy( + [ + { + name: 'Для представительских целей', + value: 100000000, + }, + { + name: 'Для использования в качестве «такси»', + value: 100000001, + }, + { + name: 'Для передачи третьим лицам (прокат; аренда)', + value: 100000002, + }, + { + name: 'Каршеринг', + value: 100000003, + }, + { + name: 'Тест-драйв', + value: 100000004, + }, + { + name: 'Для доставки продуктов конечному потребителю', + value: 100000005, + }, + { + name: 'Для обучения вождению', + value: 100000006, + }, + { + name: 'Маршрутные такси / Рейсовые автобусы', + value: 100000007, + }, + { + name: 'Междугородние перевозки', + value: 100000008, + }, + { + name: 'Для перевозки крупногабаритных грузов', + value: 100000009, + }, + { + name: 'Для перевозки малогабаритных грузов', + value: 100000010, + }, + { + name: 'Для перевозки сотрудников других организаций (водитель ЛП)', + value: 100000011, + }, + { + name: 'Для перевозки сотрудников ЛП', + value: 100000012, + }, + { + name: + 'Для экскурсионных перевозок в т.ч. на торжества; трансфер в аэропорт и пр.', + value: 100000013, + }, + ], + objectUseFor => objectUseFor.name.toLowerCase(), + ['asc'], + ), radioInsuranceOPF: [ {