« Back to History
beam_life_cycle_edit.php
|
20260722_120325.php
Initial Domain Snapshot
Copy Code
<?php error_reporting(E_ALL); ini_set('display_errors', 1); require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('beam_life_cycle_edit'); $pdo = $ctx['pdo']; $company_id = (int)$ctx['company_id']; require_once __DIR__ . '/helpers/beam_life_helpers.php'; require_once __DIR__ . '/helpers/activity_helper.php'; function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } $beam_no = $_GET['beam_no'] ?? ''; if ($beam_no === '') die('Invalid Beam No'); /* ===== FETCH BEAM SLOT ===== */ $slotStmt = $pdo->prepare(" SELECT beam_slot FROM company_beam_stock WHERE company_id=? AND beam_no=? LIMIT 1 "); $slotStmt->execute([$company_id, $beam_no]); $beam_slot = $slotStmt->fetchColumn() ?: 'primary'; // Fetch current status (load_type) for this beam $statusStmt = $pdo->prepare("SELECT load_type FROM company_beam_stock WHERE company_id=? AND beam_no=? LIMIT 1"); $statusStmt->execute([$company_id, $beam_no]); $beam_status = $statusStmt->fetchColumn() ?: 'Unknown'; /* If lifecycle already has events, trust that slot */ if (!empty($events) && isset($events[0]['slot'])) { $beam_slot = $events[0]['slot']; } /* ================= LOAD DATA ================= */ $stmt = $pdo->prepare("SELECT life_events FROM beam_life_cycle WHERE company_id=? AND beam_no=?"); $stmt->execute([$company_id, $beam_no]); $eventsJson = $stmt->fetchColumn(); $events = json_decode($eventsJson ?: '[]', true); if (!is_array($events)) $events = []; /* ================= SAVE DATA ================= */ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $pdo->beginTransaction(); try { $new_events = []; if (!empty($_POST['events']) && is_array($_POST['events'])) { foreach ($_POST['events'] as $e) { if (!empty($e['_delete'])) continue; if (empty($e['action'])) continue; // For 'cut' action, allow empty machine_no if ($e['action'] !== 'cut' && empty($e['machine_no'])) continue; $row = [ 'machine_no' => (string)($e['machine_no'] ?? ''), 'machine_id' => (string)($e['machine_no'] ?? ''), // Per your logic 'slot' => $e['slot'] ?? 'primary', 'load_date' => $e['load_date'] ?? null, 'action' => $e['action'], ]; if ($e['action'] === 'cut' && !empty($e['cut_date'])) { $row['cut_date'] = $e['cut_date']; } if ($e['action'] === 'finish' && !empty($e['finish_date'])) { $row['finish_date'] = $e['finish_date']; } $new_events[] = $row; } } // 1. Update Master Table $upd = $pdo->prepare("UPDATE beam_life_cycle SET life_events=? WHERE company_id=? AND beam_no=?"); $upd->execute([json_encode($new_events, JSON_UNESCAPED_SLASHES), $company_id, $beam_no]); // 2. Rebuild Derived Tables (Helper Function) rebuild_machine_beam_status($pdo, $company_id, $beam_no, $new_events); $pdo->commit(); activity_update('beam', 'beam_life_cycle_edit_update', is_numeric($beam_no) ? (int)$beam_no : 0, 'Updated beam life cycle'); header("Location: beam_life_cycle_edit.php?beam_no={$beam_no}&ok=1"); exit; } catch (Throwable $e) { $pdo->rollBack(); die("System Error: " . $e->getMessage()); } } require_once __DIR__ . '/partials/header.php'; ?> <div class="container-fluid py-4"> <div class="row justify-content-center"> <div class="col-lg-10"> <div class="d-flex justify-content-between align-items-center mb-4"> <div> <h3 class="fw-bold text-primary mb-1">Beam Lifecycle</h3> <span class="badge bg-dark fs-6">Beam No: <?= h($beam_no) ?></span> <span class="badge bg-info text-dark fs-6 ms-2">Status: <?= h(strtoupper($beam_status)) ?></span> </div> <div class="d-flex gap-2"> <button type="button" class="btn btn-success shadow-sm fw-bold" id="addEventBtn"> <i class="bi bi-plus-circle me-1"></i> Add Event </button> <a href="beam_life.php" class="btn btn-outline-secondary shadow-sm"> <i class="bi bi-arrow-left me-1"></i> Back </a> </div> </div> <?php if (isset($_GET['ok'])): ?> <div class="alert alert-success alert-dismissible fade show shadow-sm" role="alert"> <i class="bi bi-check-circle-fill me-2"></i> Lifecycle updated successfully! <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <form method="post" id="lifecycleForm"> <div id="eventsContainer"> <?php foreach ($events as $i => $e): ?> <div class="card border-0 shadow-sm mb-3 event-card"> <div class="card-body p-3"> <div class="row g-2 align-items-end"> <div class="col-md-2"> <label class="form-label small fw-bold text-muted">MACHINE</label> <input type="text" name="events[<?= $i ?>][machine_no]" class="form-control" value="<?= h($e['machine_no']) ?>" required> </div> <div class="col-md-1"> <label class="form-label small fw-bold text-muted">SLOT</label> <input type="text" class="form-control bg-light" value="<?= h($e['slot']) ?>" disabled> <input type="hidden" name="events[<?= $i ?>][slot]" value="<?= h($e['slot']) ?>"> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-muted">LOAD DATE</label> <input type="date" name="events[<?= $i ?>][load_date]" class="form-control" value="<?= h($e['load_date'] ?? '') ?>"> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-muted">ACTION</label> <select name="events[<?= $i ?>][action]" class="form-select border-primary-subtle"> <option value="running" <?= ($e['action'] == 'running' ? 'selected' : '') ?>>Running</option> <option value="cut" <?= ($e['action'] == 'cut' ? 'selected' : '') ?>>Cut</option> <option value="finish" <?= ($e['action'] == 'finish' ? 'selected' : '') ?>>Finish</option> </select> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-muted">CUT DATE</label> <input type="date" name="events[<?= $i ?>][cut_date]" class="form-control" value="<?= h($e['cut_date'] ?? '') ?>"> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-muted">FINISH DATE</label> <input type="date" name="events[<?= $i ?>][finish_date]" class="form-control" value="<?= h($e['finish_date'] ?? '') ?>"> </div> <div class="col-md-1 text-center"> <div class="form-check d-inline-block mt-2"> <input class="form-check-input border-danger" type="checkbox" name="events[<?= $i ?>][_delete]" id="del_<?= $i ?>"> <label class="form-check-label text-danger small fw-bold" for="del_<?= $i ?>">Del</label> </div> </div> </div> </div> </div> <?php endforeach; ?> </div> <div class="text-center mt-5 mb-5 border-top pt-4"> <button type="submit" class="btn btn-primary btn-lg px-5 shadow fw-bold"> <i class="bi bi-save me-2"></i> Save Changes </button> </div> </form> </div> </div> </div> <div id="eventTemplate" style="display:none"> <div class="card border-0 shadow-sm mb-3 border-start border-success border-4 animate__animated animate__fadeIn"> <div class="card-body p-3"> <div class="row g-2 align-items-end"> <div class="col-md-2"> <label class="form-label small fw-bold text-muted text-uppercase">Machine</label> <input type="text" name="__IDX__[machine_no]" class="form-control border-success"> </div> <div class="col-md-1"> <label class="form-label small fw-bold text-muted text-uppercase">Slot</label> <input type="text" class="form-control bg-light" value="<?= h($beam_slot) ?>" disabled> <input type="hidden" name="__IDX__[slot]" value="<?= h($beam_slot) ?>"> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-muted text-uppercase">Load Date</label> <input type="date" name="__IDX__[load_date]" class="form-control" value="<?= date('Y-m-d') ?>"> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-muted text-uppercase">Action</label> <select name="__IDX__[action]" class="form-select border-success"> <option value="running">Running</option> <option value="cut">Cut</option> <option value="finish">Finish</option> </select> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-muted text-uppercase">Cut Date</label> <input type="date" name="__IDX__[cut_date]" class="form-control"> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-muted text-uppercase">Finish Date</label> <input type="date" name="__IDX__[finish_date]" class="form-control"> </div> <div class="col-md-1 text-center"> <span class="badge bg-success small py-2">NEW</span> </div> </div> </div> </div> </div> <script> (function(){ let idx = <?= count($events) ?>; const container = document.getElementById('eventsContainer'); const template = document.getElementById('eventTemplate'); document.getElementById('addEventBtn').onclick = function(){ const html = template.innerHTML.replace(/__IDX__/g, 'events[' + idx + ']'); const wrap = document.createElement('div'); wrap.innerHTML = html; container.appendChild(wrap.firstElementChild); idx++; // Quick visual focus to new card window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); }; })(); </script> <?php require_once __DIR__ . '/partials/footer.php'; ?>