« Back to History
karigar_salary_form.php
|
20260920_164915.php
Initial Domain Snapshot
Copy Code
<?php /* ============================================================================ Karigar Salary Form (Production Filter Based) - Date Range / Month / Period (H1/H2) / Khata Filters - Complete layout using PDO transactions & mandatory structural safety - Optimized for A4 Portrait Print Layout ============================================================================ */ require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('machine_karigar_by_machine'); // Maintaining matching access context $cid = (int)$ctx['company_id']; $pdo = $ctx['pdo']; $print_mode = isset($_GET['print']) && $_GET['print'] == 1; /* ================= INPUTS ================= */ $month = $_GET['month'] ?? ''; $period= $_GET['period'] ?? ''; $khata = $_GET['khata'] ?? ''; $KHATA_MAP = [ 'mst1'=>1, 'mst2a'=>2, 'mst2b'=>3 ]; /* ================= BASE FILTER ================= */ $where = "p.company_id = :cid"; $params = ['cid'=>$cid]; if($month){ $where .= " AND DATE_FORMAT(p.entry_date,'%Y-%m')=:m"; $params['m']=$month; } if($period=='H1'){ $where .= " AND DAY(p.entry_date) BETWEEN 1 AND 15"; } if($period=='H2'){ $where .= " AND DAY(p.entry_date)>=16"; } if($khata && isset($KHATA_MAP[$khata])){ $where .= " AND p.khata_id=:kh"; $params['kh']=$KHATA_MAP[$khata]; } /* ================= EXTRACT UNIQUE KARIGARS WITH PRODUCTION ================= */ $st = $pdo->prepare("SELECT p.lines_json FROM production_entry p WHERE $where"); $st->execute($params); $production_records = $st->fetchAll(PDO::FETCH_COLUMN); $active_karigar_ids = []; foreach($production_records as $json_str) { $lines = json_decode($json_str, true); if(is_array($lines)) { foreach($lines as $line) { if(isset($line['karigar_id']) && $line['karigar_id'] !== 'unknown' && $line['karigar_id'] > 0) { $active_karigar_ids[(int)$line['karigar_id']] = true; } } } } $karigars_list = []; if(!empty($active_karigar_ids)) { $placeholders = implode(',', array_fill(0, count($active_karigar_ids), '?')); $k_stmt = $pdo->prepare("SELECT id, karigar_name FROM loom_karigar_master WHERE company_id = ? AND id IN ($placeholders) ORDER BY karigar_name ASC"); $k_params = array_merge([$cid], array_keys($active_karigar_ids)); $k_stmt->execute($k_params); $karigars_list = $k_stmt->fetchAll(PDO::FETCH_ASSOC); } /* ======================================================== UI MODE ======================================================== */ if(!$print_mode): require_once __DIR__.'/partials/header.php'; ?> <div class="card mb-4"> <div class="card-header bg-primary text-white d-flex justify-content-between align-items-center"> <h4 class="mb-0">Karigar Salary Form</h4> </div> <div class="card-body"> <form method="get" class="row g-2"> <div class="col-md-3"> <label class="form-label small fw-bold">Month</label> <input type="month" name="month" value="<?=htmlspecialchars($month)?>" class="form-control form-control-sm"> </div> <div class="col-md-3"> <label class="form-label small fw-bold">Period</label> <select name="period" class="form-control form-control-sm"> <option value="">All</option> <option value="H1" <?=$period=='H1'?'selected':''?>>H1 (1 to 15)</option> <option value="H2" <?=$period=='H2'?'selected':''?>>H2 (16+)</option> </select> </div> <div class="col-md-3"> <label class="form-label small fw-bold">Khata</label> <select name="khata" class="form-control form-control-sm"> <option value="">All</option> <?php foreach($KHATA_MAP as $k=>$v): ?> <option value="<?=$k?>" <?=$khata==$k?'selected':''?>><?=$k?></option> <?php endforeach;?> </select> </div> <div class="col-md-3 d-flex align-items-end"> <button class="btn btn-primary btn-sm me-2 px-3">Load</button> <a href="<?=basename(__FILE__)?>" class="btn btn-secondary btn-sm me-2">Reset</a> <a href="?<?=http_build_query(array_merge($_GET,['print'=>1]))?>" target="_blank" class="btn btn-dark btn-sm">Print Sheet</a> </div> </form> <hr class="my-3"> <?php if(empty($karigars_list)): ?> <div class="alert alert-warning mb-0">Selected filters ke mutabik production karne wala koi karigar nahi mila.</div> <?php else: ?> <form method="POST" action="karigar_salary_save.php"> <div class="table-responsive"> <table class="table table-bordered table-striped table-hover align-middle"> <thead class="table-dark"> <tr> <th style="width: 5%;">#</th> <th style="width: 35%;">Karigar Name</th> <th style="width: 15%;">Quality 1</th> <th style="width: 15%;">Quality 2</th> <th style="width: 15%;">Quality 3</th> <th style="width: 15%;">Salary</th> </tr> </thead> <tbody> <?php $idx = 1; foreach($karigars_list as $krow): ?> <tr> <td class="text-center fw-bold"><?=$idx++?></td> <td> <span class="fw-semibold text-secondary"><?=htmlspecialchars($krow['karigar_name'])?></span> <input type="hidden" name="salary_rows[<?=$krow['id']?>][karigar_id]" value="<?=$krow['id']?>"> </td> <td><input type="text" class="form-control form-control-sm" name="salary_rows[<?=$krow['id']?>][quality_1]"></td> <td><input type="text" class="form-control form-control-sm" name="salary_rows[<?=$krow['id']?>][quality_2]"></td> <td><input type="text" class="form-control form-control-sm" name="salary_rows[<?=$krow['id']?>][quality_3]"></td> <td><input type="number" step="0.01" class="form-control form-control-sm fw-bold text-end" name="salary_rows[<?=$krow['id']?>][salary]" placeholder="0.00"></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <div class="text-end mt-3"> <button type="submit" class="btn btn-success px-4 fw-bold">Save Salary Form</button> </div> </form> <?php endif; ?> </div> </div> <?php require_once __DIR__.'/partials/footer.php'; ?> <?php /* ======================================================== PRINT MODE (Optimized A4 Portrait Sheet layout) ======================================================== */ else: ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Karigar Salary Sheet (Portrait)</title> <link rel="stylesheet" href="/erp/public/assets/css/main.css?v=<?=date('Ymd')?>"> <style> @page { size: A4 portrait; margin: 8mm 6mm; } body { font-size: 10px; background-color: #fff !important; color: #000; } .table-print { width: 100%; border-collapse: collapse; margin-top: 8px; table-layout: fixed; } .table-print th, .table-print td { border: 1px solid #000 !important; padding: 5px 6px !important; overflow: hidden; word-wrap: break-word; } .table-print th { background-color: #f2f2f2 !important; font-weight: bold; font-size: 10px; } .blank-cell { height: 28px; } </style> </head> <body> <div class="container-fluid"> <div class="d-flex justify-content-between align-items-center border-bottom pb-1 mb-2"> <h5 class="mb-0 fw-bold" style="font-size: 14px;">Karigar Salary Calculation Form</h5> <div class="text-end" style="font-size: 9px;"> <?= $month ? "<strong>Month:</strong> $month | " : '' ?> <?= $period ? "<strong>Period:</strong> $period | " : '' ?> <?= $khata ? "<strong>Khata:</strong> $khata" : '' ?> </div> </div> <?php if(empty($karigars_list)): ?> <div class="alert alert-warning py-1 px-2">No active structural production found.</div> <?php else: ?> <table class="table-print"> <thead> <tr> <th style="width: 6%; text-align: center;">#</th> <th style="width: 34%;">Karigar Name</th> <th style="width: 15%; text-align: center;">Quality 1</th> <th style="width: 15%; text-align: center;">Quality 2</th> <th style="width: 15%; text-align: center;">Quality 3</th> <th style="width: 15%; text-align: center;">Salary</th> </tr> </thead> <tbody> <?php $print_idx = 1; foreach($karigars_list as $krow): ?> <tr style="page-break-inside: avoid; break-inside: avoid;"> <td style="text-align: center;" class="fw-bold"><?=$print_idx++?></td> <td class="fw-bold" style="font-size: 11px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;"><?=htmlspecialchars($krow['karigar_name'])?></td> <td class="blank-cell"></td> <td class="blank-cell"></td> <td class="blank-cell"></td> <td class="blank-cell"></td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <div class="d-flex justify-content-between align-items-center mt-4 pt-3" style="page-break-inside: avoid; break-inside: avoid;"> <div class="text-start text-muted" style="font-size: 8px;">Generated on: <?=date('Y-m-d H:i')?></div> <div style="border-top: 1px solid #000; width: 160px; font-size: 10px;" class="text-center pt-1 fw-bold">Authorized Signatory</div> </div> </div> <script> window.onload = function() { setTimeout(() => window.print(), 300); } </script> </body> </html> <?php endif; ?>