181 lines
6.1 KiB
JavaScript
181 lines
6.1 KiB
JavaScript
const log = require("electron-log");
|
|
const axios = require("axios");
|
|
const path = require("path");
|
|
const { BrowserWindow } = require("electron");
|
|
const { default: ipcTypes } = require("../../src/ipc.types.commonjs");
|
|
const { promises: fsPromises } = require("fs");
|
|
const { autoUpdater } = require("electron-updater");
|
|
const { store } = require("../electron-store")
|
|
|
|
// Function to write job object to logs subfolder
|
|
async function writeJobToLogsFolder(job, fileName) {
|
|
try {
|
|
// Get the directory where electron-log stores its files
|
|
const logFilePath = log.transports.file.getFile().path;
|
|
const logsDir = path.dirname(logFilePath);
|
|
|
|
// Create a subfolder for job objects
|
|
const jobLogsDir = path.join(logsDir, "esjson");
|
|
|
|
// Ensure the directory exists
|
|
await fsPromises.mkdir(jobLogsDir, { recursive: true });
|
|
|
|
// Write the job object as JSON
|
|
const jobFilePath = path.join(jobLogsDir, `${fileName}.json`);
|
|
await fsPromises.writeFile(jobFilePath, JSON.stringify(job, null, 2), "utf8");
|
|
|
|
log.debug(`Job object written to: ${jobFilePath}`);
|
|
console.log(`Job object written to: ${jobFilePath}`);
|
|
return jobFilePath;
|
|
} catch (error) {
|
|
log.error("Error writing job object to logs folder:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
async function ScrubEstimate({ job }) {
|
|
//These are hard coded as they are not secure values and checking happens based on other values.
|
|
//No secret or private information is exposed.
|
|
const basicAuthUser = "Imex2";
|
|
const basicAuthpassword = "Patrick";
|
|
const currentChannel = autoUpdater.channel;
|
|
let estimateScrubberUrl;
|
|
switch (currentChannel) {
|
|
case "alpha":
|
|
estimateScrubberUrl = "https://4284-79287.el-alt.com"; //dev specific URL.
|
|
break;
|
|
case "beta":
|
|
estimateScrubberUrl = "https://4284-79073.el-alt.com"; //Beta specific URL.
|
|
break;
|
|
default:
|
|
estimateScrubberUrl = "https://insurtechtoolkit.com"; //Production route.
|
|
break;
|
|
}
|
|
|
|
log.log(`Estimate Scrubber URL: [${currentChannel} |`, estimateScrubberUrl);
|
|
const sendingEntityId = "87330f61-412b-4251-baaa-d026565b23c5";
|
|
try {
|
|
const esApiKey = job?.bodyshop?.es_api_key;
|
|
//Perform data manipulation on the job object
|
|
if (!job) {
|
|
console.error("No job provided to ScrubEstimate");
|
|
return;
|
|
}
|
|
|
|
let association_switch
|
|
switch (store.get("ins_rule_set")) {
|
|
case "MPI":
|
|
association_switch = "ATAM";
|
|
break;
|
|
case "SGI":
|
|
association_switch = "SAAR";
|
|
break;
|
|
default:
|
|
association_switch = "ATAM";
|
|
break;
|
|
}
|
|
|
|
//Set shop metrics
|
|
job.sending_entity_id = sendingEntityId;
|
|
job.sending_entity_accept_terms_of_use = true;
|
|
job.association_switch = association_switch;
|
|
job.rf_zip = job.bodyshop.zip_post;
|
|
job.rf_ph1 = job.bodyshop.phone;
|
|
job.g_ttl_amt = job.clm_total;
|
|
job.source_system = "M"; //Requested by Steven.
|
|
job.v_mileage = job.v_mileage?.toString() || "" //Requested by Steven to be a string.
|
|
|
|
delete job.clm_total;
|
|
delete job.bodyshop; //Bodyshop has to be passed through the object as we don't have access to the store here.
|
|
|
|
//Adjust the rates field to be MAT_TYPE instead of MATL_TYPE
|
|
if (job.rates && Array.isArray(job.rates)) {
|
|
job.rates.forEach((rate) => {
|
|
if (rate.MATL_TYPE) {
|
|
rate.MAT_TYPE = rate.MATL_TYPE;
|
|
delete rate.MATL_TYPE;
|
|
}
|
|
});
|
|
}
|
|
|
|
//Lower case the rates & totals
|
|
if (job.rates && Array.isArray(job.rates)) {
|
|
job.rates = job.rates.map((rate) => {
|
|
const lowercasedRate = {};
|
|
for (const [key, value] of Object.entries(rate)) {
|
|
lowercasedRate[key.toLowerCase()] = value;
|
|
}
|
|
return lowercasedRate;
|
|
});
|
|
}
|
|
|
|
if (job.totals && Array.isArray(job.totals)) {
|
|
job.totals = job.totals.map((total) => {
|
|
const lowercasedTotal = {};
|
|
for (const [key, value] of Object.entries(total)) {
|
|
lowercasedTotal[key.toLowerCase()] = value;
|
|
}
|
|
return lowercasedTotal;
|
|
});
|
|
}
|
|
|
|
const fileName = `RPS-Scrub-${esApiKey}-${job.clm_no}-${Date.now()}`;
|
|
|
|
// Write job object to logs subfolder
|
|
try {
|
|
await writeJobToLogsFolder(job, fileName);
|
|
} catch (error) {
|
|
log.error("Failed to write job to logs folder:", error);
|
|
// Continue with the rest of the function even if this fails
|
|
}
|
|
|
|
const formData = new FormData();
|
|
const jsonString = JSON.stringify(job);
|
|
formData.append("file", new Blob([jsonString], { type: "application/json" }), `${fileName}.json`);
|
|
|
|
const result = await axios.post(`${estimateScrubberUrl}/api/sendems`, formData, {
|
|
auth: {
|
|
username: basicAuthUser,
|
|
password: basicAuthpassword
|
|
},
|
|
headers: { ...(formData.getHeaders ? formData.getHeaders() : {}), APIkey: esApiKey }
|
|
});
|
|
|
|
const resultPDFUrl = result?.data?.report_link;
|
|
const reportIssueUrl = `https://insurtechtoolkit.com/pcontactUs.aspx?apiKey=${esApiKey}&file=${fileName}.json`
|
|
// log.log("Estimate Scrubber Result:", result.data, resultPDFUrl);
|
|
const b = BrowserWindow.getAllWindows()[0];
|
|
b.webContents.send(ipcTypes.app.toRenderer.scrubResults, {
|
|
jobid: job.id,
|
|
items: result.data?.identified_item,
|
|
pdfUrl: resultPDFUrl,
|
|
reportIssueUrl
|
|
});
|
|
|
|
// const pdfWindow = new BrowserWindow({
|
|
|
|
// webPreferences: {
|
|
// plugins: true, // Enable PDF viewing
|
|
// },
|
|
// });
|
|
|
|
// pdfWindow.loadURL(resultPDFUrl);
|
|
// pdfWindow.focus();
|
|
return resultPDFUrl;
|
|
} catch (error) {
|
|
log.error("Error while scrubbing estimate:", error, error.stack);
|
|
log.error("Error Response Data:", error.response?.data);
|
|
const mainWindow = BrowserWindow.getAllWindows()[0];
|
|
|
|
if (error.status === 400) {
|
|
mainWindow.webContents.send(ipcTypes.app.toRenderer.scrubError, {
|
|
message: error.response?.data || "Error encountered sending estimate to Estimate Scrubber."
|
|
});
|
|
} else if (error.status === 401) {
|
|
mainWindow.webContents.send(ipcTypes.app.toRenderer.scrubError, {
|
|
message: "Authentication with Estimate Scrubber failed." || error.response?.data
|
|
});
|
|
}
|
|
}
|
|
}
|
|
exports.ScrubEstimate = ScrubEstimate;
|