Added remove from production button to kanban card. BOD-261

This commit is contained in:
Patrick Fic
2020-08-24 11:00:52 -07:00
parent 2acef8f726
commit 2cb8ae1359
10 changed files with 205 additions and 92 deletions

View File

@@ -7383,6 +7383,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>view</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>yes</name> <name>yes</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -10321,6 +10342,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>viewdetail</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> </children>
</folder_node> </folder_node>
<folder_node> <folder_node>
@@ -19424,6 +19466,32 @@
</concept_node> </concept_node>
</children> </children>
</folder_node> </folder_node>
<folder_node>
<name>successes</name>
<children>
<concept_node>
<name>removed</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>
</children> </children>
</folder_node> </folder_node>
<folder_node> <folder_node>

View File

@@ -106,7 +106,7 @@ export default function GlobalSearch() {
vehicle.v_model_yr || "" vehicle.v_model_yr || ""
} ${vehicle.v_make_desc || ""} ${ } ${vehicle.v_make_desc || ""} ${
vehicle.v_model_desc || "" vehicle.v_model_desc || ""
}`}</span> } - ${vehicle.plate_no} - ${vehicle.v_vin}`}</span>
</div> </div>
</Link> </Link>
), ),

View File

@@ -49,7 +49,13 @@ export function InvoiceDetailEditContainer({ bodyshop }) {
delete il.__typename; delete il.__typename;
updates.push( updates.push(
updateInvoiceLine({ updateInvoiceLine({
variables: { invoicelineId: il.id, invoiceLine: il }, variables: {
invoicelineId: il.id,
invoiceLine: {
...il,
joblineid: il.joblineid === "noline" ? null : il.joblineid,
},
},
}) })
); );
}); });

View File

@@ -1,24 +1,25 @@
import React from "react"; import React from "react";
export default function PartsStatusPie({ partsList }) { export default function PartsStatusPie({ partsList }) {
return <div>Parts Pie</div>;
//const [pieData, setPieData] = useState([]); //const [pieData, setPieData] = useState([]);
const result = partsList // const result = partsList
? partsList.reduce((names, name) => { // ? partsList.reduce((names, name) => {
const val = name || "?"; // const val = name || "?";
const count = names[val] || 0; // const count = names[val] || 0;
names[val] = count + 1; // names[val] = count + 1;
return names; // return names;
}, {}) // }, {})
: {}; // : {};
const pieData = Object.keys(result).map((i) => { // const pieData = Object.keys(result).map((i) => {
return { // return {
id: i, // id: i,
label: i, // label: i,
value: result[i], // value: result[i],
}; // };
}); // });
return <div>{JSON.stringify(pieData)}</div>; // return <div>{JSON.stringify(pieData)}</div>;
} }

View File

@@ -1,13 +1,25 @@
import React from "react"; import React from "react";
import { Card, Row, Col } from "antd"; import { Card, Row, Col, Dropdown } from "antd";
import { DateTimeFormatter } from "../../utils/DateFormatter"; import { DateTimeFormatter } from "../../utils/DateFormatter";
import ProductionAlert from "../production-list-columns/production-list-columns.alert.component"; import ProductionAlert from "../production-list-columns/production-list-columns.alert.component";
import { EyeFilled } from "@ant-design/icons"; import { EyeFilled } from "@ant-design/icons";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import "./production-board-card.styles.scss"; import "./production-board-card.styles.scss";
import ProductionRemoveButton from "../production-remove-button/production-remove-button.component";
import { useTranslation } from "react-i18next";
export default function ProductionBoardCard(card) { export default function ProductionBoardCard(card) {
const { t } = useTranslation();
const menu = (
<div>
<Card title={t("general.labels.actions")}>
<ProductionRemoveButton jobId={card.id} />
</Card>
</div>
);
return ( return (
<Dropdown overlay={menu} trigger={["contextMenu"]}>
<Card <Card
className="react-kanban-card imex-kanban-card tight-antd-rows" className="react-kanban-card imex-kanban-card tight-antd-rows"
style={{ margin: ".2rem 0rem" }} style={{ margin: ".2rem 0rem" }}
@@ -70,5 +82,6 @@ export default function ProductionBoardCard(card) {
</Link> </Link>
</div> </div>
</Card> </Card>
</Dropdown>
); );
} }

View File

@@ -1,28 +1,36 @@
import React from "react";
import { useMutation } from "@apollo/react-hooks"; import { useMutation } from "@apollo/react-hooks";
import { UPDATE_JOB } from "../../graphql/jobs.queries";
import { Button, notification } from "antd"; import { Button, notification } from "antd";
import React, { useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { logImEXEvent } from "../../firebase/firebase.utils"; import { logImEXEvent } from "../../firebase/firebase.utils";
import { UPDATE_JOB } from "../../graphql/jobs.queries";
export default function ProductionRemoveButton({ jobId }) { export default function ProductionRemoveButton({ jobId }) {
const [removeJobFromProduction] = useMutation(UPDATE_JOB); const [removeJobFromProduction] = useMutation(UPDATE_JOB);
const { t } = useTranslation(); const { t } = useTranslation();
const handleRemoveFromProd = () => { const [loading, setLoading] = useState(false);
logImEXEvent("production_remove_job");
removeJobFromProduction({ const handleRemoveFromProd = async () => {
logImEXEvent("production_remove_job");
setLoading(true);
const result = await removeJobFromProduction({
variables: { jobId: jobId, job: { inproduction: false } }, variables: { jobId: jobId, job: { inproduction: false } },
}).catch((error) => { });
if (!!!result.errors) {
notification["success"]({ message: t("production.successes.removed") });
} else {
notification["error"]({ notification["error"]({
message: t("production.errors.removing", { message: t("production.errors.removing", {
error: JSON.stringify(error), error: JSON.stringify(result.errors),
}), }),
}); });
}); }
setLoading(false);
}; };
return ( return (
<Button onClick={handleRemoveFromProd} type={"danger"}> <Button loading={loading} onClick={handleRemoveFromProd} type={"danger"}>
{t("production.actions.remove")} {t("production.actions.remove")}
</Button> </Button>
); );

View File

@@ -29,6 +29,8 @@ export const GLOBAL_SEARCH_QUERY = gql`
v_model_desc v_model_desc
v_make_desc v_make_desc
v_color v_color
v_vin
plate_no
} }
search_payments(args: { search: $search }) { search_payments(args: { search: $search }) {
id id

View File

@@ -474,6 +474,7 @@
"text": "Text", "text": "Text",
"unknown": "Unknown", "unknown": "Unknown",
"username": "Username", "username": "Username",
"view": "View",
"yes": "Yes" "yes": "Yes"
}, },
"languages": { "languages": {
@@ -664,7 +665,8 @@
"recalculate": "Recalculate", "recalculate": "Recalculate",
"reconcile": "Reconcile", "reconcile": "Reconcile",
"schedule": "Schedule", "schedule": "Schedule",
"sendcsi": "Send CSI" "sendcsi": "Send CSI",
"viewdetail": "View Details"
}, },
"errors": { "errors": {
"addingtoproduction": "Error adding to production. {{error}}", "addingtoproduction": "Error adding to production. {{error}}",
@@ -1190,6 +1192,9 @@
"note": "Production Note", "note": "Production Note",
"paintpriority": "P/P", "paintpriority": "P/P",
"refinishhours": "R" "refinishhours": "R"
},
"successes": {
"removed": "Job removed from production."
} }
}, },
"profile": { "profile": {

View File

@@ -474,6 +474,7 @@
"text": "", "text": "",
"unknown": "Desconocido", "unknown": "Desconocido",
"username": "", "username": "",
"view": "",
"yes": "" "yes": ""
}, },
"languages": { "languages": {
@@ -664,7 +665,8 @@
"recalculate": "", "recalculate": "",
"reconcile": "", "reconcile": "",
"schedule": "Programar", "schedule": "Programar",
"sendcsi": "" "sendcsi": "",
"viewdetail": ""
}, },
"errors": { "errors": {
"addingtoproduction": "", "addingtoproduction": "",
@@ -1190,6 +1192,9 @@
"note": "", "note": "",
"paintpriority": "", "paintpriority": "",
"refinishhours": "" "refinishhours": ""
},
"successes": {
"removed": ""
} }
}, },
"profile": { "profile": {

View File

@@ -474,6 +474,7 @@
"text": "", "text": "",
"unknown": "Inconnu", "unknown": "Inconnu",
"username": "", "username": "",
"view": "",
"yes": "" "yes": ""
}, },
"languages": { "languages": {
@@ -664,7 +665,8 @@
"recalculate": "", "recalculate": "",
"reconcile": "", "reconcile": "",
"schedule": "Programme", "schedule": "Programme",
"sendcsi": "" "sendcsi": "",
"viewdetail": ""
}, },
"errors": { "errors": {
"addingtoproduction": "", "addingtoproduction": "",
@@ -1190,6 +1192,9 @@
"note": "", "note": "",
"paintpriority": "", "paintpriority": "",
"refinishhours": "" "refinishhours": ""
},
"successes": {
"removed": ""
} }
}, },
"profile": { "profile": {