IO-1663 Add time to production board.

This commit is contained in:
Patrick Fic
2022-06-06 15:43:35 -07:00
parent 78dd14af85
commit ba55717683
3 changed files with 77 additions and 46 deletions

View File

@@ -5,25 +5,26 @@ import moment from "moment";
import React from "react"; import React from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import CurrencyFormatter from "../../utils/CurrencyFormatter"; import CurrencyFormatter from "../../utils/CurrencyFormatter";
import { TimeFormatter } from "../../utils/DateFormatter";
import PhoneFormatter from "../../utils/PhoneFormatter"; import PhoneFormatter from "../../utils/PhoneFormatter";
import { alphaSort, dateSort, statusSort } from "../../utils/sorters"; import { alphaSort, dateSort, statusSort } from "../../utils/sorters";
import JobAltTransportChange from "../job-at-change/job-at-change.component"; import JobAltTransportChange from "../job-at-change/job-at-change.component";
import JobPartsQueueCount from "../job-parts-queue-count/job-parts-queue-count.component";
import OwnerNameDisplay from "../owner-name-display/owner-name-display.component";
import ProductionSubletsManageComponent from "../production-sublets-manage/production-sublets-manage.component"; import ProductionSubletsManageComponent from "../production-sublets-manage/production-sublets-manage.component";
import ProductionListColumnAlert from "./production-list-columns.alert.component"; import ProductionListColumnAlert from "./production-list-columns.alert.component";
import ProductionListColumnBodyPriority from "./production-list-columns.bodypriority.component"; import ProductionListColumnBodyPriority from "./production-list-columns.bodypriority.component";
import ProductionListColumnComment from "./production-list-columns.comment.component";
import ProductionListDate from "./production-list-columns.date.component"; import ProductionListDate from "./production-list-columns.date.component";
import ProductionListColumnDetailPriority from "./production-list-columns.detailpriority.component"; import ProductionListColumnDetailPriority from "./production-list-columns.detailpriority.component";
import ProductionListEmployeeAssignment from "./production-list-columns.empassignment.component"; import ProductionListEmployeeAssignment from "./production-list-columns.empassignment.component";
import ProductionListLastContacted from "./production-list-columns.lastcontacted.component"; import ProductionListLastContacted from "./production-list-columns.lastcontacted.component";
import ProductionListColumnPaintPriority from "./production-list-columns.paintpriority.component"; import ProductionListColumnPaintPriority from "./production-list-columns.paintpriority.component";
import ProductionListColumnNote from "./production-list-columns.productionnote.component";
import ProductionListColumnStatus from "./production-list-columns.status.component";
import ProductionListColumnCategory from "./production-list-columns.status.category";
import ProductionlistColumnTouchTime from "./prodution-list-columns.touchtime.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 ProductionListColumnNote from "./production-list-columns.productionnote.component";
import JobPartsQueueCount from "../job-parts-queue-count/job-parts-queue-count.component"; import ProductionListColumnCategory from "./production-list-columns.status.category";
import ProductionListColumnStatus from "./production-list-columns.status.component";
import ProductionlistColumnTouchTime from "./prodution-list-columns.touchtime.component";
const r = ({ technician, state, activeStatuses, bodyshop }) => { const r = ({ technician, state, activeStatuses, bodyshop }) => {
return [ return [
@@ -105,6 +106,16 @@ const r = ({ technician, state, activeStatuses, bodyshop }) => {
<ProductionListDate record={record} field="actual_in" time /> <ProductionListDate record={record} field="actual_in" time />
), ),
}, },
{
title: i18n.t("jobs.fields.actual_in") + " (HH:MM)",
dataIndex: "actual_in_time",
key: "actual_in_time",
ellipsis: true,
render: (text, record) => (
<TimeFormatter>{record.actual_in}</TimeFormatter>
),
},
{ {
title: i18n.t("jobs.fields.scheduled_completion"), title: i18n.t("jobs.fields.scheduled_completion"),
dataIndex: "scheduled_completion", dataIndex: "scheduled_completion",
@@ -124,6 +135,16 @@ const r = ({ technician, state, activeStatuses, bodyshop }) => {
/> />
), ),
}, },
{
title: i18n.t("jobs.fields.scheduled_completion") + " (HH:MM)",
dataIndex: "scheduled_completion_time",
key: "scheduled_completion_time",
ellipsis: true,
render: (text, record) => (
<TimeFormatter>{record.scheduled_completion}</TimeFormatter>
),
},
{ {
title: i18n.t("jobs.fields.date_last_contacted"), title: i18n.t("jobs.fields.date_last_contacted"),
dataIndex: "date_last_contacted", dataIndex: "date_last_contacted",
@@ -176,6 +197,16 @@ const r = ({ technician, state, activeStatuses, bodyshop }) => {
/> />
), ),
}, },
{
title: i18n.t("jobs.fields.scheduled_delivery") + " (HH:MM)",
dataIndex: "scheduled_delivery_time",
key: "scheduled_delivery_time",
ellipsis: true,
render: (text, record) => (
<TimeFormatter>{record.scheduled_delivery}</TimeFormatter>
),
},
{ {
title: i18n.t("jobs.fields.ins_co_nm"), title: i18n.t("jobs.fields.ins_co_nm"),
dataIndex: "ins_co_nm", dataIndex: "ins_co_nm",

View File

@@ -50,50 +50,45 @@ export default function ProductionListDate({
"production-completion-soon")); "production-completion-soon"));
} }
return ( return (
<div> <Dropdown
<Dropdown //trigger={["click"]}
//trigger={["click"]} visible={visible}
visible={visible} style={{
style={{ height: "19px",
height: "19px", }}
}} overlay={
overlay={ <Card style={{ padding: "1rem" }} onClick={(e) => e.stopPropagation()}>
<Card <FormDatePicker
style={{ padding: "1rem" }}
onClick={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()}
> value={(record[field] && moment(record[field])) || null}
<FormDatePicker onChange={handleChange}
format="MM/DD/YYYY"
isDateOnly={!time}
/>
{time && (
<TimePicker
onClick={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()}
value={(record[field] && moment(record[field])) || null} value={(record[field] && moment(record[field])) || null}
onChange={handleChange} onChange={handleChange}
format="MM/DD/YYYY" minuteStep={15}
isDateOnly={!time} format="hh:mm a"
/> />
{time && ( )}
<TimePicker <Button onClick={() => setVisible(false)}>
onClick={(e) => e.stopPropagation()} {t("general.actions.close")}
value={(record[field] && moment(record[field])) || null} </Button>
onChange={handleChange} </Card>
minuteStep={15} }
format="hh:mm a" >
/> <div
)} onClick={() => setVisible(true)}
<Button onClick={() => setVisible(false)}> style={{
{t("general.actions.close")} height: "19px",
</Button> }}
</Card> className={className}
}
> >
<div <DateFormatter bordered={false}>{record[field]}</DateFormatter>
onClick={() => setVisible(true)} </div>
style={{ </Dropdown>
height: "19px",
}}
className={className}
>
<DateFormatter bordered={false}>{record[field]}</DateFormatter>
</div>
</Dropdown>
</div>
); );
} }

View File

@@ -17,6 +17,11 @@ export function DateTimeFormatter(props) {
) )
: null; : null;
} }
export function TimeFormatter(props) {
return props.children
? moment(props.children).format(props.format ? props.format : "hh:mm a")
: null;
}
export function TimeAgoFormatter(props) { export function TimeAgoFormatter(props) {
const m = moment(props.children); const m = moment(props.children);