diff --git a/electron/audit/audit-ipc.js b/electron/audit/audit-ipc.js
index 4b411e8..5182ff2 100644
--- a/electron/audit/audit-ipc.js
+++ b/electron/audit/audit-ipc.js
@@ -28,7 +28,7 @@ ipcMain.on(ipcTypes.default.audit.toMain.browseForFile, async (event, { sheetNam
} else if (foundHeaderRow && !foundTotalRow && line[0] && line[0] !== "Grand Total") {
//Add it to the array
const row = {
- clm_no: line[0],
+ clm_no: line[0].startsWith("00") ? line[0].slice(2) : line[0],
close_date: line[1],
v_model_yr: line[3],
v_makedesc: line[4],
diff --git a/electron/main.js b/electron/main.js
index 2206815..4a95f6a 100644
--- a/electron/main.js
+++ b/electron/main.js
@@ -1,14 +1,5 @@
const path = require("path");
-const {
- app,
- BrowserWindow,
- Tray,
- Menu,
- ipcMain,
- dialog,
- shell,
- globalShortcut,
-} = require("electron");
+const { app, BrowserWindow, Tray, Menu, ipcMain, dialog, shell, globalShortcut } = require("electron");
const isDev = require("electron-is-dev");
const { default: ipcTypes } = require("../src/ipc.types.commonjs");
const { store } = require("./electron-store");
@@ -26,8 +17,8 @@ Sentry.init({
ignoreErrors: [
"SimpleURLLoaderWrapper",
"Cannot read properties of null (reading 'webContents')",
- "EBUSY: resource busy or locked",
- ],
+ "EBUSY: resource busy or locked"
+ ]
});
autoUpdater.autoDownload = true;
@@ -52,28 +43,28 @@ var menu = Menu.buildFromTemplate([
click() {
app.exit();
app.relaunch();
- },
+ }
},
{
label: "Clear Settings",
click() {
store.reset("filePaths");
mainWindow.webContents.session.clearStorageData();
- },
+ }
},
{
label: "Sign Out",
click() {
mainWindow.webContents.send(ipcTypes.app.toRenderer.signOut);
- },
+ }
},
{
label: "Exit",
click() {
app.quit();
- },
- },
- ],
+ }
+ }
+ ]
// Other code removed for brevity
},
{
@@ -83,13 +74,13 @@ var menu = Menu.buildFromTemplate([
label: "Rescue",
click() {
shell.openExternal("http://imexrescue.com");
- },
+ }
},
{
label: `Check for Updates (currently ${app.getVersion()})`,
click() {
checkForUpdates();
- },
+ }
},
{
label: `Show Release Notes`,
@@ -98,28 +89,28 @@ var menu = Menu.buildFromTemplate([
ipcTypes.app.toRenderer.setReleaseNotes,
require("./changelog.json")[app.getVersion()]
);
- },
+ }
},
{
label: "Open Config File",
click() {
shell.openPath(store.path);
- },
+ }
},
{
label: "Open Log File",
click() {
shell.openPath(path.join(app.getPath("appData"), "ImeX RPS\\logs"));
- },
+ }
},
{
label: "Third Party Notices",
click() {
openNoticeWindow();
- },
- },
- ],
- },
+ }
+ }
+ ]
+ }
]);
let mainWindow;
@@ -142,8 +133,8 @@ function createWindow() {
webSecurity: true,
worldSafeExecuteJavaScript: true,
contextIsolation: true,
- preload: path.join(__dirname, "preload.js"), // use a preload script
- },
+ preload: path.join(__dirname, "preload.js") // use a preload script
+ }
});
const gotTheLock = app.requestSingleInstanceLock();
@@ -162,11 +153,7 @@ function createWindow() {
// and load the index.html of the app.
// win.loadFile("index.html");
- mainWindow.loadURL(
- isDev
- ? "http://localhost:3000"
- : `file://${path.join(__dirname, "/../build/index.html")}`
- );
+ mainWindow.loadURL(isDev ? "http://localhost:3000" : `file://${path.join(__dirname, "/../build/index.html")}`);
// mainWindow.on("close", function (event) {
// event.preventDefault();
@@ -256,15 +243,15 @@ function createTray() {
label: "Show",
click: function () {
mainWindow.show();
- },
+ }
},
{
label: "Exit",
click: function () {
app.isQuiting = true;
app.quit();
- },
- },
+ }
+ }
]);
appIcon.on("double-click", function (event) {
@@ -297,7 +284,7 @@ function openNoticeWindow() {
noticeWindow = new BrowserWindow({
height: 600,
width: 800,
- title: "ImEX RPS - Third Party Notices",
+ title: "ImEX RPS - Third Party Notices"
});
noticeWindow.loadURL("file://" + __dirname + "/licenses.txt");
@@ -333,7 +320,7 @@ autoUpdater.on("update-downloaded", (ev, info) => {
// if (process.env.NODE_ENV === "production") {
mainWindow.webContents.send(ipcTypes.app.toRenderer.downloadProgress, {
...ev,
- percent: 100,
+ percent: 100
});
dialog
@@ -341,7 +328,7 @@ autoUpdater.on("update-downloaded", (ev, info) => {
type: "info",
title: "ImeX RPS Update Manager",
message: `ImEX RPS is ready to update to Version ${ev.version}. It is highly recommended that you update immediately. Would you like to update now? RPS will automatically restart.`,
- buttons: ["Yes", "No"],
+ buttons: ["Yes", "No"]
})
.then(({ response }) => {
if (response === 0) {
diff --git a/package-lock.json b/package-lock.json
index f78ee85..a0c778e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -42,6 +42,7 @@
"react-infinite-scroller": "^1.2.6",
"react-redux": "^9.1.1",
"react-router-dom": "^6.22.3",
+ "react-to-print": "^2.15.1",
"recharts": "^2.12.5",
"redux": "^5.0.1",
"redux-logger": "^3.0.6",
@@ -13473,6 +13474,15 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-to-print": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-2.15.1.tgz",
+ "integrity": "sha512-1foogIFbCpzAVxydkhBiDfMiFYhIMphiagDOfcG4X/EcQ+fBPqJ0rby9Wv/emzY1YLkIQy/rEgOrWQT+rBKhjw==",
+ "peerDependencies": {
+ "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
diff --git a/package.json b/package.json
index 7d36e53..fceb4f0 100644
--- a/package.json
+++ b/package.json
@@ -40,6 +40,7 @@
"react-infinite-scroller": "^1.2.6",
"react-redux": "^9.1.1",
"react-router-dom": "^6.22.3",
+ "react-to-print": "^2.15.1",
"recharts": "^2.12.5",
"redux": "^5.0.1",
"redux-logger": "^3.0.6",
diff --git a/src/App/App.styles.scss b/src/App/App.styles.scss
index 85a5aee..d1b15e6 100644
--- a/src/App/App.styles.scss
+++ b/src/App/App.styles.scss
@@ -93,3 +93,17 @@ body {
opacity: 0;
}
}
+
+@media print {
+ .no-print {
+ display: none;
+ }
+
+ body {
+ height: unset;
+ page-break-before: always;
+ }
+ @page {
+ // size: landscape;
+ }
+}
diff --git a/src/components/organisms/audit-results/audit-results.organism.jsx b/src/components/organisms/audit-results/audit-results.organism.jsx
index 99efac1..1e7c6c1 100644
--- a/src/components/organisms/audit-results/audit-results.organism.jsx
+++ b/src/components/organisms/audit-results/audit-results.organism.jsx
@@ -1,43 +1,71 @@
import { Card, Col, Divider, Space, Table, Tooltip } from "antd";
+import Dinero from "dinero.js";
import React from "react";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
-import { setSelectedJobTargetPc } from "../../../redux/application/application.actions";
-import { selectAuditData } from "../../../redux/reporting/reporting.selectors";
+import { setSelectedJobId, setSelectedJobTargetPc } from "../../../redux/application/application.actions";
+import { selectAuditData, selectAuditLoading } from "../../../redux/reporting/reporting.selectors";
import { DateFormat } from "../../../util/constants";
import dayjs from "../../../util/day";
-import Dinero from "dinero.js";
import { alphaSort, dateSort } from "../../../util/sorters";
+import { Link } from "react-router-dom";
const mapStateToProps = createStructuredSelector({
- selectAuditData: selectAuditData
+ selectAuditData: selectAuditData,
+ auditLoading: selectAuditLoading
});
const mapDispatchToProps = (dispatch) => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
+ setSelectedJobId: (id) => dispatch(setSelectedJobId(id)),
setSelectedJobTargetPc: (job) => dispatch(setSelectedJobTargetPc(job))
});
-export function AuditResultsOrganism({ selectAuditData }) {
+export function AuditResultsOrganism({ auditLoading, setSelectedJobId, selectAuditData }) {
const missingColumns = [
{
key: "clm_no",
- width: "20%",
+ width: "12%",
title: "Claim No.",
sorter: (a, b) => alphaSort(a.clm_no, b.clm_no),
- dataIndex: "clm_no"
+ dataIndex: "clm_no",
+ render: (text, record) => (
+ setSelectedJobId(record.id)} to={"/"}>
+