isLocal()) { $this->error('This command can only be run in local environment.'); return Command::FAILURE; } $cooperationId = $this->argument('id'); // Interactive Selection if ID not provided if (! $cooperationId) { $cooperations = Cooperation::whereIn('status', [ CooperationStatus::PENDING, CooperationStatus::ASSIGNMENT, ])->get(); if ($cooperations->isEmpty()) { $this->warn('No active cooperations (PENDING or ASSIGNMENT) found to simulate.'); return Command::SUCCESS; } $choices = []; foreach ($cooperations as $c) { // Handle enum value safely $status = $c->status instanceof \UnitEnum ? $c->status->value : $c->status; $choices[$c->id] = "[ID: {$c->id}] {$c->title} ({$status})"; } $choice = $this->choice( 'Which cooperation do you want to fast-forward?', $choices ); // Retrieve the ID associated with the choice $cooperationId = array_search($choice, $choices); } $cooperation = Cooperation::find($cooperationId); if (! $cooperation) { $this->error("Cooperation with ID {$cooperationId} not found."); return Command::FAILURE; } $this->info("Simulating time passage for: {$cooperation->title}"); if ($cooperation->status === CooperationStatus::PENDING) { // 1. Move dates to past $cooperation->update([ 'initial_submission_date' => now()->subDays(8), 'final_submission_date' => now()->subDay(), ]); $this->info('Moved dates to the past (Final Submission: Yesterday).'); // 2. Reject unresponsive media $rejectedCount = CooperationMedia::where('cooperation_id', $cooperation->id) ->pending() ->update(['status' => ApprovalStatus::REJECTED]); if ($rejectedCount > 0) { $this->info("Rejected {$rejectedCount} media that didn't respond."); } // 3. Update Status $cooperation->update(['status' => CooperationStatus::ASSIGNMENT]); $this->info('Status transitioned to ASSIGNMENT.'); } elseif ($cooperation->status === CooperationStatus::ASSIGNMENT) { if ($cooperation->taskAssignment) { // 1. Move task dates to past $cooperation->taskAssignment->update([ 'start_date' => now()->subDays(8), 'end_date' => now()->subDay(), ]); $this->info('Moved task dates to the past (Task End: Yesterday).'); // 2. Reject unresponsive media (assignments) $rejectedCount = CooperationMedia::where('cooperation_id', $cooperation->id) ->pending() ->update(['status' => ApprovalStatus::REJECTED]); if ($rejectedCount > 0) { $this->info("Rejected {$rejectedCount} media that didn't respond to assignment."); } // 3. Update Status $cooperation->update(['status' => CooperationStatus::VERIFICATION]); $this->info('Status transitioned to VERIFICATION.'); } else { $this->error('This ASSIGNMENT cooperation has no Task Assignment yet.'); } } else { $status = $cooperation->status instanceof \UnitEnum ? $cooperation->status->value : $cooperation->status; $this->warn("Cooperation status '{$status}' is not supported for simulation. Only PENDING and ASSIGNMENT are supported."); } return Command::SUCCESS; } }