info('Updating cooperation statuses...'); $today = Carbon::today(); Log::info('Running UpdateCooperationStatusJob at '.now()); // 1. PENDING -> ASSIGNMENT (final_submission_date) // Automatically reject media that haven't responded $rejectedPendingMedia = CooperationMedia::whereHas('cooperation', function ($query) use ($today) { $query->pending()->whereDate('final_submission_date', '<', $today); }) ->pending() ->update(['status' => ApprovalStatus::REJECTED]); if ($rejectedPendingMedia > 0) { Log::info("Updated {$rejectedPendingMedia} media in PENDING cooperations to REJECTED because they didn't respond before final_submission_date."); } $updatedPending = Cooperation::pending() ->whereDate('final_submission_date', '<', $today) ->update(['status' => CooperationStatus::ASSIGNMENT]); if ($updatedPending > 0) { Log::info("Updated {$updatedPending} cooperations from PENDING to ASSIGNMENT."); } // 2. ASSIGNMENT -> VERIFICATION (taskAssignment->end_date) // Automatically reject media that haven't responded to the invitation $rejectedMedia = CooperationMedia::whereHas('cooperation', function ($query) use ($today) { $query->assignment()->whereHas('taskAssignment', function ($subQuery) use ($today) { $subQuery->whereDate('end_date', '<', $today); }); }) ->pending() ->update(['status' => ApprovalStatus::REJECTED]); if ($rejectedMedia > 0) { Log::info("Updated {$rejectedMedia} media assignments to REJECTED because they didn't respond before the task deadline."); } $updatedAssignment = Cooperation::where('status', CooperationStatus::ASSIGNMENT) ->whereHas('taskAssignment', function ($query) use ($today) { $query->whereDate('end_date', '<', $today); }) ->update(['status' => CooperationStatus::VERIFICATION]); if ($updatedAssignment > 0) { Log::info("Updated {$updatedAssignment} cooperations from ASSIGNMENT to VERIFICATION."); } $this->info('Cooperation statuses updated successfully.'); return Command::SUCCESS; } }