Files
2026-08-22 15:15:55 +02:00

270 lines
9.8 KiB
PHP
Executable File

<?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 = [];
$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()) {
switch($azione) {
case "predefinito": { // OKOKFATTO
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
");
$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;
}
}
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;
}
}
case "elimina": { // OKOKFATTO
try {
if (!$idIndirizzo) {
$messaggio = "Id indirizzo non valido";
die("Id indirizzo non valido");
}
$pdo->beginTransaction();
$stmt = $pdo->prepare("
DELETE FROM indirizzo
WHERE
idIndirizzo = :idIndirizzo AND idCliente = :idCliente
");
$stmt->execute([
"idIndirizzo" => $idIndirizzo,
"idCliente" => $idCliente
]);
$pdo->commit();
$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;
}
}
$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
WHERE idCliente = :idCliente
");
$stmt->execute([
"idCliente" => $idCliente
]);
$indirizzi = $stmt->fetchAll(PDO::FETCH_ASSOC);
$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; ?>
<div class="row g-4"><div class="col-lg-7">
<?php foreach ($indirizzi as $i): ?>
<div class="card mb-2">
<div class="card-body d-flex justify-content-between">
<div>
<strong><?= e($i["via"] . " " . $i["numeroCivico"]) ?></strong>
<br>
<?= e(($i["nomeComune"] ?? "") . " " . ($i["siglaProvincia"] ?? "")) ?>
<?php if (!empty($i["predefinito"])): ?>
<span class="badge bg-success">Predefinito</span>
<?php endif; ?>
</div>
<form method="post">
<input type="hidden" name="idIndirizzo" value="<?= e($i["idIndirizzo"]) ?>">
<button class="btn btn-sm btn-outline-primary" name="azione" value="predefinito">Predefinito</button>
<button class="btn btn-sm btn-outline-danger" name="azione" value="elimina">Elimina</button>
</form>
</div>
</div>
<?php endforeach; ?>
</div>
<div class="col-lg-5">
<form method="post" class="card card-body shadow-sm">
<h2 class="h5">Nuovo indirizzo</h2>
<input type="hidden" name="azione" value="inserisci">
<div class="mb-3">
<label class="form-label" for="via">Via</label>
<input class="form-control" id="via" name="via" required></div>
<div class="mb-3"><label class="form-label" for="numeroCivico">Numero civico</label>
<input class="form-control" id="numeroCivico" name="numeroCivico" required></div>
<div class="mb-3"><label class="form-label" for="idComune">Comune</label>
<select class="form-select" id="idComune" name="idComune" required>
<option value="">
Seleziona un comune
</option>
<?php foreach ($comuni as $comune):?>
<option value="<?= $comune["idComune"] ?>">
<?=
htmlspecialchars($comune["nomeComune"] . " - " . $comune["nomeProvincia"] . " - " . $comune["sigla"])
?>
</option>
<?php endforeach; ?>
</select>
<br>
<button class="btn btn-primary">Salva</button>
</form>
</div>
</div>
<?php require __DIR__ . "/../includes/footer.php"; ?>