« Back to History
VA_main_dashboard.php
|
20260721_154032.php
Initial Bulk Import
Copy Code
<?php require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('dashboard'); $pdo = $ctx['pdo']; $company_id = (int)$ctx['company_id']; require_once __DIR__ . '/partials/header.php'; $from_date = $_GET['from_date'] ?? date('Y-m-01'); $to_date = $_GET['to_date'] ?? date('Y-m-d'); /* ================= SQL LOGIC ================= */ // 1. Gray Receive $q1 = $pdo->prepare("SELECT SUM(grey_mts) total_meter, SUM(finish_mts) finish_meter FROM gray_receive WHERE company_id=:cid AND rec_date >= :f AND rec_date < DATE_ADD(:t, INTERVAL 1 DAY)"); $q1->execute([':cid'=>$company_id, ':f'=>$from_date, ':t'=>$to_date]); $gray = $q1->fetch(PDO::FETCH_ASSOC); // 2. Cutting $q2 = $pdo->prepare("SELECT SUM(total_meter) total_meter, SUM(fresh_saree + second_saree) total_pcs FROM cutting_entry WHERE company_id=:cid AND rec_date >= :f AND rec_date < DATE_ADD(:t, INTERVAL 1 DAY)"); $q2->execute([':cid'=>$company_id, ':f'=>$from_date, ':t'=>$to_date]); $cut = $q2->fetch(PDO::FETCH_ASSOC); // 3. VA Send $q3 = $pdo->prepare("SELECT SUM(pcs) total_pcs FROM va_send_entry WHERE company_id=:cid AND send_date >= :f AND send_date < DATE_ADD(:t, INTERVAL 1 DAY)"); $q3->execute([':cid'=>$company_id, ':f'=>$from_date, ':t'=>$to_date]); $send = $q3->fetch(PDO::FETCH_ASSOC); // 4. VA Receive $q4 = $pdo->prepare("SELECT SUM(fresh + second + modeling) total_pcs FROM va_receive_entry WHERE company_id=:cid AND receive_date >= :f AND receive_date < DATE_ADD(:t, INTERVAL 1 DAY)"); $q4->execute([':cid'=>$company_id, ':f'=>$from_date, ':t'=>$to_date]); $recv = $q4->fetch(PDO::FETCH_ASSOC); // 5. Sales $q5 = $pdo->prepare("SELECT SUM(pcs) total_pcs, SUM(mts) total_meter FROM sales_entry WHERE company_id=:cid AND sale_date >= :f AND sale_date < DATE_ADD(:t, INTERVAL 1 DAY)"); $q5->execute([':cid'=>$company_id, ':f'=>$from_date, ':t'=>$to_date]); $sale = $q5->fetch(PDO::FETCH_ASSOC); // 6. Cutting Pending $q_cut_pending = $pdo->prepare("SELECT COALESCE(SUM(gr.finish_mts),0) FROM gray_receive gr WHERE gr.company_id=:cid AND gr.rec_date >= :f AND gr.rec_date < DATE_ADD(:t, INTERVAL 1 DAY) AND NOT EXISTS (SELECT 1 FROM cutting_entry c WHERE c.company_id = gr.company_id AND c.gray_id = gr.id)"); $q_cut_pending->execute([':cid'=>$company_id, ':f'=>$from_date, ':t'=>$to_date]); $cut_pending = $q_cut_pending->fetchColumn(); // 7. Pending for VA (Cutting - Send) $total_cut_pcs = (int)($cut['total_pcs'] ?? 0); $total_send_pcs = (int)($send['total_pcs'] ?? 0); $pending_for_va = $total_cut_pcs - $total_send_pcs; // 8. VA Pending (Send - Receive) $total_recv_pcs = (int)($recv['total_pcs'] ?? 0); $va_pending = $total_send_pcs - $total_recv_pcs; // 9. Billing Pending (Receive - Sales) $total_sale_pcs = (int)($sale['total_pcs'] ?? 0); $billing_pending = $total_recv_pcs - $total_sale_pcs; /* ================= HELPER FUNCTION ================= */ function render_card($title, $value, $footer = '', $color = 'dark') { echo " <div class='col-dashboard'> <div class='card text-center h-100 shadow-sm border-start border-4 border-$color'> <div class='card-body p-2'> <div class='text-muted text-uppercase small mb-1' style='font-size: 11px; font-weight: 600;'>$title</div> <h4 class='fw-bold mb-0 text-$color'>" . $value . "</h4> " . ($footer ? "<div class='text-secondary mt-1 small' style='font-size: 10px;'>$footer</div>" : "") . " </div> </div> </div>"; } ?> <style> /* Dashboard Grid Configuration */ .dashboard-grid { display: flex; flex-wrap: wrap; margin: 0 -8px; } .col-dashboard { flex: 0 0 33.333%; max-width: 33.333%; padding: 8px; } /* Print Styling for Landscape A4 */ @media print { @page { size: A4 landscape; margin: 5mm; } body { background: #fff !important; -webkit-print-color-adjust: exact; } .no-print { display: none !important; } .container-fluid { width: 100% !important; padding: 0 !important; } .col-dashboard { padding: 5px; flex: 0 0 33.333%; max-width: 33.333%; } .card { border: 1px solid #ddd !important; border-left: 4px solid !important; box-shadow: none !important; } h3 { margin-top: 0; } } </style> <div class="container-fluid mt-3 px-4"> <div class="card mb-4 no-print bg-light border-0"> <div class="card-body py-2"> <form method="get" class="row g-2 align-items-end justify-content-center"> <div class="col-md-2"> <label class="small fw-bold">From Date</label> <input type="date" name="from_date" value="<?= $from_date ?>" class="form-control form-control-sm"> </div> <div class="col-md-2"> <label class="small fw-bold">To Date</label> <input type="date" name="to_date" value="<?= $to_date ?>" class="form-control form-control-sm"> </div> <div class="col-md-1"><button class="btn btn-primary btn-sm w-100">Apply</button></div> <div class="col-md-1"><button type="button" onclick="window.print()" class="btn btn-dark btn-sm w-100">Print</button></div> </form> </div> </div> <div class="text-center mb-4"> <h3 class="fw-bold mb-0 text-dark">Production & Sales Workflow</h3> <div class="text-muted fw-bold"><?= date('d M Y', strtotime($from_date)) ?> — <?= date('d M Y', strtotime($to_date)) ?></div> </div> <div class="dashboard-grid"> <?php // ROW 1 render_card("Gray Receive", number_format($gray['total_meter'] ?? 0)." m", "Finish: ".number_format($gray['finish_meter'] ?? 0)." m", "primary"); render_card("Cutting", number_format($cut['total_meter'] ?? 0)." m", "Total: ".number_format($total_cut_pcs)." PCS", "success"); render_card("Sales Performance", number_format($sale['total_meter'] ?? 0)." m", number_format($total_sale_pcs)." PCS", "info"); // ROW 2 render_card("VA Send", number_format($total_send_pcs)." PCS", "Dispatched to VA", "warning"); render_card("VA Receive", number_format($total_recv_pcs)." PCS", "Inward from VA", "success"); render_card("Cutting Pending", number_format($cut_pending)." m", "Gray Stock in Hand", "danger"); // ROW 3 render_card("Pending for VA", number_format($pending_for_va)." PCS", "Cut but not sent to VA", "danger"); render_card("VA Pending", number_format($va_pending)." PCS", "Current WIP at Jobwork", "warning"); render_card("Billing Pending", number_format($billing_pending)." PCS", "Ready Stock for Sale", "primary"); ?> </div> </div> <?php require_once __DIR__ . '/partials/footer.php'; ?>