« Back to History
jobwork_send_list.php
|
20260721_154032.php
Initial Bulk Import
Copy Code
<?php require_once __DIR__ . '/../modules/auth/page_acl.php'; $ctx = page_require_access('jobwork_send'); $pdo = $ctx['pdo']; $company_id = (int)$ctx['company_id']; function fy_label_from_start_year(int $start_year): string { return sprintf('%04d-%02d', $start_year, ($start_year + 1) % 100); } function fy_bounds_from_label(string $fy_label): array { if (preg_match('/^(\d{4})-(\d{2})$/', $fy_label, $m)) { $start_year = (int)$m[1]; return [ $start_year . '-04-01', ($start_year + 1) . '-03-31', ]; } $today = date('Y-m-d'); $year = (int)date('Y', strtotime($today)); $month = (int)date('n', strtotime($today)); $start_year = $month >= 4 ? $year : ($year - 1); return [ $start_year . '-04-01', ($start_year + 1) . '-03-31', ]; } /* Current FY + Date filter */ $today = date('Y-m-d'); $year = (int)date('Y', strtotime($today)); $month = (int)date('n', strtotime($today)); if ($month >= 4) { $fy_start = $year . '-04-01'; $fy_end = ($year + 1) . '-03-31'; } else { $fy_start = ($year - 1) . '-04-01'; $fy_end = $year . '-03-31'; } $current_fy_label = fy_label_from_start_year((int)date('Y', strtotime($fy_start))); $minMaxStmt = $pdo->prepare("\n SELECT MIN(challan_date) AS min_date, MAX(challan_date) AS max_date\n FROM chalan_data\n WHERE company_id = :cid\n"); $minMaxStmt->execute([':cid' => $company_id]); $minMax = $minMaxStmt->fetch(PDO::FETCH_ASSOC) ?: []; $fy_options = []; $min_date = $minMax['min_date'] ?? null; $max_date = $minMax['max_date'] ?? null; if ($min_date && $max_date) { $min_year = (int)date('Y', strtotime($min_date)); $min_month = (int)date('n', strtotime($min_date)); $max_year = (int)date('Y', strtotime($max_date)); $max_month = (int)date('n', strtotime($max_date)); $start_year = $min_month >= 4 ? $min_year : ($min_year - 1); $end_year = $max_month >= 4 ? $max_year : ($max_year - 1); for ($fy_year = $end_year; $fy_year >= $start_year; $fy_year--) { $fy_options[] = fy_label_from_start_year($fy_year); } } if (empty($fy_options)) { $fy_options[] = $current_fy_label; } $selected_fy = $_GET['fy'] ?? $current_fy_label; if (!in_array($selected_fy, $fy_options, true)) { $fy_options[] = $selected_fy; rsort($fy_options); } [$fy_start, $fy_end] = fy_bounds_from_label($selected_fy); $from_date = $_GET['from_date'] ?? $fy_start; $to_date = $_GET['to_date'] ?? $fy_end; $where = "h.company_id = :cid AND h.challan_date BETWEEN :fy_start AND :fy_end"; $params = [ 'cid' => $company_id, 'fy_start' => $fy_start, 'fy_end' => $fy_end, ]; if ($from_date && $to_date) { $where .= " AND h.challan_date BETWEEN :from AND :to"; $params['from'] = $from_date; $params['to'] = $to_date; } $sql = " SELECT h.challan_no, h.challan_date, h.party_name, COALESCE(SUM(d.boxes),0) AS total_boxes, COALESCE(SUM(d.weight),0) AS total_weight FROM chalan_data h LEFT JOIN jobwork_send d ON d.challan_no = h.challan_no AND d.company_id = h.company_id WHERE $where GROUP BY h.challan_no, h.challan_date, h.party_name ORDER BY h.challan_date ASC, h.challan_no ASC "; $stmt = $pdo->prepare($sql); $stmt->execute($params); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Job Work Send Challan List</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script> <style> body { background:#f8f9fa; } .table-card { background:#fff; padding:20px; border-radius:8px; } .modal-iframe { width:100%; height:75vh; border:0; } </style> <script> function openCheck(challanNo){ document.getElementById('checkFrame').src = 'jobwork_send_view.php?challan_no=' + encodeURIComponent(challanNo) + '&popup=1'; $('#checkModal').modal('show'); } </script> </head> <body> <div class="container-fluid py-4"> <div class="d-flex justify-content-between mb-3"> <h4>Job Work Send Challans <small class="text-muted">(FY: <?= htmlspecialchars($selected_fy) ?>)</small></h4> <a href="jobwork_send_entry.php" class="btn btn-primary"> <i class="fa fa-plus"></i> New Entry </a> </div> <!-- Date Filter --> <form method="get" class="mb-3"> <div class="form-row align-items-end"> <div class="col-md-3"> <label>Financial Year</label> <select name="fy" class="form-control"> <?php foreach($fy_options as $fy): ?> <option value="<?= htmlspecialchars($fy) ?>" <?= $selected_fy === $fy ? 'selected' : '' ?>><?= htmlspecialchars($fy) ?></option> <?php endforeach; ?> </select> </div> <div class="col-md-3"> <label>From Date</label> <input type="date" name="from_date" value="<?= htmlspecialchars($from_date) ?>" class="form-control"> </div> <div class="col-md-3"> <label>To Date</label> <input type="date" name="to_date" value="<?= htmlspecialchars($to_date) ?>" class="form-control"> </div> <div class="col-md-2"> <button class="btn btn-success mt-2"> <i class="fa fa-filter"></i> Filter </button> </div> </div> </form> <div class="table-card"> <table class="table table-bordered table-hover"> <thead class="thead-light"> <tr> <th>Challan No</th> <th>Date</th> <th>Party</th> <th class="text-right">Boxes</th> <th class="text-right">Weight</th> <th class="text-center">Actions</th> </tr> </thead> <tbody> <?php if(!$rows): ?> <tr><td colspan="6" class="text-center text-muted">No data</td></tr> <?php endif; ?> <?php foreach($rows as $r): ?> <tr> <td><b><?= htmlspecialchars($r['challan_no']) ?></b></td> <td><?= date('d-m-Y', strtotime($r['challan_date'])) ?></td> <td><?= htmlspecialchars($r['party_name']) ?></td> <td class="text-right"><?= number_format($r['total_boxes']) ?></td> <td class="text-right"><?= number_format($r['total_weight'],2) ?></td> <td class="text-center"> <!-- VIEW --> <a class="btn btn-sm btn-info" href="jobwork_send_view.php?challan_no=<?= urlencode($r['challan_no']) ?>"> <i class="fa fa-eye"></i> </a> <!-- PRINT --> <a class="btn btn-sm btn-secondary" target="_blank" href="jobwork_send_view.php?challan_no=<?= urlencode($r['challan_no']) ?>&print=1"> <i class="fa fa-print"></i> </a> <!-- PDF --> <a class="btn btn-sm btn-danger" href="jobwork_send_view.php?challan_no=<?= urlencode($r['challan_no']) ?>&pdf=1"> <i class="fa fa-file-pdf"></i> </a> <!-- CHECK (POPUP) --> <button class="btn btn-sm btn-warning" onclick="openCheck('<?= htmlspecialchars($r['challan_no']) ?>')"> <i class="fa fa-check"></i> </button> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> </div> <!-- CHECK MODAL --> <div class="modal fade" id="checkModal" tabindex="-1"> <div class="modal-dialog modal-xl"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Challan Detail (Quick Check)</h5> <button type="button" class="close" data-dismiss="modal">×</button> </div> <div class="modal-body p-0"> <iframe id="checkFrame" class="modal-iframe"></iframe> </div> <div class="modal-footer"> <button class="btn btn-secondary" data-dismiss="modal">Close</button> </div> </div> </div> </div> </body> </html>