IO-1644 Allow invoice date to be set on job closure.
This commit is contained in:
@@ -25469,6 +25469,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>invoicedatefuture</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>kmoutnotgreaterthankmin</name>
|
<name>kmoutnotgreaterthankmin</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
|
|||||||
@@ -1878,6 +1878,7 @@ export const QUERY_JOB_CLOSE_DETAILS = gql`
|
|||||||
scheduled_delivery
|
scheduled_delivery
|
||||||
actual_delivery
|
actual_delivery
|
||||||
scheduled_in
|
scheduled_in
|
||||||
|
date_invoiced
|
||||||
actual_in
|
actual_in
|
||||||
kmin
|
kmin
|
||||||
kmout
|
kmout
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export function JobsCloseComponent({ job, bodyshop, jobRO }) {
|
|||||||
jobId: job.id,
|
jobId: job.id,
|
||||||
job: {
|
job: {
|
||||||
status: bodyshop.md_ro_statuses.default_invoiced || "",
|
status: bodyshop.md_ro_statuses.default_invoiced || "",
|
||||||
date_invoiced: new Date(),
|
date_invoiced: values.date_invoiced,
|
||||||
actual_in: values.actual_in,
|
actual_in: values.actual_in,
|
||||||
actual_completion: values.actual_completion,
|
actual_completion: values.actual_completion,
|
||||||
actual_delivery: values.actual_delivery,
|
actual_delivery: values.actual_delivery,
|
||||||
@@ -119,6 +119,9 @@ export function JobsCloseComponent({ job, bodyshop, jobRO }) {
|
|||||||
actual_delivery: job.actual_delivery
|
actual_delivery: job.actual_delivery
|
||||||
? moment(job.actual_delivery)
|
? moment(job.actual_delivery)
|
||||||
: job.scheduled_delivery && moment(job.scheduled_delivery),
|
: job.scheduled_delivery && moment(job.scheduled_delivery),
|
||||||
|
date_invoiced: job.date_invoiced
|
||||||
|
? moment(job.date_invoiced)
|
||||||
|
: moment(),
|
||||||
kmin: job.kmin,
|
kmin: job.kmin,
|
||||||
kmout: job.kmout,
|
kmout: job.kmout,
|
||||||
dms_allocation: job.dms_allocation,
|
dms_allocation: job.dms_allocation,
|
||||||
@@ -219,6 +222,32 @@ export function JobsCloseComponent({ job, bodyshop, jobRO }) {
|
|||||||
>
|
>
|
||||||
<DateTimePicker disabled={jobRO} />
|
<DateTimePicker disabled={jobRO} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("jobs.fields.date_invoiced")}
|
||||||
|
name="date_invoiced"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
({ getFieldValue }) => ({
|
||||||
|
validator(_, value) {
|
||||||
|
if (!bodyshop.cdk_dealerid) return Promise.resolve();
|
||||||
|
if (!value || moment(value).isSameOrAfter(moment(), "day")) {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.reject(
|
||||||
|
new Error(t("jobs.labels.dms.invoicedatefuture"))
|
||||||
|
);
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<DateTimePicker
|
||||||
|
disabled={jobRO}
|
||||||
|
onlyFuture={!!bodyshop.cdk_dealerid}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
{(bodyshop.cdk_dealerid || bodyshop.pbs_serialnumber) && (
|
{(bodyshop.cdk_dealerid || bodyshop.pbs_serialnumber) && (
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label={t("jobs.fields.kmin")}
|
label={t("jobs.fields.kmin")}
|
||||||
|
|||||||
@@ -1507,6 +1507,7 @@
|
|||||||
"diskscan": "Scan Disk for Estimates",
|
"diskscan": "Scan Disk for Estimates",
|
||||||
"dms": {
|
"dms": {
|
||||||
"defaultstory": "Bodyshop RO {{ro_number}}. Damage to $t(jobs.fields.area_of_damage_impact.{{area_of_damage}}).",
|
"defaultstory": "Bodyshop RO {{ro_number}}. Damage to $t(jobs.fields.area_of_damage_impact.{{area_of_damage}}).",
|
||||||
|
"invoicedatefuture": "Invoice date must be today or in the future for CDK posting.",
|
||||||
"kmoutnotgreaterthankmin": "Mileage out must be greater than mileage in.",
|
"kmoutnotgreaterthankmin": "Mileage out must be greater than mileage in.",
|
||||||
"logs": "Logs",
|
"logs": "Logs",
|
||||||
"notallocated": "Not Allocated",
|
"notallocated": "Not Allocated",
|
||||||
|
|||||||
@@ -1507,6 +1507,7 @@
|
|||||||
"diskscan": "",
|
"diskscan": "",
|
||||||
"dms": {
|
"dms": {
|
||||||
"defaultstory": "",
|
"defaultstory": "",
|
||||||
|
"invoicedatefuture": "",
|
||||||
"kmoutnotgreaterthankmin": "",
|
"kmoutnotgreaterthankmin": "",
|
||||||
"logs": "",
|
"logs": "",
|
||||||
"notallocated": "",
|
"notallocated": "",
|
||||||
|
|||||||
@@ -1507,6 +1507,7 @@
|
|||||||
"diskscan": "",
|
"diskscan": "",
|
||||||
"dms": {
|
"dms": {
|
||||||
"defaultstory": "",
|
"defaultstory": "",
|
||||||
|
"invoicedatefuture": "",
|
||||||
"kmoutnotgreaterthankmin": "",
|
"kmoutnotgreaterthankmin": "",
|
||||||
"logs": "",
|
"logs": "",
|
||||||
"notallocated": "",
|
"notallocated": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user