Added validation to job actions BOD-391
This commit is contained in:
@@ -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
|
||||
@@ -12064,6 +12064,27 @@
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>cannotintake</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>closing</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
|
||||
@@ -30,7 +30,7 @@ export function JobLinesComponent({
|
||||
setSearchText,
|
||||
selectedLines,
|
||||
setSelectedLines,
|
||||
jobId,
|
||||
job,
|
||||
setJobLineEditContext,
|
||||
}) {
|
||||
const [state, setState] = useState({
|
||||
@@ -308,12 +308,14 @@ export function JobLinesComponent({
|
||||
<SyncOutlined />
|
||||
</Button>
|
||||
<Button
|
||||
disabled={selectedLines.length > 0 ? false : true}
|
||||
disabled={
|
||||
!job.converted || (selectedLines.length > 0 ? false : true)
|
||||
}
|
||||
onClick={() => {
|
||||
setPartsOrderContext({
|
||||
actions: { refetch: refetch },
|
||||
context: {
|
||||
jobId: jobId,
|
||||
jobId: job.jobId,
|
||||
linesToOrder: selectedLines,
|
||||
},
|
||||
});
|
||||
@@ -346,7 +348,7 @@ export function JobLinesComponent({
|
||||
onClick={() => {
|
||||
setJobLineEditContext({
|
||||
actions: { refetch: refetch },
|
||||
context: { jobid: jobId },
|
||||
context: { jobid: job.jobId },
|
||||
});
|
||||
}}
|
||||
>
|
||||
@@ -370,7 +372,7 @@ export function JobLinesComponent({
|
||||
{record.parts_order_lines.map((item) => (
|
||||
<div key={item.id}>
|
||||
<Link
|
||||
to={`/manage/jobs/${jobId}?tab=partssublet&partsorderid=${item.parts_order.id}`}
|
||||
to={`/manage/jobs/${job.jobId}?tab=partssublet&partsorderid=${item.parts_order.id}`}
|
||||
>
|
||||
{item.parts_order.order_number || ""}
|
||||
</Link>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React, { useState } from "react";
|
||||
import JobLinesComponent from "./job-lines.component";
|
||||
|
||||
function JobLinesContainer({ jobId, joblines, refetch }) {
|
||||
function JobLinesContainer({ job, joblines, refetch }) {
|
||||
const [searchText, setSearchText] = useState("");
|
||||
const [selectedLines, setSelectedLines] = useState([]);
|
||||
|
||||
@@ -38,7 +38,7 @@ function JobLinesContainer({ jobId, joblines, refetch }) {
|
||||
setSearchText={setSearchText}
|
||||
selectedLines={selectedLines}
|
||||
setSelectedLines={setSelectedLines}
|
||||
jobId={jobId}
|
||||
job={job}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { DownCircleFilled } from "@ant-design/icons";
|
||||
import { useApolloClient } from "@apollo/react-hooks";
|
||||
import { Button, Dropdown, Menu, Popconfirm } from "antd";
|
||||
import React from "react";
|
||||
import React, { useMemo } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { Link, useHistory } from "react-router-dom";
|
||||
@@ -40,9 +40,25 @@ export function JobsDetailHeaderActions({
|
||||
const { t } = useTranslation();
|
||||
const client = useApolloClient();
|
||||
const history = useHistory();
|
||||
|
||||
const jobInProduction = useMemo(() => {
|
||||
return bodyshop.md_ro_statuses.production_statuses.includes(job.status);
|
||||
}, [job, bodyshop.md_ro_statuses.production_statuses]);
|
||||
|
||||
const jobInPreProduction = useMemo(() => {
|
||||
return bodyshop.md_ro_statuses.pre_production_statuses.includes(job.status);
|
||||
}, [job.status, bodyshop.md_ro_statuses.pre_production_statuses]);
|
||||
|
||||
const jobInPostProduction = useMemo(() => {
|
||||
return bodyshop.md_ro_statuses.post_production_statuses.includes(
|
||||
job.status
|
||||
);
|
||||
}, [job.status, bodyshop.md_ro_statuses.post_production_statuses]);
|
||||
|
||||
const statusmenu = (
|
||||
<Menu key="popovermenu">
|
||||
<Menu.Item
|
||||
disabled={!jobInPreProduction || !job.converted}
|
||||
onClick={() => {
|
||||
logImEXEvent("job_header_schedule");
|
||||
|
||||
@@ -57,8 +73,12 @@ export function JobsDetailHeaderActions({
|
||||
>
|
||||
{t("jobs.actions.schedule")}
|
||||
</Menu.Item>
|
||||
<Menu.Item disabled={!!job.intakechecklist}>
|
||||
{!!job.intakechecklist ? (
|
||||
<Menu.Item
|
||||
disabled={
|
||||
!!job.intakechecklist || !jobInPreProduction || !job.converted
|
||||
}
|
||||
>
|
||||
{!!job.intakechecklist || !jobInPreProduction || !job.converted ? (
|
||||
t("jobs.actions.intake")
|
||||
) : (
|
||||
<Link to={`/manage/jobs/${job.id}/intake`}>
|
||||
@@ -66,8 +86,8 @@ export function JobsDetailHeaderActions({
|
||||
</Link>
|
||||
)}
|
||||
</Menu.Item>
|
||||
<Menu.Item disabled={!!job.deliverchecklist}>
|
||||
{!!job.deliveryhecklist ? (
|
||||
<Menu.Item disabled={!jobInProduction}>
|
||||
{!jobInProduction ? (
|
||||
t("jobs.actions.deliver")
|
||||
) : (
|
||||
<Link to={`/manage/jobs/${job.id}/deliver`}>
|
||||
@@ -141,8 +161,11 @@ export function JobsDetailHeaderActions({
|
||||
>
|
||||
{t("jobs.actions.postInvoices")}
|
||||
</Menu.Item>
|
||||
<Menu.Item disabled={!!job.date_invoiced} key="closejob">
|
||||
{job.date_invoiced ? (
|
||||
<Menu.Item
|
||||
disabled={!!job.date_invoiced || !jobInPostProduction}
|
||||
key="closejob"
|
||||
>
|
||||
{!!job.date_invoiced || !jobInPostProduction ? (
|
||||
t("menus.jobsactions.closejob")
|
||||
) : (
|
||||
<Link
|
||||
|
||||
@@ -161,6 +161,8 @@ export const QUERY_INTAKE_CHECKLIST = gql`
|
||||
est_number
|
||||
scheduled_completion
|
||||
scheduled_delivery
|
||||
intakechecklist
|
||||
status
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -182,7 +182,7 @@ export function JobsDetailPage({
|
||||
key="repairdata"
|
||||
>
|
||||
<JobsLinesContainer
|
||||
jobId={job.id}
|
||||
job={job}
|
||||
joblines={job.joblines}
|
||||
refetch={refetch}
|
||||
/>
|
||||
|
||||
@@ -14,6 +14,7 @@ import {
|
||||
} from "../../redux/application/application.actions";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||
import { Result } from "antd";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
//currentUser: selectCurrentUser
|
||||
@@ -66,11 +67,21 @@ export function JobsIntakeContainer({
|
||||
return (
|
||||
<RbacWrapper action="jobs:intake">
|
||||
<div>
|
||||
<JobChecklist
|
||||
type="intake"
|
||||
checklistConfig={(data && data.bodyshops_by_pk.intakechecklist) || {}}
|
||||
job={data && data.jobs_by_pk}
|
||||
/>
|
||||
{!!data.jobs_by_pk.intakechecklist ||
|
||||
!(
|
||||
data.jobs_by_pk.status === bodyshop.md_ro_statuses.default_open ||
|
||||
data.jobs_by_pk.status === bodyshop.md_ro_statuses.default_scheduled
|
||||
) ? (
|
||||
<Result status="warning" title={t("jobs.errors.cannotintake")} />
|
||||
) : (
|
||||
<JobChecklist
|
||||
type="intake"
|
||||
checklistConfig={
|
||||
(data && data.bodyshops_by_pk.intakechecklist) || {}
|
||||
}
|
||||
job={data && data.jobs_by_pk}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</RbacWrapper>
|
||||
);
|
||||
|
||||
@@ -785,6 +785,7 @@
|
||||
},
|
||||
"errors": {
|
||||
"addingtoproduction": "Error adding to production. {{error}}",
|
||||
"cannotintake": "Intake cannot be completed for this job. It has either already been completed or the job is already here.",
|
||||
"closing": "Error closing job. {{error}}",
|
||||
"creating": "Error encountered while creating job. {{error}}",
|
||||
"deleted": "Error deleting job.",
|
||||
|
||||
@@ -785,6 +785,7 @@
|
||||
},
|
||||
"errors": {
|
||||
"addingtoproduction": "",
|
||||
"cannotintake": "",
|
||||
"closing": "",
|
||||
"creating": "",
|
||||
"deleted": "Error al eliminar el trabajo.",
|
||||
|
||||
@@ -785,6 +785,7 @@
|
||||
},
|
||||
"errors": {
|
||||
"addingtoproduction": "",
|
||||
"cannotintake": "",
|
||||
"closing": "",
|
||||
"creating": "",
|
||||
"deleted": "Erreur lors de la suppression du travail.",
|
||||
|
||||
Reference in New Issue
Block a user