115 lines
3.6 KiB
JavaScript
115 lines
3.6 KiB
JavaScript
import { Form, Input, Table } from "antd";
|
|
import React, { useState } from "react";
|
|
import { useTranslation } from "react-i18next";
|
|
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
|
import { alphaSort } from "../../utils/sorters";
|
|
import BillFormItemsExtendedFormItem from "./bill-form-lines.extended.formitem.component";
|
|
|
|
export default function BillFormLinesExtended({ lineData, discount, form, responsibilityCenters, disabled }) {
|
|
const [search, setSearch] = useState("");
|
|
const { t } = useTranslation();
|
|
const columns = [
|
|
{
|
|
title: t("joblines.fields.line_desc"),
|
|
dataIndex: "line_desc",
|
|
key: "line_desc",
|
|
width: "10%",
|
|
sorter: (a, b) => alphaSort(a.line_desc, b.line_desc)
|
|
},
|
|
{
|
|
title: t("joblines.fields.oem_partno"),
|
|
dataIndex: "oem_partno",
|
|
key: "oem_partno",
|
|
width: "10%",
|
|
sorter: (a, b) => alphaSort(a.oem_partno, b.oem_partno)
|
|
},
|
|
{
|
|
title: t("joblines.fields.part_type"),
|
|
dataIndex: "part_type",
|
|
key: "part_type",
|
|
width: "10%",
|
|
filters: [
|
|
{
|
|
text: t("jobs.labels.partsfilter"),
|
|
value: ["PAN", "PAP", "PAL", "PAA", "PAS", "PASL"]
|
|
},
|
|
{
|
|
text: t("joblines.fields.part_types.PAN"),
|
|
value: ["PAN", "PAP"]
|
|
},
|
|
{
|
|
text: t("joblines.fields.part_types.PAL"),
|
|
value: ["PAL"]
|
|
},
|
|
{
|
|
text: t("joblines.fields.part_types.PAA"),
|
|
value: ["PAA"]
|
|
},
|
|
{
|
|
text: t("joblines.fields.part_types.PAS"),
|
|
value: ["PAS", "PASL"]
|
|
}
|
|
],
|
|
onFilter: (value, record) => value.includes(record.part_type),
|
|
render: (text, record) => (record.part_type ? t(`joblines.fields.part_types.${record.part_type}`) : null)
|
|
},
|
|
|
|
{
|
|
title: t("joblines.fields.act_price"),
|
|
dataIndex: "act_price",
|
|
key: "act_price",
|
|
width: "10%",
|
|
sorter: (a, b) => a.act_price - b.act_price,
|
|
shouldCellUpdate: false,
|
|
render: (text, record) => (
|
|
<>
|
|
<CurrencyFormatter>
|
|
{record.db_ref === "900510" || record.db_ref === "900511" ? record.prt_dsmk_m : record.act_price}
|
|
</CurrencyFormatter>
|
|
{record.part_qty ? `(x ${record.part_qty})` : null}
|
|
{record.prt_dsmk_p && record.prt_dsmk_p !== 0 ? (
|
|
<span style={{ marginLeft: ".2rem" }}>{`(${record.prt_dsmk_p}%)`}</span>
|
|
) : (
|
|
<></>
|
|
)}
|
|
</>
|
|
)
|
|
},
|
|
{
|
|
title: t("billlines.fields.posting"),
|
|
dataIndex: "posting",
|
|
key: "posting",
|
|
|
|
render: (text, record, index) => (
|
|
<Form.Item noStyle name={["billlineskeys", record.id]}>
|
|
<BillFormItemsExtendedFormItem
|
|
form={form}
|
|
record={record}
|
|
index={index}
|
|
responsibilityCenters={responsibilityCenters}
|
|
discount={discount}
|
|
/>
|
|
</Form.Item>
|
|
)
|
|
}
|
|
];
|
|
|
|
const data =
|
|
search === ""
|
|
? lineData
|
|
: lineData.filter(
|
|
(l) =>
|
|
(l.line_desc && l.line_desc.toLowerCase().includes(search.toLowerCase())) ||
|
|
(l.oem_partno && l.oem_partno.toLowerCase().includes(search.toLowerCase())) ||
|
|
(l.act_price && l.act_price.toString().startsWith(search.toString()))
|
|
);
|
|
|
|
return (
|
|
<Form.Item noStyle name="billlineskeys">
|
|
<button onClick={() => console.log(form.getFieldsValue())}>form</button>
|
|
<Input onChange={(e) => setSearch(e.target.value)} allowClear />
|
|
<Table pagination={false} size="small" columns={columns} rowKey="id" dataSource={data} />
|
|
</Form.Item>
|
|
);
|
|
}
|