Files
bodyshop/client/src/components/job-close-ro-guard/job-close-ro-guard.ppd.jsx
2025-08-19 16:23:29 -04:00

78 lines
2.4 KiB
JavaScript

import { useEffect } from "react";
import { Alert, Card, Table } from "antd";
import { t } from "i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import CurrencyFormatter from "../../utils/CurrencyFormatter";
import { alphaSort } from "../../utils/sorters";
const mapStateToProps = createStructuredSelector({});
const mapDispatchToProps = () => ({});
export default connect(mapStateToProps, mapDispatchToProps)(JobCloseRGuardPpd);
export function JobCloseRGuardPpd({ job, warningCallback }) {
const linesWithPPD = job?.joblines.filter((j) => j.act_price_before_ppc !== 0 && j.act_price_before_ppc !== null);
useEffect(() => {
if (linesWithPPD.length > 0) {
warningCallback({ key: "ppd", warning: t("jobs.labels.outstanding_sublets") });
}
}, [linesWithPPD.length, warningCallback]);
const columns = [
{
title: t("joblines.fields.line_desc"),
dataIndex: "line_desc",
fixed: "left",
key: "line_desc",
sorter: (a, b) => alphaSort(a.line_desc, b.line_desc),
onCell: (record) => ({
className: record.manual_line && "job-line-manual",
style: {
...(record.critical ? { boxShadow: " -.5em 0 0 #FFC107" } : {})
}
}),
ellipsis: true
},
{
title: t("joblines.fields.act_price"),
dataIndex: "act_price",
key: "act_price",
sorter: (a, b) => a.act_price - b.act_price,
ellipsis: true,
render: (text, record) => <CurrencyFormatter>{record.act_price}</CurrencyFormatter>
},
{
title: t("joblines.fields.act_price_before_ppc"),
dataIndex: "act_price_before_ppc",
key: "act_price_before_ppc",
sorter: (a, b) => a.act_price_before_ppc - b.act_price_before_ppc,
ellipsis: true,
render: (text, record) => <CurrencyFormatter>{record.act_price_before_ppc}</CurrencyFormatter>
},
{
title: t("joblines.fields.part_qty"),
dataIndex: "part_qty",
key: "part_qty"
},
{
title: t("joblines.fields.notes"),
dataIndex: "notes",
key: "notes"
}
];
return (
<Card title={t("jobs.labels.ppdnotexported")}>
<Table dataSource={linesWithPPD} columns={columns} pagination={false} rowKey="id" bordered size="small" />
{linesWithPPD.length > 0 && (
<Alert style={{ margin: "8px 0px" }} type="warning" message={t("jobs.labels.outstanding_ppd")} />
)}
</Card>
);
}