zibo-dashboard/public/userarea/production_dashboard.php
2026-04-19 09:14:19 +03:00

528 lines
20 KiB
PHP

<?php include('include/headscript.php'); ?>
<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="assets/images/favicon-32x32.png" type="image/png" />
<?php include('cssinclude.php'); ?>
<title>Dashboard Produzione - <?= htmlspecialchars($titlewebsite, ENT_QUOTES, 'UTF-8'); ?></title>
<!-- Bootstrap + jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
body {
background: linear-gradient(135deg, #f3f6f8, #e8eef3);
font-family: 'Segoe UI', sans-serif;
color: #2b3e50;
}
.page-content {
padding: 1.4rem 1rem;
display: flex;
flex-direction: column;
align-items: center;
}
h3.dashboard-title {
text-align: center;
font-weight: 800;
color: #2b3e50;
margin-bottom: 1.2rem;
letter-spacing: 0.3px;
}
/* ===== STATISTICHE ===== */
.stats-row {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 14px;
margin-bottom: 16px;
width: 100%;
max-width: 980px;
}
.stat-card {
flex: 1 1 240px;
background: #fff;
border-radius: 16px;
padding: 18px 20px;
box-shadow: 0 5px 12px rgba(0, 0, 0, 0.08);
text-align: center;
transition: all 0.2s ease;
}
.stat-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.13);
}
.stat-value {
font-size: 1.8rem;
font-weight: 800;
color: #2b3e50;
line-height: 1.15;
}
.stat-label {
font-size: 0.98rem;
font-weight: 600;
color: #6b7a89;
}
.stat-prod {
background: linear-gradient(135deg, #cde5ff, #dff0ff);
}
.stat-mese {
background: linear-gradient(135deg, #d2f7d9, #e7ffea);
}
.stat-scarti {
background: linear-gradient(135deg, #ffe7cc, #fff3df);
}
/* ===== SEZIONI COLLASSABILI ===== */
.sections-wrap {
width: 100%;
max-width: 980px;
}
.section-card {
background: #fff;
border-radius: 16px;
box-shadow: 0 5px 12px rgba(0, 0, 0, 0.08);
margin-bottom: 14px;
overflow: hidden;
}
.section-header {
width: 100%;
border: 0;
background: transparent;
padding: 14px 16px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
cursor: pointer;
user-select: none;
text-align: left;
}
.section-left {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
}
.section-icon {
font-size: 1.6rem;
line-height: 1;
}
.section-title {
font-weight: 800;
font-size: 1.05rem;
margin: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.section-subtitle {
font-size: 0.9rem;
color: #6b7a89;
margin: 0;
}
.chev {
font-size: 1.25rem;
transition: transform 0.18s ease;
}
.section-header[aria-expanded="true"] .chev {
transform: rotate(180deg);
}
.section-body {
padding: 14px 16px 16px 16px;
border-top: 1px solid rgba(0, 0, 0, 0.06);
}
/* ===== BOTTONI ===== */
.dashboard-grid {
display: grid;
grid-template-columns: repeat(3, minmax(200px, 1fr));
gap: 14px 16px;
width: 100%;
}
.dash-btn {
width: 100%;
border: none;
border-radius: 16px;
padding: 16px 10px;
color: #2b3e50;
font-size: 1.15rem;
font-weight: 700;
background: #fff;
transition: all 0.2s ease;
box-shadow: 0 5px 12px rgba(0, 0, 0, 0.08);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 108px;
}
.dash-btn:hover {
transform: translateY(-2px);
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.13);
cursor: pointer;
}
.dash-icon {
font-size: 2.6rem;
margin-bottom: 6px;
line-height: 1;
}
/* Pastel colors */
.btn-programmazione {
background: linear-gradient(135deg, #7c7afaff, #7c7afaff);
color: #fff;
}
.btn-status {
background: linear-gradient(135deg, #61ce5dff, #61ce5dff);
color: #fff;
}
.btn-scadenziario {
background: linear-gradient(135deg, #ffb86b, #ffd59a);
color: #2b3e50;
}
.btn-statistiche {
background: linear-gradient(135deg, #ffe0a3ff, #fff1c1ff);
}
.btn-manager {
background: linear-gradient(135deg, #cde5ff, #dff0ff);
}
.btn-manager-stats {
background: linear-gradient(135deg, #d2f7d9, #e7ffea);
}
.btn-magazzino {
background: linear-gradient(135deg, #b9e3ffff, #d7f1ffff);
}
.btn-mescole {
background: linear-gradient(135deg, #ffc853ff, #fdd98bff);
}
.btn-matrici {
background: linear-gradient(135deg, #ff8585ff, #ff9d9dff);
}
.btn-linee {
background: linear-gradient(135deg, #b9e3ffff, #d7f1ffff);
}
.btn-problem {
background-color: #ef4444 !important;
color: #ffffff !important;
border-radius: 16px;
}
.btn-problem:hover {
background-color: #dc2626 !important;
}
.btn-tools {
background: linear-gradient(135deg, #9f7aea, #b794f4);
color: #fff;
}
.btn-employees {
background: linear-gradient(135deg, #a5b4fc, #c7d2fe);
}
.btn-setup {
background: linear-gradient(135deg, #e5e7eb, #f3f4f6);
}
/* Tablet/mobile */
@media (max-width: 992px) {
.dashboard-grid {
grid-template-columns: repeat(2, minmax(180px, 1fr));
}
}
@media (max-width: 768px) {
.stats-row {
flex-direction: column;
align-items: stretch;
}
.dashboard-grid {
grid-template-columns: 1fr;
}
.dash-btn {
font-size: 1.12rem;
min-height: 98px;
}
.dash-icon {
font-size: 2.4rem;
}
}
</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">
<?php
$pdo = DBHandlerSelect::getInstance()->getConnection();
include(__DIR__ . '/scadenzario/include/my_deadlines_widget.php');
?>
<h3 class="dashboard-title">Dashboard Produzione</h3>
<!-- ===== STATISTICHE PRINCIPALI ===== -->
<div class="stats-row">
<?php
$db = DBHandlerSelect::getInstance();
$pdo = $db->getConnection();
$stmt = $pdo->query("SELECT SUM(kgprod) AS totale_oggi FROM productiondata WHERE DATE(Data) = CURDATE()");
$totOggi = number_format($stmt->fetchColumn() ?? 0, 2, ',', '.');
$stmt = $pdo->query("SELECT SUM(kgprod) AS totale_mese FROM productiondata WHERE MONTH(Data) = MONTH(CURDATE()) AND YEAR(Data) = YEAR(CURDATE())");
$totMese = number_format($stmt->fetchColumn() ?? 0, 2, ',', '.');
$stmt = $pdo->query("SELECT (SUM(scarto)/NULLIF(SUM(kgprod),0))*100 AS perc_scarto FROM productiondata WHERE MONTH(Data) = MONTH(CURDATE()) AND YEAR(Data) = YEAR(CURDATE())");
$percScarto = number_format($stmt->fetchColumn() ?? 0, 2, ',', '.');
?>
<div class="stat-card stat-prod">
<div class="stat-value"><?= $totOggi ?> kg</div>
<div class="stat-label">Produzione odierna</div>
</div>
<div class="stat-card stat-mese">
<div class="stat-value"><?= $totMese ?> kg</div>
<div class="stat-label">Produzione mese corrente</div>
</div>
<div class="stat-card stat-scarti">
<div class="stat-value"><?= $percScarto ?>%</div>
<div class="stat-label">Scarto medio mensile</div>
</div>
</div>
<!-- ===== SEZIONI COLLASSABILI ===== -->
<div class="sections-wrap" id="prodAccordion">
<!-- OPERATIVO -->
<div class="section-card">
<button type="button" class="section-header" data-bs-toggle="collapse" data-bs-target="#secOperativo" aria-expanded="true" aria-controls="secOperativo">
<div class="section-left">
<div class="section-icon">🚀</div>
<div style="min-width:0;">
<p class="section-title">Operativo</p>
<p class="section-subtitle">Azioni principali di produzione e attività in scadenza</p>
</div>
</div>
<div class="chev">⌄</div>
</button>
<div id="secOperativo" class="collapse show" data-bs-parent="#prodAccordion">
<div class="section-body">
<div class="dashboard-grid">
<button class="dash-btn btn-programmazione" onclick="location.href='produzione_programmazione_drag.php'">
<div class="dash-icon">🗓️</div>
<div>Programmazione</div>
</button>
<button class="dash-btn btn-status" onclick="location.href='production_line_view2.php'">
<div class="dash-icon">⚙️</div>
<div>Line View</div>
</button>
<button class="dash-btn btn-statistiche" onclick="location.href='production_stats.php'">
<div class="dash-icon">📈</div>
<div>Statistiche</div>
</button>
<button class="dash-btn btn-manager" onclick="location.href='manager_produzione.php'">
<div class="dash-icon">👔</div>
<div>Manager</div>
</button>
<button class="dash-btn btn-manager-stats" onclick="location.href='manager_stats.php'">
<div class="dash-icon">📊</div>
<div>Manager Stats</div>
</button>
<button class="dash-btn btn-magazzino" onclick="location.href='warehouse_dashboard.php'">
<div class="dash-icon">📦</div>
<div>Magazzino</div>
</button>
<button class="dash-btn btn-scadenziario" onclick="location.href='scadenzario/index.php'">
<div class="dash-icon">⏰</div>
<div>Scadenziario</div>
</button>
</div>
</div>
</div>
</div>
<!-- ANAGRAFICHE -->
<div class="section-card">
<button type="button" class="section-header" data-bs-toggle="collapse" data-bs-target="#secAnagrafiche" aria-expanded="false" aria-controls="secAnagrafiche">
<div class="section-left">
<div class="section-icon">🗂️</div>
<div style="min-width:0;">
<p class="section-title">Anagrafiche</p>
<p class="section-subtitle">Dati di base e setup di produzione</p>
</div>
</div>
<div class="chev">⌄</div>
</button>
<div id="secAnagrafiche" class="collapse" data-bs-parent="#prodAccordion">
<div class="section-body">
<div class="dashboard-grid">
<button class="dash-btn btn-mescole" onclick="location.href='mescole.php'">
<div class="dash-icon">⚗️</div>
<div>Mescole</div>
</button>
<button class="dash-btn btn-matrici" onclick="location.href='matrici.php'">
<div class="dash-icon">🧩</div>
<div>Elenco Profili</div>
</button>
<button class="dash-btn btn-linee" onclick="location.href='linee.php'">
<div class="dash-icon">🏭</div>
<div>Linee Produzione</div>
</button>
<button class="dash-btn btn-setup" onclick="location.href='packaging_items.php'">
<div class="dash-icon">📦</div>
<div>Imballaggi</div>
</button>
<button class="dash-btn btn-setup" onclick="location.href='suppliers.php'">
<div class="dash-icon">🏷️</div>
<div>Suppliers</div>
</button>
<button class="dash-btn btn-setup" onclick="location.href='lookup_values.php'">
<div class="dash-icon">⚙️</div>
<div>Setup</div>
</button>
<button class="dash-btn btn-setup" onclick="location.href='worksheets.php'">
<div class="dash-icon">🗒️</div>
<div>Fogli di lavoro</div>
</button>
</div>
</div>
</div>
</div>
<!-- QUALITÀ / SERVIZI -->
<div class="section-card">
<button type="button" class="section-header" data-bs-toggle="collapse" data-bs-target="#secServizi" aria-expanded="false" aria-controls="secServizi">
<div class="section-left">
<div class="section-icon">🧰</div>
<div style="min-width:0;">
<p class="section-title">Servizi</p>
<p class="section-subtitle">Status, cause pausa, attrezzature</p>
</div>
</div>
<div class="chev">⌄</div>
</button>
<div id="secServizi" class="collapse" data-bs-parent="#prodAccordion">
<div class="section-body">
<div class="dashboard-grid">
<button class="dash-btn btn-setup" onclick="location.href='production_status.php'">
<div class="dash-icon">📋</div>
<div>Status</div>
</button>
<button class="dash-btn btn-problem" onclick="location.href='production_pause_reasons.php'">
<div class="dash-icon">🛑</div>
<div>Cause di Pausa</div>
</button>
<button class="dash-btn btn-tools" onclick="location.href='production_tools.php'">
<div class="dash-icon">🛠️</div>
<div>Attrezzature</div>
</button>
</div>
</div>
</div>
</div>
<!-- PERSONALE -->
<div class="section-card">
<button type="button" class="section-header" data-bs-toggle="collapse" data-bs-target="#secPersonale" aria-expanded="false" aria-controls="secPersonale">
<div class="section-left">
<div class="section-icon">👥</div>
<div style="min-width:0;">
<p class="section-title">Personale</p>
<p class="section-subtitle">Dipendenti, skill</p>
</div>
</div>
<div class="chev">⌄</div>
</button>
<div id="secPersonale" class="collapse" data-bs-parent="#prodAccordion">
<div class="section-body">
<div class="dashboard-grid">
<button class="dash-btn btn-employees" onclick="location.href='employees.php'">
<div class="dash-icon">👥</div>
<div>Employees</div>
</button>
<button class="dash-btn btn-setup" onclick="location.href='skills.php'">
<div class="dash-icon">🧠</div>
<div>Skills</div>
</button>
</div>
</div>
</div>
</div>
</div> <!-- /sections-wrap -->
</div>
</div>
<?php include('jsinclude.php'); ?>
<?php include('include/footer.php'); ?>
</div>
</body>
</html>