81 lines
2.1 KiB
TypeScript
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;
|
|
},
|
|
};
|
|
}
|