diff --git a/electron/decoder/decoder.js b/electron/decoder/decoder.js index 21c873b..0199932 100644 --- a/electron/decoder/decoder.js +++ b/electron/decoder/decoder.js @@ -330,11 +330,11 @@ async function DecodeLinFile(extensionlessFilePath) { (jobline) => jobline.part_type && !jobline.db_ref.startsWith("900") && - !jobline.db_ref.toLowerCase().startsWith("urethane") && - !jobline.db_ref.toLowerCase().startsWith("wheel") && - !jobline.db_ref.toLowerCase().startsWith("hazardous") && - !jobline.db_ref.toLowerCase().startsWith("detail") && - !jobline.db_ref.toLowerCase().startsWith("clean") && + !jobline.line_desc.toLowerCase().startsWith("urethane") && + !jobline.line_desc.toLowerCase().startsWith("wheel") && + !jobline.line_desc.toLowerCase().startsWith("hazardous") && + !jobline.line_desc.toLowerCase().startsWith("detail") && + !jobline.line_desc.toLowerCase().startsWith("clean") && jobline.part_type.toUpperCase() !== "PAG" && jobline.part_type.toUpperCase() !== "PAS" && jobline.part_type.toUpperCase() !== "PASL" && diff --git a/electron/electron-store.js b/electron/electron-store.js index 9d59c9c..44a6a03 100644 --- a/electron/electron-store.js +++ b/electron/electron-store.js @@ -1,5 +1,14 @@ const Store = require("electron-store"); -const store = new Store({ defaults: { filePaths: [], accepted_ins_co: [] } }); +const store = new Store({ + defaults: { + filePaths: [], + accepted_ins_co: [], + polling: { + enabled: false, + pollingInterval: 100, + }, + }, +}); exports.store = store; diff --git a/electron/file-watcher/file-watcher.js b/electron/file-watcher/file-watcher.js index edb58d6..7f31647 100644 --- a/electron/file-watcher/file-watcher.js +++ b/electron/file-watcher/file-watcher.js @@ -7,35 +7,38 @@ const { store } = require("../electron-store"); const { NewNotification, } = require("../notification-wrapper/notification-wrapper"); - +const log = require("electron-log"); var watcher; async function StartWatcher() { const filePaths = store.get("filePaths").map((fp) => path.join(fp, "**.[eE][nN][vV]")) || []; - console.log("StartWatcher -> filePaths", filePaths); - + log.info("StartWatcher -> filePaths", filePaths); + log.info("Use polling? ", store.get("polling").enabled); + if (filePaths.length === 0) { NewNotification({ title: "RPS Watcher cannot start", body: "Please set the appropriate file paths and try again.", }).show(); + log.warn("Cannot start watcher. No file paths set."); return []; } if (watcher) { try { - console.log("Trying to close watcher - it already existed."); + log.info("Trying to close watcher - it already existed."); await watcher.close(); - console.log("Watcher closed successfully!"); + log.info("Watcher closed successfully!"); } catch (error) { - console.log("Error trying to close Watcher.", error); + log.error("Error trying to close Watcher.", error); } } watcher = chokidar.watch(filePaths, { //ignored: /[\/\\]\./, + usePolling: store.get("polling").enabled, persistent: true, ignoreInitial: true, awaitWriteFinish: { @@ -88,7 +91,7 @@ function onWatcherReady() { async function StopWatcher() { await watcher.close(); - console.log("Watcher stopped."); + log.info("Watcher stopped."); const b = BrowserWindow.getAllWindows()[0]; b.webContents.send(ipcTypes.default.fileWatcher.toRenderer.stopSuccess); NewNotification({ @@ -111,12 +114,13 @@ async function HandleNewFile(path) { ipcTypes.default.estimate.toRenderer.estimateDecodeSuccess, newJob ); - + log.info(`Sent job for upload. ${newJob.clm_no}`); NewNotification({ title: "Job Uploaded", body: "A new job has been uploaded.", }).show(); } else { + log.info(`Ignored job. ${newJob.ERROR}`); NewNotification({ title: "Job Ignored", body: newJob.ERROR, diff --git a/electron/ipc-main-handler.js b/electron/ipc-main-handler.js index 6c69626..6a3da0d 100644 --- a/electron/ipc-main-handler.js +++ b/electron/ipc-main-handler.js @@ -17,3 +17,20 @@ ipcMain.on("test", async (event, object) => { ipcMain.on(ipcTypes.app.toMain.setAcceptableInsCoNm, (event, insCos) => { store.set("accepted_ins_co", insCos); }); + +ipcMain.on(ipcTypes.store.get, (event, key) => { + const val = store.get(key); + event.sender.send(ipcTypes.store.response, { [key]: val }); +}); + +ipcMain.on(ipcTypes.store.set, (event, key, val) => { + store.set(key, val); + + const st = store.get(); + event.sender.send(ipcTypes.store.response, st); +}); + +ipcMain.on(ipcTypes.store.getAll, (event, obj) => { + const val = store.get(); + event.sender.send(ipcTypes.store.response, val); +}); diff --git a/hasura/debug.log b/hasura/debug.log index ab51e52..3b38c55 100644 --- a/hasura/debug.log +++ b/hasura/debug.log @@ -1,2 +1,3 @@ [1014/195617.530:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3) [1015/081931.328:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3) +[1020/073641.000:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3) diff --git a/hasura/migrations/1603204459690_run_sql_migration/down.yaml b/hasura/migrations/1603204459690_run_sql_migration/down.yaml new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/hasura/migrations/1603204459690_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1603204459690_run_sql_migration/up.yaml b/hasura/migrations/1603204459690_run_sql_migration/up.yaml new file mode 100644 index 0000000..7f5cbcc --- /dev/null +++ b/hasura/migrations/1603204459690_run_sql_migration/up.yaml @@ -0,0 +1,18 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.search_jobs(search text, startdate date, + enddate date)\n RETURNS SETOF jobs\n LANGUAGE plpgsql\n STABLE\nAS $function$ + BEGIN if search = '' then return query\nselect *\nfrom jobs j;\nelse\n\nif (startDate + is null) or (endDate is null) then \nreturn query\nSELECT *\nFROM jobs j2\nWHERE + \n\nownr_fn ILIKE '%' || search || '%'\n or ownr_ln ILIKE '%' || search || + '%'\n \n or clm_no ILIKE '%' || search || '%'\nORDER BY \n clm_no ILIKE + '%' || search || '%'\n OR null,\n ownr_fn ILIKE '%' || search || '%'\n + \ OR NULL,\n ownr_ln ILIKE '%' || search || '%'\n OR NULL;\nelse \nreturn + query\nSELECT *\nFROM jobs j2\nWHERE \nclose_date between startDate and endDate + and close_date is not null and\n(\nownr_fn ILIKE '%' || search || '%'\n or + ownr_ln ILIKE '%' || search || '%'\n \n or clm_no ILIKE '%' || search || + '%')\n\nORDER BY \n clm_no ILIKE '%' || search || '%'\n OR null,\n ownr_fn + ILIKE '%' || search || '%'\n OR NULL,\n ownr_ln ILIKE '%' || search || + '%'\n OR NULL;\n\nend if;\n\n\nend if;\nEND $function$;" + type: run_sql diff --git a/hasura/migrations/1603204604474_run_sql_migration/down.yaml b/hasura/migrations/1603204604474_run_sql_migration/down.yaml new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/hasura/migrations/1603204604474_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1603204604474_run_sql_migration/up.yaml b/hasura/migrations/1603204604474_run_sql_migration/up.yaml new file mode 100644 index 0000000..6d0fe3b --- /dev/null +++ b/hasura/migrations/1603204604474_run_sql_migration/up.yaml @@ -0,0 +1,19 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.search_jobs(search text, startdate date, + enddate date)\n RETURNS SETOF jobs\n LANGUAGE plpgsql\n STABLE\nAS $function$\nBEGIN + if search = '' and ((startDate is null) or (endDate is null)) then return query\nselect + *\nfrom jobs j;\nelse\n\nif (startDate is null) or (endDate is null) then \nreturn + query\nSELECT *\nFROM jobs j2\nWHERE \n\nownr_fn ILIKE '%' || search || '%'\n + \ or ownr_ln ILIKE '%' || search || '%'\n \n or clm_no ILIKE '%' || search + || '%'\nORDER BY \n clm_no ILIKE '%' || search || '%'\n OR null,\n ownr_fn + ILIKE '%' || search || '%'\n OR NULL,\n ownr_ln ILIKE '%' || search || + '%'\n OR NULL;\nelse \nreturn query\nSELECT *\nFROM jobs j2\nWHERE \nclose_date + between startDate and endDate and close_date is not null and\n(\nownr_fn ILIKE + '%' || search || '%'\n or ownr_ln ILIKE '%' || search || '%'\n \n or + clm_no ILIKE '%' || search || '%')\n\nORDER BY \n clm_no ILIKE '%' || search + || '%'\n OR null,\n ownr_fn ILIKE '%' || search || '%'\n OR NULL,\n + \ ownr_ln ILIKE '%' || search || '%'\n OR NULL;\n\nend if;\n\n\nend if;\nEND + $function$;" + type: run_sql diff --git a/src/components/atoms/data-label/data-label.atom.jsx b/src/components/atoms/data-label/data-label.atom.jsx new file mode 100644 index 0000000..e36060d --- /dev/null +++ b/src/components/atoms/data-label/data-label.atom.jsx @@ -0,0 +1,26 @@ +import React from "react"; + +export default function DataLabel({ + label, + hideIfNull, + children, + vertical, + visible = true, + ...props +}) { + if (!visible || (hideIfNull && !!!children)) return null; + + return ( +