« Back to History
parcel_send_entry_bulk.php
|
20260721_154033.php
Initial Bulk Import
Copy Code
<?php require_once __DIR__ . '/helpers/activity_helper.php'; // After successful bulk send entry, add: // activity_create('parcel', 'parcel_send_entry_bulk', 0, 'Parcel send entry (bulk)'); /* ====================================================================== FILE: /erp/parcel_send_entry_bulk.php PURPOSE: Parcel Send Entry (Bulk Bill Range) with Professional UI ====================================================================== */ error_reporting(E_ALL); ini_set('display_errors', 1); /* ---------- 1. AUTH + DB ---------- */ require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('parcel_send_entry_add'); $pdo = $ctx['pdo']; $COMPANY_ID = (int)$ctx['company_id']; $USER_ID = (int)$ctx['user']['id']; function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } $msg = $err = ''; /* ---------- 2. SAVE LOGIC ---------- */ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $bill_from = trim($_POST['bill_from'] ?? ''); $bill_to = trim($_POST['bill_to'] ?? ''); $vehicle_no = trim($_POST['vehicle_no'] ?? ''); $send_date = $_POST['send_date'] ?? ''; $remark = trim($_POST['remark'] ?? ''); if ($bill_from === '' || $bill_to === '' || $vehicle_no === '' || $send_date === '') { $err = 'All required fields must be filled.'; } elseif ($bill_from > $bill_to) { $err = 'Bill From must be less than or equal to Bill To.'; } else { try { $pdo->beginTransaction(); // A. Fetch valid bills in range $st = $pdo->prepare(" SELECT bill_no FROM parcel_stock_in WHERE company_id = ? AND status = 'in' AND bill_no BETWEEN ? AND ? ORDER BY bill_no "); $st->execute([$COMPANY_ID, $bill_from, $bill_to]); $bill_rows = $st->fetchAll(PDO::FETCH_COLUMN); if (!$bill_rows) { throw new Exception('No valid "IN" bills found in this range.'); } // B. Prepare Statements // Delete-then-Insert: Taaki agar range mein koi bill pehle se half-processed ho toh refresh ho jaye $del = $pdo->prepare("DELETE FROM parcel_send_entry WHERE company_id = ? AND bill_no = ?"); $ins = $pdo->prepare(" INSERT INTO parcel_send_entry (company_id, bill_no, vehicle_no, send_date, remark, created_at, created_by) VALUES (?, ?, ?, ?, ?, NOW(), ?) "); $upd = $pdo->prepare(" UPDATE parcel_stock_in SET status = 'out' WHERE company_id = ? AND bill_no = ? AND status = 'in' "); foreach ($bill_rows as $bn) { $del->execute([$COMPANY_ID, $bn]); // Clear old if any $ins->execute([$COMPANY_ID, $bn, $vehicle_no, $send_date, ($remark ?: null), $USER_ID]); $upd->execute([$COMPANY_ID, $bn]); } $pdo->commit(); activity_create('parcel', 'parcel_send_entry_bulk', 0, "Bills: $bill_from-$bill_to, Vehicle: $vehicle_no, Send Date: $send_date, Remark: $remark"); $msg = count($bill_rows) . " parcels sent successfully via Vehicle: " . h($vehicle_no); } catch (Exception $e) { if ($pdo->inTransaction()) $pdo->rollBack(); $err = $e->getMessage(); } } } /* ---------- 3. FETCH DROPDOWNS ---------- */ $bills = $pdo->prepare("SELECT bill_no FROM parcel_stock_in WHERE company_id = ? AND status = 'in' ORDER BY bill_no"); $bills->execute([$COMPANY_ID]); $bill_list = $bills->fetchAll(PDO::FETCH_COLUMN); $vehicles = $pdo->prepare("SELECT vehicle_no FROM vehicle_data WHERE company_id = ? AND is_active = 1 ORDER BY vehicle_no"); $vehicles->execute([$COMPANY_ID]); $vehicle_list = $vehicles->fetchAll(PDO::FETCH_COLUMN); require_once __DIR__ . '/partials/header.php'; ?> <div class="wrap"> <div class="d-flex justify-content-between align-items-center mb-4"> <h2 class="fw-bold"><i class="bi bi-stack text-primary me-2"></i> Bulk Parcel Send</h2> <a href="parcel_send_entry_add.php" class="btn btn-outline-secondary btn-sm"> <i class="bi bi-plus-circle"></i> Single Entry </a> </div> <?php if ($msg): ?> <div class="alert alert-success shadow-sm border-start border-4 border-success"><?= $msg ?></div> <?php endif; ?> <?php if ($err): ?> <div class="alert alert-danger shadow-sm border-start border-4 border-danger"><?= h($err) ?></div> <?php endif; ?> <div class="card shadow-sm border-0"> <div class="card-body p-4"> <form method="post" class="row g-4" autocomplete="off"> <div class="col-md-3"> <label class="form-label fw-bold small text-muted text-uppercase">Bill From</label> <select name="bill_from" class="form-select select2-init" required> <option value="">Select...</option> <?php foreach ($bill_list as $b): ?> <option value="<?=h($b)?>"><?=h($b)?></option> <?php endforeach; ?> </select> </div> <div class="col-md-3"> <label class="form-label fw-bold small text-muted text-uppercase">Bill To</label> <select name="bill_to" class="form-select select2-init" required> <option value="">Select...</option> <?php foreach ($bill_list as $b): ?> <option value="<?=h($b)?>"><?=h($b)?></option> <?php endforeach; ?> </select> </div> <div class="col-md-3"> <label class="form-label fw-bold small text-muted text-uppercase">Vehicle No</label> <select name="vehicle_no" class="form-select" required> <option value="">Select...</option> <?php foreach ($vehicle_list as $v): ?> <option value="<?=h($v)?>"><?=h($v)?></option> <?php endforeach; ?> </select> </div> <div class="col-md-3"> <label class="form-label fw-bold small text-muted text-uppercase">Send Date</label> <input type="date" name="send_date" class="form-control" value="<?=date('Y-m-d')?>" required> </div> <div class="col-12"> <label class="form-label fw-bold small text-muted text-uppercase">Remark</label> <input type="text" name="remark" class="form-control" placeholder="Bulk update notes..."> </div> <div class="col-12 text-end"> <hr class="my-4 opacity-25"> <button type="submit" class="btn btn-primary px-5 fw-bold shadow-sm"> <i class="bi bi-truck me-2"></i> Bulk Send Now </button> </div> </form> </div> </div> </div> <?php require_once __DIR__ . '/partials/footer.php'; ?>