searchable(), Column::make('Bulan', 'period_month') ->format(fn ($value) => formatDate($value, 'F Y')) ->searchable(), Column::make('Gaji Pokok', 'base_salary') ->format(fn ($value) => currency($value, 'Rp')) ->searchable(), Column::make('Bonus', 'bonus') ->format(fn ($value) => currency($value, 'Rp')) ->searchable(), Column::make('Potongan', 'deduction') ->format(fn ($value) => currency($value, 'Rp')) ->searchable(), Column::make('Total Gaji', 'total_salary') ->format(fn ($value) => currency($value, 'Rp')) ->searchable(), ArrayColumn::make('Rincian') ->data( fn ($value, $row) => $row->adjustments ->where('payroll_id', $row->id) ->map(fn ($item) => [ 'color' => $item->type->value == SalaryAdjustmentType::DEDUCTION->value ? 'text-red-500' : 'text-green-500', 'amount' => currency($item->amount, 'Rp'), 'description' => $item->description, 'id' => $item->id, ])->toArray() ) ->outputFormat(function ($index, $value) { return Blade::render('
{{ $value[\'amount\'] }}
{{ $value[\'description\'] }}
', ['value' => $value]); }) ->flexCol(['class' => 'flex-col gap-3']), Column::make('Status') ->label(fn ($row) => Blade::render('
{{ $row->is_paid->label() }} {{ $row->paid_at ? formatDateTime($row->paid_at) : "-" }}
', ['row' => $row])) ->html(), Column::make('Aksi') ->label(function ($row) { return view('components.actions.table.export-pdf', [ 'id' => $row->hash, ])->render(); }) ->html(), ]; } public function builder(): Builder { return Payroll::select( 'payrolls.id', 'payrolls.user_id', 'period_month', 'base_salary', 'bonus', 'deduction', 'total_salary', 'is_paid', 'paid_at', 'payrolls.created_at' ) ->where('period_month', '!=', now()->format('Y-m')) ->with(['user', 'user.employee']); } }