isEmpty()) { $users = User::factory(5)->create(); } // Generate payroll for the last 6 months $months = collect(range(0, 5))->map(function ($i) { return Carbon::now()->subMonths($i)->format('Y-m'); }); $currentMonth = Carbon::now()->format('Y-m'); foreach ($users as $user) { foreach ($months as $month) { if (Payroll::where('user_id', $user->id)->where('period_month', $month)->exists()) { continue; } $payroll = Payroll::factory()->create([ 'user_id' => $user->id, 'period_month' => $month, 'is_paid' => $month !== $currentMonth, ]); PayrollAdjustment::factory(rand(1, 3))->create([ 'payroll_id' => $payroll->id, ]); $bonus = $payroll->adjustments()->where('type', SalaryAdjustmentType::BONUS)->sum('amount'); $deduction = $payroll->adjustments()->where('type', SalaryAdjustmentType::DEDUCTION)->sum('amount'); $payroll->update([ 'bonus' => $bonus, 'deduction' => $deduction, 'total_salary' => $payroll->base_salary + $bonus - $deduction, ]); } } } }