{{-- Información general de la orden. Cada campo lleva su etiqueta de confianza, su procedencia y su marca de cotejo. Ningún campo se coteja solo: lo confirma el usuario. Los campos son los de la plantilla CTC-OC-2 y los catálogos los de Websimex (tarea 1.6, RN-1.6 y RN-1.20). --}} @php $porCrear = \App\Http\Livewire\Importaciones\PurchaseOrderFormV2::PROVEEDOR_POR_CREAR; $todoCotejado = $progreso['campos'] > 0 && $progreso['campos'] === $progreso['cotejados']; // Borde del control según el estado del campo (clases completas: el JIT no // arma clases con variables). $bordes = [ 'cotejado' => '!border-emerald-400 dark:!border-emerald-500/60', 'revisar' => '!border-amber-400 dark:!border-amber-500/60', 'extraido' => '!border-sky-300 dark:!border-sky-500/50', 'manual' => '', ]; $controlTextarea = 'form-textarea block w-full rounded-md text-[13px] shadow-sm border-[var(--borde-fuerte)] bg-[var(--superficie)] text-[var(--texto)] focus:border-[var(--acento)] focus:ring-[var(--acento)]'; @endphp @if (!empty($extraccion['exito'])) @endif {{ $progreso['cotejados'] }} de {{ $progreso['campos'] }} cotejados
{{-- Resultado de la última validación: mismas reglas que la carga Excel. --}} @if (count($erroresValidacion) > 0)

No se guardó: {{ count($erroresValidacion) }} error(es)

    @foreach (array_slice($erroresValidacion, 0, 15) as $error)
  • @if ($error['linea']) Línea {{ $error['linea'] }} · @endif{{ $error['columna'] }}: {{ $error['motivo'] }}
  • @endforeach @if (count($erroresValidacion) > 15)
  • … y {{ count($erroresValidacion) - 15 }} más.
  • @endif
@endif @if (count($avisosValidacion) > 0)
    @foreach (array_slice($avisosValidacion, 0, 15) as $aviso)
  • @if ($aviso['linea']) Línea {{ $aviso['linea'] }} · @endif{{ $aviso['columna'] }}: {{ $aviso['motivo'] }}
  • @endforeach
@endif {{-- Importador: no sale del documento, es del CTC. --}} @foreach ($lstImportadores as $id => $nombre) @endforeach
@foreach ($definicion as $clave => $def) @php $campo = $campos[$clave]; $tieneValor = $campo['valor'] !== null && $campo['valor'] !== ''; // Un campo vacío no está cotejado aunque venga marcado (al editar, la // orden se carga toda como cotejada). $estado = ($campo['cotejado'] && $tieneValor) ? 'cotejado' : ($campo['confianza'] === 'revisar' ? 'revisar' : ($campo['confianza'] === 'alta' ? 'extraido' : 'manual')); $etiquetaEstado = ['cotejado' => ['exito', 'Cotejado'], 'revisar' => ['aviso', 'Revisar'], 'extraido' => ['info', 'Extraído']][$estado] ?? null; // ${$def['lista']} y no $$def['lista']: la sintaxis uniforme de // variables interpreta esa segunda forma como ${$def}['lista']. $opciones = isset($def['lista']) ? ${$def['lista']} : []; $claseControl = $bordes[$estado] . (!empty($def['mono']) ? ' font-mono' : ''); $idControl = 'oc-' . $clave; @endphp
$def['span'] === 2])>
{{ $def['etiqueta'] }}@if (!empty($def['obligatorio'])) *@endif @if ($etiquetaEstado) {{ $etiquetaEstado[1] }} @endif
@if ($clave === 'modalidad' && $modalidadVigente !== null) {{-- OC guardada: la modalidad solo cambia con motivo (RN-5.2). --}}
@unless ($soloLectura) Cambiar @endunless
@elseif ($def['tipo'] === 'select' || $def['tipo'] === 'proveedor') @foreach ($opciones as $id => $nombre) @endforeach @if ($def['tipo'] === 'proveedor') @endif @if ($def['tipo'] === 'proveedor' && $campo['valor'] === $porCrear) @endif @elseif ($def['tipo'] === 'comprador') {{-- Catálogo de compradores del cliente en Central (tarea 4.4, RN-8.7 y RN-8.8). --}} @php // Nombre de una OC anterior al catálogo, o leído y no encontrado: se ve aquí y al guardar // se busca por nombre o se agrega por aprobar (sin pedir correo, como la plantilla). $compradorTexto = ($idComprador === '' && $tieneValor) ? $campo['valor'] : null; @endphp @foreach ($lstCompradores as $id => $nombre) @endforeach @if ($compradorActual) @endif @if ($idComprador === \App\Services\OrdenCompra\CompradoresOc::NUEVO)

Queda por aprobar en el catálogo del cliente; la orden se guarda igual.

@endif @if ($compradorTexto)

No está en el catálogo del cliente: elígelo de la lista o, al guardar, quedará por aprobar.

@endif @elseif ($def['tipo'] === 'puerto') {{-- ~82.000 puertos: se escribe el código UN/LOCODE o se busca por nombre. --}} @foreach ($sugerenciasPuerto as $codigo => $etiqueta) @endforeach @elseif ($def['tipo'] === 'area') @else @endif
@if ($tieneValor && !($clave === 'modalidad' && $modalidadVigente !== null)) @endif
@if ($campo['procedencia'])

$estado === 'revisar', 'text-[var(--texto-suave)]' => $estado !== 'revisar'])> {{ $campo['procedencia'] }}@if ($campo['pagina']) · pág. {{ $campo['pagina'] }}@endif

@endif @if ($clave === 'puerto_origen') @if ($nombrePuerto)

{{ $nombrePuerto }}

@elseif ($tieneValor && count($sugerenciasPuerto) === 0)

No se encontró en el catálogo de puertos de Websimex.

@elseif (count($sugerenciasPuerto) > 0)

{{ count($sugerenciasPuerto) }} coincidencia(s): escoge una de la lista. @if ($this->paisDelPuerto()) Primero las de {{ $this->paisDelPuerto() }}. @endif

@endif @endif {{-- El Número DO se contrasta contra el ERP al escribirlo. --}} @if ($clave === 'numero_do') @if ($avisoNumeroDo)

$avisoNumeroDo['tipo'] === 'ok', 'text-amber-800 dark:text-amber-300' => $avisoNumeroDo['tipo'] !== 'ok'])> {{ $avisoNumeroDo['texto'] }}

@elseif (!$tieneValor)

Enlaza la orden con su ejecución en el ERP. Requerido para confirmar.

@endif @endif
@endforeach