Updates to production list drawer. IO-221

This commit is contained in:
Patrick Fic
2021-03-03 11:46:45 -08:00
parent 598741372a
commit 7b35403981
9 changed files with 144 additions and 67 deletions

View File

@@ -1,4 +1,4 @@
<babeledit_project be_version="2.7.1" version="1.2">
<babeledit_project version="1.2" be_version="2.7.1">
<!--
BabelEdit project file
@@ -26546,27 +26546,6 @@
</translation>
</translations>
</concept_node>
<concept_node>
<name>cycletime</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>
<name>detailpriority</name>
<definition_loaded>false</definition_loaded>
@@ -26714,6 +26693,27 @@
</translation>
</translations>
</concept_node>
<concept_node>
<name>touchtime</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>
</children>
</folder_node>
<folder_node>

View File

@@ -6,7 +6,7 @@ import { UPDATE_JOB } from "../../graphql/jobs.queries";
import JobEmployeeAssignmentsComponent from "./job-employee-assignments.component";
import { logImEXEvent } from "../../firebase/firebase.utils";
export default function JobEmployeeAssignmentsContainer({ job }) {
export default function JobEmployeeAssignmentsContainer({ job, refetch }) {
const { t } = useTranslation();
const [updateJob] = useMutation(UPDATE_JOB);
@@ -21,6 +21,7 @@ export default function JobEmployeeAssignmentsContainer({ job }) {
refetchQueries: ["GET_JOB_BY_PK"],
awaitRefetchQueries: true,
});
if (refetch) refetch();
if (!!result.errors) {
notification["error"]({

View File

@@ -105,6 +105,15 @@ export function JobsDetailGeneral({ bodyshop, jobRO, job, form }) {
))}
</Select>
</Form.Item>
<Form.Item label={t("jobs.fields.alt_transport")} name="alt_transport">
<Select disabled={jobRO}>
{bodyshop.appt_alt_transport.map((s) => (
<Select.Option key={s} value={s}>
{s}
</Select.Option>
))}
</Select>
</Form.Item>
</FormRow>
<Row gutter={[16, 16]}>
<Col {...lossColFields}>

View File

@@ -191,9 +191,9 @@ const r = [
render: (text, record) => <ProductionListColumnNote record={record} />,
},
{
title: i18n.t("production.labels.cycletime"),
dataIndex: "ct",
key: "ct",
title: i18n.t("production.labels.touchtime"),
dataIndex: "tt",
key: "tt",
render: (text, record) => {
return <ProductionlistColumnTouchTime job={record} />;
},

View File

@@ -1,12 +1,21 @@
import { Descriptions, Drawer } from "antd";
import { useQuery } from "@apollo/client";
import { Descriptions, Drawer, Space } from "antd";
import queryString from "query-string";
import React from "react";
import { useTranslation } from "react-i18next";
import { useHistory, useLocation } from "react-router-dom";
import { QUERY_JOB_CARD_DETAILS } from "../../graphql/jobs.queries";
import CurrencyFormatter from "../../utils/CurrencyFormatter";
import { DateFormatter } from "../../utils/DateFormatter";
import PartsStatusPie from "../parts-status-pie/parts-status-pie.component";
import AlertComponent from "../alert/alert.component";
import StartChatButton from "../chat-open-button/chat-open-button.component";
import JobDetailCardsDocumentsComponent from "../job-detail-cards/job-detail-cards.documents.component";
import JobDetailCardsNotesComponent from "../job-detail-cards/job-detail-cards.notes.component";
import JobDetailCardsPartsComponent from "../job-detail-cards/job-detail-cards.parts.component";
import JobEmployeeAssignments from "../job-employee-assignments/job-employee-assignments.container";
import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component";
import ProductionRemoveButton from "../production-remove-button/production-remove-button.component";
import ScheduleEventAt from "../schedule-event/schedule-event.at.component";
export default function ProductionListDetail({ jobs }) {
const search = queryString.parse(useLocation().search);
@@ -20,45 +29,87 @@ export default function ProductionListDetail({ jobs }) {
delete search.selected;
history.push({ search: queryString.stringify(search) });
};
const { loading, error, data, refetch } = useQuery(QUERY_JOB_CARD_DETAILS, {
variables: { id: selected },
skip: !selected,
});
return (
<Drawer
title={t("production.labels.jobdetail")}
title={
<Space>
<span>{t("production.labels.jobdetail")}</span>
<span>{theJob.ro_number}</span>
<ProductionRemoveButton jobId={theJob.id} />
</Space>
}
placement="right"
width={"33%"}
onClose={handleClose}
visible={!!selected}
visible={selected}
>
<div>
<Descriptions bordered size="small" column={1}>
<Descriptions.Item label={t("jobs.fields.ro_number")}>
{theJob.ro_number || ""}
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.owner")}>
{`${theJob.ownr_fn || ""} ${theJob.ownr_ln || ""} ${
theJob.ownr_co_nm || ""
}`}
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.vehicle")}>
{`${theJob.v_model_yr || ""} ${theJob.v_color || ""} ${
theJob.v_make_desc || ""
} ${theJob.v_model_desc || ""}`}
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.clm_total")}>
<CurrencyFormatter>{theJob.clm_total}</CurrencyFormatter>
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.actual_in")}>
<DateFormatter>{theJob.actual_in}</DateFormatter>
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.scheduled_completion")}>
<DateFormatter>{theJob.scheduled_completion}</DateFormatter>
</Descriptions.Item>
<Descriptions.Item label={t("jobs.labels.parts")}>
<PartsStatusPie joblines_status={theJob.joblines_status} />
</Descriptions.Item>
</Descriptions>
<ProductionRemoveButton jobId={theJob.id} />
</div>
{loading && <LoadingSkeleton />}
{error && <AlertComponent error={JSON.stringify(error)} />}
{!loading && data && (
<div>
<JobEmployeeAssignments job={data.jobs_by_pk} refetch={refetch} />
<Descriptions bordered size="small" column={1}>
<Descriptions.Item label={t("jobs.fields.ro_number")}>
{theJob.ro_number || ""}
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.alt_transport")}>
<Space>
{data.jobs_by_pk.alt_transport || ""}
<ScheduleEventAt event={{ job: data.jobs_by_pk }} />
</Space>
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.clm_no")}>
{theJob.clm_no || ""}
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.ins_co_nm")}>
{theJob.ins_co_nm || ""}
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.owner")}>
{`${theJob.ownr_fn || ""} ${theJob.ownr_ln || ""} ${
theJob.ownr_co_nm || ""
}`}
<StartChatButton
phone={data.jobs_by_pk.ownr_ph1}
jobid={data.jobs_by_pk.id}
/>
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.vehicle")}>
{`${theJob.v_model_yr || ""} ${theJob.v_color || ""} ${
theJob.v_make_desc || ""
} ${theJob.v_model_desc || ""}`}
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.clm_total")}>
<CurrencyFormatter>{theJob.clm_total}</CurrencyFormatter>
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.actual_in")}>
<DateFormatter>{theJob.actual_in}</DateFormatter>
</Descriptions.Item>
<Descriptions.Item label={t("jobs.fields.scheduled_completion")}>
<DateFormatter>{theJob.scheduled_completion}</DateFormatter>
</Descriptions.Item>
</Descriptions>
<JobDetailCardsPartsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsNotesComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsDocumentsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
</div>
)}
</Drawer>
);
}

View File

@@ -327,6 +327,7 @@ export const GET_JOB_BY_PK = gql`
first_name
last_name
}
alt_transport
intakechecklist
csr
loss_desc
@@ -554,6 +555,7 @@ export const QUERY_JOB_CARD_DETAILS = gql`
ownr_fn
employee_body
employee_refinish
alt_transport
ownr_ln
ownr_ph1
ownr_ea
@@ -610,7 +612,21 @@ export const QUERY_JOB_CARD_DETAILS = gql`
date_scheduled
date_estimated
employee_body_rel {
id
first_name
last_name
}
employee_refinish_rel {
id
first_name
last_name
}
employee_prep_rel {
id
first_name
last_name
}
notes {
id
text

View File

@@ -1605,14 +1605,14 @@
"alerton": "Add alert to job",
"bodyhours": "B",
"bodypriority": "B/P",
"cycletime": "C/T",
"detailpriority": "D/P",
"employeesearch": "Employee Search",
"jobdetail": "Job Details",
"note": "Production Note",
"paintpriority": "P/P",
"refinishhours": "R",
"sublets": "Sublets"
"sublets": "Sublets",
"touchtime": "T/T"
},
"successes": {
"removed": "Job removed from production."

View File

@@ -1605,14 +1605,14 @@
"alerton": "",
"bodyhours": "",
"bodypriority": "",
"cycletime": "",
"detailpriority": "",
"employeesearch": "",
"jobdetail": "",
"note": "",
"paintpriority": "",
"refinishhours": "",
"sublets": ""
"sublets": "",
"touchtime": ""
},
"successes": {
"removed": ""

View File

@@ -1605,14 +1605,14 @@
"alerton": "",
"bodyhours": "",
"bodypriority": "",
"cycletime": "",
"detailpriority": "",
"employeesearch": "",
"jobdetail": "",
"note": "",
"paintpriority": "",
"refinishhours": "",
"sublets": ""
"sublets": "",
"touchtime": ""
},
"successes": {
"removed": ""