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'], }); } } } ); }