« Back to History
salary.php
|
20260722_120325.php
Initial Domain Snapshot
Copy Code
<?php require_once __DIR__ . '/../modules/auth/page_acl.php'; $ctx = page_require_access('karigar_dashboard'); $u = $ctx['user']; $company_id = (int)$ctx['company_id']; $pdo = $ctx['pdo']; $karigar_id = (int)($u['id'] ?? 0); if (!$pdo) { require_once __DIR__ . '/../core/db.php'; $pdo = $GLOBALS['pdo'] ?? null; } if (!($pdo instanceof PDO) || $karigar_id <= 0) { http_response_code(500); exit('Salary unavailable.'); } function h($value): string { return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8'); } function clean_num($value): string { $float = (float)$value; $text = number_format($float, 2, '.', ''); return rtrim(rtrim($text, '0'), '.'); } function salary_half_range(int $year, int $month, string $half): array { $first = sprintf('%04d-%02d-01', $year, $month); $last = date('Y-m-t', strtotime($first)); if ($half === '1') { $last = sprintf('%04d-%02d-15', $year, $month); } if ($half === '2') { $first = sprintf('%04d-%02d-16', $year, $month); } return [$first, $last]; } function fetch_scalar_sum(PDO $pdo, string $sql, array $params): float { try { $stmt = $pdo->prepare($sql); $stmt->execute($params); return (float)$stmt->fetchColumn(); } catch (Throwable $e) { return 0.0; } } $year = isset($_GET['year']) ? max(2020, (int)$_GET['year']) : (int)date('Y'); $month = isset($_GET['month']) ? min(12, max(1, (int)$_GET['month'])) : (int)date('n'); $half = isset($_GET['half']) ? (string)$_GET['half'] : '1'; if (!in_array($half, ['1', '2', 'F'], true)) { $half = '1'; } [$from_date, $to_date] = salary_half_range($year, $month, $half); $profile = []; try { $stmt = $pdo->prepare( "SELECT karigar_name, entry_name, khata_code, beneficiary_ac_number, ifsc_code FROM loom_karigar_master WHERE id = :id AND (company_id = :cid OR company_id IS NULL) LIMIT 1" ); $stmt->execute([':id' => $karigar_id, ':cid' => $company_id]); $profile = $stmt->fetch(PDO::FETCH_ASSOC) ?: []; } catch (Throwable $e) { $profile = []; } $quality_map = []; try { $stmt = $pdo->prepare("SELECT quality_id, quality_name, rate FROM quality_rates WHERE (company_id = :cid OR company_id IS NULL)"); $stmt->execute([':cid' => $company_id]); foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { $qualityId = (int)($row['quality_id'] ?? 0); if ($qualityId > 0) { $quality_map[$qualityId] = [ 'name' => (string)($row['quality_name'] ?? ('Q' . $qualityId)), 'rate' => (float)($row['rate'] ?? 0), ]; } } } catch (Throwable $e) { } $quality_summary = []; try { $stmt = $pdo->prepare( "SELECT entry_date, quality_id, lines_json FROM production_entry WHERE company_id = :cid AND entry_date BETWEEN :from_date AND :to_date ORDER BY entry_date" ); $stmt->execute([':cid' => $company_id, ':from_date' => $from_date, ':to_date' => $to_date]); foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { $rowQualityId = (int)($row['quality_id'] ?? 0); $lines = json_decode((string)($row['lines_json'] ?? ''), true); if (!is_array($lines)) { continue; } foreach ($lines as $line) { $lineKarigarId = (int)($line['karigar_id'] ?? $line['karigar'] ?? $line['employee_id'] ?? 0); if ($lineKarigarId !== $karigar_id) { continue; } $meter = (float)($line['meter'] ?? 0); if ($meter <= 0) { continue; } $qualityId = (int)($line['quality_id'] ?? $rowQualityId); if (!isset($quality_summary[$qualityId])) { $quality_summary[$qualityId] = ['meters' => 0.0, 'amount' => 0.0]; } $rate = isset($quality_map[$qualityId]) ? (float)$quality_map[$qualityId]['rate'] : 0.0; $quality_summary[$qualityId]['meters'] += $meter; $quality_summary[$qualityId]['amount'] += $meter * $rate; } } } catch (Throwable $e) { } $gross = 0.0; foreach ($quality_summary as $qualityRow) { $gross += (float)$qualityRow['amount']; } $extra = fetch_scalar_sum( $pdo, "SELECT COALESCE(SUM(amount), 0) FROM karigar_extra WHERE company_id = ? AND karigar_id = ? AND entry_date BETWEEN ? AND ?", [$company_id, $karigar_id, $from_date, $to_date] ); $deduction = fetch_scalar_sum( $pdo, "SELECT COALESCE(SUM(amount), 0) FROM karigar_deduction WHERE company_id = ? AND karigar_id = ? AND entry_date BETWEEN ? AND ? AND (notes NOT LIKE '%| Payment Date:%')", [$company_id, $karigar_id, $from_date, $to_date] ); $advance = fetch_scalar_sum( $pdo, "SELECT COALESCE(SUM(amount), 0) FROM karigar_advance WHERE company_id = ? AND karigar_id = ? AND date BETWEEN ? AND ?", [$company_id, $karigar_id, $from_date, $to_date] ); $net = $gross + $extra - $deduction - $advance; $displayName = trim((string)($profile['entry_name'] ?? $profile['karigar_name'] ?? $u['name'] ?? 'Karigar')); // Karigar pages should hide the main ERP menu $hide_main_menu = true; require_once __DIR__ . '/../partials/header.php'; ?> <style> .karigar-salary-wrap{max-width:1040px;margin:24px auto;padding:0 12px} .karigar-salary-head{background:linear-gradient(135deg,#483d8b 0%,#6b5fd1 100%);color:#fff;border-radius:22px;padding:22px 24px;box-shadow:0 18px 34px rgba(72,61,139,.16)} .karigar-salary-head h3{margin:0 0 6px;font-size:28px} .karigar-salary-head p{margin:0;color:rgba(255,255,255,.82)} .karigar-salary-card{background:#fff;border:1px solid #dddff0;border-radius:20px;box-shadow:0 14px 28px rgba(72,61,139,.08);padding:20px;margin-top:18px} .karigar-salary-filter{display:flex;gap:12px;flex-wrap:wrap;align-items:end;margin-bottom:16px} .karigar-salary-filter label{display:block;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6d6890;margin-bottom:6px} .karigar-salary-filter select{min-width:120px;padding:10px 12px;border:1px solid #cbcce6;border-radius:12px} .karigar-salary-btn{display:inline-block;text-decoration:none;border:0;background:#4f46b8;color:#fff;padding:10px 16px;border-radius:12px;cursor:pointer} .karigar-salary-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin:18px 0} .karigar-salary-stat{background:#f7f7fc;border:1px solid #dddff0;border-radius:16px;padding:14px 16px} .karigar-salary-stat .label{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#726f89;margin-bottom:8px} .karigar-salary-stat .value{font-size:22px;font-weight:700;color:#2e2a51} .karigar-salary-table{width:100%;border-collapse:collapse} .karigar-salary-table th,.karigar-salary-table td{border:1px solid #dddff0;padding:10px 12px;text-align:left} .karigar-salary-table th{background:#f3f2fb;color:#2e2a51} .karigar-salary-actions{margin-top:16px;display:flex;gap:10px;flex-wrap:wrap} </style> <div class="karigar-salary-wrap"> <div class="karigar-salary-head"> <h3>Salary</h3> <p><?= h($displayName) ?> ki apni salary summary</p> </div> <div class="karigar-salary-card"> <form method="get" class="karigar-salary-filter"> <div> <label>Month</label> <select name="month"> <?php for ($m = 1; $m <= 12; $m++): ?> <option value="<?= h($m) ?>" <?= $month === $m ? 'selected' : '' ?>><?= h(date('M', mktime(0, 0, 0, $m, 1, $year))) ?></option> <?php endfor; ?> </select> </div> <div> <label>Period</label> <select name="half"> <option value="1" <?= $half === '1' ? 'selected' : '' ?>>1 to 15</option> <option value="2" <?= $half === '2' ? 'selected' : '' ?>>16 to End</option> <option value="F" <?= $half === 'F' ? 'selected' : '' ?>>Full Month</option> </select> </div> <div> <label>Year</label> <select name="year"> <?php for ($y = date('Y') - 2; $y <= date('Y') + 1; $y++): ?> <option value="<?= h($y) ?>" <?= $year === (int)$y ? 'selected' : '' ?>><?= h($y) ?></option> <?php endfor; ?> </select> </div> <div> <button class="karigar-salary-btn" type="submit">Show Salary</button> </div> </form> <div class="karigar-salary-stats"> <div class="karigar-salary-stat"> <div class="label">Gross</div> <div class="value"><?= h(clean_num($gross)) ?></div> </div> <div class="karigar-salary-stat"> <div class="label">Extra</div> <div class="value"><?= h(clean_num($extra)) ?></div> </div> <div class="karigar-salary-stat"> <div class="label">Deduction</div> <div class="value"><?= h(clean_num($deduction)) ?></div> </div> <div class="karigar-salary-stat"> <div class="label">Advance</div> <div class="value"><?= h(clean_num($advance)) ?></div> </div> <div class="karigar-salary-stat"> <div class="label">Net Salary</div> <div class="value"><?= h(clean_num($net)) ?></div> </div> </div> <table class="karigar-salary-table"> <thead> <tr> <th>Quality</th> <th>Meters</th> <th>Rate</th> <th>Amount</th> </tr> </thead> <tbody> <?php if (!$quality_summary): ?> <tr> <td colspan="4">Is period me salary data nahi mila.</td> </tr> <?php else: ?> <?php foreach ($quality_summary as $qualityId => $row): ?> <tr> <td><?= h($quality_map[$qualityId]['name'] ?? ('Q' . $qualityId)) ?></td> <td><?= h(clean_num($row['meters'])) ?></td> <td><?= h(clean_num($quality_map[$qualityId]['rate'] ?? 0)) ?></td> <td><?= h(clean_num($row['amount'])) ?></td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> <div class="karigar-salary-actions"> <a class="karigar-salary-btn" href="dashboard.php">Back to Dashboard</a> <a class="karigar-salary-btn" href="patia.php">Open Patiya</a> <a class="karigar-salary-btn" href="bank.php">Bank Detail</a> </div> </div> </div> <?php require_once __DIR__ . '/../partials/footer.php'; ?>