feature/IO-3558-Reynolds-Part-2 - Admin Panel
This commit is contained in:
@@ -111,8 +111,14 @@ export function JobsConvertButton({ bodyshop, job, refetch, jobRO, insertAuditTr
|
|||||||
title: t("jobs.successes.early_ro_created", "Early RO Created"),
|
title: t("jobs.successes.early_ro_created", "Early RO Created"),
|
||||||
message: `RO Number: ${result.roNumber || "N/A"}`
|
message: `RO Number: ${result.roNumber || "N/A"}`
|
||||||
});
|
});
|
||||||
// Don't close the modal - just refetch so the form updates
|
// Delay refetch to keep success message visible for 2 seconds
|
||||||
refetch?.();
|
setTimeout(() => {
|
||||||
|
refetch?.();
|
||||||
|
}, 2000);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleModalClose = () => {
|
||||||
|
setOpen(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (job.converted) return <></>;
|
if (job.converted) return <></>;
|
||||||
@@ -136,7 +142,9 @@ export function JobsConvertButton({ bodyshop, job, refetch, jobRO, insertAuditTr
|
|||||||
{/* Convert Job Modal */}
|
{/* Convert Job Modal */}
|
||||||
<Modal
|
<Modal
|
||||||
open={open}
|
open={open}
|
||||||
onCancel={() => setOpen(false)}
|
onCancel={handleModalClose}
|
||||||
|
closable={!(earlyRoCreated && !job.converted)} // Disable X button if early RO created but not converted
|
||||||
|
maskClosable={!(earlyRoCreated && !job.converted)} // Disable clicking outside to close
|
||||||
title={t("jobs.actions.convert")}
|
title={t("jobs.actions.convert")}
|
||||||
footer={null}
|
footer={null}
|
||||||
width={700}
|
width={700}
|
||||||
@@ -157,6 +165,20 @@ export function JobsConvertButton({ bodyshop, job, refetch, jobRO, insertAuditTr
|
|||||||
referral_source_extra: job.referral_source_extra ?? ""
|
referral_source_extra: job.referral_source_extra ?? ""
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
{/* Show Reynolds Early RO section at the top if applicable */}
|
||||||
|
{isReynoldsMode && !job.dms_id && !earlyRoCreated && (
|
||||||
|
<>
|
||||||
|
<RREarlyROForm
|
||||||
|
bodyshop={bodyshop}
|
||||||
|
socket={socket}
|
||||||
|
job={job}
|
||||||
|
onSuccess={handleEarlyROSuccess}
|
||||||
|
showCancelButton={false}
|
||||||
|
/>
|
||||||
|
<Divider />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
<Form.Item
|
<Form.Item
|
||||||
name={["ins_co_nm"]}
|
name={["ins_co_nm"]}
|
||||||
label={t("jobs.fields.ins_co_nm")}
|
label={t("jobs.fields.ins_co_nm")}
|
||||||
@@ -285,20 +307,6 @@ export function JobsConvertButton({ bodyshop, job, refetch, jobRO, insertAuditTr
|
|||||||
<Switch />
|
<Switch />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
{/* Show Reynolds Early RO section if applicable */}
|
|
||||||
{isReynoldsMode && !job.dms_id && !earlyRoCreated && (
|
|
||||||
<>
|
|
||||||
<Divider />
|
|
||||||
<RREarlyROForm
|
|
||||||
bodyshop={bodyshop}
|
|
||||||
socket={socket}
|
|
||||||
job={job}
|
|
||||||
onSuccess={handleEarlyROSuccess}
|
|
||||||
showCancelButton={false}
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<Space wrap style={{ marginTop: 16 }}>
|
<Space wrap style={{ marginTop: 16 }}>
|
||||||
<Button
|
<Button
|
||||||
disabled={submitDisabled() || (isReynoldsMode && !job.dms_id && !earlyRoCreated)}
|
disabled={submitDisabled() || (isReynoldsMode && !job.dms_id && !earlyRoCreated)}
|
||||||
@@ -309,7 +317,12 @@ export function JobsConvertButton({ bodyshop, job, refetch, jobRO, insertAuditTr
|
|||||||
>
|
>
|
||||||
{t("jobs.actions.convert")}
|
{t("jobs.actions.convert")}
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={() => setOpen(false)}>{t("general.actions.close")}</Button>
|
<Button
|
||||||
|
onClick={handleModalClose}
|
||||||
|
disabled={earlyRoCreated && !job.converted}
|
||||||
|
>
|
||||||
|
{t("general.actions.close")}
|
||||||
|
</Button>
|
||||||
</Space>
|
</Space>
|
||||||
</Form>
|
</Form>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|||||||
@@ -3206,11 +3206,12 @@ exports.UPDATE_USER_FCM_TOKENS_BY_EMAIL = /* GraphQL */ `
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports.SET_JOB_DMS_ID = `mutation SetJobDmsId($id: uuid!, $dms_id: String!, $dms_customer_id: String, $dms_advisor_id: String) {
|
exports.SET_JOB_DMS_ID = `mutation SetJobDmsId($id: uuid!, $dms_id: String!, $dms_customer_id: String, $dms_advisor_id: String, $kmin: Int) {
|
||||||
update_jobs_by_pk(pk_columns: { id: $id }, _set: { dms_id: $dms_id, dms_customer_id: $dms_customer_id, dms_advisor_id: $dms_advisor_id }) {
|
update_jobs_by_pk(pk_columns: { id: $id }, _set: { dms_id: $dms_id, dms_customer_id: $dms_customer_id, dms_advisor_id: $dms_advisor_id, kmin: $kmin }) {
|
||||||
id
|
id
|
||||||
dms_id
|
dms_id
|
||||||
dms_customer_id
|
dms_customer_id
|
||||||
dms_advisor_id
|
dms_advisor_id
|
||||||
|
kmin
|
||||||
}
|
}
|
||||||
}`;
|
}`;
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ const getBodyshopForSocket = async ({ bodyshopId, socket }) => {
|
|||||||
* @param dmsAdvisorId
|
* @param dmsAdvisorId
|
||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
const setJobDmsIdForSocket = async ({ socket, jobId, dmsId, dmsCustomerId, dmsAdvisorId }) => {
|
const setJobDmsIdForSocket = async ({ socket, jobId, dmsId, dmsCustomerId, dmsAdvisorId, mileageIn }) => {
|
||||||
if (!jobId || !dmsId) {
|
if (!jobId || !dmsId) {
|
||||||
CreateRRLogEvent(socket, "WARN", "setJobDmsIdForSocket called without jobId or dmsId", {
|
CreateRRLogEvent(socket, "WARN", "setJobDmsIdForSocket called without jobId or dmsId", {
|
||||||
jobId,
|
jobId,
|
||||||
@@ -160,14 +160,16 @@ const setJobDmsIdForSocket = async ({ socket, jobId, dmsId, dmsCustomerId, dmsAd
|
|||||||
id: jobId,
|
id: jobId,
|
||||||
dms_id: String(dmsId),
|
dms_id: String(dmsId),
|
||||||
dms_customer_id: dmsCustomerId ? String(dmsCustomerId) : null,
|
dms_customer_id: dmsCustomerId ? String(dmsCustomerId) : null,
|
||||||
dms_advisor_id: dmsAdvisorId ? String(dmsAdvisorId) : null
|
dms_advisor_id: dmsAdvisorId ? String(dmsAdvisorId) : null,
|
||||||
|
kmin: mileageIn != null && mileageIn > 0 ? parseInt(mileageIn, 10) : null
|
||||||
});
|
});
|
||||||
|
|
||||||
CreateRRLogEvent(socket, "INFO", "Linked job.dms_id to RR RO", {
|
CreateRRLogEvent(socket, "INFO", "Linked job.dms_id to RR RO", {
|
||||||
jobId,
|
jobId,
|
||||||
dmsId: String(dmsId),
|
dmsId: String(dmsId),
|
||||||
dmsCustomerId,
|
dmsCustomerId,
|
||||||
dmsAdvisorId
|
dmsAdvisorId,
|
||||||
|
mileageIn
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
CreateRRLogEvent(socket, "ERROR", "Failed to set job.dms_id after RR create/update", {
|
CreateRRLogEvent(socket, "ERROR", "Failed to set job.dms_id after RR create/update", {
|
||||||
@@ -175,6 +177,7 @@ const setJobDmsIdForSocket = async ({ socket, jobId, dmsId, dmsCustomerId, dmsAd
|
|||||||
dmsId,
|
dmsId,
|
||||||
dmsCustomerId,
|
dmsCustomerId,
|
||||||
dmsAdvisorId,
|
dmsAdvisorId,
|
||||||
|
mileageIn,
|
||||||
message: err?.message || String(err),
|
message: err?.message || String(err),
|
||||||
stack: err?.stack
|
stack: err?.stack
|
||||||
});
|
});
|
||||||
@@ -709,20 +712,23 @@ const registerRREvents = ({ socket, redisHelpers }) => {
|
|||||||
jobId: rid
|
jobId: rid
|
||||||
});
|
});
|
||||||
|
|
||||||
// ✅ Persist DMS RO number, customer ID, and advisor ID on the job
|
// ✅ Persist DMS RO number, customer ID, advisor ID, and mileage on the job
|
||||||
if (dmsRoNo) {
|
if (dmsRoNo) {
|
||||||
|
const mileageIn = txEnvelope?.kmin ?? null;
|
||||||
CreateRRLogEvent(socket, "DEBUG", "Calling setJobDmsIdForSocket", {
|
CreateRRLogEvent(socket, "DEBUG", "Calling setJobDmsIdForSocket", {
|
||||||
jobId: rid,
|
jobId: rid,
|
||||||
dmsId: dmsRoNo,
|
dmsId: dmsRoNo,
|
||||||
customerId: effectiveCustNo,
|
customerId: effectiveCustNo,
|
||||||
advisorId: String(advisorNo)
|
advisorId: String(advisorNo),
|
||||||
|
mileageIn
|
||||||
});
|
});
|
||||||
await setJobDmsIdForSocket({
|
await setJobDmsIdForSocket({
|
||||||
socket,
|
socket,
|
||||||
jobId: rid,
|
jobId: rid,
|
||||||
dmsId: dmsRoNo,
|
dmsId: dmsRoNo,
|
||||||
dmsCustomerId: effectiveCustNo,
|
dmsCustomerId: effectiveCustNo,
|
||||||
dmsAdvisorId: String(advisorNo)
|
dmsAdvisorId: String(advisorNo),
|
||||||
|
mileageIn
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
CreateRRLogEvent(socket, "WARN", "RR early RO creation succeeded but no DMS RO number was returned", {
|
CreateRRLogEvent(socket, "WARN", "RR early RO creation succeeded but no DMS RO number was returned", {
|
||||||
|
|||||||
Reference in New Issue
Block a user