IO-223 ARM development

This commit is contained in:
Patrick Fic
2021-10-18 19:37:27 -07:00
parent dc10f8d35b
commit 289a8222a0
8 changed files with 1017 additions and 809 deletions

View File

@@ -11,14 +11,13 @@ require("dotenv").config({
`.env.${process.env.NODE_ENV || "development"}`
),
});
let Client = require("ssh2-sftp-client");
const client = require("../graphql-client/graphql-client").client;
const uuid = require("uuid").v4;
exports.default = async (req, res) => {
//Query for the List of Bodyshop Clients.
logger.log("arms-start", "DEBUG", "api", null, null);
const { bodyshops } = await client.request(queries.GET_AUTOHOUSE_SHOPS);
const { bodyshops } = await client.request(queries.GET_ENTEGRAL_SHOPS);
const allxmlsToUpload = [];
const allErrors = [];
@@ -29,14 +28,14 @@ exports.default = async (req, res) => {
});
const erroredJobs = [];
try {
const { jobs } = await client.request(queries.AUTOHOUSE_QUERY, {
const { jobs } = await client.request(queries.ENTEGRAL_EXPORT, {
bodyshopid: bodyshop.id,
});
jobs.map((job) => {
const ret = jobs.map((job) => {
const transId = uuid(); // Can this actually be the job id?
return {
RepairOrderFolderAddRq: {
RqUID: "426cce3a-efa7-44d9-b76e-50b9102c4198", //TODO UID Tracking
RqUID: transId,
DocumentInfo: {
BMSVer: "4.0.0",
DocumentType: "Repair Order",
@@ -48,20 +47,22 @@ exports.default = async (req, res) => {
},
EventInfo: {
AssignmentEvent: {
CreateDateTime: moment(job.asgn_date).format(),
CreateDateTime:
job.asgn_date && moment(job.asgn_date).format(),
},
EstimateEvent: {
UploadDateTime: "2009-03-02T17:00:00.0000000-08:00", //TODO Figure out what this actually is. 'Date Estimate was uploaded'
},
RepairEvent: {
ArrivalDateTime: moment(job.date_open).format(),
ArrivalDateTime:
job.date_open && moment(job.date_open).format(),
ArrivalOdometerReading: job.kmin,
TargetCompletionDateTime: moment(
job.scheduled_compltion
).format(),
TargetCompletionDateTime:
job.scheduled_completion &&
moment(job.scheduled_completion).format(),
ActualCompletionDateTime:
job.actual_complation &&
moment(job.actual_complation).format(),
job.actual_completion &&
moment(job.actual_completion).format(),
ActualPickUpDateTime:
job.actual_delivery && moment(job.actual_delivery).format(),
CloseDateTime:
@@ -109,30 +110,30 @@ exports.default = async (req, res) => {
},
},
},
InsuranceAgent: {
Party: {
OrgInfo: {
CompanyName: "Nationwide Insurance",
Communications: {
CommQualifier: "WP",
CommPhone: "714-5551212",
},
},
ContactInfo: {
ContactJobTitle: "Insurance Agent",
ContactName: {
FirstName: "Paul",
LastName: "White",
},
},
},
},
// InsuranceAgent: {
// Party: {
// OrgInfo: {
// CompanyName: "Nationwide Insurance",
// Communications: {
// CommQualifier: "WP",
// CommPhone: "714-5551212",
// },
// },
// ContactInfo: {
// ContactJobTitle: "Insurance Agent",
// ContactName: {
// FirstName: "Paul",
// LastName: "White",
// },
// },
// },
// },
Insured: {
Party: {
PersonInfo: {
PersonName: {
FirstName: "Jim",
LastName: "Smith",
FirstName: job.insd_fn,
LastName: job.insd_ln,
},
},
},
@@ -180,8 +181,8 @@ exports.default = async (req, res) => {
Party: {
PersonInfo: {
PersonName: {
FirstName: "Jim",
LastName: "Smith",
FirstName: job.clm_ct_fn,
LastName: job.clm_ct_ln,
},
},
},
@@ -191,13 +192,13 @@ exports.default = async (req, res) => {
Party: {
PersonInfo: {
PersonName: {
FirstName: "Jim",
LastName: "Smith",
},
IDInfo: {
IDQualifierCode: "US",
IDNum: 2941,
FirstName: job.est_ct_fn,
LastName: job.est_ct_ln,
},
// IDInfo: {
// IDQualifierCode: "US",
// IDNum: 2941,
// },
},
},
},
@@ -208,7 +209,7 @@ exports.default = async (req, res) => {
CompanyName: bodyshop.shopname,
IDInfo: {
IDQualifierCode: "US",
IDNum: 2207,
IDNum: bodyshop.entegral_id,
},
},
},
@@ -391,6 +392,7 @@ exports.default = async (req, res) => {
Rate: job.rate_mahw,
},
MaterialCalcSettings: {
//Todo Capture Calc Settings
CalcMethodCode: 2,
CalcMaxAmt: 10,
},
@@ -476,7 +478,7 @@ exports.default = async (req, res) => {
TotalAmt: Dinero(
job.job_totals.parts.parts.list.paa &&
job.job_totals.parts.parts.list.paa.total
).toFormat(0.0),
).toFormat("0.0"),
},
{
TotalType: "PAC",
@@ -484,7 +486,7 @@ exports.default = async (req, res) => {
TotalAmt: Dinero(
job.job_totals.parts.parts.list.pac &&
job.job_totals.parts.parts.list.pac.total
).toFormat(0.0),
).toFormat("0.0"),
},
{
TotalType: "PAG",
@@ -492,7 +494,7 @@ exports.default = async (req, res) => {
TotalAmt: Dinero(
job.job_totals.parts.parts.list.pag &&
job.job_totals.parts.parts.list.pag.total
).toFormat(0.0),
).toFormat("0.0"),
},
{
TotalType: "PAL",
@@ -500,7 +502,7 @@ exports.default = async (req, res) => {
TotalAmt: Dinero(
job.job_totals.parts.parts.list.pal &&
job.job_totals.parts.parts.list.pal.total
).toFormat(0.0),
).toFormat("0.0"),
},
{
TotalType: "PAM",
@@ -508,7 +510,7 @@ exports.default = async (req, res) => {
TotalAmt: Dinero(
job.job_totals.parts.parts.list.pam &&
job.job_totals.parts.parts.list.pam.total
).toFormat(0.0),
).toFormat("0.0"),
},
{
TotalType: "PAN",
@@ -516,7 +518,7 @@ exports.default = async (req, res) => {
TotalAmt: Dinero(
job.job_totals.parts.parts.list.pan &&
job.job_totals.parts.parts.list.pan.total
).toFormat(0.0),
).toFormat("0.0"),
},
{
TotalType: "PAR",
@@ -524,7 +526,7 @@ exports.default = async (req, res) => {
TotalAmt: Dinero(
job.job_totals.parts.parts.list.par &&
job.job_totals.parts.parts.list.par.total
).toFormat(0.0),
).toFormat("0.0"),
},
],
OtherChargesTotalsInfo: [
@@ -533,7 +535,7 @@ exports.default = async (req, res) => {
TotalTypeDesc: "Sublet",
TotalAmt: Dinero(
job.job_totals.parts.sublets.total
).toFormat(0.0),
).toFormat("0.0"),
},
{
TotalType: "MAPA",
@@ -549,19 +551,19 @@ exports.default = async (req, res) => {
0.0
),
},
{
TotalType: "MAHW",
TotalTypeDesc: "Hazardous Wastes Removal",
TotalAmt: Dinero(job.job_totals.rates.mahw.total).toFormat(
0.0
),
},
// {
// TotalType: "MAHW",
// TotalTypeDesc: "Hazardous Wastes Removal",
// TotalAmt: Dinero(job.job_totals.rates.mahw.total).toFormat(
// 0.0
// ),
// },
{
TotalType: "OTST",
TotalTypeDesc: "Storage",
TotalAmt: Dinero(
job.job_totals.additional.storage
).toFormat(0.0),
).toFormat("0.0"),
},
{
TotalType: "OTTW",
@@ -575,7 +577,7 @@ exports.default = async (req, res) => {
TotalTypeDesc: "Additional Charges",
TotalAmt: Dinero(
job.job_totals.additional.additionalCosts
).toFormat(0.0),
).toFormat("0.0"),
},
],
SummaryTotalsInfo: [
@@ -583,43 +585,55 @@ exports.default = async (req, res) => {
TotalType: "TOT",
TotalSubType: "T2",
TotalTypeDesc: "Net Total",
TotalAmt: 471.3,
TotalAmt: Dinero(job.job_totals.totals.subtotal).toFormat(
0.0
),
},
{
TotalType: "TOT",
TotalSubType: "F7",
TotalTypeDesc: "Sales Tax",
TotalAmt: 0,
TotalAmt: Dinero(job.job_totals.totals.state_tax).toFormat(
0.0
),
},
{
TotalType: "TOT",
TotalSubType: "GST",
TotalTypeDesc: "GST Tax",
TotalAmt: 0,
TotalAmt: Dinero(
job.job_totals.totals.federal_tax
).toFormat("0.0"),
},
{
TotalType: "TOT",
TotalSubType: "TT",
TotalTypeDesc: "Gross Total",
TotalAmt: 471.3,
},
{
TotalType: "TOT",
TotalSubType: "SM",
TotalTypeDesc: "Supplement Total",
TotalAmt: 0,
TotalAmt: Dinero(
job.job_totals.totals.total_repairs
).toFormat("0.0"),
},
// {
// TotalType: "TOT",
// TotalSubType: "SM",
// TotalTypeDesc: "Supplement Total",
// TotalAmt: 0,
// },
{
TotalType: "TOT",
TotalSubType: "D2",
TotalTypeDesc: "Deductible",
TotalAmt: 0,
TotalAmt: Dinero({
amount: Math.round((job.ded_amt || 0) * 100),
}).toFormat("0.0"),
},
{
TotalType: "TOT",
TotalSubType: "BTR",
TotalTypeDesc: "Betterment",
TotalAmt: 0,
TotalAmt: Dinero(
job.job_totals.totals.custPayable.dep_taxes
).toFormat("0.0"),
},
{
TotalType: "TOT",
@@ -631,75 +645,81 @@ exports.default = async (req, res) => {
TotalType: "TOT",
TotalSubType: "D8",
TotalTypeDesc: "Bottom Line Discount",
TotalAmt: 0,
TotalAmt: Dinero(
job.job_totals.additional.adjustments
).toFormat("0.0"),
},
{
TotalType: "TOT",
TotalSubType: "INS",
TotalTypeDesc: "Insurance Pay",
TotalAmt: 471.3,
},
{
TotalType: "TOT",
TotalSubType: "DEPOSIT",
TotalTypeDesc: "Deposit",
TotalAmt: 0,
TotalAmt: Dinero(job.job_totals.totals.total_repairs)
.subtract(Dinero(job.job_totals.totals.custPayable.total))
.toFormat("0.0"),
},
// {
// TotalType: "TOT",
// TotalSubType: "DEPOSIT",
// TotalTypeDesc: "Deposit",
// TotalAmt: 0,
// },
{
TotalType: "TOT",
TotalSubType: "CUST",
TotalTypeDesc: "Customer Pay",
TotalAmt: 0,
TotalAmt: Dinero(
job.job_totals.totals.custPayable.total
).toFormat("0.0"),
},
],
RepairTotalsType: 1,
},
RepairLabor: {
LaborAllocations: {
LaborAllocation: [
{
LaborAllocationUUID:
"426cce3a-efa7-44d9-b76e-50b9102c4198",
LaborType: "LAB",
Technician: {
Employee: {
PersonInfo: {
PersonName: {
FirstName: "Jose",
LastName: "Gonzalez",
},
IDInfo: {
IDQualifierCode: "US",
IDNum: 2987,
},
},
},
},
AllocatedHours: 3.5,
},
{
LaborAllocationUUID:
"426cce3a-efa7-44d9-b76e-50b9102c4199",
LaborType: "LAR",
Technician: {
Employee: {
PersonInfo: {
PersonName: {
FirstName: "Rcardo",
LastName: "Himenez",
},
IDInfo: {
IDQualifierCode: "US",
IDNum: 2989,
},
},
},
},
AllocatedHours: 5.5,
},
],
},
},
// RepairLabor: {
// LaborAllocations: {
// LaborAllocation: [
// {
// LaborAllocationUUID:
// "426cce3a-efa7-44d9-b76e-50b9102c4198",
// LaborType: "LAB",
// Technician: {
// Employee: {
// PersonInfo: {
// PersonName: {
// FirstName: "Jose",
// LastName: "Gonzalez",
// },
// IDInfo: {
// IDQualifierCode: "US",
// IDNum: 2987,
// },
// },
// },
// },
// AllocatedHours: 3.5,
// },
// {
// LaborAllocationUUID:
// "426cce3a-efa7-44d9-b76e-50b9102c4199",
// LaborType: "LAR",
// Technician: {
// Employee: {
// PersonInfo: {
// PersonName: {
// FirstName: "Rcardo",
// LastName: "Himenez",
// },
// IDInfo: {
// IDQualifierCode: "US",
// IDNum: 2989,
// },
// },
// },
// },
// AllocatedHours: 5.5,
// },
// ],
// },
// },
ProductionStatus: {
ProductionStage: {
ProductionStageCode: 4,
@@ -713,30 +733,30 @@ exports.default = async (req, res) => {
RepairStatusMemo: "Waiting on back ordered parts",
},
},
RepairOrderNotes: {
RepairOrderNote: {
LineSequenceNum: 1,
Note: "Revision Requested : approved--but needs est separated.8/22/2008 11:58:53 AM",
CreateDateTime: "2008-08-22T11:58:53",
AuthoredBy: {
FirstName: {
"#text": "Elizabeth/FirstName>",
LastName: "Unis",
},
},
RepairOrderNote: {
LineSequenceNum: 2,
Note: "Approved : 8/26/2008 12:21:08 PM",
CreateDateTime: "2008-08-26T12:21:08",
AuthoredBy: {
FirstName: {
"#text": "Elizabeth/FirstName>",
LastName: "Unis",
},
},
},
},
},
// RepairOrderNotes: {
// RepairOrderNote: {
// LineSequenceNum: 1,
// Note: "Revision Requested : approved--but needs est separated.8/22/2008 11:58:53 AM",
// CreateDateTime: "2008-08-22T11:58:53",
// AuthoredBy: {
// FirstName: {
// "#text": "Elizabeth/FirstName>",
// LastName: "Unis",
// },
// },
// RepairOrderNote: {
// LineSequenceNum: 2,
// Note: "Approved : 8/26/2008 12:21:08 PM",
// CreateDateTime: "2008-08-26T12:21:08",
// AuthoredBy: {
// FirstName: {
// "#text": "Elizabeth/FirstName>",
// LastName: "Unis",
// },
// },
// },
// },
// },
},
};
});
@@ -751,6 +771,7 @@ exports.default = async (req, res) => {
logger.log("arms-end-shop-extract", "DEBUG", "api", bodyshop.id, {
shopname: bodyshop.shopname,
});
res.json(ret);
} catch (error) {
//Error at the shop level.
logger.log("arms-error-shop", "ERROR", "api", bodyshop.id, {
@@ -784,10 +805,10 @@ function GetSupplementNumber(joblines) {
function GetDocumentstatus(job, bodyshop) {
switch (job.status) {
case bodyshop.md_ro_status.default_void:
case bodyshop.md_ro_statuses.default_void:
return "V";
case bodyshop.md_ro_status.default_invoiced:
case bodyshop.md_ro_status.default_exported:
case bodyshop.md_ro_statuses.default_invoiced:
case bodyshop.md_ro_statuses.default_exported:
return "V";
default:

View File

@@ -531,6 +531,94 @@ exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshop
`;
exports.ENTEGRAL_EXPORT = `
query ENTEGRAL_EXPORT($bodyshopid: uuid!) {
jobs(where: {_and: [{converted: {_eq: true}}, {shopid: {_eq: $bodyshopid}}]}) {
joblines {
id
line_ind
}
id
ro_number
status
asgn_date
date_open
kmin
scheduled_completion
actual_completion
actual_delivery
date_exported
ins_co_nm
ins_addr1
ins_addr2
ins_city
ins_st
ins_zip
ins_ctry
ins_ph1
ins_ph2
est_ct_ln
est_ct_fn
insd_fn
insd_ln
ownr_fn
ownr_ln
ownr_co_nm
ownr_addr1
ownr_addr2
ownr_city
ownr_st
ownr_zip
ownr_ctry
ownr_ph1
ownr_ph2
ownr_ea
clm_ct_fn
clm_ct_ln
v_vin
plate_no
v_model_yr
v_make_desc
v_model_desc
v_color
driveable
clm_no
policy_no
loss_date
area_of_damage
tlos_ind
parts_tax_rates
federal_tax_rate
state_tax_rate
rate_la1
rate_la2
rate_la3
rate_la4
rate_laa
rate_lab
rate_lad
rate_lae
rate_laf
rate_lag
rate_lam
rate_lar
rate_las
rate_lau
rate_ma2s
rate_ma2t
rate_ma3s
rate_mabl
rate_macs
rate_mahw
rate_mapa
rate_mash
rate_matd
job_totals
ded_amt
}
}
`;
exports.UPDATE_JOB = `
mutation UPDATE_JOB($jobId: uuid!, $job: jobs_set_input!) {
update_jobs(where: { id: { _eq: $jobId } }, _set: $job) {
@@ -938,7 +1026,6 @@ exports.INSERT_IOEVENT = ` mutation INSERT_IOEVENT($event: ioevents_insert_input
exports.GET_AUTOHOUSE_SHOPS = `query GET_AUTOHOUSE_SHOPS {
bodyshops(where: {autohouseid: {_is_null: false}}){
id
shopname
address1
@@ -957,6 +1044,25 @@ exports.GET_AUTOHOUSE_SHOPS = `query GET_AUTOHOUSE_SHOPS {
}
`;
exports.GET_ENTEGRAL_SHOPS = `query GET_AUTOHOUSE_SHOPS {
bodyshops(where: {entegral_id: {_is_null: false}}){
id
shopname
address1
city
state
zip_post
country
phone
md_ro_statuses
md_order_statuses
entegral_id
md_responsibility_centers
imexshopid
}
}
`;
exports.DELETE_ALL_DMS_VEHICLES = `mutation DELETE_ALL_DMS_VEHICLES{
delete_dms_vehicles(where: {}) {
affected_rows