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(