IO-2190 Factor Paint Costs from Scale over to Job Costing & Autohouse
If Paint Scale Data exist in MixData then use the LiquidCost is use_paint_scale_data is set to true else fall back to cost calculations
This commit is contained in:
@@ -11,13 +11,13 @@ import {
|
|||||||
} from "antd";
|
} from "antd";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
||||||
|
import FormItemEmail from "../form-items-formatted/email-form-item.component";
|
||||||
import PhoneFormItem, {
|
import PhoneFormItem, {
|
||||||
PhoneItemFormatterValidation,
|
PhoneItemFormatterValidation,
|
||||||
} from "../form-items-formatted/phone-form-item.component";
|
} from "../form-items-formatted/phone-form-item.component";
|
||||||
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
|
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
|
||||||
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
|
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
|
||||||
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
|
||||||
import FormItemEmail from "../form-items-formatted/email-form-item.component";
|
|
||||||
|
|
||||||
import momentTZ from "moment-timezone";
|
import momentTZ from "moment-timezone";
|
||||||
const timeZonesList = momentTZ.tz.names();
|
const timeZonesList = momentTZ.tz.names();
|
||||||
@@ -551,6 +551,13 @@ export default function ShopInfoGeneral({ form }) {
|
|||||||
>
|
>
|
||||||
<CurrencyInput />
|
<CurrencyInput />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
name={["use_paint_scale_data"]}
|
||||||
|
label={t("bodyshop.fields.use_paint_scale_data")}
|
||||||
|
valuePropName="checked"
|
||||||
|
>
|
||||||
|
<Switch />
|
||||||
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
name={["attach_pdf_to_email"]}
|
name={["attach_pdf_to_email"]}
|
||||||
label={t("bodyshop.fields.attach_pdf_to_email")}
|
label={t("bodyshop.fields.attach_pdf_to_email")}
|
||||||
|
|||||||
@@ -543,6 +543,7 @@
|
|||||||
"tt_allow_post_to_invoiced": "Allow Time Tickets to be posted to Invoiced & Exported Jobs",
|
"tt_allow_post_to_invoiced": "Allow Time Tickets to be posted to Invoiced & Exported Jobs",
|
||||||
"tt_enforce_hours_for_tech_console": "Restrict Claimable hours from Tech Console",
|
"tt_enforce_hours_for_tech_console": "Restrict Claimable hours from Tech Console",
|
||||||
"use_fippa": "Use FIPPA for Names on Generated Documents?",
|
"use_fippa": "Use FIPPA for Names on Generated Documents?",
|
||||||
|
"use_paint_scale_data": "Use Paint Scale Data for Job Costing?",
|
||||||
"uselocalmediaserver": "Use Local Media Server?",
|
"uselocalmediaserver": "Use Local Media Server?",
|
||||||
"website": "Website",
|
"website": "Website",
|
||||||
"zip_post": "Zip/Postal Code"
|
"zip_post": "Zip/Postal Code"
|
||||||
|
|||||||
@@ -543,6 +543,7 @@
|
|||||||
"tt_allow_post_to_invoiced": "",
|
"tt_allow_post_to_invoiced": "",
|
||||||
"tt_enforce_hours_for_tech_console": "",
|
"tt_enforce_hours_for_tech_console": "",
|
||||||
"use_fippa": "",
|
"use_fippa": "",
|
||||||
|
"use_paint_scale_data": "",
|
||||||
"uselocalmediaserver": "",
|
"uselocalmediaserver": "",
|
||||||
"website": "",
|
"website": "",
|
||||||
"zip_post": ""
|
"zip_post": ""
|
||||||
|
|||||||
@@ -543,6 +543,7 @@
|
|||||||
"tt_allow_post_to_invoiced": "",
|
"tt_allow_post_to_invoiced": "",
|
||||||
"tt_enforce_hours_for_tech_console": "",
|
"tt_enforce_hours_for_tech_console": "",
|
||||||
"use_fippa": "",
|
"use_fippa": "",
|
||||||
|
"use_paint_scale_data": "",
|
||||||
"uselocalmediaserver": "",
|
"uselocalmediaserver": "",
|
||||||
"website": "",
|
"website": "",
|
||||||
"zip_post": ""
|
"zip_post": ""
|
||||||
|
|||||||
@@ -767,18 +767,41 @@ const CreateCosts = (job) => {
|
|||||||
billTotalsByCostCenters[
|
billTotalsByCostCenters[
|
||||||
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
] = Dinero();
|
] = Dinero();
|
||||||
billTotalsByCostCenters[
|
if (job.bodyshop.use_paint_scale_data === true) {
|
||||||
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
if (job.mixdata.length > 0) {
|
||||||
] = billTotalsByCostCenters[
|
billTotalsByCostCenters[
|
||||||
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
].add(
|
] = Dinero({
|
||||||
Dinero({
|
amount: (job.mixdata[0] && job.mixdata[0].totalliquidcost * 100) || 0,
|
||||||
amount:
|
});
|
||||||
(job.bodyshop.jc_hourly_rates &&
|
} else {
|
||||||
job.bodyshop.jc_hourly_rates.mapa * 100) ||
|
billTotalsByCostCenters[
|
||||||
0,
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
}).multiply(job.job_totals.rates.mapa.hours)
|
] = billTotalsByCostCenters[
|
||||||
);
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
|
].add(
|
||||||
|
Dinero({
|
||||||
|
amount:
|
||||||
|
(job.bodyshop.jc_hourly_rates &&
|
||||||
|
job.bodyshop.jc_hourly_rates.mapa * 100) ||
|
||||||
|
0,
|
||||||
|
}).multiply(job.job_totals.rates.mapa.hours)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
billTotalsByCostCenters[
|
||||||
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
|
] = billTotalsByCostCenters[
|
||||||
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
|
].add(
|
||||||
|
Dinero({
|
||||||
|
amount:
|
||||||
|
(job.bodyshop.jc_hourly_rates &&
|
||||||
|
job.bodyshop.jc_hourly_rates.mapa * 100) ||
|
||||||
|
0,
|
||||||
|
}).multiply(materialsHours.mapaHrs)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (job.bodyshop.jc_hourly_rates && job.bodyshop.jc_hourly_rates.mash) {
|
if (job.bodyshop.jc_hourly_rates && job.bodyshop.jc_hourly_rates.mash) {
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -625,7 +625,6 @@ exports.QUERY_EMPLOYEE_PIN = `query QUERY_EMPLOYEE_PIN($shopId: uuid!, $employee
|
|||||||
|
|
||||||
exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshopid: uuid!, $end: timestamptz) {
|
exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshopid: uuid!, $end: timestamptz) {
|
||||||
bodyshops_by_pk(id: $bodyshopid){
|
bodyshops_by_pk(id: $bodyshopid){
|
||||||
|
|
||||||
id
|
id
|
||||||
shopname
|
shopname
|
||||||
address1
|
address1
|
||||||
@@ -641,6 +640,7 @@ exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshop
|
|||||||
jc_hourly_rates
|
jc_hourly_rates
|
||||||
cdk_dealerid
|
cdk_dealerid
|
||||||
pbs_serialnumber
|
pbs_serialnumber
|
||||||
|
use_paint_scale_data
|
||||||
timezone
|
timezone
|
||||||
}
|
}
|
||||||
jobs(where: {_and: [{converted: {_eq: true}}, {updated_at: {_gt: $start}}, {updated_at: {_lte: $end}}, {shopid: {_eq: $bodyshopid}}]}) {
|
jobs(where: {_and: [{converted: {_eq: true}}, {updated_at: {_gt: $start}}, {updated_at: {_lte: $end}}, {shopid: {_eq: $bodyshopid}}]}) {
|
||||||
@@ -796,6 +796,10 @@ exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshop
|
|||||||
employee_number
|
employee_number
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
|
mixdata(limit: 1, order_by: {updated_at: desc}) {
|
||||||
|
jobid
|
||||||
|
totalliquidcost
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
@@ -1188,12 +1192,17 @@ exports.QUERY_JOB_COSTING_DETAILS = ` query QUERY_JOB_COSTING_DETAILS($id: uuid!
|
|||||||
flat_rate
|
flat_rate
|
||||||
ciecacode
|
ciecacode
|
||||||
}
|
}
|
||||||
|
mixdata(limit: 1, order_by: {updated_at: desc}) {
|
||||||
|
jobid
|
||||||
|
totalliquidcost
|
||||||
|
}
|
||||||
bodyshop{
|
bodyshop{
|
||||||
id
|
id
|
||||||
md_responsibility_centers
|
md_responsibility_centers
|
||||||
jc_hourly_rates
|
jc_hourly_rates
|
||||||
cdk_dealerid
|
cdk_dealerid
|
||||||
pbs_serialnumber
|
pbs_serialnumber
|
||||||
|
use_paint_scale_data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}`;
|
}`;
|
||||||
@@ -1296,12 +1305,17 @@ exports.QUERY_JOB_COSTING_DETAILS_MULTI = ` query QUERY_JOB_COSTING_DETAILS_MULT
|
|||||||
flat_rate
|
flat_rate
|
||||||
ciecacode
|
ciecacode
|
||||||
}
|
}
|
||||||
|
mixdata(limit: 1, order_by: {updated_at: desc}) {
|
||||||
|
jobid
|
||||||
|
totalliquidcost
|
||||||
|
}
|
||||||
bodyshop {
|
bodyshop {
|
||||||
id
|
id
|
||||||
md_responsibility_centers
|
md_responsibility_centers
|
||||||
jc_hourly_rates
|
jc_hourly_rates
|
||||||
cdk_dealerid
|
cdk_dealerid
|
||||||
pbs_serialnumber
|
pbs_serialnumber
|
||||||
|
use_paint_scale_data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -621,18 +621,41 @@ function GenerateCostingData(job) {
|
|||||||
billTotalsByCostCenters.additionalCosts[
|
billTotalsByCostCenters.additionalCosts[
|
||||||
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
] = Dinero();
|
] = Dinero();
|
||||||
billTotalsByCostCenters.additionalCosts[
|
if (job.bodyshop.use_paint_scale_data === true) {
|
||||||
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
if (job.mixdata.length > 0) {
|
||||||
] = billTotalsByCostCenters.additionalCosts[
|
billTotalsByCostCenters.additionalCosts[
|
||||||
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
].add(
|
] = Dinero({
|
||||||
Dinero({
|
amount: (job.mixdata[0] && job.mixdata[0].totalliquidcost * 100) || 0,
|
||||||
amount:
|
});
|
||||||
(job.bodyshop.jc_hourly_rates &&
|
} else {
|
||||||
job.bodyshop.jc_hourly_rates.mapa * 100) ||
|
billTotalsByCostCenters.additionalCosts[
|
||||||
0,
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
}).multiply(materialsHours.mapaHrs)
|
] = billTotalsByCostCenters.additionalCosts[
|
||||||
);
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
|
].add(
|
||||||
|
Dinero({
|
||||||
|
amount:
|
||||||
|
(job.bodyshop.jc_hourly_rates &&
|
||||||
|
job.bodyshop.jc_hourly_rates.mapa * 100) ||
|
||||||
|
0,
|
||||||
|
}).multiply(materialsHours.mapaHrs)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
billTotalsByCostCenters.additionalCosts[
|
||||||
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
|
] = billTotalsByCostCenters.additionalCosts[
|
||||||
|
job.bodyshop.md_responsibility_centers.defaults.costs.MAPA
|
||||||
|
].add(
|
||||||
|
Dinero({
|
||||||
|
amount:
|
||||||
|
(job.bodyshop.jc_hourly_rates &&
|
||||||
|
job.bodyshop.jc_hourly_rates.mapa * 100) ||
|
||||||
|
0,
|
||||||
|
}).multiply(materialsHours.mapaHrs)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (job.bodyshop.jc_hourly_rates && job.bodyshop.jc_hourly_rates.mash) {
|
if (job.bodyshop.jc_hourly_rates && job.bodyshop.jc_hourly_rates.mash) {
|
||||||
|
|||||||
Reference in New Issue
Block a user