IO-1711 Cancel appointments from job
This commit is contained in:
@@ -29965,6 +29965,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>cancelallappointments</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>closejob</name>
|
<name>closejob</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { connect } from "react-redux";
|
|||||||
import { Link, useHistory } from "react-router-dom";
|
import { Link, useHistory } from "react-router-dom";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||||
|
import { CANCEL_APPOINTMENTS_BY_JOB_ID } from "../../graphql/appointments.queries";
|
||||||
import { DELETE_JOB, UPDATE_JOB, VOID_JOB } from "../../graphql/jobs.queries";
|
import { DELETE_JOB, UPDATE_JOB, VOID_JOB } from "../../graphql/jobs.queries";
|
||||||
import { selectJobReadOnly } from "../../redux/application/application.selectors";
|
import { selectJobReadOnly } from "../../redux/application/application.selectors";
|
||||||
import { setModalContext } from "../../redux/modals/modals.actions";
|
import { setModalContext } from "../../redux/modals/modals.actions";
|
||||||
@@ -56,6 +57,7 @@ export function JobsDetailHeaderActions({
|
|||||||
const [deleteJob] = useMutation(DELETE_JOB);
|
const [deleteJob] = useMutation(DELETE_JOB);
|
||||||
const [updateJob] = useMutation(UPDATE_JOB);
|
const [updateJob] = useMutation(UPDATE_JOB);
|
||||||
const [voidJob] = useMutation(VOID_JOB);
|
const [voidJob] = useMutation(VOID_JOB);
|
||||||
|
const [cancelAllAppointments] = useMutation(CANCEL_APPOINTMENTS_BY_JOB_ID);
|
||||||
const jobInProduction = useMemo(() => {
|
const jobInProduction = useMemo(() => {
|
||||||
return bodyshop.md_ro_statuses.production_statuses.includes(job.status);
|
return bodyshop.md_ro_statuses.production_statuses.includes(job.status);
|
||||||
}, [job, bodyshop.md_ro_statuses.production_statuses]);
|
}, [job, bodyshop.md_ro_statuses.production_statuses]);
|
||||||
@@ -121,6 +123,39 @@ export function JobsDetailHeaderActions({
|
|||||||
>
|
>
|
||||||
{t("jobs.actions.schedule")}
|
{t("jobs.actions.schedule")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
|
<Menu.Item
|
||||||
|
disabled={job.status !== bodyshop.md_ro_statuses.default_scheduled}
|
||||||
|
>
|
||||||
|
<Popconfirm
|
||||||
|
title={t("general.labels.areyousure")}
|
||||||
|
okText="Yes"
|
||||||
|
cancelText="No"
|
||||||
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
disabled={job.status !== bodyshop.md_ro_statuses.default_scheduled}
|
||||||
|
onConfirm={async () => {
|
||||||
|
const jobUpdate = await cancelAllAppointments({
|
||||||
|
variables: {
|
||||||
|
jobid: job.id,
|
||||||
|
job: {
|
||||||
|
date_scheduled: null,
|
||||||
|
scheduled_in: null,
|
||||||
|
scheduled_completion: null,
|
||||||
|
status: bodyshop.md_ro_statuses.default_imported,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if (!jobUpdate.errors) {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("appointments.successes.canceled"),
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
getPopupContainer={(trigger) => trigger.parentNode}
|
||||||
|
>
|
||||||
|
{t("menus.jobsactions.cancelallappointments")}
|
||||||
|
</Popconfirm>
|
||||||
|
</Menu.Item>
|
||||||
<Menu.Item
|
<Menu.Item
|
||||||
disabled={
|
disabled={
|
||||||
!!job.intakechecklist ||
|
!!job.intakechecklist ||
|
||||||
|
|||||||
@@ -245,6 +245,27 @@ export const CANCEL_APPOINTMENT_BY_ID = gql`
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const CANCEL_APPOINTMENTS_BY_JOB_ID = gql`
|
||||||
|
mutation CANCEL_APPOINTMENTS_BY_JOB_ID($jobid: uuid!, $job: jobs_set_input) {
|
||||||
|
update_appointments(
|
||||||
|
where: { _and: { jobid: { _eq: $jobid }, arrived: { _eq: false } } }
|
||||||
|
_set: { canceled: true }
|
||||||
|
) {
|
||||||
|
returning {
|
||||||
|
id
|
||||||
|
canceled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
update_jobs_by_pk(pk_columns: { id: $jobid }, _set: $job) {
|
||||||
|
date_scheduled
|
||||||
|
id
|
||||||
|
scheduled_in
|
||||||
|
scheduled_completion
|
||||||
|
status
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
export const QUERY_APPOINTMENTS_BY_JOBID = gql`
|
export const QUERY_APPOINTMENTS_BY_JOBID = gql`
|
||||||
query QUERY_APPOINTMENTS_BY_JOBID($jobid: uuid!) {
|
query QUERY_APPOINTMENTS_BY_JOBID($jobid: uuid!) {
|
||||||
appointments(where: { jobid: { _eq: $jobid } }, order_by: { start: desc }) {
|
appointments(where: { jobid: { _eq: $jobid } }, order_by: { start: desc }) {
|
||||||
|
|||||||
@@ -1759,6 +1759,7 @@
|
|||||||
},
|
},
|
||||||
"jobsactions": {
|
"jobsactions": {
|
||||||
"admin": "Admin",
|
"admin": "Admin",
|
||||||
|
"cancelallappointments": "Cancel all appointments",
|
||||||
"closejob": "Close Job",
|
"closejob": "Close Job",
|
||||||
"deletejob": "Delete Job",
|
"deletejob": "Delete Job",
|
||||||
"duplicate": "Duplicate this Job",
|
"duplicate": "Duplicate this Job",
|
||||||
|
|||||||
@@ -1759,6 +1759,7 @@
|
|||||||
},
|
},
|
||||||
"jobsactions": {
|
"jobsactions": {
|
||||||
"admin": "",
|
"admin": "",
|
||||||
|
"cancelallappointments": "",
|
||||||
"closejob": "",
|
"closejob": "",
|
||||||
"deletejob": "",
|
"deletejob": "",
|
||||||
"duplicate": "",
|
"duplicate": "",
|
||||||
|
|||||||
@@ -1759,6 +1759,7 @@
|
|||||||
},
|
},
|
||||||
"jobsactions": {
|
"jobsactions": {
|
||||||
"admin": "",
|
"admin": "",
|
||||||
|
"cancelallappointments": "",
|
||||||
"closejob": "",
|
"closejob": "",
|
||||||
"deletejob": "",
|
"deletejob": "",
|
||||||
"duplicate": "",
|
"duplicate": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user