diff --git a/apps/web/process/leasing-object/get-kp-data.ts b/apps/web/process/leasing-object/get-kp-data.ts index 24d65ce..d822519 100644 --- a/apps/web/process/leasing-object/get-kp-data.ts +++ b/apps/web/process/leasing-object/get-kp-data.ts @@ -1,9 +1,11 @@ import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types'; +import helper from './lib/helper'; import initializeApollo from '@/apollo/client'; import defaultValues from '@/config/default-values'; import * as CRMTypes from '@/graphql/crm.types'; import { gql } from '@apollo/client'; +// eslint-disable-next-line @typescript-eslint/no-unused-vars const QUERY_GET_QUOTE_LEASING_OBJECT_DATA = gql` query GetQuoteLeasingObjectData($quoteId: Uuid!) { quote(quoteId: $quoteId) { @@ -46,15 +48,28 @@ export async function getKPData({ }, }); + const brand = quote?.evo_brandid ?? defaultValues.brand; + const model = quote?.evo_modelid ?? defaultValues.model; + const leaseObjectUsed = quote?.evo_leasingobject_used ?? defaultValues.leaseObjectUsed; + + const { getImporterReward } = helper({ apolloClient }); + const { importerRewardPerc, importerRewardRub } = await getImporterReward({ + brand, + leaseObjectUsed, + model, + }); + return { values: { - brand: quote?.evo_brandid, + brand, configuration: quote?.evo_equipmentid, countSeats: quote?.evo_seats ?? defaultValues.countSeats, deliveryTime: quote?.evo_delivery_time ?? defaultValues.deliveryTime, engineHours: quote?.evo_engine_hours ?? defaultValues.engineHours, engineType: quote?.evo_engine_type, engineVolume: quote?.evo_engine_volume ?? defaultValues.engineVolume, + importerRewardPerc, + importerRewardRub, leaseObjectCategory: quote?.evo_category, leaseObjectCount: (recalcWithRevision ? quote?.evo_recalc_limit : quote?.evo_object_count) ?? @@ -62,12 +77,12 @@ export async function getKPData({ leaseObjectMotorPower: quote?.evo_power ?? defaultValues.leaseObjectMotorPower, leaseObjectType: quote?.evo_leasingobject_typeid, leaseObjectUseFor: quote?.evo_use_for, - leaseObjectUsed: quote?.evo_leasingobject_used ?? defaultValues.leaseObjectUsed, + leaseObjectUsed, leaseObjectYear: quote?.evo_year ?? defaultValues.leaseObjectYear, maxMass: quote?.evo_max_mass ?? defaultValues.maxMass, maxSpeed: quote?.evo_max_speed ?? defaultValues.maxSpeed, mileage: quote?.evo_mileage ?? defaultValues.mileage, - model: quote?.evo_modelid, + model, vin: quote?.evo_vin, withTrailer: quote?.evo_trailer ?? defaultValues.withTrailer, }, diff --git a/apps/web/process/leasing-object/lib/helper.ts b/apps/web/process/leasing-object/lib/helper.ts new file mode 100644 index 0000000..441bacb --- /dev/null +++ b/apps/web/process/leasing-object/lib/helper.ts @@ -0,0 +1,65 @@ +import type { ProcessContext } from '../../types'; +import defaultValues from '@/config/default-values'; +import * as CRMTypes from '@/graphql/crm.types'; +import type { CalculationValues } from '@/stores/calculation/values/types'; + +type GetImporterRewardInput = Pick; + +export default function helper({ apolloClient }: Pick) { + return { + async getImporterReward({ + brand: brandId, + leaseObjectUsed, + model: modelId, + }: GetImporterRewardInput) { + if (leaseObjectUsed) { + return { + importerRewardPerc: defaultValues.importerRewardPerc, + importerRewardRub: defaultValues.importerRewardRub, + }; + } + + let evo_importer_reward_perc = 0; + let evo_importer_reward_rub = 0; + + if (modelId) { + const { + data: { evo_model }, + } = await apolloClient.query({ + query: CRMTypes.GetModelDocument, + variables: { modelId }, + }); + + if (evo_model?.evo_importer_reward_perc) { + evo_importer_reward_perc = evo_model?.evo_importer_reward_perc; + } + + if (evo_model?.evo_importer_reward_rub) { + evo_importer_reward_rub = evo_model?.evo_importer_reward_rub; + } + } + + if (brandId && evo_importer_reward_perc === 0 && evo_importer_reward_rub === 0) { + const { + data: { evo_brand }, + } = await apolloClient.query({ + query: CRMTypes.GetBrandDocument, + variables: { brandId }, + }); + + if (evo_brand?.evo_importer_reward_perc) { + evo_importer_reward_perc = evo_brand?.evo_importer_reward_perc; + } + + if (evo_brand?.evo_importer_reward_rub) { + evo_importer_reward_rub = evo_brand?.evo_importer_reward_rub; + } + } + + return { + importerRewardPerc: evo_importer_reward_perc, + importerRewardRub: evo_importer_reward_rub, + }; + }, + }; +} diff --git a/apps/web/process/leasing-object/reactions/common.ts b/apps/web/process/leasing-object/reactions/common.ts index 14af7f5..1a0a9ad 100644 --- a/apps/web/process/leasing-object/reactions/common.ts +++ b/apps/web/process/leasing-object/reactions/common.ts @@ -1,3 +1,4 @@ +import helper from '../lib/helper'; import * as CRMTypes from '@/graphql/crm.types'; import type { ProcessContext } from '@/process/types'; import { normalizeOptions } from '@/utils/entity'; @@ -7,6 +8,8 @@ import { intersects } from 'radash'; export default function reactions({ store, apolloClient }: ProcessContext) { const { $calculation } = store; + const { getImporterReward } = helper({ apolloClient }); + reaction( () => $calculation.$values.getValues(['brand', 'importProgram', 'leaseObjectType', 'subsidy']), async ({ @@ -306,56 +309,11 @@ export default function reactions({ store, apolloClient }: ProcessContext) { reaction( () => $calculation.$values.getValues(['brand', 'model', 'leaseObjectUsed']), - async ({ brand: brandId, model: modelId, leaseObjectUsed }) => { - const tbxImporterRewardPerc = $calculation.element('tbxImporterRewardPerc'); - const tbxImporterRewardRub = $calculation.element('tbxImporterRewardRub'); + async (values) => { + const { importerRewardPerc, importerRewardRub } = await getImporterReward(values); - if (leaseObjectUsed) { - tbxImporterRewardPerc.resetValue(); - tbxImporterRewardRub.resetValue(); - - return; - } - - let evo_importer_reward_perc = 0; - let evo_importer_reward_rub = 0; - - if (modelId) { - const { - data: { evo_model }, - } = await apolloClient.query({ - query: CRMTypes.GetModelDocument, - variables: { modelId }, - }); - - if (evo_model?.evo_importer_reward_perc) { - evo_importer_reward_perc = evo_model?.evo_importer_reward_perc; - } - - if (evo_model?.evo_importer_reward_rub) { - evo_importer_reward_rub = evo_model?.evo_importer_reward_rub; - } - } - - if (brandId && evo_importer_reward_perc === 0 && evo_importer_reward_rub === 0) { - const { - data: { evo_brand }, - } = await apolloClient.query({ - query: CRMTypes.GetBrandDocument, - variables: { brandId }, - }); - - if (evo_brand?.evo_importer_reward_perc) { - evo_importer_reward_perc = evo_brand?.evo_importer_reward_perc; - } - - if (evo_brand?.evo_importer_reward_rub) { - evo_importer_reward_rub = evo_brand?.evo_importer_reward_rub; - } - } - - tbxImporterRewardPerc.setValue(evo_importer_reward_perc); - tbxImporterRewardRub.setValue(evo_importer_reward_rub); + $calculation.element('tbxImporterRewardPerc').setValue(importerRewardPerc); + $calculation.element('tbxImporterRewardRub').setValue(importerRewardRub); } );