Aggiornamento lato UTENTE

This commit is contained in:
Emanuele Slusarz
2026-08-22 15:15:55 +02:00
parent ec30fb40b9
commit c796788339
6 changed files with 318 additions and 195 deletions
+190 -145
View File
@@ -1,175 +1,220 @@
<?php <?php
require_once __DIR__ . "/../includes/auth.php"; require_once __DIR__ . "/../includes/auth.php";
requireRole("cliente"); requireRole("cliente");
require_once __DIR__ . "/../config/database.php"; require_once __DIR__ . "/../config/database.php";
$idCliente = (int) $_SESSION["idUtente"]; $idCliente = (int) $_SESSION["idUtente"];
$azione = $_POST["azione"] ?? null; $azione = $_POST["azione"] ?? null;
$idIndirizzo = filter_input(INPUT_POST, "idIndirizzo", FILTER_VALIDATE_INT); $idIndirizzo = filter_input(INPUT_POST, "idIndirizzo", FILTER_VALIDATE_INT);
$via = trim($_POST["via"] ?? ""); $via = trim($_POST["via"] ?? "");
$numeroCivico = trim($_POST["numeroCivico"] ?? ""); $numeroCivico = trim($_POST["numeroCivico"] ?? "");
$idComune = filter_input(INPUT_POST, "idComune", FILTER_VALIDATE_INT); $idComune = filter_input(INPUT_POST, "idComune", FILTER_VALIDATE_INT);
$indirizzi = []; $indirizzi = [];
$messaggio = null; $messaggio = null;
$comuni = []; $comuni = [];
$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 = $pdo->prepare("
"); SELECT
$stmt->execute(); comune.idComune,
$comuni = $stmt->fetchAll(PDO::FETCH_ASSOC); 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()) { if (postMethod()) {
try {
switch($azione) { switch($azione) {
case "predefinito": { case "predefinito": { // OKOKFATTO
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
]);
// Settando indirizzo corrente come predefinito try {
$stmt = $pdo->prepare(" if (!$idIndirizzo) {
UPDATE indirizzo $messaggio = "Id indirizzo non valido";
SET predefinito = 1 die("Id indirizzo non valido");
WHERE }
idCliente = :idCliente AND idIndirizzo = :idIndirizzo
"); $pdo->beginTransaction();
$stmt->execute([
"idCliente" => $idCliente, // Rimozione dei precedenti indirizzi predefiniti
"idIndirizzo" => $idIndirizzo $stmt = $pdo->prepare("
]); UPDATE indirizzo
SET predefinito = 0
$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
WHERE idCliente = :idCliente WHERE idCliente = :idCliente
) AS esiste ");
"); $stmt->execute([
$stmt->execute([ "idCliente" => $idCliente
"idCliente" => $idCliente ]);
]);
$predefinito = $stmt->fetchColumn(); // Settando indirizzo corrente come predefinito
if ($predefinito) { $stmt = $pdo->prepare("
// Sono presenti record di indirizzi UPDATE indirizzo
$predefinito = 0; SET predefinito = 1
} else { WHERE
// Non sono presenti record di indirizzi idCliente = :idCliente AND idIndirizzo = :idIndirizzo
$predefinito = 1; ");
$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": { case "inserisci": { // OKOKFATTO
if (!$idIndirizzo) { try {
$messaggio = "Id indirizzo non valido"; if (
die("Id indirizzo non valido"); $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(" $pdo->beginTransaction();
DELETE FROM indirizzo
WHERE
idIndirizzo = :idIndirizzo AND idCliente = :idCliente
");
$stmt->execute([
"idIndirizzo" => $idIndirizzo,
"idCliente" => $idCliente
]);
$pdo->commit();
$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: default:
$messaggio = "Azione non valida"; $messaggio = "Azione non valida";
break; break;
} }
} catch (PDOException $e) {
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
die(
"Errore durante l'aggiunta dell'indirizzo di consegna: "
. $e->getMessage()
);
} }
}
$stmt = $pdo->prepare(" $stmt = $pdo->prepare("
SELECT SELECT
indirizzo.idIndirizzo, indirizzo.idIndirizzo,
indirizzo.via, indirizzo.via,
indirizzo.numeroCivico, indirizzo.numeroCivico,
indirizzo.predefinito, indirizzo.predefinito,
comune.nome AS nomeComune, comune.nome AS nomeComune,
provincia.sigla AS siglaProvincia provincia.sigla AS siglaProvincia
FROM (indirizzo JOIN comune ON indirizzo.idComune = comune.idComune) FROM (indirizzo JOIN comune ON indirizzo.idComune = comune.idComune)
JOIN provincia ON comune.idProvincia = provincia.idProvincia JOIN provincia ON comune.idProvincia = provincia.idProvincia
WHERE idCliente = :idCliente WHERE idCliente = :idCliente
"); ");
$stmt->execute([ $stmt->execute([
"idCliente" => $idCliente "idCliente" => $idCliente
]); ]);
$indirizzi = $stmt->fetchAll(PDO::FETCH_ASSOC); $indirizzi = $stmt->fetchAll(PDO::FETCH_ASSOC);
$pageTitle = "Indirizzi"; $basePath = ".."; $pageTitle = "Indirizzi"; $basePath = "..";
require __DIR__ . "/../includes/header.php"; require __DIR__ . "/../includes/header.php";
?> ?>
<h1 class="h3">Indirizzi di consegna</h1> <h1 class="h3">Indirizzi di consegna</h1>
<?php if ($messaggio): ?><div class="alert alert-warning"><?= e($messaggio) ?></div><?php endif; ?> <?php if ($messaggio): ?><div class="alert alert-warning"><?= e($messaggio) ?></div><?php endif; ?>
+38 -29
View File
@@ -1,30 +1,33 @@
<?php <?php
require_once __DIR__ . "/../includes/auth.php"; require_once __DIR__ . "/../includes/auth.php";
requireRole("cliente"); requireRole("cliente");
require_once __DIR__ . "/../config/database.php"; require_once __DIR__ . "/../config/database.php";
$idCliente = (int) $_SESSION["idUtente"]; $idCliente = (int) $_SESSION["idUtente"];
$prodotti = []; $prodotti = [];
$stmt = $pdo->prepare(" $stmt = $pdo->prepare("
SELECT SELECT
prodotto.idProdotto, prodotto.idProdotto,
prodotto.nome, prodotto.nome,
prodotto.descrizione, prodotto.descrizione,
prodotto.prezzoBase, prodotto.prezzoBase,
caratteristica.nome AS nomeCaratteristica, caratteristica.nome AS nomeCaratteristica,
caratteristica.differenzaPrezzo caratteristica.differenzaPrezzo
FROM prodotto JOIN caratteristica ON prodotto.idProdotto = caratteristica.idProdotto FROM prodotto JOIN caratteristica ON prodotto.idProdotto = caratteristica.idProdotto
"); ");
$stmt->execute(); $stmt->execute();
$prodotti = $stmt->fetchAll(PDO::FETCH_ASSOC); $prodotti = $stmt->fetchAll(PDO::FETCH_ASSOC);
$pageTitle = "Menu"; $basePath = ".."; $pageTitle = "Menu"; $basePath = "..";
require __DIR__ . "/../includes/header.php"; require __DIR__ . "/../includes/header.php";
?> ?>
<div class="d-flex justify-content-between align-items-center mb-3"> <div class="d-flex justify-content-between align-items-center mb-3">
<div><h1 class="h3 mb-1">Menu</h1><p class="text-muted mb-0">Prodotti disponibili e personalizzazioni.</p></div> <div>
<h1 class="h3 mb-1">Menu</h1>
<p class="text-muted mb-0">Prodotti disponibili e personalizzazioni.</p>
</div>
<a class="btn btn-primary" href="ordine.php">Componi ordine</a> <a class="btn btn-primary" href="ordine.php">Componi ordine</a>
</div> </div>
<?php if (!$prodotti): ?> <?php if (!$prodotti): ?>
@@ -32,15 +35,21 @@ require __DIR__ . "/../includes/header.php";
<?php endif; ?> <?php endif; ?>
<div class="row g-3"> <div class="row g-3">
<?php foreach ($prodotti as $prodotto): ?> <?php foreach ($prodotti as $prodotto): ?>
<div class="col-md-6"><div class="card h-100 shadow-sm"><div class="card-body"> <div class="col-md-6">
<h2 class="h5"><?= e($prodotto["nome"] ?? "") ?></h2> <div class="card h-100 shadow-sm">
<p><?= e($prodotto["descrizione"] ?? "") ?></p> <div class="card-body">
<span class="badge bg-primary">€ <?= e(number_format((float) ($prodotto["prezzoBase"] ?? 0), 2, ",", ".")) ?></span> <h2 class="h5"><?= e($prodotto["nome"] ?? "") ?></h2>
<?php if (!empty($prodotto["nomeCaratteristica"])): ?> <p><?= e($prodotto["descrizione"] ?? "") ?></p>
<hr><strong>Caratteristica:</strong> <?= e($prodotto["nomeCaratteristica"]) ?> <span class="badge bg-primary">€ <?= e(number_format((float) ($prodotto["prezzoBase"] ?? 0), 2, ",", ".")) ?></span>
(+ € <?= e($prodotto["differenzaPrezzo"] ?? 0) ?>) <?php if (!empty($prodotto["nomeCaratteristica"])): ?>
<?php endif; ?> <hr>
</div></div></div> <strong>Caratteristica:</strong>
<?= e($prodotto["nomeCaratteristica"]) ?>
(+ € <?= e($prodotto["differenzaPrezzo"] ?? 0) ?>)
<?php endif; ?>
</div>
</div>
</div>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>
<?php require __DIR__ . "/../includes/footer.php"; ?> <?php require __DIR__ . "/../includes/footer.php"; ?>
-3
View File
@@ -47,9 +47,6 @@
]); ]);
$ordini = $stmt->fetchAll(PDO::FETCH_ASSOC); $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 = ".."; $pageTitle = "I miei ordini"; $basePath = "..";
require __DIR__ . "/../includes/header.php"; require __DIR__ . "/../includes/header.php";
?> ?>
+54 -1
View File
@@ -26,6 +26,7 @@
$prodotti = []; // CARICATO $prodotti = []; // CARICATO
$caratteristicheDisponibili = []; // CARICATO $caratteristicheDisponibili = []; // CARICATO
$indirizzi = []; // CARICATO $indirizzi = []; // CARICATO
$indirizzoPredefinito = null; // CARICATO
$righeOrdine = []; // CARICATO $righeOrdine = []; // CARICATO
$riepilogo = null; // CARICATO $riepilogo = null; // CARICATO
@@ -51,6 +52,29 @@
$indirizzi = $stmt->fetchAll(PDO::FETCH_ASSOC); $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 * EVENTUALE ORDINE IN BOZZA
@@ -834,7 +858,36 @@
name="idIndirizzo" name="idIndirizzo"
required required
> >
<option value="">Seleziona...</option> <?php if ($indirizzoPredefinito === null): ?>
<option value="">Seleziona...</option>
<?php endif; ?>
<?php if ($indirizzoPredefinito !== null): ?>
<option
value="<?= e($indirizzoPredefinito["idIndirizzo"]) ?>"
select
>
<?= e($indirizzoPredefinito["via"] . " " . $indirizzoPredefinito["numeroCivico"]) ?>
<?= !empty($indirizzoPredefinito["predefinito"]) ? "(predefinito)" : "" ?>
</option>
<?php endif; ?>
// Rimuovo l'indirizzo dagli indirizzi
<?php
if (
is_array($indirizzoPredefinito) &&
isset($indirizzoPredefinito["idIndirizzo"]) &&
isset($indirizzoPredefinito["via"]) &&
isset($indirizzoPredefinito["numeroCivico"])
) {
foreach ($indirizzi as $key => $i) {
if ($i["idIndirizzo"] == $indirizzoPredefinito["idIndirizzo"]) {
unset($indirizzi[$key]);
break;
}
}
}
?>
<?php foreach ($indirizzi as $i): ?> <?php foreach ($indirizzi as $i): ?>
<option value="<?= e($i["idIndirizzo"]) ?>"> <option value="<?= e($i["idIndirizzo"]) ?>">
+33 -16
View File
@@ -1,20 +1,37 @@
<?php <?php
require_once __DIR__ . "/../includes/auth.php"; require_once __DIR__ . "/../includes/auth.php";
requireRole("personale"); requireRole("personale");
require_once __DIR__ . "/../config/database.php"; require_once __DIR__ . "/../config/database.php";
$idPersonale = (int) $_SESSION["idUtente"]; $idPersonale = (int) $_SESSION["idUtente"];
$conteggi = []; $conteggi = [];
/* /*
* QUERY 11 - Conteggio degli ordini attivi divisi per stato di avanzamento * QUERY 11 - Conteggio degli ordini attivi divisi per stato di avanzamento
* Input: nessuno (l'id $idPersonale è disponibile per il contesto UI) * Input: nessuno (l'id $idPersonale è disponibile per il contesto UI)
* Output atteso: idStatoOrdine, nomeStato, posizione, numeroOrdini * Output atteso: idStatoOrdine, nomeStato, posizione, numeroOrdini
* TODO SQL: implementare manualmente la Query 11. * TODO SQL: implementare manualmente la Query 11.
*/ */
$pageTitle = "Dashboard personale"; $basePath = ".."; $pageTitle = "Dashboard personale"; $basePath = "..";
require __DIR__ . "/../includes/header.php"; require __DIR__ . "/../includes/header.php";
?> ?>
<h1 class="h3">Dashboard personale</h1><p>Panoramica degli ordini attivi.</p> <h1 class="h3">Dashboard personale</h1>
<?php if (!$conteggi): ?><div class="alert alert-info">I conteggi saranno mostrati dopo l'implementazione della Query 11.</div><?php endif; ?> <p>Panoramica degli ordini attivi.</p>
<div class="row g-3 mb-4"><?php foreach ($conteggi as $c): ?><div class="col-sm-6 col-lg"><div class="card text-center h-100 shadow-sm"><div class="card-body"><div class="display-6"><?= e($c["numeroOrdini"]) ?></div><div><?= e($c["nomeStato"]) ?></div></div></div></div><?php endforeach; ?></div> <?php if (!$conteggi): ?>
<div class="alert alert-info">I conteggi saranno mostrati dopo l'implementazione della Query 11.</div>
<?php endif; ?>
<div class="row g-3 mb-4">
<?php foreach ($conteggi as $c): ?>
<div class="col-sm-6 col-lg">
<div class="card text-center h-100 shadow-sm">
<div class="card-body">
<div class="display-6">
<?= e($c["numeroOrdini"]) ?>
</div>
<div><?= e($c["nomeStato"]) ?>
</div>
</div>
</div>
</div>
<?php endforeach; ?></div>
<a class="btn btn-primary" href="ordini.php">Apri gli ordini correnti</a> <a class="btn btn-primary" href="ordini.php">Apri gli ordini correnti</a>
<?php require __DIR__ . "/../includes/footer.php"; ?> <?php require __DIR__ . "/../includes/footer.php"; ?>
+3 -1
View File
@@ -1,2 +1,4 @@
[+] Preferiti: Il cliente può avere dei prodotti preferiti [+] Preferiti: Il cliente può avere dei prodotti preferiti
[+] Immagini [+] Immagini
[+] OKOKFATTO,CARICATO keywords da eliminare