« Back to History
yarn_out_report.php
|
20260723_000646.php
Initial Domain Snapshot
Copy Code
<?php /* ============================================================================ File: /erp/yarn_out_report.php Purpose: Assign-wise Yarn Out + TPM Out Report ERP Compliant Version ============================================================================ */ require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('yarn_out_report'); $pdo = $ctx['pdo']; $company_id = (int)$ctx['company_id']; $user = $ctx['user']; require_once __DIR__ . '/partials/header.php'; function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } /* ================= DATE ================= */ $from_raw = $_GET['from_date'] ?? date('Y-m-01'); $to_raw = $_GET['to_date'] ?? date('Y-m-d'); $from_date = date('Y-m-d', strtotime($from_raw)); $to_date = date('Y-m-d', strtotime($to_raw)); /* ================= ASSIGN FILTER ================= */ $assigns = $_GET['assign'] ?? []; if (!is_array($assigns)) { $assigns = [$assigns]; } /* ================= ASSIGN LIST FROM MASTER ================= */ $stmt = $pdo->prepare(" SELECT DISTINCT assign FROM yarn_master WHERE company_id = :cid AND is_active = 1 AND assign IS NOT NULL AND assign <> '' ORDER BY assign ASC "); $stmt->execute([':cid'=>$company_id]); $assign_list = $stmt->fetchAll(PDO::FETCH_COLUMN); /* ================= MAIN REPORT ================= */ $grouped = []; $grand_boxes = 0; $grand_weight = 0; if (!empty($assigns)) { foreach ($assigns as $assign_name) { /* Step 1: Master Mapping */ $stmt = $pdo->prepare(" SELECT denier, color FROM yarn_master WHERE company_id = :cid AND is_active = 1 AND assign = :assign "); $stmt->execute([ ':cid'=>$company_id, ':assign'=>$assign_name ]); $master_rows = $stmt->fetchAll(PDO::FETCH_ASSOC); if (!$master_rows) continue; $conditions = []; $params = [ ':cid'=>$company_id, ':from'=>$from_date, ':to'=>$to_date ]; $i = 0; foreach ($master_rows as $row) { $den_key = ":den_$i"; $col_key = ":col_$i"; if (empty($row['color'])) { $conditions[] = "(denier = $den_key)"; $params[$den_key] = $row['denier']; } else { $conditions[] = "(denier = $den_key AND color = $col_key)"; $params[$den_key] = $row['denier']; $params[$col_key] = $row['color']; } $i++; } if (empty($conditions)) continue; $sql = " SELECT denier, color, SUM(boxes) AS total_boxes, SUM(weight) AS total_weight FROM ( SELECT denier, color, boxes, weight FROM yarn_out WHERE company_id = :cid AND txn_date BETWEEN :from AND :to AND (" . implode(' OR ', $conditions) . ") UNION ALL SELECT denier, color, boxes, weight FROM tpm_out WHERE company_id = :cid AND txn_date BETWEEN :from AND :to AND (" . implode(' OR ', $conditions) . ") UNION ALL SELECT denier, color, boxes, weight FROM zari_out WHERE company_id = :cid AND txn_date BETWEEN :from AND :to AND (" . implode(' OR ', $conditions) . ") ) x GROUP BY denier, color ORDER BY denier, color "; $stmt = $pdo->prepare($sql); $stmt->execute($params); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($rows) { $grouped[$assign_name] = $rows; foreach ($rows as $r) { $grand_boxes += (float)$r['total_boxes']; $grand_weight += (float)$r['total_weight']; } } } } ?> <div class="container-fluid mt-4"> <div class="card"> <div class="card-header"> <h5 class="mb-0">Assign-wise Yarn Out + TPM Out Report</h5> </div> <div class="card-body"> <form method="get" class="row g-3 mb-4"> <div class="col-md-3"> <label class="form-label">From Date</label> <input type="date" name="from_date" value="<?=h($from_date)?>" class="form-control"> </div> <div class="col-md-3"> <label class="form-label">To Date</label> <input type="date" name="to_date" value="<?=h($to_date)?>" class="form-control"> </div> <div class="col-md-4"> <label class="form-label">Assign (Multiple)</label> <select name="assign[]" multiple class="form-select" style="min-height:160px;"> <?php foreach($assign_list as $a): ?> <option value="<?=h($a)?>" <?=in_array($a,$assigns)?'selected':''?>> <?=h($a)?> </option> <?php endforeach; ?> </select> </div> <div class="col-md-2 d-flex align-items-end"> <button class="btn btn-primary w-100">Generate</button> </div> </form> <?php if ($grouped): ?> <?php foreach($grouped as $assign => $rows): ?> <?php $assign_boxes=0; $assign_weight=0; ?> <div class="card mb-4"> <div class="card-header bg-light"> <strong><?=h($assign)?></strong> </div> <div class="table-responsive"> <table class="table table-bordered mb-0"> <thead class="table-light"> <tr> <th>Denier</th> <th>Color</th> <th class="text-end">Boxes</th> <th class="text-end">Weight</th> </tr> </thead> <tbody> <?php foreach($rows as $r): $assign_boxes += $r['total_boxes']; $assign_weight += $r['total_weight']; ?> <tr> <td><?=h($r['denier'])?></td> <td><?=h($r['color'])?></td> <td class="text-end"><?=number_format($r['total_boxes'],3)?></td> <td class="text-end"><?=number_format($r['total_weight'],3)?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <div class="card-footer text-end fw-bold"> Assign Total Boxes: <?=number_format($assign_boxes,3)?> | Assign Total Weight: <?=number_format($assign_weight,3)?> </div> </div> <?php endforeach; ?> <div class="alert alert-primary fw-bold"> Grand Total Boxes: <?=number_format($grand_boxes,3)?> <br> Grand Total Weight: <?=number_format($grand_weight,3)?> </div> <?php else: ?> <div class="alert alert-warning"> No data found for selected filters. </div> <?php endif; ?> </div> </div> </div> <?php require_once __DIR__ . '/partials/footer.php'; ?>