Implemented auto insertion of lbr adjustments on bill posting IO-571
This commit is contained in:
@@ -1,11 +1,16 @@
|
|||||||
import { useMutation } from "@apollo/react-hooks";
|
import { useApolloClient, useMutation } from "@apollo/react-hooks";
|
||||||
import { Button, Form, Modal, notification } from "antd";
|
import { Button, Form, Modal, notification } from "antd";
|
||||||
|
import _ from "lodash";
|
||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import { INSERT_NEW_BILL } from "../../graphql/bills.queries";
|
import { INSERT_NEW_BILL } from "../../graphql/bills.queries";
|
||||||
import { UPDATE_JOB_LINE_STATUS } from "../../graphql/jobs-lines.queries";
|
import { UPDATE_JOB_LINE_STATUS } from "../../graphql/jobs-lines.queries";
|
||||||
|
import {
|
||||||
|
QUERY_JOB_LBR_ADJUSTMENTS,
|
||||||
|
UPDATE_JOB,
|
||||||
|
} from "../../graphql/jobs.queries";
|
||||||
import { toggleModalVisible } from "../../redux/modals/modals.actions";
|
import { toggleModalVisible } from "../../redux/modals/modals.actions";
|
||||||
import { selectBillEnterModal } from "../../redux/modals/modals.selectors";
|
import { selectBillEnterModal } from "../../redux/modals/modals.selectors";
|
||||||
import {
|
import {
|
||||||
@@ -36,6 +41,7 @@ function BillEnterModalContainer({
|
|||||||
const [insertBill] = useMutation(INSERT_NEW_BILL);
|
const [insertBill] = useMutation(INSERT_NEW_BILL);
|
||||||
const [updateJobLines] = useMutation(UPDATE_JOB_LINE_STATUS);
|
const [updateJobLines] = useMutation(UPDATE_JOB_LINE_STATUS);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
const client = useApolloClient();
|
||||||
|
|
||||||
const handleFinish = async (values) => {
|
const handleFinish = async (values) => {
|
||||||
console.log(
|
console.log(
|
||||||
@@ -45,7 +51,7 @@ function BillEnterModalContainer({
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
const { upload, location, ...remainingValues } = values;
|
const { upload, location, ...remainingValues } = values;
|
||||||
|
|
||||||
const adjustmentsToInsert = [];
|
let adjustmentsToInsert = {};
|
||||||
|
|
||||||
const r1 = await insertBill({
|
const r1 = await insertBill({
|
||||||
variables: {
|
variables: {
|
||||||
@@ -57,11 +63,14 @@ function BillEnterModalContainer({
|
|||||||
remainingValues.billlines &&
|
remainingValues.billlines &&
|
||||||
remainingValues.billlines.map((i) => {
|
remainingValues.billlines.map((i) => {
|
||||||
const { deductfromlabor, lbr_adjustment, ...restI } = i;
|
const { deductfromlabor, lbr_adjustment, ...restI } = i;
|
||||||
|
console.log(
|
||||||
|
"🚀 ~ file: bill-enter-modal.container.jsx ~ line 60 ~ remainingValues.billlines.map ~ lbr_adjustment",
|
||||||
|
lbr_adjustment
|
||||||
|
);
|
||||||
if (deductfromlabor) {
|
if (deductfromlabor) {
|
||||||
adjustmentsToInsert.push({
|
adjustmentsToInsert[lbr_adjustment.mod_lbr_ty] =
|
||||||
...lbr_adjustment,
|
(adjustmentsToInsert[lbr_adjustment.mod_lbr_ty] || 0) -
|
||||||
act_price: i.act_price,
|
restI.actual_price / lbr_adjustment.rate;
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
...restI,
|
...restI,
|
||||||
@@ -73,6 +82,49 @@ function BillEnterModalContainer({
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
console.log("adjustmentsToInsert", adjustmentsToInsert);
|
||||||
|
const adjKeys = Object.keys(adjustmentsToInsert);
|
||||||
|
if (adjKeys.length > 0) {
|
||||||
|
//Query the adjustments, merge, and update them.
|
||||||
|
const existingAdjustments = await client.query({
|
||||||
|
query: QUERY_JOB_LBR_ADJUSTMENTS,
|
||||||
|
variables: {
|
||||||
|
id: values.jobid,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const newAdjustments = _.cloneDeep(
|
||||||
|
existingAdjustments.data.jobs_by_pk.lbr_adjustments
|
||||||
|
);
|
||||||
|
console.log(
|
||||||
|
"🚀 ~ file: bill-enter-modal.container.jsx ~ line 99 ~ handleFinish ~ newAdjustments",
|
||||||
|
newAdjustments
|
||||||
|
);
|
||||||
|
|
||||||
|
adjKeys.forEach((key) => {
|
||||||
|
newAdjustments[key] =
|
||||||
|
(newAdjustments[key] || 0) + adjustmentsToInsert[key];
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
"🚀 ~ file: bill-enter-modal.container.jsx ~ line 109 ~ adjKeys.forEach ~ newAdjustments",
|
||||||
|
newAdjustments
|
||||||
|
);
|
||||||
|
const jobUpdate = client.mutate({
|
||||||
|
mutation: UPDATE_JOB,
|
||||||
|
variables: {
|
||||||
|
jobId: values.jobid,
|
||||||
|
job: { lbr_adjustments: newAdjustments },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if (!!jobUpdate.errors) {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("jobs.errors.saving", {
|
||||||
|
message: JSON.stringify(jobUpdate.errors),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!!r1.errors) {
|
if (!!r1.errors) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
@@ -96,8 +148,6 @@ function BillEnterModalContainer({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("adjustmentsToInsert", adjustmentsToInsert);
|
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
if (upload && upload.length > 0) {
|
if (upload && upload.length > 0) {
|
||||||
//insert Each of the documents?
|
//insert Each of the documents?
|
||||||
|
|||||||
@@ -235,7 +235,9 @@ export function BillEnterModalLinesComponent({
|
|||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
shouldUpdate={(prev, cur) =>
|
shouldUpdate={(prev, cur) =>
|
||||||
|
prev.billlines[index] &&
|
||||||
prev.billlines[index].deductfromlabor !==
|
prev.billlines[index].deductfromlabor !==
|
||||||
|
cur.billlines[index] &&
|
||||||
cur.billlines[index].deductfromlabor
|
cur.billlines[index].deductfromlabor
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
@@ -322,7 +324,7 @@ export function BillEnterModalLinesComponent({
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<InputNumber precision={2} />
|
<InputNumber precision={2} min={0.01} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1309,3 +1309,12 @@ export const generate_UPDATE_JOB_KANBAN = (
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const QUERY_JOB_LBR_ADJUSTMENTS = gql`
|
||||||
|
query QUERY_JOB_LBR_ADJUSTMENTS($id: uuid!) {
|
||||||
|
jobs_by_pk(id: $id) {
|
||||||
|
id
|
||||||
|
lbr_adjustments
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|||||||
Reference in New Issue
Block a user