IO-3510 Autohouse Datapump Enhancements
Signed-off-by: Allan Carr <allan@imexsystems.ca>
This commit is contained in:
@@ -221,6 +221,8 @@ const CreateRepairOrderTag = (job, errorCallback) => {
|
||||
|
||||
const repairCosts = CreateCosts(job);
|
||||
|
||||
const LaborDetailLines = generateLaborLines(job.timetickets);
|
||||
|
||||
//Calculate detail only lines.
|
||||
const detailAdjustments = job.joblines
|
||||
.filter((jl) => jl.ah_detail_line && jl.mod_lbr_ty)
|
||||
@@ -606,12 +608,14 @@ const CreateRepairOrderTag = (job, errorCallback) => {
|
||||
// CSIID: null,
|
||||
InsGroupCode: null
|
||||
},
|
||||
|
||||
DetailLines: {
|
||||
DetailLine:
|
||||
job.joblines.length > 0
|
||||
? job.joblines.map((jl) => GenerateDetailLines(job, jl, job.bodyshop.md_order_statuses))
|
||||
: [generateNullDetailLine()]
|
||||
},
|
||||
LaborDetailLines: {
|
||||
LaborDetailLine: LaborDetailLines
|
||||
}
|
||||
};
|
||||
return ret;
|
||||
@@ -787,6 +791,76 @@ const CreateCosts = (job) => {
|
||||
};
|
||||
};
|
||||
|
||||
const generateLaborLines = (timetickets) => {
|
||||
if (!timetickets || timetickets.length === 0) return [];
|
||||
|
||||
const codeToProps = {
|
||||
LAB: { actual: "LaborBodyActualHours", flag: "LaborBodyFlagHours", cost: "LaborBodyCost" },
|
||||
LAM: { actual: "LaborMechanicalActualHours", flag: "LaborMechanicalFlagHours", cost: "LaborMechanicalCost" },
|
||||
LAG: { actual: "LaborGlassActualHours", flag: "LaborGlassFlagHours", cost: "LaborGlassCost" },
|
||||
LAS: { actual: "LaborStructuralActualHours", flag: "LaborStructuralFlagHours", cost: "LaborStructuralCost" },
|
||||
LAE: { actual: "LaborElectricalActualHours", flag: "LaborElectricalFlagHours", cost: "LaborElectricalCost" },
|
||||
LAA: { actual: "LaborAluminumActualHours", flag: "LaborAluminumFlagHours", cost: "LaborAluminumCost" },
|
||||
LAR: { actual: "LaborRefinishActualHours", flag: "LaborRefinishFlagHours", cost: "LaborRefinishCost" },
|
||||
LAU: { actual: "LaborDetailActualHours", flag: "LaborDetailFlagHours", cost: "LaborDetailCost" },
|
||||
LA1: { actual: "LaborOtherActualHours", flag: "LaborOtherFlagHours", cost: "LaborOtherCost" },
|
||||
LA2: { actual: "LaborOtherActualHours", flag: "LaborOtherFlagHours", cost: "LaborOtherCost" },
|
||||
LA3: { actual: "LaborOtherActualHours", flag: "LaborOtherFlagHours", cost: "LaborOtherCost" },
|
||||
LA4: { actual: "LaborOtherActualHours", flag: "LaborOtherFlagHours", cost: "LaborOtherCost" }
|
||||
};
|
||||
|
||||
return timetickets.map((ticket, idx) => {
|
||||
const { ciecacode, employee, actualhrs = 0, productivehrs = 0, rate = 0 } = ticket;
|
||||
const isFlatRate = employee?.flat_rate;
|
||||
const hours = isFlatRate ? productivehrs : actualhrs;
|
||||
const cost = rate * hours;
|
||||
|
||||
const laborDetail = {
|
||||
LaborDetailLineNumber: idx + 1,
|
||||
TechnicianNameFirst: employee?.first_name || "",
|
||||
TechnicianNameLast: employee?.last_name || "",
|
||||
LaborBodyActualHours: 0,
|
||||
LaborMechanicalActualHours: 0,
|
||||
LaborGlassActualHours: 0,
|
||||
LaborStructuralActualHours: 0,
|
||||
LaborElectricalActualHours: 0,
|
||||
LaborAluminumActualHours: 0,
|
||||
LaborRefinishActualHours: 0,
|
||||
LaborDetailActualHours: 0,
|
||||
LaborOtherActualHours: 0,
|
||||
LaborBodyFlagHours: 0,
|
||||
LaborMechanicalFlagHours: 0,
|
||||
LaborGlassFlagHours: 0,
|
||||
LaborStructuralFlagHours: 0,
|
||||
LaborElectricalFlagHours: 0,
|
||||
LaborAluminumFlagHours: 0,
|
||||
LaborRefinishFlagHours: 0,
|
||||
LaborDetailFlagHours: 0,
|
||||
LaborOtherFlagHours: 0,
|
||||
LaborBodyCost: 0,
|
||||
LaborMechanicalCost: 0,
|
||||
LaborGlassCost: 0,
|
||||
LaborStructuralCost: 0,
|
||||
LaborElectricalCost: 0,
|
||||
LaborAluminumCost: 0,
|
||||
LaborRefinishCost: 0,
|
||||
LaborDetailCost: 0,
|
||||
LaborOtherCost: 0
|
||||
};
|
||||
|
||||
const effectiveCiecacode = ciecacode || "LA4";
|
||||
|
||||
if (codeToProps[effectiveCiecacode]) {
|
||||
const { actual, flag, cost: costProp } = codeToProps[effectiveCiecacode];
|
||||
laborDetail[actual] = actualhrs;
|
||||
laborDetail[flag] = productivehrs;
|
||||
laborDetail[costProp] = cost;
|
||||
}
|
||||
|
||||
return laborDetail;
|
||||
});
|
||||
};
|
||||
|
||||
const StatusMapping = (status, md_ro_statuses) => {
|
||||
//Possible return statuses EST, SCH, ARR, IPR, RDY, DEL, CLO, CAN, UNDEFINED.
|
||||
const {
|
||||
|
||||
@@ -827,13 +827,21 @@ exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshop
|
||||
quantity
|
||||
}
|
||||
}
|
||||
timetickets {
|
||||
timetickets(where: {cost_center: {_neq: "timetickets.labels.shift"}}) {
|
||||
id
|
||||
rate
|
||||
ciecacode
|
||||
cost_center
|
||||
actualhrs
|
||||
productivehrs
|
||||
flat_rate
|
||||
employeeid
|
||||
employee {
|
||||
employee_number
|
||||
flat_rate
|
||||
first_name
|
||||
last_name
|
||||
}
|
||||
}
|
||||
area_of_damage
|
||||
employee_prep_rel {
|
||||
|
||||
Reference in New Issue
Block a user