Panel de Taller @php $totalAlertas = $alertasPendientes->count() + $repuestosStockBajo->count(); @endphp @if ($totalAlertas > 0) 🔔 {{ $totalAlertas }} {{ $totalAlertas === 1 ? 'alerta' : 'alertas' }} @endif
Presupuestos, órdenes de trabajo y credenciales de la red de mantenimiento.
🔔 Centro de Alertas
Unidades lejos del taller el día del turno, OTs que ya alcanzaron su km objetivo, y repuestos por debajo del stock mínimo.
{{ $alerta->mensaje }}
Unidades en taller ahora
Tractores y semis con estado "En Taller" en este momento, y quién los está atendiendo.
@if (!empty($unidadesEnTaller)){{ $u['interno'] }}
{{ ucfirst($u['tipo']) }}{{ $u['detalle'] }}
Trabajo: {{ $u['componentes'] ?? 'Sin detalle' }}
Mecánico: {{ $u['mecanico'] ?? 'Sin asignar' }}
Taller: {{ $u['taller'] ?? 'Taller propio / sin dato' }}
@if ($u['desde'])Desde: {{ $u['desde'] }}
@endif @if ($u['tiempo_estimado_horas'])Tiempo estimado: {{ $u['tiempo_estimado_horas'] }} hs
@endif @if ($u['costo_total'])Presupuestado: $ {{ number_format($u['costo_total'], 2, ',', '.') }}
@endif @if ($u['fecha_programada'])📅 Programada para el {{ $u['fecha_programada'] }}
@endifNo hay unidades en taller en este momento.
@endforelsePresupuestos pendientes de aprobación
OT #{{ $ot->id }} · {{ $ot->unidadPatente() ?? 'Sin patente' }} ({{ $ot->unidad_type }})
· {{ $c->nombre }} (obj. {{ number_format($c->km_objetivo, 0, ',', '.') }} km @if($c->horas_estimadas) · {{ $c->horas_estimadas }} hs @endif)
@endforeachMecánico: {{ $ot->mecanico?->nombre ?? 'N/D' }} @if ($ot->mecanico?->tallerExterno) · {{ $ot->mecanico->tallerExterno->nombre }} @endif · Tiempo estimado: {{ $ot->tiempo_estimado_horas }} hs
· {{ $r->descripcion }} ({{ $r->marca }} {{ $r->modelo }}) x{{ $r->cantidad }} — $ {{ number_format($r->costo_total, 2, ',', '.') }} @if ($r->catalogoRepuesto && $r->cantidad > $r->catalogoRepuesto->stock_actual) ⚠ stock insuficiente ({{ $r->catalogoRepuesto->stock_actual }} disp.) @endif
@endforeachMano de obra: $ {{ number_format($ot->costo_mano_obra, 2, ',', '.') }}
@endifTotal: $ {{ number_format($ot->costoTotal(), 2, ',', '.') }}
No hay presupuestos pendientes.
@endforelseCompras pendientes (esperando insumos)
OT #{{ $ot->id }} · {{ $ot->unidad()?->interno }} — {{ $ot->componentesResumen() }}
Mecánico: {{ $ot->mecanico?->nombre ?? 'N/D' }} · Trabajo aprobado, esperando repuestos
@if (!empty($faltantes))· {{ $f['nombre'] }} — faltan {{ $f['faltante'] }} (stock {{ $f['stock_actual'] }} / pedido {{ $f['cantidad_pedida'] }}) @if ($f['en_camino'] > 0) · {{ $f['en_camino'] }} en camino @endif
@endforeach{{ $ot->ordenesCompra->count() }} {{ $ot->ordenesCompra->count() === 1 ? 'cotización cargada' : 'cotizaciones cargadas' }} @if ($cotizando->count() > 0 && $cotizando->count() < 3) · se recomiendan 3 para comparar @endif
@foreach ($ot->ordenesCompra as $oc)OC #{{ $oc->id }} · {{ $oc->proveedor?->nombre }} · {{ $oc->tiempo_estimado_entrega_dias }} días · $ {{ number_format($oc->costoTotal(), 2, ',', '.') }}
· x{{ $item->cantidad }} — $ {{ number_format($item->costo_real_total, 2, ',', '.') }}
@endforeachNo hay OTs esperando insumos.
@endforelseÓrdenes de trabajo activas
@if ($otsActivas->isNotEmpty())OT #{{ $ot->id }} · {{ $ot->unidadPatente() ?? 'Sin patente' }}
{{ $ot->estadoLabel() }} @if ($urgencia['etiqueta'] !== 'Sin dato') {{ $urgencia['etiqueta'] }} @endif· {{ $c->nombre }} (obj. {{ number_format($c->km_objetivo, 0, ',', '.') }} km @if($c->horas_estimadas) · {{ $c->horas_estimadas }} hs @endif)
@empty· {{ $ot->componentesResumen() }}
@endforelseMecánico: {{ $ot->mecanico?->nombre ?? 'Sin asignar' }} · Origen: {{ $ot->origen }}
reprogramar / cancelar
No hay OTs activas.
@endforelseHistorial reciente
| Unidad | Componente | Estado | Resuelto por |
|---|---|---|---|
| {{ $ot->unidadPatente() ?? 'Sin patente' }} | {{ $ot->componente }} | {{ $ot->estadoLabel() }} | {{ $ot->aprobadaPor?->name ?? '—' }} |
| Sin historial todavía. | |||