feature/IO-3255-simplified-parts-management - Checkpoint

This commit is contained in:
Dave
2025-09-05 12:31:45 -04:00
parent 771a239773
commit c24bfbf655
3 changed files with 22 additions and 11 deletions

View File

@@ -177,7 +177,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
<Checkbox <Checkbox
checked={!!job.estimate_sent_approval} checked={!!job.estimate_sent_approval}
onChange={(e) => handleCheckboxChange("estimate_sent_approval", e.target.checked)} onChange={(e) => handleCheckboxChange("estimate_sent_approval", e.target.checked)}
disabled={disabled} disabled={disabled || isPartsEntry}
> >
{job.estimate_sent_approval && ( {job.estimate_sent_approval && (
<span style={{ color: "#888" }}> <span style={{ color: "#888" }}>
@@ -192,7 +192,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
<Checkbox <Checkbox
checked={!!job.estimate_approved} checked={!!job.estimate_approved}
onChange={(e) => handleCheckboxChange("estimate_approved", e.target.checked)} onChange={(e) => handleCheckboxChange("estimate_approved", e.target.checked)}
disabled={disabled} disabled={disabled || isPartsEntry}
> >
{job.estimate_approved && ( {job.estimate_approved && (
<span style={{ color: "#888" }}> <span style={{ color: "#888" }}>
@@ -237,7 +237,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
<Card <Card
style={{ height: "100%" }} style={{ height: "100%" }}
title={ title={
disabled ? ( disabled || isPartsEntry ? (
<>{ownerTitle.length > 0 ? ownerTitle : t("owner.labels.noownerinfo")}</> <>{ownerTitle.length > 0 ? ownerTitle : t("owner.labels.noownerinfo")}</>
) : ( ) : (
<Link to={`/manage/owners/${job.owner.id}`}> <Link to={`/manage/owners/${job.owner.id}`}>
@@ -248,14 +248,14 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
> >
<div> <div>
<DataLabel key="2" label={t("jobs.fields.ownr_ph1")}> <DataLabel key="2" label={t("jobs.fields.ownr_ph1")}>
{disabled ? ( {disabled || isPartsEntry ? (
<PhoneNumberFormatter>{job.ownr_ph1}</PhoneNumberFormatter> <PhoneNumberFormatter>{job.ownr_ph1}</PhoneNumberFormatter>
) : ( ) : (
<ChatOpenButton phone={job.ownr_ph1} jobid={job.id} /> <ChatOpenButton phone={job.ownr_ph1} jobid={job.id} />
)} )}
</DataLabel> </DataLabel>
<DataLabel key="22" label={t("jobs.fields.ownr_ph2")}> <DataLabel key="22" label={t("jobs.fields.ownr_ph2")}>
{disabled ? ( {disabled || isPartsEntry ? (
<PhoneNumberFormatter>{job.ownr_ph2}</PhoneNumberFormatter> <PhoneNumberFormatter>{job.ownr_ph2}</PhoneNumberFormatter>
) : ( ) : (
<ChatOpenButton phone={job.ownr_ph2} jobid={job.id} /> <ChatOpenButton phone={job.ownr_ph2} jobid={job.id} />
@@ -267,7 +267,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
} ${job.ownr_st || ""} ${job.ownr_zip || ""}`} } ${job.ownr_st || ""} ${job.ownr_zip || ""}`}
</DataLabel> </DataLabel>
<DataLabel key="4" label={t("owners.fields.ownr_ea")}> <DataLabel key="4" label={t("owners.fields.ownr_ea")}>
{disabled ? ( {disabled || isPartsEntry ? (
<>{job.ownr_ea || ""}</> <>{job.ownr_ea || ""}</>
) : job.ownr_ea ? ( ) : job.ownr_ea ? (
<a href={`mailto:${job.ownr_ea}`}>{job.ownr_ea}</a> <a href={`mailto:${job.ownr_ea}`}>{job.ownr_ea}</a>
@@ -317,7 +317,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
<DataLabel label={t("jobs.labels.relatedros")}> <DataLabel label={t("jobs.labels.relatedros")}>
<JobsRelatedRos jobid={job.id} job={job} disabled={disabled} /> <JobsRelatedRos jobid={job.id} job={job} disabled={disabled} />
</DataLabel> </DataLabel>
{job.vehicle && job.vehicle.notes && ( {job.vehicle?.notes && (
<DataLabel <DataLabel
label={t("vehicles.fields.notes")} label={t("vehicles.fields.notes")}
valueStyle={{ whiteSpace: "pre-wrap" }} valueStyle={{ whiteSpace: "pre-wrap" }}
@@ -327,7 +327,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
{job.vehicle.notes} {job.vehicle.notes}
</DataLabel> </DataLabel>
)} )}
{job.vehicle && job.vehicle.v_paint_codes && ( {job.vehicle?.v_paint_codes && (
<DataLabel label={t("vehicles.fields.v_paint_codes", { number: "" })}> <DataLabel label={t("vehicles.fields.v_paint_codes", { number: "" })}>
<span style={{ whiteSpace: "pre" }}> <span style={{ whiteSpace: "pre" }}>
{Object.keys(job.vehicle.v_paint_codes) {Object.keys(job.vehicle.v_paint_codes)

View File

@@ -1,8 +1,18 @@
import { Space, Tag } from "antd"; import { Space, Tag } from "antd";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { createStructuredSelector } from "reselect";
import { selectIsPartsEntry } from "../../redux/application/application.selectors.js";
import { connect } from "react-redux";
import getPartsBasePath from "../../utils/getPartsBasePath.js";
export default function JobsRelatedRos({ job, disabled }) { const mapStateToProps = createStructuredSelector({
isPartsEntry: selectIsPartsEntry
});
function JobsRelatedRos({ job, disabled, isPartsEntry }) {
if (!(job?.vehicle && job.vehicle.jobs)) return null; if (!(job?.vehicle && job.vehicle.jobs)) return null;
const basePath = getPartsBasePath(isPartsEntry);
return ( return (
<Space wrap> <Space wrap>
{job.vehicle.jobs {job.vehicle.jobs
@@ -12,7 +22,7 @@ export default function JobsRelatedRos({ job, disabled }) {
{disabled ? ( {disabled ? (
<>{`${j.ro_number || "N/A"}${j.clm_no ? ` | ${j.clm_no}` : ""}${j.status ? ` | ${j.status}` : ""}`}</> <>{`${j.ro_number || "N/A"}${j.clm_no ? ` | ${j.clm_no}` : ""}${j.status ? ` | ${j.status}` : ""}`}</>
) : ( ) : (
<Link to={`/manage/jobs/${j?.id}`}>{`${j.ro_number || "N/A"}${ <Link to={`${basePath}/jobs/${j?.id}`}>{`${j.ro_number || "N/A"}${
j.clm_no ? ` | ${j.clm_no}` : "" j.clm_no ? ` | ${j.clm_no}` : ""
}${j.status ? ` | ${j.status}` : ""}`}</Link> }${j.status ? ` | ${j.status}` : ""}`}</Link>
)} )}
@@ -21,3 +31,4 @@ export default function JobsRelatedRos({ job, disabled }) {
</Space> </Space>
); );
} }
export default connect(mapStateToProps)(JobsRelatedRos);

View File

@@ -133,7 +133,7 @@ export function SimplifiedPartsJobDetailComponent({ setPrintCenterContext, jobRO
<JobLineUpsertModalContainer /> <JobLineUpsertModalContainer />
<PageHeader title={<Space>{job.ro_number || t("general.labels.na")}</Space>} extra={menuExtra} /> <PageHeader title={<Space>{job.ro_number || t("general.labels.na")}</Space>} extra={menuExtra} />
<JobsDetailHeader job={job} disabled={true} /> <JobsDetailHeader job={job} />
<Divider type="horizontal" /> <Divider type="horizontal" />
<JobProfileDataWarning job={job} /> <JobProfileDataWarning job={job} />
<FormFieldsChanged form={form} /> <FormFieldsChanged form={form} />