« Back to History
beam_load.php
|
20260723_000646.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/beam_auto_finish_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, group_slug 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 ---------- */ $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); /* ---------- SUBMIT ---------- */ $msg = $err = ''; 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'); try { $pdo->beginTransaction(); /* ---- BEAM VALIDATION ---- */ $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 ---- */ $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 ---- */ $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.'); /* ---------- SAVE LOAD EVENT ---------- */ $insLoad = $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 (?,?,?,?,?,?,?,?,?,?,?,?) "); $insLoad->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, // 🔥 pissing / pasaria $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'); /* ---------- PRG redirect ---------- */ 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"> <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 */ function refreshEmp(){ eSel.innerHTML = '<option value="">Select</option>'; let count = 0; let lastOption = null; const curType = (lSel.value || '').toLowerCase(); if (!curType) return; // safety 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); count++; lastOption = o; } }); // ✅ sirf 1 employee → auto select if (count === 1 && lastOption) { lastOption.selected = true; } } /* ensure default load_type is set */ if (!lSel.value) { lSel.value = 'pissing'; // 🔥 default } /* bind + initial populate */ lSel.addEventListener('change', refreshEmp); refreshEmp(); </script> <?php require_once __DIR__ . '/partials/footer.php'; ?>