75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
/* eslint-disable @typescript-eslint/naming-convention */
|
||
import { VAT } from '@/constants/values';
|
||
import * as CRMTypes from '@/graphql/crm.types';
|
||
import type { ProcessContext } from '@/process/types';
|
||
import { reaction } from 'mobx';
|
||
import { round } from 'tools';
|
||
|
||
export default function reactions({ store, apolloClient }: ProcessContext) {
|
||
const { $calculation } = store;
|
||
|
||
reaction(
|
||
() =>
|
||
$calculation.$values.getValues([
|
||
'VATInLeaseObjectPrice',
|
||
'leaseObjectPriceWthtVAT',
|
||
'product',
|
||
]),
|
||
async ({ VATInLeaseObjectPrice, leaseObjectPriceWthtVAT, product: productId }) => {
|
||
let evo_sale_without_nds = false;
|
||
|
||
if (productId) {
|
||
const {
|
||
data: { evo_baseproduct },
|
||
} = await apolloClient.query({
|
||
query: CRMTypes.GetProductDocument,
|
||
variables: {
|
||
productId,
|
||
},
|
||
});
|
||
if (evo_baseproduct?.evo_sale_without_nds) {
|
||
evo_sale_without_nds = evo_baseproduct.evo_sale_without_nds;
|
||
}
|
||
}
|
||
|
||
$calculation.element('tbxVATInLeaseObjectPrice').validate({
|
||
invalid:
|
||
evo_sale_without_nds && round(VATInLeaseObjectPrice / leaseObjectPriceWthtVAT, 2) >= VAT,
|
||
message:
|
||
'При продаже ПЛ после ФЛ размер НДС в стоимости ПЛ не может составлять 20% и более от стоимости с НДС. Проверьте корректность НДС, либо измените Продукт',
|
||
});
|
||
}
|
||
);
|
||
|
||
reaction(
|
||
() => $calculation.$values.getValues(['supplierDiscountRub', 'plPriceRub']),
|
||
({ supplierDiscountRub, plPriceRub }) => {
|
||
$calculation.element('tbxSupplierDiscountRub').validate({
|
||
invalid: supplierDiscountRub >= plPriceRub,
|
||
message: 'Скидка от поставщика не может быть больше или равна стоимости ПЛ',
|
||
});
|
||
}
|
||
);
|
||
|
||
reaction(
|
||
() => $calculation.$values.getValues(['firstPaymentRub', 'plPriceRub']),
|
||
({ firstPaymentRub, plPriceRub }) => {
|
||
$calculation.element('tbxFirstPaymentRub').validate({
|
||
invalid: firstPaymentRub >= plPriceRub,
|
||
message: 'Первый платеж не может быть больше или равен стоимости ПЛ',
|
||
});
|
||
}
|
||
);
|
||
|
||
reaction(
|
||
() => $calculation.$values.getValues(['firstPaymentRub', 'subsidySum']),
|
||
({ firstPaymentRub, subsidySum }) => {
|
||
$calculation.element('tbxFirstPaymentRub').validate({
|
||
invalid: firstPaymentRub - subsidySum < 0,
|
||
message:
|
||
'Первый платеж с учетом субсидии получается отрицательный, увеличьте первый платеж',
|
||
});
|
||
}
|
||
);
|
||
}
|