« Back to History
beam_load_with_finish.php
|
20260722_120325.php
Initial Domain Snapshot
Copy Code
<?php error_reporting(E_ALL); ini_set('display_errors', 1); /* ---------- AUTH / CONTEXT ---------- */ require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('beam_load'); require_once __DIR__ . '/helpers/machine_beam_status_helper.php'; require_once __DIR__ . '/helpers/activity_helper.php'; $company_id = (int)$ctx['company_id']; $user_id = (int)$ctx['user']['id']; $pdo = $ctx['pdo']; function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } /* ---------- MACHINES ---------- */ $st = $pdo->prepare(" SELECT id, code FROM machines WHERE company_id = ? AND is_active = 1 AND group_slug IN ('loom','rapier') ORDER BY code "); $st->execute([$company_id]); $machines = $st->fetchAll(PDO::FETCH_ASSOC); /* ---------- BEAMS (WITH QUALITY + SLOT) ---------- */ $st = $pdo->prepare(" SELECT bs.id, bs.beam_no, bs.beam_slot, q.id AS quality_id, q.name AS quality_name FROM company_beam_stock bs JOIN beam_qualities q ON q.id = bs.quality_id WHERE bs.company_id = ? AND bs.load_type = 'stock' "); $st->execute([$company_id]); $beams = $st->fetchAll(PDO::FETCH_ASSOC); /* ---------- EMPLOYEES (UNCHANGED) ---------- */ $st = $pdo->prepare(" SELECT id, name, designation_name FROM company_employee_master WHERE company_id = ? AND is_active = 1 AND designation_name IN ('Pissing','Pasaria') ORDER BY name "); $st->execute([$company_id]); $employees = $st->fetchAll(PDO::FETCH_ASSOC); $msg = $err = ''; /* ====================================================== SUBMIT ====================================================== */ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $beam_id = (int)($_POST['beam_id'] ?? 0); $beam_slot = $_POST['beam_slot'] ?? ''; $machine_id = (int)($_POST['machine_id'] ?? 0); $machine_type = $_POST['machine_type'] ?? ''; $load_type = $_POST['load_type'] ?? ''; $employee_id = (int)($_POST['employee_id'] ?? 0); $load_date = $_POST['load_date'] ?? date('Y-m-d'); /* 🔥 NEW: running action (default = finish) */ $running_action = $_POST['running_action'] ?? 'finish'; if (!in_array($running_action, ['finish','cut'], true)) { $running_action = 'finish'; } try { $pdo->beginTransaction(); /* ---- BEAM VALIDATION (UNCHANGED) ---- */ $st = $pdo->prepare(" SELECT bs.beam_no, bs.beam_slot, q.id AS quality_id FROM company_beam_stock bs JOIN beam_qualities q ON q.id = bs.quality_id WHERE bs.id = ? AND bs.company_id = ? AND bs.load_type = 'stock' "); $st->execute([$beam_id, $company_id]); $beam = $st->fetch(PDO::FETCH_ASSOC); if (!$beam) throw new Exception('Beam stock me nahi hai.'); if ($beam['beam_slot'] !== $beam_slot) throw new Exception('Beam slot mismatch.'); /* ---- MACHINE NO (UNCHANGED) ---- */ $st = $pdo->prepare(" SELECT code FROM machines WHERE id = ? AND company_id = ? "); $st->execute([$machine_id, $company_id]); $raw_code = trim((string)$st->fetchColumn()); if (!preg_match('/(\d+)$/', $raw_code, $m)) throw new Exception('Invalid machine.'); $machine_no = ltrim($m[1], '0'); if ($machine_no === '') $machine_no = '0'; /* ---- EMPLOYEE VALIDATION (UNCHANGED) ---- */ $st = $pdo->prepare(" SELECT designation_name FROM company_employee_master WHERE id = ? AND company_id = ? "); $st->execute([$employee_id, $company_id]); $emp = $st->fetch(PDO::FETCH_ASSOC); if (!$emp || strtolower($emp['designation_name']) !== $load_type) throw new Exception('Employee designation galat hai.'); /* ================================================== 🔒 NEW PRE-HOOK: CUT / FINISH OLD RUNNING BEAM ================================================== */ $st = $pdo->prepare(" SELECT beam_no FROM beam_load_data WHERE company_id = ? AND machine_no = ? AND beam_slot = ? AND event_type = 'loaded' ORDER BY load_date DESC LIMIT 1 "); $st->execute([$company_id, $machine_no, $beam_slot]); $old = $st->fetch(PDO::FETCH_ASSOC); if ($old) { /* log cut / finish */ $pdo->prepare(" INSERT INTO beam_load_data (company_id, beam_no, event_type, event_date, machine_no, machine_type, beam_slot, load_type, created_by) VALUES (?,?,?,?,?,?,?,?,?) ")->execute([ $company_id, $old['beam_no'], $running_action, $load_date, $machine_no, $machine_type, $beam_slot, 'auto', $user_id ]); /* lifecycle append */ $pdo->prepare(" INSERT INTO beam_life_cycle (company_id, beam_no, life_events) VALUES (?, ?, JSON_ARRAY()) ON DUPLICATE KEY UPDATE beam_no = beam_no ")->execute([$company_id, $old['beam_no']]); $pdo->prepare(" UPDATE beam_life_cycle SET life_events = JSON_ARRAY_APPEND( IFNULL(life_events, JSON_ARRAY()), '$', JSON_OBJECT( 'action', ?, 'machine_no', ?, 'slot', ?, 'date', ? ) ) WHERE company_id = ? AND beam_no = ? ")->execute([ $running_action, (string)$machine_no, $beam_slot, $load_date, $company_id, $old['beam_no'] ]); /* clear machine running beam (UNCHANGED helper) */ machine_clear_running_beam( $pdo, $company_id, $machine_no, $beam_slot ); } /* ================================================== ORIGINAL LOGIC STARTS (UNCHANGED) ================================================== */ /* ---------- SAVE LOAD EVENT ---------- */ $insMainLoad = $pdo->prepare(" INSERT INTO beam_load_data (company_id, beam_no, event_type, event_date, machine_no, machine_type, beam_slot, quality_id, load_type, employee_id, load_date, created_by) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) "); $insMainLoad->execute([ $company_id, $beam['beam_no'], 'loaded', $load_date, $machine_no, $machine_type, $beam_slot, $beam['quality_id'], $load_type, $employee_id, $load_date, $user_id ]); $beam_load_data_id = (int)$pdo->lastInsertId(); /* ---------- UPDATE STOCK STATUS ---------- */ $pdo->prepare(" UPDATE company_beam_stock SET load_type = ?, beam_load_date = ? WHERE company_id = ? AND beam_no = ? ")->execute([ $load_type, $load_date, $company_id, $beam['beam_no'] ]); /* ---------- ENSURE LIFECYCLE ROW ---------- */ $pdo->prepare(" INSERT INTO beam_life_cycle (company_id, beam_no, life_events) VALUES (?, ?, JSON_ARRAY()) ON DUPLICATE KEY UPDATE beam_no = beam_no ")->execute([ $company_id, $beam['beam_no'] ]); /* ---------- APPEND RUNNING EVENT ---------- */ $pdo->prepare(" UPDATE beam_life_cycle SET life_events = JSON_ARRAY_APPEND( IFNULL(life_events, JSON_ARRAY()), '$', JSON_OBJECT( 'machine_no', ?, 'slot', ?, 'load_date', ?, 'action', 'running', 'machine_id', ? ) ) WHERE company_id = ? AND beam_no = ? ")->execute([ (string)$machine_no, $beam_slot, $load_date, (string)$machine_no, $company_id, $beam['beam_no'] ]); machine_on_beam_load( $pdo, $company_id, $machine_no, $machine_type, $beam_slot, (int)$beam['beam_no'] ); $pdo->commit(); activity_create('beam', 'beam_load_create', $beam_load_data_id, 'Recorded beam load'); header('Location: beam_load.php?ok=1'); exit; } catch (Exception $e) { $pdo->rollBack(); $err = $e->getMessage(); } } /* ========================= AFTER REDIRECT (GET) ========================= */ if (isset($_GET['ok'])) { $msg = 'Beam load successfully saved.'; } /* ---------- VIEW START ---------- */ $page_title = 'Beam Load'; require_once __DIR__ . '/partials/header.php'; ?> <div class="wrap"> <h2>Beam Load</h2> <?php if ($msg): ?><div class="notice notice--success"><?=h($msg)?></div><?php endif; ?> <?php if ($err): ?><div class="notice notice--error"><?=h($err)?></div><?php endif; ?> <form method="post" class="form-grid form-cols-4"> <!-- 🔥 NEW dropdown (default finish) --> <div> <label>Running Beam Action</label> <select name="running_action"> <option value="finish" selected>Finish (Default)</option> <option value="cut">Cut</option> </select> </div> <!-- ORIGINAL FORM (UNCHANGED BELOW) --> <div> <label>Beam No</label> <select name="beam_id" id="beam_id" required></select> </div> <div> <label>Beam Slot</label> <select name="beam_slot" id="beam_slot" required></select> </div> <div> <label>Quality</label> <input id="quality_name" readonly> </div> <div> <label>Machine Type</label> <select name="machine_type" required> <option value="loom">Loom</option> <option value="rapier">Rapier</option> </select> </div> <div> <label>Machine</label> <select name="machine_id" required> <?php foreach($machines as $m): ?> <option value="<?=$m['id']?>"><?=h($m['code'])?></option> <?php endforeach; ?> </select> </div> <div> <label>Load Type</label> <select name="load_type" id="load_type" required> <option value="pissing">Pissing</option> <option value="pasaria">Pasaria</option> </select> </div> <div> <label>Employee</label> <select name="employee_id" id="employee_id" required></select> </div> <div> <label>Load Date</label> <input type="date" name="load_date" value="<?=date('Y-m-d')?>"> </div> <div class="form-group--full"> <button class="btn btn--primary">Save</button> </div> </form> </div> <script> const BEAMS = <?=json_encode($beams)?>; const EMP = <?=json_encode($employees)?>; const bSel = document.getElementById('beam_id'); const sSel = document.getElementById('beam_slot'); const qInp = document.getElementById('quality_name'); const lSel = document.getElementById('load_type'); const eSel = document.getElementById('employee_id'); /* populate beams */ bSel.innerHTML = '<option value="">Select</option>'; BEAMS.forEach(b=>{ const o=document.createElement('option'); o.value=b.id; o.textContent=b.beam_no; o.dataset.slot=b.beam_slot; o.dataset.qname=b.quality_name; bSel.appendChild(o); }); /* auto-fill on beam select */ bSel.onchange = ()=>{ const o=bSel.selectedOptions[0]; if(!o) return; sSel.innerHTML=''; ['primary','secondary'].forEach(sl=>{ const opt=document.createElement('option'); opt.value=sl; opt.textContent=sl; if(sl===o.dataset.slot) opt.selected=true; sSel.appendChild(opt); }); qInp.value=o.dataset.qname||''; }; /* employees (UNCHANGED) */ function refreshEmp(){ eSel.innerHTML='<option value="">Select</option>'; let last=null,c=0; const curType=(lSel.value||'').toLowerCase(); if(!curType) return; EMP.forEach(e=>{ if((e.designation_name||'').toLowerCase()===curType){ const o=document.createElement('option'); o.value=e.id; o.textContent=e.name; eSel.appendChild(o); c++; last=o; } }); if(c===1 && last) last.selected=true; } /* ensure default load_type */ if(!lSel.value){ lSel.value='pissing'; } lSel.addEventListener('change',refreshEmp); refreshEmp(); </script> <?php require_once __DIR__ . '/partials/footer.php'; ?>