import type { ProcessContext } from '../../types'; import * as CRMTypes from '@/graphql/crm.types'; import type { CalculationValues } from '@/stores/calculation/values/types'; type GetSubsidySumInput = Pick< CalculationValues, 'addEquipmentPrice' | 'discountRub' | 'importProgramSum' | 'plPriceRub' | 'subsidy' >; type GetImportProgramSumInput = Pick< CalculationValues, 'discountRub' | 'importProgram' | 'plPriceRub' >; export default function helper({ apolloClient }: Pick) { return { async getImportProgramSum({ importProgram: importProgramId, plPriceRub, discountRub, }: GetImportProgramSumInput) { if (!importProgramId) { return 0; } const { data: { evo_subsidy: importProgram }, } = await apolloClient.query({ query: CRMTypes.GetSubsidyDocument, variables: { subsidyId: importProgramId, }, }); if (importProgram?.evo_subsidy_summ && importProgram?.evo_subsidy_summ > 0) { return importProgram?.evo_subsidy_summ; } else { const subsidyPercent = (importProgram?.evo_percent_subsidy || 0) / 100; const sum = (plPriceRub - discountRub) * subsidyPercent; const maxSum = importProgram?.evo_max_subsidy_summ || 0; return Math.min(sum, maxSum); } }, async getSubsidySum({ subsidy: subsidyId, plPriceRub, discountRub, addEquipmentPrice, importProgramSum, }: GetSubsidySumInput) { if (!subsidyId) { return 0; } const { data: { evo_subsidy }, } = await apolloClient.query({ query: CRMTypes.GetSubsidyDocument, variables: { subsidyId, }, }); if (evo_subsidy?.evo_subsidy_summ) { return evo_subsidy?.evo_subsidy_summ; } const price = plPriceRub - discountRub - importProgramSum + addEquipmentPrice; let sum = (price * (evo_subsidy?.evo_percent_subsidy ?? 0)) / 100; const maxSum = evo_subsidy?.evo_max_subsidy_summ ?? 0; if (sum > maxSum) sum = maxSum; return sum; }, }; }