From 330d68f2a9bdcc71a10bc9368a3bfef8f8b36730 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Mon, 22 Jan 2024 10:58:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=8F=20"=D0=A7=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=BD=D1=8B=D0=B9=20=D0=9D=D0=94=D0=A1"=20cb?= =?UTF-8?q?xPartialVAT=20=20=D0=BD=D0=B5=D0=BE=D0=B1=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=B8=20=D0=B2=D1=81=D0=B5=20=D1=80=D0=B5=D0=B0=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=B8=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D0=BE=D1=82=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8F=20"=D0=9F=D1=80=D0=BE=D0=B4=D0=B0=D0=B6?= =?UTF-8?q?=D0=B0=20=D0=B1=D0=B5=D0=B7=20=D0=9D=D0=94=D0=A1"=20=D0=B2=20?= =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B4=D1=83=D0=BA=D1=82=D0=B5=20selectProduc?= =?UTF-8?q?t=20(=D0=B8=D1=89=D0=B5=D0=BC=20=D0=BF=D0=BE=20evo=5Fsale=5Fwit?= =?UTF-8?q?hout=5Fnds):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit см. в ЗНР ___Реакции по процессам _ в таблице по "DYN-3854" --- .../Calculation/Form/ELT/lib/make-request.ts | 18 +++--- apps/web/process/price/reactions/common.ts | 31 +++------- apps/web/process/price/validation.ts | 36 ++++------- apps/web/process/recalc/validation.ts | 17 ++--- .../subsidy-import-program/reactions.ts | 21 +++---- apps/web/process/used-pl/reactions.ts | 62 +++++-------------- 6 files changed, 60 insertions(+), 125 deletions(-) diff --git a/apps/web/Components/Calculation/Form/ELT/lib/make-request.ts b/apps/web/Components/Calculation/Form/ELT/lib/make-request.ts index b5c1d33..68f673c 100644 --- a/apps/web/Components/Calculation/Form/ELT/lib/make-request.ts +++ b/apps/web/Components/Calculation/Form/ELT/lib/make-request.ts @@ -348,21 +348,15 @@ export async function makeEltKaskoRequest( const leaseObjectUsed = $calculation.element('cbxLeaseObjectUsed').getValue(); const productId = $calculation.element('selectProduct').getValue(); - let evo_baseproduct: CRMTypes.GetProductQuery['evo_baseproduct'] = null; - if (productId) { - const { data } = await apolloClient.query({ - query: CRMTypes.GetProductDocument, - variables: { productId }, - }); - ({ evo_baseproduct } = data); - } + const partialVAT = $calculation.element('cbxPartialVAT').getValue(); const leaseObjectYear = $calculation.element('tbxLeaseObjectYear').getValue(); let isNew = true; if ( leaseObjectUsed === true || (leaseObjectUsed === false && - evo_baseproduct?.evo_sale_without_nds === true && + productId && + partialVAT && leaseObjectYear < currentDate.getFullYear() - 1) ) { isNew = false; @@ -373,7 +367,8 @@ export async function makeEltKaskoRequest( if ( leaseObjectUsed === true || (leaseObjectUsed === false && - evo_baseproduct?.evo_sale_without_nds === true && + productId && + partialVAT && leaseObjectYear < currentDate.getFullYear() - 1) ) { vehicleDate = new Date(`${vehicleYear}-01-01`); @@ -496,7 +491,8 @@ export async function makeEltKaskoRequest( if ( leaseObjectUsed === false && - evo_baseproduct?.evo_sale_without_nds === true && + productId && + partialVAT && leaseObjectYear < currentDate.getFullYear() - 1 ) { mileage = 0; diff --git a/apps/web/process/price/reactions/common.ts b/apps/web/process/price/reactions/common.ts index 293eac9..3b0707b 100644 --- a/apps/web/process/price/reactions/common.ts +++ b/apps/web/process/price/reactions/common.ts @@ -1,11 +1,10 @@ import { VAT } from '@/constants/values'; -import * as CRMTypes from '@/graphql/crm.types'; import type { ProcessContext } from '@/process/types'; import { disposableReaction } from '@/utils/mobx'; import { reaction } from 'mobx'; import { round } from 'tools'; -export default function reactions({ store, apolloClient }: ProcessContext) { +export default function reactions({ store }: ProcessContext) { const { $calculation, $process } = store; reaction( @@ -71,25 +70,15 @@ export default function reactions({ store, apolloClient }: ProcessContext) { ); reaction( - () => $calculation.$values.getValues(['product', 'leaseObjectPrice', 'VATInLeaseObjectPrice']), - async ({ product: productId, leaseObjectPrice, VATInLeaseObjectPrice }) => { - 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; - } - } - - if (evo_sale_without_nds) { + () => + $calculation.$values.getValues([ + 'product', + 'leaseObjectPrice', + 'VATInLeaseObjectPrice', + 'partialVAT', + ]), + async ({ product: productId, leaseObjectPrice, VATInLeaseObjectPrice, partialVAT }) => { + if (productId && partialVAT) { $calculation .element('tbxLeaseObjectPriceWthtVAT') .setValue(leaseObjectPrice - VATInLeaseObjectPrice); diff --git a/apps/web/process/price/validation.ts b/apps/web/process/price/validation.ts index ef49ba5..6bb9ebb 100644 --- a/apps/web/process/price/validation.ts +++ b/apps/web/process/price/validation.ts @@ -1,17 +1,16 @@ -import type { ValidationContext } from '../types'; import ValuesSchema from '@/config/schema/values'; import { VAT } from '@/constants/values'; -import * as CRMTypes from '@/graphql/crm.types'; import { round } from 'tools'; import { z } from 'zod'; -export function createValidationSchema({ apolloClient }: ValidationContext) { +export function createValidationSchema() { return ValuesSchema.pick({ VATInLeaseObjectPrice: true, balanceHolder: true, firstPaymentRub: true, lastPaymentPerc: true, leaseObjectPriceWthtVAT: true, + partialVAT: true, plPriceRub: true, product: true, subsidySum: true, @@ -28,30 +27,21 @@ export function createValidationSchema({ apolloClient }: ValidationContext) { subsidySum, balanceHolder, lastPaymentPerc, + partialVAT, }, ctx ) => { - if (productId) { - const { - data: { evo_baseproduct }, - } = await apolloClient.query({ - query: CRMTypes.GetProductDocument, - variables: { - productId, - }, + if ( + productId && + partialVAT && + round(VATInLeaseObjectPrice / leaseObjectPriceWthtVAT, 2) >= VAT + ) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: + 'При продаже ПЛ после ФЛ размер НДС в стоимости ПЛ не может составлять 20% и более от стоимости с НДС. Проверьте корректность НДС, либо измените Продукт', + path: ['tbxVATInLeaseObjectPrice'], }); - - if ( - evo_baseproduct?.evo_sale_without_nds && - round(VATInLeaseObjectPrice / leaseObjectPriceWthtVAT, 2) >= VAT - ) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: - 'При продаже ПЛ после ФЛ размер НДС в стоимости ПЛ не может составлять 20% и более от стоимости с НДС. Проверьте корректность НДС, либо измените Продукт', - path: ['tbxVATInLeaseObjectPrice'], - }); - } } if (supplierDiscountRub >= plPriceRub) { diff --git a/apps/web/process/recalc/validation.ts b/apps/web/process/recalc/validation.ts index df8fde0..b93fa47 100644 --- a/apps/web/process/recalc/validation.ts +++ b/apps/web/process/recalc/validation.ts @@ -21,6 +21,7 @@ export function createValidationSchema({ apolloClient }: ValidationContext) { leaseObjectUsed: true, leaseObjectYear: true, maxMass: true, + partialVAT: true, plPriceRub: true, product: true, quote: true, @@ -45,6 +46,7 @@ export function createValidationSchema({ apolloClient }: ValidationContext) { leaseObjectYear, lastPaymentPerc, leaseObjectCategory, + partialVAT, }, ctx ) => { @@ -75,18 +77,11 @@ export function createValidationSchema({ apolloClient }: ValidationContext) { variables: { quoteId }, }); - const { - data: { evo_baseproduct }, - } = await apolloClient.query({ - query: CRMTypes.GetProductDocument, - variables: { productId }, - }); - const maxCondition1 = leaseObjectUsed === false && dealerPerson?.evo_supplier_type !== 100_000_001 && quote?.evo_max_price_change && - !evo_baseproduct?.evo_sale_without_nds && + !partialVAT && plPriceRub - discountRub + addEquipmentPrice - importProgramSum > quote.evo_max_price_change; @@ -94,7 +89,7 @@ export function createValidationSchema({ apolloClient }: ValidationContext) { leaseObjectUsed === false && dealerPerson?.evo_supplier_type !== 100_000_001 && quote?.evo_max_price_change && - evo_baseproduct?.evo_sale_without_nds && + partialVAT && leaseObjectPriceWthtVAT > quote.evo_max_price_change - (quote.evo_nds_in_price_supplier_currency || 0); @@ -108,13 +103,13 @@ export function createValidationSchema({ apolloClient }: ValidationContext) { (quote.evo_program_import_subsidy_sum || 0); const minCondition1 = - !evo_baseproduct?.evo_sale_without_nds && + !partialVAT && quote?.evo_min_change_price && plPriceRub - discountRub + addEquipmentPrice - importProgramSum < quote.evo_min_change_price; const minCondition2 = - evo_baseproduct?.evo_sale_without_nds && + partialVAT && quote?.evo_min_change_price && leaseObjectPriceWthtVAT < quote.evo_min_change_price - (quote.evo_nds_in_price_supplier_currency || 0); diff --git a/apps/web/process/subsidy-import-program/reactions.ts b/apps/web/process/subsidy-import-program/reactions.ts index a834ce9..13b60cc 100644 --- a/apps/web/process/subsidy-import-program/reactions.ts +++ b/apps/web/process/subsidy-import-program/reactions.ts @@ -16,12 +16,20 @@ export function common({ store, apolloClient }: ProcessContext) { * иначе selectSupplierCurrency открыто для редактирования */ reaction( - () => $calculation.$values.getValues(['product', 'subsidy', 'importProgram', 'dealer']), + () => + $calculation.$values.getValues([ + 'product', + 'subsidy', + 'importProgram', + 'dealer', + 'partialVAT', + ]), async ({ product: productId, subsidy: subsidyId, importProgram: importProgramId, dealer: dealerId, + partialVAT, }) => { const { data: { transactioncurrencies }, @@ -41,16 +49,7 @@ export function common({ store, apolloClient }: ProcessContext) { return; } - const { - data: { evo_baseproduct }, - } = await apolloClient.query({ - query: CRMTypes.GetProductDocument, - variables: { - productId, - }, - }); - - if (subsidyId || importProgramId || evo_baseproduct?.evo_sale_without_nds) { + if (subsidyId || importProgramId || (productId && partialVAT)) { $calculation.element('selectSupplierCurrency').setValue(transactioncurrency_rub_id).block(); } else if (dealerId) { const { diff --git a/apps/web/process/used-pl/reactions.ts b/apps/web/process/used-pl/reactions.ts index f64427e..8251b8d 100644 --- a/apps/web/process/used-pl/reactions.ts +++ b/apps/web/process/used-pl/reactions.ts @@ -38,8 +38,8 @@ export function common({ store, apolloClient }: ProcessContext) { * поле НДС в стоимости предмета лизинга xxx закрыть для редактирования */ reaction( - () => $calculation.$values.getValues(['product', 'recalcWithRevision']), - async ({ product: productId }) => { + () => $calculation.$values.getValues(['product', 'recalcWithRevision', 'partialVAT']), + async ({ product: productId, partialVAT }) => { if (!productId) { $calculation.element('tbxSupplierDiscountRub').block(); $calculation.element('tbxSupplierDiscountPerc').block(); @@ -50,16 +50,7 @@ export function common({ store, apolloClient }: ProcessContext) { return; } - const { - data: { evo_baseproduct }, - } = await apolloClient.query({ - query: CRMTypes.GetProductDocument, - variables: { - productId, - }, - }); - - if (evo_baseproduct?.evo_sale_without_nds) { + if (productId && partialVAT) { $calculation.element('tbxSupplierDiscountRub').block(); $calculation.element('tbxSupplierDiscountPerc').block(); $calculation.element('tbxLeaseObjectPrice').unblock(); @@ -80,8 +71,8 @@ export function common({ store, apolloClient }: ProcessContext) { disposableReaction( () => $process.has('LoadKP'), - () => $calculation.$values.getValues(['product']), - async ({ product: productId }) => { + () => $calculation.$values.getValues(['product', 'partialVAT']), + async ({ product: productId, partialVAT }) => { if (!productId) { $calculation.element('tbxSupplierDiscountRub').resetValue(); $calculation.element('tbxSupplierDiscountPerc').resetValue(); @@ -93,23 +84,15 @@ export function common({ store, apolloClient }: ProcessContext) { return; } - const { - data: { evo_baseproduct }, - } = await apolloClient.query({ - query: CRMTypes.GetProductDocument, - variables: { - productId, - }, - }); - - if (evo_baseproduct?.evo_sale_without_nds) { + if (productId && partialVAT) { $calculation.element('tbxSupplierDiscountRub').resetValue(); $calculation.element('tbxSupplierDiscountPerc').resetValue(); $calculation.element('selectImportProgram').resetValue(); } if ( - evo_baseproduct?.evo_sale_without_nds && + productId && + partialVAT && $calculation.element('cbxRecalcWithRevision').getValue() === false ) { $calculation.element('cbxLeaseObjectUsed').setValue(true); @@ -127,8 +110,8 @@ export function common({ store, apolloClient }: ProcessContext) { * иначе открыты для редактирования */ reaction( - () => $calculation.$values.getValues(['recalcWithRevision', 'product']), - async ({ recalcWithRevision, product: productId }) => { + () => $calculation.$values.getValues(['recalcWithRevision', 'product', 'partialVAT']), + async ({ recalcWithRevision, product: productId, partialVAT }) => { if (!productId) { $calculation.element('tbxFirstPaymentPerc').unblock(); $calculation.element('tbxFirstPaymentRub').unblock(); @@ -136,16 +119,7 @@ export function common({ store, apolloClient }: ProcessContext) { return; } - const { - data: { evo_baseproduct }, - } = await apolloClient.query({ - query: CRMTypes.GetProductDocument, - variables: { - productId, - }, - }); - - if (evo_baseproduct?.evo_sale_without_nds && recalcWithRevision) { + if (productId && partialVAT && recalcWithRevision) { $calculation.element('tbxFirstPaymentPerc').block(); $calculation.element('tbxFirstPaymentRub').block(); } else { @@ -227,6 +201,7 @@ export function common({ store, apolloClient }: ProcessContext) { 'product', 'dealer', 'supplierFinancing', + 'partialVAT', ]), async ({ leaseObjectUsed, @@ -234,20 +209,11 @@ export function common({ store, apolloClient }: ProcessContext) { product: productId, dealer: dealerId, supplierFinancing, + partialVAT, }) => { - let evo_baseproduct: CRMTypes.GetProductQuery['evo_baseproduct'] = null; let dealer: CRMTypes.GetDealerQuery['dealer'] = null; let evo_subsidy: CRMTypes.GetSubsidyQuery['evo_subsidy'] = null; - if (productId) { - const { data } = await apolloClient.query({ - query: CRMTypes.GetProductDocument, - variables: { productId }, - }); - - ({ evo_baseproduct } = data); - } - if (dealerId) { const { data } = await apolloClient.query({ query: CRMTypes.GetDealerDocument, @@ -270,7 +236,7 @@ export function common({ store, apolloClient }: ProcessContext) { leaseObjectUsed || (evo_subsidy_evo_delivery_time?.length === 1 && evo_subsidy_evo_delivery_time.includes(100_000_000)) || - evo_baseproduct?.evo_sale_without_nds || + (productId && partialVAT) || dealer?.evo_return_leasing_dealer ) { $calculation.element('radioDeliveryTime').setValue(100_000_000).block();