From cf7189123e0d6884c0b1640ea89b7d1b9d090244 Mon Sep 17 00:00:00 2001 From: Chika Date: Mon, 17 Oct 2022 15:48:02 +0300 Subject: [PATCH] add validation for seasons payments --- process/payments/validation.ts | 20 ++++++++++++++++---- tools/array.ts | 4 ++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/process/payments/validation.ts b/process/payments/validation.ts index 9fbe6c4..5ae0b88 100644 --- a/process/payments/validation.ts +++ b/process/payments/validation.ts @@ -2,7 +2,8 @@ /* eslint-disable no-case-declarations */ import { counting, max, min, sort } from 'radash/dist/array'; import type RootStore from 'stores/root'; -import { areEqual } from 'tools/array'; +import { areEqual, isSorted, shift } from 'tools/array'; +import { SEASONS_PERIODS, SEASONS_PERIOD_NUMBER } from './lib/seasons-constants'; export default function validatePaymentsTable({ $calculation, $tables }: RootStore) { switch ($calculation.getElementValue('radioGraphType')) { @@ -92,12 +93,23 @@ export default function validatePaymentsTable({ $calculation, $tables }: RootSto return 'Не выбран тип сезонности'; } - const highSeasonStart = $calculation.getElementValue('selectHighSeasonStart'); - if (!highSeasonStart) { + const highSeasonStartOption = $calculation.getElementOption('selectHighSeasonStart'); + if (!highSeasonStartOption) { return 'Не выбрано смещение сезонности'; } - // TODO: seasons validation + { + const seasons = $tables.payments.values.slice(1, SEASONS_PERIOD_NUMBER + 1); + const shiftNumber = Number.parseInt(highSeasonStartOption.label, 10) - 2; + const unshiftedSeasons = shift(seasons, -shiftNumber); + + const positions = SEASONS_PERIODS[seasonType]; + const seasonsValues = positions.map((position) => unshiftedSeasons[position]); + + if (isSorted(seasonsValues)) { + return 'Сезонные платежи должны убывать'; + } + } break; } diff --git a/tools/array.ts b/tools/array.ts index f468627..3460805 100644 --- a/tools/array.ts +++ b/tools/array.ts @@ -25,3 +25,7 @@ export function shift(arr: Array, n: number) { return [...arr.slice(-shiftNumber, arr.length), ...arr.slice(0, -shiftNumber)]; } + +export function isSorted(arr: Array) { + return arr.every((value, index, array) => !index || array[index - 1] <= value); +}