argument('period') ?? Carbon::now()->format('Y-m'); $periodMonthFormatted = Carbon::parse($periodMonth)->translatedFormat('F Y'); $users = User::with('profile')->get(); $count = 0; try { DB::transaction(function () use ($users, $periodMonth, &$count) { foreach ($users as $user) { $exists = Payroll::where('user_id', $user->id) ->where('period_month', $periodMonth) ->exists(); if (! $exists) { $baseSalary = $user->profile?->base_salary ?? 0; Payroll::create([ 'user_id' => $user->id, 'period_month' => $periodMonth, 'base_salary' => $baseSalary, 'bonus' => 0, 'deduction' => 0, 'total_salary' => $baseSalary, 'is_paid' => false, ]); $count++; } } }); } catch (Throwable $e) { LogHelper::logException($e, 'Payroll generate failed', [ 'period' => $periodMonth, ]); $this->error('Terjadi kesalahan, silakan hubungi pengembang'); return; } $this->info("$count data penggajian berhasil digenerate untuk periode $periodMonthFormatted."); } }