diff --git a/client/src/components/dms-cdk-makes/dms-cdk-makes.component.jsx b/client/src/components/dms-cdk-makes/dms-cdk-makes.component.jsx index c972178b1..b0ad42ee9 100644 --- a/client/src/components/dms-cdk-makes/dms-cdk-makes.component.jsx +++ b/client/src/components/dms-cdk-makes/dms-cdk-makes.component.jsx @@ -82,13 +82,6 @@ export function DmsCdkMakes({ bodyshop, form, socket }) { }} rowSelection={{ onSelect: (record, selected, ...props) => { - console.log( - "🚀 ~ file: dms-cdk-makes.component.jsx ~ line 85 ~ record, selected, ...props", - record, - selected, - ...props - ); - setSelectedModel(record); }, @@ -100,15 +93,9 @@ export function DmsCdkMakes({ bodyshop, form, socket }) { ); diff --git a/client/src/components/dms-cdk-makes/dms-cdk-makes.refetch.component.jsx b/client/src/components/dms-cdk-makes/dms-cdk-makes.refetch.component.jsx new file mode 100644 index 000000000..a154e819d --- /dev/null +++ b/client/src/components/dms-cdk-makes/dms-cdk-makes.refetch.component.jsx @@ -0,0 +1,32 @@ +import { Button } from "antd"; +import axios from "axios"; +import React, { useState } from "react"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { selectBodyshop } from "../../redux/user/user.selectors"; +const mapStateToProps = createStructuredSelector({ + //currentUser: selectCurrentUser + bodyshop: selectBodyshop, +}); +const mapDispatchToProps = (dispatch) => ({ + //setUserLanguage: language => dispatch(setUserLanguage(language)) +}); +export default connect(mapStateToProps, mapDispatchToProps)(DmsCdkMakesRefetch); + +export function DmsCdkMakesRefetch({ bodyshop, form, socket }) { + const [loading, setLoading] = useState(false); + const handleRefetch = async () => { + setLoading(true); + const response = await axios.post("/cdk/getvehicles", { + cdk_dealerid: bodyshop.cdk_dealerid, + bodyshopid: bodyshop.id, + }); + console.log(response); + setLoading(false); + }; + return ( + + ); +} diff --git a/client/src/components/dms-post-form/dms-post-form.component.jsx b/client/src/components/dms-post-form/dms-post-form.component.jsx index 7ce33dd83..df492cde0 100644 --- a/client/src/components/dms-post-form/dms-post-form.component.jsx +++ b/client/src/components/dms-post-form/dms-post-form.component.jsx @@ -18,6 +18,7 @@ import CurrencyInput from "../form-items-formatted/currency-form-item.component" import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import Dinero from "dinero.js"; import { determineDmsType } from "../../pages/dms/dms.container"; +import DmsCdkMakesRefetch from "../dms-cdk-makes/dms-cdk-makes.refetch.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); @@ -113,8 +114,8 @@ export function DmsPostForm({ bodyshop, socket, job }) { + diff --git a/hasura/migrations/1629520416914_create_table_public_dms_vehicles/down.yaml b/hasura/migrations/1629520416914_create_table_public_dms_vehicles/down.yaml new file mode 100644 index 000000000..e8a69a7f3 --- /dev/null +++ b/hasura/migrations/1629520416914_create_table_public_dms_vehicles/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP TABLE "public"."dms_vehicles"; + type: run_sql diff --git a/hasura/migrations/1629520416914_create_table_public_dms_vehicles/up.yaml b/hasura/migrations/1629520416914_create_table_public_dms_vehicles/up.yaml new file mode 100644 index 000000000..eadd2690a --- /dev/null +++ b/hasura/migrations/1629520416914_create_table_public_dms_vehicles/up.yaml @@ -0,0 +1,18 @@ +- args: + cascade: false + read_only: false + sql: CREATE EXTENSION IF NOT EXISTS pgcrypto; + type: run_sql +- args: + cascade: false + read_only: false + sql: CREATE TABLE "public"."dms_vehicles"("id" uuid NOT NULL DEFAULT gen_random_uuid(), + "created_at" timestamptz NOT NULL DEFAULT now(), "makecode" text NOT NULL, "modelcode" + text NOT NULL, "make" text NOT NULL, "model" text NOT NULL, "bodyshopid" uuid + NOT NULL, PRIMARY KEY ("id") , FOREIGN KEY ("bodyshopid") REFERENCES "public"."bodyshops"("id") + ON UPDATE cascade ON DELETE cascade); + type: run_sql +- args: + name: dms_vehicles + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1629520454038_track_all_relationships/down.yaml b/hasura/migrations/1629520454038_track_all_relationships/down.yaml new file mode 100644 index 000000000..d745605a5 --- /dev/null +++ b/hasura/migrations/1629520454038_track_all_relationships/down.yaml @@ -0,0 +1,12 @@ +- args: + relationship: dms_vehicles + table: + name: bodyshops + schema: public + type: drop_relationship +- args: + relationship: bodyshop + table: + name: dms_vehicles + schema: public + type: drop_relationship diff --git a/hasura/migrations/1629520454038_track_all_relationships/up.yaml b/hasura/migrations/1629520454038_track_all_relationships/up.yaml new file mode 100644 index 000000000..a6ec79cc2 --- /dev/null +++ b/hasura/migrations/1629520454038_track_all_relationships/up.yaml @@ -0,0 +1,20 @@ +- args: + name: dms_vehicles + table: + name: bodyshops + schema: public + using: + foreign_key_constraint_on: + column: bodyshopid + table: + name: dms_vehicles + schema: public + type: create_array_relationship +- args: + name: bodyshop + table: + name: dms_vehicles + schema: public + using: + foreign_key_constraint_on: bodyshopid + type: create_object_relationship diff --git a/hasura/migrations/1629520509486_update_permission_user_public_table_dms_vehicles/down.yaml b/hasura/migrations/1629520509486_update_permission_user_public_table_dms_vehicles/down.yaml new file mode 100644 index 000000000..972d7b719 --- /dev/null +++ b/hasura/migrations/1629520509486_update_permission_user_public_table_dms_vehicles/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: dms_vehicles + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1629520509486_update_permission_user_public_table_dms_vehicles/up.yaml b/hasura/migrations/1629520509486_update_permission_user_public_table_dms_vehicles/up.yaml new file mode 100644 index 000000000..892fb145f --- /dev/null +++ b/hasura/migrations/1629520509486_update_permission_user_public_table_dms_vehicles/up.yaml @@ -0,0 +1,28 @@ +- args: + permission: + allow_aggregations: false + backend_only: false + columns: + - id + - created_at + - makecode + - modelcode + - make + - model + - bodyshopid + computed_fields: [] + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + limit: null + role: user + table: + name: dms_vehicles + schema: public + type: create_select_permission diff --git a/hasura/migrations/1629520623978_update_permission_user_public_table_dms_vehicles/down.yaml b/hasura/migrations/1629520623978_update_permission_user_public_table_dms_vehicles/down.yaml new file mode 100644 index 000000000..1d905252b --- /dev/null +++ b/hasura/migrations/1629520623978_update_permission_user_public_table_dms_vehicles/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: dms_vehicles + schema: public + type: drop_insert_permission diff --git a/hasura/migrations/1629520623978_update_permission_user_public_table_dms_vehicles/up.yaml b/hasura/migrations/1629520623978_update_permission_user_public_table_dms_vehicles/up.yaml new file mode 100644 index 000000000..13cb03c98 --- /dev/null +++ b/hasura/migrations/1629520623978_update_permission_user_public_table_dms_vehicles/up.yaml @@ -0,0 +1,27 @@ +- args: + permission: + allow_upsert: true + backend_only: false + check: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + columns: + - id + - created_at + - makecode + - modelcode + - make + - model + - bodyshopid + set: {} + role: user + table: + name: dms_vehicles + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1629520632595_update_permission_user_public_table_dms_vehicles/down.yaml b/hasura/migrations/1629520632595_update_permission_user_public_table_dms_vehicles/down.yaml new file mode 100644 index 000000000..45e52f5d8 --- /dev/null +++ b/hasura/migrations/1629520632595_update_permission_user_public_table_dms_vehicles/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: dms_vehicles + schema: public + type: drop_update_permission diff --git a/hasura/migrations/1629520632595_update_permission_user_public_table_dms_vehicles/up.yaml b/hasura/migrations/1629520632595_update_permission_user_public_table_dms_vehicles/up.yaml new file mode 100644 index 000000000..71a547c0e --- /dev/null +++ b/hasura/migrations/1629520632595_update_permission_user_public_table_dms_vehicles/up.yaml @@ -0,0 +1,26 @@ +- args: + permission: + backend_only: false + columns: + - make + - makecode + - model + - modelcode + - created_at + - bodyshopid + - id + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + set: {} + role: user + table: + name: dms_vehicles + schema: public + type: create_update_permission diff --git a/hasura/migrations/1629521860924_update_permission_user_public_table_dms_vehicles/down.yaml b/hasura/migrations/1629521860924_update_permission_user_public_table_dms_vehicles/down.yaml new file mode 100644 index 000000000..a4ff6bf77 --- /dev/null +++ b/hasura/migrations/1629521860924_update_permission_user_public_table_dms_vehicles/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: dms_vehicles + schema: public + type: drop_delete_permission diff --git a/hasura/migrations/1629521860924_update_permission_user_public_table_dms_vehicles/up.yaml b/hasura/migrations/1629521860924_update_permission_user_public_table_dms_vehicles/up.yaml new file mode 100644 index 000000000..f1ee13adf --- /dev/null +++ b/hasura/migrations/1629521860924_update_permission_user_public_table_dms_vehicles/up.yaml @@ -0,0 +1,17 @@ +- args: + permission: + backend_only: false + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + role: user + table: + name: dms_vehicles + schema: public + type: create_delete_permission diff --git a/hasura/migrations/metadata.yaml b/hasura/migrations/metadata.yaml index 62d9f434a..063efca8e 100644 --- a/hasura/migrations/metadata.yaml +++ b/hasura/migrations/metadata.yaml @@ -721,6 +721,13 @@ tables: table: schema: public name: csiquestions + - name: dms_vehicles + using: + foreign_key_constraint_on: + column: bodyshopid + table: + schema: public + name: dms_vehicles - name: documents using: foreign_key_constraint_on: @@ -1527,6 +1534,87 @@ tables: - active: _eq: true check: null +- table: + schema: public + name: dms_vehicles + object_relationships: + - name: bodyshop + using: + foreign_key_constraint_on: bodyshopid + insert_permissions: + - role: user + permission: + check: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + columns: + - id + - created_at + - makecode + - modelcode + - make + - model + - bodyshopid + backend_only: false + select_permissions: + - role: user + permission: + columns: + - id + - created_at + - makecode + - modelcode + - make + - model + - bodyshopid + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + update_permissions: + - role: user + permission: + columns: + - make + - makecode + - model + - modelcode + - created_at + - bodyshopid + - id + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + check: null + delete_permissions: + - role: user + permission: + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true - table: schema: public name: documents @@ -4097,6 +4185,7 @@ tables: - created_at - date - employeeid + - flat_rate - id - jobid - memo @@ -4116,6 +4205,7 @@ tables: - created_at - date - employeeid + - flat_rate - id - jobid - memo @@ -4144,6 +4234,7 @@ tables: - created_at - date - employeeid + - flat_rate - id - jobid - memo diff --git a/server.js b/server.js index 5b59ec283..b596ff0b2 100644 --- a/server.js +++ b/server.js @@ -21,6 +21,23 @@ const app = express(); const port = process.env.PORT || 5000; //const port = 5000; +const http = require("http"); +const server = http.createServer(app); +const { Server } = require("socket.io"); +const io = new Server(server, { + path: "/ws", + cors: { + origin: [ + "https://test.imex.online", + "http://localhost:3000", + "https://imex.online", + ], + methods: ["GET", "POST"], + }, +}); +exports.io = io; +require("./server/web-sockets/web-socket"); + //app.use(fb.validateFirebaseIdToken); app.use(compression()); app.use(bodyParser.json({ limit: "50mb" })); @@ -147,28 +164,14 @@ app.post("/data/ah", data.autohouse); var ioevent = require("./server/ioevent/ioevent"); app.post("/ioevent", ioevent.default); +var cdkGetMake = require("./server/cdk/cdk-get-makes"); +app.post("/cdk/getvehicles", fb.validateFirebaseIdToken, cdkGetMake.default); + app.get("/", async function (req, res) { res.status(200).send("Access Forbidden."); }); -const http = require("http"); -const server = http.createServer(app); -const { Server } = require("socket.io"); -const io = new Server(server, { - path: "/ws", - cors: { - origin: [ - "https://test.imex.online", - "http://localhost:3000", - "https://imex.online", - ], - methods: ["GET", "POST"], - }, -}); - server.listen(port, (error) => { if (error) throw error; logger.log(`[${process.env.NODE_ENV}] Server running on port ${port}`); }); -exports.io = io; -require("./server/web-sockets/web-socket"); diff --git a/server/cdk/cdk-get-makes.js b/server/cdk/cdk-get-makes.js index cdcb21eb8..da3343541 100644 --- a/server/cdk/cdk-get-makes.js +++ b/server/cdk/cdk-get-makes.js @@ -15,32 +15,101 @@ const Dinero = require("dinero.js"); const _ = require("lodash"); const { CDK_CREDENTIALS, CheckCdkResponseForError } = require("./cdk-wsdl"); const { performance } = require("perf_hooks"); +const apiGqlClient = require("../graphql-client/graphql-client").client; -exports.default = async function (socket, cdk_dealerid) { +// exports.default = async function (socket, cdk_dealerid) { +// try { +// CdkBase.createLogEvent( +// socket, +// "DEBUG", +// `Getting makes and models list from CDK.` +// ); +// return await GetCdkMakes(socket, cdk_dealerid); +// } catch (error) { +// CdkBase.createLogEvent( +// socket, +// "ERROR", +// `Error encountered in CdkGetMakes. ${error}` +// ); +// } +// }; + +exports.default = async function ReloadCdkMakes(req, res) { + const { bodyshopid, cdk_dealerid } = req.body; try { - CdkBase.createLogEvent( - socket, - "DEBUG", - `Getting makes and models list from CDK.` + const BearerToken = req.headers.authorization; + //Query all CDK Models + const newList = await GetCdkMakes(req, cdk_dealerid); + console.log("🚀 ~ file: cdk-get-makes.js ~ line 40 ~ newList", newList); + + //Clear out the existing records + const client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, { + headers: { + Authorization: BearerToken, + }, + }); + + const deleteResult = await client + .setHeaders({ Authorization: BearerToken }) + .request(queries.DELETE_ALL_DMS_VEHICLES, {}); + console.log( + "🚀 ~ file: cdk-get-makes.js ~ line 53 ~ deleteResult", + deleteResult + ); + + //Insert the new ones. + + const insertResult = await client + .setHeaders({ Authorization: BearerToken }) + .request(queries.INSERT_DMS_VEHICLES, { + vehicles: newList.map((i) => { + return { + bodyshopid, + makecode: i.makeCode, + modelcode: i.modelCode, + make: i.makeFullName, + model: i.modelFullName, + }; + }), + }); + console.log( + "🚀 ~ file: cdk-get-makes.js ~ line 66 ~ insertResult", + insertResult + ); + + logger.log( + "cdk-replace-makes-models-success", + "DEBUG", + req.user.email, + null, + { + cdk_dealerid, + count: newList.length, + } ); - return await GetCdkMakes(socket, cdk_dealerid); } catch (error) { - CdkBase.createLogEvent( - socket, + logger.log( + "cdk-replace-makes-models-error", "ERROR", - `Error encountered in CdkGetMakes. ${error}` + req.user.email, + null, + { + cdk_dealerid, + error, + } ); } }; -async function GetCdkMakes(socket, cdk_dealerid) { - CdkBase.createLogEvent(socket, "TRACE", `{1} Begin GetCDkMakes WSDL Call`); +async function GetCdkMakes(req, cdk_dealerid) { + logger.log("cdk-replace-makes-models", "DEBUG", req.user.email, null, { + cdk_dealerid, + }); try { const soapClientVehicleInsert = await soap.createClientAsync( CdkWsdl.VehicleInsert ); - const start = performance.now(); const soapResponseVehicleSearch = await soapClientVehicleInsert.getMakeModelAsync( @@ -51,28 +120,25 @@ async function GetCdkMakes(socket, cdk_dealerid) { {} ); - CheckCdkResponseForError(socket, soapResponseVehicleSearch); + + CheckCdkResponseForError(null, soapResponseVehicleSearch); const [ result, //rawResponse, soapheader, rawRequest ] = soapResponseVehicleSearch; - const end = performance.now(); - CdkBase.createLogEvent( - socket, - "TRACE", - `soapClientVehicleInsert.getMakeModelAsync Result Length ${ - result.return.length - } and took ${end - start}ms` + + return result.return; + } catch (error) { + logger.log( + "cdk-replace-makes-models-error", + "ERROR", + req.user.email, + null, + { + cdk_dealerid, + error, + } ); - return result.return.map((element, index) => { - return { id: index, ...element }; - }); - } catch (error) { - CdkBase.createLogEvent( - socket, - "ERROR", - `Error in GetCdkMakes - ${JSON.stringify(error, null, 2)}` - ); throw new Error(error); } } diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index 087f45de7..726e34bec 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -927,6 +927,19 @@ exports.GET_AUTOHOUSE_SHOPS = `query GET_AUTOHOUSE_SHOPS { imexshopid } } +`; +exports.DELETE_ALL_DMS_VEHICLES = `mutation DELETE_ALL_DMS_VEHICLES{ + delete_dms_vehicles(where: {}) { + affected_rows + } +} +`; +exports.INSERT_DMS_VEHICLES = `mutation INSERT_DMS_VEHICLES($vehicles: [dms_vehicles_insert_input!]!) { + insert_dms_vehicles(objects: $vehicles) { +affected_rows + } +} + `; exports.GET_CDK_ALLOCATIONS = `