diff --git a/frontend/src/components/ocme/ocmeCycleCount.tsx b/frontend/src/components/ocme/ocmeCycleCount.tsx
index 9b8c33e..63c7342 100644
--- a/frontend/src/components/ocme/ocmeCycleCount.tsx
+++ b/frontend/src/components/ocme/ocmeCycleCount.tsx
@@ -3,211 +3,239 @@ import { LstCard } from "../extendedUI/LstCard";
import { Button } from "../ui/button";
import { Input } from "../ui/input";
import {
- Table,
- TableBody,
- TableCell,
- TableHead,
- TableHeader,
- TableRow,
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
} from "../ui/table";
import { Skeleton } from "../ui/skeleton";
//import CycleCountLog from "./CycleCountLog";
import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
} from "../ui/select";
import { Controller, useForm } from "react-hook-form";
import axios from "axios";
import { useState } from "react";
export default function OcmeCycleCount() {
- const token = localStorage.getItem("auth_token");
- const [data, setData] = useState([]);
- const [counting, setCounting] = useState(false);
- const {
- register,
- handleSubmit,
- //watch,
- formState: { errors },
- reset,
- control,
- } = useForm();
+ const token = localStorage.getItem("auth_token");
+ const [data, setData] = useState([]);
+ const [counting, setCounting] = useState(false);
+ const {
+ register,
+ handleSubmit,
+ //watch,
+ formState: { errors },
+ reset,
+ control,
+ } = useForm();
- const onSubmit = async (data: any) => {
- setData([]);
- setCounting(true);
- toast.success(`Cycle count started`);
- try {
- const res = await axios.post("/ocme/api/v1/cycleCount", data, {
- headers: { Authorization: `Bearer ${token}` },
- });
- console.log(data);
- toast.success(res.data.message);
- setData(res.data.data);
- setCounting(false);
- reset();
- } catch (error) {
- console.log(error);
- toast.error("There was an error cycle counting");
- setCounting(false);
- reset();
- }
- };
-
- return (
-
-
-
-
- Please enter the name or laneID you want to cycle count.
-
-
-
-
-
-
- LaneID
- Lane
- AV
- Description
- Running Number
- In Ocme
- In Stock
- Result
-
-
- {data?.length === 0 ? (
-
- {Array(10)
- .fill(0)
- .map((_, i) => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ))}
-
- ) : (
- <>
- {data?.map((i: any) => {
- let classname = ``;
- if (i.info === "Quality Check Required") {
- classname = `bg-red-500`;
- }
- if (i.info === "Sent to Inv") {
- classname = `bg-amber-700`;
- }
- return (
-
-
- {i.alpla_laneID}
-
-
- {i.alpla_laneDescription}
-
-
- {i.Article}
-
-
- {i.alpla_laneDescription}
-
-
- {i.runningNumber}
-
-
- {i.ocme}
-
-
- {i.stock}
-
-
- {i.info}
-
-
- );
- })}
- >
- )}
-
-
-
-
- {/*
+ const onSubmit = async (data: any) => {
+ setData([]);
+ setCounting(true);
+ toast.success(`Cycle count started`);
+ try {
+ const res = await axios.post("/ocme/api/v1/cyclecount", data, {
+ headers: { Authorization: `Bearer ${token}` },
+ });
+ toast.success(res.data.message);
+ setData(res.data.data);
+ setCounting(false);
+ reset();
+ } catch (error) {
+ toast.error("There was an error cycle counting");
+ setCounting(false);
+ reset();
+ }
+ };
+ return (
+
+
+
+
+ Please enter the name or laneID you want to cycle count.
+
+
+
+
+
+
+ LaneID
+ Lane
+ AV
+ Description
+ Running Number
+ In Ocme
+ In Stock
+ Result
+
+
+ {data.length === 0 ? (
+
+ {Array(10)
+ .fill(0)
+ .map((_, i) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+
+ ) : (
+ <>
+ {data.map((i: any) => {
+ let classname = ``;
+ if (
+ i.info === "Quality Check Required"
+ ) {
+ classname = `bg-red-500`;
+ }
+ if (i.info === "Sent to Inv") {
+ classname = `bg-amber-700`;
+ }
+ return (
+
+
+ {i.alpla_laneID}
+
+
+ {i.alpla_laneDescription}
+
+
+ {i.Article}
+
+
+ {i.alpla_laneDescription}
+
+
+ {i.runningNumber}
+
+
+ {i.ocme}
+
+
+ {i.stock}
+
+
+ {i.info}
+
+
+ );
+ })}
+ >
+ )}
+
+
+
+
+ {/*
*/}
-
- );
+
+ );
}
diff --git a/package.json b/package.json
index 814030f..68b297d 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
"deploy": "standard-version --conventional-commits && npm run prodBuild",
"zipServer": "dotenvx run -f .env -- tsx server/scripts/zipUpBuild.ts \"C:\\Users\\matthes01\\Documents\\lstv2\"",
"v1Build": "cd C:\\Users\\matthes01\\Documents\\logisticsSupportTool && npm run oldBuilder",
- "prodBuild": "npm run v1Build && powershell -ExecutionPolicy Bypass -File server/scripts/build.ps1 -dir \"C:\\Users\\matthes01\\Documents\\lstv2\" && npm run zipServer",
+ "prodBuild": "npm run v1Build && powershell -ExecutionPolicy Bypass -File server/scripts/build.ps1 -dir \"C:\\Users\\matthes01\\Documents\\lstv2-dev\" && npm run zipServer",
"commit": "cz",
"prodinstall": "npm i --omit=dev && npm run db:migrate",
"checkupdates": "npx npm-check-updates"
@@ -78,4 +78,4 @@
"ws": "^8.18.1",
"zod": "^3.24.2"
}
-}
\ No newline at end of file
+}
diff --git a/server/index.ts b/server/index.ts
index 01d03e7..8e6e434 100644
--- a/server/index.ts
+++ b/server/index.ts
@@ -31,28 +31,28 @@ export const lstAuth = btoa(`${username}:${password}`);
// checking to make sure we have the settings intialized
const serverIntialized = await db.select({ count: count() }).from(settings);
export const installed =
- serverIntialized[0].count === 0 && process.env.NODE_ENV !== "development"
- ? false
- : true;
+ serverIntialized[0].count === 0 && process.env.NODE_ENV !== "development"
+ ? false
+ : true;
createLog("info", "LST", "server", `Server is installed: ${installed}`);
const app = new OpenAPIHono({ strict: false });
// middle ware
if (process.env.NODE_ENV === "development") {
- app.use("*", logger());
+ app.use("*", logger());
}
app.use(
- "*",
- cors({
- origin: "*", // Allow all origins
- allowHeaders: ["Content-Type", "Authorization", "X-Requested-With"],
- allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"],
- //exposeHeaders: ["Content-Length", "X-Kuma-Revision"],
- credentials: true, // Allow credentials if needed
- maxAge: 600,
- })
+ "*",
+ cors({
+ origin: "*", // Allow all origins
+ allowHeaders: ["Content-Type", "Authorization", "X-Requested-With"],
+ allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"],
+ //exposeHeaders: ["Content-Length", "X-Kuma-Revision"],
+ credentials: true, // Allow credentials if needed
+ maxAge: 600,
+ })
);
// Middleware to normalize route case
@@ -69,29 +69,29 @@ app.use(
// });
app.doc("/api/ref", {
- openapi: "3.0.0",
- info: {
- version: "2.0.0",
- title: "LST API",
- },
+ openapi: "3.0.0",
+ info: {
+ version: "2.0.0",
+ title: "LST API",
+ },
});
const routes = [
- scalar,
- auth,
- // apiHits,
- system,
- tcpServer,
- sqlService,
- logistics,
- rfid,
- printers,
- loggerService,
- ocpService,
+ scalar,
+ auth,
+ // apiHits,
+ system,
+ tcpServer,
+ sqlService,
+ logistics,
+ rfid,
+ printers,
+ loggerService,
+ ocpService,
] as const;
const appRoutes = routes.forEach((route) => {
- app.route("/api/", route);
+ app.route("/api/", route);
});
app.route("/ocme/", ocme);
@@ -132,48 +132,48 @@ app.use("*", serveStatic({ path: "./frontend/dist/index.html" }));
// Handle app exit signals
process.on("SIGINT", async () => {
- console.log("\nGracefully shutting down...");
- //await closePool();
- process.exit(0);
+ console.log("\nGracefully shutting down...");
+ //await closePool();
+ process.exit(0);
});
process.on("SIGTERM", async () => {
- console.log("Received termination signal, closing database...");
- //await closePool();
- process.exit(0);
+ console.log("Received termination signal, closing database...");
+ //await closePool();
+ process.exit(0);
});
process.on("uncaughtException", async (err) => {
- console.log("Uncaught Exception:", err);
- //await closePool();
- process.exit(1);
+ console.log("Uncaught Exception:", err);
+ //await closePool();
+ process.exit(1);
});
process.on("beforeExit", async () => {
- console.log("Process is about to exit...");
- //await closePool();
- process.exit(0);
+ console.log("Process is about to exit...");
+ //await closePool();
+ process.exit(0);
});
const port =
- process.env.NODE_ENV === "development"
- ? process.env.VITE_SERVER_PORT
- : process.env.PROD_PORT;
+ process.env.NODE_ENV === "development"
+ ? process.env.VITE_SERVER_PORT
+ : process.env.PROD_PORT;
serve(
- {
- fetch: app.fetch,
- port: Number(port),
- hostname: "0.0.0.0",
- },
- (info) => {
- createLog(
- "info",
- "LST",
- "server",
- `Server is running on http://${info.address}:${info.port}`
- );
- }
+ {
+ fetch: app.fetch,
+ port: Number(port),
+ hostname: "0.0.0.0",
+ },
+ (info) => {
+ createLog(
+ "info",
+ "LST",
+ "server",
+ `Server is running on http://${info.address}:${info.port}`
+ );
+ }
);
export type AppRoutes = typeof appRoutes;
diff --git a/server/scripts/updateServers.ts b/server/scripts/updateServers.ts
index ac6aaa6..ab5c150 100644
--- a/server/scripts/updateServers.ts
+++ b/server/scripts/updateServers.ts
@@ -4,12 +4,26 @@ import { db } from "../../database/dbclient.js";
import { serverData } from "../../database/schema/serverData.js";
import { eq, sql } from "drizzle-orm";
import { createLog } from "../services/logger/logger.js";
+import { spawn } from "child_process";
+import { getAppInfo } from "../globalUtils/appInfo.js";
+import { db } from "../../database/dbclient.js";
+import { serverData } from "../../database/schema/serverData.js";
+import { eq, sql } from "drizzle-orm";
+import { createLog } from "../services/logger/logger.js";
type UpdateServerResponse = {
success: boolean;
message: string;
+ success: boolean;
+ message: string;
};
+export const updateServer = async (
+ devApp: string,
+ server: string | null
+): Promise
=> {
+ const app = await getAppInfo(devApp);
+ const serverInfo = await db
export const updateServer = async (
devApp: string,
server: string | null
@@ -33,7 +47,32 @@ export const updateServer = async (
"Looks like you are missing the plant token or have entered an incorrect one please try again.",
};
}
+ if (serverInfo.length === 0) {
+ createLog(
+ "error",
+ "lst",
+ "serverUpdater",
+ `Looks like you are missing the plant token or have entered an incorrect one please try again.`
+ );
+ return {
+ success: false,
+ message:
+ "Looks like you are missing the plant token or have entered an incorrect one please try again.",
+ };
+ }
+ if (serverInfo[0].isUpgrading) {
+ createLog(
+ "error",
+ "lst",
+ "serverUpdater",
+ `Looks like ${serverInfo[0].plantToken} is upgrading already you cant do this again.`
+ );
+ return {
+ success: false,
+ message: `Looks like ${serverInfo[0].plantToken} is upgrading already you cant do this again.`,
+ };
+ }
if (serverInfo[0].isUpgrading) {
createLog(
"error",
@@ -77,6 +116,15 @@ export const updateServer = async (
,
];
+ return new Promise(async (resolve, reject) => {
+ const process = spawn("powershell", args);
+ // change the server to upgradeing
+ await db
+ .update(serverData)
+ .set({ isUpgrading: true })
+ .where(eq(serverData.plantToken, server?.toLowerCase() ?? ""));
+ //let stdout = "";
+ //let stderr = "";
return new Promise(async (resolve, reject) => {
const process = spawn("powershell", args);
// change the server to upgradeing
@@ -87,6 +135,12 @@ export const updateServer = async (
//let stdout = "";
//let stderr = "";
+ // Collect stdout data
+ process.stdout.on("data", (data) => {
+ const output = data.toString().trim();
+ createLog("info", "lst", "serverUpdater", `${output}`);
+ //onData(output);
+ });
// Collect stdout data
process.stdout.on("data", (data) => {
const output = data.toString().trim();
@@ -94,6 +148,12 @@ export const updateServer = async (
//onData(output);
});
+ // Collect stderr data
+ process.stderr.on("data", (data) => {
+ const output = data.toString().trim();
+ createLog("info", "lst", "serverUpdater", `${output}`);
+ //onData(output);
+ });
// Collect stderr data
process.stderr.on("data", (data) => {
const output = data.toString().trim();
@@ -101,6 +161,13 @@ export const updateServer = async (
//onData(output);
});
+ // Handle process close
+ process.on("close", async (code) => {
+ if (code === 0) {
+ // if (count >= servers) {
+ // //onClose(`Server completed with code: ${code}`);
+ // }
+ createLog("info", "lst", "serverUpdater", `${server}`);
// Handle process close
process.on("close", async (code) => {
if (code === 0) {
@@ -109,6 +176,26 @@ export const updateServer = async (
// }
createLog("info", "lst", "serverUpdater", `${server}`);
+ //update the last build.
+ try {
+ await db
+ .update(serverData)
+ .set({ lastUpdated: sql`NOW()`, isUpgrading: false })
+ .where(eq(serverData.plantToken, server?.toLowerCase() ?? ""));
+ createLog(
+ "info",
+ "lst",
+ "serverUpdater",
+ `${server?.toLowerCase()}, has been updated and can now be used again.`
+ );
+ } catch (error) {
+ createLog(
+ "error",
+ "lst",
+ "serverUpdater",
+ `There was an error updating the last time the server was updated: ${error}`
+ );
+ }
//update the last build.
try {
await db
@@ -130,6 +217,12 @@ export const updateServer = async (
);
}
+ resolve({
+ success: true,
+ message: `${server?.toLowerCase()}, has been updated and can now be used again.`,
+ });
+ } else {
+ const errorMessage = `Process exited with code ${code}`;
resolve({
success: true,
message: `${server?.toLowerCase()}, has been updated and can now be used again.`,
@@ -137,6 +230,9 @@ export const updateServer = async (
} else {
const errorMessage = `Process exited with code ${code}`;
+ // if (count >= servers) {
+ // //onClose(code);
+ // }
// if (count >= servers) {
// //onClose(code);
// }
@@ -147,6 +243,12 @@ export const updateServer = async (
});
}
});
+ reject({
+ success: false,
+ message: `${server?.toLowerCase()}, Has encounted an error while updating.`,
+ });
+ }
+ });
// Handle errors with the process itself
process.on("error", (error) => {
@@ -155,11 +257,31 @@ export const updateServer = async (
reject(error);
});
});
+ // Handle errors with the process itself
+ process.on("error", (error) => {
+ //onError(err.message);
+ createLog("error", "lst", "serverUpdater", `${error}`);
+ reject(error);
+ });
+ });
};
export async function processAllServers(devApp: string) {
const servers = await db.select().from(serverData);
+ const servers = await db.select().from(serverData);
+ createLog(
+ "info",
+ "lst",
+ "serverUpdater",
+ `Running the update on all servers`
+ );
+ let count = 1;
+ for (const server of servers) {
+ try {
+ const updateToServer = await updateServer(devApp, server.plantToken);
+ createLog("info", "lst", "serverUpdater", `${server.sName} was updated.`);
+ count = count + 1;
createLog(
"info",
"lst",
@@ -184,4 +306,15 @@ export async function processAllServers(devApp: string) {
//return {success: false, message: `Error updating ${server.sName}: ${error.message}`};
}
}
+ //return {success: true, message: `${server.sName} was updated.`, data: updateToServer};
+ } catch (error: any) {
+ createLog(
+ "info",
+ "lst",
+ "serverUpdater",
+ `Error updating ${server.sName}: ${error.message}`
+ );
+ //return {success: false, message: `Error updating ${server.sName}: ${error.message}`};
+ }
+ }
}
diff --git a/server/services/ocme/controller/postRunningNr.ts b/server/services/ocme/controller/postRunningNr.ts
index 22cfa2a..a5ac9af 100644
--- a/server/services/ocme/controller/postRunningNr.ts
+++ b/server/services/ocme/controller/postRunningNr.ts
@@ -4,6 +4,12 @@ import { createSSCC } from "../../../globalUtils/createSSCC.js";
import { createLog } from "../../logger/logger.js";
import { query } from "../../sqlServer/prodSqlServer.js";
import { labelData } from "../../sqlServer/querys/materialHelpers/labelInfo.js";
+import { db } from "../../../../database/dbclient.js";
+import { ocmeData } from "../../../../database/schema/ocme.js";
+import { createSSCC } from "../../../globalUtils/createSSCC.js";
+import { createLog } from "../../logger/logger.js";
+import { query } from "../../sqlServer/prodSqlServer.js";
+import { labelData } from "../../sqlServer/querys/materialHelpers/labelInfo.js";
export const postLabelData = async (data: any) => {
console.log(data);