fix: actualizar tipos de acción en registros de vehículos y migración para 'sustitucion_primera_vez'

This commit is contained in:
Juan Felipe Zapata Moreno 2026-02-11 15:36:46 -06:00
parent 23ba2a03f9
commit 04c9fe2d5a
6 changed files with 84 additions and 27 deletions

View File

@ -868,10 +868,10 @@ public function excelGeneral(Request $request)
'tag',
'cancellationReason'
])
->whereIn('action_type', ['inscripcion', 'sustitucion', 'actualizacion', 'cancelacion'])
->whereIn('action_type', ['sustitucion_primera_vez', 'sustitucion', 'actualizacion', 'cancelacion'])
->where(function ($query) use ($fechaInicio, $fechaFin) {
$query->where(function ($q) use ($fechaInicio, $fechaFin) {
$q->whereIn('action_type', ['inscripcion', 'sustitucion', 'actualizacion'])
$q->whereIn('action_type', ['sustitucion_primera_vez', 'sustitucion', 'actualizacion'])
->whereBetween('created_at', [$fechaInicio, $fechaFin]);
})
->orWhere(function ($q) use ($fechaInicio, $fechaFin) {
@ -946,7 +946,7 @@ public function excelGeneral(Request $request)
// Motivo
$motivo = $log->cancellationReason->reason ?? $log->cancellationReason->name ?? '';
if ($log->action_type == 'sustitucion') $motivo = 'SUSTITUCIÓN';
if ($log->action_type == 'inscripcion') $motivo = 'INSCRIPCIÓN';
if ($log->action_type == 'sustitucion_primera_vez') $motivo = 'SUSTITUCIÓN POR PRIMERA VEZ';
if ($log->action_type == 'actualizacion') $motivo = 'ACTUALIZACIÓN';
if ($log->action_type == 'cancelacion' && empty($motivo)) $motivo = 'DAÑADA';
@ -1186,7 +1186,7 @@ public function exportSearchRecords(Request $request)
'vin' => 'nullable|string',
'tag_number' => 'nullable|string',
'module_id' => 'nullable|integer|exists:modules,id',
'action_type' => 'nullable|string|in:inscripcion,sustitucion,cancelacion',
'action_type' => 'nullable|string|in:sustitucion_primera_vez,sustitucion,cancelacion',
'status' => 'nullable|string',
'start_date' => 'nullable|date',
'end_date' => 'nullable|date|after_or_equal:start_date',
@ -1284,7 +1284,7 @@ public function exportSearchRecords(Request $request)
// Obtener logs ordenados por fecha, excluyendo actualizaciones
$vehicleLogs = $vehicle->vehicleTagLogs
->whereIn('action_type', ['inscripcion', 'sustitucion', 'cancelacion'])
->whereIn('action_type', ['sustitucion_primera_vez', 'sustitucion', 'cancelacion'])
->sortBy('created_at');
// Generar una fila por cada log (cada acción en el historial)

View File

@ -162,7 +162,7 @@ public function vehicleInscription(VehicleStoreRequest $request)
VehicleTagLog::create([
'vehicle_id' => $vehicle->id,
'tag_id' => $tag->id,
'action_type' => 'sustitucion',
'action_type' => 'sustitucion_primera_vez',
'performed_by' => Auth::id(),
]);
@ -289,7 +289,7 @@ public function searchRecord(Request $request)
'vin' => 'nullable|string',
'tag_number' => 'nullable|string',
'module_id' => 'nullable|integer|exists:modules,id',
'action_type' => 'nullable|string|in:inscripcion,actualizacion,sustitucion,cancelacion',
'action_type' => 'nullable|string|in:sustitucion_primera_vez,actualizacion,sustitucion,cancelacion',
'status' => 'nullable|string',
'start_date' => 'nullable|date',
'end_date' => 'nullable|date|after_or_equal:start_date',
@ -426,7 +426,7 @@ public function searchRecord(Request $request)
'tag_number' => $tag?->tag_number,
'status' => $tag?->status?->code ?? 'unknown',
'assigned_at' => $vehicleLogs->where('tag_id', $tagId)
->whereIn('action_type', ['inscripcion', 'sustitucion'])
->whereIn('action_type', ['sustitucion_primera_vez', 'sustitucion'])
->first()?->created_at,
'cancelled_at' => $cancelLog?->cancellation_at,
'is_current' => $tag?->id === $record->vehicle->tag?->id,

View File

@ -52,7 +52,7 @@ public function cancellationReason()
public function isInscription()
{
return $this->action_type === 'inscripcion';
return $this->action_type === 'sustitucion_primera_vez';
}
public function isUpdate()

View File

@ -84,6 +84,10 @@
"@php artisan migrate:fresh --seed",
"@php artisan passport:client --personal --name=Holos"
],
"db:update": [
"@php artisan migrate",
"@php artisan migrate --path=database/migrations/data"
],
"jobs:start": [
"pm2 start \"php artisan schedule:work\" --name holos-schedules",
"pm2 start \"php artisan queue:work\" --name holos-queue"

View File

@ -0,0 +1,71 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
// Paso 1: PRIMERO ampliar el ENUM para incluir 'sustitucion_primera_vez' (temporal)
DB::statement("
ALTER TABLE vehicle_tags_logs
MODIFY COLUMN action_type ENUM(
'inscripcion',
'sustitucion_primera_vez',
'actualizacion',
'sustitucion',
'cancelacion'
) NOT NULL DEFAULT 'cancelacion'
");
// Paso 2: AHORA actualizar los datos existentes
DB::statement("UPDATE vehicle_tags_logs SET action_type = 'sustitucion_primera_vez' WHERE action_type = 'inscripcion'");
// Paso 3: FINALMENTE remover 'inscripcion' del ENUM
DB::statement("
ALTER TABLE vehicle_tags_logs
MODIFY COLUMN action_type ENUM(
'sustitucion_primera_vez',
'actualizacion',
'sustitucion',
'cancelacion'
) NOT NULL DEFAULT 'cancelacion'
");
}
/**
* Reverse the migrations.
*/
public function down(): void
{
// Paso 1: PRIMERO agregar 'inscripcion' de vuelta al ENUM (temporal)
DB::statement("
ALTER TABLE vehicle_tags_logs
MODIFY COLUMN action_type ENUM(
'inscripcion',
'sustitucion_primera_vez',
'actualizacion',
'sustitucion',
'cancelacion'
) NOT NULL DEFAULT 'cancelacion'
");
// Paso 2: AHORA revertir los datos
DB::statement("UPDATE vehicle_tags_logs SET action_type = 'inscripcion' WHERE action_type = 'sustitucion_primera_vez'");
// Paso 3: FINALMENTE remover 'sustitucion_primera_vez' del ENUM
DB::statement("
ALTER TABLE vehicle_tags_logs
MODIFY COLUMN action_type ENUM(
'inscripcion',
'actualizacion',
'sustitucion',
'cancelacion'
) NOT NULL DEFAULT 'cancelacion'
");
}
};

View File

@ -40,7 +40,6 @@ public function run(): void
] = $this->onCRUD('users', $users, 'api');
$userSettings = $this->onPermission('users.settings', 'Configuración de usuarios', $users, 'api');
$userOnline = $this->onPermission('users.online', 'Usuarios en linea', $users, 'api');
$roles = PermissionType::firstOrCreate([
'name' => 'Roles'
@ -53,23 +52,6 @@ public function run(): void
$roleDestroy
] = $this->onCRUD('roles', $roles, 'api');
$pulse = PermissionType::firstOrCreate([
'name' => 'Sistema'
]);
$systemPulse = $this->onPermission('pulse', 'Monitoreo de Pulse', $pulse, 'api');
$pulse = PermissionType::firstOrCreate([
'name' => 'Historial de actividades'
]);
$activityIndex = $this->onIndex(
code: 'activities',
type: $pulse,
guardName: 'api'
);
$modules = PermissionType::firstOrCreate([ // Modulos
'name' => 'Módulos'
]);