getConnection(); // Stato Qualità di destinazione dopo la compilazione $statusQualita = (int)$pdo->query("SELECT id FROM production_status WHERE id = 3 LIMIT 1")->fetchColumn(); if (!$statusQualita) { die("Errore: stato Controllo qualità (3) non trovato in production_status"); } // --- SALVATAGGIO DATI DI PRODUZIONE (da stato 11 → Qualità 3) --- if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['save_compile'])) { header('Content-Type: application/json; charset=utf-8'); $id = (int)($_POST['id'] ?? 0); $kgprod = (float)($_POST['kgprod'] ?? 0); $mtprod = (float)($_POST['mtprod'] ?? 0); $scarto = (float)($_POST['scarto'] ?? 0); $note = trim($_POST['note'] ?? ''); try { if ($id <= 0) { echo json_encode(['success' => false, 'msg' => 'ID non valido.']); exit; } if ($kgprod <= 0 && $mtprod <= 0) { echo json_encode(['success' => false, 'msg' => 'Inserisci almeno uno tra Kg o Metri prodotti.']); exit; } // Verifico che la riga sia davvero in stato 11 (da compilare) $stmtChk = $pdo->prepare("SELECT id_status FROM productiondata WHERE id = :id LIMIT 1"); $stmtChk->execute(['id' => $id]); $cur = $stmtChk->fetchColumn(); if ($cur === false) { echo json_encode(['success' => false, 'msg' => 'Produzione non trovata.']); exit; } if ((int)$cur !== 11) { echo json_encode(['success' => false, 'msg' => 'Questa produzione non è più in stato "Da compilare".']); exit; } // Calcolo scarto % $totaleKg = $kgprod + $scarto; $scartoPerc = $totaleKg > 0 ? round(($scarto / $totaleKg) * 100, 2) : 0.00; // Update: riempio i dati e passo a Qualità (3) $sql = "UPDATE productiondata SET kgprod = :kgprod, mtprod = :mtprod, scarto = :scarto, scarto_perc = :scarto_perc, note_operatore = :note, id_status = :status WHERE id = :id AND id_status = 11"; $stmt = $pdo->prepare($sql); $stmt->execute([ 'kgprod' => $kgprod, 'mtprod' => $mtprod, 'scarto' => $scarto, 'scarto_perc' => $scartoPerc, 'note' => $note ?: null, 'status' => $statusQualita, 'id' => $id ]); echo json_encode(['success' => true]); } catch (Exception $e) { echo json_encode(['success' => false, 'msg' => $e->getMessage()]); } exit; } // --- AJAX: lista produzioni in stato 11 --- if (!empty($_GET['ajax'])) { $sql = "SELECT p.*, m.nome AS matrice, l.name AS linea, c.nome AS cliente, ( SELECT GROUP_CONCAT(mes.nome ORDER BY mes.nome SEPARATOR ' | ') FROM productiondata_mescole pm JOIN mescole mes ON mes.id = pm.id_mescola WHERE pm.id_productiondata = p.id ) AS mescole_list FROM productiondata p LEFT JOIN matrice m ON p.idmatrice = m.id LEFT JOIN production_lines l ON p.id_linea = l.id LEFT JOIN clients c ON p.id_cliente = c.id WHERE p.id_status = 11 ORDER BY p.end_time ASC, p.id ASC"; $records = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC); if (empty($records)) { echo '

Nessuna produzione da compilare.
'; exit; } // Helper: secondi -> HH:MM:SS $fmt = function ($sec) { $sec = (int)$sec; $h = floor($sec / 3600); $m = floor(($sec % 3600) / 60); $s = $sec % 60; return sprintf('%02d:%02d:%02d', $h, $m, $s); }; foreach ($records as $r) { $occupato = $fmt($r['tempo_totale_produzione'] ?? 0); $pause = $fmt($r['seconds_pause'] ?? 0); $netto = $fmt($r['seconds_produzione'] ?? 0); $endTime = $r['end_time'] ? date('d/m/Y H:i', strtotime($r['end_time'])) : '—'; $teoKg = number_format((float)($r['kg_sp'] ?? 0), 2, '.', ''); $teoMt = number_format((float)($r['metri'] ?? 0), 2, '.', ''); echo '
'; echo '
'; echo '
' . htmlspecialchars($r['matrice'] ?? '—') . '
'; echo '
Da compilare
'; echo '
'; echo '
'; echo '
Linea' . htmlspecialchars($r['linea'] ?? '—') . '
'; echo '
Cliente' . htmlspecialchars($r['cliente'] ?? '—') . '
'; echo '
Fine produzione' . $endTime . '
'; echo '
Tempo occupato' . $occupato . '
'; echo '
Tempo pause' . $pause . '
'; echo '
Tempo netto' . $netto . '
'; echo '
'; if (!empty($r['mescole_list'])) { echo '
Mescole: ' . htmlspecialchars($r['mescole_list']) . '
'; } if (!empty($r['note_extra'])) { echo '
Descrizione: ' . htmlspecialchars($r['note_extra']) . '
'; } echo '
'; echo ''; echo '
'; echo '
'; // .compile-card } exit; } ?> Dati da compilare - Produzione
Dati di produzione da compilare