IO-1830 Add Parts Status to Production Boards.

This commit is contained in:
Patrick Fic
2022-04-18 14:28:53 -07:00
parent 988c3a9f22
commit 74297052d4
8 changed files with 100 additions and 9 deletions

View File

@@ -36770,6 +36770,27 @@
<folder_node> <folder_node>
<name>labels</name> <name>labels</name>
<children> <children>
<concept_node>
<name>actual_in</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node> <concept_node>
<name>alert</name> <name>alert</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -37221,6 +37242,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>partsstatus</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node> <concept_node>
<name>production_note</name> <name>production_note</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>

View File

@@ -12,8 +12,8 @@ const mapDispatchToProps = (dispatch) => ({
export default connect(mapStateToProps, mapDispatchToProps)(JobPartsQueueCount); export default connect(mapStateToProps, mapDispatchToProps)(JobPartsQueueCount);
export function JobPartsQueueCount({ bodyshop, parts }) { export function JobPartsQueueCount({ bodyshop, parts }) {
console.log(parts);
const partsStatus = useMemo(() => { const partsStatus = useMemo(() => {
if (!parts) return null;
return parts.reduce( return parts.reduce(
(acc, val) => { (acc, val) => {
acc.total = acc.total + val.count; acc.total = acc.total + val.count;
@@ -23,6 +23,7 @@ export function JobPartsQueueCount({ bodyshop, parts }) {
}, },
{ {
total: 0, total: 0,
null: 0,
[bodyshop.md_order_statuses.default_bo]: 0, [bodyshop.md_order_statuses.default_bo]: 0,
[bodyshop.md_order_statuses.default_ordered]: 0, [bodyshop.md_order_statuses.default_ordered]: 0,
[bodyshop.md_order_statuses.default_received]: 0, [bodyshop.md_order_statuses.default_received]: 0,
@@ -31,33 +32,35 @@ export function JobPartsQueueCount({ bodyshop, parts }) {
); );
}, [bodyshop, parts]); }, [bodyshop, parts]);
console.log( if (!parts) return null;
"🚀 ~ file: job-parts-queue-count.component.jsx ~ line 8 ~ partsStatus",
partsStatus
);
return ( return (
<Row> <Row>
<Col span={5}> <Col span={4}>
<Tooltip title="Total"> <Tooltip title="Total">
<Tag>{partsStatus.total}</Tag> <Tag>{partsStatus.total}</Tag>
</Tooltip> </Tooltip>
</Col> </Col>
<Col span={5}> <Col span={4}>
<Tooltip title="No Status">
<Tag color="gold">{partsStatus["null"]}</Tag>
</Tooltip>
</Col>
<Col span={4}>
<Tooltip title={bodyshop.md_order_statuses.default_ordered}> <Tooltip title={bodyshop.md_order_statuses.default_ordered}>
<Tag color="blue"> <Tag color="blue">
{partsStatus[bodyshop.md_order_statuses.default_ordered]} {partsStatus[bodyshop.md_order_statuses.default_ordered]}
</Tag> </Tag>
</Tooltip> </Tooltip>
</Col> </Col>
<Col span={5}> <Col span={4}>
<Tooltip title={bodyshop.md_order_statuses.default_received}> <Tooltip title={bodyshop.md_order_statuses.default_received}>
<Tag color="green"> <Tag color="green">
{partsStatus[bodyshop.md_order_statuses.default_received]} {partsStatus[bodyshop.md_order_statuses.default_received]}
</Tag> </Tag>
</Tooltip> </Tooltip>
</Col> </Col>
<Col span={5}> <Col span={4}>
<Tooltip title={bodyshop.md_order_statuses.default_returned}> <Tooltip title={bodyshop.md_order_statuses.default_returned}>
<Tag color="orange"> <Tag color="orange">
{partsStatus[bodyshop.md_order_statuses.default_returned]} {partsStatus[bodyshop.md_order_statuses.default_returned]}

View File

@@ -1,6 +1,7 @@
import { import {
CalendarOutlined, CalendarOutlined,
EyeFilled, EyeFilled,
DownloadOutlined,
PauseCircleOutlined, PauseCircleOutlined,
} from "@ant-design/icons"; } from "@ant-design/icons";
import { Card, Col, Row, Space } from "antd"; import { Card, Col, Row, Space } from "antd";
@@ -14,6 +15,7 @@ import ProductionSubletsManageComponent from "../production-sublets-manage/produ
import "./production-board-card.styles.scss"; import "./production-board-card.styles.scss";
import moment from "moment"; import moment from "moment";
import OwnerNameDisplay from "../owner-name-display/owner-name-display.component"; import OwnerNameDisplay from "../owner-name-display/owner-name-display.component";
import JobPartsQueueCount from "../job-parts-queue-count/job-parts-queue-count.component";
export default function ProductionBoardCard( export default function ProductionBoardCard(
technician, technician,
@@ -157,6 +159,16 @@ export default function ProductionBoardCard(
</Row> </Row>
</Col> </Col>
)} */} )} */}
{cardSettings && cardSettings.actual_in && card.actual_in && (
<Col span={cardSettings && cardSettings.compact ? 24 : 12}>
<Space>
<DownloadOutlined />
<DateTimeFormatter format="MM/DD">
{card.actual_in}
</DateTimeFormatter>
</Space>
</Col>
)}
{cardSettings && {cardSettings &&
cardSettings.scheduled_completion && cardSettings.scheduled_completion &&
card.scheduled_completion && ( card.scheduled_completion && (
@@ -188,6 +200,11 @@ export default function ProductionBoardCard(
)} )}
</Col> </Col>
)} )}
{cardSettings && cardSettings.partsstatus && (
<Col span={24}>
<JobPartsQueueCount parts={card.joblines_status} />
</Col>
)}
</Row> </Row>
</Card> </Card>
); );

View File

@@ -97,6 +97,13 @@ export default function ProductionBoardKanbanCardSettings({
> >
<Switch /> <Switch />
</Form.Item> </Form.Item>
<Form.Item
valuePropName="checked"
label={t("production.labels.actual_in")}
name="actual_in"
>
<Switch />
</Form.Item>
</Col> </Col>
<Col span={12}> <Col span={12}>
<Form.Item <Form.Item
@@ -131,6 +138,13 @@ export default function ProductionBoardKanbanCardSettings({
> >
<Switch /> <Switch />
</Form.Item> </Form.Item>
<Form.Item
valuePropName="checked"
label={t("production.labels.partsstatus")}
name="partsstatus"
>
<Switch />
</Form.Item>
<Form.Item <Form.Item
valuePropName="checked" valuePropName="checked"
label={t("production.labels.stickyheader")} label={t("production.labels.stickyheader")}

View File

@@ -23,6 +23,7 @@ import ProductionlistColumnTouchTime from "./prodution-list-columns.touchtime.co
import ProductionListColumnComment from "./production-list-columns.comment.component"; import ProductionListColumnComment from "./production-list-columns.comment.component";
import ProductionListColumnPartsReceived from "./production-list-columns.partsreceived.component"; import ProductionListColumnPartsReceived from "./production-list-columns.partsreceived.component";
import OwnerNameDisplay from "../owner-name-display/owner-name-display.component"; import OwnerNameDisplay from "../owner-name-display/owner-name-display.component";
import JobPartsQueueCount from "../job-parts-queue-count/job-parts-queue-count.component";
const r = ({ technician, state, activeStatuses, bodyshop }) => { const r = ({ technician, state, activeStatuses, bodyshop }) => {
return [ return [
@@ -490,6 +491,14 @@ const r = ({ technician, state, activeStatuses, bodyshop }) => {
<ProductionListColumnPartsReceived record={record} /> <ProductionListColumnPartsReceived record={record} />
), ),
}, },
{
title: i18n.t("jobs.fields.partsstatus"),
dataIndex: "partsstatus",
key: "partsstatus",
render: (text, record) => (
<JobPartsQueueCount parts={record.joblines_status} record={record} />
),
},
]; ];
}; };
export default r; export default r;

View File

@@ -2187,6 +2187,7 @@
"settings": "Error saving board settings: {{error}}" "settings": "Error saving board settings: {{error}}"
}, },
"labels": { "labels": {
"actual_in": "Actual In",
"alert": "Alert", "alert": "Alert",
"alertoff": "Remove alert from job", "alertoff": "Remove alert from job",
"alerton": "Add alert to job", "alerton": "Add alert to job",
@@ -2212,6 +2213,7 @@
"note": "Production Note", "note": "Production Note",
"ownr_nm": "Owner Name", "ownr_nm": "Owner Name",
"paintpriority": "P/P", "paintpriority": "P/P",
"partsstatus": "Parts Status",
"production_note": "Production Note", "production_note": "Production Note",
"refinishhours": "R", "refinishhours": "R",
"scheduled_completion": "Scheduled Completion", "scheduled_completion": "Scheduled Completion",

View File

@@ -2187,6 +2187,7 @@
"settings": "" "settings": ""
}, },
"labels": { "labels": {
"actual_in": "",
"alert": "", "alert": "",
"alertoff": "", "alertoff": "",
"alerton": "", "alerton": "",
@@ -2212,6 +2213,7 @@
"note": "", "note": "",
"ownr_nm": "", "ownr_nm": "",
"paintpriority": "", "paintpriority": "",
"partsstatus": "",
"production_note": "", "production_note": "",
"refinishhours": "", "refinishhours": "",
"scheduled_completion": "", "scheduled_completion": "",

View File

@@ -2187,6 +2187,7 @@
"settings": "" "settings": ""
}, },
"labels": { "labels": {
"actual_in": "",
"alert": "", "alert": "",
"alertoff": "", "alertoff": "",
"alerton": "", "alerton": "",
@@ -2212,6 +2213,7 @@
"note": "", "note": "",
"ownr_nm": "", "ownr_nm": "",
"paintpriority": "", "paintpriority": "",
"partsstatus": "",
"production_note": "", "production_note": "",
"refinishhours": "", "refinishhours": "",
"scheduled_completion": "", "scheduled_completion": "",