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
+186 -141
View File
@@ -1,136 +1,190 @@
<?php
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 = [];
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 = [];
$stmt = $pdo->prepare("
SELECT
comune.idComune,
comune.nome AS nomeComune,
provincia.nome AS nomeProvincia,
provincia.sigla
$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);
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");
}
case "predefinito": { // OKOKFATTO
$pdo->beginTransaction();
try {
if (!$idIndirizzo) {
$messaggio = "Id indirizzo non valido";
die("Id indirizzo non valido");
}
// Rimozione dei precedenti indirizzi predefiniti
$stmt = $pdo->prepare("
UPDATE indirizzo
SET predefinito = 0
WHERE idCliente = :idCliente
");
$stmt->execute([
"idCliente" => $idCliente
]);
$pdo->beginTransaction();
// 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
// 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:
@@ -138,38 +192,29 @@ if (postMethod()) {
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";
?>
<h1 class="h3">Indirizzi di consegna</h1>
<?php if ($messaggio): ?><div class="alert alert-warning"><?= e($messaggio) ?></div><?php endif; ?>
+38 -29
View File
@@ -1,30 +1,33 @@
<?php
require_once __DIR__ . "/../includes/auth.php";
requireRole("cliente");
require_once __DIR__ . "/../config/database.php";
require_once __DIR__ . "/../includes/auth.php";
requireRole("cliente");
require_once __DIR__ . "/../config/database.php";
$idCliente = (int) $_SESSION["idUtente"];
$prodotti = [];
$idCliente = (int) $_SESSION["idUtente"];
$prodotti = [];
$stmt = $pdo->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";
?>
<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>
</div>
<?php if (!$prodotti): ?>
@@ -32,15 +35,21 @@ require __DIR__ . "/../includes/header.php";
<?php endif; ?>
<div class="row g-3">
<?php foreach ($prodotti as $prodotto): ?>
<div class="col-md-6"><div class="card h-100 shadow-sm"><div class="card-body">
<h2 class="h5"><?= e($prodotto["nome"] ?? "") ?></h2>
<p><?= e($prodotto["descrizione"] ?? "") ?></p>
<span class="badge bg-primary">€ <?= e(number_format((float) ($prodotto["prezzoBase"] ?? 0), 2, ",", ".")) ?></span>
<?php if (!empty($prodotto["nomeCaratteristica"])): ?>
<hr><strong>Caratteristica:</strong> <?= e($prodotto["nomeCaratteristica"]) ?>
(+ € <?= e($prodotto["differenzaPrezzo"] ?? 0) ?>)
<?php endif; ?>
</div></div></div>
<div class="col-md-6">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h2 class="h5"><?= e($prodotto["nome"] ?? "") ?></h2>
<p><?= e($prodotto["descrizione"] ?? "") ?></p>
<span class="badge bg-primary">€ <?= e(number_format((float) ($prodotto["prezzoBase"] ?? 0), 2, ",", ".")) ?></span>
<?php if (!empty($prodotto["nomeCaratteristica"])): ?>
<hr>
<strong>Caratteristica:</strong>
<?= e($prodotto["nomeCaratteristica"]) ?>
(+ € <?= e($prodotto["differenzaPrezzo"] ?? 0) ?>)
<?php endif; ?>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<?php require __DIR__ . "/../includes/footer.php"; ?>
-3
View File
@@ -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";
?>
+54 -1
View File
@@ -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
>
<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): ?>
<option value="<?= e($i["idIndirizzo"]) ?>">
+33 -16
View File
@@ -1,20 +1,37 @@
<?php
require_once __DIR__ . "/../includes/auth.php";
requireRole("personale");
require_once __DIR__ . "/../config/database.php";
$idPersonale = (int) $_SESSION["idUtente"];
$conteggi = [];
/*
* QUERY 11 - Conteggio degli ordini attivi divisi per stato di avanzamento
* Input: nessuno (l'id $idPersonale è disponibile per il contesto UI)
* Output atteso: idStatoOrdine, nomeStato, posizione, numeroOrdini
* TODO SQL: implementare manualmente la Query 11.
*/
$pageTitle = "Dashboard personale"; $basePath = "..";
require __DIR__ . "/../includes/header.php";
require_once __DIR__ . "/../includes/auth.php";
requireRole("personale");
require_once __DIR__ . "/../config/database.php";
$idPersonale = (int) $_SESSION["idUtente"];
$conteggi = [];
/*
* QUERY 11 - Conteggio degli ordini attivi divisi per stato di avanzamento
* Input: nessuno (l'id $idPersonale è disponibile per il contesto UI)
* Output atteso: idStatoOrdine, nomeStato, posizione, numeroOrdini
* TODO SQL: implementare manualmente la Query 11.
*/
$pageTitle = "Dashboard personale"; $basePath = "..";
require __DIR__ . "/../includes/header.php";
?>
<h1 class="h3">Dashboard personale</h1><p>Panoramica degli ordini attivi.</p>
<?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>
<h1 class="h3">Dashboard personale</h1>
<p>Panoramica degli ordini attivi.</p>
<?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>
<?php require __DIR__ . "/../includes/footer.php"; ?>
+2
View File
@@ -1,2 +1,4 @@
[+] Preferiti: Il cliente può avere dei prodotti preferiti
[+] Immagini
[+] OKOKFATTO,CARICATO keywords da eliminare