From d8447b1197945b976e37de572c22c15ed7e0317b Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 11 Jul 2022 14:23:27 -0700 Subject: [PATCH 1/8] Resolve phone number parsing issue on messaging. --- client/src/redux/messaging/messaging.sagas.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/client/src/redux/messaging/messaging.sagas.js b/client/src/redux/messaging/messaging.sagas.js index fb1c7d4db..f2684a171 100644 --- a/client/src/redux/messaging/messaging.sagas.js +++ b/client/src/redux/messaging/messaging.sagas.js @@ -1,10 +1,10 @@ import axios from "axios"; -import phone from "phone"; +import parsePhoneNumber from "libphonenumber-js"; import { all, call, put, select, takeLatest } from "redux-saga/effects"; import { logImEXEvent } from "../../firebase/firebase.utils"; import { CONVERSATION_ID_BY_PHONE, - CREATE_CONVERSATION, + CREATE_CONVERSATION } from "../../graphql/conversations.queries"; import { INSERT_CONVERSATION_TAG } from "../../graphql/job-conversations.queries"; import client from "../../utils/GraphQLClient"; @@ -12,7 +12,7 @@ import { selectBodyshop } from "../user/user.selectors"; import { sendMessageFailure, sendMessageSuccess, - setSelectedConversation, + setSelectedConversation } from "./messaging.actions"; import MessagingActionTypes from "./messaging.types"; @@ -33,13 +33,14 @@ export function* openChatByPhone({ payload }) { logImEXEvent("messaging_open_by_phone"); const { phone_num, jobid } = payload; + const p = parsePhoneNumber(phone_num, "CA"); const bodyshop = yield select(selectBodyshop); try { const { data: { conversations }, } = yield client.query({ query: CONVERSATION_ID_BY_PHONE, - variables: { phone: phone(phone_num).phoneNumber }, + variables: { phone: p.number }, }); if (conversations.length === 0) { @@ -52,7 +53,7 @@ export function* openChatByPhone({ payload }) { variables: { conversation: [ { - phone_num: phone(phone_num).phoneNumber, + phone_num: p.number, bodyshopid: bodyshop.id, job_conversations: jobid ? { data: { jobid: jobid } } : null, }, From 7022609e2218c20ae50b571a7f774f87214b1dd0 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 11 Jul 2022 15:01:57 -0700 Subject: [PATCH 2/8] Parts Quote create order first. --- .../parts-order-modal.container.jsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 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 ec7cc9470..643d39200 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 @@ -101,7 +101,7 @@ export function PartsOrderModalContainer({ logImEXEvent("parts_order_insert"); setSaving(true); let insertResult; - if (!is_quote) { + insertResult = await insertPartOrder({ variables: { po: [ @@ -112,16 +112,18 @@ export function PartsOrderModalContainer({ jobid: jobId, user_email: currentUser.email, return: isReturn, - status: bodyshop.md_order_statuses.default_ordered || "Ordered*", + status: is_quote + ? bodyshop.md_order_statuses.default_quote || "Quote" + : bodyshop.md_order_statuses.default_ordered || "Ordered*", }, ], }, refetchQueries: ["QUERY_PARTS_BILLS_BY_JOBID"], }); - if (!!insertResult.error) { + if (!!insertResult.errors) { notification["error"]({ message: t("parts_orders.errors.creating"), - description: JSON.stringify(insertResult.error), + description: JSON.stringify(insertResult.errors), }); return; } @@ -140,7 +142,7 @@ export function PartsOrderModalContainer({ insertResult.data.insert_parts_orders.returning[0].order_number ), }); - } + const jobLinesResult = await updateJobLines({ variables: { From 4802c1abe8de17e033877296295920a8aa58ed14 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 12 Jul 2022 15:42:00 -0700 Subject: [PATCH 3/8] IO-1937 Update email sizing error message. --- .../email-documents/email-documents.component.jsx | 5 +++-- .../email-overlay/email-overlay.component.jsx | 8 ++++++-- .../email-overlay/email-overlay.container.jsx | 11 +++++++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/client/src/components/email-documents/email-documents.component.jsx b/client/src/components/email-documents/email-documents.component.jsx index 7607e23e4..a47e78de9 100644 --- a/client/src/components/email-documents/email-documents.component.jsx +++ b/client/src/components/email-documents/email-documents.component.jsx @@ -23,7 +23,7 @@ export default connect( export function EmailDocumentsComponent({ emailConfig, - + form, selectedMediaState, }) { const { t } = useTranslation(); @@ -48,7 +48,8 @@ export function EmailDocumentsComponent({ {selectedMedia && selectedMedia .filter((s) => s.isSelected) - .reduce((acc, val) => (acc = acc + val.size), 0) >= 9961472 ? ( + .reduce((acc, val) => (acc = acc + val.size), 0) >= + 10485760 - new Blob([form.getFieldValue("html")]).size ? (
{t("general.errors.sizelimit")}
) : null} {data && ( diff --git a/client/src/components/email-overlay/email-overlay.component.jsx b/client/src/components/email-overlay/email-overlay.component.jsx index 11dd30b2a..5fd70a838 100644 --- a/client/src/components/email-overlay/email-overlay.component.jsx +++ b/client/src/components/email-overlay/email-overlay.component.jsx @@ -162,7 +162,10 @@ export function EmailOverlayComponent({ {!bodyshop.uselocalmediaserver && ( - + )} @@ -188,7 +191,8 @@ export function EmailOverlayComponent({ 0 ); - const limit = 9961472; + const limit = + 10485760 - new Blob([form.getFieldValue("html")]).size; if (totalSize > limit) { return Promise.reject(t("general.errors.sizelimit")); diff --git a/client/src/components/email-overlay/email-overlay.container.jsx b/client/src/components/email-overlay/email-overlay.container.jsx index 9276f35ee..b6728b698 100644 --- a/client/src/components/email-overlay/email-overlay.container.jsx +++ b/client/src/components/email-overlay/email-overlay.container.jsx @@ -168,7 +168,6 @@ export function EmailOverlayContainer({ useEffect(() => { if (modalVisible) render(); }, [modalVisible]); // eslint-disable-line react-hooks/exhaustive-deps - return ( { toggleEmailOverlayVisible(); }} - okButtonProps={{ loading: sending }} + okButtonProps={{ + loading: sending, + disabled: + selectedMedia && + ( (selectedMedia + .filter((s) => s.isSelected) + .reduce((acc, val) => (acc = acc + val.size), 0) >= + 10485760 - new Blob([form.getFieldValue("html")]).size) || selectedMedia.filter((s) => s.isSelected).length > 10), + }} >
{loading && ( From 7a0d5d712a2dcb1c3f5dce4b2fab1d6fe4f544a4 Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Wed, 13 Jul 2022 11:35:21 -0700 Subject: [PATCH 4/8] IO-1906 Remove bin from bill edit. --- .../bill-form/bill-form.component.jsx | 20 ++++---- .../bill-form/bill-form.lines.component.jsx | 47 ++++++++++--------- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/client/src/components/bill-form/bill-form.component.jsx b/client/src/components/bill-form/bill-form.component.jsx index 12617db5b..3ff123743 100644 --- a/client/src/components/bill-form/bill-form.component.jsx +++ b/client/src/components/bill-form/bill-form.component.jsx @@ -314,15 +314,17 @@ export function BillFormComponent({ > - - - + {!billEdit && ( + + + + )} ), }, - - { - title: t("billlines.fields.location"), - dataIndex: "location", - editable: true, - label: t("billlines.fields.location"), - formItemProps: (field) => { - return { - key: `${field.index}location`, - name: [field.name, "location"], - }; - }, - formInput: (record, index) => ( - - ), - }, + ...(billEdit + ? [] + : [ + { + title: t("billlines.fields.location"), + dataIndex: "location", + editable: true, + label: t("billlines.fields.location"), + formItemProps: (field) => { + return { + key: `${field.index}location`, + name: [field.name, "location"], + }; + }, + formInput: (record, index) => ( + + ), + }, + ]), { title: t("billlines.labels.deductedfromlbr"), dataIndex: "deductedfromlbr", From 05a0ee30f4443f8dbab4b5b3ed81d98629525260 Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Wed, 13 Jul 2022 13:50:13 -0700 Subject: [PATCH 5/8] IO-1972 add table for converted parts to labor lines. --- bodyshop_translations.babel | 21 ++++ .../labor-allocations-table.component.jsx | 115 +++++++++++++++--- client/src/graphql/jobs-lines.queries.js | 1 + client/src/translations/en_us/common.json | 1 + client/src/translations/es/common.json | 1 + client/src/translations/fr/common.json | 1 + 6 files changed, 126 insertions(+), 14 deletions(-) diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index df2b5f8be..f2c3b671a 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -26551,6 +26551,27 @@ + + convertedtolabor + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + cost false diff --git a/client/src/components/labor-allocations-table/labor-allocations-table.component.jsx b/client/src/components/labor-allocations-table/labor-allocations-table.component.jsx index cecc22795..9ba78c922 100644 --- a/client/src/components/labor-allocations-table/labor-allocations-table.component.jsx +++ b/client/src/components/labor-allocations-table/labor-allocations-table.component.jsx @@ -1,6 +1,6 @@ import { EditFilled } from "@ant-design/icons"; -import { Card, Space, Table } from "antd"; -import React, { useEffect, useState } from "react"; +import { Card, Space, Table, Row, Col } from "antd"; +import React, { useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; @@ -11,6 +11,8 @@ import LaborAllocationsAdjustmentEdit from "../labor-allocations-adjustment-edit import "./labor-allocations-table.styles.scss"; import { CalculateAllocationsTotals } from "./labor-allocations-table.utility"; import _ from "lodash"; +import CurrencyFormatter from "../../utils/CurrencyFormatter"; + const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, technician: selectTechnician, @@ -43,6 +45,11 @@ export function LaborAllocationsTable({ if (!jobId) setTotals([]); }, [joblines, timetickets, bodyshop, adjustments, jobId]); + const convertedLines = useMemo( + () => joblines && joblines.filter((j) => j.convertedtolbr), + [joblines] + ); + const columns = [ { title: t("timetickets.fields.cost_center"), @@ -114,24 +121,104 @@ export function LaborAllocationsTable({ ), }, ]; + const convertedTableCols = [ + { + title: t("joblines.fields.line_desc"), + dataIndex: "line_desc", + key: "line_desc", + ellipsis: true, + }, + { + title: t("joblines.fields.op_code_desc"), + dataIndex: "op_code_desc", + key: "op_code_desc", + ellipsis: true, + render: (text, record) => + `${record.op_code_desc || ""}${ + record.alt_partm ? ` ${record.alt_partm}` : "" + }`, + }, + + { + title: t("joblines.fields.act_price"), + dataIndex: "act_price", + key: "act_price", + ellipsis: true, + render: (text, record) => ( + <> + + {record.db_ref === "900510" || record.db_ref === "900511" + ? record.prt_dsmk_m + : record.act_price} + + {record.prt_dsmk_p && record.prt_dsmk_p !== 0 ? ( + {`(${record.prt_dsmk_p}%)`} + ) : ( + <> + )} + + ), + }, + { + title: t("joblines.fields.part_qty"), + dataIndex: "part_qty", + key: "part_qty", + }, + + { + title: t("joblines.fields.mod_lbr_ty"), + dataIndex: "mod_lbr_ty", + key: "mod_lbr_ty", + render: (text, record) => + record.mod_lbr_ty + ? t(`joblines.fields.lbr_types.${record.mod_lbr_ty}`) + : null, + }, + { + title: t("joblines.fields.mod_lb_hrs"), + dataIndex: "mod_lb_hrs", + key: "mod_lb_hrs", + }, + ]; const handleTableChange = (pagination, filters, sorter) => { setState({ ...state, filteredInfo: filters, sortedInfo: sorter }); }; return ( - - - + + + +
+ + + {convertedLines && convertedLines.length > 0 && ( + + +
+ + + )} + ); } export default connect(mapStateToProps, null)(LaborAllocationsTable); diff --git a/client/src/graphql/jobs-lines.queries.js b/client/src/graphql/jobs-lines.queries.js index 0c0b4228d..5ac7f30c5 100644 --- a/client/src/graphql/jobs-lines.queries.js +++ b/client/src/graphql/jobs-lines.queries.js @@ -48,6 +48,7 @@ export const GET_LINE_TICKET_BY_PK = gql` lbr_op lbr_amt op_code_desc + convertedtolbr } timetickets(where: { jobid: { _eq: $id } }) { actualhrs diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 12cf52836..95a6d0ea1 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -1570,6 +1570,7 @@ "closeconfirm": "Are you sure you want to close this job? This cannot be easily undone.", "closejob": "Close Job {{ro_number}}", "contracts": "CC Contracts", + "convertedtolabor": "Lines Converted to Labor", "cost": "Cost", "cost_Additional": "Cost - Additional", "cost_labor": "Cost - Labor", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index ca23c77a3..402e26e56 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -1570,6 +1570,7 @@ "closeconfirm": "", "closejob": "", "contracts": "", + "convertedtolabor": "", "cost": "", "cost_Additional": "", "cost_labor": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 7f5176898..eb6800fb5 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -1570,6 +1570,7 @@ "closeconfirm": "", "closejob": "", "contracts": "", + "convertedtolabor": "", "cost": "", "cost_Additional": "", "cost_labor": "", From b346c28fe0fd58c4b937e21c98e219039fab3cac Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Wed, 13 Jul 2022 16:17:21 -0700 Subject: [PATCH 6/8] IO-1954 schedule display improvements. --- .../schedule-event.component.jsx | 61 ++++++++++--------- .../schedule-calendar.styles.scss | 4 ++ .../scheduler-calendar-wrapper.component.jsx | 2 +- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/client/src/components/job-at-change/schedule-event.component.jsx b/client/src/components/job-at-change/schedule-event.component.jsx index 78d4c3040..91fbcbf98 100644 --- a/client/src/components/job-at-change/schedule-event.component.jsx +++ b/client/src/components/job-at-change/schedule-event.component.jsx @@ -247,40 +247,39 @@ export function ScheduleEventComponent({ ); const RegularEvent = event.isintake ? ( -
- - {event.note && } - {`${event.job.ro_number || t("general.labels.na")}`} - - - - - - - {`${(event.job && event.job.v_model_yr) || ""} ${ - (event.job && event.job.v_make_desc) || "" - } ${(event.job && event.job.v_model_desc) || ""}`} - - - {`(${ - (event.job && event.job.labhrs.aggregate.sum.mod_lb_hrs) || "0" - } / ${ - (event.job && event.job.larhrs.aggregate.sum.mod_lb_hrs) || "0" - })`} - - + {event.note && } + {`${event.job.ro_number || t("general.labels.na")}`} + + + + {`${(event.job && event.job.v_model_yr) || ""} ${ + (event.job && event.job.v_make_desc) || "" + } ${(event.job && event.job.v_model_desc) || ""}`} + + {`(${(event.job && event.job.labhrs.aggregate.sum.mod_lb_hrs) || "0"} / ${ + (event.job && event.job.larhrs.aggregate.sum.mod_lb_hrs) || "0" + })`} + {event.job && event.job.alt_transport && (
{event.job.alt_transport}
)} -
+ ) : ( -
+
{`${event.title || ""}`}
); @@ -291,7 +290,13 @@ export function ScheduleEventComponent({ onVisibleChange={(vis) => !event.vacation && setVisible(vis)} trigger="click" content={event.block ? blockContent : popoverContent} - style={{ height: "100%", width: "100%" }} + style={{ + height: "100%", + width: "100%", + + backgroundColor: + event.color && event.color.hex ? event.color.hex : event.color, + }} > {RegularEvent} diff --git a/client/src/components/schedule-calendar-wrapper/schedule-calendar.styles.scss b/client/src/components/schedule-calendar-wrapper/schedule-calendar.styles.scss index 432e46099..a46e37b41 100644 --- a/client/src/components/schedule-calendar-wrapper/schedule-calendar.styles.scss +++ b/client/src/components/schedule-calendar-wrapper/schedule-calendar.styles.scss @@ -4,6 +4,10 @@ .rbc-time-view .rbc-allday-cell { height: unset; } + +.rbc-month-row{ + overflow: unset !important; +} // .rbc-row-content { // display: none; // } diff --git a/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx b/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx index 616c58ecb..95f825c6e 100644 --- a/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx +++ b/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx @@ -34,7 +34,7 @@ export function ScheduleCalendarWrapperComponent({ const { t } = useTranslation(); const handleEventPropStyles = (event, start, end, isSelected) => { return { - ...(event.color + ...(event.color && !((search.view || defaultView) === "agenda") ? { style: { backgroundColor: From 27ce30527ee13a891ac6e640ad5b41de4e263cc8 Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Thu, 14 Jul 2022 15:18:01 -0700 Subject: [PATCH 7/8] IO-1536 Add VIN Highlighting. --- .../global-search/global-search.component.jsx | 7 ++++++- ...bs-create-vehicle-info.search.component.jsx | 5 ++++- .../jobs-detail-header.component.jsx | 5 ++++- .../vehicle-tag-popover.component.jsx | 9 +++++++-- .../vehicle-vin-display.component.jsx | 18 ++++++++++++++++++ .../vehicles-list/vehicles-list.component.jsx | 3 ++- 6 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 client/src/components/vehicle-vin-display/vehicle-vin-display.component.jsx diff --git a/client/src/components/global-search/global-search.component.jsx b/client/src/components/global-search/global-search.component.jsx index 147ea3f20..3f3c2c8a2 100644 --- a/client/src/components/global-search/global-search.component.jsx +++ b/client/src/components/global-search/global-search.component.jsx @@ -11,6 +11,7 @@ import AlertComponent from "../alert/alert.component"; import OwnerNameDisplay, { OwnerNameDisplayFunction, } from "../owner-name-display/owner-name-display.component"; +import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component"; export default function GlobalSearch() { const { t } = useTranslation(); const history = useHistory(); @@ -97,7 +98,11 @@ export default function GlobalSearch() { } ${vehicle.v_model_desc || ""}`} {vehicle.plate_no || ""} - {vehicle.v_vin || ""} + + + {vehicle.v_vin || ""} + + ), diff --git a/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.search.component.jsx b/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.search.component.jsx index 137ad45f4..b4c4152c8 100644 --- a/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.search.component.jsx +++ b/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.search.component.jsx @@ -4,6 +4,7 @@ import { Table, Input, Card, Space } from "antd"; import { Link } from "react-router-dom"; import { alphaSort } from "../../utils/sorters"; import JobCreateContext from "../../pages/jobs-create/jobs-create.context"; +import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component"; export default function JobsCreateVehicleInfoSearchComponent({ loading, @@ -27,7 +28,9 @@ export default function JobsCreateVehicleInfoSearchComponent({ tableState.sortedInfo.columnKey === "v_vin" && tableState.sortedInfo.order, render: (text, record) => ( - {record.v_vin} + + {record.v_vin} + ), }, { diff --git a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx index 56868b9c6..8f41cec59 100644 --- a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx +++ b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx @@ -23,6 +23,7 @@ import JobsRelatedRos from "../jobs-related-ros/jobs-related-ros.component"; import { DateTimeFormatter } from "../../utils/DateFormatter"; import ProductionListColumnComment from "../production-list-columns/production-list-columns.comment.component"; import { OwnerNameDisplayFunction } from "../owner-name-display/owner-name-display.component"; +import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component"; const mapStateToProps = createStructuredSelector({ jobRO: selectJobReadOnly, @@ -211,7 +212,9 @@ export function JobsDetailHeader({ job, bodyshop, disabled }) { }`})`} - {`${job.v_vin || t("general.labels.na")}`} + + {`${job.v_vin || t("general.labels.na")}`} + diff --git a/client/src/components/vehicle-tag-popover/vehicle-tag-popover.component.jsx b/client/src/components/vehicle-tag-popover/vehicle-tag-popover.component.jsx index 5f95a5b05..3005c7a34 100644 --- a/client/src/components/vehicle-tag-popover/vehicle-tag-popover.component.jsx +++ b/client/src/components/vehicle-tag-popover/vehicle-tag-popover.component.jsx @@ -2,6 +2,7 @@ import { Button, Col, Descriptions, Popover, Row, Tag } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; +import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component"; export default function VehicleTagPopoverComponent({ job }) { const { t } = useTranslation(); @@ -27,7 +28,9 @@ export default function VehicleTagPopoverComponent({ job }) { {`${job.plate_st || t("general.labels.na")}`} - {`${job.v_vin || t("general.labels.na")}`} + + {`${job.v_vin || t("general.labels.na")}`} + @@ -46,7 +49,9 @@ export default function VehicleTagPopoverComponent({ job }) { {`${job.vehicle.plate_st || t("general.labels.na")}`} - {`${job.vehicle.v_vin || t("general.labels.na")}`} + {`${ + job.vehicle.v_vin || t("general.labels.na") + }`} diff --git a/client/src/components/vehicle-vin-display/vehicle-vin-display.component.jsx b/client/src/components/vehicle-vin-display/vehicle-vin-display.component.jsx new file mode 100644 index 000000000..1ba46b8b5 --- /dev/null +++ b/client/src/components/vehicle-vin-display/vehicle-vin-display.component.jsx @@ -0,0 +1,18 @@ +import React from "react"; + +export default function VehicleVinDisplay({ children }) { + if (!children) return null; + console.log(children); + if (typeof children !== "string" || children.length !== 17) return children; + const vin = children.trim(); + + const first = vin.substring(0, 9); + const second = vin.substring(9, 17); + + return ( + <> + {first} + {second} + + ); +} diff --git a/client/src/components/vehicles-list/vehicles-list.component.jsx b/client/src/components/vehicles-list/vehicles-list.component.jsx index ca9091e67..e7de0acc3 100644 --- a/client/src/components/vehicles-list/vehicles-list.component.jsx +++ b/client/src/components/vehicles-list/vehicles-list.component.jsx @@ -4,6 +4,7 @@ import queryString from "query-string"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { Link, useHistory, useLocation } from "react-router-dom"; +import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component"; export default function VehiclesListComponent({ loading, vehicles, @@ -31,7 +32,7 @@ export default function VehiclesListComponent({ key: "v_vin", render: (text, record) => ( - {record.v_vin || "N/A"} + {record.v_vin || "N/A"} ), }, From 7cf32775ebdf62208eb7ce4f68bed3eda5e3e925 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Fri, 15 Jul 2022 15:31:16 -0700 Subject: [PATCH 8/8] Revert changes for IO-1972. --- .../schedule-event.component.jsx | 1 + .../labor-allocations-table.component.jsx | 154 ++++++++---------- 2 files changed, 71 insertions(+), 84 deletions(-) diff --git a/client/src/components/job-at-change/schedule-event.component.jsx b/client/src/components/job-at-change/schedule-event.component.jsx index 91fbcbf98..e0c0ccc4d 100644 --- a/client/src/components/job-at-change/schedule-event.component.jsx +++ b/client/src/components/job-at-change/schedule-event.component.jsx @@ -249,6 +249,7 @@ export function ScheduleEventComponent({ const RegularEvent = event.isintake ? ( joblines && joblines.filter((j) => j.convertedtolbr), - [joblines] - ); + // const convertedLines = useMemo( + // () => joblines && joblines.filter((j) => j.convertedtolbr), + // [joblines] + // ); const columns = [ { @@ -121,67 +120,52 @@ export function LaborAllocationsTable({ ), }, ]; - const convertedTableCols = [ - { - title: t("joblines.fields.line_desc"), - dataIndex: "line_desc", - key: "line_desc", - ellipsis: true, - }, - { - title: t("joblines.fields.op_code_desc"), - dataIndex: "op_code_desc", - key: "op_code_desc", - ellipsis: true, - render: (text, record) => - `${record.op_code_desc || ""}${ - record.alt_partm ? ` ${record.alt_partm}` : "" - }`, - }, + // const convertedTableCols = [ + // { + // title: t("joblines.fields.line_desc"), + // dataIndex: "line_desc", + // key: "line_desc", + // ellipsis: true, + // }, + // { + // title: t("joblines.fields.op_code_desc"), + // dataIndex: "op_code_desc", + // key: "op_code_desc", + // ellipsis: true, + // render: (text, record) => + // `${record.op_code_desc || ""}${ + // record.alt_partm ? ` ${record.alt_partm}` : "" + // }`, + // }, - { - title: t("joblines.fields.act_price"), - dataIndex: "act_price", - key: "act_price", - ellipsis: true, - render: (text, record) => ( - <> - - {record.db_ref === "900510" || record.db_ref === "900511" - ? record.prt_dsmk_m - : record.act_price} - - {record.prt_dsmk_p && record.prt_dsmk_p !== 0 ? ( - {`(${record.prt_dsmk_p}%)`} - ) : ( - <> - )} - - ), - }, - { - title: t("joblines.fields.part_qty"), - dataIndex: "part_qty", - key: "part_qty", - }, - - { - title: t("joblines.fields.mod_lbr_ty"), - dataIndex: "mod_lbr_ty", - key: "mod_lbr_ty", - render: (text, record) => - record.mod_lbr_ty - ? t(`joblines.fields.lbr_types.${record.mod_lbr_ty}`) - : null, - }, - { - title: t("joblines.fields.mod_lb_hrs"), - dataIndex: "mod_lb_hrs", - key: "mod_lb_hrs", - }, - ]; + // { + // title: t("joblines.fields.act_price"), + // dataIndex: "act_price", + // key: "act_price", + // ellipsis: true, + // render: (text, record) => ( + // <> + // + // {record.db_ref === "900510" || record.db_ref === "900511" + // ? record.prt_dsmk_m + // : record.act_price} + // + // {record.prt_dsmk_p && record.prt_dsmk_p !== 0 ? ( + // {`(${record.prt_dsmk_p}%)`} + // ) : ( + // <> + // )} + // + // ), + // }, + // { + // title: t("joblines.fields.part_qty"), + // dataIndex: "part_qty", + // key: "part_qty", + // }, + // ]; const handleTableChange = (pagination, filters, sorter) => { setState({ ...state, filteredInfo: filters, sortedInfo: sorter }); @@ -203,21 +187,23 @@ export function LaborAllocationsTable({ /> - {convertedLines && convertedLines.length > 0 && ( -
- -
- - - )} + { + // convertedLines && convertedLines.length > 0 && ( + // + // + //
+ // + // + // ) + } ); }