From bfcc03850bbd96382c6ec2f4ba51a22ad973a6d1 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 23 Nov 2021 00:30:11 -0800 Subject: [PATCH 1/3] IO-70 Add OEC Through Partner Call. --- .../dms-cdk-makes.refetch.component.jsx | 4 +- .../help-rescue/help-rescue.component.jsx | 13 +- .../parts-order-modal.component.jsx | 1 + .../parts-order-modal.container.jsx | 51 ++++- client/src/graphql/parts-orders.queries.js | 187 ++++++++++++++++++ .../mobile-payment.component.jsx | 5 +- .../mobile-payment.container.jsx | 4 +- 7 files changed, 246 insertions(+), 19 deletions(-) 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 index c0d1ee4d9..f24153a4d 100644 --- 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 @@ -1,10 +1,10 @@ import { Button } from "antd"; import axios from "axios"; import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import { useTranslation } from "react-i18next"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser bodyshop: selectBodyshop, @@ -19,7 +19,7 @@ export function DmsCdkMakesRefetch({ bodyshop, form, socket }) { const { t } = useTranslation(); const handleRefetch = async () => { setLoading(true); - const response = await axios.post("/cdk/getvehicles", { + await axios.post("/cdk/getvehicles", { cdk_dealerid: bodyshop.cdk_dealerid, bodyshopid: bodyshop.id, }); diff --git a/client/src/components/help-rescue/help-rescue.component.jsx b/client/src/components/help-rescue/help-rescue.component.jsx index 9a0d18b1e..1c3dd5ba0 100644 --- a/client/src/components/help-rescue/help-rescue.component.jsx +++ b/client/src/components/help-rescue/help-rescue.component.jsx @@ -10,14 +10,11 @@ export default function HelpRescue() { var bodyFormData = new FormData(); bodyFormData.append("Code", code); bodyFormData.append("hostederrorhandling", 1); - const res1 = await fetch( - "https://secure.logmeinrescue.com/Customer/Code.aspx", - { - mode: "no-cors", - method: "POST", - body: bodyFormData, - } - ); + await fetch("https://secure.logmeinrescue.com/Customer/Code.aspx", { + mode: "no-cors", + method: "POST", + body: bodyFormData, + }); }; return ( diff --git a/client/src/components/parts-order-modal/parts-order-modal.component.jsx b/client/src/components/parts-order-modal/parts-order-modal.component.jsx index 08973075d..86fad8d3b 100644 --- a/client/src/components/parts-order-modal/parts-order-modal.component.jsx +++ b/client/src/components/parts-order-modal/parts-order-modal.component.jsx @@ -164,6 +164,7 @@ export default function PartsOrderModalComponent({ {t("general.labels.none")} {t("parts_orders.labels.email")} {t("parts_orders.labels.print")} + {t("parts_orders.labels.oec")} ); diff --git a/client/src/components/parts-order-modal/parts-order-modal.container.jsx b/client/src/components/parts-order-modal/parts-order-modal.container.jsx index ad9efeb72..61cba9406 100644 --- a/client/src/components/parts-order-modal/parts-order-modal.container.jsx +++ b/client/src/components/parts-order-modal/parts-order-modal.container.jsx @@ -1,13 +1,16 @@ -import { useMutation, useQuery } from "@apollo/client"; +import { useMutation, useQuery, useApolloClient } from "@apollo/client"; import { Form, Modal, notification } from "antd"; import moment from "moment"; import React, { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; -import { logImEXEvent } from "../../firebase/firebase.utils"; +import { logImEXEvent, auth } from "../../firebase/firebase.utils"; import { UPDATE_JOB_LINE_STATUS } from "../../graphql/jobs-lines.queries"; -import { INSERT_NEW_PARTS_ORDERS } from "../../graphql/parts-orders.queries"; +import { + INSERT_NEW_PARTS_ORDERS, + QUERY_PARTS_ORDER_OEC, +} from "../../graphql/parts-orders.queries"; import { QUERY_ALL_VENDORS_FOR_ORDER } from "../../graphql/vendors.queries"; import { insertAuditTrail } from "../../redux/application/application.actions"; import { setEmailOptions } from "../../redux/email/email.actions"; @@ -26,6 +29,7 @@ import { TemplateList } from "../../utils/TemplateConstants"; import AlertComponent from "../alert/alert.component"; import LoadingSpinner from "../loading-spinner/loading-spinner.component"; import PartsOrderModalComponent from "./parts-order-modal.component"; +import axios from "axios"; const mapStateToProps = createStructuredSelector({ currentUser: selectCurrentUser, @@ -52,7 +56,7 @@ export function PartsOrderModalContainer({ insertAuditTrail, }) { const { t } = useTranslation(); - + const client = useApolloClient(); const { visible, context, actions } = partsOrderModal; const { jobId, @@ -175,7 +179,7 @@ export function PartsOrderModalContainer({ } if (refetch) refetch(); - toggleModalVisible(); + const Templates = TemplateList("partsorder", context); if (sendType === "e") { @@ -215,7 +219,44 @@ export function PartsOrderModalContainer({ {}, "p" ); + } else if (sendType === "oec") { + //Send to Partner OEC. + try { + const partsOrder = await client.query({ + query: QUERY_PARTS_ORDER_OEC, + variables: { + id: insertResult.data.insert_parts_orders.returning[0].id, + }, + }); + console.log("🚀 ~ file: parts-order-modal.container.jsx ~ line 231 ~ handleFinish ~ partsOrder", partsOrder) + + const oecResponse = await axios.post( + "http://localhost:1337/oec/", + + partsOrder.data.parts_orders_by_pk, + { + headers: { + Authorization: `Bearer ${await auth.currentUser.getIdToken()}`, + }, + } + ); + console.log( + "🚀 ~ file: parts-order-modal.container.jsx ~ line 232 ~ handleFinish ~ oecResponse", + oecResponse + ); + } catch (error) { + console.log("Error OEC.", error); + notification["error"]({ + message: t("parts_orders.errors.oec", { + error: JSON.stringify(error.message), + }), + }); + + return; + } } + + toggleModalVisible(); }; const initialValues = { diff --git a/client/src/graphql/parts-orders.queries.js b/client/src/graphql/parts-orders.queries.js index 7cd4427c9..b0ef44f1e 100644 --- a/client/src/graphql/parts-orders.queries.js +++ b/client/src/graphql/parts-orders.queries.js @@ -11,6 +11,193 @@ export const INSERT_NEW_PARTS_ORDERS = gql` } `; +export const QUERY_PARTS_ORDER_OEC = gql` +query QUERY_PARTS_ORDER_OEC($id: uuid!) { + parts_orders_by_pk(id: $id) { + job { + ro_number + clm_no + asgn_date + asgn_no + asgn_type + ciecaid + clm_addr1 + clm_city + clm_addr2 + clm_ct_fn + clm_ct_ln + clm_ct_ph + clm_ct_phx + clm_ctry + clm_ea + clm_fax + clm_faxx + clm_ofc_id + clm_ofc_nm + clm_ph1 + clm_ph1x + clm_ph2 + clm_ph2x + clm_st + clm_title + clm_total + clm_zip + ded_amt + est_addr1 + est_addr2 + est_city + est_co_nm + est_ct_fn + est_ctry + est_ct_ln + est_ea + est_ph1 + est_st + est_zip + g_bett_amt + id + ins_addr1 + ins_city + ins_addr2 + ins_co_id + ins_co_nm + ins_ct_fn + ins_ct_ln + ins_ct_ph + ins_ct_phx + ins_ctry + ins_ea + ins_fax + ins_faxx + ins_memo + ins_ph1 + ins_ph1x + ins_ph2 + ins_ph2x + ins_st + ins_title + ins_zip + insd_addr1 + insd_addr2 + insd_city + insd_co_nm + insd_ctry + insd_ea + insd_fax + insd_faxx + insd_fn + insd_ln + insd_ph1 + insd_ph1x + insd_ph2 + insd_ph2x + insd_st + insd_title + insd_zip + job_totals + loss_cat + loss_date + loss_desc + loss_of_use + loss_type + ownr_addr1 + ownr_addr2 + ownr_city + ownr_co_nm + ownr_ctry + ownr_ea + ownr_fax + ownr_faxx + ownr_ph1 + ownr_fn + ownr_ln + ownr_ph1x + ownr_ph2 + ownr_ph2x + ownr_st + ownr_title + ownr_zip + parts_tax_rates + pay_amt + pay_date + pay_type + pay_chknm + payee_nms + plate_no + plate_st + po_number + policy_no + tax_lbr_rt + tax_levies_rt + tax_paint_mat_rt + tax_predis + tax_prethr + tax_pstthr + tax_registration_number + tax_str_rt + tax_shop_mat_rt + tax_sub_rt + tax_thramt + tax_tow_rt + theft_ind + tlos_ind + towin + v_color + v_make_desc + v_model_desc + v_model_yr + v_vin + } + parts_order_lines { + jobline { + act_price + db_ref + db_price + db_hrs + glass_flag + id + lbr_amt + lbr_hrs_j + lbr_inc + lbr_op + lbr_op_j + lbr_tax + lbr_typ_j + line_desc + line_ind + line_no + line_ref + location + misc_amt + misc_sublt + misc_tax + mod_lb_hrs + mod_lbr_ty + oem_partno + op_code_desc + paint_stg + paint_tone + part_qty + part_type + price_inc + price_j + prt_dsmk_m + prt_dsmk_p + tax_part + unq_seq + } + act_price + id + db_price + line_desc + quantity + } + } +} + +`; + + export const DELETE_PARTS_ORDER = gql` mutation DELETE_PARTS_ORDER($partsOrderId: uuid!) { delete_parts_orders_by_pk(id: $partsOrderId) { diff --git a/client/src/pages/mobile-payment/mobile-payment.component.jsx b/client/src/pages/mobile-payment/mobile-payment.component.jsx index f353edbfd..2dff4b39f 100644 --- a/client/src/pages/mobile-payment/mobile-payment.component.jsx +++ b/client/src/pages/mobile-payment/mobile-payment.component.jsx @@ -1,6 +1,6 @@ import { PaymentRequestButtonElement, - useStripe, + useStripe } from "@stripe/react-stripe-js"; import React, { useEffect, useState } from "react"; @@ -60,7 +60,8 @@ export default function MobilePaymentComponent() { // it to close the browser payment method collection interface. ev.complete("success"); // Let Stripe.js handle the rest of the payment flow. - const { error, paymentIntent } = await stripe.confirmCardPayment( + const { error, //paymentIntent + } = await stripe.confirmCardPayment( "clientSecret" ); if (error) { diff --git a/client/src/pages/mobile-payment/mobile-payment.container.jsx b/client/src/pages/mobile-payment/mobile-payment.container.jsx index 18c36a1cb..7c44dd12d 100644 --- a/client/src/pages/mobile-payment/mobile-payment.container.jsx +++ b/client/src/pages/mobile-payment/mobile-payment.container.jsx @@ -1,7 +1,7 @@ -import React from "react"; -import MobilePaymentComponent from "./mobile-payment.component"; import { Elements } from "@stripe/react-stripe-js"; import { loadStripe } from "@stripe/stripe-js"; +import React from "react"; +import MobilePaymentComponent from "./mobile-payment.component"; const stripePromise = new Promise((resolve, reject) => { resolve( From 53be0bbc1a23e24f33f483fca167a2ce200a74f9 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 29 Nov 2021 08:57:44 -0800 Subject: [PATCH 2/3] IO-70 OEC WIP. --- .../parts-order-modal.container.jsx | 1 + client/src/graphql/parts-orders.queries.js | 436 +++++++++++------- 2 files changed, 259 insertions(+), 178 deletions(-) diff --git a/client/src/components/parts-order-modal/parts-order-modal.container.jsx b/client/src/components/parts-order-modal/parts-order-modal.container.jsx index 61cba9406..9ba18c30c 100644 --- a/client/src/components/parts-order-modal/parts-order-modal.container.jsx +++ b/client/src/components/parts-order-modal/parts-order-modal.container.jsx @@ -244,6 +244,7 @@ export function PartsOrderModalContainer({ "🚀 ~ file: parts-order-modal.container.jsx ~ line 232 ~ handleFinish ~ oecResponse", oecResponse ); + return; } catch (error) { console.log("Error OEC.", error); notification["error"]({ diff --git a/client/src/graphql/parts-orders.queries.js b/client/src/graphql/parts-orders.queries.js index b0ef44f1e..86c91b109 100644 --- a/client/src/graphql/parts-orders.queries.js +++ b/client/src/graphql/parts-orders.queries.js @@ -12,192 +12,272 @@ export const INSERT_NEW_PARTS_ORDERS = gql` `; export const QUERY_PARTS_ORDER_OEC = gql` -query QUERY_PARTS_ORDER_OEC($id: uuid!) { - parts_orders_by_pk(id: $id) { - job { - ro_number - clm_no - asgn_date - asgn_no - asgn_type - ciecaid - clm_addr1 - clm_city - clm_addr2 - clm_ct_fn - clm_ct_ln - clm_ct_ph - clm_ct_phx - clm_ctry - clm_ea - clm_fax - clm_faxx - clm_ofc_id - clm_ofc_nm - clm_ph1 - clm_ph1x - clm_ph2 - clm_ph2x - clm_st - clm_title - clm_total - clm_zip - ded_amt - est_addr1 - est_addr2 - est_city - est_co_nm - est_ct_fn - est_ctry - est_ct_ln - est_ea - est_ph1 - est_st - est_zip - g_bett_amt - id - ins_addr1 - ins_city - ins_addr2 - ins_co_id - ins_co_nm - ins_ct_fn - ins_ct_ln - ins_ct_ph - ins_ct_phx - ins_ctry - ins_ea - ins_fax - ins_faxx - ins_memo - ins_ph1 - ins_ph1x - ins_ph2 - ins_ph2x - ins_st - ins_title - ins_zip - insd_addr1 - insd_addr2 - insd_city - insd_co_nm - insd_ctry - insd_ea - insd_fax - insd_faxx - insd_fn - insd_ln - insd_ph1 - insd_ph1x - insd_ph2 - insd_ph2x - insd_st - insd_title - insd_zip - job_totals - loss_cat - loss_date - loss_desc - loss_of_use - loss_type - ownr_addr1 - ownr_addr2 - ownr_city - ownr_co_nm - ownr_ctry - ownr_ea - ownr_fax - ownr_faxx - ownr_ph1 - ownr_fn - ownr_ln - ownr_ph1x - ownr_ph2 - ownr_ph2x - ownr_st - ownr_title - ownr_zip - parts_tax_rates - pay_amt - pay_date - pay_type - pay_chknm - payee_nms - plate_no - plate_st - po_number - policy_no - tax_lbr_rt - tax_levies_rt - tax_paint_mat_rt - tax_predis - tax_prethr - tax_pstthr - tax_registration_number - tax_str_rt - tax_shop_mat_rt - tax_sub_rt - tax_thramt - tax_tow_rt - theft_ind - tlos_ind - towin - v_color - v_make_desc - v_model_desc - v_model_yr - v_vin - } - parts_order_lines { - jobline { + query QUERY_PARTS_ORDER_OEC($id: uuid!) { + parts_orders_by_pk(id: $id) { + parts_order_lines { + jobline { + act_price + db_ref + db_price + db_hrs + glass_flag + id + lbr_amt + lbr_hrs_j + lbr_inc + lbr_op + lbr_op_j + lbr_tax + lbr_typ_j + line_desc + line_ind + line_no + line_ref + location + misc_amt + misc_sublt + misc_tax + mod_lb_hrs + mod_lbr_ty + oem_partno + op_code_desc + paint_stg + paint_tone + part_qty + part_type + price_inc + price_j + prt_dsmk_m + prt_dsmk_p + tax_part + unq_seq + alt_co_id + alt_overrd + alt_part_i + alt_partm + alt_partno + bett_amt + bett_pctg + bett_tax + bett_type + cert_part + est_seq + } act_price - db_ref - db_price - db_hrs - glass_flag id - lbr_amt - lbr_hrs_j - lbr_inc - lbr_op - lbr_op_j - lbr_tax - lbr_typ_j + db_price line_desc - line_ind - line_no - line_ref - location - misc_amt - misc_sublt - misc_tax - mod_lb_hrs - mod_lbr_ty - oem_partno - op_code_desc - paint_stg - paint_tone - part_qty - part_type - price_inc - price_j - prt_dsmk_m - prt_dsmk_p - tax_part - unq_seq + quantity + } + job { + ro_number + clm_no + asgn_no + asgn_date + state_tax_rate + area_of_damage + asgn_no + asgn_type + ciecaid + clm_addr1 + clm_city + clm_addr2 + clm_ct_fn + clm_ct_ln + clm_ct_ph + clm_ct_phx + clm_ctry + clm_ea + clm_fax + clm_faxx + clm_ofc_id + clm_ofc_nm + clm_ph1 + clm_ph1x + clm_ph2 + clm_ph2x + clm_st + clm_title + clm_total + clm_zip + ded_amt + est_addr1 + est_addr2 + est_city + est_co_nm + est_ct_fn + est_ctry + est_ct_ln + est_ea + est_ph1 + est_st + est_zip + g_bett_amt + id + ins_addr1 + ins_city + ins_addr2 + ins_co_id + ins_co_nm + ins_ct_fn + ins_ct_ln + ins_ct_ph + ins_ct_phx + ins_ctry + ins_ea + ins_fax + ins_faxx + ins_memo + ins_ph1 + ins_ph1x + ins_ph2 + ins_ph2x + ins_st + ins_title + ins_zip + insd_addr1 + insd_addr2 + insd_city + insd_co_nm + insd_ctry + insd_ea + insd_fax + insd_faxx + insd_fn + insd_ln + insd_ph1 + insd_ph1x + insd_ph2 + insd_ph2x + insd_st + insd_title + insd_zip + job_totals + loss_cat + loss_date + loss_desc + loss_of_use + loss_type + ownr_addr1 + ownr_addr2 + ownr_city + ownr_co_nm + ownr_ctry + ownr_ea + ownr_fax + ownr_faxx + ownr_ph1 + ownr_fn + ownr_ln + ownr_ph1x + ownr_ph2 + ownr_ph2x + ownr_st + ownr_title + ownr_zip + parts_tax_rates + pay_amt + pay_date + pay_type + pay_chknm + payee_nms + plate_no + plate_st + po_number + policy_no + tax_lbr_rt + tax_levies_rt + tax_paint_mat_rt + tax_predis + tax_prethr + tax_pstthr + tax_registration_number + tax_str_rt + tax_shop_mat_rt + tax_sub_rt + tax_thramt + tax_tow_rt + theft_ind + tlos_ind + towin + v_color + v_make_desc + v_model_desc + v_model_yr + v_vin + vehicle { + v_bstyle + v_type + v_trimcode + v_tone + v_stage + v_prod_dt + v_options + v_paint_codes + v_model_yr + v_model_desc + v_mldgcode + v_makecode + v_make_desc + v_engine + v_cond + v_color + trim_color + shopid + plate_no + plate_st + db_v_code + v_vin + } + agt_zip + agt_st + agt_ph2x + agt_ph2 + agt_ph1x + agt_ph1 + agt_lic_no + agt_faxx + agt_fax + agt_ea + agt_ctry + agt_ct_phx + agt_ct_ph + agt_ct_ln + agt_ct_fn + agt_co_nm + agt_co_id + agt_city + agt_addr1 + agt_addr2 + adj_g_disc + rate_matd + rate_mash + rate_mapa + rate_mahw + rate_macs + rate_mabl + rate_ma3s + rate_ma2t + rate_ma2s + rate_lau + rate_las + rate_lar + rate_lam + rate_lag + rate_laf + rate_lae + rate_lad + rate_lab + rate_laa + rate_la4 + rate_la3 + rate_la2 + rate_la1 } - act_price - id - db_price - line_desc - quantity } } -} - `; - export const DELETE_PARTS_ORDER = gql` mutation DELETE_PARTS_ORDER($partsOrderId: uuid!) { delete_parts_orders_by_pk(id: $partsOrderId) { From 5db43dd065d17557941d7d04bc2db02461b0cd87 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 29 Nov 2021 15:04:34 -0800 Subject: [PATCH 3/3] IO-70 Add basic functions of OEC. --- bodyshop_translations.babel | 44 ++++++++++++++++++- .../parts-order-modal.container.jsx | 17 ++++--- client/src/graphql/parts-orders.queries.js | 5 +++ client/src/translations/en_us/common.json | 4 +- client/src/translations/es/common.json | 4 +- client/src/translations/fr/common.json | 4 +- hasura/metadata/tables.yaml | 14 +++++- .../down.sql | 4 ++ .../up.sql | 2 + 9 files changed, 87 insertions(+), 11 deletions(-) create mode 100644 hasura/migrations/1638223143109_alter_table_public_joblines_add_column_tran_code/down.sql create mode 100644 hasura/migrations/1638223143109_alter_table_public_joblines_add_column_tran_code/up.sql diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index c49f9a9da..36e0ccaaf 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -1,4 +1,4 @@ - +