@once @endonce
@php $romaneios = $dashboard['romaneios']; $filterQuery = array_filter([ 'data' => $filters['data'], 'filial_id' => $filters['filial_id'], 'ordenar' => $filters['ordenar'], 'supervisao' => $filters['supervisao'] === 'minha' ? 'minha' : null, ], fn ($value) => filled($value)); $eventosQuery = $filterQuery; $eventosQuery['eventos'] = $modoEventos ? 0 : 1; $eventosUrl = \App\Filament\Pages\ControleOperacoes::getUrl() . ($eventosQuery ? '?' . http_build_query($eventosQuery) : ''); $supervisaoQuery = $filterQuery; $supervisaoQuery['eventos'] = $modoEventos ? 1 : 0; if ($filters['supervisao'] === 'minha') { unset($supervisaoQuery['supervisao']); } else { $supervisaoQuery['supervisao'] = 'minha'; } $supervisaoUrl = \App\Filament\Pages\ControleOperacoes::getUrl() . '?' . http_build_query($supervisaoQuery); $gridColumns = $modoEventos ? '96px minmax(220px,1.15fr) 150px 118px 102px minmax(245px,1fr)' : '96px minmax(240px,1.25fr) 180px 126px 102px minmax(250px,1fr)'; @endphp
{{ $filters['supervisao'] === 'minha' ? 'Minha supervisao' : 'Todos' }} @if($modoEventos) @svg('heroicon-o-eye-slash', 'fi-icon fi-size-sm', ['style' => 'width:15px;height:15px;']) @else @svg('heroicon-o-list-bullet', 'fi-icon fi-size-sm', ['style' => 'width:15px;height:15px;']) @endif {{ $modoEventos ? 'Ocultar eventos' : 'Ultimos eventos' }}
Atualiza em 03:00
@php $rodizioPorDia = [ 1 => ['1', '2'], 2 => ['3', '4'], 3 => ['5', '6'], 4 => ['7', '8'], 5 => ['9', '0'], ]; $diaSemana = \Illuminate\Support\Carbon::parse($filters['data'])->dayOfWeekIso; $finaisRodizio = $rodizioPorDia[$diaSemana] ?? []; $tempoMaximoChegada = (int) ($dashboard['parametros']['tempo_maximo_chegada_minutos'] ?? 30); @endphp
Placa
Motorista / CPF
Carga / Manifesto
Ocupacao / Frete
Telemetria
Documentos / Status
@forelse($romaneios as $romaneio) @php $documentosTotal = (int) ($romaneio['documentos_total'] ?? $romaneio['notas']); $documentosConcluidos = (int) ($romaneio['documentos_concluidos'] ?? $romaneio['concluidas']); $percentual = $documentosTotal > 0 ? round(($documentosConcluidos / $documentosTotal) * 100) : 0; $placaLimpa = strtoupper(preg_replace('/[^A-Z0-9]/', '', $romaneio['placa'])); $finalPlaca = substr($placaLimpa, -1); $temRodizio = in_array($finalPlaca, $finaisRodizio, true); $rodizioBg = $temRodizio ? '#fff7ed' : '#f1f5f9'; $rodizioColor = $temRodizio ? '#ea580c' : '#cbd5e1'; $rodizioBorder = $temRodizio ? '#fed7aa' : 'rgba(148,163,184,.28)'; $agendaAtiva = filled($romaneio['agenda_at']); $agendaStyle = $agendaAtiva ? ['#dbeafe', '#2563eb', 'Com agendamento'] : ['#f1f5f9', '#cbd5e1', 'Sem agendamento de entrega']; $relogioAtivo = $romaneio['tem_status_chegada'] && $romaneio['status'] !== 'entregue'; $chegadaMinutos = max(0, (int) ($romaneio['chegada_minutos'] ?? 0)); $relogioCritico = $relogioAtivo && ($chegadaMinutos > $tempoMaximoChegada); $relogioBg = $relogioAtivo ? ($relogioCritico ? '#fee2e2' : '#dbeafe') : '#f1f5f9'; $relogioColor = $relogioAtivo ? ($relogioCritico ? '#dc2626' : '#2563eb') : '#cbd5e1'; $statusOperacional = $romaneio['status_operacional'] ?? $romaneio['status']; $tempoChegadaLabel = $chegadaMinutos >= 60 ? intdiv($chegadaMinutos, 60).'H '.($chegadaMinutos % 60).'MIN' : $chegadaMinutos.' MIN'; $statusLabel = match ($statusOperacional) { 'ocorrencia' => 'OCORRÊNCIA '.(int) ($romaneio['notas_ocorrencia_pendentes'] ?? 0), 'chegada' => $relogioCritico ? $tempoChegadaLabel : 'CHEGADA', 'em_rota' => 'EM ROTA', 'aberta' => 'ABERTO', default => strtoupper(str_replace('_', ' ', $statusOperacional)), }; $statusBadgeStyle = match ($statusOperacional) { 'ocorrencia' => ['#fef3c7', '#92400e'], 'chegada' => ['#dbeafe', '#1d4ed8'], 'finalizado' => ['#dcfce7', '#15803d'], 'em_rota' => ['#f3e8ff', '#7e22ce'], default => ['#fef3c7', '#92400e'], }; $capacidadeKg = (float) ($romaneio['capacidade_kg'] ?? 0); $ocupacaoPercentual = $romaneio['ocupacao_percentual'] ?? null; $ocupacaoCor = match (true) { $ocupacaoPercentual === null => '#cbd5e1', $ocupacaoPercentual > 100 => '#dc2626', $ocupacaoPercentual >= 85 => '#f59e0b', default => '#22c55e', }; $diariaVeiculo = (float) ($romaneio['diaria_veiculo'] ?? 0); $freteTotal = (float) ($romaneio['valor_frete_total'] ?? 0); $appAcesso = $romaneio['app_acesso'] ?? null; $appAcessou = (bool) ($appAcesso['acessou'] ?? false); $appAcessoBg = $appAcessou ? '#dcfce7' : '#f1f5f9'; $appAcessoColor = $appAcessou ? '#16a34a' : '#cbd5e1'; $appAcessoTitle = $appAcessou ? 'Acessou o APP: '.($appAcesso['ultimo_acesso'] ?? '-').(($appAcesso['versao'] ?? null) ? ' | Versao '.$appAcesso['versao'] : '') : 'Motorista ainda nao acessou o aplicativo nesta data'; $appAcessoLabel = $appAcessou ? 'Acessou o APP' : 'Acesso APP'; $supervisorId = (int) ($romaneio['supervisor_user_id'] ?? 0); $supervisaoMinha = $supervisorId === (int) auth()->id(); $supervisaoOcupada = $supervisorId !== 0 && ! $supervisaoMinha; $supervisaoTitle = $supervisaoMinha ? 'Duplo clique para liberar da sua supervisao' : ($supervisaoOcupada ? 'Sob supervisao de '.($romaneio['supervisor_nome'] ?: 'outro usuario') : 'Duplo clique para marcar supervisao!'); @endphp
@if($supervisorId !== 0){{ $romaneio['supervisor_nome'] }}@endif
{{ $romaneio['motorista'] }}
{{ $appAcessoLabel }}: {{ $romaneio['motorista_documento'] ?: '-' }}
Manifesto
{{ $romaneio['romaneio'] ?: '-' }}
Integracao
{{ $romaneio['data_romaneio'] ?: '-' }}
Veiculo
{{ strtoupper($romaneio['tipo_veiculo'] ?: '-') }}
Utilizado
@if($ocupacaoPercentual === null) - @else {{ number_format((float) $ocupacaoPercentual, 1, ',', '.') }}% @endif
Carga {{ number_format($romaneio['peso_total'], 3, ',', '.') }} Capacidade {{ $capacidadeKg > 0 ? number_format($capacidadeKg, 0, ',', '.').' kg' : '-' }}
- @svg('heroicon-o-key', 'fi-icon fi-size-sm', ['style' => 'width:14px;height:14px;']) @svg('heroicon-o-chat-bubble-left-right', 'fi-icon fi-size-sm', ['style' => 'width:14px;height:14px;'])
{{ $romaneio['entregas'] }} {{ $romaneio['coletas'] }} {{ $romaneio['transferencias'] }} {{ $romaneio['reentregas'] }} {{ $documentosTotal }}
@if($statusOperacional === 'ocorrencia') @else {{ $statusLabel }} @endif
{{ $percentual }}%
{{ $documentosConcluidos }}/{{ $documentosTotal }}
i
Informacoes da carga
Manifesto {{ $romaneio['romaneio'] ?: '-' }} Integracao {{ $romaneio['data_romaneio'] ?: '-' }} Veiculo {{ strtoupper($romaneio['tipo_veiculo'] ?: '-') }} Utilizado {{ $ocupacaoPercentual === null ? '-' : number_format((float) $ocupacaoPercentual, 1, ',', '.').'%' }} Carga {{ number_format($romaneio['peso_total'], 3, ',', '.') }} Capacidade {{ $capacidadeKg > 0 ? number_format($capacidadeKg, 0, ',', '.').' kg' : '-' }}
@svg('heroicon-o-ellipsis-horizontal', 'fi-icon fi-size-sm', ['style' => 'width:16px;height:16px;'])
@empty
Nenhum romaneio ativo encontrado.
@endforelse
@if($modoEventos) @endif
@if($ocorrenciaModal)
@svg('heroicon-o-exclamation-triangle', 'fi-icon fi-size-md', ['style' => 'width:20px;height:20px;'])
Tratativa de ocorrências Romaneio {{ $ocorrenciaModal['romaneio'] }} | {{ $ocorrenciaModal['placa'] }} | {{ $ocorrenciaModal['motorista'] }}
@if($ocorrenciaFeedback) @svg('heroicon-o-check-circle', 'fi-icon fi-size-sm', ['style' => 'width:14px;height:14px;']) {{ $ocorrenciaFeedback }} @endif
{{ count($ocorrenciaModal['itens']) }} item(ns)
@foreach($ocorrenciaModal['itens'] as $item)
{{ $item['tipo'] === 'nota' ? 'NF' : 'Coleta' }} {{ $item['documento'] }} {{ $item['destinatario'] }} {{ $item['motivo'] }} {{ $item['ocorrida_em'] }}
@endforeach
Ao escolher um romaneio aberto, a data, o motorista e a placa serão herdados dele.
@endif @if($localizacaoModal)
@svg('heroicon-o-map', 'fi-icon fi-size-md', ['style' => 'width:18px;height:18px;'])
{{ $localizacaoModal['titulo'] }} Placa {{ $localizacaoModal['placa'] ?? '-' }}
@if(! ($localizacaoModal['encontrada'] ?? false))
{{ $localizacaoModal['mensagem'] ?? 'Nenhuma localizacao encontrada.' }}
@else
Motorista {{ $localizacaoModal['motorista'] }} CPF {{ $localizacaoModal['cpf'] }}
Veiculo {{ $localizacaoModal['placa'] }} Tipo {{ $localizacaoModal['tipo_veiculo'] }}
Ultimo registro {{ $localizacaoModal['registrado_em'] }} {{ $localizacaoModal['registrado_humano'] }}
App Status {{ $localizacaoModal['status'] }} Bateria {{ $localizacaoModal['bateria'] ?? '-' }}% | v{{ $localizacaoModal['versao_app'] }}
Coordenadas {{ $localizacaoModal['latitude'] }}, {{ $localizacaoModal['longitude'] }}
@svg('heroicon-o-map-pin', 'fi-icon fi-size-sm', ['style' => 'width:15px;height:15px;']) Abrir no Maps
@endif
@endif @if($cancelamentoModal)
@svg('heroicon-o-x-circle', 'fi-icon fi-size-md', ['style' => 'width:18px;height:18px;'])
Cancelar operacao vazia Romaneio {{ $cancelamentoModal['romaneio'] }} | {{ $cancelamentoModal['placa'] }} | {{ $cancelamentoModal['data_origem'] }}
Esta acao nao exclui fisicamente a operacao. Ela marca como cancelada, remove da listagem operacional do dia e grava o historico com usuario, data/hora e observacao.
@endif @if($reprogramacaoModal)
@svg('heroicon-o-arrow-path-rounded-square', 'fi-icon fi-size-md', ['style' => 'width:18px;height:18px;'])
Reprogramar pendencias Romaneio {{ $reprogramacaoModal['romaneio'] }} | {{ $reprogramacaoModal['placa'] }} | origem {{ $reprogramacaoModal['data_origem'] }}
Notas em aberto {{ count($reprogramacaoModal['notas']) }}
@forelse($reprogramacaoModal['notas'] as $nota) @empty
Nenhuma nota aberta.
@endforelse
Coletas em aberto {{ count($reprogramacaoModal['coletas']) }}
@forelse($reprogramacaoModal['coletas'] as $coleta) @empty
Nenhuma coleta aberta.
@endforelse
@endif