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 repairCosts = CreateCosts(job);
|
||||||
|
|
||||||
|
const LaborDetailLines = generateLaborLines(job.timetickets);
|
||||||
|
|
||||||
//Calculate detail only lines.
|
//Calculate detail only lines.
|
||||||
const detailAdjustments = job.joblines
|
const detailAdjustments = job.joblines
|
||||||
.filter((jl) => jl.ah_detail_line && jl.mod_lbr_ty)
|
.filter((jl) => jl.ah_detail_line && jl.mod_lbr_ty)
|
||||||
@@ -606,12 +608,14 @@ const CreateRepairOrderTag = (job, errorCallback) => {
|
|||||||
// CSIID: null,
|
// CSIID: null,
|
||||||
InsGroupCode: null
|
InsGroupCode: null
|
||||||
},
|
},
|
||||||
|
|
||||||
DetailLines: {
|
DetailLines: {
|
||||||
DetailLine:
|
DetailLine:
|
||||||
job.joblines.length > 0
|
job.joblines.length > 0
|
||||||
? job.joblines.map((jl) => GenerateDetailLines(job, jl, job.bodyshop.md_order_statuses))
|
? job.joblines.map((jl) => GenerateDetailLines(job, jl, job.bodyshop.md_order_statuses))
|
||||||
: [generateNullDetailLine()]
|
: [generateNullDetailLine()]
|
||||||
|
},
|
||||||
|
LaborDetailLines: {
|
||||||
|
LaborDetailLine: LaborDetailLines
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return ret;
|
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) => {
|
const StatusMapping = (status, md_ro_statuses) => {
|
||||||
//Possible return statuses EST, SCH, ARR, IPR, RDY, DEL, CLO, CAN, UNDEFINED.
|
//Possible return statuses EST, SCH, ARR, IPR, RDY, DEL, CLO, CAN, UNDEFINED.
|
||||||
const {
|
const {
|
||||||
|
|||||||
@@ -827,13 +827,21 @@ exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshop
|
|||||||
quantity
|
quantity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
timetickets {
|
timetickets(where: {cost_center: {_neq: "timetickets.labels.shift"}}) {
|
||||||
id
|
id
|
||||||
rate
|
rate
|
||||||
|
ciecacode
|
||||||
cost_center
|
cost_center
|
||||||
actualhrs
|
actualhrs
|
||||||
productivehrs
|
productivehrs
|
||||||
flat_rate
|
flat_rate
|
||||||
|
employeeid
|
||||||
|
employee {
|
||||||
|
employee_number
|
||||||
|
flat_rate
|
||||||
|
first_name
|
||||||
|
last_name
|
||||||
|
}
|
||||||
}
|
}
|
||||||
area_of_damage
|
area_of_damage
|
||||||
employee_prep_rel {
|
employee_prep_rel {
|
||||||
|
|||||||
Reference in New Issue
Block a user