Compare commits

...

2 Commits

Author SHA1 Message Date
Juan Felipe Zapata Moreno
2ca6950751 add: historial de tags de un vehiculo 2026-01-14 12:45:13 -06:00
Juan Felipe Zapata Moreno
4f9b4a6098 fix: seeders direccion de modulos y catalogo de imagenes 2026-01-14 10:32:37 -06:00
3 changed files with 64 additions and 39 deletions

View File

@ -403,26 +403,39 @@ public function searchRecord(Request $request)
$paginatedRecords->getCollection()->transform(function ($record) { $paginatedRecords->getCollection()->transform(function ($record) {
$latestLog = $record->vehicle->vehicleTagLogs->first(); $latestLog = $record->vehicle->vehicleTagLogs->first();
// Detectar si hubo sustitución y obtener datos del tag anterior // Construir historial completo de tags
$substitutionData = null; $tagsHistory = [];
$order = 1;
$vehicleLogs = $record->vehicle->vehicleTagLogs->sortBy('created_at');
$processedTags = [];
// Buscar si existe ALGÚN log de sustitución (no solo el último) foreach ($vehicleLogs as $log) {
$substitutionLogs = $record->vehicle->vehicleTagLogs $tagId = $log->tag_id;
->where('action_type', 'sustitucion') if ($tagId && !in_array($tagId, $processedTags)) {
->sortBy('id') $processedTags[] = $tagId;
->take(2); $tag = $log->tag;
if ($substitutionLogs->count() >= 2) { // Buscar fecha de cancelación si existe
$oldTagLog = $substitutionLogs->first(); // Tag cancelado $cancelLog = $vehicleLogs
$newTagLog = $substitutionLogs->last(); // Tag nuevo ->where('tag_id', $tagId)
->whereIn('action_type', ['cancelacion', 'sustitucion'])
->whereNotNull('cancellation_at')
->first();
$substitutionData = [ $tagsHistory[] = [
'old_folio' => $oldTagLog->tag?->folio ?? null, 'order' => $order++,
'old_tag_number' => $oldTagLog->tag?->tag_number ?? null, 'tag_id' => $tagId,
'new_folio' => $newTagLog->tag?->folio ?? $record->folio, 'folio' => $tag?->folio,
'new_tag_number' => $newTagLog->tag?->tag_number ?? null, 'tag_number' => $tag?->tag_number,
'status' => $tag?->status?->code ?? 'unknown',
'assigned_at' => $vehicleLogs->where('tag_id', $tagId)
->whereIn('action_type', ['inscripcion', 'sustitucion'])
->first()?->created_at,
'cancelled_at' => $cancelLog?->cancellation_at,
'is_current' => $tag?->id === $record->vehicle->tag?->id,
]; ];
} }
}
return [ return [
'id' => $record->id, 'id' => $record->id,
@ -433,8 +446,9 @@ public function searchRecord(Request $request)
'action_type' => $latestLog?->action_type ?? 'inscripcion', 'action_type' => $latestLog?->action_type ?? 'inscripcion',
'action_date' => $latestLog?->created_at ?? $record->created_at, 'action_date' => $latestLog?->created_at ?? $record->created_at,
// SUSTITUCIÓN // HISTORIAL DE TAGS
'substitution' => $substitutionData, 'tags_history' => $tagsHistory,
'total_tags' => count($tagsHistory),
// MÓDULO // MÓDULO
'module' => $record->module ? [ 'module' => $record->module ? [

View File

@ -22,24 +22,35 @@ class CatalogNameImgSeeder extends Seeder
public function run(): void public function run(): void
{ {
$names = [ $names = [
'FRENTE', 'INE ANVERSO',
'TRASERA', 'INE REVERSO',
'LATERAL', 'TARJETA DE CIRCULACIÓN ANVERSO',
'RECEPCION', 'TARJETA DE CIRCULACIÓN REVERSO',
'CONSTANCIA', 'FACTURA ORIGEN ANVERSO',
'VERIFICA', 'FACTURA ORIGEN REVERSO',
'FACTURA/CERTIFICADO FRONTAL', 'FACTURA ACTUAL ANVERSO',
'FACTURA/CERTIFICADO TRASERA', 'FACTURA ACTUAL REVERSO',
'PEDIMENTO FRONTAL', 'FACTURA SIN VALOR ANVERSO',
'PEDIMENTO TRASERO', 'FACTURA SIN VALOR REVERSO',
'CARTA FACTURA ANVERSO',
'CARTA FACTURA REVERSO',
'TITULO ANVERSO',
'TITULO REVERSO',
'PEDIMENTO ANVERSO',
'PEDIMENTO REVERSO',
'PODER NOTARIAL', 'PODER NOTARIAL',
'CEDULA DE IDENTIFICACION FISCAL', 'CEDULA DE IDENTIFICACION FISCAL',
'CARTA PODER', 'CARTA PODER',
'ACTA CIRCUNSTANCIADA DE HECHOS', 'REPORTE DE LA CONSULTA CIUDADANA',
'IDENTIFICACIÓN OFICIAL FRENTE', 'FORMATO SOLICITUD DE SUSTITUCIÓN DE CONSTANCIA DE INSCRIPCIÓN',
'IDENTIFICACIÓN OFICIAL TRASERA', 'HOJA DE RECEPCIÓN',
'TARJETA DE CIRCULACIÓN', 'HOJA DE VERIFICACIÓN',
'FOTO VIN', 'FOTO LADO FRONTAL DEL VEHÍCULO',
'FOTO LADO TRASERO DEL VEHÍCULO',
'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',
'EVIDENCIA ADICIONAL', 'EVIDENCIA ADICIONAL',
]; ];

View File

@ -17,7 +17,7 @@ public function run(): void
[ [
'name' => 'MODULO PARQUE LA CHOCA', 'name' => 'MODULO PARQUE LA CHOCA',
'municipality_id' => 4, 'municipality_id' => 4,
'address' => 'CIRCUITO CARLOS PELLICER S/N JUNTO A PLAZA MALLORCA ESTACIONAMIENTO DEL PARQUE LA CHOCA', 'address' => 'ESTACIONAMIENTO DEL PARQUE LA CHOCA, CENTRO, TABASCO',
'colony' => 'CENTRO', 'colony' => 'CENTRO',
'cp' => null, 'cp' => null,
'longitude' => -92.954605, 'longitude' => -92.954605,
@ -27,7 +27,7 @@ public function run(): void
[ [
'name' => 'MODULO FINANZAS BASE 4', 'name' => 'MODULO FINANZAS BASE 4',
'municipality_id' => 4, 'municipality_id' => 4,
'address' => 'AV. RUIZ CORTINES S/N', 'address' => 'ESTACIONAMIENTO DE FINANZAS BASE 4, CENTRO, TABASCO',
'colony' => 'CASA BLANCA', 'colony' => 'CASA BLANCA',
'cp' => null, 'cp' => null,
'longitude' => -92.923486, 'longitude' => -92.923486,
@ -37,7 +37,7 @@ public function run(): void
[ [
'name' => 'MODULO CARDENAS', 'name' => 'MODULO CARDENAS',
'municipality_id' => 2, 'municipality_id' => 2,
'address' => 'ANILLO PERIFERICO CARLOS MOLINA S/N', 'address' => 'ESTACIONAMIENTO DE LA POLICIA ESTATAL DE CAMINOS, CARDENAS, TABASCO',
'colony' => 'SANTA MARIA DE GUADALUPE', 'colony' => 'SANTA MARIA DE GUADALUPE',
'cp' => null, 'cp' => null,
'longitude' => -93.362824, 'longitude' => -93.362824,
@ -47,7 +47,7 @@ public function run(): void
[ [
'name' => 'MODULO PASEO DE LA SIERRA', 'name' => 'MODULO PASEO DE LA SIERRA',
'municipality_id' => 4, 'municipality_id' => 4,
'address' => ' AV. PASEO DE LA SIERRA #435 COL. REFORMA, C.P. 86080 VILLAHERMOSA, TABASCO,', 'address' => 'ESTACIONAMIENTO PASEO DE LA SECRETARIA DE FINANZAS, CENTRO, TABASCO',
'colony' => 'REFORMA', 'colony' => 'REFORMA',
'cp' => null, 'cp' => null,
'longitude' => -92.929378, 'longitude' => -92.929378,
@ -57,8 +57,8 @@ public function run(): void
[ [
'name' => 'CENTRO DE ACTIVACION COMALCALCO', 'name' => 'CENTRO DE ACTIVACION COMALCALCO',
'municipality_id' => 5, 'municipality_id' => 5,
'address' => 'MONSERRAT #5', 'address' => '',
'colony' => 'SANTO DOMINGO', 'colony' => 'ESTACIONAMIENTO DE LA POLICIA ESTATAL DE CAMINOS, COMALCALCO, TABASCO',
'cp' => null, 'cp' => null,
'longitude' => -93.218679, 'longitude' => -93.218679,
'latitude' => 18.264577, 'latitude' => 18.264577,