@extends('layouts.app') @section('titulo', 'Recuento de Elementos - ' . $revision->lugar->nombre) @section('contenido1') @php // Calcular totales agregados de TODAS las centrales $totalElementos = $todasLasCentrales->sum(function($central) { return $central->elementos->count(); }); // CORREGIDO: Filtrar por tipoElemento->tipo (no por elemento->tipo que es el ID) $totalDetectores = $todasLasCentrales->sum(function($central) { return $central->elementos->filter(function($elemento) { return $elemento->tipoElemento && $elemento->tipoElemento->tipo == 1; })->count(); }); $totalModulos = $todasLasCentrales->sum(function($central) { return $central->elementos->filter(function($elemento) { return $elemento->tipoElemento && $elemento->tipoElemento->tipo == 2; })->count(); }); $totalLazos = $todasLasCentrales->sum(function($central) { return $central->lazos->count(); }); // Obtener pulsadores de TODAS las centrales de la revisión $todosLosPulsadoresRevisados = collect(); foreach($todasLasCentrales as $centralItem) { $pulsadoresCentral = $centralItem->elementos ->filter(function($elemento) use ($revision) { // Verificar que es un pulsador $esPulsador = $elemento->tipoElemento && (strtoupper($elemento->tipoElemento->abreviatura) == 'PUL' || stripos($elemento->tipoElemento->nombre, 'pulsador') !== false); // Verificar si tiene pruebas realizadas en esta revisión específica $fueRevisado = $elemento->pruebasRealizadas && $elemento->pruebasRealizadas->where('id_revision', $revision->id)->count() > 0; return $esPulsador && $fueRevisado; }); $todosLosPulsadoresRevisados = $todosLosPulsadoresRevisados->merge($pulsadoresCentral); } // Seleccionar 10 pulsadores aleatorios de todas las centrales $pulsadoresRevisados = $todosLosPulsadoresRevisados->shuffle()->take(10); // NUEVO: Obtener detectores de TODAS las centrales de la revisión usando CiElementoRevisado $todosLosDetectoresRevisados = \App\Models\CiElementoRevisado::where('id_revision', $revision->id) ->whereHas('elemento', function($query) use ($revision) { $query->whereHas('central', function($q) use ($revision) { $q->where('revision_id', $revision->id); })->whereHas('tipoElemento', function($q) { $q->where('abreviatura', 'OPT') ->orWhere('abreviatura', 'TER') ->orWhere('nombre', 'like', '%óptico%') ->orWhere('nombre', 'like', '%térmico%'); }); }) ->with([ 'elemento.tipoElemento', 'elemento.lazoRelation', 'elemento.zona', 'elemento.central' ]) ->get() ->map(function($elementoRevisado) { return $elementoRevisado->elemento; }); // Seleccionar 10 detectores aleatorios de todas las centrales, asegurando mezcla de ópticos y térmicos $detectoresOpticos = $todosLosDetectoresRevisados->filter(function($elemento) { if(!$elemento->tipoElemento) return false; $abreviatura = strtoupper($elemento->tipoElemento->abreviatura); $nombre = strtolower($elemento->tipoElemento->nombre); return ($abreviatura == 'OPT' || $abreviatura == 'OPTI' || strpos($nombre, 'óptico') !== false || strpos($nombre, 'optico') !== false); }); $detectoresTermicos = $todosLosDetectoresRevisados->filter(function($elemento) { if(!$elemento->tipoElemento) return false; $abreviatura = strtoupper($elemento->tipoElemento->abreviatura); $nombre = strtolower($elemento->tipoElemento->nombre); return ($abreviatura == 'TER' || strpos($nombre, 'térmico') !== false || strpos($nombre, 'termico') !== false); }); // Tomar algunos térmicos (máximo 3) y el resto ópticos $termicosSeleccionados = $detectoresTermicos->shuffle()->take(min(3, $detectoresTermicos->count())); $optikosNecesarios = 10 - $termicosSeleccionados->count(); $optikosSeleccionados = $detectoresOpticos->shuffle()->take($optikosNecesarios); $detectoresRevisados = $termicosSeleccionados->merge($optikosSeleccionados)->shuffle(); // NUEVO: Obtener TODOS los módulos auxiliares de TODAS las centrales de la revisión $todosLosModulosAuxiliares = collect(); $debugLogs = collect(); foreach($todasLasCentrales as $centralIndex => $centralItem) { $debugLogs->push("=== CENTRAL {$centralIndex}: {$centralItem->nombre} ==="); $elementosCentral = $centralItem->elementos; $debugLogs->push("Total elementos en central: {$elementosCentral->count()}"); // CORREGIDO: Buscar elementos que son MÓDULOS (tipoElemento.tipo = 2) y excluir solo PUL, SIR, SIRE $elementosModulos = $elementosCentral->filter(function($elemento) { return $elemento->tipoElemento && $elemento->tipoElemento->tipo == 2; }); $debugLogs->push("Elementos que son MÓDULOS (tipoElemento.tipo = 2): {$elementosModulos->count()}"); // DEBUG: Buscar TODOS los elementos CON independientemente del tipo $todosLosCON = $elementosCentral->filter(function($elemento) { return $elemento->tipoElemento && $elemento->tipoElemento->abreviatura == 'CON'; }); $debugLogs->push("TODOS los elementos CON encontrados: {$todosLosCON->count()}"); foreach($todosLosCON as $elemIndex => $elemento) { $tipoElementoId = $elemento->tipoElemento->id ?? 'N/A'; $tipoElementoTipo = $elemento->tipoElemento->tipo ?? 'N/A'; $debugLogs->push("CON {$elemIndex}: {$elemento->nombre} | Elemento.tipo: {$elemento->tipo} | TipoElemento.id: {$tipoElementoId} | TipoElemento.tipo: {$tipoElementoTipo}"); } foreach($elementosModulos as $elemIndex => $elemento) { $abreviatura = $elemento->tipoElemento->abreviatura ?? 'N/A'; $tipoElementoId = $elemento->tipoElemento->id ?? 'N/A'; $tipoElementoTipo = $elemento->tipoElemento->tipo ?? 'N/A'; $debugLogs->push("Módulo {$elemIndex}: {$elemento->nombre} | Elemento.tipo: {$elemento->tipo} | TipoElemento.id: {$tipoElementoId} | TipoElemento.tipo: {$tipoElementoTipo} | Abreviatura: {$abreviatura}"); } $modulosCentral = $elementosModulos->filter(function($elemento) use ($debugLogs) { if (!$elemento->tipoElemento) { $debugLogs->push("❌ EXCLUIDO: {$elemento->nombre} - No tiene tipoElemento"); return false; } $abreviatura = $elemento->tipoElemento->abreviatura; // Excluir solo pulsadores y sirenas $excluir = ['PUL', 'SIR', 'SIRE']; if (in_array($abreviatura, $excluir)) { $debugLogs->push("❌ EXCLUIDO: {$elemento->nombre} - Abreviatura {$abreviatura} en lista de exclusión"); return false; } $debugLogs->push("✅ INCLUIDO: {$elemento->nombre} - Abreviatura: {$abreviatura}"); return true; }); $debugLogs->push("Elementos que pasan el filtro en esta central: {$modulosCentral->count()}"); $todosLosModulosAuxiliares = $todosLosModulosAuxiliares->merge($modulosCentral); } $debugLogs->push("=== RESULTADO FINAL ==="); $debugLogs->push("Total módulos auxiliares encontrados: {$todosLosModulosAuxiliares->count()}"); // Seleccionar 10 módulos auxiliares aleatorios $modulosAuxiliaresRevisados = $todosLosModulosAuxiliares->shuffle()->take(10); $debugLogs->push("=== ELEMENTOS SELECCIONADOS PARA LA TABLA ==="); foreach($modulosAuxiliaresRevisados as $index => $elemento) { $abreviatura = $elemento->tipoElemento->abreviatura ?? 'N/A'; $tipoElementoTipo = $elemento->tipoElemento->tipo ?? 'N/A'; $debugLogs->push("Seleccionado {$index}: {$elemento->nombre} | Tipo: {$elemento->tipo} | Abreviatura: {$abreviatura} | TipoElemento.tipo: {$tipoElementoTipo}"); } // Contar total de módulos auxiliares de TODAS las centrales (solo tipo 2, excluyendo PUL, SIR, SIRE) $totalModulosAuxiliares = 0; foreach($todasLasCentrales as $centralItem) { $totalModulosAuxiliares += $centralItem->elementos->filter(function($elemento) { if (!$elemento->tipoElemento || $elemento->tipoElemento->tipo != 2) return false; $abreviatura = $elemento->tipoElemento->abreviatura; $excluir = ['PUL', 'SIR', 'SIRE']; return !in_array($abreviatura, $excluir); })->count(); } @endphp
{{ $revision->lugar->nombre }} - {{ $todasLasCentrales->count() }} {{ $todasLasCentrales->count() == 1 ? 'Central' : 'Centrales' }}
No hay elementos configurados en esta central
No hay centrales configuradas
| Lazo | Nº - Zona | Elemento | Tipo | Estado | Observaciones | Acciones |
|---|---|---|---|---|---|---|
| L{{ $elemento->lazoRelation->numero ?? 'N/A' }} |
@php
// Determinar si es Sensor (S) o Módulo (M)
$prefijo = 'S'; // Por defecto Sensor
if($elemento->tipoElemento && $elemento->tipoElemento->tipo == 2) {
$prefijo = 'M'; // Módulo
}
// Formatear número del elemento con ceros a la izquierda
$numeroFormateado = str_pad($elemento->numero, 2, '0', STR_PAD_LEFT);
@endphp
@if($elemento->zona)
{{ $prefijo }}{{ $numeroFormateado }} Z{{ $elemento->zona->numero }}
@else
{{ $prefijo }}{{ $numeroFormateado }} -
@endif
|
{{ $elemento->nombre }}
@if($elemento->zona)
{{ $elemento->zona->nombre }} @endif |
@if($elemento->tipoElemento) @php $abrev = $elemento->tipoElemento->abreviatura; @endphp @if($abrev == 'OPTI' || $abrev == 'OPT') {{ $abrev }} @elseif($abrev == 'TER') {{ $abrev }} @elseif($abrev == 'MULT') {{ $abrev }} @elseif($abrev == 'SMART 4') {{ $abrev }} @elseif($abrev == 'PUL') {{ $abrev }} @elseif($abrev == 'SIRE' || $abrev == 'SIR') {{ $abrev }} @elseif($abrev == 'MON') {{ $abrev }} @elseif($abrev == 'CON') {{ $abrev }} @elseif($abrev == 'AUX') {{ $abrev }} @else {{ $abrev }} @endif @else N/A @endif |
{{ ucfirst($prueba->estado) }}
|
@if(!empty($prueba->observaciones))
{{ $prueba->observaciones }}
@else
-
@endif
|
|
Todos los elementos funcionan correctamente sin observaciones
| Núm. | Marca | Modelo | Zona/Lazo | Operación realizada | Trimestral | Anual | Ubicación | Observaciones | |||
|---|---|---|---|---|---|---|---|---|---|---|---|
| A | B | C | D | E | |||||||
| {{ $elemento->numero ?? ($index + 1) }} | Notifier | M5A-RP02FF | @php $centralNum = $todasLasCentrales->count() > 1 ? 'C' . ($todasLasCentrales->search($elemento->central) + 1) . ' ' : ''; $zonaLazo = ''; if($elemento->zona) { $zonaLazo = 'Z' . $elemento->zona->numero . ' L' . ($elemento->lazoRelation->numero ?? 'N/A'); } else { $zonaLazo = 'L' . ($elemento->lazoRelation->numero ?? 'N/A'); } @endphp {{ $centralNum }}{{ $zonaLazo }} | Prueba Mediante Llave | V | @php $centralNum = $todasLasCentrales->count() > 1 ? 'C' . ($todasLasCentrales->search($elemento->central) + 1) . ': ' : ''; @endphp {{ $centralNum }}{{ $elemento->nombre }} @if($elemento->zona) - {{ $elemento->zona->nombre }} @endif | Funciona correctamente | ||||
No se encontraron pulsadores revisados en esta central.
| Núm. | Marca | Modelo | Zona/Lazo | Operación realizada | Trimestral | Anual | Ubicación | Observaciones | |||
|---|---|---|---|---|---|---|---|---|---|---|---|
| A | B | C | D | E | |||||||
| {{ $elemento->numero ?? ($index + 1) }} | Notifier | @php $modelo = ''; if($elemento->tipoElemento) { $abreviatura = strtoupper($elemento->tipoElemento->abreviatura); $nombre = strtolower($elemento->tipoElemento->nombre); if($abreviatura == 'OPT' || $abreviatura == 'OPTI' || strpos($nombre, 'óptico') !== false || strpos($nombre, 'optico') !== false) { $modelo = 'NFXI-OPT'; } elseif($abreviatura == 'TER' || strpos($nombre, 'térmico') !== false || strpos($nombre, 'termico') !== false) { $modelo = 'NFXI-TDIFF'; } else { $modelo = '-'; } } else { $modelo = '-'; } @endphp {{ $modelo }} | @php $centralNum = $todasLasCentrales->count() > 1 ? 'C' . ($todasLasCentrales->search($elemento->central) + 1) . ' ' : ''; $zonaLazo = ''; if($elemento->zona) { $zonaLazo = 'Z' . $elemento->zona->numero . ' L' . ($elemento->lazoRelation->numero ?? 'N/A'); } else { $zonaLazo = 'L' . ($elemento->lazoRelation->numero ?? 'N/A'); } @endphp {{ $centralNum }}{{ $zonaLazo }} | @php $operacion = ''; if($elemento->tipoElemento) { $abreviatura = strtoupper($elemento->tipoElemento->abreviatura); $nombre = strtolower($elemento->tipoElemento->nombre); if($abreviatura == 'OPT' || $abreviatura == 'OPTI' || strpos($nombre, 'óptico') !== false || strpos($nombre, 'optico') !== false) { $operacion = 'Prueba Mediante Humo'; } elseif($abreviatura == 'TER' || strpos($nombre, 'térmico') !== false || strpos($nombre, 'termico') !== false) { $operacion = 'Prueba Mediante Calor'; } else { $operacion = 'Prueba realizada'; } } else { $operacion = 'Prueba realizada'; } @endphp {{ $operacion }} | V | @php $centralNum = $todasLasCentrales->count() > 1 ? 'C' . ($todasLasCentrales->search($elemento->central) + 1) . ': ' : ''; @endphp {{ $centralNum }}{{ $elemento->nombre }} @if($elemento->zona) - {{ $elemento->zona->nombre }} @endif | Funciona correctamente | ||||
No se encontraron detectores revisados en esta central.
| Núm. | Marca | Modelo | Zona/Lazo | Operación realizada | Trimestral | Anual | Ubicación | Observaciones | |||
|---|---|---|---|---|---|---|---|---|---|---|---|
| A | B | C | D | E | |||||||
| {{ $elemento->numero ?? ($index + 1) }} | Notifier | {{ $elemento->tipoElemento ? $elemento->tipoElemento->abreviatura : '-' }} | @php $centralNum = $todasLasCentrales->count() > 1 ? 'C' . ($todasLasCentrales->search($elemento->central) + 1) . ' ' : ''; $zonaLazo = ''; if($elemento->zona) { $zonaLazo = 'Z' . $elemento->zona->numero . ' L' . ($elemento->lazoRelation->numero ?? 'N/A'); } else { $zonaLazo = 'L' . ($elemento->lazoRelation->numero ?? 'N/A'); } @endphp {{ $centralNum }}{{ $zonaLazo }} | Prueba realizada | V | @php $centralNum = $todasLasCentrales->count() > 1 ? 'C' . ($todasLasCentrales->search($elemento->central) + 1) . ': ' : ''; @endphp {{ $centralNum }}{{ $elemento->nombre }} @if($elemento->zona) - {{ $elemento->zona->nombre }} @endif | Funciona correctamente | ||||
No se encontraron módulos auxiliares revisados en esta central.