63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import type { CalculateInput, Context } from '../types';
|
|
import elementsTitles from '@/Components/Calculation/config/elements-titles';
|
|
import type { Elements } from '@/Components/Calculation/config/map/values';
|
|
import * as addProduct from '@/process/add-product';
|
|
import * as bonuses from '@/process/bonuses';
|
|
import * as configurator from '@/process/configurator';
|
|
import * as gibdd from '@/process/gibdd';
|
|
import * as insuranceProcess from '@/process/insurance';
|
|
import * as leasingObject from '@/process/leasing-object';
|
|
import * as paymentsProcess from '@/process/payments';
|
|
import * as price from '@/process/price';
|
|
import * as supplierAgent from '@/process/supplier-agent';
|
|
import type { ZodIssue } from 'zod';
|
|
|
|
const processes = [
|
|
configurator,
|
|
supplierAgent,
|
|
paymentsProcess,
|
|
price,
|
|
bonuses,
|
|
leasingObject,
|
|
gibdd,
|
|
insuranceProcess,
|
|
addProduct,
|
|
];
|
|
|
|
const titles = Object.assign(elementsTitles, {
|
|
fingap: 'Таблица Safe Finance',
|
|
insurance: 'Таблица страхования',
|
|
payments: 'Таблица платежей',
|
|
});
|
|
|
|
function getMessage(errors: ZodIssue[]) {
|
|
const elementName = errors?.at(0)?.path.at(0) as Elements;
|
|
const title = titles[elementName];
|
|
const message = errors?.at(0)?.message;
|
|
|
|
return `${title}: ${message}`;
|
|
}
|
|
|
|
export async function validate({ input, context }: { context: Context; input: CalculateInput }) {
|
|
for (const { createValidationSchema } of processes) {
|
|
const validationSchema = createValidationSchema(context);
|
|
const validationResult = await validationSchema.safeParseAsync({
|
|
...input.values,
|
|
fingap: input.fingap,
|
|
insurance: input.insurance,
|
|
payments: input.payments,
|
|
});
|
|
|
|
if (validationResult.success === false) {
|
|
const message = getMessage(validationResult.error.errors);
|
|
|
|
return { message, success: false };
|
|
}
|
|
}
|
|
|
|
return {
|
|
message: '',
|
|
success: true,
|
|
};
|
|
}
|