diff --git a/client/src/components/job-close-ro-guard/job-close-ro-guard.bills.jsx b/client/src/components/job-close-ro-guard/job-close-ro-guard.bills.jsx
index 4bf03ea46..a6dcf7b35 100644
--- a/client/src/components/job-close-ro-guard/job-close-ro-guard.bills.jsx
+++ b/client/src/components/job-close-ro-guard/job-close-ro-guard.bills.jsx
@@ -3,7 +3,7 @@ import React from "react";
import { useQuery } from "@apollo/client";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
-import { QUERY_BILLS_BY_JOBID } from "../../graphql/bills.queries";
+import { QUERY_PARTS_BILLS_BY_JOBID } from "../../graphql/bills.queries";
import { selectJobReadOnly } from "../../redux/application/application.selectors";
import { selectBodyshop } from "../../redux/user/user.selectors";
import AlertComponent from "../alert/alert.component";
@@ -19,7 +19,7 @@ const mapDispatchToProps = (dispatch) => ({
export default connect(mapStateToProps, mapDispatchToProps)(JobCloseRoGuardBills);
export function JobCloseRoGuardBills({ job, jobRO, bodyshop, form, warningCallback }) {
- const { loading, error, data } = useQuery(QUERY_BILLS_BY_JOBID, {
+ const { loading, error, data } = useQuery(QUERY_PARTS_BILLS_BY_JOBID, {
variables: { jobid: job.id },
fetchPolicy: "network-only",
nextFetchPolicy: "network-only"
diff --git a/client/src/components/job-detail-lines/job-lines-expander.component.jsx b/client/src/components/job-detail-lines/job-lines-expander.component.jsx
index 22f0f8616..64e3f023f 100644
--- a/client/src/components/job-detail-lines/job-lines-expander.component.jsx
+++ b/client/src/components/job-detail-lines/job-lines-expander.component.jsx
@@ -2,17 +2,17 @@ import { useQuery } from "@apollo/client";
import { Col, Row, Skeleton, Space, Timeline, Typography } from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
+import { connect } from "react-redux";
import { Link } from "react-router-dom";
+import { createStructuredSelector } from "reselect";
import { GET_JOB_LINE_ORDERS } from "../../graphql/jobs.queries";
+import { QUERY_JOBLINE_TASKS_PAGINATED } from "../../graphql/tasks.queries.js";
+import { selectBodyshop } from "../../redux/user/user.selectors";
import CurrencyFormatter from "../../utils/CurrencyFormatter";
import { DateFormatter } from "../../utils/DateFormatter";
import AlertComponent from "../alert/alert.component";
-import { connect } from "react-redux";
-import { createStructuredSelector } from "reselect";
-import { selectBodyshop } from "../../redux/user/user.selectors";
-import { QUERY_JOBLINE_TASKS_PAGINATED } from "../../graphql/tasks.queries.js";
-import TaskListContainer from "../task-list/task-list.container.jsx";
import FeatureWrapper from "../feature-wrapper/feature-wrapper.component.jsx";
+import TaskListContainer from "../task-list/task-list.container.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
@@ -84,17 +84,17 @@ export function JobLinesExpander({ jobline, jobid, bodyshop }) {
key: line.id,
children: (
-
- {line.parts_dispatch.number}
-
+ {line.parts_dispatch.number}
{bodyshop.employees.find((e) => e.id === line.parts_dispatch.employeeid)?.first_name}
-
- {t("parts_dispatch_lines.fields.accepted_at")}
- {line.accepted_at}
-
+ {line.accepted_at ? (
+
+ {t("parts_dispatch_lines.fields.accepted_at")}
+ {line.accepted_at}
+
+ ) : null}
)
diff --git a/client/src/components/jobs-detail-pli/jobs-detail-pli.container.jsx b/client/src/components/jobs-detail-pli/jobs-detail-pli.container.jsx
index f968b1da7..25b8081d0 100644
--- a/client/src/components/jobs-detail-pli/jobs-detail-pli.container.jsx
+++ b/client/src/components/jobs-detail-pli/jobs-detail-pli.container.jsx
@@ -1,17 +1,9 @@
-import { useQuery } from "@apollo/client";
import queryString from "query-string";
import React from "react";
import { useLocation, useNavigate } from "react-router-dom";
-import { QUERY_BILLS_BY_JOBID } from "../../graphql/bills.queries";
import JobsDetailPliComponent from "./jobs-detail-pli.component";
-export default function JobsDetailPliContainer({ job }) {
- const billsQuery = useQuery(QUERY_BILLS_BY_JOBID, {
- variables: { jobid: job.id },
- fetchPolicy: "network-only",
- nextFetchPolicy: "network-only"
- });
-
+export default function JobsDetailPliContainer({ job, billsQuery }) {
const search = queryString.parse(useLocation().search);
const history = useNavigate();
diff --git a/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx b/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx
index 13ce11d7b..e52a70b46 100644
--- a/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx
+++ b/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx
@@ -1765,25 +1765,28 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) {
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/client/src/graphql/bills.queries.js b/client/src/graphql/bills.queries.js
index 3a38031ba..7a7fd2d8a 100644
--- a/client/src/graphql/bills.queries.js
+++ b/client/src/graphql/bills.queries.js
@@ -50,7 +50,7 @@ export const QUERY_ALL_BILLS_PAGINATED = gql`
}
`;
-export const QUERY_BILLS_BY_JOBID = gql`
+export const QUERY_PARTS_BILLS_BY_JOBID = gql`
query QUERY_PARTS_BILLS_BY_JOBID($jobid: uuid!) {
parts_orders(where: { jobid: { _eq: $jobid } }, order_by: { order_date: desc }) {
id
diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js
index 15f670f20..89dc8a726 100644
--- a/client/src/graphql/jobs.queries.js
+++ b/client/src/graphql/jobs.queries.js
@@ -1138,6 +1138,7 @@ export const UPDATE_JOB = gql`
suspended
queued_for_parts
scheduled_completion
+ scheduled_delivery
actual_in
date_repairstarted
date_void
diff --git a/client/src/pages/jobs-create/jobs-create.container.jsx b/client/src/pages/jobs-create/jobs-create.container.jsx
index d919bcb46..2347f8f9a 100644
--- a/client/src/pages/jobs-create/jobs-create.container.jsx
+++ b/client/src/pages/jobs-create/jobs-create.container.jsx
@@ -10,9 +10,9 @@ import { INSERT_NEW_JOB } from "../../graphql/jobs.queries";
import { QUERY_OWNER_FOR_JOB_CREATION } from "../../graphql/owners.queries";
import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/application.actions";
import { selectBodyshop } from "../../redux/user/user.selectors";
+import InstanceRenderManager from "../../utils/instanceRenderMgr";
import JobsCreateComponent from "./jobs-create.component";
import JobCreateContext from "./jobs-create.context";
-import InstanceRenderManager from "../../utils/instanceRenderMgr";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
@@ -159,13 +159,6 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
layout="vertical"
autoComplete={"off"}
initialValues={{
- tax_tow_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
- tax_str_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
- tax_paint_mat_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
- tax_shop_mat_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
- tax_sub_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
- tax_lbr_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
- tax_levies_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
federal_tax_rate: bodyshop.bill_tax_rates.federal_tax_rate / 100,
state_tax_rate: bodyshop.bill_tax_rates.state_tax_rate / 100,
local_tax_rate: bodyshop.bill_tax_rates.local_tax_rate / 100,
@@ -261,19 +254,34 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
prt_tax_rt: bodyshop.bill_tax_rates.state_tax_rate / 100
}
},
- rome: {
- cieca_pft: {
- ...bodyshop.md_responsibility_centers.taxes.tax_ty1,
- ...bodyshop.md_responsibility_centers.taxes.tax_ty2,
- ...bodyshop.md_responsibility_centers.taxes.tax_ty3,
- ...bodyshop.md_responsibility_centers.taxes.tax_ty4,
- ...bodyshop.md_responsibility_centers.taxes.tax_ty5
- },
- materials: bodyshop.md_responsibility_centers.cieca_pfm,
- cieca_pfl: bodyshop.md_responsibility_centers.cieca_pfl,
- parts_tax_rates: bodyshop.md_responsibility_centers.parts_tax_rates
- }
- }
+ tax_tow_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
+ tax_str_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
+ tax_paint_mat_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
+ tax_shop_mat_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
+ tax_sub_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
+ tax_lbr_rt: bodyshop.bill_tax_rates.state_tax_rate / 100,
+ tax_levies_rt: bodyshop.bill_tax_rates.state_tax_rate / 100
+ },
+ rome: {
+ cieca_pft: {
+ ...bodyshop.md_responsibility_centers.taxes.tax_ty1,
+ ...bodyshop.md_responsibility_centers.taxes.tax_ty2,
+ ...bodyshop.md_responsibility_centers.taxes.tax_ty3,
+ ...bodyshop.md_responsibility_centers.taxes.tax_ty4,
+ ...bodyshop.md_responsibility_centers.taxes.tax_ty5
+ },
+ materials: bodyshop.md_responsibility_centers.cieca_pfm,
+ cieca_pfl: bodyshop.md_responsibility_centers.cieca_pfl,
+ parts_tax_rates: bodyshop.md_responsibility_centers.parts_tax_rates,
+ tax_tow_rt: bodyshop.md_responsibility_centers.tax_tow_rt,
+ tax_str_rt: bodyshop.md_responsibility_centers.tax_str_rt,
+ tax_paint_mat_rt: bodyshop.md_responsibility_centers.tax_paint_mat_rt,
+ tax_shop_mat_rt: bodyshop.md_responsibility_centers.tax_shop_mat_rt,
+ tax_sub_rt: bodyshop.md_responsibility_centers.tax_sub_rt,
+ tax_lbr_rt: bodyshop.md_responsibility_centers.tax_lbr_rt,
+ tax_levies_rt: bodyshop.md_responsibility_centers.tax_levies_rt
+ },
+ promanager: "USE_ROME"
})
}}
>
diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
index 79ce401bc..e2f251b79 100644
--- a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
+++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
@@ -8,11 +8,12 @@ import Icon, {
SyncOutlined,
ToolFilled
} from "@ant-design/icons";
-import { Badge, Button, Divider, Form, notification, Space, Tabs } from "antd";
import { PageHeader } from "@ant-design/pro-layout";
+import { Badge, Button, Divider, Form, notification, Space, Tabs } from "antd";
+import { useQuery } from "@apollo/client";
import Axios from "axios";
-import dayjs from "../../utils/day";
+import _ from "lodash";
import queryString from "query-string";
import React, { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
@@ -20,11 +21,13 @@ import { FaHardHat, FaRegStickyNote, FaShieldAlt, FaTasks } from "react-icons/fa
import { connect } from "react-redux";
import { useLocation, useNavigate } from "react-router-dom";
import { createStructuredSelector } from "reselect";
+import { HasFeatureAccess } from "../../components/feature-wrapper/feature-wrapper.component";
import FormFieldsChanged from "../../components/form-fields-changed-alert/form-fields-changed-alert.component";
import JobAuditTrail from "../../components/job-audit-trail/job-audit-trail.component";
import JobsLinesContainer from "../../components/job-detail-lines/job-lines.container";
import JobLifecycleComponent from "../../components/job-lifecycle/job-lifecycle.component";
import JobLineUpsertModalContainer from "../../components/job-lines-upsert-modal/job-lines-upsert-modal.container";
+import JobProfileDataWarning from "../../components/job-profile-data-warning/job-profile-data-warning.component";
import JobReconciliationModal from "../../components/job-reconciliation-modal/job-reconciliation.modal.container";
import JobSyncButton from "../../components/job-sync-button/job-sync-button.component";
import JobsChangeStatus from "../../components/jobs-change-status/jobs-change-status.component";
@@ -42,19 +45,18 @@ import JobsDocumentsLocalGallery from "../../components/jobs-documents-local-gal
import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container";
import NoteUpsertModalComponent from "../../components/note-upsert-modal/note-upsert-modal.container";
import ScheduleJobModalContainer from "../../components/schedule-job-modal/schedule-job-modal.container";
+import TaskListContainer from "../../components/task-list/task-list.container.jsx";
+import { QUERY_PARTS_BILLS_BY_JOBID } from "../../graphql/bills.queries.js";
+import { QUERY_JOB_TASKS_PAGINATED } from "../../graphql/tasks.queries.js";
import { insertAuditTrail } from "../../redux/application/application.actions";
import { selectJobReadOnly } from "../../redux/application/application.selectors";
import { setModalContext } from "../../redux/modals/modals.actions";
import { selectBodyshop } from "../../redux/user/user.selectors";
import AuditTrailMapping from "../../utils/AuditTrailMappings";
-import UndefinedToNull from "../../utils/undefinedtonull";
-import _ from "lodash";
-import JobProfileDataWarning from "../../components/job-profile-data-warning/job-profile-data-warning.component";
import { DateTimeFormat } from "../../utils/DateFormatter";
+import dayjs from "../../utils/day";
import InstanceRenderManager from "../../utils/instanceRenderMgr";
-import { HasFeatureAccess } from "../../components/feature-wrapper/feature-wrapper.component";
-import TaskListContainer from "../../components/task-list/task-list.container.jsx";
-import { QUERY_JOB_TASKS_PAGINATED } from "../../graphql/tasks.queries.js";
+import UndefinedToNull from "../../utils/undefinedtonull";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -96,6 +98,12 @@ export function JobsDetailPage({
layout: "vertical"
};
+ const billsQuery = useQuery(QUERY_PARTS_BILLS_BY_JOBID, {
+ variables: { jobid: job.id },
+ fetchPolicy: "network-only",
+ nextFetchPolicy: "network-only"
+ });
+
useEffect(() => {
//form.setFieldsValue(transormJobToForm(job));
form.resetFields();
@@ -326,7 +334,7 @@ export function JobsDetailPage({
label: HasFeatureAccess({ featureName: "bills", bodyshop })
? t("menus.jobsdetail.partssublet")
: t("menus.jobsdetail.parts"),
- children:
+ children:
},
...(InstanceRenderManager({
imex: true,
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 40dfdfd4b..05c6c6e92 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -1776,6 +1776,7 @@
"prt_tx_in3": "Tax 3 Indicator",
"prt_tx_in4": "Tax 4 Indicator",
"prt_tx_in5": "Tax 5 Indicator",
+ "prt_tx_ty1": "Parts Tax Type 1",
"prt_type": "Part Type"
},
"partsstatus": "Parts Status",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 85ea723bd..a80e7a054 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -1776,6 +1776,7 @@
"prt_tx_in3": "",
"prt_tx_in4": "",
"prt_tx_in5": "",
+ "prt_tx_ty1": "",
"prt_type": ""
},
"partsstatus": "",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 389871014..8d8c801ea 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -1776,6 +1776,7 @@
"prt_tx_in3": "",
"prt_tx_in4": "",
"prt_tx_in5": "",
+ "prt_tx_ty1": "",
"prt_type": ""
},
"partsstatus": "",