IO-2278 Parts Dispatching tables & buttons.

This commit is contained in:
Patrick Fic
2023-06-07 08:25:49 -07:00
parent 4dc3bc1532
commit de102d9898
13 changed files with 541 additions and 48 deletions

View File

@@ -1,18 +1,19 @@
import React, { useState } from "react";
import { useMutation } from "@apollo/client";
import { Button, Form, Popover, Select, Space, notification } from "antd";
import moment from "moment";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { INSERT_PARTS_DISPATCH } from "../../graphql/parts-dispatch.queries";
import { selectJobReadOnly } from "../../redux/application/application.selectors";
import {
selectBodyshop,
selectCurrentUser,
} from "../../redux/user/user.selectors";
import { Button, Form, Popover, Select, Space } from "antd";
import { selectJobReadOnly } from "../../redux/application/application.selectors";
import { useTranslation } from "react-i18next";
import PrintWrapperComponent from "../print-wrapper/print-wrapper.component";
import { GenerateDocument } from "../../utils/RenderTemplate";
import { TemplateList } from "../../utils/TemplateConstants";
import { useMutation } from "@apollo/client";
import { UPDATE_JOB_LINE } from "../../graphql/jobs-lines.queries";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
jobRO: selectJobReadOnly,
@@ -42,31 +43,57 @@ export function JobLineDispatchButton({
ro_number: job.ro_number,
});
const { t } = useTranslation();
const [dispatchLines] = useMutation(UPDATE_JOB_LINE);
const [dispatchLines] = useMutation(INSERT_PARTS_DISPATCH);
const handleConvert = async (values) => {
try {
setLoading(true);
//THIS HAS NOT YET BEEN TESTED. START BY FINISHING THIS FUNCTION.
//THIS HAS NOT YET BEEN TESTED. START BY FINISHING THIS FUNCTION.
const result = await dispatchLines({
variables: {
joblinesids: selectedLines.map((l) => l.id),
employeeid: values.employeeid,
note: {
audit: true,
type: "parts",
partsDispatch: {
dispatched_at: moment(),
employeeid: values.employeeid,
jobid: job.id,
created_by: currentUser.email,
text: `${t("joblines.labels.dispatchaudit")}
${selectedLines.map((line) => `line.line_desc \r\n`)}
`,
dispatched_by: currentUser.email,
parts_dispatch_lines: {
data: selectedLines.map((l) => ({
joblineid: l.id,
quantity: l.part_qty,
})),
},
},
//joblineids: selectedLines.map((l) => l.id),
},
});
if (result.errors) {
notification.open({
type: "error",
message: t("parts_dispatch.errors.creating", {
error: JSON.stringify(result.errors),
}),
});
} else {
setSelectedLines([]);
await GenerateDocument(
{
name: Templates.parts_dispatch.key,
variables: {
id: result.data.insert_part_dispatch_one.id,
},
},
{},
"p"
);
}
setVisible(false);
} catch (error) {
console.error(error);
notification.open({
type: "error",
message: t("parts_dispatch.errors.creating", {
error: JSON.stringify(error),
}),
});
} finally {
setLoading(false);
}
@@ -77,7 +104,7 @@ export function JobLineDispatchButton({
<Form layout="vertical" form={form} onFinish={handleConvert}>
<Form.Item
name={"employeeid"}
label={t("jobs.fields.employeeid")}
label={t("timetickets.fields.employee")}
rules={[
{
required: true,
@@ -109,23 +136,6 @@ export function JobLineDispatchButton({
</Select>
</Form.Item>
<Form.Item shouldUpdate>
{() => {
return (
<PrintWrapperComponent
disabled={!form.getFieldValue("employeeid")}
templateObject={{
name: Templates.parts_dispatch.key,
variables: { id: job.id },
}}
messageObject={{
subject: Templates.parts_dispatch.subject,
}}
id={job.id}
/>
);
}}
</Form.Item>
<Space wrap>
<Button type="danger" onClick={() => form.submit()} loading={loading}>
{t("general.actions.save")}