Merge remote-tracking branch 'origin/release/2025-11-07' into feature/IO-3357-Reynolds-and-Reynolds-DMS-API-Integration
# Conflicts: # package-lock.json # package.json
This commit is contained in:
@@ -77,6 +77,8 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
|
|||||||
.reduce((acc, val) => acc + val.mod_lb_hrs, 0);
|
.reduce((acc, val) => acc + val.mod_lb_hrs, 0);
|
||||||
const ownerTitle = OwnerNameDisplayFunction(job).trim();
|
const ownerTitle = OwnerNameDisplayFunction(job).trim();
|
||||||
|
|
||||||
|
const employeeData = bodyshop.associations.find((a) => a.useremail === job.admin_clerk)?.user?.employee ?? null;
|
||||||
|
|
||||||
// Handle checkbox changes
|
// Handle checkbox changes
|
||||||
const handleCheckboxChange = async (field, checked) => {
|
const handleCheckboxChange = async (field, checked) => {
|
||||||
const value = checked ? dayjs().toISOString() : null;
|
const value = checked ? dayjs().toISOString() : null;
|
||||||
@@ -162,7 +164,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
|
|||||||
{job.cccontracts.map((c, index) => (
|
{job.cccontracts.map((c, index) => (
|
||||||
<Space key={c.id} wrap>
|
<Space key={c.id} wrap>
|
||||||
<Link to={`/manage/courtesycars/contracts/${c.id}`}>
|
<Link to={`/manage/courtesycars/contracts/${c.id}`}>
|
||||||
{`${c.agreementnumber} - ${c.courtesycar.fleetnumber} ${c.courtesycar.year} ${c.courtesycar.make} ${c.courtesycar.model}`}
|
{`${c.agreementnumber} - ${c.courtesycar.fleetnumber} ${c.courtesycar.year} ${c.courtesycar.make} ${c.courtesycar.model} ${c.courtesycar.plate} - ${t(c.status)}`}
|
||||||
{index !== job.cccontracts.length - 1 ? "," : null}
|
{index !== job.cccontracts.length - 1 ? "," : null}
|
||||||
</Link>
|
</Link>
|
||||||
</Space>
|
</Space>
|
||||||
@@ -355,6 +357,14 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
|
|||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<JobEmployeeAssignments job={job} />
|
<JobEmployeeAssignments job={job} />
|
||||||
|
{job.admin_clerk && (
|
||||||
|
<>
|
||||||
|
<Divider style={{ margin: ".5rem" }} />
|
||||||
|
<DataLabel label={t("jobs.fields.admin_clerk")}>
|
||||||
|
{employeeData?.displayName ?? job.admin_clerk}
|
||||||
|
</DataLabel>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
<Divider style={{ margin: ".5rem" }} />
|
<Divider style={{ margin: ".5rem" }} />
|
||||||
<DataLabel label={t("jobs.labels.labor_hrs")}>
|
<DataLabel label={t("jobs.labels.labor_hrs")}>
|
||||||
{bodyHrs.toFixed(1)} / {refinishHrs.toFixed(1)} / {(bodyHrs + refinishHrs).toFixed(1)}
|
{bodyHrs.toFixed(1)} / {refinishHrs.toFixed(1)} / {(bodyHrs + refinishHrs).toFixed(1)}
|
||||||
|
|||||||
@@ -424,6 +424,7 @@ export const GET_JOB_BY_PK = gql`
|
|||||||
actual_delivery
|
actual_delivery
|
||||||
actual_in
|
actual_in
|
||||||
acv_amount
|
acv_amount
|
||||||
|
admin_clerk
|
||||||
adjustment_bottom_line
|
adjustment_bottom_line
|
||||||
alt_transport
|
alt_transport
|
||||||
area_of_damage
|
area_of_damage
|
||||||
@@ -2352,12 +2353,13 @@ export const MARK_JOB_AS_UNINVOICED = gql`
|
|||||||
mutation MARK_JOB_AS_UNINVOICED($jobId: uuid!, $default_delivered: String!) {
|
mutation MARK_JOB_AS_UNINVOICED($jobId: uuid!, $default_delivered: String!) {
|
||||||
update_jobs_by_pk(
|
update_jobs_by_pk(
|
||||||
pk_columns: { id: $jobId }
|
pk_columns: { id: $jobId }
|
||||||
_set: { date_exported: null, date_invoiced: null, status: $default_delivered }
|
_set: { date_exported: null, date_invoiced: null, status: $default_delivered, admin_clerk: null }
|
||||||
) {
|
) {
|
||||||
id
|
id
|
||||||
date_exported
|
date_exported
|
||||||
date_invoiced
|
date_invoiced
|
||||||
status
|
status
|
||||||
|
admin_clerk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -39,13 +39,14 @@ import { UPDATE_JOB } from "../../graphql/jobs.queries";
|
|||||||
import { insertAuditTrail } from "../../redux/application/application.actions";
|
import { insertAuditTrail } from "../../redux/application/application.actions";
|
||||||
import { selectJobReadOnly } from "../../redux/application/application.selectors";
|
import { selectJobReadOnly } from "../../redux/application/application.selectors";
|
||||||
import { setModalContext } from "../../redux/modals/modals.actions.js";
|
import { setModalContext } from "../../redux/modals/modals.actions.js";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
|
||||||
import AuditTrailMapping from "../../utils/AuditTrailMappings";
|
import AuditTrailMapping from "../../utils/AuditTrailMappings";
|
||||||
import dayjs from "../../utils/day";
|
import dayjs from "../../utils/day";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
bodyshop: selectBodyshop,
|
bodyshop: selectBodyshop,
|
||||||
jobRO: selectJobReadOnly
|
jobRO: selectJobReadOnly,
|
||||||
|
currentUser: selectCurrentUser
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
@@ -59,7 +60,7 @@ const mapDispatchToProps = (dispatch) => ({
|
|||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
export function JobsCloseComponent({ job, bodyshop, jobRO, insertAuditTrail, setPrintCenterContext }) {
|
export function JobsCloseComponent({ job, bodyshop, jobRO, insertAuditTrail, setPrintCenterContext, currentUser }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const client = useApolloClient();
|
const client = useApolloClient();
|
||||||
@@ -97,6 +98,7 @@ export function JobsCloseComponent({ job, bodyshop, jobRO, insertAuditTrail, set
|
|||||||
kmin: values.kmin,
|
kmin: values.kmin,
|
||||||
kmout: values.kmout,
|
kmout: values.kmout,
|
||||||
dms_allocation: values.dms_allocation,
|
dms_allocation: values.dms_allocation,
|
||||||
|
admin_clerk: currentUser.email,
|
||||||
...(removefromproduction ? { inproduction: false } : {}),
|
...(removefromproduction ? { inproduction: false } : {}),
|
||||||
...(values.qb_multiple_payers ? { qb_multiple_payers: values.qb_multiple_payers } : {})
|
...(values.qb_multiple_payers ? { qb_multiple_payers: values.qb_multiple_payers } : {})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1678,6 +1678,7 @@
|
|||||||
"actual_delivery": "Actual Delivery",
|
"actual_delivery": "Actual Delivery",
|
||||||
"actual_in": "Actual In",
|
"actual_in": "Actual In",
|
||||||
"acv_amount": "ACV Amount",
|
"acv_amount": "ACV Amount",
|
||||||
|
"admin_clerk": "Admin Clerk",
|
||||||
"adjustment_bottom_line": "Adjustments",
|
"adjustment_bottom_line": "Adjustments",
|
||||||
"adjustmenthours": "Adjustment Hours",
|
"adjustmenthours": "Adjustment Hours",
|
||||||
"alt_transport": "Alt. Trans.",
|
"alt_transport": "Alt. Trans.",
|
||||||
|
|||||||
@@ -1679,6 +1679,7 @@
|
|||||||
"actual_in": "Real en",
|
"actual_in": "Real en",
|
||||||
"acv_amount": "",
|
"acv_amount": "",
|
||||||
"adjustment_bottom_line": "Ajustes",
|
"adjustment_bottom_line": "Ajustes",
|
||||||
|
"admin_clerk": "",
|
||||||
"adjustmenthours": "",
|
"adjustmenthours": "",
|
||||||
"alt_transport": "",
|
"alt_transport": "",
|
||||||
"area_of_damage_impact": {
|
"area_of_damage_impact": {
|
||||||
|
|||||||
@@ -1678,6 +1678,7 @@
|
|||||||
"actual_delivery": "Livraison réelle",
|
"actual_delivery": "Livraison réelle",
|
||||||
"actual_in": "En réel",
|
"actual_in": "En réel",
|
||||||
"acv_amount": "",
|
"acv_amount": "",
|
||||||
|
"admin_clerk": "",
|
||||||
"adjustment_bottom_line": "Ajustements",
|
"adjustment_bottom_line": "Ajustements",
|
||||||
"adjustmenthours": "",
|
"adjustmenthours": "",
|
||||||
"alt_transport": "",
|
"alt_transport": "",
|
||||||
|
|||||||
@@ -3615,6 +3615,7 @@
|
|||||||
- adj_strdis
|
- adj_strdis
|
||||||
- adj_towdis
|
- adj_towdis
|
||||||
- adjustment_bottom_line
|
- adjustment_bottom_line
|
||||||
|
- admin_clerk
|
||||||
- agt_addr1
|
- agt_addr1
|
||||||
- agt_addr2
|
- agt_addr2
|
||||||
- agt_city
|
- agt_city
|
||||||
@@ -3890,6 +3891,7 @@
|
|||||||
- adj_strdis
|
- adj_strdis
|
||||||
- adj_towdis
|
- adj_towdis
|
||||||
- adjustment_bottom_line
|
- adjustment_bottom_line
|
||||||
|
- admin_clerk
|
||||||
- agt_addr1
|
- agt_addr1
|
||||||
- agt_addr2
|
- agt_addr2
|
||||||
- agt_city
|
- agt_city
|
||||||
@@ -4178,6 +4180,7 @@
|
|||||||
- adj_strdis
|
- adj_strdis
|
||||||
- adj_towdis
|
- adj_towdis
|
||||||
- adjustment_bottom_line
|
- adjustment_bottom_line
|
||||||
|
- admin_clerk
|
||||||
- agt_addr1
|
- agt_addr1
|
||||||
- agt_addr2
|
- agt_addr2
|
||||||
- agt_city
|
- agt_city
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
-- Could not auto-generate a down migration.
|
||||||
|
-- Please write an appropriate down migration for the SQL below:
|
||||||
|
-- alter table "public"."jobs" add column "admin_clerk" text
|
||||||
|
-- null;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
alter table "public"."jobs" add column "admin_clerk" text
|
||||||
|
null;
|
||||||
@@ -41,7 +41,6 @@
|
|||||||
"cookie-parser": "^1.4.7",
|
"cookie-parser": "^1.4.7",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"crisp-status-reporter": "^1.2.2",
|
"crisp-status-reporter": "^1.2.2",
|
||||||
"dd-trace": "^5.75.0",
|
|
||||||
"dinero.js": "^1.9.1",
|
"dinero.js": "^1.9.1",
|
||||||
"dotenv": "^17.2.3",
|
"dotenv": "^17.2.3",
|
||||||
"express": "^4.21.1",
|
"express": "^4.21.1",
|
||||||
|
|||||||
16
server.js
16
server.js
@@ -4,14 +4,14 @@ require("dotenv").config({
|
|||||||
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
|
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
|
||||||
});
|
});
|
||||||
|
|
||||||
// Commented out due to stability issues
|
// DATADOG TRACE Implemention (Uncomment to enable tracing, requires dd-trace package)
|
||||||
if (process.env.NODE_ENV) {
|
// if (process.env.NODE_ENV) {
|
||||||
require("dd-trace").init({
|
// require("dd-trace").init({
|
||||||
profiling: true,
|
// profiling: true,
|
||||||
env: process.env.NODE_ENV,
|
// env: process.env.NODE_ENV,
|
||||||
service: "bodyshop-api"
|
// service: "bodyshop-api"
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
const cors = require("cors");
|
const cors = require("cors");
|
||||||
const http = require("http");
|
const http = require("http");
|
||||||
|
|||||||
Reference in New Issue
Block a user