« Back to History
parcel_send_multi.php
|
20260721_154033.php
Initial Bulk Import
Copy Code
<?php require_once __DIR__ . '/modules/auth/page_acl.php'; require_once __DIR__ . '/helpers/activity_helper.php'; $ctx = page_require_access('parcel_send_multi'); $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 = ''; $selected_vehicle = $_POST['vehicle_no'] ?? ''; $selected_date = $_POST['send_date'] ?? date('Y-m-d'); $from_date = $_POST['from_date'] ?? $_GET['from_date'] ?? date('Y-m-d'); $to_date = $_POST['to_date'] ?? $_GET['to_date'] ?? date('Y-m-d'); /* ========================= MULTI SAVE (SEQUENTIAL) ========================= */ if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['bill_no'])) { $bill_list = $_POST['bill_no']; // array $vehicle_no = trim($_POST['vehicle_no'] ?? ''); $send_date = $_POST['send_date'] ?? ''; $remark = trim($_POST['remark'] ?? ''); if (empty($bill_list) || $vehicle_no === '' || $send_date === '') { $err = 'Bills, Vehicle and Date required.'; } else { try { $pdo->beginTransaction(); foreach ($bill_list as $bill_no) { // DELETE old $pdo->prepare("DELETE FROM parcel_send_entry WHERE bill_no = ? AND company_id = ?") ->execute([$bill_no, $COMPANY_ID]); // INSERT new $pdo->prepare("INSERT INTO parcel_send_entry (company_id, bill_no, vehicle_no, send_date, remark, created_at, created_by) VALUES (?, ?, ?, ?, ?, NOW(), ?)") ->execute([ $COMPANY_ID, $bill_no, $vehicle_no, $send_date, ($remark ?: null), $USER_ID ]); // UPDATE stock $pdo->prepare("UPDATE parcel_stock_in SET status = 'out' WHERE company_id = ? AND bill_no = ? AND status = 'in'") ->execute([$COMPANY_ID, $bill_no]); usleep(100000); // optional delay } $pdo->commit(); $msg = "Multiple bills dispatched successfully."; // Activity tracker activity_create('parcel', 'parcel_send_multi', 0, 'Multiple bills dispatched'); } catch (Exception $e) { if ($pdo->inTransaction()) $pdo->rollBack(); $err = "Error: " . $e->getMessage(); } } } /* ========================= FETCH SAME DATA ========================= */ $hasTransport = $pdo->query("SHOW COLUMNS FROM parcel_stock_in LIKE 'transport'")->rowCount() > 0; $hasTransport2 = !$hasTransport && $pdo->query("SHOW COLUMNS FROM parcel_stock_in LIKE 'transporter'")->rowCount() > 0; if ($hasTransport) { $sqlBills = "SELECT DISTINCT bill_no, bill_date, transport FROM parcel_stock_in WHERE company_id = ? AND status = 'in' AND (bill_date BETWEEN ? AND ?) ORDER BY CAST(bill_no AS UNSIGNED)"; } elseif ($hasTransport2) { $sqlBills = "SELECT DISTINCT bill_no, bill_date, transporter FROM parcel_stock_in WHERE company_id = ? AND status = 'in' AND (bill_date BETWEEN ? AND ?) ORDER BY CAST(bill_no AS UNSIGNED)"; } else { $sqlBills = "SELECT DISTINCT bill_no, bill_date FROM parcel_stock_in WHERE company_id = ? AND status = 'in' AND (bill_date BETWEEN ? AND ?) ORDER BY CAST(bill_no AS UNSIGNED)"; } $stB = $pdo->prepare($sqlBills); $stB->execute([$COMPANY_ID, $from_date, $to_date]); $bills = $stB->fetchAll(PDO::FETCH_ASSOC); $stV = $pdo->prepare("SELECT vehicle_no FROM vehicle_data WHERE company_id = ? AND is_active = 1"); $stV->execute([$COMPANY_ID]); $vehicles = $stV->fetchAll(PDO::FETCH_ASSOC); require_once __DIR__ . '/partials/header.php'; ?> <div class="container mt-4"> <h4 class="mb-3">Multi Parcel Send</h4> <?php if ($msg): ?><div class="alert alert-success"><?= $msg ?></div><?php endif; ?> <?php if ($err): ?><div class="alert alert-danger"><?= h($err) ?></div><?php endif; ?> <form method="get" class="card card-body mb-3"> <div class="row g-3 align-items-end"> <div class="col-md-3"> <label class="form-label">From Bill Date</label> <input type="date" name="from_date" class="form-control" value="<?= h($from_date) ?>"> </div> <div class="col-md-3"> <label class="form-label">To Bill Date</label> <input type="date" name="to_date" class="form-control" value="<?= h($to_date) ?>"> </div> <div class="col-md-3"> <button class="btn btn-dark w-100" type="submit">Fetch Bills</button> </div> <div class="col-md-3 text-md-end text-muted small"> Filtered: <?= count($bills) ?> Bills </div> </div> </form> <form method="post"> <input type="hidden" name="from_date" value="<?= h($from_date) ?>"> <input type="hidden" name="to_date" value="<?= h($to_date) ?>"> <div class="card mb-3"> <div class="card-body"> <div class="mb-2"> <input type="checkbox" id="select_all"> Select All </div> <?php foreach ($bills as $b): ?> <div class="form-check"> <input class="form-check-input bill_cb" type="checkbox" name="bill_no[]" value="<?= h($b['bill_no']) ?>"> <label class="form-check-label"> <strong><?= h($b['bill_no']) ?></strong> <?php if (!empty($b['bill_date'])): ?> <span class="text-muted ms-2">(Date: <?= date('d-m-Y', strtotime($b['bill_date'])) ?>)</span> <?php endif; ?> <?php if (!empty($b['transport'])): ?> — <?= h($b['transport']) ?> <?php elseif (!empty($b['transporter'])): ?> — <?= h($b['transporter']) ?> <?php endif; ?> </label> </div> <?php endforeach; ?> <?php if (!$bills): ?> <div class="text-muted small">No pending parcel entries found for the selected date range.</div> <?php endif; ?> </div> </div> <div class="row"> <div class="col-md-4"> <select name="vehicle_no" class="form-select" required> <option value="">Select Vehicle</option> <?php foreach ($vehicles as $v): ?> <option value="<?= h($v['vehicle_no']) ?>" <?= ($selected_vehicle==$v['vehicle_no'])?'selected':'' ?>> <?= h($v['vehicle_no']) ?> </option> <?php endforeach; ?> </select> </div> <div class="col-md-4"> <input type="date" name="send_date" class="form-control" value="<?= h($selected_date) ?>" required> </div> <div class="col-md-4"> <input type="text" name="remark" class="form-control" placeholder="Remark"> </div> </div> <button class="btn btn-success mt-3 w-100">SEND MULTIPLE</button> </form> </div> <script> document.getElementById('select_all').addEventListener('change', function(){ document.querySelectorAll('.bill_cb').forEach(cb => cb.checked = this.checked); }); </script> <?php require_once __DIR__ . '/partials/footer.php'; ?>