From 57abac80bd1961376c08fa3b64f28d4d2e8a1090 Mon Sep 17 00:00:00 2001 From: Emanuele Slusarz Date: Sun, 23 Aug 2026 15:34:23 +0200 Subject: [PATCH] Aggiornamento PERSONALE --- PHP/cliente/ordine.php | 31 ++- PHP/personale/dettaglio_ordine.php | 317 ++++++++++++++++++++++++++--- SQL/01_schema.sql | 59 ++++++ 3 files changed, 362 insertions(+), 45 deletions(-) diff --git a/PHP/cliente/ordine.php b/PHP/cliente/ordine.php index 4b65118..01eed27 100755 --- a/PHP/cliente/ordine.php +++ b/PHP/cliente/ordine.php @@ -604,30 +604,29 @@ "); $stmt->execute([ - "idOrdine" => $idOrdine, - "idCliente" => $idCliente, "totale" => $totale, - "tempoPreparazione" => $tempoPreparazione + "tempoPreparazione" => $tempoPreparazione, + "idOrdine" => $idOrdine, + "idCliente" => $idCliente ]); - // Creazione dello storicoStato e statoOrdine $stmt = $pdo->prepare(" - INSERT - INTO statoOrdine - ( - nomeStato, - posizione - ) - - VALUES ( - 'inserito', - 1 - ) + SELECT + MIN(so1.idStatoOrdine) + + FROM + statoOrdine AS so1 + + WHERE + so1.nomeStato = 'inserito' + + LIMIT + 1 "); $stmt->execute(); - $idStatoOrdine = $pdo->lastInsertId(); + $idStatoOrdine = $stmt->fetchColumn(); $stmt = $pdo->prepare(" INSERT diff --git a/PHP/personale/dettaglio_ordine.php b/PHP/personale/dettaglio_ordine.php index 0d62f3c..bfe59ae 100755 --- a/PHP/personale/dettaglio_ordine.php +++ b/PHP/personale/dettaglio_ordine.php @@ -1,33 +1,292 @@ prepare(" + SELECT + uso.idOrdine, + uso.idStatoOrdine, + uso.nomeStato, + uso.posizione + + FROM + ultimoStatoOrdini AS uso + + WHERE + uso.idOrdine = :idOrdine + "); + + $stmt->execute([ + "idOrdine" => $idOrdine + ]); + + $ordine = $stmt->fetch(PDO::FETCH_ASSOC) ?: null; + + // Recupero delle righe + $stmt = $pdo->prepare(" + SELECT + ro1.idRigaOrdine, + p1.nome AS nomeProdotto, + ro1.quantita, + p1.proceduraPreparazione + + FROM + rigaOrdine AS ro1 + + JOIN prodotto AS p1 + ON ro1.idProdotto = p1.idProdotto + + WHERE + ro1.idOrdine = :idOrdine + "); + + $stmt->execute([ + "idOrdine" => $idOrdine + ]); + + $righe = $stmt->fetchAll(PDO::FETCH_ASSOC); + + // Recupero delle caratteristiche + $stmt = $pdo->prepare(" + SELECT + ro1.idRigaOrdine, + GROUP_CONCAT( + CONCAT(c1.nome, ' - ', c1.descrizione) + SEPARATOR ', ' + ) AS caratteristiche + + FROM + rigaOrdine AS ro1 + + JOIN rigaOrdineSelezionaCaratteristica AS rosc1 + ON ro1.idRigaOrdine = rosc1.idRigaOrdine + + JOIN caratteristica AS c1 + ON rosc1.idCaratteristica = c1.idCaratteristica + + WHERE + ro1.idOrdine = :idOrdine + + GROUP BY + ro1.idRigaOrdine + + "); + + $stmt->execute([ + "idOrdine" => $idOrdine + ]); + + $caratteristiche = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); + + // Recupero lo storico + $stmt = $pdo->prepare(" + SELECT + statoOrdini.timestamp, + statoOrdini.nomeStato, + statoOrdini.nomePersonale, + statoOrdini.cognomePersonale + + FROM + statoOrdini + + WHERE + statoOrdini.idOrdine = :idOrdine + "); + + $stmt->execute([ + "idOrdine" => $idOrdine + ]); + + $storico = $stmt->fetchAll(PDO::FETCH_ASSOC); + + // Recupero dello stato successivo + $stmt = $pdo->prepare(" + SELECT + uso.idOrdine, + so1.idStatoOrdine, + so1.nomeStato, + so1.posizione + + FROM + ultimoStatoOrdini AS uso + + JOIN statoOrdine AS so1 + ON so1.posizione = ( + SELECT + MIN(so2.posizione) + + FROM + statoOrdine AS so2 + + WHERE + so2.posizione > uso.posizione + ) + + WHERE + uso.idOrdine = :idOrdine + "); + + $stmt->execute([ + "idOrdine" => $idOrdine + ]); + + $statoSuccessivo = $stmt->fetch(PDO::FETCH_ASSOC) ?: null; + + if (postMethod()) { + + // Controllo input + if ( + $idOrdine === null || $idOrdine === false || + $idStatoOrdine === null || $idStatoOrdine === false || + $idPersonale <= 0 + ) { + $messaggio = "Errore: dati non validi per l'aggiornamento dello stato."; + } else { + // Aggiornamento dello stato attuale + try { + + $pdo->beginTransaction(); + + // Ottengo il nuovo stato + $idStatoOrdineSuccessivo = $statoSuccessivo["idStatoOrdine"] ?? null; + + $stmt = $pdo->prepare(" + INSERT + INTO storicoStato + ( + timestamp, + idOrdine, + idStatoOrdine + ) + + VALUES ( + NOW(), + :idOrdine, + :idStatoOrdine + ) + "); + + $stmt->execute([ + "idOrdine" => $idOrdine, + "idStatoOrdine" => $idStatoOrdineSuccessivo + ]); + + $pdo->commit(); + + // Pulizia + header("Location: dettaglio_ordine.php?idOrdine=" . $idOrdine); + + // Messaggio + $_SESSION["messaggio"] = "Ordine aggiornato con successo"; + + exit; + + } catch (PDOException $e) { + + if ($pdo -> inTransaction()) { + $pdo -> rollback(); + } + + $messaggio = + "Errore durante l'aggiornamento dello stato dell'ordine" . + $e -> getMessage(); + } + } + + } + $pageTitle = "Dettaglio ordine"; $basePath = ".."; + require __DIR__ . "/../includes/header.php"; ?> -

Ordine #

Indietro
-
Specificare un ID ordine valido.
-
-
Il dettaglio sarà disponibile dopo il TODO SQL di supporto.
+ +
+

Ordine #

+ Indietro +
+ + +
Specificare un ID ordine valido.
+ + + +
+ + + +
Il dettaglio sarà disponibile dopo il TODO SQL di supporto.
+ +
-

Preparazione

ProdottoQtàCaratteristicheProcedura
-

Storico stati

  1. ()
-

Avanzamento

Corrente:

Progressione: inserito → in preparazione → pronto → in consegna → consegnato.

">
+
+
+

Preparazione

+ + + + + + + + + + + + + + + + + + + +
ProdottoQtàCaratteristicheProcedura
+ + + + + + + +
+
+
+ +
+
+

Storico stati

+
    + +
  1. ()
  2. + +
+
+
+ + +
+
+
+

Avanzamento

+

Corrente:

+

Progressione: inserito → in preparazione → pronto → in consegna → consegnato.

+
+ + "> + +
+
+
+
+ diff --git a/SQL/01_schema.sql b/SQL/01_schema.sql index f8832bc..3aba93c 100755 --- a/SQL/01_schema.sql +++ b/SQL/01_schema.sql @@ -197,4 +197,63 @@ CREATE TABLE rigaOrdineSelezionaCaratteristica ( FOREIGN KEY (idCaratteristica) REFERENCES caratteristica (idCaratteristica), FOREIGN KEY (idRigaOrdine) REFERENCES rigaOrdine (idRigaOrdine) +); + +-- CREAZIONE VISTE (RECUPERO ULTIMO STATO ORDINE) +CREATE VIEW ultimoStatoOrdini AS ( + SELECT + ss1.idOrdine, + ss1.idStatoOrdine, + so1.nomeStato, + so1.posizione + + FROM + storicoStato AS ss1 + + JOIN statoOrdine AS so1 + ON ss1.idStatoOrdine = so1.idStatoOrdine + + WHERE + so1.posizione = ( + SELECT + MAX(so2.posizione) + + FROM + storicoStato AS ss2 + + JOIN statoOrdine AS so2 + ON ss2.idStatoOrdine = so2.idStatoOrdine + + WHERE + ss2.idOrdine = ss1.idOrdine + ) +); + +-- CREAZIONE VISTE (RECUPERO STATO COMPLETO ORDINE) +CREATE VIEW statoOrdini AS ( + SELECT + ss1.idOrdine, + ss1.idStatoOrdine, + ss1.idPersonale, + u1.nome AS nomePersonale, + u1.cognome AS cognomePersonale, + ss1.timestamp, + so1.nomeStato + + FROM storicoStato AS ss1 + + JOIN statoOrdine AS so1 + ON ss1.idStatoOrdine = so1.idStatoOrdine + + LEFT JOIN personale AS p1 + ON ss1.idPersonale = p1.idUtente + + LEFT JOIN utente AS u1 + ON p1.idUtente = u1.idUtente + + WHERE + 1 + + ORDER BY + ss1.timestamp ); \ No newline at end of file