auth | rewrite preparedData

This commit is contained in:
Владислав Чикалкин 2020-11-12 18:01:16 +03:00
parent ebd7c2ef3c
commit 5a2c629e1b
19 changed files with 1227 additions and 1003 deletions

View File

@ -22,6 +22,7 @@
"cross-fetch": "^3.0.6",
"express": "^4.17.1",
"express-http-proxy": "^1.6.2",
"express-ntlm": "^2.5.2",
"graphql": "^15.4.0",
"helmet": "^4.1.0",
"http-errors": "^1.8.0",
@ -69,7 +70,7 @@
"agentkeepalive": "^4.1.3",
"dotenv": "^8.2.0",
"faker": "^5.1.0",
"http-proxy-middleware": "^1.0.5",
"http-proxy-middleware": "^1.0.6",
"rimraf": "^3.0.2",
"webpack-cli": "^4.0.0",
"webpack-node-externals": "^2.5.1"

View File

@ -1418,8 +1418,8 @@ const sections: ISections[] = [
title: 'Телематика',
Component: Select,
props: {
name: 'selectTelematics',
valueName: 'telematics',
name: 'selectTelematic',
valueName: 'telematic',
},
},
{

View File

@ -11,71 +11,130 @@ import Modal from 'client/Elements/Modal';
import Results from './Results';
import Sections from './Sections';
import { gql } from '@apollo/client';
import { currentDate } from 'client/common/constants';
import { getUser } from 'client/tools/user';
const Calculation = () => {
const [status, setStatus] = useState(LoadingStatus.loading);
const { calculationStore } = useStores();
//TODO: move to external file
useEffect(() => {
Promise.all([
CalculationService.getEntities({
queries: initialOptions,
}),
CalculationService.crmgqlquery({
query: gql`
query($statecode: Int) {
evo_impairment_group: evo_impairment_groups(statecode: $statecode) {
evo_impairment_groupid
evo_name
getUser().then(({ UserName, DomainName }) => {
Promise.all([
CalculationService.getEntities({
queries: initialOptions,
}),
CalculationService.crmgqlquery({
query: gql`
query($statecode: Int, $currentDate: DateTime, $username: String) {
evo_impairment_group: evo_impairment_groups(
statecode: $statecode
) {
evo_impairment_groupid
evo_name
}
evo_currencychange: evo_currencychanges(
statecode: $statecode
evo_coursedate_param: { eq: $currentDate }
) {
evo_currencychange
evo_ref_transactioncurrency
}
evo_coefficient: evo_coefficients(
statecode: $statecode
evo_datefrom_param: { lte: $currentDate }
evo_dateto_param: { gte: $currentDate }
) {
evo_correction_coefficient
evo_graph_type
evo_season_type
evo_job_titleid
evo_sot_coefficient_typeid
evo_sot_coefficient
evo_corfficient_type
evo_min_period
evo_max_period
evo_graph_type
evo_season_type
evo_correction_coefficient
evo_client_riskid
evo_client_typeid
evo_risk_delta
evo_leasingobject_types {
evo_name
evo_id
evo_leasingobject_typeid
}
}
evo_sot_coefficient_type: evo_sot_coefficient_types(
statecode: $statecode
) {
evo_id
evo_name
evo_sot_coefficient_typeid
}
systemuser(domainname: $username) {
evo_job_titleid
businessunitid
firstname
lastname
fullname
}
evo_job_title: evo_job_titles(statecode: $statecode) {
evo_id
evo_name
evo_job_titleid
}
}
evo_currencychange: evo_currencychanges(statecode: $statecode) {
evo_currencychange
evo_ref_transactioncurrency
}
}
`,
variables: { statecode: 0 },
}),
CalculationService.getEntities({
queries: [
{
alias: 'insuranceCompany',
entityName: 'account',
where: { evo_account_type: 100000002, statecode: 0 },
fields: ['accountid', 'name', 'evo_type_ins_policy'],
many: true,
`,
variables: {
statecode: 0,
currentDate,
username: `${DomainName}\\${UserName}`,
},
],
}),
])
.then(
([
{ entities: initialOptions },
{ entities: staticEntities },
{ entities: insuranceCompanies },
]) => {
calculationStore.applyOptions(initialOptions);
calculationStore.applyStaticData(staticEntities);
calculationStore.setTableColumns('tableInsurance')({
options: { ...insuranceCompanies },
});
//TODO: move to external file
var supplierCurrency = calculationStore.options.selectSupplierCurrency.find(
x => x.isocurrencycode === 'RUB',
);
calculationStore.setValue(
'supplierCurrency',
supplierCurrency.transactioncurrencyid,
);
}),
CalculationService.getEntities({
queries: [
{
alias: 'insuranceCompany',
entityName: 'account',
where: { evo_account_type: 100000002, statecode: 0 },
fields: ['accountid', 'name', 'evo_type_ins_policy'],
many: true,
},
],
}),
])
.then(
([
{ entities: initialOptions },
{ entities: staticEntities },
{ entities: insuranceCompanies },
]) => {
calculationStore.applyOptions(initialOptions);
calculationStore.applyStaticData(staticEntities);
calculationStore.setTableColumns('tableInsurance')({
options: { ...insuranceCompanies },
});
setStatus(LoadingStatus.ready);
},
)
.catch(err => {
setStatus(LoadingStatus.error);
throw err;
});
//TODO: move to external file
var supplierCurrency = calculationStore.options.selectSupplierCurrency.find(
x => x.isocurrencycode === 'RUB',
);
calculationStore.setValue(
'supplierCurrency',
supplierCurrency.transactioncurrencyid,
);
setStatus(LoadingStatus.ready);
},
)
.catch(err => {
setStatus(LoadingStatus.error);
throw err;
});
});
//TODO: makes 2 requests, need 1
}, []);
if (status === LoadingStatus.loading) {

View File

@ -1,4 +1,5 @@
import { ApolloClient, gql, HttpLink, InMemoryCache } from '@apollo/client';
import axios from 'axios';
import { API_HOSTNAME } from 'client/common/constants';
import { CRM_GRAPHQL_PROXY_URL, CRM_GRAPHQL_URL } from 'core/constants/urls';
import { convertEntityToOption } from 'core/tools/entities';
@ -7,15 +8,19 @@ import {
IGetEntitiesRequest,
IRequestToCRMGQL,
} from 'core/types/Calculation/Requests';
import { IGetEntitiesResponse } from 'core/types/Calculation/Responses';
import {
IGetEntitiesResponse,
IGetUserResponse,
} from 'core/types/Calculation/Responses';
import { IBaseOption } from 'core/types/Calculation/Store/options';
import { TCRMEntity } from 'core/types/Entities/crmEntities';
import { TEntities, CRMEntityNames } from 'core/types/Entities/crmEntityNames';
import { TEntities } from 'core/types/Entities/crmEntityNames';
import { isPlural, singular } from 'pluralize';
const client = new ApolloClient({
uri: CRM_GRAPHQL_URL,
cache: new InMemoryCache(),
link: new HttpLink({
uri:
process.env.NODE_ENV !== 'development'
@ -25,8 +30,8 @@ const client = new ApolloClient({
'/proxy',
CRM_GRAPHQL_PROXY_URL,
),
fetch,
}),
defaultOptions: {
query: {
fetchPolicy: 'no-cache',
@ -36,6 +41,14 @@ const client = new ApolloClient({
});
class CalculationService {
static getUser = (): Promise<IGetUserResponse> =>
new Promise((resolve, reject) => {
axios.get('/api/users/getUser').then(res => {
console.log('User', res.data);
resolve(res.data);
});
});
static crmgqlquery = ({
query,
toOptions,
@ -60,8 +73,9 @@ class CalculationService {
resEntities[targetName];
if (toOptions)
//@ts-ignore
if (toOptions.includes(targetName)) {
//@ts-ignore
//@ts-ignore
if (Array.isArray(targetEnt)) {
let optionatedEntities: (TCRMEntity & IBaseOption)[] = [];
for (let entity of targetEnt) {
@ -76,9 +90,7 @@ class CalculationService {
//@ts-ignore
resEntities[
//@ts-ignore
isPlural(targetName)
? singular(targetName)
: targetName
isPlural(targetName) ? singular(targetName) : targetName
] = optionatedEntities;
} else {
const entityOption = convertEntityToOption(
@ -116,6 +128,7 @@ class CalculationService {
});
const convertedQuery = convertJSONToGQLQuery(queries);
console.log('CalculationService -> convertedQuery', convertedQuery);
await client
.query({
query: gql`

File diff suppressed because it is too large Load Diff

22
src/client/tools/user.ts Normal file
View File

@ -0,0 +1,22 @@
import CalculationService from 'client/services/CalculationService';
import { User } from 'core/types/user';
export const getUser = async (): Promise<User> => {
if (process.env.NODE_ENV === 'development') {
const savedUser = localStorage.getItem('user');
if (savedUser) {
const user = JSON.parse(savedUser);
if (user.UserName) {
return user;
}
}
var username = prompt('Enter username');
const user: User = { UserName: username || '', DomainName: 'EVOLEASING' };
localStorage.setItem('user', JSON.stringify(user));
return user;
}
const { user } = await CalculationService.getUser();
localStorage.setItem('user', JSON.stringify(user));
return user;
};

View File

@ -204,6 +204,225 @@ const initialOptions: TEntityQuery[] = [
many: true,
toOption: true,
},
{
alias: 'selectTracker',
entityName: 'evo_addproduct_type',
where: {
statecode: 0,
evo_product_type: 100000003,
},
whereCmp: {
evo_datefrom_param: {
lte: currentDate,
},
evo_dateto_param: {
gte: currentDate,
},
},
fields: [
'evo_id',
'evo_addproduct_typeid',
'evo_name',
'evo_min_period',
'evo_max_period',
'evo_controls_program',
'evo_accountid',
'evo_graph_price_withoutnds',
'evo_cost_service_provider_withoutnds',
'evo_retro_bonus_withoutnds',
'evo_prime_cost',
'evo_graph_price',
],
relatedEntities: [
{
entityName: 'evo_planpayment',
fields: [
'evo_name',
'evo_cost_equipment_withoutnds',
'evo_cost_price_telematics_withoutnds',
'evo_cost_telematics_withoutnds',
],
many: true,
},
],
many: true,
toOption: true,
},
{
alias: 'selectTelematic',
entityName: 'evo_addproduct_type',
where: {
statecode: 0,
evo_product_type: 100000004,
},
whereCmp: {
evo_datefrom_param: {
lte: currentDate,
},
evo_dateto_param: {
gte: currentDate,
},
},
fields: [
'evo_id',
'evo_addproduct_typeid',
'evo_name',
'evo_min_period',
'evo_max_period',
'evo_controls_program',
'evo_accountid',
'evo_graph_price_withoutnds',
'evo_cost_service_provider_withoutnds',
'evo_retro_bonus_withoutnds',
'evo_prime_cost',
'evo_graph_price',
],
relatedEntities: [
{
entityName: 'evo_planpayment',
fields: [
'evo_name',
'evo_cost_equipment_withoutnds',
'evo_cost_price_telematics_withoutnds',
'evo_cost_telematics_withoutnds',
],
many: true,
},
],
many: true,
toOption: true,
},
{
alias: 'selectTechnicalCard',
entityName: 'evo_addproduct_type',
where: {
statecode: 0,
evo_product_type: 100000000,
},
whereCmp: {
evo_datefrom_param: {
lte: currentDate,
},
evo_dateto_param: {
gte: currentDate,
},
},
fields: [
'evo_id',
'evo_addproduct_typeid',
'evo_name',
'evo_min_period',
'evo_max_period',
'evo_controls_program',
'evo_accountid',
'evo_graph_price_withoutnds',
'evo_cost_service_provider_withoutnds',
'evo_retro_bonus_withoutnds',
'evo_prime_cost',
'evo_graph_price',
],
many: true,
toOption: true,
},
{
alias: 'selectTarif',
entityName: 'evo_tarif',
where: {
statecode: 0,
},
whereCmp: {
evo_datefrom_param: {
lte: currentDate,
},
evo_dateto_param: {
gte: currentDate,
},
},
fields: [
'evo_id',
'evo_name',
'evo_tarifid',
'evo_baseproductid',
'evo_irr',
'evo_max_irr',
'evo_min_profit',
'evo_min_irr',
'evo_irr_plan',
'evo_ins_type',
],
relatedEntities: [
{
entityName: 'evo_client_risk',
fields: ['evo_client_riskid', 'evo_name'],
many: true,
},
{
entityName: 'evo_client_type',
fields: ['evo_client_typeid', 'evo_name'],
many: true,
},
{
entityName: 'evo_leasingobject_type',
fields: ['evo_leasingobject_typeid', 'evo_name', 'evo_id'],
many: true,
},
],
many: true,
toOption: true,
},
{
alias: 'selectRate',
entityName: 'evo_rate',
where: {
statecode: 0,
},
//TODO:
// whereCmp: {
// evo_datefrom_param: {
// lte: currentDate,
// },
// evo_dateto_param: {
// gte: currentDate,
// },
// },
fields: [
'evo_id',
'evo_rateid',
'evo_name',
'evo_base_rate',
'evo_coeff_12_23',
'evo_coeff_24_35',
'evo_coeff_36_47',
'evo_coeff_7_11',
'evo_coeff_48_60',
],
relatedEntities: [
{
entityName: 'evo_tarif',
fields: ['evo_tarifid', 'evo_name'],
many: true,
},
],
many: true,
toOption: true,
},
{
alias: 'selectLeaseObjectType',
entityName: 'evo_leasingobject_type',
where: { statecode: 0 },
fields: [
'evo_name',
'evo_id',
'evo_leasingobject_typeid',
'evo_depreciation_rate1',
'evo_depreciation_rate2',
'evo_expluatation_period1',
'evo_expluatation_period2',
'evo_type_code',
],
many: true,
toOption: true,
},
];
export default initialOptions;

View File

@ -101,6 +101,14 @@ const propsMap: TEntities<{
name: 'evo_name',
value: 'evo_planpaymentid',
},
evo_tarif: {
name: 'evo_name',
value: 'evo_tarifid',
},
evo_rate: {
name: 'evo_name',
value: 'evo_rateid',
},
};
export default propsMap;

View File

@ -1,105 +1,105 @@
import { CRMEntityNames } from '../Entities/crmEntityNames';
export interface PreparedValues {
calcDate: Date;
calcType: number;
irrExpected: number;
npvniExpected: number;
totalExpected: number;
leasing0K: number;
loanRate: number;
balanceHolder: number;
dogDate: Date;
calcDate?: Date;
calcType?: number;
irrExpected?: number;
npvniExpected?: number;
totalExpected?: number;
leasing0K?: number;
loanRate?: number;
balanceHolder?: number;
dogDate?: Date;
paymentDateNew?: Date;
deliveryTime: number;
cityc: string;
nmper: number;
firstPayment: number;
firstPaymentSum: number;
deliveryTime?: number;
cityc?: string;
nmper?: number;
firstPayment?: number;
firstPaymentSum?: number;
firstPaymentAbs?: number;
firstPaymentNdsAbs?: number;
firstPaymentWithNdsAbs?: number;
lastPayment: number;
lastPaymentSum: number;
scheduleOfPayments: number;
comissionRub: number;
plPrice: number;
discount: number;
acceptSum: number;
plTypeId: string;
brandId: string;
modelId: string;
configurationId: string;
plYear: number;
carCapacity: number;
motorVolume: number;
plEngineType: number;
carCarrying: number;
carSeats: number;
bonus: number;
bonusFix: number;
marketRate: number;
districtRate: number;
salaryRate: number;
bonusRatPr: number;
bonusNsPr: number;
bonusNsibPr: number;
rats: number;
baseRatCost: number;
retroBonus: number;
registration: number;
baseRegistration: number;
transTax: number;
transIncludeGr: boolean;
trackerCost: number;
insuranceKasko: number;
nmperInsurance: number;
insuranceOsago: number;
insurance: number;
insuranceKaskoNmper: number;
insuranceContract: number;
insuranceBonus: number;
nsibBruttoPr: number;
nsibNettoPr: number;
nsibBase: number;
repayment: number;
npvniDelta: number;
transportTaxGrYear: number;
transportTaxGr: number;
nsibBrutto: number;
nsibNetto: number;
nmperDeprecation: number;
deprecationTime: number;
ratBonus: number;
nsBonus: number;
nsibBonus: number;
niAtInception: number;
agentsSum: number;
doubleAgentsSum: number;
deliverySum: number;
brokerSum: number;
brokerOfDeliverySum: number;
financialDeptOfDeliverySum: number;
importerSum: number;
calculationCost: number;
priceUpTotal: number;
acquisitionExpenses: number;
npvBase: number;
tLMCost: number;
iRR_MSFO_Plan: number;
extraBonus: number;
directorBonus: number;
dogCredit: number;
dogCreditLeasing: number;
lastPayment?: number;
lastPaymentSum?: number;
scheduleOfPayments?: number;
comissionRub?: number;
plPrice?: number;
discount?: number;
acceptSum?: number;
plTypeId?: string;
brandId?: string;
modelId?: string;
configurationId?: string;
plYear?: number;
carCapacity?: number;
motorVolume?: number;
plEngineType?: number;
carCarrying?: number;
carSeats?: number;
bonus?: number;
bonusFix?: number;
marketRate?: number;
districtRate?: number;
salaryRate?: number;
bonusRatPr?: number;
bonusNsPr?: number;
bonusNsibPr?: number;
rats?: number;
baseRatCost?: number;
retroBonus?: number;
registration?: number;
baseRegistration?: number;
transTax?: number;
transIncludeGr?: boolean;
trackerCost?: number;
insuranceKasko?: number;
nmperInsurance?: number;
insuranceOsago?: number;
insurance?: number;
insuranceKaskoNmper?: number;
insuranceContract?: number;
insuranceBonus?: number;
nsibBruttoPr?: number;
nsibNettoPr?: number;
nsibBase?: number;
repayment?: number;
npvniDelta?: number;
transportTaxGrYear?: number;
transportTaxGr?: number;
nsibBrutto?: number;
nsibNetto?: number;
nmperDeprecation?: number;
deprecationTime?: number;
ratBonus?: number;
nsBonus?: number;
nsibBonus?: number;
niAtInception?: number;
agentsSum?: number;
doubleAgentsSum?: number;
deliverySum?: number;
brokerSum?: number;
brokerOfDeliverySum?: number;
financialDeptOfDeliverySum?: number;
importerSum?: number;
calculationCost?: number;
priceUpTotal?: number;
acquisitionExpenses?: number;
npvBase?: number;
tLMCost?: number;
iRR_MSFO_Plan?: number;
extraBonus?: number;
directorBonus?: number;
dogCredit?: number;
dogCreditLeasing?: number;
}
export interface PaymentRow {
numberPayment: number;
percentPayment: number;
sumPayment: number;
gpsBasePayment: number;
gpsCostPayment: number;
tlmBasePayment: number;
tlmCostPayment: number;
numberPayment?: number;
percentPayment?: number;
sumPayment?: number;
gpsBasePayment?: number;
gpsCostPayment?: number;
tlmBasePayment?: number;
tlmCostPayment?: number;
}
export type PreparedPayments = PaymentRow[];

View File

@ -1,7 +1,6 @@
import { ICalculationStore } from 'core/types/Calculation/Store';
import { CRMEntityNames } from 'core/types/Entities/crmEntityNames';
import { TEntityQuery } from '../Entities/query';
import { ValuesTables } from './Store/tables';
import { TValue, TValues } from './Store/values';
export interface IGetEntitiesRequest {
queries: TEntityQuery[];
@ -14,7 +13,6 @@ export interface IRequestToCRMGQL {
}
export interface IGetCalculationRequest {
values: TValues<TValue>;
tables: ValuesTables;
calculationStore: ICalculationStore;
username: string;
}

View File

@ -1,5 +1,6 @@
import { TCRMEntity } from '../Entities/crmEntities';
import { TEntities } from '../Entities/crmEntityNames';
import { User } from 'core/types/user';
export interface IGetEntitiesResponse {
entities: TEntities<TCRMEntity | TCRMEntity[]>;
@ -9,3 +10,7 @@ export interface IGetCalculationResponse {
columns: any;
postValues: any;
}
export interface IGetUserResponse {
user: User;
}

View File

@ -132,7 +132,7 @@ export type ElementsNames =
| 'selectRegistration'
| 'selectInsNSIB'
| 'selectTechnicalCard'
| 'selectTelematics'
| 'selectTelematic'
| 'selectTracker';
export enum ElementType {

View File

@ -41,7 +41,3 @@ export interface ITable {
export type StoreTables = {
[table in TableNames]: ITable;
};
export type ValuesTables = {
[table in TableNames]: TableProps<any>[];
};

View File

@ -105,7 +105,7 @@ export type ValuesNames =
| 'quoteName'
| 'quoteContactGender'
| 'quoteRedemptionGraph'
| 'Tarif'
| 'tarif'
| 'creditRate'
| 'rate'
| 'userSession'
@ -118,7 +118,7 @@ export type ValuesNames =
| 'registration'
| 'insNSIB'
| 'technicalCard'
| 'telematics'
| 'telematic'
| 'tracker';
export type ComputedValuesNames =

View File

@ -245,6 +245,7 @@ export interface IEvoAddproductType {
evo_cost_telematics?: number;
evo_cost_price_telematics?: number;
evo_cost_equipment?: number;
evo_controls_program?: number[];
}
export interface IEvoTarif {
@ -308,6 +309,9 @@ export interface ISystemUser {
systemuserid?: string;
evo_job_titleid?: string;
statecode?: number;
firstname?: string;
lastname?: string;
fullname?: string;
}
export interface IEvoSotCoefficientType {
@ -317,6 +321,12 @@ export interface IEvoSotCoefficientType {
evo_name?: string;
}
export interface IEvoJobTitle {
evo_id?: string;
evo_name?: string;
evo_job_titleid?: string;
}
type BaseEntity = {
__typename?: CRMEntityNames;
};
@ -351,4 +361,5 @@ export type TCRMEntity = BaseEntity &
IEvoRate &
IEvoPlanPayment &
ISystemUser &
IEvoJobTitle &
IEvoSotCoefficientType;

6
src/core/types/user.ts Normal file
View File

@ -0,0 +1,6 @@
export type User = {
DomainName?: string;
UserName?: string;
Workstation?: string;
Authenticated?: boolean;
};

View File

@ -1,10 +1,10 @@
import { Request, Response } from "express";
import { Request, Response } from 'express';
class UsersController {
static getUser = async (req: Request, res: Response): Promise<void> => {
res.send({
//@ts-ignore
user: req.connection.user,
user: req.ntlm,
});
};
}

View File

@ -3,13 +3,13 @@ import compression from 'compression';
import cors from 'cors';
// import cookieParser from "cookie-parser";
import express from 'express';
// import nodeSSPI from "express-node-sspi";
import helmet from 'helmet';
import morgan from 'morgan';
import path from 'path';
import 'reflect-metadata';
import { API_PORT } from '../core/constants/urls';
import routes from './routes';
import ntlm from 'express-ntlm';
const isDevelopmentMode = process.env.NODE_ENV === 'development';
@ -20,16 +20,15 @@ const buildDir = path.join(
const app = express();
// app.enable("trust proxy");
// app.set("trust proxy", "loopback");
app.use(cors({ origin: isDevelopmentMode && '*', credentials: false }));
/** AUTHENTICATION */
// app.use(
// nodeSSPI({
// retrieveGroups: true,
// })
// );
if (!isDevelopmentMode)
app.use(
ntlm({
domain: 'EVOLEASING',
domaincontroller: 'ldap://evoleasing.ru',
}),
);
/** AUTHENTICATION */
/**EXTENTIONS */
@ -41,8 +40,6 @@ app.use(
);
app.use(helmet({ contentSecurityPolicy: { reportOnly: true } }));
app.use(cors({ origin: isDevelopmentMode && '*', credentials: true }));
// app.use(cookieParser());
app.use(compression());
app.use(morgan(isDevelopmentMode ? 'dev' : 'tiny'));

View File

@ -3,6 +3,6 @@ import { Router } from "express";
const router = Router();
router.get("/", UsersController.getUser);
router.get("/getUser", UsersController.getUser);
export default router;