diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index d17061552..120ba6e46 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -3451,6 +3451,27 @@ statuses + + active_statuses + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + default_arrived false @@ -3745,6 +3766,48 @@ + + post_production_statuses + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + pre_production_statuses + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + production_statuses false diff --git a/client/src/components/contract-jobs/contract-jobs.container.jsx b/client/src/components/contract-jobs/contract-jobs.container.jsx index cd626e75a..7d4b066ab 100644 --- a/client/src/components/contract-jobs/contract-jobs.container.jsx +++ b/client/src/components/contract-jobs/contract-jobs.container.jsx @@ -9,17 +9,17 @@ import { QUERY_ALL_ACTIVE_JOBS } from "../../graphql/jobs.queries"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser - bodyshop: selectBodyshop + bodyshop: selectBodyshop, }); export function ContractJobsContainer({ selectedJobState, bodyshop }) { const { loading, error, data } = useQuery(QUERY_ALL_ACTIVE_JOBS, { variables: { - statuses: bodyshop.md_ro_statuses.open_statuses || ["Open"] - } + statuses: bodyshop.md_ro_statuses.active_statuses || ["Open"], + }, }); const [selectedJob, setSelectedJob] = selectedJobState; - const handleSelect = record => { + const handleSelect = (record) => { setSelectedJob(record.id); }; diff --git a/client/src/components/jobs-change-status/jobs-change-status.component.jsx b/client/src/components/jobs-change-status/jobs-change-status.component.jsx new file mode 100644 index 000000000..61d35290e --- /dev/null +++ b/client/src/components/jobs-change-status/jobs-change-status.component.jsx @@ -0,0 +1,77 @@ +import { DownCircleFilled } from "@ant-design/icons"; +import { Button, Dropdown, Menu, notification } from "antd"; +import React, { useState, useEffect } from "react"; +import { useMutation } from "react-apollo"; +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 function JobsChangeStatus({ job, bodyshop }) { + const { t } = useTranslation(); + + const [availableStatuses, setAvailableStatuses] = useState([]); + 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") }); + }); + }; + useEffect(() => { + //Figure out what scenario were in, populate accodingly + if (job && bodyshop) { + if (bodyshop.md_ro_statuses.pre_production_statuses.includes(job.status)) + setAvailableStatuses(bodyshop.md_ro_statuses.pre_production_statuses); + else if (bodyshop.md_ro_statuses.production_statuses.includes(job.status)) + setAvailableStatuses(bodyshop.md_ro_statuses.production_statuses); + else if ( + bodyshop.md_ro_statuses.post_production_statuses.includes(job.status) + ) + setAvailableStatuses(bodyshop.md_ro_statuses.post_production_statuses); + else { + setAvailableStatuses(bodyshop.statuses); + } + } + }, [job, setAvailableStatuses, bodyshop]); + + const statusmenu = ( + { + updateJobStatus(e.key); + }} + > + {availableStatuses.map((item) => ( + {item} + ))} + + ); + + return ( + + + + ); +} +export default connect(mapStateToProps, mapDispatchToProps)(JobsChangeStatus); diff --git a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx index c190dadc7..af233ace9 100644 --- a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx +++ b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx @@ -1,5 +1,5 @@ -import { DownCircleFilled, PrinterFilled } from "@ant-design/icons"; -import { Button, Dropdown, Menu, PageHeader, Tag } from "antd"; +import { PrinterFilled } from "@ant-design/icons"; +import { Button, PageHeader, Tag } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; @@ -8,6 +8,7 @@ import { setModalContext } from "../../redux/modals/modals.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; import JobEmployeeAssignments from "../job-employee-assignments/job-employee-assignments.container"; +import JobsChangeStatus from "../jobs-change-status/jobs-change-status.component"; import JobsConvertButton from "../jobs-convert-button/jobs-convert-button.component"; import JobsDetailHeaderActions from "../jobs-detail-header-actions/jobs-detail-header-actions.component"; import OwnerTagPopoverComponent from "../owner-tag-popover/owner-tag-popover.component"; @@ -28,37 +29,15 @@ export function JobsDetailHeader({ refetch, setPrintCenterContext, bodyshop, - updateJobStatus, setScheduleContext, loading, form, }) { const { t } = useTranslation(); - const statusmenu = ( - { - updateJobStatus(e.key); - }} - > - {bodyshop.md_ro_statuses.statuses.map((item) => ( - {item} - ))} - - ); - const menuExtra = (
- - - +