Módulo/{{ $activeTab }}
@auth @if(auth()->user()?->isSuperAdmin()) Dashboard Ejecutivo Usuarios @endif @if(auth()->user()?->isJefeTaller() || auth()->user()?->isSuperAdmin()) Panel de Taller @endif
@csrf
@else Ingresar @endauth
@if($mantenimientoAlerta)
Alerta Crítica · Mantenimiento

Bloqueo preventivo de despacho

Con la distancia estimada ida y vuelta (~{{ number_format($mantenimientoAlerta['distancia_estimada_km'], 0, ',', '.') }} km), la(s) siguiente(s) unidad(es) alcanzarían su próximo mantenimiento antes de terminar el viaje:

@foreach($mantenimientoAlerta['unidades'] as $unidad)

{{ $unidad['label'] }}

{{ number_format($unidad['km_actual'], 0, ',', '.') }} km actuales · próximo service {{ number_format($unidad['km_proximo'], 0, ',', '.') }} km

@endforeach
@endif @if($activeTab === 'dispatch')
@unless(auth()->user()?->isJefeTaller())
@endunless
Control Georreferenciación
Base Operativa Central

🏢 Salto Unión 62, Zona Industrial

Puerto Iguazú, Misiones, Argentina

Tendencias rápidas
En tránsito 0
Retorno 0
Sin señal 0
Buscar chofer en mapa
@unless(auth()->user()?->isJefeTaller()) @endunless

Cargando mapa

Preparando vista...

Trazabilidad

Sincronizando... Operativo

0

Habilit.

0

Program.

0

Tránsito

0

Taller

0

Baja

@if($sugerencia)

Retorno inteligente listo

{{ $sugerencia }}

2-3 días
@endif
@endif @if($activeTab === 'monitoreo')

Monitoreo de viajes

Filtrá por estado, chofer, cliente, origen o destino para ver solo los viajes relevantes.

{{ count($viajesDB) }} viaje(s) visibles
Pendiente

{{ $monitoreoConteos['Pendiente'] ?? 0 }}

En curso

{{ $monitoreoConteos['En curso'] ?? 0 }}

Finalizado

{{ $monitoreoConteos['Finalizado'] ?? 0 }}

@forelse($viajesDB as $viaje)
@if(($monitoreoExpandidoId ?? null) === $viaje->id)

🚧 Hitos de Ruta & Peajes Obligatorios (Control Chofer)

Toque la tarjeta para cerrar
Origen programado

{{ $viaje->carga_programada_display ?? 'Sin fecha' }}

Destino programado

{{ $viaje->descarga_programada_display ?? 'Sin fecha' }}

@if($viaje->checklist_detalles) @foreach(json_decode($viaje->checklist_detalles, true) as $check)
{{ str_contains($check['item'], 'Peaje') ? '🚧 ' : '✅ ' }} {{ $check['item'] }} Validación: {{ $check['firma'] }}
{{ $check['estado'] }}
@endforeach @endif
@endif
@empty

No hay viajes para esos filtros.

Probá limpiar el estado o ampliar la búsqueda por texto.

@endforelse
@endif @if($activeTab === 'clientes')

Plantas, Destilerías & Domicilios Precargados

@foreach($clientesDB as $cli) @endforeach
Razón SocialContactoDomicilios Origen FrecuentesDomicilios Destino FrecuentesTipo Carga
{{ $cli->razon_social }}
{{ $cli->planta }}
@if($cli->contacto)
{{ $cli->contacto }}
@endif @if($cli->email)
{{ $cli->email }}
@endif @if($cli->whatsapp)
{{ $cli->whatsapp }}
@endif @if(!$cli->contacto && !$cli->email && !$cli->whatsapp) @endif
@foreach(json_decode($cli->domicilios_origen ?? '[]', true) as $dom)
• {{ $dom }}
@endforeach
@foreach(json_decode($cli->domicilios_destino ?? '[]', true) as $dom)
• {{ $dom }}
@endforeach
{{ $cli->tipos_carga }}
@endif @if($activeTab === 'choferes')

Gestión de Choferes y Reporte de Kilometraje

@if($pinActionMessage)
{{ $pinActionMessage }}
@endif
{{ count($choferesDB) }} chofer(es) visibles
@foreach($choferesDB as $cho) @endforeach
Sesión PIN Acción Reporte
{{ $cho['nombre'] }} @if(!empty($cho['legajo']))
Legajo: {{ $cho['legajo'] }} @endif
DNI: {{ $cho['dni'] }}
{{ $cho['estado_linti'] }} {{ $cho['estado_actual'] }}

{{ $cho['estado_actual_detalle'] }}

{{ ($cho['session_status'] ?? 'offline') === 'online' ? 'En línea' : 'Desconectado' }}

@if(!empty($cho['session_last_login_at'])) Último login: {{ $cho['session_last_login_at'] }} @elseif(!empty($cho['session_last_logout_at'])) Último cierre: {{ $cho['session_last_logout_at'] }} @else Sin actividad registrada @endif

{{ $cho['pin_status_label'] }}
{{ number_format($cho['kms_mes_actual'], 0, ',', '.') }} km {{ number_format($cho['kms_total'], 0, ',', '.') }} km
@endif @if($activeTab === 'detalle-chofer' && $choferSeleccionadoDetalle)

VIANA OS | Reporte Oficial de Chofer

Sistema Integral de Logística y Trazabilidad

Fecha de Emisión: {{ now()->format('d/m/Y') }}

LINTI / Habilitación: Vigente OK

Conductor Asignado

{{ $choferSeleccionadoDetalle->nombre }}

@if(!empty($choferSeleccionadoDetalle->legajo))

Legajo: {{ $choferSeleccionadoDetalle->legajo }}

@endif

DNI: {{ $choferSeleccionadoDetalle->dni }}

{{ ($choferSeleccionadoDetalle->session_status ?? 'offline') === 'online' ? 'Sesión en línea' : 'Sesión desconectada' }}

@if(!empty($choferSeleccionadoDetalle->last_login_at)) Último login: {{ $choferSeleccionadoDetalle->last_login_at }} @endif

KMs Mes Actual {{ number_format($choferSeleccionadoDetalle->kms_mes_actual, 0, ',', '.') }}
KMs Acumulados {{ number_format($choferSeleccionadoDetalle->kms_mes_actual + $choferSeleccionadoDetalle->kms_mes_pasado, 0, ',', '.') }}

Historial de Viajes Asignados y Unidades Operadas

@foreach($viajesDB as $v) @if(str_contains($v->chofer, explode(',', $choferSeleccionadoDetalle->nombre)[0])) @endif @endforeach
Nro ViajeDestilería / ClienteCorredor LogísticoUnidad AsignadaEstado
{{ $v->nro_viaje }} {{ $v->cliente }} {{ $v->origen }} → {{ $v->destino }} {{ $v->unidad }} {{ $v->estado }}
Firma Gerencia de Operaciones: ______________________ Firma del Chofer: ______________________
@endif @if($activeTab === 'tractores')

Flota de Tractores Pesados

@if(auth()->user()?->isSuperAdmin())@endif
@foreach($tractoresDB as $trac)@endforeach
InternoModelo / ConfiguraciónAñoEjesKilometrajeEstado
{{ $trac->interno }} {{ $trac->patente }}{{ $trac->marca_modelo }}{{ $trac->anio ?? '—' }}{{ $trac->ejes ? $trac->ejes . ' ejes' : '—' }}{{ number_format($trac->kilometraje, 0, ',', '.') }} km@php $claseEstado = \App\Support\EstadoUnidad::badgeClass($trac->estado); @endphp{{ $trac->estado }}@if(auth()->user()?->isSuperAdmin() && in_array($trac->estado, ['Habilitado', 'Deshabilitado por Gerencia']))@endif
@endif @if($activeTab === 'semis')

Cisternas y Semirremolques

@if(auth()->user()?->isSuperAdmin())@endif
@foreach($semisDB as $semi)@endforeach
InternoTipo de CisternaCapacidadEstado
{{ $semi->interno }}{{ $semi->tipo }}{{ $semi->capacidad }}@php $claseEstado = \App\Support\EstadoUnidad::badgeClass($semi->estado); @endphp{{ $semi->estado }}@if(auth()->user()?->isSuperAdmin() && in_array($semi->estado, ['Habilitado', 'Deshabilitado por Gerencia']))@endif
@endif @if($activeTab === 'mantenimiento')

Mantenimiento Preventivo

@if(auth()->user()?->isJefeTaller() || auth()->user()?->isSuperAdmin()) Panel de Taller → @endif
@foreach($tractoresDB as $trac) @php $estado = \App\Support\MantenimientoEstado::calcular($trac->kilometraje, $trac->km_proximo_mantenimiento); @endphp @endforeach @foreach($semisDB as $semi) @php $estado = \App\Support\MantenimientoEstado::calcular($semi->kilometraje, $semi->km_proximo_mantenimiento); @endphp @endforeach
UnidadKm ActualPróximo ServiceEstadoHistorial
{{ $trac->interno }} - {{ $trac->marca_modelo }} {{ number_format($trac->kilometraje, 0, ',', '.') }} km {{ $trac->km_proximo_mantenimiento ? number_format($trac->km_proximo_mantenimiento, 0, ',', '.') . ' km' : 'Sin registrar' }} {{ $estado['etiqueta'] }} @if(auth()->user()?->isJefeTaller() || auth()->user()?->isSuperAdmin()) Ver historial @else — @endif
{{ $semi->interno }} - {{ $semi->tipo }} {{ number_format($semi->kilometraje, 0, ',', '.') }} km {{ $semi->km_proximo_mantenimiento ? number_format($semi->km_proximo_mantenimiento, 0, ',', '.') . ' km' : 'Sin registrar' }} {{ $estado['etiqueta'] }} @if(auth()->user()?->isJefeTaller() || auth()->user()?->isSuperAdmin()) Ver historial @else — @endif
@endif @if($activeTab === 'viajes')

Hojas de Ruta

@foreach($viajesDB as $viaje) @endforeach
ViajeCliente / DestileríaCorredorChofer / UnidadEstadoAcción PDF Minimalista
{{ $viaje->nro_viaje }} {{ $viaje->cliente }} {{ $viaje->origen }} -> {{ $viaje->destino }} {{ $viaje->chofer }}
{{ $viaje->unidad }}
{{ $viaje->estado }} @if(!$viaje->iniciado_at && $viaje->carga_programada_at)
📅 Sale el {{ $viaje->carga_programada_at->format('d/m/Y H:i') }}
@endif
@if(!$viaje->iniciado_at && $viaje->estado !== 'Finalizado') @endif @if($viaje->estado !== 'Finalizado') @endif
@endif @if($activeTab === 'detalle-viaje-pdf' && $viajeSeleccionadoPdf)

VIANA OS

Carta de Porte Electrónica & Trazabilidad

Nro Viaje: {{ $viajeSeleccionadoPdf->nro_viaje }}

Fecha emisión: {{ now()->format('d/m/Y H:i') }}

Datos del Cliente / Destilería

{{ $viajeSeleccionadoPdf->cliente }}

Estado de Viaje: {{ $viajeSeleccionadoPdf->estado }}

Tripulación & Asignación

Chofer: {{ $viajeSeleccionadoPdf->chofer }} (LINTI Vigente)

Tractor / Unidad: {{ $viajeSeleccionadoPdf->unidad }}

Corredor Logístico y Puntos de Carga / Descarga

Origen (Carga Autorizada)

📍 {{ $viajeSeleccionadoPdf->origen }}

Destino (Descarga Aduanera)

📍 {{ $viajeSeleccionadoPdf->destino }}

🚧 Hitos de Ruta, Peajes Obligatorios & Estanqueidad

@if($viajeSeleccionadoPdf->checklist_detalles) @foreach(json_decode($viajeSeleccionadoPdf->checklist_detalles, true) as $chk)
{{ str_contains($chk['item'], 'Peaje') ? '🚧 ' : '✅ ' }} {{ $chk['item'] }} Firma: {{ $chk['firma'] }}
{{ $chk['estado'] }}
@endforeach @endif

_________________________________________

Firma y Sello Despachante Logística

_________________________________________

Firma Chofer Responsable (LINTI)

@endif @if($activeTab === 'detalle-incidente' && $incidenteSeleccionado)
⚠️ Reporte de falla en ruta

OT #{{ $incidenteSeleccionado->id }}

Cargado el {{ $incidenteSeleccionado->created_at?->format('d/m/Y H:i') }}

{{ $incidenteSeleccionado->estadoLabel() }}
Chofer

{{ $incidenteSeleccionado->chofer?->nombre ?? '—' }}

Viaje

{{ $incidenteSeleccionado->viaje?->nro_viaje ?? '—' }}

Descripción del chofer

{{ $incidenteSeleccionado->observaciones ?: 'Sin descripción adicional.' }}

@if($incidenteSeleccionado->foto_path)
Foto adjunta Foto del incidente reportado
@endif
Componente: {{ $incidenteSeleccionado->componente }} @if($incidenteSeleccionado->km_actual) Km al momento del reporte: {{ number_format($incidenteSeleccionado->km_actual, 0, ',', '.') }} @endif
@endif
@if($showModal)

{{ $modalTitle }}

@if($modalTitle === 'Nuevo Cliente')
@elseif($modalTitle === 'Nuevo Chofer')
El PIN inicial del chofer será el DNI sin puntos, usando sus últimos 4 dígitos. Al primer ingreso, la app pedirá definir un PIN definitivo.
@elseif($modalTitle === 'Nuevo Tractor')
@elseif($modalTitle === 'Nuevo Semi')
@elseif($modalTitle === 'Programar Nuevo Viaje')

Origen (Carga)

@if($clienteSeleccionado && $clienteSeleccionado->domicilios_origen) @endif

Destino (Descarga)

@if($clienteSeleccionado && $clienteSeleccionado->domicilios_destino) @endif

Asignación Inteligente con Patentes

@if(!empty($programacionCompatibilidad['enabled']) && !empty($programacionCompatibilidad['fecha_carga'])) @if(!empty($programacionCompatibilidad['conflictos_count']))
Incompatibilidad por horario

Hay unidades ocupadas para la hora programada del origen.

Reprogramar desde {{ $programacionCompatibilidad['reprogramar_desde'] ?? 'la primera disponibilidad posterior' }}.

{{ $programacionCompatibilidad['conflictos_count'] }} conflictos
@if(!empty($programacionCompatibilidad['conflictos']))
@foreach($programacionCompatibilidad['conflictos'] as $conflicto)
{{ $conflicto['tipo'] }} {{ $conflicto['unidad'] }} · {{ $conflicto['detalle'] }}
@if(!empty($conflicto['reprogramar_desde'])) {{ $conflicto['reprogramar_desde'] }} @endif
{{ $conflicto['motivo'] }}
@endforeach
@endif
@endif
Compatibilidad de programación

{{ $programacionCompatibilidad['tipo_carga'] ?? 'Tipo de carga' }}

{{ $programacionCompatibilidad['origen'] ?? '' }} → {{ $programacionCompatibilidad['destino'] ?? '' }}

{{ !empty($programacionCompatibilidad['ventana_ok']) ? 'Ventana ideal' : 'Ventana extendida' }}

{{ $programacionCompatibilidad['fecha_carga'] ?? '' }} · {{ $programacionCompatibilidad['fecha_descarga'] ?? '' }}

Radio activo: {{ $programacionCompatibilidad['radio_km'] ?? 120 }} km

@if(!empty($programacionCompatibilidad['sugerencias_limit']))

Mostrando {{ $programacionCompatibilidad['sugerencias_limit'] }} sugerencia(s) priorizada(s)

@endif
Filtro de distancia

Solo muestra unidades compatibles dentro del radio elegido.

{{ $programacionCompatibilidad['radio_km'] ?? 120 }} km
20 km 500 km
Tractores aptos {{ $programacionCompatibilidad['tractores_count'] ?? 0 }}
Semis aptos {{ $programacionCompatibilidad['semis_count'] ?? 0 }}
Choferes OK {{ $programacionCompatibilidad['choferes_count'] ?? 0 }}
@if(!empty($programacionCompatibilidad['sin_sugerencias']))
Sin unidades dentro del radio

No hay unidades compatibles dentro del radio seleccionado.

Probá ampliar la barra de distancia para ver la primera sugerencia inteligente.

@elseif(!empty($programacionCompatibilidad['mejor_pareja']))
Opción más conveniente
{{ $programacionCompatibilidad['mejor_pareja']['tractor']['label'] }} + {{ $programacionCompatibilidad['mejor_pareja']['semi']['label'] }}
Ubicación actual: {{ $programacionCompatibilidad['mejor_pareja']['ubicacion'] }}
Evaluado contra: {{ $programacionCompatibilidad['origen'] ?? '' }}
Unidos en la misma zona
A {{ number_format($programacionCompatibilidad['mejor_pareja']['distancia_origen_km'], 0, ',', '.') }} km del origen
Tractor {{ $programacionCompatibilidad['mejor_pareja']['tractor']['label'] }}

Más conveniente por cercanía y disponibilidad para esta fecha.

Semi {{ $programacionCompatibilidad['mejor_pareja']['semi']['label'] }}

Más conveniente por cercanía y compatibilidad de carga.

@if(!empty($programacionCompatibilidad['mejor_chofer']))
Chofer sugerido
{{ $programacionCompatibilidad['mejor_chofer']['label'] }} {{ number_format($programacionCompatibilidad['mejor_chofer']['kms_mes_actual'] ?? 0, 0, ',', '.') }} km este mes
@endif
@endif

Solo se muestran opciones compatibles para ese origen, tipo de carga y ventana de fecha. La distancia es una estimación del punto de carga al lugar donde estaría la unidad en esa fecha.

@else
Compatibilidad de programación

Seleccioná la fecha de carga para calcular unidades disponibles

{{ $programacionCompatibilidad['mensaje'] ?? 'Aún no hay fecha de origen seleccionada.' }}

@endif
@if(!empty($programacionCompatibilidad['enabled']) && !empty($programacionCompatibilidad['tractores'][0]))

Mejor sugerido: {{ $programacionCompatibilidad['tractores'][0]['label'] }} · {{ $programacionCompatibilidad['tractores'][0]['motivo'] }} · {{ number_format($programacionCompatibilidad['tractores'][0]['distancia_origen_km'], 0, ',', '.') }} km al origen · respecto a {{ $programacionCompatibilidad['origen'] ?? '' }}

@endif
@if(!empty($programacionCompatibilidad['enabled']) && !empty($programacionCompatibilidad['semis'][0]))

Mejor sugerido: {{ $programacionCompatibilidad['semis'][0]['label'] }} · {{ $programacionCompatibilidad['semis'][0]['motivo'] }} · {{ number_format($programacionCompatibilidad['semis'][0]['distancia_origen_km'], 0, ',', '.') }} km al origen · respecto a {{ $programacionCompatibilidad['origen'] ?? '' }}

@endif
@if(!empty($programacionCompatibilidad['enabled']) && !empty($programacionCompatibilidad['choferes'][0]))

Mejor sugerido: {{ $programacionCompatibilidad['choferes'][0]['label'] }} · {{ number_format($programacionCompatibilidad['choferes'][0]['kms_mes_actual'] ?? 0, 0, ',', '.') }} km este mes · respecto a {{ $programacionCompatibilidad['origen'] ?? '' }}

@endif
@endif
@php $method = 'closeModal'; if($modalTitle === 'Nuevo Cliente') $method = 'guardarCliente'; if($modalTitle === 'Nuevo Chofer') $method = 'guardarChofer'; if($modalTitle === 'Nuevo Tractor') $method = 'guardarTractor'; if($modalTitle === 'Nuevo Semi') $method = 'guardarSemi'; if($modalTitle === 'Programar Nuevo Viaje') $method = 'guardarViaje'; @endphp
@endif @if($confirmPinResetModal && $pinResetPreview)

Confirmar blanqueo de PIN

Vas a resetear el PIN del chofer y volverá a usar el acceso temporal basado en el DNI.

Chofer: {{ $pinResetPreview['nombre'] }}
Legajo: {{ $pinResetPreview['legajo'] }}
DNI: {{ $pinResetPreview['dni'] }}
PIN temporal que quedará activo: {{ $pinResetPreview['pin_temporal'] }}

Esta acción marcará el PIN como temporal hasta que el chofer ingrese y defina uno definitivo en la app.

@endif