179 lines
4.3 KiB
JavaScript
179 lines
4.3 KiB
JavaScript
/* eslint-disable canonical/sort-keys */
|
||
import * as CRMTypes from '@/graphql/crm.types';
|
||
import { useStore } from '@/stores/hooks';
|
||
import { useApolloClient } from '@apollo/client';
|
||
import dayjs from 'dayjs';
|
||
import utc from 'dayjs/plugin/utc';
|
||
import { useEffect } from 'react';
|
||
import { normalizeOptions } from 'tools';
|
||
|
||
dayjs.extend(utc);
|
||
|
||
const currentDate = dayjs().utc(false).toISOString();
|
||
|
||
/**
|
||
*
|
||
* @param {import('@apollo/client').ApolloClient} apolloClient
|
||
* @param {*} onCompleted
|
||
*/
|
||
function getMainData({ query }, onCompleted) {
|
||
query({
|
||
query: CRMTypes.GetLeaseObjectTypesDocument,
|
||
variables: {
|
||
currentDate,
|
||
},
|
||
}).then(({ data }) => {
|
||
onCompleted({
|
||
selectLeaseObjectType: data?.evo_leasingobject_types,
|
||
});
|
||
});
|
||
|
||
query({
|
||
query: CRMTypes.GetGpsBrandsDocument,
|
||
}).then(({ data }) => {
|
||
onCompleted({
|
||
selectGPSBrand: data?.evo_gps_brands,
|
||
});
|
||
});
|
||
|
||
query({
|
||
query: CRMTypes.GetProductsDocument,
|
||
variables: {
|
||
currentDate,
|
||
},
|
||
}).then(({ data }) => {
|
||
onCompleted({
|
||
selectProduct: data?.evo_baseproducts,
|
||
});
|
||
});
|
||
|
||
query({
|
||
query: CRMTypes.GetSubsidiesDocument,
|
||
variables: {
|
||
currentDate,
|
||
},
|
||
}).then(({ data }) => {
|
||
const selectSubsidy = data?.evo_subsidies?.filter(
|
||
(x) => x?.evo_subsidy_type && [100_000_000, 100_000_001].includes(x?.evo_subsidy_type)
|
||
);
|
||
|
||
const selectImportProgram = data?.evo_subsidies?.filter(
|
||
(x) => x?.evo_subsidy_type && [100_000_002].includes(x?.evo_subsidy_type)
|
||
);
|
||
|
||
onCompleted({
|
||
selectSubsidy,
|
||
selectImportProgram,
|
||
});
|
||
});
|
||
|
||
query({
|
||
query: CRMTypes.GetRegionsDocument,
|
||
}).then(({ data }) => {
|
||
const selectRegionRegistration = data?.evo_regions;
|
||
const selectObjectRegionRegistration = data?.evo_regions;
|
||
const selectLegalClientRegion = data?.evo_regions;
|
||
|
||
onCompleted({
|
||
selectRegionRegistration,
|
||
selectObjectRegionRegistration,
|
||
selectLegalClientRegion,
|
||
});
|
||
});
|
||
|
||
query({
|
||
query: CRMTypes.GetBrandsDocument,
|
||
}).then(({ data }) => {
|
||
onCompleted({
|
||
selectBrand: data?.evo_brands,
|
||
});
|
||
});
|
||
|
||
query({
|
||
query: CRMTypes.GetDealersDocument,
|
||
}).then(({ data }) => {
|
||
onCompleted({
|
||
selectDealer: data?.dealers,
|
||
});
|
||
});
|
||
|
||
query({
|
||
query: CRMTypes.GetAddproductTypesDocument,
|
||
variables: {
|
||
currentDate,
|
||
},
|
||
}).then(({ data }) => {
|
||
// const selectRegistration = data.evo_addproduct_types
|
||
// ?.filter((x) => x?.evo_product_type === 100_000_001)
|
||
// .map((x) => ({
|
||
// ...x,
|
||
// label: `${x?.label} (${x?.evo_graph_price} руб.)`,
|
||
// }));
|
||
|
||
const selectTechnicalCard = data.evo_addproduct_types
|
||
?.filter((x) => x?.evo_product_type === 100_000_000)
|
||
.map((x) => ({
|
||
...x,
|
||
label: `${x?.label} (${x?.evo_graph_price} руб.)`,
|
||
}));
|
||
|
||
const selectTelematic = data.evo_addproduct_types
|
||
?.filter((x) => x?.evo_product_type === 100_000_004)
|
||
.map((x) => ({
|
||
...x,
|
||
label: `${x?.label} (${x?.evo_graph_price} руб.)`,
|
||
}));
|
||
|
||
const selectTracker = data.evo_addproduct_types
|
||
?.filter((x) => x?.evo_product_type === 100_000_003)
|
||
.map((x) => ({
|
||
...x,
|
||
label: `${x?.label} (${x?.evo_graph_price} руб.)`,
|
||
}));
|
||
|
||
const selectInsNSIB = data.evo_addproduct_types?.filter(
|
||
(x) => x?.evo_product_type === 100_000_002
|
||
);
|
||
|
||
const selectLeasingWithoutKasko = data.evo_addproduct_types?.filter(
|
||
(x) => x?.evo_product_type === 100_000_007
|
||
);
|
||
|
||
onCompleted({
|
||
// selectRegistration,
|
||
selectTechnicalCard,
|
||
selectTelematic,
|
||
selectTracker,
|
||
selectInsNSIB,
|
||
selectLeasingWithoutKasko,
|
||
});
|
||
});
|
||
|
||
query({
|
||
query: CRMTypes.GetTarifsDocument,
|
||
variables: {
|
||
currentDate,
|
||
},
|
||
}).then(({ data }) => {
|
||
onCompleted({
|
||
selectTarif: data?.evo_tarifs,
|
||
});
|
||
});
|
||
}
|
||
|
||
export function useMainData() {
|
||
const { $calculation } = useStore();
|
||
const apolloClient = useApolloClient();
|
||
|
||
function handleOnCompleted(options) {
|
||
Object.keys(options).forEach((elementName) => {
|
||
const elementOptions = options[elementName];
|
||
$calculation.element(elementName).setOptions(normalizeOptions(elementOptions));
|
||
});
|
||
}
|
||
|
||
useEffect(() => {
|
||
getMainData(apolloClient, handleOnCompleted);
|
||
}, []);
|
||
}
|