File manager - Edit - /var/www/html/portal/database/seeders/RemoveOrgaosMigracaoProjetosSeeder.php
Back
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; use App\Models\Structure; /** * Seeder para remover órgãos criados pela migração de Projetos e Programas. * * Identifica órgãos criados pela migração através das seguintes características: * - type = 'SECRETARIA' * - address = '' (vazio) * - phoneNumber = '' (vazio) * - email1 = 'contato@angra.rj.gov.br' (email genérico) * - manager = '' (vazio) * - structure_id = null * * Execute: php artisan db:seed --class=RemoveOrgaosMigracaoProjetosSeeder */ class RemoveOrgaosMigracaoProjetosSeeder extends Seeder { public function run(): void { $this->command->info('==========================================='); $this->command->info('REMOVENDO ÓRGÃOS CRIADOS PELA MIGRAÇÃO'); $this->command->info('==========================================='); // Identificar órgãos criados pela migração $orgaosParaRemover = Structure::where('type', 'SECRETARIA') ->where('address', '') ->where('phoneNumber', '') ->where('email1', 'contato@angra.rj.gov.br') ->where('manager', '') ->whereNull('structure_id') ->get(); if ($orgaosParaRemover->isEmpty()) { $this->command->info('Nenhum órgão criado pela migração foi encontrado.'); return; } $this->command->info(''); $this->command->info("Encontrados {$orgaosParaRemover->count()} órgãos criados pela migração:"); foreach ($orgaosParaRemover as $orgao) { $this->command->info(" - {$orgao->abbreviation} - {$orgao->name} (ID: {$orgao->id})"); } $this->command->warn(''); $this->command->warn('ATENÇÃO: Esta operação irá remover os órgãos listados acima!'); if (!$this->command->confirm('Deseja continuar?', false)) { $this->command->info('Operação cancelada.'); return; } DB::beginTransaction(); try { $idsParaRemover = $orgaosParaRemover->pluck('id')->toArray(); // Verificar se algum desses órgãos está sendo usado em projetos $projetosUsandoOrgaos = DB::table('projects_programs') ->whereIn('gestor_structure_id', $idsParaRemover) ->count(); $orgaosEnvolvidos = DB::table('project_program_orgaos') ->whereIn('structure_id', $idsParaRemover) ->count(); if ($projetosUsandoOrgaos > 0 || $orgaosEnvolvidos > 0) { $this->command->warn(''); $this->command->warn("⚠ ATENÇÃO: Estes órgãos estão sendo usados!"); $this->command->warn(" - {$projetosUsandoOrgaos} projetos usam estes órgãos como gestores"); $this->command->warn(" - {$orgaosEnvolvidos} relacionamentos de órgãos envolvidos"); if (!$this->command->confirm('Deseja remover mesmo assim? (Isso pode causar problemas nos projetos)', false)) { $this->command->info('Operação cancelada.'); DB::rollBack(); return; } // Remover relacionamentos primeiro if ($orgaosEnvolvidos > 0) { DB::table('project_program_orgaos') ->whereIn('structure_id', $idsParaRemover) ->delete(); $this->command->info("✓ Removidos {$orgaosEnvolvidos} relacionamentos de órgãos envolvidos"); } // Atualizar projetos para usar PMAR como gestor padrão if ($projetosUsandoOrgaos > 0) { // Buscar PMAR (ou usar o ID padrão do config) $pmarId = Structure::where('abbreviation', 'PMAR')->value('id'); if (!$pmarId) { // Fallback: usar o ID padrão do config $pmarId = config('legacy_orgaos_mapping.default_orgao_id'); } if ($pmarId) { DB::table('projects_programs') ->whereIn('gestor_structure_id', $idsParaRemover) ->update(['gestor_structure_id' => $pmarId]); $this->command->info("✓ Atualizados {$projetosUsandoOrgaos} projetos (gestor definido como PMAR)"); } else { $this->command->error("⚠ ERRO: Não foi possível encontrar o órgão PMAR!"); $this->command->error(" Os projetos não podem ser atualizados sem um gestor válido."); throw new \Exception("Órgão PMAR não encontrado. Não é possível remover os órgãos sem definir um gestor padrão."); } } } // Remover os órgãos $removidos = Structure::whereIn('id', $idsParaRemover)->delete(); // Limpar cache cache()->forget('legacy_orgao_map'); DB::commit(); $this->command->info(''); $this->command->info('==========================================='); $this->command->info('Remoção concluída com sucesso!'); $this->command->info('==========================================='); $this->command->info("✓ Removidos {$removidos} órgãos criados pela migração"); $this->command->info("✓ Cache limpo"); } catch (\Exception $e) { DB::rollBack(); $this->command->error("Erro ao remover órgãos: " . $e->getMessage()); $this->command->error("Stack trace: " . $e->getTraceAsString()); throw $e; } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.07 |
proxy
|
phpinfo
|
Settings