diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel
index de7f4c2b7..194b68d3a 100644
--- a/bodyshop_translations.babel
+++ b/bodyshop_translations.babel
@@ -20730,6 +20730,27 @@
+
+ special_coverage_policy
+ false
+
+
+
+
+
+ en-US
+ false
+
+
+ es-MX
+ false
+
+
+ fr-CA
+ false
+
+
+
specialcoveragepolicy
false
diff --git a/client/src/components/production-board-kanban/production-board-kanban.component.jsx b/client/src/components/production-board-kanban/production-board-kanban.component.jsx
index 2d71c2889..2c3c4f6d0 100644
--- a/client/src/components/production-board-kanban/production-board-kanban.component.jsx
+++ b/client/src/components/production-board-kanban/production-board-kanban.component.jsx
@@ -14,12 +14,25 @@ import IndefiniteLoading from "../indefinite-loading/indefinite-loading.componen
import { logImEXEvent } from "../../firebase/firebase.utils";
import ProductionBoardFilters from "../production-board-filters/production-board-filters.component";
import { selectTechnician } from "../../redux/tech/tech.selectors";
+import { insertAuditTrail } from "../../redux/application/application.actions";
+import AuditTrailMapping from "../../utils/AuditTrailMappings";
+
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
technician: selectTechnician,
});
-export function ProductionBoardKanbanComponent({ data, bodyshop, technician }) {
+const mapDispatchToProps = (dispatch) => ({
+ insertAuditTrail: ({ jobid, operation }) =>
+ dispatch(insertAuditTrail({ jobid, operation })),
+});
+
+export function ProductionBoardKanbanComponent({
+ data,
+ bodyshop,
+ technician,
+ insertAuditTrail,
+}) {
const [boardLanes, setBoardLanes] = useState({
columns: [{ id: "Loading...", title: "Loading...", cards: [] }],
});
@@ -104,6 +117,11 @@ export function ProductionBoardKanbanComponent({ data, bodyshop, technician }) {
newChildCardNewParent
),
});
+ insertAuditTrail({
+ jobid: card.id,
+ operation: AuditTrailMapping.jobstatuschange(destination.toColumnId),
+ });
+
if (update.errors) {
notification["error"]({
message: t("production.errors.boardupdate", {
@@ -130,4 +148,7 @@ export function ProductionBoardKanbanComponent({ data, bodyshop, technician }) {
);
}
-export default connect(mapStateToProps, null)(ProductionBoardKanbanComponent);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(ProductionBoardKanbanComponent);
diff --git a/client/src/components/production-list-columns/production-list-columns.empassignment.component.jsx b/client/src/components/production-list-columns/production-list-columns.empassignment.component.jsx
index 0b99973bc..07d2f8b3f 100644
--- a/client/src/components/production-list-columns/production-list-columns.empassignment.component.jsx
+++ b/client/src/components/production-list-columns/production-list-columns.empassignment.component.jsx
@@ -16,24 +16,32 @@ import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { logImEXEvent } from "../../firebase/firebase.utils";
import { UPDATE_JOB } from "../../graphql/jobs.queries";
+import { insertAuditTrail } from "../../redux/application/application.actions";
import { selectBodyshop } from "../../redux/user/user.selectors";
+import AuditTrailMapping from "../../utils/AuditTrailMappings";
const iconStyle = { marginLeft: ".3rem" };
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
});
const mapDispatchToProps = (dispatch) => ({
- //setUserLanguage: language => dispatch(setUserLanguage(language))
+ insertAuditTrail: ({ jobid, operation }) =>
+ dispatch(insertAuditTrail({ jobid, operation })),
});
-export function ProductionListEmpAssignment({ bodyshop, record, type }) {
+export function ProductionListEmpAssignment({
+ insertAuditTrail,
+ bodyshop,
+ record,
+ type,
+}) {
const { t } = useTranslation();
const [updateJob] = useMutation(UPDATE_JOB);
const [loading, setLoading] = useState(false);
const handleAdd = async (assignment) => {
setLoading(true);
- const { operation, employeeid } = assignment;
+ const { operation, employeeid, name } = assignment;
logImEXEvent("job_assign_employee", { operation });
let empAssignment = determineFieldName(operation);
@@ -44,6 +52,11 @@ export function ProductionListEmpAssignment({ bodyshop, record, type }) {
awaitRefetchQueries: true,
});
+ insertAuditTrail({
+ jobid: record.id,
+ operation: AuditTrailMapping.jobassignmentchange(empAssignment, name),
+ });
+
if (!!result.errors) {
notification["error"]({
message: t("jobs.errors.assigning", {
@@ -64,6 +77,11 @@ export function ProductionListEmpAssignment({ bodyshop, record, type }) {
awaitRefetchQueries: true,
});
+ insertAuditTrail({
+ jobid: record.id,
+ operation: AuditTrailMapping.jobassignmentremoved(empAssignment),
+ });
+
if (!!result.errors) {
notification["error"]({
message: t("jobs.errors.assigning", {
@@ -80,8 +98,8 @@ export function ProductionListEmpAssignment({ bodyshop, record, type }) {
});
const [visibility, setVisibility] = useState(false);
- const onChange = (e) => {
- setAssignment({ ...assignment, employeeid: e });
+ const onChange = (e, option) => {
+ setAssignment({ ...assignment, employeeid: e, name: option.name });
};
const popContent = (
@@ -99,7 +117,11 @@ export function ProductionListEmpAssignment({ bodyshop, record, type }) {
}
>
{bodyshop.employees.map((emp) => (
-
+
{`${emp.first_name} ${emp.last_name}`}
))}
diff --git a/client/src/components/production-list-columns/production-list-columns.status.component.jsx b/client/src/components/production-list-columns/production-list-columns.status.component.jsx
index 7349f6b63..e29ffdbeb 100644
--- a/client/src/components/production-list-columns/production-list-columns.status.component.jsx
+++ b/client/src/components/production-list-columns/production-list-columns.status.component.jsx
@@ -6,12 +6,21 @@ import { createStructuredSelector } from "reselect";
import { logImEXEvent } from "../../firebase/firebase.utils";
import { UPDATE_JOB } from "../../graphql/jobs.queries";
import { selectBodyshop } from "../../redux/user/user.selectors";
+import { insertAuditTrail } from "../../redux/application/application.actions";
+import AuditTrailMapping from "../../utils/AuditTrailMappings";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
});
-
-export function ProductionListColumnStatus({ record, bodyshop }) {
+const mapDispatchToProps = (dispatch) => ({
+ insertAuditTrail: ({ jobid, operation }) =>
+ dispatch(insertAuditTrail({ jobid, operation })),
+});
+export function ProductionListColumnStatus({
+ record,
+ bodyshop,
+ insertAuditTrail,
+}) {
const [updateJob] = useMutation(UPDATE_JOB);
const [loading, setLoading] = useState(false);
@@ -28,6 +37,11 @@ export function ProductionListColumnStatus({ record, bodyshop }) {
},
},
});
+ insertAuditTrail({
+ jobid: record.id,
+ operation: AuditTrailMapping.jobstatuschange(key),
+ });
+
setLoading(false);
};
@@ -52,4 +66,7 @@ export function ProductionListColumnStatus({ record, bodyshop }) {
);
}
-export default connect(mapStateToProps, null)(ProductionListColumnStatus);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(ProductionListColumnStatus);
diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
index 6c752f480..75baa16bf 100644
--- a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
+++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
@@ -162,7 +162,9 @@ export function JobsDetailPage({
jobid: job.id,
operation: AuditTrailMapping.jobfieldchange(
key,
- changedAuditFields[key]
+ changedAuditFields[key] instanceof moment
+ ? moment(changedAuditFields[key]).format("MM/DD/YYYY hh:mm a")
+ : changedAuditFields[key]
),
});
});
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index ed6416c20..f3dfec0d0 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -1247,6 +1247,7 @@
"servicecar": "Service Car",
"servicing_dealer": "Servicing Dealer",
"servicing_dealer_contact": "Servicing Dealer Contact",
+ "special_coverage_policy": "Special Coverage Policy",
"specialcoveragepolicy": "Special Coverage Policy",
"state_tax_rate": "Provincial/State Tax Rate",
"status": "Job Status",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 2514ae112..78f6490d3 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -1247,6 +1247,7 @@
"servicecar": "Auto de servicio",
"servicing_dealer": "Distribuidor de servicio",
"servicing_dealer_contact": "Servicio Contacto con el concesionario",
+ "special_coverage_policy": "Política de cobertura especial",
"specialcoveragepolicy": "Política de cobertura especial",
"state_tax_rate": "",
"status": "Estado del trabajo",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 5fcd1efca..c0838ead4 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -1247,6 +1247,7 @@
"servicecar": "Voiture de service",
"servicing_dealer": "Concessionnaire",
"servicing_dealer_contact": "Contacter le concessionnaire",
+ "special_coverage_policy": "Politique de couverture spéciale",
"specialcoveragepolicy": "Politique de couverture spéciale",
"state_tax_rate": "",
"status": "Statut de l'emploi",