diff --git a/client/src/components/bill-form/bill-form.component.jsx b/client/src/components/bill-form/bill-form.component.jsx index 6675990b0..b042718b8 100644 --- a/client/src/components/bill-form/bill-form.component.jsx +++ b/client/src/components/bill-form/bill-form.component.jsx @@ -50,6 +50,7 @@ export function BillFormComponent({ job, loadOutstandingReturns, loadInventory, + preferredMake, }) { const { t } = useTranslation(); const client = useApolloClient(); @@ -185,6 +186,7 @@ export function BillFormComponent({ diff --git a/client/src/components/bill-form/bill-form.container.jsx b/client/src/components/bill-form/bill-form.container.jsx index 07a70e4c5..d77e0d29c 100644 --- a/client/src/components/bill-form/bill-form.container.jsx +++ b/client/src/components/bill-form/bill-form.container.jsx @@ -1,16 +1,16 @@ import { useLazyQuery, useQuery } from "@apollo/client"; +import { useTreatments } from "@splitsoftware/splitio-react"; import React from "react"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; +import { QUERY_OUTSTANDING_INVENTORY } from "../../graphql/inventory.queries"; import { GET_JOB_LINES_TO_ENTER_BILL } from "../../graphql/jobs-lines.queries"; +import { QUERY_UNRECEIVED_LINES } from "../../graphql/parts-orders.queries"; import { SEARCH_VENDOR_AUTOCOMPLETE } from "../../graphql/vendors.queries"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import BillFormComponent from "./bill-form.component"; import BillCmdReturnsTableComponent from "../bill-cm-returns-table/bill-cm-returns-table.component"; -import { QUERY_UNRECEIVED_LINES } from "../../graphql/parts-orders.queries"; import BillInventoryTable from "../bill-inventory-table/bill-inventory-table.component"; -import { QUERY_OUTSTANDING_INVENTORY } from "../../graphql/inventory.queries"; -import { useTreatments } from "@splitsoftware/splitio-react"; +import BillFormComponent from "./bill-form.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, @@ -59,6 +59,7 @@ export function BillFormContainer({ disableInvNumber={disableInvNumber} loadOutstandingReturns={loadOutstandingReturns} loadInventory={loadInventory} + preferredMake={lineData ? lineData.jobs_by_pk.v_make_desc : null} /> {!billEdit && ( { if (value.type.startsWith("image")) { acc.push({ - //src: GenerateSrcUrl(value), + fullsize: GenerateSrcUrl(value), src: GenerateThumbUrl(value), thumbnailHeight: 225, thumbnailWidth: 225, diff --git a/client/src/components/schedule-job-modal/schedule-job-modal.container.jsx b/client/src/components/schedule-job-modal/schedule-job-modal.container.jsx index ed3eace05..c8b85be38 100644 --- a/client/src/components/schedule-job-modal/schedule-job-modal.container.jsx +++ b/client/src/components/schedule-job-modal/schedule-job-modal.container.jsx @@ -16,13 +16,17 @@ import { QUERY_LBR_HRS_BY_PK, UPDATE_JOBS } from "../../graphql/jobs.queries"; import { setEmailOptions } from "../../redux/email/email.actions"; import { toggleModalVisible } from "../../redux/modals/modals.actions"; import { selectSchedule } from "../../redux/modals/modals.selectors"; -import { selectBodyshop } from "../../redux/user/user.selectors"; +import { + selectBodyshop, + selectCurrentUser, +} from "../../redux/user/user.selectors"; import { TemplateList } from "../../utils/TemplateConstants"; import ScheduleJobModalComponent from "./schedule-job-modal.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, scheduleModal: selectSchedule, + currentUser: selectCurrentUser, }); const mapDispatchToProps = (dispatch) => ({ toggleModalVisible: () => dispatch(toggleModalVisible("schedule")), @@ -34,6 +38,7 @@ export function ScheduleJobModalContainer({ bodyshop, toggleModalVisible, setEmailOptions, + currentUser, }) { const { visible, context, actions } = scheduleModal; const { jobId, job, previousEvent } = context; @@ -122,6 +127,7 @@ export function ScheduleJobModalContainer({ end: moment(values.start).add(bodyshop.appt_length || 60, "minutes"), color: values.color, note: values.note, + created_by: currentUser.email, }, jobId: jobId, altTransport: values.alt_transport, diff --git a/client/src/graphql/jobs-lines.queries.js b/client/src/graphql/jobs-lines.queries.js index 4ee5e5515..d0f0d7e9f 100644 --- a/client/src/graphql/jobs-lines.queries.js +++ b/client/src/graphql/jobs-lines.queries.js @@ -283,6 +283,7 @@ export const GET_JOB_LINES_TO_ENTER_BILL = gql` id ro_number } + v_make_desc } } `; diff --git a/client/src/graphql/vendors.queries.js b/client/src/graphql/vendors.queries.js index 7fddbba5b..ce7c08507 100644 --- a/client/src/graphql/vendors.queries.js +++ b/client/src/graphql/vendors.queries.js @@ -104,6 +104,7 @@ export const SEARCH_VENDOR_AUTOCOMPLETE = gql` id cost_center active + favorite } } `; diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index f98029cea..d87a6f622 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -2692,6 +2692,7 @@ "open_orders_csr": "Open Orders by CSR", "open_orders_estimator": "Open Orders by Estimator", "open_orders_ins_co": "Open Orders by Insurance Company", + "open_orders_referral": "Open Orders by Referral Source", "open_orders_specific_csr": "Open Orders filtered by CSR", "open_orders_status": "Open Orders by Status", "parts_backorder": "IOU Parts List", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index a7a52d817..94e1fff3f 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -2692,6 +2692,7 @@ "open_orders_csr": "", "open_orders_estimator": "", "open_orders_ins_co": "", + "open_orders_referral": "", "open_orders_specific_csr": "", "open_orders_status": "", "parts_backorder": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 0c08163c7..e3f162e0b 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -2692,6 +2692,7 @@ "open_orders_csr": "", "open_orders_estimator": "", "open_orders_ins_co": "", + "open_orders_referral": "", "open_orders_specific_csr": "", "open_orders_status": "", "parts_backorder": "", diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js index 79e9a4945..a3a518878 100644 --- a/client/src/utils/TemplateConstants.js +++ b/client/src/utils/TemplateConstants.js @@ -1591,6 +1591,19 @@ export const TemplateList = (type, context) => { }, group: "jobs", }, + open_orders_specific_csr: { + title: i18n.t("reportcenter.templates.open_orders_specific_csr"), + description: "", + subject: i18n.t("reportcenter.templates.open_orders_specific_csr"), + key: "open_orders_specific_csr", + idtype: "employee", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.jobs"), + field: i18n.t("jobs.fields.date_open"), + }, + group: "jobs", + }, open_orders_estimator: { title: i18n.t("reportcenter.templates.open_orders_estimator"), description: "", @@ -1617,12 +1630,12 @@ export const TemplateList = (type, context) => { }, group: "jobs", }, - open_orders_specific_csr: { - title: i18n.t("reportcenter.templates.open_orders_specific_csr"), + open_orders_referral: { + title: i18n.t("reportcenter.templates.open_orders_referral"), description: "", - subject: i18n.t("reportcenter.templates.open_orders_specific_csr"), - key: "open_orders_specific_csr", - idtype: "employee", + subject: i18n.t("reportcenter.templates.open_orders_referral"), + key: "open_orders_referral", + //idtype: "vendor", disabled: false, rangeFilter: { object: i18n.t("reportcenter.labels.objects.jobs"), diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml index 701637a9c..69f30251b 100644 --- a/hasura/metadata/tables.yaml +++ b/hasura/metadata/tables.yaml @@ -110,6 +110,7 @@ - canceled - color - created_at + - created_by - end - id - isintake @@ -128,6 +129,7 @@ - canceled - color - created_at + - created_by - end - id - isintake @@ -156,6 +158,7 @@ - canceled - color - created_at + - created_by - end - id - isintake diff --git a/hasura/migrations/1698709322872_alter_table_public_appointments_add_column_created_by/down.sql b/hasura/migrations/1698709322872_alter_table_public_appointments_add_column_created_by/down.sql new file mode 100644 index 000000000..9562a8171 --- /dev/null +++ b/hasura/migrations/1698709322872_alter_table_public_appointments_add_column_created_by/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."appointments" add column "created_by" text +-- null; diff --git a/hasura/migrations/1698709322872_alter_table_public_appointments_add_column_created_by/up.sql b/hasura/migrations/1698709322872_alter_table_public_appointments_add_column_created_by/up.sql new file mode 100644 index 000000000..ef7952cf3 --- /dev/null +++ b/hasura/migrations/1698709322872_alter_table_public_appointments_add_column_created_by/up.sql @@ -0,0 +1,2 @@ +alter table "public"."appointments" add column "created_by" text + null; diff --git a/server/data/claimscorp.js b/server/data/claimscorp.js index a854ff84f..60943aed3 100644 --- a/server/data/claimscorp.js +++ b/server/data/claimscorp.js @@ -17,7 +17,7 @@ let Client = require("ssh2-sftp-client"); const client = require("../graphql-client/graphql-client").client; const { sendServerEmail } = require("../email/sendemail"); const CCDineroFormat = "0,0.00"; -const AhDateFormat = "MMDDYYYY"; +const AhDateFormat = "MM/DD/YYYY"; const repairOpCodes = ["OP4", "OP9", "OP10"]; const replaceOpCodes = ["OP2", "OP5", "OP11", "OP12"]; @@ -104,7 +104,7 @@ exports.default = async (req, res) => { allxmlsToUpload.push({ count: claimsCorpObject.DataFeed.ShopInfo.RO.length, xml: ret, - filename: `${bodyshop.claimscorpid}-MIS-${moment().format( + filename: `${bodyshop.claimscorpid}-${moment().format( "YYYYMMDDTHHMMss" )}.xml`, }); @@ -245,7 +245,7 @@ const CreateRepairOrderTag = (job, errorCallback) => { try { const ret = { - RONumber: job.ro_number, + RoNumber: job.ro_number, Customer: { CustomerZip: (job.ownr_zip && job.ownr_zip.substring(0, 3)) || "", CustomerState: job.ownr_st || "", @@ -312,7 +312,7 @@ const CreateRepairOrderTag = (job, errorCallback) => { (job.date_estimated && moment(job.date_estimated).format(AhDateFormat)) || "", - DateofLoss: + DateLoss: (job.loss_date && moment(job.loss_date).format(AhDateFormat)) || "", DateFNOL: "", DateContact: "", @@ -384,7 +384,7 @@ const CreateRepairOrderTag = (job, errorCallback) => { "", BilledDate: "", PaidInFullDate: "", - RoStatus: job.tlos_ind + ROStatus: job.tlos_ind ? "TOT" : StatusMapping(job.status, job.bodyshop.md_ro_statuses), }, @@ -397,9 +397,7 @@ const CreateRepairOrderTag = (job, errorCallback) => { Paint: Dinero(job.job_totals.rates.lar.total).toFormat(CCDineroFormat), Prep: Dinero().toFormat(CCDineroFormat), Frame: Dinero(job.job_totals.rates.laf.total).toFormat(CCDineroFormat), - Mechanical: Dinero(job.job_totals.rates.lam.total).toFormat( - CCDineroFormat - ), + Mech: Dinero(job.job_totals.rates.lam.total).toFormat(CCDineroFormat), Glass: Dinero(job.job_totals.rates.lag.total).toFormat(CCDineroFormat), Elec: Dinero(job.job_totals.rates.lae.total).toFormat(CCDineroFormat), Detail: detailAdjustments.amount.toFormat(CCDineroFormat), @@ -481,7 +479,7 @@ const CreateRepairOrderTag = (job, errorCallback) => { .filter((line) => repairOpCodes.includes(line.lbr_op)) .reduce((acc, val) => acc + val.mod_lb_hrs, 0) .toFixed(2), - BodyReplaceHours: job.joblines + BodyReplacehours: job.joblines .filter((line) => replaceOpCodes.includes(line.lbr_op)) .reduce((acc, val) => acc + val.mod_lb_hrs, 0) .toFixed(2), @@ -523,7 +521,7 @@ const CreateRepairOrderTag = (job, errorCallback) => { AM: repairCosts.PartsAMCost.toFormat(CCDineroFormat), MechParts: Dinero().toFormat(CCDineroFormat), OtherParts: Dinero().toFormat(CCDineroFormat), //Check Synergy - OtherCosts: repairCosts.PartsOtherCost.toFormat(CCDineroFormat), + OtherCost: repairCosts.PartsOtherCost.toFormat(CCDineroFormat), Sublet: repairCosts.SubletTotalCost.toFormat(CCDineroFormat), Towing: repairCosts.TowingTotalCost.toFormat(CCDineroFormat), Storage: repairCosts.StorageTotalCost.toFormat(CCDineroFormat), diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index de50f7d93..4f627553a 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -1949,8 +1949,7 @@ exports.ACTIVE_SHOP_BY_USER = `query ACTIVE_SHOP_BY_USER($user: String) { id shopid } -} -`; +}`; exports.QUERY_JOB_PAYROLL_DATA = `query QUERY_JOB_PAYROLL_DATA($id: uuid!) { jobs_by_pk(id: $id) {