From 75f94eae14fe5afd76a843231658f268a09031e2 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Mon, 7 Apr 2025 07:01:50 -0500 Subject: [PATCH] feat(silo): adjustments completed :D --- .../logistics/siloAdjustments/SiloCard.tsx | 173 +++++++++++++++++- .../logistics/siloAdjustments/SiloPage.tsx | 8 +- .../siloAdjustments/createSiloAdjustment.ts | 25 ++- .../siloAdjustments/postAdjustment.ts | 55 +++--- .../siloAdjustments/createSiloAdjustment.ts | 1 + 5 files changed, 232 insertions(+), 30 deletions(-) diff --git a/frontend/src/components/logistics/siloAdjustments/SiloCard.tsx b/frontend/src/components/logistics/siloAdjustments/SiloCard.tsx index 83cff80..deed719 100644 --- a/frontend/src/components/logistics/siloAdjustments/SiloCard.tsx +++ b/frontend/src/components/logistics/siloAdjustments/SiloCard.tsx @@ -1,14 +1,181 @@ import { LstCard } from "@/components/extendedUI/LstCard"; +import { Button } from "@/components/ui/button"; import { CardHeader } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { getStockSilo } from "@/utils/querys/logistics/siloAdjustments/getStockSilo"; +import { useForm } from "@tanstack/react-form"; +import { useQuery } from "@tanstack/react-query"; +import axios from "axios"; +import { format } from "date-fns"; +import { CircleAlert } from "lucide-react"; +import { useState } from "react"; +import { toast } from "sonner"; export default function SiloCard(data: any) { + const token = localStorage.getItem("auth_token"); + const [submitting, setSubmitting] = useState(false); + const { refetch } = useQuery(getStockSilo()); const silo = data.silo; + + const form = useForm({ + defaultValues: { + newLevel: "", + }, + onSubmit: async ({ value }) => { + setSubmitting(true); + const dataToSubmit = { + quantity: parseFloat(value.newLevel), + warehouseId: silo.WarehouseID, + laneId: silo.LocationID, + }; + + try { + const res = await axios.post( + "/api/logistics/createsiloadjustment", + dataToSubmit, + { headers: { Authorization: `Bearer ${token}` } } + ); + console.log(res.data); + + if (res.data.success) { + toast.success(res.data.message); + refetch(); + form.reset(); + } + if (!res.data.success && res.data.data?.status === 400) { + if (res.data.data.status === 400) { + toast.error(res.data.data.data.errors[0].message); + } + } else if (!res.data.success) { + toast.error(res.data.message); + } + setSubmitting(false); + } catch (error: any) { + //console.log(error); + if (error.status === 401) { + toast.error(error.response.statusText); + setSubmitting(false); + } + } + }, + }); return ( - {silo.Description} -
-
+
+ + {silo.Description} +
+
+ Current Stock: + {silo.Stock_Total} +
+ Last date adjusted + {format(silo.LastAdjustment, "M/dd/yyyy")} +
+
+
+
{ + e.preventDefault(); + e.stopPropagation(); + }} + > + + value.length > 1 + ? undefined + : "You must enter a value greate than 1", + }} + children={(field) => { + return ( +
+
+ +
+ +
+
+
+ + field.handleChange( + e.target.value + ) + } + /> + +
+ + {field.state.meta.errors.length ? ( + + {field.state.meta.errors.join( + "," + )} + + ) : null} +
+ ); + }} + /> + +
+
+
+ charts go here + extra options here +
); } + +const Disclaimer = () => { + return ( + + + + + + +

+ If you have had this page open for a period of time + before submitting your data, there is a chance that the + stock levels will be different from the ones you see + above +

+
+
+
+ ); +}; diff --git a/frontend/src/components/logistics/siloAdjustments/SiloPage.tsx b/frontend/src/components/logistics/siloAdjustments/SiloPage.tsx index 09ad19e..915a644 100644 --- a/frontend/src/components/logistics/siloAdjustments/SiloPage.tsx +++ b/frontend/src/components/logistics/siloAdjustments/SiloPage.tsx @@ -19,8 +19,12 @@ export default function SiloPage() { ); return ( -
- {data?.map((s: any) => )} +
+ {data?.map((s: any) => ( +
+ +
+ ))}
); } diff --git a/server/services/logistics/controller/siloAdjustments/createSiloAdjustment.ts b/server/services/logistics/controller/siloAdjustments/createSiloAdjustment.ts index 8cc90af..f9463ca 100644 --- a/server/services/logistics/controller/siloAdjustments/createSiloAdjustment.ts +++ b/server/services/logistics/controller/siloAdjustments/createSiloAdjustment.ts @@ -58,6 +58,17 @@ export const createSiloAdjustment = async ( * Checking to see the difference, and send email if +/- 5% will change later if needed */ + const sa: any = a; + + if (!sa.success) { + console.log(`insde error`); + return { + success: sa.success, + message: sa.message, + data: sa.data, + }; + } + const stockNummy = stock.filter((s: any) => s.LocationID === data.laneId); const theDiff = ((data.quantity - stockNummy[0].Stock_Total) / @@ -91,7 +102,7 @@ export const createSiloAdjustment = async ( data: postAdjError, }; } - + let adj: any = a; if (Math.abs(theDiff) > 5) { // console.log(`Send for comment due to being: ${theDiff.toFixed(2)}%`); const server = set.filter((n: any) => n.name === "server"); @@ -123,8 +134,14 @@ export const createSiloAdjustment = async ( //console.log(emailSetup); await sendEmail(emailSetup); + return { + success: adj.success, + message: `Silo adjustmnet was completed you will also receive and email due to the adjustment having a variation of ${Math.abs( + theDiff + ).toFixed(2)}%`, + data: adj.data, + }; + } else { + return { success: adj.success, message: adj.message, data: adj.data }; } - - let adj: any = a; - return { success: adj.success, message: adj.message, data: adj.data }; }; diff --git a/server/services/logistics/controller/siloAdjustments/postAdjustment.ts b/server/services/logistics/controller/siloAdjustments/postAdjustment.ts index 88433b6..9c520e5 100644 --- a/server/services/logistics/controller/siloAdjustments/postAdjustment.ts +++ b/server/services/logistics/controller/siloAdjustments/postAdjustment.ts @@ -45,22 +45,45 @@ export const postAdjustment = async (data: any, prod: any) => { }) ); let e = error as any; - if (error) { - return { - success: false, - message: "Error in posting the silo adjustment.", - data: { - status: e.response?.status, - statusText: e.response?.statusText, - data: e.response?.data, - }, - }; + if (e) { + if (e.status === 401) { + const data = { + success: false, + message: "Incorrect alpla prod password.", + data: { + status: e.response?.status, + statusText: e.response?.statusText, + data: e.response?.data, + }, + }; + return data; + } else { + return { + success: false, + message: "Error in posting the silo adjustment.", + data: { + status: e.response?.status, + statusText: e.response?.statusText, + data: e.response?.data, + }, + }; + } } - if (silo.status !== 200) { + if (silo?.status !== 200) { return { success: false, message: "Error in posting the silo adjustment", + data: { + status: silo?.status, + statusText: silo?.statusText, + data: silo?.data, + }, + }; + } else { + return { + success: true, + message: "Adjustment was completed", data: { status: silo.status, statusText: silo.statusText, @@ -68,14 +91,4 @@ export const postAdjustment = async (data: any, prod: any) => { }, }; } - - return { - success: true, - message: "Adjustment was completed", - data: { - status: silo.status, - statusText: silo.statusText, - data: silo.data, - }, - }; }; diff --git a/server/services/logistics/route/siloAdjustments/createSiloAdjustment.ts b/server/services/logistics/route/siloAdjustments/createSiloAdjustment.ts index 5bc35ef..a953cf7 100644 --- a/server/services/logistics/route/siloAdjustments/createSiloAdjustment.ts +++ b/server/services/logistics/route/siloAdjustments/createSiloAdjustment.ts @@ -36,6 +36,7 @@ app.openapi( data, payload.user ); + return c.json( { success: createSiloAdj.success,