« Back to History
warper_salary_total.php
|
20260722_120325.php
Initial Domain Snapshot
Copy Code
<?php /** * Warper Salary – FINAL NET_PAY total * Source logic: warper_salary_report.php (Strictly Synced) */ function get_warper_salary_total( PDO $pdo, int $company_id, string $month_key, // YYYY-MM-01 string $period = 'H2' // H1 | H2 ): float { $period = strtoupper($period)==='H1' ? 'H1' : 'H2'; if ($period === 'H1') { $from = date('Y-m-01', strtotime($month_key)); $to = date('Y-m-15', strtotime($month_key)); } else { $from = date('Y-m-16', strtotime($month_key)); $to = date('Y-m-t', strtotime($month_key)); } /* Base rows: warper × quality taka directly from company_beam_stock matching report logic */ $st = $pdo->prepare(" SELECT cbs.warper_id AS employee_id, COALESCE(SUM( CASE WHEN cbs.taka IS NULL OR cbs.taka='' THEN 0 ELSE CAST(cbs.taka AS DECIMAL(12,2)) END ),0) AS total_taka, COALESCE(q.warping_rate,0) AS rate FROM company_beam_stock cbs JOIN company_employee_master cem ON cem.id = cbs.warper_id AND cem.company_id = cbs.company_id AND cem.is_active = 1 AND cem.department_id = 22 LEFT JOIN beam_qualities q ON q.id = cbs.quality_id AND q.company_id = cbs.company_id WHERE cbs.company_id = :cid AND cbs.warp_date BETWEEN :from AND :to AND cbs.warper_id IS NOT NULL GROUP BY cbs.warper_id, q.warping_rate "); $st->execute([ ':cid' => $company_id, ':from' => $from, ':to' => $to ]); $rows = $st->fetchAll(PDO::FETCH_ASSOC); /* Gross per employee */ $grossBy = []; foreach ($rows as $r){ $eid = (int)$r['employee_id']; $grossBy[$eid] = ($grossBy[$eid] ?? 0) + ((float)$r['total_taka'] * (float)$r['rate']); } /* Extras */ $extraBy = []; $st = $pdo->prepare(" SELECT employee_id, COALESCE(SUM(amount),0) s FROM employee_extra WHERE company_id = ? AND entry_date BETWEEN ? AND ? GROUP BY employee_id "); $st->execute([$company_id, $from, $to]); foreach ($st as $r){ $extraBy[(int)$r['employee_id']] = (float)$r['s']; } /* Deductions */ $dedBy = []; $st = $pdo->prepare(" SELECT employee_id, COALESCE(SUM(amount),0) s FROM employee_deduction WHERE company_id = ? AND entry_date BETWEEN ? AND ? GROUP BY employee_id "); $st->execute([$company_id, $from, $to]); foreach ($st as $r){ $dedBy[(int)$r['employee_id']] = (float)$r['s']; } /* Advances */ $advBy = []; $st = $pdo->prepare(" SELECT employee_id, COALESCE(SUM(amount),0) s FROM employee_advance WHERE company_id = ? AND date BETWEEN ? AND ? GROUP BY employee_id "); $st->execute([$company_id, $from, $to]); foreach ($st as $r){ $advBy[(int)$r['employee_id']] = (float)$r['s']; } /* Final NET total matching the report split columns formula */ $total = 0.0; foreach ($grossBy as $eid => $gross){ $net = $gross + ($extraBy[$eid] ?? 0) - ($dedBy[$eid] ?? 0) - ($advBy[$eid] ?? 0); $total += $net; } return round($total, 2); }