41 lines
2.2 KiB
TypeScript
41 lines
2.2 KiB
TypeScript
import type { ValidationContext } from '../types';
|
||
import ValuesSchema from '@/config/schema/values';
|
||
import * as CRMTypes from '@/graphql/crm.types';
|
||
import { z } from 'zod';
|
||
|
||
export function createValidationSchema({ apolloClient }: ValidationContext) {
|
||
return ValuesSchema.pick({ parmentsDecreasePercent: true, tarif: true }).superRefine(
|
||
async ({ parmentsDecreasePercent, tarif: tarifId }, ctx) => {
|
||
/**
|
||
* На изменение поля Процет убывания платежей tbxParmentsDecreasePercent необходимо заложить проверку:
|
||
* Если значение поля меньше значения в поле "Минимальный % убывания платежей" evo_min_decreasing_perc из записи,
|
||
* указанной в поле ТарифselectTarif , то поле Процет убывания платежей tbxParmentsDecreasePercent должно обводиться красной рамкой
|
||
* и выводиться сообщение "Процент убывания не может быть меньше минимального значения по данному тарифу
|
||
* - <указывается значение из поля "Минимальный % убывания платежей">, иначе красная рамка снимается.
|
||
* При красной рамке в данном поле нельзя осуществить расчет графика.
|
||
*/
|
||
if (tarifId) {
|
||
const {
|
||
data: { evo_tarif },
|
||
} = await apolloClient.query({
|
||
query: CRMTypes.GetTarifDocument,
|
||
variables: {
|
||
tarifId,
|
||
},
|
||
});
|
||
|
||
if (
|
||
evo_tarif?.evo_min_decreasing_perc &&
|
||
parmentsDecreasePercent < evo_tarif?.evo_min_decreasing_perc
|
||
) {
|
||
ctx.addIssue({
|
||
code: z.ZodIssueCode.custom,
|
||
message: `Процент убывания не может быть меньше минимального значения по данному тарифу - ${evo_tarif?.evo_min_decreasing_perc}`,
|
||
path: ['tbxParmentsDecreasePercent'],
|
||
});
|
||
}
|
||
}
|
||
}
|
||
);
|
||
}
|