@extends('adminlte.app') {{-- Detalhe do mapa de carga. Layout TFDS (tfcv-*), igual ao da Validação de Comissões. --}} @section('content')
@if ($message = Session::get('success'))
{!! $message !!}
@endif @if ($acesso = Session::get('acesso_temporario'))
Acesso temporário criado. Entregue estes dados ao motorista — a palavra-passe não volta a ser mostrada.
Motorista: {{ $acesso['nome'] }} · Utilizador: {{ $acesso['email'] }} · Palavra-passe: {{ $acesso['password'] }} · Válido até {{ $acesso['ate'] }}
@endif {{-- ====================== HEADER ====================== --}}

{{ $mapa->referencia }} {{ $mapa->estado_label }} @if($mapa->tem_divergencia) Divergência @endif

Carga {{ optional($mapa->data_carga)->format('d/m/Y') ?: '—' }} · Viatura {{ $mapa->matricula ?: '—' }} · {{ $mapa->driver ? $mapa->driver->first_name : ($mapa->cdu_nome ?: 'sem motorista') }}

Voltar
{{-- ====================== KPIs ====================== --}} @php $total = $mapa->descargas->count(); $feitas = $mapa->descargas->whereIn('estado', ['concluida','falhada'])->count(); $pct = $total ? round($feitas / $total * 100) : 0; $litrosPrev = (float) $mapa->descargas->sum('qtd_prevista'); $litrosEnt = (float) $mapa->descargas->sum('qtd_entregue'); $litrosCarregados = (float) optional($mapa->enchimento)->litros_total; $divergencia = (float) $mapa->descargas->sum('divergencia'); $temLitrosEmFalta = $litrosCarregados > $litrosEnt; @endphp
Execução
{{ $pct }}%
{{ $feitas }} de {{ $total }} descargas
Carregado
{{ $mapa->enchimento ? number_format($mapa->enchimento->litros_total, 0, ',', ' ') : '—' }}
@if($mapa->enchimento) {{ $mapa->enchimento->temBoletim() ? 'boletim anexado' : 'boletim em falta' }} @else sem registo de enchimento @endif
Entregue
{{ number_format($litrosEnt, 0, ',', ' ') }}
de {{ number_format($litrosPrev, 0, ',', ' ') }} L previstos
Diferença vs CSV
{{ $divergencia > 0 ? '+' : '' }}{{ number_format($divergencia, 0, ',', ' ') }}
{{ $mapa->descargas->where('conciliada', true)->count() }} descargas conciliadas
@if($temLitrosEmFalta)
Esse MCG tem litros a mais por descarregar.
@endif
{{-- ====================================================== --}} {{-- Coluna principal --}} {{-- ====================================================== --}}
{{-- ---------- Motorista ---------- --}}

Motorista

@if($mapa->motorista_confirmado && $mapa->driver)
{{ $mapa->driver->first_name }} confirmado @if($mapa->motorista_origem === 'auto') automático pelo CSV @elseif($mapa->motorista_origem === 'externo') subcontratado @endif @if($mapa->cdu_nome && $mapa->driver->first_name !== $mapa->cdu_nome)
Nome no CSV: {{ $mapa->cdu_nome }}
@endif
@else
Nome no CSV: {{ $mapa->cdu_nome ?: '— sem nome —' }} @if($mapa->motorista_score) — melhor correspondência encontrada: {{ number_format($mapa->motorista_score, 0) }}% @else — sem correspondência nos motoristas cadastrados @endif
@if(!empty($sugestoes))

Candidatos:

@foreach($sugestoes as $sugestao)
@csrf
@endforeach
@endif @endif @if($permissoes->atribuir_mapas_carga)
@csrf
@endif @if($permissoes->gerir_acessos_motorista && !$mapa->acessoTemporario)

Motorista subcontratado sem cadastro? Crie um acesso temporário, válido só para este mapa.

@csrf
@elseif($mapa->acessoTemporario)
acesso temporário {{ $mapa->acessoTemporario->nome }} @if($mapa->acessoTemporario->transportador) · {{ $mapa->acessoTemporario->transportador }} @endif · válido até {{ optional($mapa->acessoTemporario->valido_ate)->format('d/m/Y H:i') }}
@endif
{{-- ---------- Enchimento ---------- --}}

Enchimento e compartimentos

@if($mapa->enchimento)
{{ number_format($mapa->enchimento->litros_total, 0, ',', ' ') }} L @if($mapa->enchimento->local) · {{ $mapa->enchimento->local }} @endif @if($mapa->enchimento->registado_em) · {{ $mapa->enchimento->registado_em->format('d/m/Y H:i') }} @endif
@forelse($mapa->enchimento->documentos->where('tipo', 'boletim_enchimento') as $documento) Boletim @empty Boletim em falta @endforelse
@foreach(($mapa->enchimento->avisos ?? []) as $aviso)
{{ $aviso }}
@endforeach @foreach($mapa->enchimento->linhas as $linha) @endforeach
CompartimentoProdutoLitrosCapacidade
{{ $linha->compartimento ? '#' . $linha->compartimento : '—' }} {{ $linha->descricao ?: $linha->artigo }} {{ number_format($linha->litros, 0, ',', ' ') }} {{ $linha->capacidade_compartimento ? number_format($linha->capacidade_compartimento, 0, ',', ' ') : '—' }} @if($linha->excede_capacidade) excede @endif
@else
Ainda sem registo de enchimento.
@if(!empty($compartimentos))

Compartimentos do conjunto:

@foreach($compartimentos as $numero => $capacidade) #{{ $numero }}@if($capacidade > 0) · {{ number_format($capacidade, 0, ',', ' ') }} L @endif @endforeach @endif @endif
{{-- ---------- Descargas ---------- --}}
{{ $feitas }} de {{ $total }} descargas concluídas
@forelse($mapa->descargas as $descarga) @empty @endforelse
# Cliente Produto Prevista Entregue CSV Horas Estado Documentos
{{ $descarga->sequencia }} {{ $descarga->cliente_nome }} @if($descarga->requer_desconto_ga) GA @endif @if($descarga->sms_estado === 'enviado') SMS @elseif(in_array($descarga->sms_estado, ['falhou','sem_gestor','sem_numero'])) SMS falhou @endif @if($descarga->gestor)
Gestor: {{ $descarga->gestor->name }}
@endif
{{ $descarga->produto_descricao ?: $descarga->artigo }} {{ number_format($descarga->qtd_prevista, 0, ',', ' ') }} {{ $descarga->qtd_entregue !== null ? number_format($descarga->qtd_entregue, 0, ',', ' ') : '—' }} @if($descarga->qtd_csv !== null) {{ number_format($descarga->qtd_csv, 0, ',', ' ') }} @if(abs((float) $descarga->divergencia) >= 1)
{{ $descarga->divergencia > 0 ? '+' : '' }}{{ number_format($descarga->divergencia, 0, ',', ' ') }}
@endif @else — @endif
@if($descarga->a_caminho_em)
saída {{ $descarga->a_caminho_em->format('H:i') }}
@endif @if($descarga->concluida_em)
fim {{ $descarga->concluida_em->format('H:i') }}
@endif
{{ $descarga->estado_label }} @foreach($descarga->documentos as $documento) {{ \Illuminate\Support\Str::limit(\App\Models\Descarga::tiposDocumento()[$documento->tipo] ?? $documento->tipo, 12) }} @endforeach @if($descarga->estado === 'concluida' && $descarga->documentosEmFalta()) falta documentação @endif
Sem descargas neste mapa.
{{-- ---------- Folha de serviço ---------- --}} @if($permissoes->exibir_folha_servico && $jornadas->count())

Folha de serviço

Registo operacional — a fonte legal dos tempos é o tacógrafo
@foreach($jornadas as $jornada)
{{ optional($jornada->data)->format('d/m/Y') }} {{ ucfirst($jornada->estado) }} @if($jornada->tem_alerta) {{ count($jornada->alertas ?? []) }} alerta(s) @endif @if($jornada->temAssinatura()) assinada @endif
{{ optional($jornada->inicio_em)->format('H:i') }} — {{ optional($jornada->fim_em)->format('H:i') ?: 'em curso' }} · Condução {{ \App\Models\Jornada::formataMinutos($jornada->minutos_conducao) }} · Pausas {{ \App\Models\Jornada::formataMinutos($jornada->minutos_pausa) }} · Trabalho {{ \App\Models\Jornada::formataMinutos($jornada->minutos_trabalho_total) }}
@foreach(($jornada->alertas ?? []) as $alerta)
{{ $alerta['mensagem'] }} — {{ $alerta['base_legal'] }}
@endforeach @foreach($jornada->periodos as $periodo) @endforeach
PeríodoInícioFimDuraçãoOrigem
{{ $periodo->tipo_label }} {{ optional($periodo->inicio_em)->format('H:i') }} {{ optional($periodo->fim_em)->format('H:i') ?: '—' }} {{ \App\Models\Jornada::formataMinutos($periodo->minutos) }} {{ $periodo->origem }}
@endforeach
@endif
{{-- ====================================================== --}} {{-- Coluna lateral: posição + histórico --}} {{-- ====================================================== --}}

Posição da viatura

A consultar a Cartrack…

Histórico

{{ $mapa->eventos->count() }} eventos
@foreach($mapa->eventos->sortByDesc('ocorrido_em') as $evento)
{{ $evento->descricao }}
{{ optional($evento->ocorrido_em)->format('d/m/Y') }} @if($evento->hora_estimada) (sem hora) @else {{ optional($evento->ocorrido_em)->format('H:i') }} @endif {{ $evento->origem }} @if($evento->user) {{ $evento->user->name }} @elseif($evento->driver) {{ $evento->driver->first_name }} @endif @if($evento->hora_estimada && $evento->registado_em)
sistema soube em {{ $evento->registado_em->format('d/m H:i') }} @endif
@endforeach

Documentos do mapa

@forelse($mapa->documentos as $documento) {{ $documento->tipo }} @empty
Sem documentos ao nível do mapa.
@endforelse
@endsection