« Back to History
gray_receive_edit.php
|
20260721_154032.php
Initial Bulk Import
Copy Code
<?php ob_start(); require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('gray_receive_entry'); $pdo = $ctx['pdo']; $company_id = (int)$ctx['company_id']; // ===== GET GRAY ID (Shifted from id to gray_id) ===== $gray_id = isset($_GET['gray_id']) ? (int)$_GET['gray_id'] : 0; if ($gray_id <= 0) { die("Invalid Gray ID"); } // ===== FETCH EXISTING RECORD ===== $stmt = $pdo->prepare(" SELECT * FROM gray_receive WHERE gray_id = :gray_id AND company_id = :cid "); $stmt->execute([':gray_id' => $gray_id, ':cid' => $company_id]); $data = $stmt->fetch(PDO::FETCH_ASSOC); if (!$data) { die("Entry not found for Gray ID: " . $gray_id); } // ===== FORMAT DATE FOR DISPLAY ===== $rec_date_display = date('d-m-Y', strtotime($data['rec_date'])); // ===== POST HANDLING ===== if ($_SERVER['REQUEST_METHOD'] === 'POST') { $raw_date = $_POST['rec_date'] ?? ''; $d = DateTime::createFromFormat('d-m-Y', $raw_date); if (!$d) die("Invalid date format. Use dd-mm-yyyy"); $rec_date = $d->format('Y-m-d'); $grey_mts = (float)$_POST['grey_mts']; $finish_mts = (float)$_POST['finish_mts']; $shortage = $grey_mts - $finish_mts; // Auto calculation try { $pdo->beginTransaction(); // ===== DUPLICATE CHECK (Exclude current Gray ID) ===== $chk = $pdo->prepare(" SELECT gray_id FROM gray_receive WHERE company_id = :cid AND mill_id = :mill_id AND gpno = :gpno AND rec_date = :date AND quality_id = :quality_id AND gray_id != :gray_id LIMIT 1 "); $chk->execute([ ':cid' => $company_id, ':mill_id' => $_POST['mill_id'], ':gpno' => $_POST['gpno'], ':date' => $rec_date, ':quality_id' => $_POST['quality_id'], ':gray_id' => $gray_id ]); if ($chk->fetch()) { $pdo->rollBack(); echo "<script>alert('Duplicate entry found with same GP No and Quality'); window.history.back();</script>"; exit(); } // ===== UPDATE MAIN TABLE ===== $upd = $pdo->prepare(" UPDATE gray_receive SET mill_id = :mill_id, gpno = :gpno, rec_date = :date, quality_id = :quality_id, grey_mts = :grey, taka = :taka, finish_mts = :finish, shortage = :short, remark = :remark WHERE gray_id = :gray_id AND company_id = :cid "); $upd->execute([ ':mill_id' => $_POST['mill_id'], ':gpno' => $_POST['gpno'], ':date' => $rec_date, ':quality_id' => $_POST['quality_id'], ':grey' => $grey_mts, ':taka' => (int)$_POST['taka'], ':finish' => $finish_mts, ':short' => $shortage, ':remark' => $_POST['remark'] ?? '', ':gray_id' => $gray_id, ':cid' => $company_id ]); $pdo->commit(); header("Location: gray_receive_entry.php?success=edit&gray_id=" . $gray_id); exit(); } catch (PDOException $e) { if ($pdo->inTransaction()) $pdo->rollBack(); die("DB Error: " . $e->getMessage()); } } require_once __DIR__ . '/partials/header.php'; // Fetch Masters $mills = $pdo->prepare("SELECT id, mill_name FROM mill_master WHERE company_id = :cid AND is_active = 1 ORDER BY mill_name"); $mills->execute([':cid'=>$company_id]); $mills = $mills->fetchAll(PDO::FETCH_ASSOC); $qualities = $pdo->prepare("SELECT id, quality_name FROM fabric_quality_master WHERE company_id = :cid AND is_active = 1 ORDER BY quality_name"); $qualities->execute([':cid'=>$company_id]); $qualities = $qualities->fetchAll(PDO::FETCH_ASSOC); ?> <div class="container-fluid mt-3 px-4"> <div class="card p-4 shadow-sm border-0"> <div class="d-flex justify-content-between align-items-center mb-4"> <h5 class="text-primary fw-bold mb-0">Edit Gray Receive Entry (Gray ID: #<?= $gray_id ?>)</h5> <span class="badge bg-info text-dark">Status: Received</span> </div> <form method="POST" autocomplete="off"> <div class="row g-3"> <div class="col-md-4"> <label class="form-label fw-bold">Mill Name</label> <select name="mill_id" class="form-select" required> <?php foreach($mills as $m): ?> <option value="<?= $m['id'] ?>" <?= $m['id']==$data['mill_id']?'selected':'' ?>> <?= htmlspecialchars($m['mill_name']) ?> </option> <?php endforeach; ?> </select> </div> <div class="col-md-2"> <label class="form-label fw-bold">GP No</label> <input type="text" name="gpno" class="form-control" value="<?= htmlspecialchars($data['gpno']) ?>" required> </div> <div class="col-md-3"> <label class="form-label fw-bold">Date</label> <input type="text" name="rec_date" class="form-control" value="<?= $rec_date_display ?>" placeholder="dd-mm-yyyy" required> <small class="text-muted">Format: DD-MM-YYYY</small> </div> <div class="col-md-3"> <label class="form-label fw-bold">Quality</label> <select name="quality_id" class="form-select" required> <?php foreach($qualities as $q): ?> <option value="<?= $q['id'] ?>" <?= $q['id']==$data['quality_id']?'selected':'' ?>> <?= htmlspecialchars($q['quality_name']) ?> </option> <?php endforeach; ?> </select> </div> <div class="col-md-2"> <label class="form-label fw-bold">Grey MTS</label> <input type="number" step="0.01" name="grey_mts" id="grey_mts" value="<?= $data['grey_mts'] ?>" class="form-control border-primary" required> </div> <div class="col-md-2"> <label class="form-label fw-bold">Taka</label> <input type="number" name="taka" value="<?= $data['taka'] ?>" class="form-control" required> </div> <div class="col-md-2"> <label class="form-label fw-bold text-success">Finish MTS</label> <input type="number" step="0.01" name="finish_mts" id="finish_mts" value="<?= $data['finish_mts'] ?>" class="form-control border-success" required> </div> <div class="col-md-2"> <label class="form-label fw-bold text-danger">Shortage (Auto)</label> <input type="text" id="shortage_val" class="form-control bg-light" value="<?= $data['shortage'] ?>" readonly> </div> <div class="col-md-4"> <label class="form-label fw-bold">Remark</label> <input type="text" name="remark" value="<?= htmlspecialchars($data['remark']) ?>" class="form-control" placeholder="Any notes..."> </div> <div class="col-md-12 mt-4 border-top pt-3"> <button type="submit" class="btn btn-primary px-5">Save Changes</button> <a href="gray_receive_entry.php" class="btn btn-outline-secondary px-4 ms-2">Discard</a> </div> </div> </form> </div> </div> <script> // Real-time shortage calculation document.addEventListener('input', function (e) { if (e.target.id === 'grey_mts' || e.target.id === 'finish_mts') { const grey = parseFloat(document.getElementById('grey_mts').value) || 0; const finish = parseFloat(document.getElementById('finish_mts').value) || 0; document.getElementById('shortage_val').value = (grey - finish).toFixed(2); } }); </script> <?php require_once __DIR__ . '/partials/footer.php'; ob_end_flush(); ?>