81 lines
2.1 KiB
TypeScript

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<ProcessContext, 'apolloClient'>) {
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;
},
};
}