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

View File

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

View File

@ -17,7 +17,7 @@ public function run(): void
[
'name' => 'MODULO PARQUE LA CHOCA',
'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',
'cp' => null,
'longitude' => -92.954605,
@ -27,7 +27,7 @@ public function run(): void
[
'name' => 'MODULO FINANZAS BASE 4',
'municipality_id' => 4,
'address' => 'AV. RUIZ CORTINES S/N',
'address' => 'ESTACIONAMIENTO DE FINANZAS BASE 4, CENTRO, TABASCO',
'colony' => 'CASA BLANCA',
'cp' => null,
'longitude' => -92.923486,
@ -37,7 +37,7 @@ public function run(): void
[
'name' => 'MODULO CARDENAS',
'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',
'cp' => null,
'longitude' => -93.362824,
@ -47,7 +47,7 @@ public function run(): void
[
'name' => 'MODULO PASEO DE LA SIERRA',
'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',
'cp' => null,
'longitude' => -92.929378,
@ -57,8 +57,8 @@ public function run(): void
[
'name' => 'CENTRO DE ACTIVACION COMALCALCO',
'municipality_id' => 5,
'address' => 'MONSERRAT #5',
'colony' => 'SANTO DOMINGO',
'address' => '',
'colony' => 'ESTACIONAMIENTO DE LA POLICIA ESTATAL DE CAMINOS, COMALCALCO, TABASCO',
'cp' => null,
'longitude' => -93.218679,
'latitude' => 18.264577,