diff --git a/PHP/cliente/indirizzi.php b/PHP/cliente/indirizzi.php index 6c3a821..36823f1 100755 --- a/PHP/cliente/indirizzi.php +++ b/PHP/cliente/indirizzi.php @@ -1,175 +1,220 @@ prepare(" - SELECT - comune.idComune, - comune.nome AS nomeComune, - provincia.nome AS nomeProvincia, - provincia.sigla + require_once __DIR__ . "/../includes/auth.php"; + requireRole("cliente"); + require_once __DIR__ . "/../config/database.php"; + $idCliente = (int) $_SESSION["idUtente"]; + $azione = $_POST["azione"] ?? null; + $idIndirizzo = filter_input(INPUT_POST, "idIndirizzo", FILTER_VALIDATE_INT); + $via = trim($_POST["via"] ?? ""); + $numeroCivico = trim($_POST["numeroCivico"] ?? ""); + $idComune = filter_input(INPUT_POST, "idComune", FILTER_VALIDATE_INT); + $indirizzi = []; + $messaggio = null; + $comuni = []; - FROM comune JOIN provincia ON comune.idProvincia = provincia.idProvincia -"); -$stmt->execute(); -$comuni = $stmt->fetchAll(PDO::FETCH_ASSOC); + $stmt = $pdo->prepare(" + SELECT + comune.idComune, + comune.nome AS nomeComune, + provincia.nome AS nomeProvincia, + provincia.sigla + + FROM comune JOIN provincia ON comune.idProvincia = provincia.idProvincia + "); + $stmt->execute(); + $comuni = $stmt->fetchAll(PDO::FETCH_ASSOC); -if (postMethod()) { - - try { + if (postMethod()) { switch($azione) { - case "predefinito": { - if (!$idIndirizzo) { - $messaggio = "Id indirizzo non valido"; - die("Id indirizzo non valido"); - } - - $pdo->beginTransaction(); - - // Rimozione dei precedenti indirizzi predefiniti - $stmt = $pdo->prepare(" - UPDATE indirizzo - SET predefinito = 0 - WHERE idCliente = :idCliente - "); - $stmt->execute([ - "idCliente" => $idCliente - ]); + case "predefinito": { // OKOKFATTO - // Settando indirizzo corrente come predefinito - $stmt = $pdo->prepare(" - UPDATE indirizzo - SET predefinito = 1 - WHERE - idCliente = :idCliente AND idIndirizzo = :idIndirizzo - "); - $stmt->execute([ - "idCliente" => $idCliente, - "idIndirizzo" => $idIndirizzo - ]); - - $pdo->commit(); - - break; - } - - case "inserisci": { - if ( - $via === "" || - $numeroCivico === "" || - $idComune === "" - ) { - $messaggio = "Compila i campi correttamente"; - die("Compila i campi correttamente"); - } - - $stmt = $pdo->prepare(" - SELECT EXISTS ( - SELECT 1 - FROM indirizzo + try { + if (!$idIndirizzo) { + $messaggio = "Id indirizzo non valido"; + die("Id indirizzo non valido"); + } + + $pdo->beginTransaction(); + + // Rimozione dei precedenti indirizzi predefiniti + $stmt = $pdo->prepare(" + UPDATE indirizzo + SET predefinito = 0 WHERE idCliente = :idCliente - ) AS esiste - "); - $stmt->execute([ - "idCliente" => $idCliente - ]); - $predefinito = $stmt->fetchColumn(); - if ($predefinito) { - // Sono presenti record di indirizzi - $predefinito = 0; - } else { - // Non sono presenti record di indirizzi - $predefinito = 1; + "); + $stmt->execute([ + "idCliente" => $idCliente + ]); + + // Settando indirizzo corrente come predefinito + $stmt = $pdo->prepare(" + UPDATE indirizzo + SET predefinito = 1 + WHERE + idCliente = :idCliente AND idIndirizzo = :idIndirizzo + "); + $stmt->execute([ + "idCliente" => $idCliente, + "idIndirizzo" => $idIndirizzo + ]); + + $pdo->commit(); + + break; + } catch (PDOException $e) { + + if ($pdo -> inTransaction()) { + $pdo->rollBack(); + } + + $messaggio = + "Errore durante l'aggiornamento dell'indirizzo" . + $e->getMessage(); + + break; } - $pdo->beginTransaction(); - $stmt = $pdo->prepare(" - INSERT INTO indirizzo (via, numeroCivico, predefinito, idComune, idCliente) - VALUES (:via, :numeroCivico, :predefinito, :idComune, :idCliente) - "); - $stmt->execute([ - "via" => $via, - "numeroCivico" => $numeroCivico, - "predefinito" => $predefinito, - "idComune" => $idComune, - "idCliente" => $idCliente - ]); - $pdo->commit(); - break; } - case "elimina": { - if (!$idIndirizzo) { - $messaggio = "Id indirizzo non valido"; - die("Id indirizzo non valido"); + case "inserisci": { // OKOKFATTO + try { + if ( + $via === "" || + $numeroCivico === "" || + $idComune === "" + ) { + $messaggio = "Compila i campi correttamente"; + die("Compila i campi correttamente"); + } + + /* + Verifica della presenza di indirizzi + già registrati a nome del cliente. + + Questa operazione non richiede che + sia inserita nella beginTransaction() + */ + $stmt = $pdo->prepare(" + SELECT EXISTS ( + SELECT 1 + FROM indirizzo + WHERE idCliente = :idCliente + ) AS esiste + "); + $stmt->execute([ + "idCliente" => $idCliente + ]); + $predefinito = $stmt->fetchColumn(); + if ($predefinito) { + // Sono presenti record di indirizzi + $predefinito = 0; + } else { + // Non sono presenti record di indirizzi + $predefinito = 1; + } + + /* + Inizia la transazione, + si inserisce nel database la via. + */ + $pdo->beginTransaction(); + $stmt = $pdo->prepare(" + INSERT INTO indirizzo (via, numeroCivico, predefinito, idComune, idCliente) + VALUES (:via, :numeroCivico, :predefinito, :idComune, :idCliente) + "); + $stmt->execute([ + "via" => $via, + "numeroCivico" => $numeroCivico, + "predefinito" => $predefinito, + "idComune" => $idComune, + "idCliente" => $idCliente + ]); + + $pdo->commit(); + + $messaggio = "Indirizzo aggiunto con successo"; + + break; + } catch (PDOException $e) { + + if ($pdo -> inTransaction()) { + $pdo->rollBack(); + } + + $messaggio = + "Errore durante l'inserimento dell'indirizzo" . + $e->getMessage(); + + break; } + } - $pdo->beginTransaction(); + case "elimina": { // OKOKFATTO + try { + if (!$idIndirizzo) { + $messaggio = "Id indirizzo non valido"; + die("Id indirizzo non valido"); + } - $stmt = $pdo->prepare(" - DELETE FROM indirizzo - WHERE - idIndirizzo = :idIndirizzo AND idCliente = :idCliente - "); - $stmt->execute([ - "idIndirizzo" => $idIndirizzo, - "idCliente" => $idCliente - ]); - $pdo->commit(); + $pdo->beginTransaction(); - $messaggio = "Indirizzo eliminato con successo"; + $stmt = $pdo->prepare(" + DELETE FROM indirizzo + WHERE + idIndirizzo = :idIndirizzo AND idCliente = :idCliente + "); + $stmt->execute([ + "idIndirizzo" => $idIndirizzo, + "idCliente" => $idCliente + ]); + $pdo->commit(); - break; + $messaggio = "Indirizzo eliminato con successo"; + + break; + } catch (PDOException $e) { + + if ($pdo -> inTransaction()) { + $pdo->rollBack(); + } + + $messaggio = + "Errore durante l'eliminazione dell'indirizzo" . + $e->getMessage(); + + break; + } } default: $messaggio = "Azione non valida"; break; } - - } catch (PDOException $e) { - if ($pdo->inTransaction()) { - $pdo->rollBack(); - } - die( - "Errore durante l'aggiunta dell'indirizzo di consegna: " - . $e->getMessage() - ); + } -} -$stmt = $pdo->prepare(" - SELECT - indirizzo.idIndirizzo, - indirizzo.via, - indirizzo.numeroCivico, - indirizzo.predefinito, - comune.nome AS nomeComune, - provincia.sigla AS siglaProvincia + $stmt = $pdo->prepare(" + SELECT + indirizzo.idIndirizzo, + indirizzo.via, + indirizzo.numeroCivico, + indirizzo.predefinito, + comune.nome AS nomeComune, + provincia.sigla AS siglaProvincia - FROM (indirizzo JOIN comune ON indirizzo.idComune = comune.idComune) - JOIN provincia ON comune.idProvincia = provincia.idProvincia + FROM (indirizzo JOIN comune ON indirizzo.idComune = comune.idComune) + JOIN provincia ON comune.idProvincia = provincia.idProvincia - WHERE idCliente = :idCliente -"); -$stmt->execute([ - "idCliente" => $idCliente -]); -$indirizzi = $stmt->fetchAll(PDO::FETCH_ASSOC); + WHERE idCliente = :idCliente + "); + $stmt->execute([ + "idCliente" => $idCliente + ]); + $indirizzi = $stmt->fetchAll(PDO::FETCH_ASSOC); -$pageTitle = "Indirizzi"; $basePath = ".."; -require __DIR__ . "/../includes/header.php"; + $pageTitle = "Indirizzi"; $basePath = ".."; + require __DIR__ . "/../includes/header.php"; ?>

Indirizzi di consegna

diff --git a/PHP/cliente/menu.php b/PHP/cliente/menu.php index 2d56e7b..d16262f 100755 --- a/PHP/cliente/menu.php +++ b/PHP/cliente/menu.php @@ -1,30 +1,33 @@ prepare(" - SELECT - prodotto.idProdotto, - prodotto.nome, - prodotto.descrizione, - prodotto.prezzoBase, - caratteristica.nome AS nomeCaratteristica, - caratteristica.differenzaPrezzo + $stmt = $pdo->prepare(" + SELECT + prodotto.idProdotto, + prodotto.nome, + prodotto.descrizione, + prodotto.prezzoBase, + caratteristica.nome AS nomeCaratteristica, + caratteristica.differenzaPrezzo - FROM prodotto JOIN caratteristica ON prodotto.idProdotto = caratteristica.idProdotto -"); -$stmt->execute(); -$prodotti = $stmt->fetchAll(PDO::FETCH_ASSOC); + FROM prodotto JOIN caratteristica ON prodotto.idProdotto = caratteristica.idProdotto + "); + $stmt->execute(); + $prodotti = $stmt->fetchAll(PDO::FETCH_ASSOC); -$pageTitle = "Menu"; $basePath = ".."; -require __DIR__ . "/../includes/header.php"; + $pageTitle = "Menu"; $basePath = ".."; + require __DIR__ . "/../includes/header.php"; ?>
-

Menu

Prodotti disponibili e personalizzazioni.

+
+

Menu

+

Prodotti disponibili e personalizzazioni.

+
Componi ordine
@@ -32,15 +35,21 @@ require __DIR__ . "/../includes/header.php";
-
-

-

- - -
Caratteristica: - (+ € ) - -
+
+
+
+

+

+ + +
+ Caratteristica: + + (+ € ) + +
+
+
diff --git a/PHP/cliente/miei_ordini.php b/PHP/cliente/miei_ordini.php index 81c247b..2ba3522 100755 --- a/PHP/cliente/miei_ordini.php +++ b/PHP/cliente/miei_ordini.php @@ -47,9 +47,6 @@ ]); $ordini = $stmt->fetchAll(PDO::FETCH_ASSOC); - /* TODO SQL DI SUPPORTO - Elenco e stato degli ordini del cliente. - * Input: $idCliente. Output: idOrdine, dataOraCreazione, statoConferma, - * orarioConsegna, totale, tempoStimatoConsegna, nomeStato. */ $pageTitle = "I miei ordini"; $basePath = ".."; require __DIR__ . "/../includes/header.php"; ?> diff --git a/PHP/cliente/ordine.php b/PHP/cliente/ordine.php index 5ca400b..8257f6b 100755 --- a/PHP/cliente/ordine.php +++ b/PHP/cliente/ordine.php @@ -26,6 +26,7 @@ $prodotti = []; // CARICATO $caratteristicheDisponibili = []; // CARICATO $indirizzi = []; // CARICATO + $indirizzoPredefinito = null; // CARICATO $righeOrdine = []; // CARICATO $riepilogo = null; // CARICATO @@ -51,6 +52,29 @@ $indirizzi = $stmt->fetchAll(PDO::FETCH_ASSOC); + $stmt = $pdo->prepare(" + SELECT + indirizzo.idIndirizzo, + indirizzo.via, + indirizzo.numeroCivico, + indirizzo.predefinito, + indirizzo.idComune + + FROM + indirizzo + + WHERE + indirizzo.idCliente = :idCliente + AND indirizzo.predefinito = 1 + + LIMIT 1 + "); + + $stmt->execute([ + "idCliente" => $idCliente + ]); + + $indirizzoPredefinito = $stmt->fetch(PDO::FETCH_ASSOC); /* ============================================================ * EVENTUALE ORDINE IN BOZZA @@ -834,7 +858,36 @@ name="idIndirizzo" required > - + + + + + + + + + // Rimuovo l'indirizzo dagli indirizzi + $i) { + if ($i["idIndirizzo"] == $indirizzoPredefinito["idIndirizzo"]) { + unset($indirizzi[$key]); + break; + } + } + } + ?>