From 918bc402f69e8c2021196db8378f560b564ef946 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 27 Sep 2022 15:07:15 -0700 Subject: [PATCH 1/2] IO-2054 Add Payments Export --- .../payment-form/payment-form.component.jsx | 24 +++++++-- server/accounting/qbo/qbo-payments.js | 49 +++++++++++++++---- 2 files changed, 60 insertions(+), 13 deletions(-) diff --git a/client/src/components/payment-form/payment-form.component.jsx b/client/src/components/payment-form/payment-form.component.jsx index 57a3ce4a7..9458aece3 100644 --- a/client/src/components/payment-form/payment-form.component.jsx +++ b/client/src/components/payment-form/payment-form.component.jsx @@ -1,3 +1,4 @@ +import { useTreatments } from "@splitsoftware/splitio-react"; import { CardElement } from "@stripe/react-stripe-js"; import { Checkbox, Form, Input, Radio, Select } from "antd"; import React from "react"; @@ -23,6 +24,11 @@ export function PaymentFormComponent({ disabled, }) { const [stripeState, setStripeState] = stripeStateArr; + const { Qb_Multi_Ar } = useTreatments( + ["Qb_Multi_Ar"], + {}, + bodyshop && bodyshop.imexshopid + ); const { t } = useTranslation(); const handleStripeChange = (e) => { @@ -106,9 +112,21 @@ export function PaymentFormComponent({ {t("payments.labels.customer")} - - {t("payments.labels.insurance")} - + {Qb_Multi_Ar.treatment === "on" ? ( + <> + + {bodyshop.md_ins_cos.map((i, idx) => ( + + {i.name} + + ))} + + + ) : ( + + {t("payments.labels.insurance")} + + )} diff --git a/server/accounting/qbo/qbo-payments.js b/server/accounting/qbo/qbo-payments.js index c903c0a43..c4f58079f 100644 --- a/server/accounting/qbo/qbo-payments.js +++ b/server/accounting/qbo/qbo-payments.js @@ -73,11 +73,19 @@ exports.default = async (req, res) => { for (const payment of payments) { try { - const isThreeTier = bodyshop.accountingconfig.tiers === 3; - const twoTierPref = bodyshop.accountingconfig.twotierpref; + let isThreeTier = bodyshop.accountingconfig.tiers === 3; + let twoTierPref = bodyshop.accountingconfig.twotierpref; //Replace this with a for-each loop to check every single Job that's included in the list. + //QB Multi AR - If it is in this scenario, overwrite whatever defaults are set since multi AR + //will always go Source => RO + if (payment.payer !== "Customer") { + payment.job.ins_co_nm = payment.payer; + twoTierPref = "source"; + isThreeTier = false; + } + let insCoCustomerTier, ownerCustomerTier, jobTier; if (isThreeTier || (!isThreeTier && twoTierPref === "source")) { //Insert the insurance company tier. @@ -106,7 +114,9 @@ exports.default = async (req, res) => { oauthClient, qbo_realmId, req, - payment.job + payment.job, + isThreeTier, + insCoCustomerTier ); //Query for the owner itself. if (!ownerCustomerTier) { @@ -122,7 +132,17 @@ exports.default = async (req, res) => { } //Query for the Job or Create it. - jobTier = await QueryJob(oauthClient, qbo_realmId, req, payment.job); + jobTier = await QueryJob( + oauthClient, + qbo_realmId, + req, + payment.job, + isThreeTier + ? ownerCustomerTier + : twoTierPref === "source" + ? insCoCustomerTier + : ownerCustomerTier + ); // Need to validate that the job tier is associated to the right individual? @@ -237,7 +257,8 @@ async function InsertPayment( qbo_realmId, req, payment.job.ro_number, - false + false, + parentRef ); if (invoices && invoices.length !== 1) { @@ -260,7 +281,7 @@ async function InsertPayment( PaymentMethodRef: { value: paymentMethods[payment.type], }, - ...(invoices && invoices.length === 1 + ...(invoices && invoices.length === 1 && invoices[0] ? { Line: [ { @@ -305,13 +326,14 @@ async function QueryMetaData( qbo_realmId, req, ro_number, - isCreditMemo + isCreditMemo, + parentTierRef ) { const invoice = await oauthClient.makeApiCall({ url: urlBuilder( qbo_realmId, "query", - `select * From Invoice where DocNumber = '${ro_number}'` + `select * From Invoice where DocNumber like '${ro_number}%'` ), method: "POST", headers: { @@ -407,7 +429,13 @@ async function QueryMetaData( invoices: invoice.json && invoice.json.QueryResponse && - invoice.json.QueryResponse.Invoice, + (parentTierRef + ? [ + invoice.json.QueryResponse.Invoice.find( + (x) => x.CustomerRef.value === parentTierRef.Id + ), + ] + : [invoice.json.QueryResponse.Invoice[0]]), }; } async function InsertCreditMemo( @@ -423,7 +451,8 @@ async function InsertCreditMemo( qbo_realmId, req, payment.job.ro_number, - true + true, + parentRef ); if (invoices && invoices.length !== 1) { From e8fc29ea61861c458ea84f40eb5fc426dd04d8ae Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 27 Sep 2022 15:07:26 -0700 Subject: [PATCH 2/2] Autohouse Updates. --- client/src/pages/jobs-create/jobs-create.container.jsx | 1 + server/data/autohouse.js | 6 +++++- server/graphql-client/queries.js | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/client/src/pages/jobs-create/jobs-create.container.jsx b/client/src/pages/jobs-create/jobs-create.container.jsx index b7ffad7b2..15af524ed 100644 --- a/client/src/pages/jobs-create/jobs-create.container.jsx +++ b/client/src/pages/jobs-create/jobs-create.container.jsx @@ -89,6 +89,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) { let job = Object.assign( {}, values, + { date_open: new Date() }, { vehicle: state.vehicle.selectedid || state.vehicle.none diff --git a/server/data/autohouse.js b/server/data/autohouse.js index 265187796..679a455b9 100644 --- a/server/data/autohouse.js +++ b/server/data/autohouse.js @@ -57,7 +57,7 @@ exports.default = async (req, res) => { bodyshopid: bodyshop.id, start: start ? moment(start).startOf("day") - : moment().subtract(3, "days").startOf("day"), + : moment().subtract(5, "days").startOf("day"), ...(end && { end: moment(end).startOf("day") }), } ); @@ -316,6 +316,10 @@ const CreateRepairOrderTag = (job, errorCallback) => { moment(job.date_open) .tz(job.bodyshop.timezone) .format(AhDateFormat)) || + (job.created_at && + moment(job.created_at) + .tz(job.bodyshop.timezone) + .format(AhDateFormat)) || "", ScheduledArrivalDate: (job.scheduled_in && diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index 1f984cde5..fdae6eb5e 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -623,6 +623,7 @@ exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshop } jobs(where: {_and: [{converted: {_eq: true}}, {updated_at: {_gt: $start}}, {updated_at: {_lte: $end}}, {shopid: {_eq: $bodyshopid}}]}) { id + created_at ro_number status est_ct_fn