{{-- KPI - Indicadores de gestión, común a las gemelas (MigracionLayout.MD L3, kit ui-ctc): importación (rkpi / searchkpi, KPI.index) y exportación (rexkpi / searchexkpi, ExKPI.index). Variables que pone cada index: $ruta (migas), $accion (URL del formulario), $descarga (URL de "Generar reporte"), $detalle ('/rkpidetalle/' o '/rexkpidetalle/'), $codificarDetalle (exportación cambia el primer ? por +++ y la primera / por --- en el nombre, como antes), $conTablasCentral (importación, grupo 27: iframes de Central). Lo del controlador llega igual que antes: $mediciones, $kpi, $chart, $columname, $IdMedicion, $Fechaini, $Fechafin. --}} @php if ($Fechaini == null) { $Fechaini = date('Y-m-d', strtotime(date('Y-m-d') . '- 1 month')); } if ($Fechafin == null) { $Fechafin = old('fecha', date('Y-m-d')); } $columname = $columname ?? []; $hayDatos = count($kpi) > 0; // Total (suma de las columnas nro / total, igual que la fila TOTAL de antes) e indicadores de cumplimiento si la // medición los trae. $tot = 0; $cumple = null; $noCumple = null; foreach ($kpi as $fila) { foreach ($fila as $nombre => $valor) { if ($nombre == 'nro' || $nombre == 'total') { $tot += (float) $valor; } if ($nombre == 'cumple') { $cumple = ($cumple ?? 0) + (float) $valor; } if ($nombre == 'no_cumple') { $noCumple = ($noCumple ?? 0) + (float) $valor; } } } $formatoTotal = fn ($n) => number_format($n, floor($n) == $n ? 0 : 2, ',', '.'); // Gráfica: la misma que armaba el controlador (App\Charts\TorreControl, Chart.js 2), como datos; la pinta // kpiDibujarGrafica con los colores del tema. $grafica = null; if ($hayDatos && $chart && count($chart->datasets)) { $grafica = [ 'type' => $chart->formatType(), 'labels' => array_values((array) $chart->labels), 'datasets' => json_decode($chart->formatDatasets(), true), 'options' => json_decode($chart->formatOptions(true), true), ]; } @endphp @push('estilos') {{-- Chart.js 2 (el mismo que cargaba planti), solo en esta pantalla. --}} @endpush @if ($hayDatos) Generar reporte @endif @if (Session::has('success')) {{ Session::get('success') }} @endif @if ($errors->any())
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif {{-- Filtros: el mismo POST de antes (cboMedicion, txtFechaini, txtFechafin) --}}
@csrf @foreach ($mediciones as $fil) @endforeach
Buscar
@if (!$hayDatos && $IdMedicion) La medición no arrojó resultados en ese rango de fechas. @endif @if ($hayDatos) @if (!empty($conTablasCentral)) {{-- Grupo 27: tablas dinámicas de Central, como antes --}} @forelse ($tabla_dinamica ?? [] as $rutaCentral) @if ($rutaCentral != '') @else

Sin información.

@endif @empty @endforelse @else {{-- Indicadores de la medición (solo lectura): mismos totales de la tabla --}}
@if ($cumple !== null) @endif @if ($noCumple !== null) @endif

Resultado

Doble clic en una fila para ver su detalle

@foreach ($columname as $fil)@endforeach @foreach ($kpi as $fil) {{-- Doble clic: detalle de la fila en otra ventana (igual que antes) --}} @foreach ($fil as $nombre => $valor) @if ($valor === null || $valor === '') @elseif (is_numeric($valor)) @else @endif @endforeach @endforeach
{{ strtoupper($fil) }}
—{{ $valor }}{{ $valor }}
TOTAL {{ $formatoTotal($tot) }}
@if ($grafica)
@endif
@endif @endif
@push('scripts') @endpush