Use Carbon; Salary Register @php $totalColumns = count($payrollComponentsBasic) + count($payrollComponentsDeduction) + 10; @endphp @foreach ($payrollComponentsBasic as $component) @endforeach @foreach ($payrollComponentsDeduction as $component) @endforeach @php $index = 1; $grandTotals = 0; $totalAllowance = 0; $totalDeduction = 0; $totalAllowanceRate = 0; $totalDeductionRate = 0; $earningColumnTotals = []; $earningRateColumnTotals = []; $deductionColumnTotals = []; $deductionRateColumnTotals = []; $earningArrearColumnTotals = []; $deductionArrearColumnTotals = []; $totalAllowanceArrear = 0; $totalDeductionArrear = 0; $grandArrearTotals = 0; foreach ($payrollComponentsBasic as $component) { $earningColumnTotals[$component->id] = 0; $earningRateColumnTotals[$component->id] = 0; $earningArrearColumnTotals[$component->id] = 0; } foreach ($payrollComponentsDeduction as $component) { $deductionColumnTotals[$component->id] = 0; $deductionRateColumnTotals[$component->id] = 0; $deductionArrearColumnTotals[$component->id] = 0; } @endphp @foreach ($employees as $employee) @php $payrollEmployeeTempStructures = isset($employee->employeeCtcMaster->payrollEmployeeTempStructures) ? $employee->employeeCtcMaster->payrollEmployeeTempStructures->groupBy('type_id')->toArray() : []; $slipLogs = []; if (isset($employee->salarySlip->slipLogs) && !empty($employee->salarySlip->slipLogs)) { $slipLogs = $employee->salarySlip->slipLogs->pluck('calculate_salary', 'type_id'); } $total_paid_days = $employee->salarySlip->total_paid_days ?? 0; $week_offs = $employee->salarySlip->week_offs ?? 0; $empHolidays = $employee->salarySlip->holidays ?? 0; $employeeTotalLeave = 0; $employeeLeaves = $employee->attendanceSummary ->groupBy('leave_type') ->map(function ($item) { return $item->sum(function ($item1) { return ($item1->first_half_status == 'L' ? ($item1->is_short_leave == '1' ? 1 : 0.5) : 0) + ($item1->second_half_status == 'L' ? ($item1->is_short_leave == '1' ? 1 : 0.5) : 0); }); }); foreach ($leaveTypes as $leave) { $employeeTotalLeave += $employeeLeaves[$leave->alias] ?? 0; } $employeeTotalAllowance = 0; $employeeTotalAllowanceRate = 0; $employeeTotalDeduction = 0; $employeeTotalDeductionRate = 0; $employeeTotalArrearAllowance = 0; $employeeTotalArrearDeduction = 0; // RATE values $rateEarningVals = []; foreach ($payrollComponentsBasic as $component) { $rate = isset($payrollEmployeeTempStructures[$component->id][0]) ? $payrollEmployeeTempStructures[$component->id][0]['calculate_salary'] : 0; $employeeTotalAllowanceRate += $rate; $totalAllowanceRate += $rate; $earningRateColumnTotals[$component->id] += round($rate); $rateEarningVals[$component->id] = round($rate); } $rateDeductionVals = []; foreach ($payrollComponentsDeduction as $component) { $rate = isset($payrollEmployeeTempStructures[$component->id][0]) ? $payrollEmployeeTempStructures[$component->id][0]['calculate_salary'] : 0; $employeeTotalDeductionRate += $rate; $totalDeductionRate += $rate; $deductionRateColumnTotals[$component->id] += round($rate); $rateDeductionVals[$component->id] = round($rate); } // EARN values $earnEarningVals = []; foreach ($payrollComponentsBasic as $component) { $val = isset($slipLogs[$component->id]) ? $slipLogs[$component->id] : 0; $employeeTotalAllowance += $val; $totalAllowance += $val; $earningColumnTotals[$component->id] += round($val); $earnEarningVals[$component->id] = round($val); } $earnDeductionVals = []; foreach ($payrollComponentsDeduction as $component) { $val = isset($slipLogs[$component->id]) ? $slipLogs[$component->id] : 0; $employeeTotalDeduction += $val; $totalDeduction += $val; $deductionColumnTotals[$component->id] += round($val); $earnDeductionVals[$component->id] = round($val); } // ARREAR values $arrearEarningVals = []; foreach ($payrollComponentsBasic as $component) { $arrearVal = isset($employee->salarySlip->slipLogs) ? optional( $employee->salarySlip->slipLogs ->where('type_id', $component->id) ->first() )->arrear_salary ?? 0 : 0; $employeeTotalArrearAllowance += $arrearVal; // GRAND TOTALS $earningArrearColumnTotals[$component->id] += round($arrearVal); $arrearEarningVals[$component->id] = round($arrearVal); } $totalAllowanceArrear += round($employeeTotalArrearAllowance); $arrearDeductionVals = []; foreach ($payrollComponentsDeduction as $component) { $arrearVal = isset($employee->salarySlip->slipLogs) ? optional( $employee->salarySlip->slipLogs ->where('type_id', $component->id) ->first() )->arrear_salary ?? 0 : 0; $employeeTotalArrearDeduction += $arrearVal; // GRAND TOTALS $deductionArrearColumnTotals[$component->id] += round($arrearVal); $arrearDeductionVals[$component->id] = round($arrearVal); } $totalDeductionArrear += round($employeeTotalArrearDeduction); $employeeNetArrear = $employeeTotalArrearAllowance - $employeeTotalArrearDeduction; $grandArrearTotals += round($employeeNetArrear); // TOTAL row values $totalEarningVals = []; foreach ($payrollComponentsBasic as $component) { $totalEarningVals[$component->id] = $earnEarningVals[$component->id] + $arrearEarningVals[$component->id]; } $totalDeductionVals = []; foreach ($payrollComponentsDeduction as $component) { $totalDeductionVals[$component->id] = $earnDeductionVals[$component->id] + $arrearDeductionVals[$component->id]; } $employeeFinalNetPay = ( $employeeTotalAllowance + $employeeTotalArrearAllowance ) - ( $employeeTotalDeduction + $employeeTotalArrearDeduction ); $grandTotals += round($employeeFinalNetPay); @endphp {{-- RATE ROW --}} {{--Serial Number --}} {{--Employee Code --}} {{-- Employee Details --}} {{--Leave Details --}} {{-- Attendance --}} {{-- Type --}} {{-- Earnings Rate --}} @foreach ($payrollComponentsBasic as $component) @endforeach {{-- Deduction Rate --}} @foreach ($payrollComponentsDeduction as $component) @endforeach {{-- Net Pay --}} {{-- Signature --}} {{-- EARN ROW --}} {{-- Earnings --}} @foreach ($payrollComponentsBasic as $component) @endforeach {{-- Deductions --}} @foreach ($payrollComponentsDeduction as $component) @endforeach {{-- ARREAR ROW --}} {{-- Earnings Arrear --}} @foreach ($payrollComponentsBasic as $component) @endforeach {{-- Deduction Arrear --}} @foreach ($payrollComponentsDeduction as $component) @endforeach {{-- Total --}} {{-- Earnings --}} @foreach ($payrollComponentsBasic as $component) @endforeach {{-- Deductions --}} @foreach ($payrollComponentsDeduction as $component) @endforeach @endforeach {{-- GRAND TOTAL (Rate/Earn./Arrear/Total stacked in one atomic row) --}} {{-- Earnings --}} @foreach ($payrollComponentsBasic as $component) @php $finalTotal = ($earningColumnTotals[$component->id] ?? 0) + ($earningArrearColumnTotals[$component->id] ?? 0); @endphp @endforeach {{-- Total Earnings --}} {{-- Deductions --}} @foreach ($payrollComponentsDeduction as $component) @php $finalTotal = ($deductionColumnTotals[$component->id] ?? 0) + ($deductionArrearColumnTotals[$component->id] ?? 0); @endphp @endforeach {{-- Total Deduction --}} {{-- Net Pay --}} {{-- Signature --}}
REGISTER OF PAYMENT OF WAGES FORM XI
PF Code No. : HR/GNGGN/28424
ESIC Code No. : 69000418510000408
{{ strtoupper($organization->name) }}
SALARY REGISTER FOR {{ \Carbon\Carbon::create()->month($month)->format('F') }} - {{ $year }}
RATE OF SALARY / EARNINGS DEDUCTION
S.No. Employee Code

DOJ
Emp. Name
Father/Husband Name
Department
Designation
Leave Paydays
{{ $component->name }}
Total Earning
{{ $component->name }}
Total Deduction Net Pay Sign.
{{ $index++ }} {{ $employee->employee_code }}

{{ $employee->date_of_joining }}
{{ $employee->name }}
{{ $employee->father_name }}
{{ @$employee->department->name }}
{{ @$employee->designation->name }}
@foreach ($leaveTypes as $leave) @php $leaveVal = $employeeLeaves[$leave->alias] ?? 0; @endphp @endforeach
{{ strtoupper($leave->alias) }} {{ $leaveVal }}
P {{ $total_paid_days - ($employeeTotalLeave + $week_offs) }}
H {{ $empHolidays }}
WO {{ $week_offs }}
PR {{ $total_paid_days }}
Rate {{ $rateEarningVals[$component->id] }} {{ round($employeeTotalAllowanceRate) }} {{ $rateDeductionVals[$component->id] }} {{ round($employeeTotalDeductionRate) }} {{ round($employeeFinalNetPay ?? 0) }} Bank
Earn. {{ $earnEarningVals[$component->id] }} {{ round($employeeTotalAllowance) }} {{ $earnDeductionVals[$component->id] }} {{ round($employeeTotalDeduction) }}
Arrear {{ $arrearEarningVals[$component->id] }} {{ round($employeeTotalArrearAllowance) }} {{ $arrearDeductionVals[$component->id] }} {{ round($employeeTotalArrearDeduction) }}
Total {{ round($totalEarningVals[$component->id]) }} {{ round($employeeTotalAllowance + $employeeTotalArrearAllowance) }} {{ round($totalDeductionVals[$component->id]) }} {{ round($employeeTotalDeduction + $employeeTotalArrearDeduction) }}
{{-- GRAND TOTAL SECTION (kept out of the main table's tfoot so the repeating thead doesn't get reprinted on a trailing page that has no employee rows) --}}


@php $grandTotals = []; foreach ($payrollComponentsDerived as $component) { $grandTotals[$component->id] = 0; } foreach ($employees as $employee) { $salarySlip = $employee->salarySlip; if (!$salarySlip) { continue; } $slipLogs = $salarySlip->slipLogs->keyBy('type_id'); foreach ($payrollComponentsDerived as $component) { $amount = optional( $slipLogs->get($component->id) )->calculate_salary ?? 0; $grandTotals[$component->id] += $amount; } } @endphp {{-- @foreach ($payrollComponentsDerived as $component) @endforeach
Grand Total Summary
{{ $component->name }} {{ number_format($grandTotals[$component->id] ?? 0, 2) }}
--}}
(Prepared By) (Checked By) (Authorised By) (Approved By)