/* eslint-disable @typescript-eslint/naming-convention */ import type { ApolloClient } from '@apollo/client'; import { gql } from '@apollo/client'; import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; import type * as CRMTypes from 'graphql/crm.types'; import { autorun } from 'mobx'; import type RootStore from 'stores/root'; dayjs.extend(utc); export default function computedReactions(store: RootStore, apolloClient: ApolloClient) { const QUERY_GET_EVO_CURRENCY_CHANGES = gql` query GetCurrencyChanges($currentDate: DateTime) { evo_currencychanges(statecode: 0, evo_coursedate_param: { eq: $currentDate }) { evo_currencychange evo_ref_transactioncurrency } } `; const QUERY_GET_CURRENCY_ISOCODE = gql` query GetCurrencyISOCode($id: Uuid!) { transactioncurrency(transactioncurrencyid: $id) { isocurrencycode } } `; const { $calculation } = store; autorun( async () => { const supplierCurrencyId = $calculation.getElementValue('selectSupplierCurrency'); const leaseObjectPrice = $calculation.getElementValue('tbxLeaseObjectPrice'); const supplierDiscountRub = $calculation.getElementValue('tbxSupplierDiscountRub'); if (!supplierCurrencyId) { $calculation.$values.setValue('plPriceRub', leaseObjectPrice); $calculation.$values.setValue('discountRub', supplierDiscountRub); return; } const { data: { transactioncurrency }, } = await apolloClient.query< CRMTypes.GetCurrencyIsoCodeQuery, CRMTypes.GetCurrencyIsoCodeQueryVariables >({ query: QUERY_GET_CURRENCY_ISOCODE, variables: { id: supplierCurrencyId, }, }); if (transactioncurrency?.isocurrencycode === 'RUB') { $calculation.$values.setValue('plPriceRub', leaseObjectPrice); $calculation.$values.setValue('discountRub', supplierDiscountRub); return; } const { data: { evo_currencychanges }, } = await apolloClient.query< CRMTypes.GetCurrencyChangesQuery, CRMTypes.GetCurrencyChangesQueryVariables >({ query: QUERY_GET_EVO_CURRENCY_CHANGES, variables: { currentDate: dayjs().utc().format('YYYY-MM-DD'), }, }); const evo_currencychange = evo_currencychanges?.find( (x) => x?.evo_ref_transactioncurrency === supplierCurrencyId ); $calculation.$values.setValue( 'plPriceRub', leaseObjectPrice * (evo_currencychange?.evo_currencychange || 0) ); $calculation.$values.setValue( 'discountRub', supplierDiscountRub * (evo_currencychange?.evo_currencychange || 0) ); }, { delay: 100, } ); }