IO-3432 Admin Clerk

Signed-off-by: Allan Carr <allan@imexsystems.ca>
This commit is contained in:
Allan Carr
2025-11-05 18:08:12 -08:00
parent 34ab42c0ad
commit 7573286163
9 changed files with 30 additions and 4 deletions

View File

@@ -77,6 +77,8 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
.reduce((acc, val) => acc + val.mod_lb_hrs, 0); .reduce((acc, val) => acc + val.mod_lb_hrs, 0);
const ownerTitle = OwnerNameDisplayFunction(job).trim(); const ownerTitle = OwnerNameDisplayFunction(job).trim();
const employeeData = bodyshop.associations.find((a) => a.useremail === job.admin_clerk)?.user?.employee ?? null;
// Handle checkbox changes // Handle checkbox changes
const handleCheckboxChange = async (field, checked) => { const handleCheckboxChange = async (field, checked) => {
const value = checked ? dayjs().toISOString() : null; const value = checked ? dayjs().toISOString() : null;
@@ -355,6 +357,14 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
> >
<div> <div>
<JobEmployeeAssignments job={job} /> <JobEmployeeAssignments job={job} />
{job.admin_clerk && (
<>
<Divider style={{ margin: ".5rem" }} />
<DataLabel label={t("jobs.fields.admin_clerk")}>
{employeeData?.displayName ?? job.admin_clerk}
</DataLabel>
</>
)}
<Divider style={{ margin: ".5rem" }} /> <Divider style={{ margin: ".5rem" }} />
<DataLabel label={t("jobs.labels.labor_hrs")}> <DataLabel label={t("jobs.labels.labor_hrs")}>
{bodyHrs.toFixed(1)} / {refinishHrs.toFixed(1)} / {(bodyHrs + refinishHrs).toFixed(1)} {bodyHrs.toFixed(1)} / {refinishHrs.toFixed(1)} / {(bodyHrs + refinishHrs).toFixed(1)}

View File

@@ -424,6 +424,7 @@ export const GET_JOB_BY_PK = gql`
actual_delivery actual_delivery
actual_in actual_in
acv_amount acv_amount
admin_clerk
adjustment_bottom_line adjustment_bottom_line
alt_transport alt_transport
area_of_damage area_of_damage
@@ -2347,12 +2348,13 @@ export const MARK_JOB_AS_UNINVOICED = gql`
mutation MARK_JOB_AS_UNINVOICED($jobId: uuid!, $default_delivered: String!) { mutation MARK_JOB_AS_UNINVOICED($jobId: uuid!, $default_delivered: String!) {
update_jobs_by_pk( update_jobs_by_pk(
pk_columns: { id: $jobId } pk_columns: { id: $jobId }
_set: { date_exported: null, date_invoiced: null, status: $default_delivered } _set: { date_exported: null, date_invoiced: null, status: $default_delivered, admin_clerk: null }
) { ) {
id id
date_exported date_exported
date_invoiced date_invoiced
status status
admin_clerk
} }
} }
`; `;

View File

@@ -39,13 +39,14 @@ import { UPDATE_JOB } from "../../graphql/jobs.queries";
import { insertAuditTrail } from "../../redux/application/application.actions"; import { insertAuditTrail } from "../../redux/application/application.actions";
import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { selectJobReadOnly } from "../../redux/application/application.selectors";
import { setModalContext } from "../../redux/modals/modals.actions.js"; import { setModalContext } from "../../redux/modals/modals.actions.js";
import { selectBodyshop } from "../../redux/user/user.selectors"; import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
import AuditTrailMapping from "../../utils/AuditTrailMappings"; import AuditTrailMapping from "../../utils/AuditTrailMappings";
import dayjs from "../../utils/day"; import dayjs from "../../utils/day";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop, bodyshop: selectBodyshop,
jobRO: selectJobReadOnly jobRO: selectJobReadOnly,
currentUser: selectCurrentUser
}); });
const mapDispatchToProps = (dispatch) => ({ const mapDispatchToProps = (dispatch) => ({
@@ -59,7 +60,7 @@ const mapDispatchToProps = (dispatch) => ({
) )
}); });
export function JobsCloseComponent({ job, bodyshop, jobRO, insertAuditTrail, setPrintCenterContext }) { export function JobsCloseComponent({ job, bodyshop, jobRO, insertAuditTrail, setPrintCenterContext, currentUser }) {
const { t } = useTranslation(); const { t } = useTranslation();
const [form] = Form.useForm(); const [form] = Form.useForm();
const client = useApolloClient(); const client = useApolloClient();
@@ -97,6 +98,7 @@ export function JobsCloseComponent({ job, bodyshop, jobRO, insertAuditTrail, set
kmin: values.kmin, kmin: values.kmin,
kmout: values.kmout, kmout: values.kmout,
dms_allocation: values.dms_allocation, dms_allocation: values.dms_allocation,
admin_clerk: currentUser.email,
...(removefromproduction ? { inproduction: false } : {}), ...(removefromproduction ? { inproduction: false } : {}),
...(values.qb_multiple_payers ? { qb_multiple_payers: values.qb_multiple_payers } : {}) ...(values.qb_multiple_payers ? { qb_multiple_payers: values.qb_multiple_payers } : {})
} }

View File

@@ -1678,6 +1678,7 @@
"actual_delivery": "Actual Delivery", "actual_delivery": "Actual Delivery",
"actual_in": "Actual In", "actual_in": "Actual In",
"acv_amount": "ACV Amount", "acv_amount": "ACV Amount",
"admin_clerk": "Admin Clerk",
"adjustment_bottom_line": "Adjustments", "adjustment_bottom_line": "Adjustments",
"adjustmenthours": "Adjustment Hours", "adjustmenthours": "Adjustment Hours",
"alt_transport": "Alt. Trans.", "alt_transport": "Alt. Trans.",

View File

@@ -1679,6 +1679,7 @@
"actual_in": "Real en", "actual_in": "Real en",
"acv_amount": "", "acv_amount": "",
"adjustment_bottom_line": "Ajustes", "adjustment_bottom_line": "Ajustes",
"admin_clerk": "",
"adjustmenthours": "", "adjustmenthours": "",
"alt_transport": "", "alt_transport": "",
"area_of_damage_impact": { "area_of_damage_impact": {

View File

@@ -1678,6 +1678,7 @@
"actual_delivery": "Livraison réelle", "actual_delivery": "Livraison réelle",
"actual_in": "En réel", "actual_in": "En réel",
"acv_amount": "", "acv_amount": "",
"admin_clerk": "",
"adjustment_bottom_line": "Ajustements", "adjustment_bottom_line": "Ajustements",
"adjustmenthours": "", "adjustmenthours": "",
"alt_transport": "", "alt_transport": "",

View File

@@ -3615,6 +3615,7 @@
- adj_strdis - adj_strdis
- adj_towdis - adj_towdis
- adjustment_bottom_line - adjustment_bottom_line
- admin_clerk
- agt_addr1 - agt_addr1
- agt_addr2 - agt_addr2
- agt_city - agt_city
@@ -3890,6 +3891,7 @@
- adj_strdis - adj_strdis
- adj_towdis - adj_towdis
- adjustment_bottom_line - adjustment_bottom_line
- admin_clerk
- agt_addr1 - agt_addr1
- agt_addr2 - agt_addr2
- agt_city - agt_city
@@ -4178,6 +4180,7 @@
- adj_strdis - adj_strdis
- adj_towdis - adj_towdis
- adjustment_bottom_line - adjustment_bottom_line
- admin_clerk
- agt_addr1 - agt_addr1
- agt_addr2 - agt_addr2
- agt_city - agt_city

View File

@@ -0,0 +1,4 @@
-- Could not auto-generate a down migration.
-- Please write an appropriate down migration for the SQL below:
-- alter table "public"."jobs" add column "admin_clerk" text
-- null;

View File

@@ -0,0 +1,2 @@
alter table "public"."jobs" add column "admin_clerk" text
null;