import { useMutation } from "@apollo/client"; import { Button, Form, Input, Popover, Select, Space, Switch } from "antd"; import axios from "axios"; import { some } from "lodash"; import React, { useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { CONVERT_JOB_TO_RO } from "../../graphql/jobs.queries"; import { insertAuditTrail } from "../../redux/application/application.actions"; import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; import AuditTrailMapping from "../../utils/AuditTrailMappings"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { useNotification } from "../../contexts/Notifications/notificationContext.jsx"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser bodyshop: selectBodyshop, jobRO: selectJobReadOnly }); const mapDispatchToProps = (dispatch) => ({ insertAuditTrail: ({ jobid, operation, type }) => dispatch( insertAuditTrail({ jobid, operation, type }) ) }); export function JobsConvertButton({ bodyshop, job, refetch, jobRO, insertAuditTrail, parentFormIsFieldsTouched }) { const [open, setOpen] = useState(false); const [loading, setLoading] = useState(false); const [mutationConvertJob] = useMutation(CONVERT_JOB_TO_RO); const { t } = useTranslation(); const [form] = Form.useForm(); const notification = useNotification(); const allFormValues = Form.useWatch([], form); const handleConvert = async ({ employee_csr, category, ...values }) => { if (parentFormIsFieldsTouched()) { alert(t("jobs.labels.savebeforeconversion")); return; } setLoading(true); const res = await mutationConvertJob({ variables: { jobId: job.id, job: { converted: true, ...(bodyshop.enforce_conversion_csr ? { employee_csr } : {}), ...(bodyshop.enforce_conversion_category ? { category } : {}), ...values } } }); if (values.ca_gst_registrant) { await axios.post("/job/totalsssu", { id: job.id }); } if (!res.errors) { refetch(); notification["success"]({ message: t("jobs.successes.converted") }); insertAuditTrail({ jobid: job.id, operation: AuditTrailMapping.jobconverted(res.data.update_jobs.returning[0].ro_number), type: "jobconverted" }); setOpen(false); } setLoading(false); }; const submitDisabled = useCallback(() => some(allFormValues, (v) => v === undefined), [allFormValues]); const popMenu = (
{bodyshop.enforce_class && ( )} {bodyshop.enforce_referral && ( <> )} {bodyshop.enforce_conversion_csr && ( )} {bodyshop.enforce_conversion_category && ( )} {bodyshop.region_config.toLowerCase().startsWith("ca") && ( )}
); if (job.converted) return <>; return ( ); } export default connect(mapStateToProps, mapDispatchToProps)(JobsConvertButton);