diff --git a/Docker/Dev/docker-compose.yml b/Docker/Dev/docker-compose.yml index ac54701..115cc95 100644 --- a/Docker/Dev/docker-compose.yml +++ b/Docker/Dev/docker-compose.yml @@ -51,6 +51,8 @@ services: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_USER: ${DB_USERNAME} + ports: + - "${DB_FORWARD_PORT}:3306" volumes: - mysql_data:/var/lib/mysql networks: diff --git a/app/Http/Controllers/Repuve/CancellationController.php b/app/Http/Controllers/Repuve/CancellationController.php index 7f2e062..e7508cf 100644 --- a/app/Http/Controllers/Repuve/CancellationController.php +++ b/app/Http/Controllers/Repuve/CancellationController.php @@ -350,8 +350,8 @@ public function cancelarTagNoAsignado(Request $request) 'motivo' => ($lastCancellation->cancellationReason && isset($lastCancellation->cancellationReason->name)) ? $lastCancellation->cancellationReason->name : 'No especificado', - 'operador' => ($lastCancellation->cancelledBy && isset($lastCancellation->cancelledBy->name)) - ? $lastCancellation->cancelledBy->name + 'operador' => ($lastCancellation->cancelledBy && isset($lastCancellation->cancelledBy->full_name)) + ? $lastCancellation->cancelledBy->full_name : 'Sistema', 'modulo' => ($tag->module && isset($tag->module->name)) ? $tag->module->name : 'No especificado', 'ubicacion' => ($tag->module && isset($tag->module->address)) ? $tag->module->address : 'No especificado', diff --git a/app/Http/Controllers/Repuve/ModuleController.php b/app/Http/Controllers/Repuve/ModuleController.php index 58629b5..3f81571 100644 --- a/app/Http/Controllers/Repuve/ModuleController.php +++ b/app/Http/Controllers/Repuve/ModuleController.php @@ -77,8 +77,6 @@ public function store(ModuleStoreRequest $request) 'responsible_id' => $request->input('responsible_id'), 'municipality_id' => $request->input('municipality_id'), 'address' => $request->input('address'), - 'colony' => $request->input('colony'), - 'cp' => $request->input('cp'), 'longitude' => $request->input('longitude'), 'latitude' => $request->input('latitude'), 'status' => $request->input('status', true), // Por defecto activo @@ -99,8 +97,6 @@ public function store(ModuleStoreRequest $request) 'name' => $module->municipality->name, ] : null, 'address' => $module->address, - 'colony' => $module->colony, - 'cp' => $module->cp, 'longitude' => $module->longitude, 'latitude' => $module->latitude, 'status' => $module->status ? 'Activo' : 'Inactivo', @@ -170,8 +166,6 @@ public function update(ModuleUpdateRequest $request, int $id) 'name' => $module->municipality->name, ] : null, 'address' => $module->address, - 'colony' => $module->colony, - 'cp' => $module->cp, 'longitude' => $module->longitude, 'latitude' => $module->latitude, 'status' => $module->status ? 'Activo' : 'Inactivo', diff --git a/app/Http/Controllers/Repuve/RecordController.php b/app/Http/Controllers/Repuve/RecordController.php index 7127d1b..11e6c4c 100644 --- a/app/Http/Controllers/Repuve/RecordController.php +++ b/app/Http/Controllers/Repuve/RecordController.php @@ -477,7 +477,7 @@ private function cancellationData(Tag $tag) if ($tagCancellationLog) { $data['fecha'] = $tagCancellationLog->cancellation_at->format('d/m/Y'); $data['motivo'] = $tagCancellationLog->cancellationReason->name ?? 'No especificado'; - $data['operador'] = $tagCancellationLog->cancelledBy->name ?? 'Sistema'; + $data['operador'] = $tagCancellationLog->cancelledBy->full_name ?? 'Sistema'; // Extraer datos adicionales de las observaciones $this->extractAdditionalDataFromObservations($tagCancellationLog->cancellation_observations, $data); @@ -503,7 +503,7 @@ private function cancellationData(Tag $tag) if ($vehicleTagLog) { $data['motivo'] = $vehicleTagLog->cancellationReason->name ?? 'No especificado'; - $data['operador'] = $vehicleTagLog->cancelledBy->name ?? 'Sistema'; + $data['operador'] = $vehicleTagLog->cancelledBy->full_name ?? 'Sistema'; // Cargar módulo del cual el usuario es responsable if ($vehicleTagLog->cancelledBy) { diff --git a/app/Http/Requests/Repuve/ModuleStoreRequest.php b/app/Http/Requests/Repuve/ModuleStoreRequest.php index e01b3bc..c4771c0 100644 --- a/app/Http/Requests/Repuve/ModuleStoreRequest.php +++ b/app/Http/Requests/Repuve/ModuleStoreRequest.php @@ -19,8 +19,7 @@ public function rules(): array 'responsible_id' => ['required', 'exists:users,id'], 'municipality_id' => 'required|exists:municipalities,id', 'address' => ['required', 'string', 'max:255'], - 'colony' => ['required', 'string', 'max:100'], - 'cp' => ['nullable', 'string', 'max:10'], + 'longitude' => ['nullable', 'numeric', 'between:-180,180'], 'latitude' => ['nullable', 'numeric', 'between:-90,90'], 'status' => ['nullable', 'boolean'], @@ -38,11 +37,7 @@ public function messages(): array 'address.required' => 'La dirección es requerida', 'address.string' => 'La dirección debe ser una cadena de texto', 'address.max' => 'La dirección no debe superar los 255 caracteres', - 'colony.required' => 'La colonia es requerida', - 'colony.string' => 'La colonia debe ser una cadena de texto', - 'colony.max' => 'La colonia no debe superar los 100 caracteres', - 'cp.string' => 'El código postal debe ser una cadena de texto', - 'cp.max' => 'El código postal no debe superar los 10 caracteres', + 'longitude.numeric' => 'La longitud debe ser un número', 'longitude.between' => 'La longitud debe estar entre -180 y 180', 'latitude.numeric' => 'La latitud debe ser un número', diff --git a/app/Http/Requests/Repuve/ModuleUpdateRequest.php b/app/Http/Requests/Repuve/ModuleUpdateRequest.php index f457727..161d508 100644 --- a/app/Http/Requests/Repuve/ModuleUpdateRequest.php +++ b/app/Http/Requests/Repuve/ModuleUpdateRequest.php @@ -18,9 +18,8 @@ public function rules(): array 'name' => ['nullable', 'string', 'max:50', Rule::unique('modules', 'name')->ignore($this->route('module'))], 'municipality_id' => ['nullable', 'integer', 'exists:municipalities,id'], 'responsible_id' => ['nullable', 'integer', 'exists:users,id'], - 'address' => ['nullable', 'string', 'max:50'], - 'colony' => ['nullable', 'string', 'max:100'], - 'cp' => ['nullable', 'string', 'max:10'], + 'address' => ['nullable', 'string', 'max:250'], + 'longitude' => ['nullable', 'numeric', 'between:-180,180'], 'latitude' => ['nullable', 'numeric', 'between:-90,90'], 'status' => ['nullable', 'boolean'], @@ -39,10 +38,7 @@ public function messages(): array 'responsible_id.exists' => 'El responsable seleccionado no existe', 'address.string' => 'La dirección debe ser texto', 'address.max' => 'La dirección no debe superar los 50 caracteres', - 'colony.string' => 'La colonia debe ser texto', - 'colony.max' => 'La colonia no debe superar los 100 caracteres', - 'cp.string' => 'El código postal debe ser texto', - 'cp.max' => 'El código postal no debe superar los 10 caracteres', + 'longitude.numeric' => 'La longitud debe ser un número', 'longitude.between' => 'La longitud debe estar entre -180 y 180', 'latitude.numeric' => 'La latitud debe ser un número', diff --git a/app/Models/Module.php b/app/Models/Module.php index 274aaf4..43dc248 100644 --- a/app/Models/Module.php +++ b/app/Models/Module.php @@ -14,8 +14,6 @@ class Module extends Model 'responsible_id', 'municipality_id', 'address', - 'colony', - 'cp', 'longitude', 'latitude', 'status', diff --git a/database/migrations/2026_03_03_173308_drop_colony_in_modules_table.php b/database/migrations/2026_03_03_173308_drop_colony_in_modules_table.php new file mode 100644 index 0000000..f9a3038 --- /dev/null +++ b/database/migrations/2026_03_03_173308_drop_colony_in_modules_table.php @@ -0,0 +1,29 @@ +dropColumn(['colony', 'cp']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('modules', function (Blueprint $table) { + $table->string('colony')->nullable(); + $table->string('cp')->nullable(); + }); + } +}; diff --git a/database/seeders/CatalogNameImgSeeder.php b/database/seeders/CatalogNameImgSeeder.php index 53a8514..6c627b0 100644 --- a/database/seeders/CatalogNameImgSeeder.php +++ b/database/seeders/CatalogNameImgSeeder.php @@ -50,7 +50,7 @@ public function run(): void 'FOTO LADO LATERAL DEL VEHÍCULO', 'FOTO UBICACIÓN DEL VIN', 'FOTO CONSTANCIA DE INSCRIPCIÓN PEGADA (CI MORADA O AZUL)', - 'FORMATO DE CONSTANCIA DE SUSTITUCIÓN', + 'FORMATO DE CONSTANCIA SUSTITUIDA', 'EVIDENCIA ADICIONAL', ]; diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php index 2f43b26..616d654 100644 --- a/database/seeders/RoleSeeder.php +++ b/database/seeders/RoleSeeder.php @@ -29,7 +29,7 @@ class RoleSeeder extends Seeder public function run(): void { // === USUARIOS === - $users = PermissionType::firstOrCreate(['name' => 'Usuarios']); + $users = PermissionType::updateOrCreate(['name' => 'Usuarios']); [ $userIndex, @@ -39,7 +39,7 @@ public function run(): void ] = $this->onCRUD('users', $users, 'api'); // === ROLES === - $roles = PermissionType::firstOrCreate(['name' => 'Roles']); + $roles = PermissionType::updateOrCreate(['name' => 'Roles']); [ $roleIndex, @@ -51,7 +51,7 @@ public function run(): void $rolePermissions = $this->onPermission('roles.permissions', 'Permisos de roles', $roles, 'api'); // === MÓDULOS === - $modules = PermissionType::firstOrCreate(['name' => 'Módulos']); + $modules = PermissionType::updateOrCreate(['name' => 'Módulos']); [ $moduleIndex, @@ -64,7 +64,7 @@ public function run(): void $moduleToggleStatus = $this->onPermission('module.toggle_status', 'Cambiar estado del módulo', $modules, 'api'); // === DISPOSITIVOS MÓVILES === - $devices = PermissionType::firstOrCreate(['name' => 'Dispositivos Móviles']); + $devices = PermissionType::updateOrCreate(['name' => 'Dispositivos Móviles']); [ $deviceIndex, @@ -76,31 +76,31 @@ public function run(): void $deviceToggleStatus = $this->onPermission('devices.toggle_status', 'Cambiar estado del dispositivo', $devices, 'api'); // === INSCRIPCIONES === - $inscriptions = PermissionType::firstOrCreate(['name' => 'Proceso de Sustitución por primera vez']); + $inscriptions = PermissionType::updateOrCreate(['name' => 'Proceso de Sustitución por primera vez']); $inscriptionVehicle = $this->onPermission('inscription.vehicle', 'Inscribir vehículo', $inscriptions, 'api'); $inscriptionSearchNational = $this->onPermission('inscription.search.national', 'Buscar en consulta nacional', $inscriptions, 'api'); $inscriptionSearch = $this->onPermission('inscription.search', 'Buscar en consulta', $inscriptions, 'api'); // === CANCELACIONES === - $cancellations = PermissionType::firstOrCreate(['name' => 'Cancelaciones']); + $cancellations = PermissionType::updateOrCreate(['name' => 'Cancelaciones']); $cancellationTagNoAsignado = $this->onPermission('cancellations.cancel_tag_no_asignado', 'Cancelar constancia no asignada', $cancellations, 'api'); // === SISTEMA === - $system = PermissionType::firstOrCreate(['name' => 'Sistema']); + $system = PermissionType::updateOrCreate(['name' => 'Sistema']); $systemSettings = $this->onPermission('system.settings', 'Configurar credenciales REPUVE', $system, 'api'); // === ACTUALIZAR REGISTRO === - $updates = PermissionType::firstOrCreate(['name' => 'Actualizar Registro']); + $updates = PermissionType::updateOrCreate(['name' => 'Actualizar Registro']); $updateVehicleData = $this->onPermission('updates.vehicle-data', 'Actualizar datos de vehículo por formulario', $updates, 'api'); $updateVehicleUpdate = $this->onPermission('updates.vehicle-update', 'Actualizar datos de vehículo', $updates, 'api'); $updateResendToRepuve = $this->onPermission('updates.resend-to-repuve', 'Reenviar a REPUVE', $updates, 'api'); // === GENERAR FORMATOS === - $formats = PermissionType::firstOrCreate(['name' => 'Generar Formatos']); + $formats = PermissionType::updateOrCreate(['name' => 'Generar Formatos']); $recordGeneratePdf = $this->onPermission('records.generate_pdf', 'Generar Hoja de recepción', $formats, 'api'); $recordGeneratePdfForm = $this->onPermission('records.generate_pdf_form', 'Generar solicitud de sustitución', $formats, 'api'); @@ -108,7 +108,7 @@ public function run(): void $recordGeneratePdfConstancia = $this->onPermission('records.generate_pdf_constancia', 'Generar Impresión en la constancia', $formats, 'api'); // === REPORTES === - $reports = PermissionType::firstOrCreate(['name' => 'Reportes - Excel']); + $reports = PermissionType::updateOrCreate(['name' => 'Reportes - Excel']); $reportVehicleUpdates = $this->onPermission('reports.vehicle_updates.index', 'Reporte de actualizaciones', $reports, 'api'); $reportSubstitutions = $this->onPermission('reports.substitutions.index', 'Reporte de sustituciones', $reports, 'api'); @@ -117,12 +117,12 @@ public function run(): void $reportSearchRecords = $this->onPermission('reports.search_records.index', 'Reporte de consulta nacional', $reports, 'api'); // === ACTIVIDAD === - $activities = PermissionType::firstOrCreate(['name' => 'Actividad']); + $activities = PermissionType::updateOrCreate(['name' => 'Actividad']); $activityIndex = $this->onPermission('activities.index', 'Ver actividad de usuarios', $activities, 'api'); // === CAJAS === - $packages = PermissionType::firstOrCreate(['name' => 'Cajas']); + $packages = PermissionType::updateOrCreate(['name' => 'Cajas']); [ $packageIndex, @@ -134,7 +134,7 @@ public function run(): void $packageBoxTags = $this->onPermission('packages.box_tags', 'Ver constancias de caja', $packages, 'api'); // === CONSTANCIAS DE INSCRIPCIÓN === - $tags = PermissionType::firstOrCreate(['name' => 'Constancias de Inscripción']); + $tags = PermissionType::updateOrCreate(['name' => 'Constancias de Inscripción']); [ $tagIndex, diff --git a/resources/views/pdfs/tag.blade.php b/resources/views/pdfs/tag.blade.php index 1839458..8e0c73a 100644 --- a/resources/views/pdfs/tag.blade.php +++ b/resources/views/pdfs/tag.blade.php @@ -2,7 +2,7 @@
-