diff --git a/public/userarea/worksheets.php b/public/userarea/worksheets.php index 6e73a62b..85c1ee7f 100644 --- a/public/userarea/worksheets.php +++ b/public/userarea/worksheets.php @@ -261,6 +261,81 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj exit; } + if ($action === 'deactivate') { + $id = (int)($_POST['id'] ?? 0); + if ($id <= 0) { + echo json_encode(['success' => false, 'message' => 'ID non valido']); + exit; + } + + $stmt = $pdo->prepare(" + UPDATE work_sheets + SET worksheet_status = 'inactive' + WHERE id = ? + AND COALESCE(NULLIF(worksheet_status, ''), 'active') = 'active' + "); + $stmt->execute([$id]); + + if ($stmt->rowCount() === 0) { + echo json_encode(['success' => false, 'message' => 'Foglio non trovato o già inattivo']); + exit; + } + + echo json_encode(['success' => true, 'message' => 'Foglio disattivato']); + exit; + } + + if ($action === 'reactivate') { + $id = (int)($_POST['id'] ?? 0); + if ($id <= 0) { + echo json_encode(['success' => false, 'message' => 'ID non valido']); + exit; + } + + $stmt = $pdo->prepare("SELECT id, worksheet_number, worksheet_status FROM work_sheets WHERE id = ? LIMIT 1"); + $stmt->execute([$id]); + $ws = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$ws) { + echo json_encode(['success' => false, 'message' => 'Foglio non trovato']); + exit; + } + + if (($ws['worksheet_status'] ?: 'active') === 'active') { + echo json_encode(['success' => false, 'message' => 'Il foglio è già attivo']); + exit; + } + + // Non riattivare se esiste già un'altra revisione attiva dello stesso FL + $wsNumber = (int)$ws['worksheet_number']; + if ($wsNumber > 0) { + $stmtChk = $pdo->prepare(" + SELECT COALESCE(NULLIF(revision_code, ''), '0') + FROM work_sheets + WHERE worksheet_number = ? + AND id <> ? + AND COALESCE(NULLIF(worksheet_status, ''), 'active') = 'active' + LIMIT 1 + "); + $stmtChk->execute([$wsNumber, $id]); + $activeRev = $stmtChk->fetchColumn(); + + if ($activeRev !== false) { + echo json_encode([ + 'success' => false, + 'message' => 'Esiste già una revisione attiva di FL' . $wsNumber . ' (rev. ' . $activeRev . '). Disattivala prima di riattivare questa.' + ]); + exit; + } + } + + $stmt = $pdo->prepare("UPDATE work_sheets SET worksheet_status = 'active' WHERE id = ?"); + $stmt->execute([$id]); + + echo json_encode(['success' => true, 'message' => 'Foglio riattivato']); + exit; + } + echo json_encode(['success' => false, 'message' => 'Azione sconosciuta']); exit; } catch (Exception $e) { @@ -287,11 +362,26 @@ $worksheets = $pdo->query(" ws.updated_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 + ) AS mixes_count, + ( + SELECT COUNT(*) + FROM work_sheets ws2 + WHERE ws.worksheet_number > 0 + AND ws2.worksheet_number = ws.worksheet_number + AND ws2.id > ws.id + ) AS newer_count, + ( + SELECT COUNT(*) + FROM work_sheets ws3 + WHERE ws.worksheet_number > 0 + AND ws3.worksheet_number = ws.worksheet_number + AND ws3.id <> ws.id + AND COALESCE(NULLIF(ws3.worksheet_status, ''), 'active') = 'active' + ) AS active_siblings FROM work_sheets ws LEFT JOIN matrice m ON ws.idmatrice = m.id ORDER BY ws.worksheet_number DESC, ws.id DESC @@ -407,6 +497,19 @@ $worksheets = $pdo->query(" font-size: 0.85rem; } + .badge-status-revised { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 90px; + padding: 6px 10px; + border-radius: 999px; + background: #e5e7eb; + color: #374151; + font-weight: 700; + font-size: 0.85rem; + } + .row-inactive { opacity: 0.78; background: #fcfcfd !important; @@ -497,6 +600,9 @@ $worksheets = $pdo->query(" $isActive = ($status === 'active'); $revisionLabel = getRevisionLabel($ws['revision_code'] ?? ''); $worksheetLabel = getWorksheetLabel($ws['worksheet_number'] ?? 0); + $wasRevised = !$isActive && (int)($ws['newer_count'] ?? 0) > 0; + $canReactivate = !$isActive && (int)($ws['active_siblings'] ?? 0) === 0; + $wsFullName = ($ws['matrice_nome'] ?? 'Foglio') . ' ' . $worksheetLabel . ' rev. ' . $revisionLabel; ?>