docs(notifcations): docs for intro, notifcations, reprint added
All checks were successful
Build and Push LST Docker Image / docker (push) Successful in 2m25s
All checks were successful
Build and Push LST Docker Image / docker (push) Successful in 2m25s
This commit is contained in:
@@ -9,11 +9,15 @@ import {
|
|||||||
import { returnFunc } from "../utils/returnHelper.utils.js";
|
import { returnFunc } from "../utils/returnHelper.utils.js";
|
||||||
import { sendEmail } from "../utils/sendEmail.utils.js";
|
import { sendEmail } from "../utils/sendEmail.utils.js";
|
||||||
import { tryCatch } from "../utils/trycatch.utils.js";
|
import { tryCatch } from "../utils/trycatch.utils.js";
|
||||||
import { v1QueryRun } from "../utils/pgConnectToLst.utils.js";
|
import { v2QueryRun } from "../utils/pgConnectToLst.utils.js";
|
||||||
|
|
||||||
const reprint = async (data: any, emails: string) => {
|
let shutoffv1 = false
|
||||||
// TODO: remove this disable once all 17 plants are on this new lst
|
const func = async (data: any, emails: string) => {
|
||||||
v1QueryRun(`update public.notifications set active = false where name = '${data.name}'`)
|
// TODO: remove this disable once all 17 plants are on this new lst
|
||||||
|
if (!shutoffv1){
|
||||||
|
v2QueryRun(`update public.notifications set active = false where name = '${data.name}'`)
|
||||||
|
shutoffv1 = true
|
||||||
|
}
|
||||||
|
|
||||||
const { data: l, error: le } = (await tryCatch(
|
const { data: l, error: le } = (await tryCatch(
|
||||||
db.select().from(notifications).where(eq(notifications.id, data.id)),
|
db.select().from(notifications).where(eq(notifications.id, data.id)),
|
||||||
@@ -106,4 +110,4 @@ const reprint = async (data: any, emails: string) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export default reprint;
|
export default func;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
vars {
|
vars {
|
||||||
url: http://localhost:3600/lst
|
url: http://localhost:3000/lst
|
||||||
readerIp: 10.44.14.215
|
readerIp: 10.44.14.215
|
||||||
}
|
}
|
||||||
vars:secret [
|
vars:secret [
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ body:json {
|
|||||||
{
|
{
|
||||||
"userId":"m6AbQXFwOXoX3YKLfwWgq2LIdDqS5jqv",
|
"userId":"m6AbQXFwOXoX3YKLfwWgq2LIdDqS5jqv",
|
||||||
"notificationId": "0399eb2a-39df-48b7-9f1c-d233cec94d2e",
|
"notificationId": "0399eb2a-39df-48b7-9f1c-d233cec94d2e",
|
||||||
"emails": ["blake.mattes@alpla.com","cowchmonkey@gmail.com"]
|
"emails": ["blake.matthes@alpla.com","blake.matthes@alpla.com"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1486
frontend/package-lock.json
generated
1486
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -26,6 +26,8 @@
|
|||||||
"radix-ui": "^1.4.3",
|
"radix-ui": "^1.4.3",
|
||||||
"react": "^19.1.1",
|
"react": "^19.1.1",
|
||||||
"react-dom": "^19.1.1",
|
"react-dom": "^19.1.1",
|
||||||
|
"react-markdown": "^10.1.0",
|
||||||
|
"remark-gfm": "^4.0.1",
|
||||||
"shadcn": "^4.0.8",
|
"shadcn": "^4.0.8",
|
||||||
"socket.io-client": "^4.8.3",
|
"socket.io-client": "^4.8.3",
|
||||||
"sonner": "^2.0.7",
|
"sonner": "^2.0.7",
|
||||||
@@ -36,6 +38,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.36.0",
|
"@eslint/js": "^9.36.0",
|
||||||
|
"@tailwindcss/typography": "^0.5.19",
|
||||||
"@tanstack/router-plugin": "^1.166.7",
|
"@tanstack/router-plugin": "^1.166.7",
|
||||||
"@types/react": "^19.1.13",
|
"@types/react": "^19.1.13",
|
||||||
"@types/react-dom": "^19.1.9",
|
"@types/react-dom": "^19.1.9",
|
||||||
|
|||||||
BIN
frontend/public/imgs/docs/notifications/dk_profile.png
Normal file
BIN
frontend/public/imgs/docs/notifications/dk_profile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
BIN
frontend/public/imgs/docs/notifications/lt_profile.png
Normal file
BIN
frontend/public/imgs/docs/notifications/lt_profile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.9 KiB |
BIN
frontend/public/imgs/docs/notifications/lt_reprints.png
Normal file
BIN
frontend/public/imgs/docs/notifications/lt_reprints.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
62
frontend/src/docs/notifications/intro.tsx
Normal file
62
frontend/src/docs/notifications/intro.tsx
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
export default function into() {
|
||||||
|
return (
|
||||||
|
<div className="mx-auto w-full max-w-4xl px-6 py-8">
|
||||||
|
<h1 className="text-3xl underline p-2">Notifications</h1>
|
||||||
|
|
||||||
|
<p className="p-2">
|
||||||
|
All notifications are a subscription based, please open the menu and
|
||||||
|
select the notification you would like to know more info about
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<p>To subscribe to a notification</p>
|
||||||
|
<ol className="list-decimal list-inside">
|
||||||
|
<li>Click on your profile</li>
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="/lst/app/imgs/docs/notifications/lt_profile.png"
|
||||||
|
alt="Reprint notification example"
|
||||||
|
className="m-2 rounded-lg border-2"
|
||||||
|
/>
|
||||||
|
<li>Click account</li>
|
||||||
|
<li>Select the notification you would like to subscribe to.</li>
|
||||||
|
<img
|
||||||
|
src="/lst/app/imgs/docs/notifications/lt_notification_select.png"
|
||||||
|
alt="Reprint notification example"
|
||||||
|
className="m-2 rounded-lg border-2"
|
||||||
|
/>
|
||||||
|
<li>
|
||||||
|
If you want to have more people on the notification you can add more
|
||||||
|
emails by clicking the add email button.{" "}
|
||||||
|
<p className="text-sm underline">
|
||||||
|
Please note that each user can subscribe on there own so you do not
|
||||||
|
need to add others unless you want to add them.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>When you are ready click subscribe</li>
|
||||||
|
</ol>
|
||||||
|
<br />
|
||||||
|
<p className="">
|
||||||
|
NOTE: you can select the same notification and add more people or just
|
||||||
|
your self only, when you do this it will override you current
|
||||||
|
subscription and add / remove the emails
|
||||||
|
</p>
|
||||||
|
<hr className="m-2" />
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
The table at the bottom of your profile is where all of your current
|
||||||
|
subscriptions will be at.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Clicking the trash can will remove the notifications from sending you
|
||||||
|
emails
|
||||||
|
</p>
|
||||||
|
<img
|
||||||
|
src="/lst/app/imgs/docs/notifications/lt_notification_table.png"
|
||||||
|
alt="Reprint notification example"
|
||||||
|
className="m-2 rounded-lg border-2"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
18
frontend/src/docs/notifications/reprints.tsx
Normal file
18
frontend/src/docs/notifications/reprints.tsx
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
export default function reprints() {
|
||||||
|
return (
|
||||||
|
<div className="mx-auto w-full max-w-4xl px-6 py-8">
|
||||||
|
<h1 className="text-3xl underline p-2">Reprints</h1>
|
||||||
|
|
||||||
|
<p className="p-2">
|
||||||
|
The reprint alert will monitor for labels that have been printed within
|
||||||
|
a defined time. when a label is printed in the defined time an email
|
||||||
|
will sent out that looks similar to the below
|
||||||
|
</p>
|
||||||
|
<img
|
||||||
|
src="/lst/app/imgs/docs/notifications/lt_reprints.png"
|
||||||
|
alt="Reprint notification example"
|
||||||
|
className="m-2 rounded-lg border-2"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
31
frontend/src/routes/docs/$.tsx
Normal file
31
frontend/src/routes/docs/$.tsx
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { createFileRoute, Link } from "@tanstack/react-router";
|
||||||
|
import { getDoc } from "../../lib/docs";
|
||||||
|
|
||||||
|
export const Route = createFileRoute("/docs/$")({
|
||||||
|
component: RouteComponent,
|
||||||
|
});
|
||||||
|
|
||||||
|
function RouteComponent() {
|
||||||
|
const { _splat } = Route.useParams();
|
||||||
|
const slug = _splat || "";
|
||||||
|
|
||||||
|
const Doc = getDoc(slug);
|
||||||
|
|
||||||
|
if (!Doc) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
You Have reached a doc page that dose not seem to exist please
|
||||||
|
validate and come back
|
||||||
|
</p>
|
||||||
|
<Link to="/docs">Docs Home</Link>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="mx-auto w-full max-w-4xl px-6 py-8">
|
||||||
|
<Doc />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
100
frontend/src/routes/docs/index.tsx
Normal file
100
frontend/src/routes/docs/index.tsx
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
import { createFileRoute, Link } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
export const Route = createFileRoute("/docs/")({
|
||||||
|
component: RouteComponent,
|
||||||
|
});
|
||||||
|
|
||||||
|
function RouteComponent() {
|
||||||
|
return (
|
||||||
|
<div className="mx-auto w-full max-w-4xl px-6 py-8">
|
||||||
|
<h1 className="text-3xl underline p-2">Logistics Support Tool Intro</h1>
|
||||||
|
<h2 className="text-2xl shadow-2xl p-2">What is lst</h2>
|
||||||
|
<p className="p-2">
|
||||||
|
Lst is a logistics support tool, and aid to ALPLAprod All data in here
|
||||||
|
is just to be treated as an aid and can still be completed manually in
|
||||||
|
alplaprod. These docs are here to help show what LST has to offer as
|
||||||
|
well as the manual process via alpla prod.
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h2 className="text-2xl shadow-2xl p-2">What dose LST offer</h2>
|
||||||
|
<ul className="list-disc list-inside">
|
||||||
|
<li>One click print</li>
|
||||||
|
<ul className="list-disc list-inside indent-8">
|
||||||
|
<li>Controls printing of labels</li>
|
||||||
|
<li>devices that can be used</li>
|
||||||
|
<ul className="list-disc list-inside indent-16">
|
||||||
|
<li>Printer control</li>
|
||||||
|
<li>plc control</li>
|
||||||
|
<li>ame palletizer control</li>
|
||||||
|
</ul>
|
||||||
|
<li>considers more business logic than alplaprod</li>
|
||||||
|
<ul className="list-disc list-inside indent-16">
|
||||||
|
<li>
|
||||||
|
enough material is needed in the system to create the next pallet
|
||||||
|
</li>
|
||||||
|
<li>this will be the same for packaging as well.</li>
|
||||||
|
</ul>
|
||||||
|
<li>special processes</li>
|
||||||
|
<ul className="list-disc list-inside indent-16">
|
||||||
|
<li>in-house delivery triggered once booked in</li>
|
||||||
|
<li>stop gap on printing labels at specific times</li>
|
||||||
|
<li>per line delay in printing</li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
<li>Silos Management</li>
|
||||||
|
<ul className="list-disc list-inside indent-8">
|
||||||
|
<li>Silo adjustments per location</li>
|
||||||
|
<ul className="list-disc list-inside indent-16">
|
||||||
|
<li>Charts for the last 10 adjustments</li>
|
||||||
|
<li>Historical data</li>
|
||||||
|
<li>Comments on per adjustment</li>
|
||||||
|
<li>Automatic email for more than 5% deviation</li>
|
||||||
|
</ul>
|
||||||
|
<li>Attach silo</li>
|
||||||
|
<ul className="list-disc list-inside indent-16">
|
||||||
|
<li>Only shows machines not attached to this silo</li>
|
||||||
|
</ul>
|
||||||
|
<li>Detach silo</li>
|
||||||
|
<ul className="list-disc list-inside indent-16">
|
||||||
|
Only shows machines that are attached to the silo.
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
<li>TMS integration</li>
|
||||||
|
<ul className="list-disc list-inside indent-8">
|
||||||
|
<li>integration with TI to auto add in orders</li>
|
||||||
|
<ul className="list-disc list-inside indent-16">
|
||||||
|
<li>orders are based on a time defined per plant.</li>
|
||||||
|
<li>carriers can be auto set.</li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
<li>
|
||||||
|
<Link
|
||||||
|
to={"/docs/$"}
|
||||||
|
params={{ _splat: "notifications/intro" }}
|
||||||
|
className="underline"
|
||||||
|
>
|
||||||
|
Notifications
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
<ul className="list-disc list-inside indent-8">
|
||||||
|
<li>Automated alerts</li>
|
||||||
|
<li>Subscription based</li>
|
||||||
|
<li>Processes notifications</li>
|
||||||
|
</ul>
|
||||||
|
<li>Datamart</li>
|
||||||
|
<ul className="list-disc list-inside indent-8">
|
||||||
|
<li>queries that can be pulled via excel</li>
|
||||||
|
<li>queries are created to allow better views for the plants</li>
|
||||||
|
<li>Faster customer reports</li>
|
||||||
|
</ul>
|
||||||
|
<li>Fake EDI (Demand Management)</li>
|
||||||
|
<ul className="list-disc list-inside indent-8">
|
||||||
|
<li>Orders in (standard template)</li>
|
||||||
|
<li>Customer specific orders templates per plant</li>
|
||||||
|
<li>Forecast (standard Template)</li>
|
||||||
|
<li>Customer specific forecast per plant</li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import { tanstackRouter } from "@tanstack/router-plugin/vite";
|
|||||||
import react from "@vitejs/plugin-react-swc";
|
import react from "@vitejs/plugin-react-swc";
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
|
|
||||||
|
|
||||||
// https://vite.dev/config/
|
// https://vite.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|||||||
Reference in New Issue
Block a user