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 746b40abd..141cab456 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,17 +1,20 @@ import { BranchesOutlined, ExclamationCircleFilled, PauseCircleOutlined, WarningFilled } from "@ant-design/icons"; +import { useMutation } from "@apollo/client"; import { Card, Checkbox, Col, Divider, Row, Space, Tag, Tooltip } from "antd"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { Link } from "react-router-dom"; -import { useMutation } from "@apollo/client"; import { createStructuredSelector } from "reselect"; +import { useNotification } from "../../contexts/Notifications/notificationContext.jsx"; +import { UPDATE_JOB } from "../../graphql/jobs.queries"; +import { insertAuditTrail } from "../../redux/application/application.actions.js"; import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { setModalContext } from "../../redux/modals/modals.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import { UPDATE_JOB } from "../../graphql/jobs.queries"; +import AuditTrailMapping from "../../utils/AuditTrailMappings.js"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; -import { DateTimeFormatter } from "../../utils/DateFormatter"; +import { DateTimeFormatter, DateTimeFormatterFunction } from "../../utils/DateFormatter"; import dayjs from "../../utils/day"; import PhoneNumberFormatter from "../../utils/PhoneFormatter"; import ChatOpenButton from "../chat-open-button/chat-open-button.component"; @@ -24,7 +27,6 @@ import ProductionListColumnComment from "../production-list-columns/production-l import ProductionListColumnProductionNote from "../production-list-columns/production-list-columns.productionnote.component"; import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component"; import "./jobs-detail-header.styles.scss"; -import { useNotification } from "../../contexts/Notifications/notificationContext.jsx"; const mapStateToProps = createStructuredSelector({ jobRO: selectJobReadOnly, @@ -38,6 +40,14 @@ const mapDispatchToProps = (dispatch) => ({ context: context, modal: "printCenter" }) + ), + insertAuditTrail: ({ jobid, operation, type }) => + dispatch( + insertAuditTrail({ + jobid, + operation, + type + }) ) }); @@ -49,7 +59,7 @@ const colSpan = { xl: { span: 6 } }; -export function JobsDetailHeader({ job, bodyshop, disabled }) { +export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail }) { const { t } = useTranslation(); const { notification } = useNotification(); const [notesClamped, setNotesClamped] = useState(true); @@ -66,7 +76,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled }) { const handleCheckboxChange = async (field, checked) => { const value = checked ? dayjs().toISOString() : null; try { - await updateJob({ + const ret = await updateJob({ variables: { jobId: job.id, job: { [field]: value } @@ -74,6 +84,16 @@ export function JobsDetailHeader({ job, bodyshop, disabled }) { refetchQueries: ["GET_JOB_BY_PK"], awaitRefetchQueries: true }); + insertAuditTrail({ + jobid: job.id, + operation: AuditTrailMapping.jobfieldchange( + field, + ret.data.update_jobs.returning[0][field] + ? DateTimeFormatterFunction(ret.data.update_jobs.returning[0][field]) + : checked + ), + type: "jobfieldchange" + }); } catch (error) { notification.error({ message: t("jobs.errors.saving", { error: error.message }) diff --git a/client/src/utils/DateFormatter.jsx b/client/src/utils/DateFormatter.jsx index fe8315beb..574c1d229 100644 --- a/client/src/utils/DateFormatter.jsx +++ b/client/src/utils/DateFormatter.jsx @@ -1,6 +1,5 @@ import { Tooltip } from "antd"; import dayjs from "../utils/day"; -import React from "react"; export function DateFormatter(props) { return props.children ? dayjs(props.children).format(props.includeDay ? "ddd MM/DD/YYYY" : "MM/DD/YYYY") : null;