IO-1663 Add time to production board.
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user