From 42ad52e344651e73b9fba9aea466d8ceda92d6fc Mon Sep 17 00:00:00 2001 From: AV77web Date: Sat, 30 May 2026 00:06:30 +0200 Subject: [PATCH] corretto il carico dell'articolo eliminato dalla macchina in ArticoliMacchinaModale.tsx --- .../[idmacchina]/[idart]/route.ts | 12 ++- src/components/ArticoliMacchinaModal.tsx | 99 ++++++++++++++++++- src/lib/artMacchineParti/index.ts | 21 +++- src/types/artMacchineParti.ts | 1 + 4 files changed, 124 insertions(+), 9 deletions(-) diff --git a/src/app/api/art-macchine-parti/[idmacchina]/[idart]/route.ts b/src/app/api/art-macchine-parti/[idmacchina]/[idart]/route.ts index 6944436..5e36ebd 100644 --- a/src/app/api/art-macchine-parti/[idmacchina]/[idart]/route.ts +++ b/src/app/api/art-macchine-parti/[idmacchina]/[idart]/route.ts @@ -24,7 +24,7 @@ export async function DELETE(request: Request, { params }: RouteParams) { try { const body = await request.json(); - const { quantita, opzione } = body; + const { quantita, opzione, idMagazzino } = body; if (!quantita || quantita <= 0) { return NextResponse.json( @@ -40,12 +40,20 @@ export async function DELETE(request: Request, { params }: RouteParams) { ); } + if (opzione === "carico" && !idMagazzino) { + return NextResponse.json( + { error: "Seleziona un magazzino per il rientro" }, + { status: 400 } + ); + } + const result = await rimuoviArticoloDaMacchina( articoloId, macchinaId, quantita, opzione, - session.user.email || session.user.name || "unknown" + session.user.email || session.user.name || "unknown", + idMagazzino ); return NextResponse.json(result); diff --git a/src/components/ArticoliMacchinaModal.tsx b/src/components/ArticoliMacchinaModal.tsx index 09a2c5f..195d97e 100644 --- a/src/components/ArticoliMacchinaModal.tsx +++ b/src/components/ArticoliMacchinaModal.tsx @@ -1,7 +1,8 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import type { ArticoloAssegnatoMacchina } from "@/src/types/artMacchineParti"; +import type { Stabilimento, Magazzino } from "@/src/types/stabilimento"; interface ArticoliMacchinaModalProps { macchinaId: number; @@ -15,6 +16,7 @@ interface RimuoviModalState { articolo: ArticoloAssegnatoMacchina; quantita: number; opzione: "carico" | "elimina"; + idMagazzino: number | null; } export default function ArticoliMacchinaModal({ @@ -27,19 +29,53 @@ export default function ArticoliMacchinaModal({ const [rimuoviModal, setRimuoviModal] = useState(null); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); + const [stabilimenti, setStabilimenti] = useState([]); + const [magazzini, setMagazzini] = useState([]); + const [selectedStabilimento, setSelectedStabilimento] = useState(null); + + useEffect(() => { + async function fetchData() { + try { + const [stabRes, magRes] = await Promise.all([ + fetch("/api/stabilimenti"), + fetch("/api/magazzini"), + ]); + if (stabRes.ok && magRes.ok) { + const stabData = await stabRes.json(); + const magData = await magRes.json(); + setStabilimenti(stabData.stabilimenti); + setMagazzini(magData.magazzini); + } + } catch (err) { + console.error("Errore caricamento stabilimenti/magazzini:", err); + } + } + fetchData(); + }, []); + + const filteredMagazzini = selectedStabilimento + ? magazzini.filter((m) => m.id_stabilimento === selectedStabilimento) + : magazzini; const handleRimuoviClick = (articolo: ArticoloAssegnatoMacchina) => { setRimuoviModal({ articolo, quantita: 1, opzione: "carico", + idMagazzino: null, }); + setSelectedStabilimento(null); setError(null); }; const handleConfermaRimozione = async () => { if (!rimuoviModal) return; + if (rimuoviModal.opzione === "carico" && !rimuoviModal.idMagazzino) { + setError("Seleziona un magazzino per il rientro"); + return; + } + setSaving(true); setError(null); @@ -52,6 +88,7 @@ export default function ArticoliMacchinaModal({ body: JSON.stringify({ quantita: rimuoviModal.quantita, opzione: rimuoviModal.opzione, + idMagazzino: rimuoviModal.idMagazzino, }), } ); @@ -203,7 +240,7 @@ export default function ArticoliMacchinaModal({ name="opzione" value="elimina" checked={rimuoviModal.opzione === "elimina"} - onChange={() => setRimuoviModal({ ...rimuoviModal, opzione: "elimina" })} + onChange={() => setRimuoviModal({ ...rimuoviModal, opzione: "elimina", idMagazzino: null })} className="w-4 h-4 text-red-500" />
@@ -213,6 +250,62 @@ export default function ArticoliMacchinaModal({
+ + {rimuoviModal.opzione === "carico" && ( +
+

Seleziona il magazzino di destinazione

+ +
+ + +
+ +
+ + +
+ + {!rimuoviModal.idMagazzino && ( +

+ Devi selezionare un magazzino per confermare il rientro +

+ )} +
+ )}
@@ -225,7 +318,7 @@ export default function ArticoliMacchinaModal({