@@ -0,0 +1,57 @@
|
|||||||
|
import { DownCircleFilled } from "@ant-design/icons";
|
||||||
|
import { useMutation } from "@apollo/client";
|
||||||
|
import { Button, Dropdown, Menu, notification } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import { createStructuredSelector } from "reselect";
|
||||||
|
import { UPDATE_JOB_STATUS } from "../../graphql/jobs.queries";
|
||||||
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
|
|
||||||
|
const mapStateToProps = createStructuredSelector({
|
||||||
|
bodyshop: selectBodyshop,
|
||||||
|
});
|
||||||
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
|
//setUserLanguage: language => dispatch(setUserLanguage(language))
|
||||||
|
});
|
||||||
|
export default connect(mapStateToProps, mapDispatchToProps)(JobsAdminStatus);
|
||||||
|
|
||||||
|
export function JobsAdminStatus({ bodyshop, job }) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const [mutationUpdateJobstatus] = useMutation(UPDATE_JOB_STATUS);
|
||||||
|
const updateJobStatus = (status) => {
|
||||||
|
mutationUpdateJobstatus({
|
||||||
|
variables: { jobId: job.id, status: status },
|
||||||
|
})
|
||||||
|
.then((r) => {
|
||||||
|
notification["success"]({ message: t("jobs.successes.save") });
|
||||||
|
// refetch();
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
notification["error"]({ message: t("jobs.errors.saving") });
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const statusmenu = (
|
||||||
|
<Menu
|
||||||
|
onClick={(e) => {
|
||||||
|
updateJobStatus(e.key);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{bodyshop.md_ro_statuses.statuses.map((item) => (
|
||||||
|
<Menu.Item key={item}>{item}</Menu.Item>
|
||||||
|
))}
|
||||||
|
</Menu>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dropdown overlay={statusmenu} trigger={["click"]} key="changestatus">
|
||||||
|
<Button shape="round">
|
||||||
|
<span>{job.status}</span>
|
||||||
|
|
||||||
|
<DownCircleFilled />
|
||||||
|
</Button>
|
||||||
|
</Dropdown>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@ export const GetSupplementDelta = async (client, jobId, newLines) => {
|
|||||||
query: GET_ALL_JOBLINES_BY_PK,
|
query: GET_ALL_JOBLINES_BY_PK,
|
||||||
variables: { id: jobId },
|
variables: { id: jobId },
|
||||||
});
|
});
|
||||||
|
|
||||||
const existingLines = _.cloneDeep(existingLinesFromDb);
|
const existingLines = _.cloneDeep(existingLinesFromDb);
|
||||||
const linesToInsert = [];
|
const linesToInsert = [];
|
||||||
const linesToUpdate = [];
|
const linesToUpdate = [];
|
||||||
@@ -19,11 +20,14 @@ export const GetSupplementDelta = async (client, jobId, newLines) => {
|
|||||||
const matchingIndex = existingLines.findIndex(
|
const matchingIndex = existingLines.findIndex(
|
||||||
(eL) => eL.unq_seq === newLine.unq_seq
|
(eL) => eL.unq_seq === newLine.unq_seq
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//Should do a check to make sure there is only 1 matching unq sequence number.
|
||||||
|
|
||||||
if (matchingIndex >= 0) {
|
if (matchingIndex >= 0) {
|
||||||
//Found a relevant matching line. Add it to lines to update.
|
//Found a relevant matching line. Add it to lines to update.
|
||||||
linesToUpdate.push({
|
linesToUpdate.push({
|
||||||
id: existingLines[matchingIndex].id,
|
id: existingLines[matchingIndex].id,
|
||||||
newData: newLine,
|
newData: { ...newLine, removed: false },
|
||||||
});
|
});
|
||||||
|
|
||||||
//Splice out item we found for performance.
|
//Splice out item we found for performance.
|
||||||
|
|||||||
@@ -23,19 +23,6 @@ export const GET_ALL_JOBLINES_BY_PK = gql`
|
|||||||
notes
|
notes
|
||||||
location
|
location
|
||||||
tax_part
|
tax_part
|
||||||
parts_order_lines {
|
|
||||||
id
|
|
||||||
parts_order {
|
|
||||||
id
|
|
||||||
order_number
|
|
||||||
order_date
|
|
||||||
user_email
|
|
||||||
vendor {
|
|
||||||
id
|
|
||||||
name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import JobAdminOwnerReassociate from "../../components/jobs-admin-owner-reassoci
|
|||||||
import JobsAdminUnvoid from "../../components/jobs-admin-unvoid/jobs-admin-unvoid.component";
|
import JobsAdminUnvoid from "../../components/jobs-admin-unvoid/jobs-admin-unvoid.component";
|
||||||
import JobAdminVehicleReassociate from "../../components/jobs-admin-vehicle-reassociate/jobs-admin-vehicle-reassociate.component";
|
import JobAdminVehicleReassociate from "../../components/jobs-admin-vehicle-reassociate/jobs-admin-vehicle-reassociate.component";
|
||||||
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
||||||
|
import JobsAdminStatus from "../../components/jobs-admin-change-status/jobs-admin-change.status.component";
|
||||||
|
|
||||||
import NotFound from "../../components/not-found/not-found.component";
|
import NotFound from "../../components/not-found/not-found.component";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
import { GET_JOB_BY_PK } from "../../graphql/jobs.queries";
|
import { GET_JOB_BY_PK } from "../../graphql/jobs.queries";
|
||||||
@@ -96,6 +98,7 @@ export function JobsCloseContainer({ setBreadcrumbs, setSelectedHeader }) {
|
|||||||
<JobsAdminDeleteIntake job={data ? data.jobs_by_pk : {}} />
|
<JobsAdminDeleteIntake job={data ? data.jobs_by_pk : {}} />
|
||||||
<JobsAdminMarkReexport job={data ? data.jobs_by_pk : {}} />
|
<JobsAdminMarkReexport job={data ? data.jobs_by_pk : {}} />
|
||||||
<JobsAdminUnvoid job={data ? data.jobs_by_pk : {}} />
|
<JobsAdminUnvoid job={data ? data.jobs_by_pk : {}} />
|
||||||
|
<JobsAdminStatus job={data ? data.jobs_by_pk : {}} />
|
||||||
</Space>
|
</Space>
|
||||||
</Card>
|
</Card>
|
||||||
</Col>
|
</Col>
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ const generateInvoiceQbxml = (
|
|||||||
});
|
});
|
||||||
// console.log("Done creating hash", JSON.stringify(invoiceLineHash));
|
// console.log("Done creating hash", JSON.stringify(invoiceLineHash));
|
||||||
|
|
||||||
if (!hasMapaLine) {
|
if (!hasMapaLine && jobs_by_pk.job_totals.rates.mapa.total.amount > 0) {
|
||||||
console.log("Adding MAPA Line Manually.");
|
console.log("Adding MAPA Line Manually.");
|
||||||
const mapaAccountName = responsibilityCenters.defaults.profits.MAPA;
|
const mapaAccountName = responsibilityCenters.defaults.profits.MAPA;
|
||||||
|
|
||||||
@@ -313,7 +313,7 @@ const generateInvoiceQbxml = (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasMashLine) {
|
if (!hasMashLine && jobs_by_pk.job_totals.rates.mash.total.amount > 0) {
|
||||||
console.log("Adding MASH Line Manually.");
|
console.log("Adding MASH Line Manually.");
|
||||||
|
|
||||||
const mashAccountName = responsibilityCenters.defaults.profits.MASH;
|
const mashAccountName = responsibilityCenters.defaults.profits.MASH;
|
||||||
@@ -424,9 +424,11 @@ const generateInvoiceQbxml = (
|
|||||||
TxnDate: moment(jobs_by_pk.date_invoiced).format("YYYY-MM-DD"),
|
TxnDate: moment(jobs_by_pk.date_invoiced).format("YYYY-MM-DD"),
|
||||||
RefNumber: jobs_by_pk.ro_number,
|
RefNumber: jobs_by_pk.ro_number,
|
||||||
ShipAddress: {
|
ShipAddress: {
|
||||||
Addr1: `${jobs_by_pk.ownr_fn || ""} ${jobs_by_pk.ownr_ln || ""} ${
|
Addr1: jobs_by_pk.ownr_co_nm
|
||||||
jobs_by_pk.ownr_co_nm || ""
|
? jobs_by_pk.ownr_co_nm.substring(0, 30)
|
||||||
}`,
|
: `${`${jobs_by_pk.ownr_ln || ""} ${
|
||||||
|
jobs_by_pk.ownr_fn || ""
|
||||||
|
}`.substring(0, 30)}`,
|
||||||
Addr2: jobs_by_pk.ownr_addr1,
|
Addr2: jobs_by_pk.ownr_addr1,
|
||||||
Addr3: jobs_by_pk.ownr_addr2,
|
Addr3: jobs_by_pk.ownr_addr2,
|
||||||
City: jobs_by_pk.ownr_city,
|
City: jobs_by_pk.ownr_city,
|
||||||
|
|||||||
@@ -17,12 +17,13 @@ exports.generateOwnerTier = (jobs_by_pk, isThreeTier, twotierpref) => {
|
|||||||
if (isThreeTier) {
|
if (isThreeTier) {
|
||||||
//It's always gonna be the owner now. Same as 2 tier by name
|
//It's always gonna be the owner now. Same as 2 tier by name
|
||||||
return jobs_by_pk.ownr_co_nm
|
return jobs_by_pk.ownr_co_nm
|
||||||
? `${jobs_by_pk.ownr_co_nm} - ${jobs_by_pk.ownr_ln || ""} ${
|
? `${jobs_by_pk.ownr_co_nm.substring(0, 30)} #${
|
||||||
jobs_by_pk.ownr_fn || ""
|
|
||||||
} #${jobs_by_pk.owner.accountingid || ""}`
|
|
||||||
: `${jobs_by_pk.ownr_ln || ""} ${jobs_by_pk.ownr_fn || ""} #${
|
|
||||||
jobs_by_pk.owner.accountingid || ""
|
jobs_by_pk.owner.accountingid || ""
|
||||||
}`;
|
}`
|
||||||
|
: `${`${jobs_by_pk.ownr_ln || ""} ${jobs_by_pk.ownr_fn || ""}`.substring(
|
||||||
|
0,
|
||||||
|
30
|
||||||
|
)} #${jobs_by_pk.owner.accountingid || ""}`;
|
||||||
} else {
|
} else {
|
||||||
//What's the 2 tier pref?
|
//What's the 2 tier pref?
|
||||||
if (twotierpref === "source") {
|
if (twotierpref === "source") {
|
||||||
@@ -31,12 +32,12 @@ exports.generateOwnerTier = (jobs_by_pk, isThreeTier, twotierpref) => {
|
|||||||
} else {
|
} else {
|
||||||
//Same as 3 tier
|
//Same as 3 tier
|
||||||
return jobs_by_pk.ownr_co_nm
|
return jobs_by_pk.ownr_co_nm
|
||||||
? `${jobs_by_pk.ownr_co_nm} - ${jobs_by_pk.ownr_ln || ""} ${
|
? `${jobs_by_pk.ownr_co_nm.substring(0, 30)} #${
|
||||||
jobs_by_pk.ownr_fn || ""
|
|
||||||
} #${jobs_by_pk.owner.accountingid || ""}`
|
|
||||||
: `${jobs_by_pk.ownr_ln || ""} ${jobs_by_pk.ownr_fn || ""} #${
|
|
||||||
jobs_by_pk.owner.accountingid || ""
|
jobs_by_pk.owner.accountingid || ""
|
||||||
}`;
|
}`
|
||||||
|
: `${`${jobs_by_pk.ownr_ln || ""} ${
|
||||||
|
jobs_by_pk.ownr_fn || ""
|
||||||
|
}`.substring(0, 30)} #${jobs_by_pk.owner.accountingid || ""}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ query QUERY_JOBS_FOR_RECEIVABLES_EXPORT($ids: [uuid!]!) {
|
|||||||
ownerid
|
ownerid
|
||||||
ownr_ln
|
ownr_ln
|
||||||
ownr_fn
|
ownr_fn
|
||||||
|
ownr_co_nm
|
||||||
ownr_addr1
|
ownr_addr1
|
||||||
ownr_addr2
|
ownr_addr2
|
||||||
ownr_zip
|
ownr_zip
|
||||||
|
|||||||
Reference in New Issue
Block a user