From c94f525a3e703225a733ea1eb3dd4156f854dbba Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Fri, 16 Oct 2020 13:18:18 -0700 Subject: [PATCH] WIP Line Calculations --- .vscode/launch.json | 17 ++++++++ electron/decoder/decoder.js | 33 ++++++++++++---- electron/file-watcher/file-watcher.js | 7 +--- .../down.yaml | 5 +++ .../up.yaml | 5 +++ .../down.yaml | 5 +++ .../up.yaml | 5 +++ .../1602875306082_run_sql_migration/down.yaml | 1 + .../1602875306082_run_sql_migration/up.yaml | 20 ++++++++++ .../1602875452605_run_sql_migration/down.yaml | 1 + .../1602875452605_run_sql_migration/up.yaml | 9 +++++ .../1602875615937_run_sql_migration/down.yaml | 1 + .../1602875615937_run_sql_migration/up.yaml | 9 +++++ .../down.yaml | 37 ++++++++++++++++++ .../up.yaml | 39 +++++++++++++++++++ .../down.yaml | 37 ++++++++++++++++++ .../up.yaml | 39 +++++++++++++++++++ .../down.yaml | 36 +++++++++++++++++ .../up.yaml | 38 ++++++++++++++++++ hasura/migrations/metadata.yaml | 6 +++ src/graphql/jobs.queries.js | 2 + 21 files changed, 339 insertions(+), 13 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 hasura/migrations/1602874670231_alter_table_public_joblines_add_column_price_diff/down.yaml create mode 100644 hasura/migrations/1602874670231_alter_table_public_joblines_add_column_price_diff/up.yaml create mode 100644 hasura/migrations/1602874689611_alter_table_public_joblines_add_column_price_diff_pc/down.yaml create mode 100644 hasura/migrations/1602874689611_alter_table_public_joblines_add_column_price_diff_pc/up.yaml create mode 100644 hasura/migrations/1602875306082_run_sql_migration/down.yaml create mode 100644 hasura/migrations/1602875306082_run_sql_migration/up.yaml create mode 100644 hasura/migrations/1602875452605_run_sql_migration/down.yaml create mode 100644 hasura/migrations/1602875452605_run_sql_migration/up.yaml create mode 100644 hasura/migrations/1602875615937_run_sql_migration/down.yaml create mode 100644 hasura/migrations/1602875615937_run_sql_migration/up.yaml create mode 100644 hasura/migrations/1602876420093_update_permission_user_public_table_joblines/down.yaml create mode 100644 hasura/migrations/1602876420093_update_permission_user_public_table_joblines/up.yaml create mode 100644 hasura/migrations/1602876426498_update_permission_user_public_table_joblines/down.yaml create mode 100644 hasura/migrations/1602876426498_update_permission_user_public_table_joblines/up.yaml create mode 100644 hasura/migrations/1602876432715_update_permission_user_public_table_joblines/down.yaml create mode 100644 hasura/migrations/1602876432715_update_permission_user_public_table_joblines/up.yaml diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..e38cd4c --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Main Process", + "type": "node", + "request": "launch", + "cwd": "${workspaceFolder}", + "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron", + "windows": { + "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd" + }, + "args": ["."], + "outputCapture": "std" + } + ] +} diff --git a/electron/decoder/decoder.js b/electron/decoder/decoder.js index be0f8a8..bfc41fc 100644 --- a/electron/decoder/decoder.js +++ b/electron/decoder/decoder.js @@ -1,6 +1,7 @@ const { DBFFile } = require("dbffile"); const path = require("path"); const _ = require("lodash"); +const log = require("electron-log"); async function DecodeEstimate(filePath) { const parsedFilePath = path.parse(filePath); @@ -8,7 +9,6 @@ async function DecodeEstimate(filePath) { parsedFilePath.dir, parsedFilePath.name ); - console.log("DecodeEstimate -> extensionlessFilePath", extensionlessFilePath); const ret = { ...(await DecodeAd1File(extensionlessFilePath)), ...(await DecodeVehFile(extensionlessFilePath)), @@ -16,7 +16,10 @@ async function DecodeEstimate(filePath) { ...(await DecodeLinFile(extensionlessFilePath)), }; - if (ret.V_MILEAGE > 20000) return ret; + if (ret.V_MILEAGE > 20000) + return _.transform(ret, function (result, val, key) { + result[key.toLowerCase()] = val; + }); return null; } @@ -181,7 +184,6 @@ async function DecodeTtlFile(extensionlessFilePath) { async function DecodeLinFile(extensionlessFilePath) { let dbf = await DBFFile.open(`${extensionlessFilePath}.LIN`); let records = await dbf.readRecords(); - let joblines = records.map((record) => _.transform( _.pick(record, [ @@ -233,6 +235,7 @@ async function DecodeLinFile(extensionlessFilePath) { ]), function (result, val, key) { //Required because unq_seq gets pulled as a numeric instaed of a string. + console.log("key", key); if (key === "UNQ_SEQ") { return (result[key.toLowerCase()] = val.toString()); } @@ -241,22 +244,28 @@ async function DecodeLinFile(extensionlessFilePath) { ) ); - //Perform required RPS Validations. - //Update DB Prices. - const massagedJobLines = joblines + const m = joblines .filter( (jobline) => + jobline.PART_TYPE && !jobline.db_ref.startsWith("900") && (jobline.part_type && jobline.part_type.toUpperCase()) !== "PAG" && jobline.glass_flag === false ) .map((jobline) => { - // + console.log("Massagejobline", jobline); if ( (jobline.db_price === null || jobline.db_price === 0) && !!jobline.act_price && jobline.act_price > 0 ) { + console.log(1, jobline.line_desc, jobline.db_price, jobline.act_price); + log.info( + "DB Price null/lower than act price", + jobline.line_desc, + jobline.db_price, + jobline.act_price + ); jobline.db_price = jobline.act_price; } @@ -265,14 +274,22 @@ async function DecodeLinFile(extensionlessFilePath) { jobline.act_price && jobline.act_price > jobline.db_price ) { + log.info( + "Act price higher than existing db price", + jobline.line_desc, + jobline.db_price, + jobline.act_price + ); + console.log(2, jobline.line_desc, jobline.db_price, jobline.act_price); jobline.db_price = jobline.act_price; } delete jobline.glass_flag; + console.log(jobline); return jobline; }); - return { joblines: { data: massagedJobLines } }; + return { joblines: { data: joblines } }; } exports.DecodeEstimate = DecodeEstimate; diff --git a/electron/file-watcher/file-watcher.js b/electron/file-watcher/file-watcher.js index 18360c1..1e8caf0 100644 --- a/electron/file-watcher/file-watcher.js +++ b/electron/file-watcher/file-watcher.js @@ -106,14 +106,11 @@ async function HandleNewFile(path) { const b = BrowserWindow.getAllWindows()[0]; b.webContents.send(ipcTypes.default.estimate.toRenderer.estimateDecodeStart); const newJob = await DecodeEstimate(path); - const newJobLow = _.transform(newJob, function (result, val, key) { - result[key.toLowerCase()] = val; - }); - if (newJobLow && newJob) { + if (newJob && newJob) { b.webContents.send( ipcTypes.default.estimate.toRenderer.estimateDecodeSuccess, - newJobLow + newJob ); NewNotification({ diff --git a/hasura/migrations/1602874670231_alter_table_public_joblines_add_column_price_diff/down.yaml b/hasura/migrations/1602874670231_alter_table_public_joblines_add_column_price_diff/down.yaml new file mode 100644 index 0000000..d7aaa1b --- /dev/null +++ b/hasura/migrations/1602874670231_alter_table_public_joblines_add_column_price_diff/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."joblines" DROP COLUMN "price_diff"; + type: run_sql diff --git a/hasura/migrations/1602874670231_alter_table_public_joblines_add_column_price_diff/up.yaml b/hasura/migrations/1602874670231_alter_table_public_joblines_add_column_price_diff/up.yaml new file mode 100644 index 0000000..9c8ac58 --- /dev/null +++ b/hasura/migrations/1602874670231_alter_table_public_joblines_add_column_price_diff/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."joblines" ADD COLUMN "price_diff" numeric NULL; + type: run_sql diff --git a/hasura/migrations/1602874689611_alter_table_public_joblines_add_column_price_diff_pc/down.yaml b/hasura/migrations/1602874689611_alter_table_public_joblines_add_column_price_diff_pc/down.yaml new file mode 100644 index 0000000..149b942 --- /dev/null +++ b/hasura/migrations/1602874689611_alter_table_public_joblines_add_column_price_diff_pc/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."joblines" DROP COLUMN "price_diff_pc"; + type: run_sql diff --git a/hasura/migrations/1602874689611_alter_table_public_joblines_add_column_price_diff_pc/up.yaml b/hasura/migrations/1602874689611_alter_table_public_joblines_add_column_price_diff_pc/up.yaml new file mode 100644 index 0000000..dfe352c --- /dev/null +++ b/hasura/migrations/1602874689611_alter_table_public_joblines_add_column_price_diff_pc/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."joblines" ADD COLUMN "price_diff_pc" numeric NULL; + type: run_sql diff --git a/hasura/migrations/1602875306082_run_sql_migration/down.yaml b/hasura/migrations/1602875306082_run_sql_migration/down.yaml new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/hasura/migrations/1602875306082_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1602875306082_run_sql_migration/up.yaml b/hasura/migrations/1602875306082_run_sql_migration/up.yaml new file mode 100644 index 0000000..76f8070 --- /dev/null +++ b/hasura/migrations/1602875306082_run_sql_migration/up.yaml @@ -0,0 +1,20 @@ +- args: + cascade: true + read_only: false + sql: |- + CREATE OR REPLACE FUNCTION public.calculate_job_line() + RETURNS trigger + LANGUAGE plpgsql + AS $function$ + DECLARE + _new record; + BEGIN + _new := NEW; + _new."price_diff" = _new."db_price" - _new."act_price"; + _new."price_diff_pc" = (_new."db_price" - _new."act_price") / _new."db_price"; + _new."updated_at" = NOW(); + RETURN _new; + END; + $function$ + ; + type: run_sql diff --git a/hasura/migrations/1602875452605_run_sql_migration/down.yaml b/hasura/migrations/1602875452605_run_sql_migration/down.yaml new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/hasura/migrations/1602875452605_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1602875452605_run_sql_migration/up.yaml b/hasura/migrations/1602875452605_run_sql_migration/up.yaml new file mode 100644 index 0000000..e48f8d7 --- /dev/null +++ b/hasura/migrations/1602875452605_run_sql_migration/up.yaml @@ -0,0 +1,9 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.calculate_job_line()\n RETURNS trigger\n + LANGUAGE plpgsql\nAS $function$\nDECLARE\n _new record;\nBEGIN\n _new := NEW;\n + _new.\"price_diff\" = _new.\"db_price\" - _new.\"act_price\";\n\nif _new.\"db_price\" + > 0 then \n_new.\"price_diff_pc\" = (_new.\"db_price\" - _new.\"act_price\") + / _new.\"db_price\";\n\nend if;\n\n RETURN _new;\nEND;\n$function$\n;" + type: run_sql diff --git a/hasura/migrations/1602875615937_run_sql_migration/down.yaml b/hasura/migrations/1602875615937_run_sql_migration/down.yaml new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/hasura/migrations/1602875615937_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1602875615937_run_sql_migration/up.yaml b/hasura/migrations/1602875615937_run_sql_migration/up.yaml new file mode 100644 index 0000000..67561df --- /dev/null +++ b/hasura/migrations/1602875615937_run_sql_migration/up.yaml @@ -0,0 +1,9 @@ +- args: + cascade: true + read_only: false + sql: |- + create trigger calculate_updated_job_line before + update + on + public.joblines for each row execute procedure calculate_job_line(); + type: run_sql diff --git a/hasura/migrations/1602876420093_update_permission_user_public_table_joblines/down.yaml b/hasura/migrations/1602876420093_update_permission_user_public_table_joblines/down.yaml new file mode 100644 index 0000000..07751de --- /dev/null +++ b/hasura/migrations/1602876420093_update_permission_user_public_table_joblines/down.yaml @@ -0,0 +1,37 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_insert_permission +- args: + permission: + backend_only: false + check: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + columns: + - act_price + - created_at + - db_price + - db_ref + - id + - jobid + - line_desc + - line_ind + - line_no + - oem_partno + - part_qty + - part_type + - unq_seq + - updated_at + set: {} + role: user + table: + name: joblines + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1602876420093_update_permission_user_public_table_joblines/up.yaml b/hasura/migrations/1602876420093_update_permission_user_public_table_joblines/up.yaml new file mode 100644 index 0000000..1b9527e --- /dev/null +++ b/hasura/migrations/1602876420093_update_permission_user_public_table_joblines/up.yaml @@ -0,0 +1,39 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_insert_permission +- args: + permission: + backend_only: false + check: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + columns: + - act_price + - created_at + - db_price + - db_ref + - id + - jobid + - line_desc + - line_ind + - line_no + - oem_partno + - part_qty + - part_type + - price_diff + - price_diff_pc + - unq_seq + - updated_at + set: {} + role: user + table: + name: joblines + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1602876426498_update_permission_user_public_table_joblines/down.yaml b/hasura/migrations/1602876426498_update_permission_user_public_table_joblines/down.yaml new file mode 100644 index 0000000..3d184ad --- /dev/null +++ b/hasura/migrations/1602876426498_update_permission_user_public_table_joblines/down.yaml @@ -0,0 +1,37 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: false + columns: + - act_price + - created_at + - db_price + - db_ref + - id + - jobid + - line_desc + - line_ind + - line_no + - oem_partno + - part_qty + - part_type + - unq_seq + - updated_at + computed_fields: [] + filter: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + role: user + table: + name: joblines + schema: public + type: create_select_permission diff --git a/hasura/migrations/1602876426498_update_permission_user_public_table_joblines/up.yaml b/hasura/migrations/1602876426498_update_permission_user_public_table_joblines/up.yaml new file mode 100644 index 0000000..518eff7 --- /dev/null +++ b/hasura/migrations/1602876426498_update_permission_user_public_table_joblines/up.yaml @@ -0,0 +1,39 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: false + columns: + - act_price + - created_at + - db_price + - db_ref + - id + - jobid + - line_desc + - line_ind + - line_no + - oem_partno + - part_qty + - part_type + - price_diff + - price_diff_pc + - unq_seq + - updated_at + computed_fields: [] + filter: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + role: user + table: + name: joblines + schema: public + type: create_select_permission diff --git a/hasura/migrations/1602876432715_update_permission_user_public_table_joblines/down.yaml b/hasura/migrations/1602876432715_update_permission_user_public_table_joblines/down.yaml new file mode 100644 index 0000000..09fb18d --- /dev/null +++ b/hasura/migrations/1602876432715_update_permission_user_public_table_joblines/down.yaml @@ -0,0 +1,36 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_update_permission +- args: + permission: + columns: + - act_price + - created_at + - db_price + - db_ref + - id + - jobid + - line_desc + - line_ind + - line_no + - oem_partno + - part_qty + - part_type + - unq_seq + - updated_at + filter: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + set: {} + role: user + table: + name: joblines + schema: public + type: create_update_permission diff --git a/hasura/migrations/1602876432715_update_permission_user_public_table_joblines/up.yaml b/hasura/migrations/1602876432715_update_permission_user_public_table_joblines/up.yaml new file mode 100644 index 0000000..f753d5a --- /dev/null +++ b/hasura/migrations/1602876432715_update_permission_user_public_table_joblines/up.yaml @@ -0,0 +1,38 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_update_permission +- args: + permission: + columns: + - act_price + - created_at + - db_price + - db_ref + - id + - jobid + - line_desc + - line_ind + - line_no + - oem_partno + - part_qty + - part_type + - price_diff + - price_diff_pc + - unq_seq + - updated_at + filter: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + set: {} + role: user + table: + name: joblines + schema: public + type: create_update_permission diff --git a/hasura/migrations/metadata.yaml b/hasura/migrations/metadata.yaml index 6905f65..e64d1e2 100644 --- a/hasura/migrations/metadata.yaml +++ b/hasura/migrations/metadata.yaml @@ -81,6 +81,8 @@ tables: - oem_partno - part_qty - part_type + - price_diff + - price_diff_pc - unq_seq - updated_at backend_only: false @@ -100,6 +102,8 @@ tables: - oem_partno - part_qty - part_type + - price_diff + - price_diff_pc - unq_seq - updated_at filter: @@ -125,6 +129,8 @@ tables: - oem_partno - part_qty - part_type + - price_diff + - price_diff_pc - unq_seq - updated_at filter: diff --git a/src/graphql/jobs.queries.js b/src/graphql/jobs.queries.js index 749b1aa..c2574d3 100644 --- a/src/graphql/jobs.queries.js +++ b/src/graphql/jobs.queries.js @@ -80,6 +80,8 @@ export const QUERY_JOB_BY_PK = gql` part_qty part_type unq_seq + price_diff + price_diff_pc } } }