273 lines
10 KiB
PHP
273 lines
10 KiB
PHP
<?php
|
||
ini_set('display_errors', 1);
|
||
error_reporting(E_ALL);
|
||
|
||
include('include/headscript.php');
|
||
|
||
$db = DBHandlerSelect::getInstance();
|
||
$pdo = $db->getConnection();
|
||
|
||
// AJAX HANDLERS
|
||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['ajax'] == '1') {
|
||
header('Content-Type: application/json');
|
||
|
||
$action = $_POST['action'] ?? '';
|
||
|
||
try {
|
||
if ($action === 'delete') {
|
||
$id = (int)($_POST['id'] ?? 0);
|
||
if ($id <= 0) {
|
||
echo json_encode(['success' => false, 'message' => 'ID non valido']);
|
||
exit;
|
||
}
|
||
|
||
// Delete header (rows will be deleted by FK cascade if constraints exist)
|
||
$stmt = $pdo->prepare("DELETE FROM work_sheets WHERE id = ?");
|
||
$stmt->execute([$id]);
|
||
|
||
echo json_encode(['success' => true]);
|
||
exit;
|
||
}
|
||
|
||
echo json_encode(['success' => false, 'message' => 'Azione sconosciuta']);
|
||
exit;
|
||
} catch (Exception $e) {
|
||
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
|
||
exit;
|
||
}
|
||
}
|
||
|
||
// Worksheets list + row count
|
||
$worksheets = $pdo->query("
|
||
SELECT
|
||
ws.id,
|
||
ws.worksheet_date,
|
||
ws.customer_name,
|
||
ws.profile_type_code,
|
||
ws.approved_by,
|
||
ws.created_at,
|
||
m.nome AS matrice_nome,
|
||
m.cliente AS matrice_cliente,
|
||
(SELECT COUNT(*) FROM work_sheet_mescole wsm WHERE wsm.worksheet_id = ws.id) AS mixes_count
|
||
FROM work_sheets ws
|
||
LEFT JOIN matrice m ON ws.idmatrice = m.id
|
||
ORDER BY ws.id DESC
|
||
")->fetchAll(PDO::FETCH_ASSOC);
|
||
?>
|
||
|
||
<!doctype html>
|
||
<html lang="it">
|
||
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<?php include('cssinclude.php'); ?>
|
||
<title>Fogli di Lavoro</title>
|
||
|
||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||
|
||
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap5.min.css">
|
||
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
|
||
<script src="https://cdn.datatables.net/1.13.6/js/dataTables.bootstrap5.min.js"></script>
|
||
|
||
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
|
||
<link href="https://cdn.jsdelivr.net/npm/@ttskch/select2-bootstrap4-theme@1.5.2/dist/select2-bootstrap4.min.css" rel="stylesheet" />
|
||
|
||
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||
|
||
|
||
<style>
|
||
body {
|
||
font-size: 0.95rem;
|
||
background: #f8fafc;
|
||
}
|
||
|
||
.card {
|
||
border-radius: 16px;
|
||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||
}
|
||
|
||
.back-dashboard {
|
||
background: #cfe3ff !important;
|
||
color: #1f2d3d !important;
|
||
border: 1px solid #bcd4f4 !important;
|
||
border-radius: 10px;
|
||
font-weight: 600;
|
||
padding: 10px 18px;
|
||
}
|
||
|
||
.btn-add {
|
||
background: #0d6efd;
|
||
color: white;
|
||
border-radius: 8px;
|
||
padding: 10px 20px;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.table thead {
|
||
background: #cfe3ff;
|
||
color: #1f2d3d;
|
||
}
|
||
|
||
/* Select2 Bootstrap sizing alignment */
|
||
.select2-container .select2-selection--single {
|
||
height: calc(2.375rem + 2px);
|
||
/* matches .form-select default height */
|
||
padding: 0.375rem 0.75rem;
|
||
border: 1px solid #ced4da;
|
||
border-radius: 0.375rem;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||
line-height: 1.6;
|
||
padding-left: 0;
|
||
}
|
||
|
||
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||
height: calc(2.375rem + 2px);
|
||
}
|
||
|
||
/* Make it full width */
|
||
.select2-container {
|
||
width: 100% !important;
|
||
}
|
||
</style>
|
||
</head>
|
||
|
||
<body>
|
||
<div class="wrapper toggled">
|
||
<?php include('include/navbar.php'); ?>
|
||
<?php include('include/topbar.php'); ?>
|
||
|
||
<div class="page-wrapper">
|
||
<div class="page-content">
|
||
<div class="card p-3">
|
||
<div class="card-header d-flex justify-content-between align-items-center">
|
||
<h5 class="mb-0">Fogli di Lavoro</h5>
|
||
<button class="btn back-dashboard" onclick="location.href='production_dashboard.php'">↩️ Dashboard</button>
|
||
</div>
|
||
|
||
<div class="card-body">
|
||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||
<h6 class="fw-semibold mb-0">Storico</h6>
|
||
<button class="btn btn-add" onclick="location.href='manage-worksheet.php'">➕ Nuovo Foglio</button>
|
||
</div>
|
||
|
||
<div class="table-responsive">
|
||
<table id="tabellaWorksheets" class="table table-striped table-bordered">
|
||
<thead>
|
||
<tr>
|
||
<th>ID</th>
|
||
<th>Data</th>
|
||
<th>Matrice/Profilo</th>
|
||
<th>Cliente</th>
|
||
<th>Codice Profilo</th>
|
||
<th>Mescole</th>
|
||
<th>Visto</th>
|
||
<th>Creato</th>
|
||
<th>Azioni</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<?php foreach ($worksheets as $ws): ?>
|
||
<tr>
|
||
<td><?= (int)$ws['id'] ?></td>
|
||
<td><?= htmlspecialchars($ws['worksheet_date'] ?? '-') ?></td>
|
||
<td><?= htmlspecialchars($ws['matrice_nome'] ?? '-') ?></td>
|
||
<td><?= htmlspecialchars($ws['customer_name'] ?: ($ws['matrice_cliente'] ?? '-')) ?></td>
|
||
<td><?= htmlspecialchars($ws['profile_type_code'] ?? '-') ?></td>
|
||
<td><?= (int)$ws['mixes_count'] ?></td>
|
||
<td><?= htmlspecialchars($ws['approved_by'] ?? '-') ?></td>
|
||
<td><?= htmlspecialchars($ws['created_at'] ?? '-') ?></td>
|
||
<td class="text-nowrap">
|
||
<button class="btn btn-sm btn-outline-primary"
|
||
onclick="location.href='manage-worksheet.php?id=<?= (int)$ws['id'] ?>'">
|
||
✏️ Modifica
|
||
</button>
|
||
|
||
<button class="btn btn-sm btn-outline-danger delete-ws"
|
||
data-id="<?= (int)$ws['id'] ?>"
|
||
data-name="<?= htmlspecialchars(($ws['matrice_nome'] ?? 'Foglio') . ' #' . $ws['id'], ENT_QUOTES) ?>">
|
||
🗑️ Elimina
|
||
</button>
|
||
</td>
|
||
</tr>
|
||
<?php endforeach; ?>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<?php include('include/footer.php'); ?>
|
||
</div>
|
||
|
||
<?php include('jsinclude.php'); ?>
|
||
|
||
<script>
|
||
$(document).ready(function() {
|
||
$('#tabellaWorksheets').DataTable({
|
||
pageLength: 50,
|
||
lengthMenu: [10, 25, 50, 100],
|
||
order: [
|
||
[0, 'desc']
|
||
],
|
||
language: {
|
||
url: 'https://cdn.datatables.net/plug-ins/1.13.6/i18n/it-IT.json'
|
||
}
|
||
});
|
||
|
||
$(document).on('click', '.delete-ws', function() {
|
||
const id = $(this).data('id');
|
||
const name = $(this).data('name');
|
||
|
||
Swal.fire({
|
||
title: 'Confermi eliminazione?',
|
||
text: `${name}`,
|
||
icon: 'warning',
|
||
showCancelButton: true,
|
||
confirmButtonColor: '#d33',
|
||
cancelButtonColor: '#6c757d',
|
||
confirmButtonText: 'Sì, elimina',
|
||
cancelButtonText: 'Annulla'
|
||
}).then(result => {
|
||
if (!result.isConfirmed) return;
|
||
|
||
fetch('', {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/x-www-form-urlencoded'
|
||
},
|
||
body: `ajax=1&action=delete&id=${id}`
|
||
})
|
||
.then(r => r.json())
|
||
.then(data => {
|
||
if (data.success) {
|
||
Swal.fire({
|
||
icon: 'success',
|
||
title: 'Eliminato!',
|
||
timer: 900
|
||
})
|
||
.then(() => location.reload());
|
||
} else {
|
||
Swal.fire({
|
||
icon: 'error',
|
||
title: 'Errore',
|
||
text: data.message
|
||
});
|
||
}
|
||
});
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|