From f8e65ada7600a51ee13a67ba298099a03c38997e Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Wed, 30 Oct 2024 14:06:00 -0700 Subject: [PATCH] IO-3001 Initial adjustments to totals. --- .../job-totals.table.totals.component.jsx | 25 ++++++++---- .../jobs-available-table.container.jsx | 39 ++++++++++--------- job-totals-testing-util.js | 19 ++++++--- server/graphql-client/queries.js | 1 + server/job/job-totals-USA.js | 39 +++++++++++++++++++ 5 files changed, 92 insertions(+), 31 deletions(-) diff --git a/client/src/components/job-totals-table/job-totals.table.totals.component.jsx b/client/src/components/job-totals-table/job-totals.table.totals.component.jsx index a8b5e0604..be92d5994 100644 --- a/client/src/components/job-totals-table/job-totals.table.totals.component.jsx +++ b/client/src/components/job-totals-table/job-totals.table.totals.component.jsx @@ -102,7 +102,7 @@ export function JobTotalsTableTotals({ bodyshop, job }) { total: job.job_totals.totals.us_sales_tax_breakdown.ty4Tax }, { - key: `${bodyshop.md_responsibility_centers.taxes.tax_ty5?.tax_type5 || "TT"} - ${[ + key: `${bodyshop.md_responsibility_centers.taxes.tax_ty5?.tax_type5 || "Adj."} - ${[ job.cieca_pft.ty5_rate1, job.cieca_pft.ty5_rate2, job.cieca_pft.ty5_rate3, @@ -113,6 +113,14 @@ export function JobTotalsTableTotals({ bodyshop, job }) { .join(", ")}%`, total: job.job_totals.totals.us_sales_tax_breakdown.ty5Tax }, + ...(job.job_totals?.totals?.ttl_tax_adjustment + ? [ + { + key: `Adj.`, + total: job.job_totals?.totals?.ttl_tax_adjustment + } + ] + : []), { key: t("jobs.labels.total_sales_tax"), bold: true, @@ -121,6 +129,7 @@ export function JobTotalsTableTotals({ bodyshop, job }) { .add(Dinero(job.job_totals.totals.us_sales_tax_breakdown.ty3Tax)) .add(Dinero(job.job_totals.totals.us_sales_tax_breakdown.ty4Tax)) .add(Dinero(job.job_totals.totals.us_sales_tax_breakdown.ty5Tax)) + .add(Dinero(job.job_totals.totals.ttl_tax_adjustment)) .toJSON() } ].filter((item) => item.total.amount !== 0) @@ -141,14 +150,16 @@ export function JobTotalsTableTotals({ bodyshop, job }) { key: t("jobs.fields.ded_amt"), total: job.job_totals.totals.custPayable.deductible }, - ...(InstanceRenderManager({ - imex: [{ - key: t("jobs.fields.federal_tax_payable"), - total: job.job_totals.totals.custPayable.federal_tax - }], + ...InstanceRenderManager({ + imex: [ + { + key: t("jobs.fields.federal_tax_payable"), + total: job.job_totals.totals.custPayable.federal_tax + } + ], rome: [], promanager: "USE_ROME" - })), + }), { key: t("jobs.fields.other_amount_payable"), total: job.job_totals.totals.custPayable.other_customer_amount diff --git a/client/src/components/jobs-available-table/jobs-available-table.container.jsx b/client/src/components/jobs-available-table/jobs-available-table.container.jsx index d9964d090..3a3b0d7e8 100644 --- a/client/src/components/jobs-available-table/jobs-available-table.container.jsx +++ b/client/src/components/jobs-available-table/jobs-available-table.container.jsx @@ -1,6 +1,6 @@ import { gql, useApolloClient, useLazyQuery, useMutation, useQuery } from "@apollo/client"; import { useSplitTreatments } from "@splitsoftware/splitio-react"; -import { Col, Row, notification } from "antd"; +import { Button, Col, Row, notification } from "antd"; import Axios from "axios"; import _ from "lodash"; import queryString from "query-string"; @@ -409,24 +409,24 @@ export function JobsAvailableContainer({ bodyshop, currentUser, insertAuditTrail setSchComp={setSchComp} /> { - // currentUser.email.includes("@rome.") || - // currentUser.email.includes("@imex.") ? ( - // - // ) : null + currentUser.email.includes("@rome.") || + currentUser.email.includes("@imex.") ? ( + + ) : null } @@ -617,6 +617,7 @@ function ResolveCCCLineIssues(estData, bodyshop) { // ` | Act Price delete. (prev act price = ${estData.joblines.data[indexInEstData].act_price})`; estData.joblines.data[indexInEstData].act_price = 0; estData.joblines.data[indexInEstData].db_price = 0; + estData.joblines.data[indexInEstData].part_type = null; }); }); } diff --git a/job-totals-testing-util.js b/job-totals-testing-util.js index e2018661f..b2615b485 100644 --- a/job-totals-testing-util.js +++ b/job-totals-testing-util.js @@ -1,9 +1,7 @@ const path = require("path"); const Dinero = require("dinero.js"); const { gql } = require("graphql-request"); -const queries = require("./server/graphql-client/queries"); -const GraphQLClient = require("graphql-request").GraphQLClient; -const logger = require("./server/utils/logger"); + const AxiosLib = require("axios").default; const axios = AxiosLib.create(); @@ -16,8 +14,9 @@ require("dotenv").config({ }); async function RunTheTest() { - const bodyshopids = ["b501bb82-22b2-493a-8a0f-152938194869"]; - const bearerToken = `Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImJhNjI1OTZmNTJmNTJlZDQ0MDQ5Mzk2YmU3ZGYzNGQyYzY0ZjQ1M2UiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiUm9tZSBEZXZlbG9wbWVudCIsImh0dHBzOi8vaGFzdXJhLmlvL2p3dC9jbGFpbXMiOnsieC1oYXN1cmEtZGVmYXVsdC1yb2xlIjoidXNlciIsIngtaGFzdXJhLWFsbG93ZWQtcm9sZXMiOlsidXNlciJdLCJ4LWhhc3VyYS11c2VyLWlkIjoidDZZbTFORGxDRE9QWnIzRjliZ3VXSDRMaFNYMiJ9LCJpb2FkbWluIjp0cnVlLCJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vcm9tZS1wcm9kLTEiLCJhdWQiOiJyb21lLXByb2QtMSIsImF1dGhfdGltZSI6MTcxMDk1MTg1MCwidXNlcl9pZCI6InQ2WW0xTkRsQ0RPUFpyM0Y5Ymd1V0g0TGhTWDIiLCJzdWIiOiJ0NlltMU5EbENET1BacjNGOWJndVdINExoU1gyIiwiaWF0IjoxNzExNTczODI1LCJleHAiOjE3MTE1Nzc0MjUsImVtYWlsIjoicGF0cmlja0Byb21lLmRldiIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJlbWFpbCI6WyJwYXRyaWNrQHJvbWUuZGV2Il19LCJzaWduX2luX3Byb3ZpZGVyIjoicGFzc3dvcmQifX0.0kBySA9tJznLYj8TtncHGVWJO0IcmLKP2G1UyyXwaj45kTa25bjT9RWjM-NslX_zjOvrvmQZzisFAb6M1Jf6geNjOMLIqb8bhihhzEZK4CcRfvjT6cpZxnOO2Dp_1Y5OePbvOBS_GlfdsovVWa84OLuhYC5G_3QwHT8_2Cttz4CbrC6M_vd7QsGODJYBbVKMhOdZhzpNq7AbOUh3749WRjLMMobpnZDrmQlsyg3PAqtX1FHO25WQS2rma9QahGDSY736JfbkuZJ2XbNn0axEGpK7RQLUcuRkFUlfKqYplNbR_e1Q3kEfRAZpxBPXZysrDcbDNhbkWCoTmJ3fle55OA`; + const bodyshopids = ["71f8494c-89f0-43e0-8eb2-820b52d723bc"]; + const bearerToken = `Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImU2YWMzNTcyNzY3ZGUyNjE0ZmM1MTA4NjMzMDg3YTQ5MjMzMDNkM2IiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiUGF0cmljayBGaWMgKERFVikiLCJodHRwczovL2hhc3VyYS5pby9qd3QvY2xhaW1zIjp7IngtaGFzdXJhLWRlZmF1bHQtcm9sZSI6InVzZXIiLCJ4LWhhc3VyYS1hbGxvd2VkLXJvbGVzIjpbInVzZXIiXSwieC1oYXN1cmEtdXNlci1pZCI6ImhOSjhBRHB0REhRQkRFcXNCOFFNWVRqaURuZjEifSwiaXNzIjoiaHR0cHM6Ly9zZWN1cmV0b2tlbi5nb29nbGUuY29tL2ltZXgtZGV2IiwiYXVkIjoiaW1leC1kZXYiLCJhdXRoX3RpbWUiOjE3MzAxMzIwMjksInVzZXJfaWQiOiJoTko4QURwdERIUUJERXFzQjhRTVlUamlEbmYxIiwic3ViIjoiaE5KOEFEcHRESFFCREVxc0I4UU1ZVGppRG5mMSIsImlhdCI6MTczMDE1MjI5NiwiZXhwIjoxNzMwMTU1ODk2LCJlbWFpbCI6InBhdHJpY2tAaW1leC5kZXYiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZW1haWwiOlsicGF0cmlja0BpbWV4LmRldiJdfSwic2lnbl9pbl9wcm92aWRlciI6InBhc3N3b3JkIn19.Fgf_itlA2-CMd2sTYBNjD-g8Jt3wPLW_YWbDtMn8tm-doSPhU7-RHSHON7Vz6o1m6S3x88RODt2uxSifxfgjqXYC_yJiUVEnHp7xokI1X-7EIbv6S_jfD1gKq7gNehkKkm0QETvAX_wmL0hEZyZnBacxjkSZzDZgbfKfj8U2CAU1nY6O5vk90q0HdTrt98RL37Uiz62ftAdBZCLSpZ1AS1hGa1S3NDMhWbWvBVCMY59bhM8lreH-Q1znlSe9jNXbElvrKofSc3Jz2WeTIj3Ifq5Ev-p4rIOoILww8kE9ZKp4s28JXMdrpRnqFM7tufggjZaKx5g1_rwRnzl-dk50RQ`; + const { jobs } = await client.request( gql` query GET_JOBS($bodyshopids: [uuid!]!) { @@ -86,6 +85,16 @@ async function RunTheTest() { } else { result.result = "PASS"; } + const subcalcTotal = newjob.job_totals.totals.subtotal.amount; + const subttlTotal = newjob.cieca_ttl.data.n_ttl_amt * 100; + result.subdifference = (subcalcTotal - subttlTotal) / 100; + + if (Math.abs(subcalcTotal - subttlTotal) > 3) { + //Diff is greater than 5 cents. Fail it. + result.subresult = "***FAIL***"; + } else { + result.subresult = "PASS"; + } // console.log(`${result.result} => RO ${job.ro_number} - ${job.id} `); results.push(result); diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index 99e37bebe..e5b83720d 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -1365,6 +1365,7 @@ exports.GET_JOB_BY_PK = `query GET_JOB_BY_PK($id: uuid!) { cieca_pfl cieca_pft cieca_pfo + cieca_ttl vehicle { id notes diff --git a/server/job/job-totals-USA.js b/server/job/job-totals-USA.js index 4e123850e..d65ed80ef 100644 --- a/server/job/job-totals-USA.js +++ b/server/job/job-totals-USA.js @@ -68,6 +68,45 @@ async function TotalsServerSide(req, res) { ret.additional = CalculateAdditional(job); ret.totals = CalculateTaxesTotals(job, ret); + // Sub total scrubbbing. + const emsTotal = + job.cieca_ttl.data.n_ttl_amt === job.cieca_ttl.data.g_ttl_amt //It looks like sometimes, gross and net are the same, but they shouldn't be. + ? job.cieca_ttl.data.g_ttl_amt - job.cieca_ttl.data.g_tax //If they are, adjust the gross total down by the tax amount. + : job.cieca_ttl.data.n_ttl_amt; + const ttlDifference = emsTotal - ret.totals.subtotal.getAmount() / 100; + + if (Math.abs(ttlDifference) > 0.01) { + //If difference is greater than a pennny, we need to adjust it. + ret.totals.ttl_adjustment = Dinero({ amount: Math.round(ttlDifference * 100) }); + ret.totals.subtotal = ret.totals.subtotal.add(ret.totals.ttl_adjustment); + ret.totals.total_repairs = ret.totals.total_repairs.add(ret.totals.ttl_adjustment); + ret.totals.net_repairs = ret.totals.net_repairs.add(ret.totals.ttl_adjustment); + logger.log("job-totals-USA-ttl-adj", "DEBUG", null, job.id, { + adjAmount: ttlDifference + }); + } + + //Taxes Scrubbing + const emsTaxTotal = job.cieca_ttl.data.g_tax; + const totalUsTaxes = + (ret.totals.us_sales_tax_breakdown.ty1Tax.getAmount() + + ret.totals.us_sales_tax_breakdown.ty2Tax.getAmount() + + ret.totals.us_sales_tax_breakdown.ty3Tax.getAmount() + + ret.totals.us_sales_tax_breakdown.ty4Tax.getAmount() + + ret.totals.us_sales_tax_breakdown.ty5Tax.getAmount()) / + 100; + const ttlTaxDifference = emsTaxTotal - totalUsTaxes; + + if (Math.abs(ttlTaxDifference) > 0.01) { + //If difference is greater than a pennny, we need to adjust it. + ret.totals.ttl_tax_adjustment = Dinero({ amount: Math.round(ttlTaxDifference * 100) }); + ret.totals.total_repairs = ret.totals.total_repairs.add(ret.totals.ttl_tax_adjustment); + ret.totals.net_repairs = ret.totals.net_repairs.add(ret.totals.ttl_tax_adjustment); + logger.log("job-totals-USA-ttl-tax-adj", "DEBUG", null, job.id, { + adjAmount: ttlTaxDifference + }); + } + return ret; } catch (error) { logger.log("job-totals-ssu-USA-error", "ERROR", req.user?.email, job.id, {