fixed mescole delete deactivate
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
include('include/headscript.php');
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
|
||||||
|
$id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
|
||||||
|
|
||||||
|
if ($id <= 0) {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'ID mescola non valido']);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$pdo = DBHandlerSelect::getInstance()->getConnection();
|
||||||
|
|
||||||
|
// Blocca la cancellazione se ci sono dati collegati: meglio disattivare
|
||||||
|
$chk = $pdo->prepare("SELECT COUNT(*) FROM mescole_supplier_lots WHERE idmescola = ?");
|
||||||
|
$chk->execute([$id]);
|
||||||
|
$nLotti = (int)$chk->fetchColumn();
|
||||||
|
|
||||||
|
$chk = $pdo->prepare("SELECT COUNT(*) FROM mescole_files WHERE idmescola = ?");
|
||||||
|
$chk->execute([$id]);
|
||||||
|
$nFile = (int)$chk->fetchColumn();
|
||||||
|
|
||||||
|
if ($nLotti > 0 || $nFile > 0) {
|
||||||
|
$parti = [];
|
||||||
|
if ($nLotti > 0) $parti[] = $nLotti . ' lotto/i fornitore';
|
||||||
|
if ($nFile > 0) $parti[] = $nFile . ' file';
|
||||||
|
echo json_encode([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Impossibile eliminare: la mescola ha ' . implode(' e ', $parti)
|
||||||
|
. '. Rimuovili prima, oppure disattiva la mescola.'
|
||||||
|
]);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pdo->beginTransaction();
|
||||||
|
|
||||||
|
// Le associazioni con le linee non sono dati storici: si possono rimuovere
|
||||||
|
$pdo->prepare("DELETE FROM mescole_lines WHERE idmescola = ?")->execute([$id]);
|
||||||
|
$pdo->prepare("DELETE FROM mescole WHERE id = ?")->execute([$id]);
|
||||||
|
|
||||||
|
$pdo->commit();
|
||||||
|
|
||||||
|
echo json_encode(['success' => true]);
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
if (isset($pdo) && $pdo->inTransaction()) {
|
||||||
|
$pdo->rollBack();
|
||||||
|
}
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Errore database: ' . $e->getMessage()]);
|
||||||
|
}
|
||||||
+111
-22
@@ -158,8 +158,8 @@
|
|||||||
/* Azioni */
|
/* Azioni */
|
||||||
#tabellaMescole th:nth-child(7),
|
#tabellaMescole th:nth-child(7),
|
||||||
#tabellaMescole td:nth-child(7) {
|
#tabellaMescole td:nth-child(7) {
|
||||||
width: 190px;
|
width: 230px;
|
||||||
max-width: 190px;
|
max-width: 230px;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,13 +195,13 @@
|
|||||||
.azioni-cell {
|
.azioni-cell {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
gap: 6px;
|
gap: 4px;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.azioni-cell .btn {
|
.azioni-cell .btn {
|
||||||
width: 34px;
|
width: 32px;
|
||||||
height: 34px;
|
height: 32px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -559,16 +559,25 @@
|
|||||||
|
|
||||||
<button type='button' class='btn btn-sm {$toggleClass} toggle-active'
|
<button type='button' class='btn btn-sm {$toggleClass} toggle-active'
|
||||||
data-id='{$row['id']}'
|
data-id='{$row['id']}'
|
||||||
|
data-active='" . ($isActive ? '1' : '0') . "'
|
||||||
|
data-nomeuscita='" . htmlspecialchars($row['nomeuscita'] ?? '', ENT_QUOTES) . "'
|
||||||
data-bs-toggle='tooltip' data-bs-placement='top' title='{$toggleText}'>
|
data-bs-toggle='tooltip' data-bs-placement='top' title='{$toggleText}'>
|
||||||
🔁
|
🔁
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button type='button' class='btn btn-sm btn-outline-secondary edit-mescola'
|
<button type='button' class='btn btn-sm btn-outline-secondary edit-mescola'
|
||||||
data-id='{$row['id']}'
|
data-id='{$row['id']}'
|
||||||
data-nomeuscita='" . htmlspecialchars($row['nomeuscita'], ENT_QUOTES) . "'
|
data-nomeuscita='" . htmlspecialchars($row['nomeuscita'] ?? '', ENT_QUOTES) . "'
|
||||||
data-bs-toggle='tooltip' data-bs-placement='top' title='Modifica'>
|
data-bs-toggle='tooltip' data-bs-placement='top' title='Modifica'>
|
||||||
✏️
|
✏️
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<button type='button' class='btn btn-sm btn-outline-danger delete-mescola'
|
||||||
|
data-id='{$row['id']}'
|
||||||
|
data-nomeuscita='" . htmlspecialchars($row['nomeuscita'] ?? '', ENT_QUOTES) . "'
|
||||||
|
data-bs-toggle='tooltip' data-bs-placement='top' title='Elimina'>
|
||||||
|
🗑️
|
||||||
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>";
|
</tr>";
|
||||||
}
|
}
|
||||||
@@ -837,30 +846,56 @@
|
|||||||
new bootstrap.Tooltip(el);
|
new bootstrap.Tooltip(el);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------- TOGGLE ACTIVE -------- */
|
/* -------- TOGGLE ACTIVE -------- */
|
||||||
$(document).on('click', '.toggle-active', function() {
|
$(document).on('click', '.toggle-active', function() {
|
||||||
const id = $(this).data('id');
|
const id = $(this).data('id');
|
||||||
|
const isActive = String($(this).data('active')) === '1';
|
||||||
|
const nome = $(this).data('nomeuscita') || '';
|
||||||
|
|
||||||
fetch('toggle_mescola_active.php', {
|
const azione = isActive ? 'Disattivare' : 'Attivare';
|
||||||
method: 'POST',
|
const testo = isActive ?
|
||||||
headers: {
|
'La mescola non comparirà più nella lista delle attive.' :
|
||||||
'Content-Type': 'application/x-www-form-urlencoded'
|
'La mescola tornerà disponibile fra le attive.';
|
||||||
},
|
|
||||||
body: `id=${encodeURIComponent(id)}`
|
Swal.fire({
|
||||||
})
|
title: azione + ' la mescola?',
|
||||||
.then(r => r.json())
|
html: (nome ? '<b>' + nome + '</b><br>' : '') + testo,
|
||||||
.then(data => {
|
icon: 'question',
|
||||||
if (data.success) {
|
showCancelButton: true,
|
||||||
location.reload();
|
confirmButtonText: 'Sì, ' + (isActive ? 'disattiva' : 'attiva'),
|
||||||
} else {
|
cancelButtonText: 'Annulla',
|
||||||
|
confirmButtonColor: isActive ? '#e8930c' : '#16a34a',
|
||||||
|
cancelButtonColor: '#6c757d'
|
||||||
|
}).then((res) => {
|
||||||
|
if (!res.isConfirmed) return;
|
||||||
|
|
||||||
|
fetch('toggle_mescola_active.php', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
|
},
|
||||||
|
body: `id=${encodeURIComponent(id)}`
|
||||||
|
})
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.success) {
|
||||||
|
location.reload();
|
||||||
|
} else {
|
||||||
|
Swal.fire({
|
||||||
|
icon: "error",
|
||||||
|
title: "Errore",
|
||||||
|
text: data.message || "Operazione non riuscita"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(function() {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
icon: "error",
|
icon: "error",
|
||||||
title: "Errore",
|
title: "Errore",
|
||||||
text: data.message || "Operazione non riuscita"
|
text: "Errore di comunicazione."
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/* -------- AGGIUNTA MESCOLA -------- */
|
/* -------- AGGIUNTA MESCOLA -------- */
|
||||||
@@ -938,6 +973,60 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/* -------- CANCELLAZIONE MESCOLA -------- */
|
||||||
|
$(document).on("click", ".delete-mescola", function() {
|
||||||
|
const id = $(this).data("id");
|
||||||
|
const nome = $(this).data("nomeuscita") || '';
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: "Eliminare definitivamente?",
|
||||||
|
html: (nome ? '<b>' + nome + '</b><br>' : '') +
|
||||||
|
"L'operazione non può essere annullata.<br>" +
|
||||||
|
"<span class='text-muted small'>Se la mescola ha lotti o file, disattivala invece di eliminarla.</span>",
|
||||||
|
icon: "warning",
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: "Sì, elimina",
|
||||||
|
cancelButtonText: "Annulla",
|
||||||
|
confirmButtonColor: "#d33",
|
||||||
|
cancelButtonColor: "#6c757d"
|
||||||
|
}).then((res) => {
|
||||||
|
if (!res.isConfirmed) return;
|
||||||
|
|
||||||
|
fetch("delete_mescola.php", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded"
|
||||||
|
},
|
||||||
|
body: `id=${encodeURIComponent(id)}`
|
||||||
|
})
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.success) {
|
||||||
|
Swal.fire({
|
||||||
|
icon: "success",
|
||||||
|
title: "Eliminata!",
|
||||||
|
timer: 1400,
|
||||||
|
showConfirmButton: false
|
||||||
|
})
|
||||||
|
.then(() => location.reload());
|
||||||
|
} else {
|
||||||
|
Swal.fire({
|
||||||
|
icon: "error",
|
||||||
|
title: "Impossibile eliminare",
|
||||||
|
text: data.message || "Operazione non riuscita"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(function() {
|
||||||
|
Swal.fire({
|
||||||
|
icon: "error",
|
||||||
|
title: "Errore",
|
||||||
|
text: "Errore di comunicazione."
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
/* -------- MODALE ASSOCIA LINEE -------- */
|
/* -------- MODALE ASSOCIA LINEE -------- */
|
||||||
$(document).on("click", ".associa-linee", function() {
|
$(document).on("click", ".associa-linee", function() {
|
||||||
const idMescola = $(this).data("id");
|
const idMescola = $(this).data("id");
|
||||||
|
|||||||
Reference in New Issue
Block a user