2022-11-02 21:36:48 +03:00

95 lines
2.7 KiB
TypeScript

/* 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<object>) {
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.element('selectSupplierCurrency').getValue();
const leaseObjectPrice = $calculation.element('tbxLeaseObjectPrice').getValue();
const supplierDiscountRub = $calculation.element('tbxSupplierDiscountRub').getValue();
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,
}
);
}