@once @endonce
@if(! $entrega)
Romaneio nao localizado.
@else @php $notasAtivas = $notas->where('status_entrega', '!=', 'cancelada'); $coletasAtivas = $coletas->where('status', '!=', 'cancelada'); $notasTotal = $notasAtivas->count(); $coletasTotal = $coletasAtivas->count(); $movimentosTotal = $notasTotal + $coletasTotal; $notasEntregues = $notasAtivas->where('status_entrega', 'entregue')->count(); $coletasConcluidas = $coletasAtivas->where('status', 'coletada')->count(); $movimentosConcluidos = $notasEntregues + $coletasConcluidas; $volumesTotal = $notasAtivas->sum(fn ($nota) => (float) ($nota->quantidade_volumes ?: $nota->volume_total ?: 0)) + $coletasAtivas->sum(fn ($coleta) => (float) ($coleta->quantidade_volumes ?: $coleta->volume_estimado ?: 0)); $percentual = $movimentosTotal > 0 ? round(($movimentosConcluidos / $movimentosTotal) * 100) : 0; $placa = $entrega->veiculo_placa ?: 'SEM PLACA'; $controleUrl = \App\Filament\Pages\ControleOperacoes::getUrl([ 'data' => $entrega->data_romaneio?->toDateString() ?: now()->toDateString(), 'filial_id' => $entrega->filial_id, ]); $movimentos = collect($notas) ->map(fn ($nota) => ['tipo' => 'nota', 'registro' => $nota, 'ordem' => $nota->sequencia_entrega ?: $nota->id]) ->merge(collect($coletas)->map(fn ($coleta) => ['tipo' => 'coleta', 'registro' => $coleta, 'ordem' => 900000 + $coleta->id])) ->sortBy('ordem') ->values(); $movimentosConcluidosTimeline = $movimentos->filter(function ($movimento) { $registro = $movimento['registro']; return $movimento['tipo'] === 'coleta' ? $registro->status === 'coletada' : $registro->status_entrega === 'entregue'; })->sortBy(function ($movimento) { $registro = $movimento['registro']; return ($movimento['tipo'] === 'coleta' ? $registro->coletada_at : $registro->entregue_at)?->timestamp ?? PHP_INT_MAX; })->values(); @endphp
BRASIL BR {{ $placa }}
{{ $entrega->motorista_nome ?: 'Motorista nao definido' }}
CPF: {{ $entrega->motorista_documento ?: '-' }}
{{ $entrega->regiao ?: 'Regiao nao informada' }}
Romaneio
{{ $romaneiosLabel ?: ($entrega->numero_romaneio ?: '-') }}
{{ $entrega->data_romaneio?->format('d/m/Y') ?: '-' }}
Progresso {{ $movimentosConcluidos }}/{{ $movimentosTotal }}
{{ $percentual }}%
Localização: {{ $dispositivoTopo['ultima_localizacao'] ?? '-' }}
@php $dispositivoResumo = trim(collect([$dispositivoTopo['fabricante'] ?? null, $dispositivoTopo['modelo'] ?? null])->filter()->implode(' ')); $sistemaResumo = trim(collect([$dispositivoTopo['plataforma'] ?? null, $dispositivoTopo['versao'] ?? null])->filter()->implode(' ')); $dispositivoTitle = collect([$dispositivoResumo ?: null, $sistemaResumo ?: null, !empty($dispositivoTopo['app']) ? 'App '.$dispositivoTopo['app'] : null, $dispositivoTopo['origem'] ?? null, $dispositivoTopo['data'] ?? null])->filter()->implode(' · '); $estadoApp = $dispositivoTopo['estado_app'] ?? 'sem_log'; $estadoAppStyle = match ($estadoApp) { 'ativo' => ['#dcfce7', '#166534', 'Aplicativo ativo agora', 'Aberto agora'], 'segundo_plano' => ['#dbeafe', '#1d4ed8', 'Aplicativo em segundo plano ou sem comunicação recente', 'Em segundo plano'], default => ['#f1f5f9', '#94a3b8', 'Nenhum log do aplicativo', 'Sem log'], }; @endphp
@svg('heroicon-o-device-phone-mobile', 'fi-icon', ['style' => 'width:14px;height:14px;']) Dispositivo v{{ $dispositivoTopo['app'] ?? '-' }}
{{ $dispositivoResumo ?: 'Não informado' }}{{ $sistemaResumo ? ' · '.$sistemaResumo : '' }}
Status: {{ $estadoAppStyle[3] }}
Voltar
Ações  ▾
Romaneio @if($this->podeExcluirAdministrativamente()) @endif
@forelse($movimentosConcluidosTimeline as $movimentoTimeline) @php $timelineColeta = $movimentoTimeline['tipo'] === 'coleta'; $timelineRegistro = $movimentoTimeline['registro']; $timelineNome = $timelineColeta ? ($timelineRegistro->remetente_nome ?: $timelineRegistro->solicitante_nome ?: 'Coleta') : ($timelineRegistro->destinatario_nome ?: 'Destinatário não informado'); $timelineEndereco = $timelineColeta ? trim(collect([$timelineRegistro->origem_endereco, $timelineRegistro->origem_bairro, $timelineRegistro->origem_cidade, $timelineRegistro->origem_uf])->filter()->implode(' · ')) : trim(collect([$timelineRegistro->destino_endereco, $timelineRegistro->destino_bairro, $timelineRegistro->destino_cidade, $timelineRegistro->destino_uf])->filter()->implode(' · ')); @endphp @if($loop->first)
@endif
{{ $timelineNome }}
✓
{{ $timelineEndereco ?: 'Endereço não informado' }}
@if($loop->last)
@endif @empty
Nenhuma entrega ou coleta concluída neste movimento.
@endforelse
SQ / Filial
Documentos
Mercadoria
Cliente / Destinatario
Horarios
Detalhes
@forelse($movimentos as $movimento) @php $isColeta = $movimento['tipo'] === 'coleta'; $registro = $movimento['registro']; $statusOriginal = $isColeta ? ($registro->status ?: 'solicitada') : ($registro->status_entrega ?: 'pendente'); $status = in_array($statusOriginal, ['roteirizada', 'alocada'], true) ? 'em_rota' : $statusOriginal; $ocorrenciasRegistro = $registro->ocorrencias; $ocorrenciaAtualLinha = $ocorrenciasRegistro->sortByDesc('ocorrida_at')->first(); $descricaoOcorrenciaLinha = trim((string) ( $ocorrenciaAtualLinha?->descricao ?: ($registro->ocorrencia_descricao ?? '') ?: ($ocorrenciaAtualLinha?->tratativa ?? '') )); $ocorrenciaComCiencia = $ocorrenciasRegistro->contains( fn ($ocorrencia) => (bool) $ocorrencia->tratada || filled($ocorrencia->tratativa) || $ocorrencia->pendencia !== null ); $statusColor = match ($status) { 'entregue', 'coletada' => ['#dcfce7', '#166534'], 'ocorrencia' => $ocorrenciaComCiencia ? ['#dcfce7', '#166534'] : ['#fef3c7', '#92400e'], 'cancelada' => ['#fee2e2', '#991b1b'], 'chegada' => ['rgba(6, 182, 212, .14)', '#0891b2'], 'em_rota' => ['#f3e8ff', '#7e22ce'], 'roteirizada', 'programada', 'alocada' => ['#dbeafe', '#1d4ed8'], default => ['#f1f5f9', '#334155'], }; $sacUrl = $isColeta ? \App\Filament\Pages\SacAtendimento::getUrl(['tipo' => 'coleta', 'busca' => $registro->numero_coleta ?: $registro->id]) : \App\Filament\Pages\SacAtendimento::getUrl(['tipo' => 'nota_fiscal', 'busca' => $registro->numero_nf ?: $registro->chave_nfe]); $editUrl = $isColeta ? \App\Filament\Resources\Coletas\ColetaResource::getUrl('edit', ['record' => $registro]) : \App\Filament\Resources\NotasFiscais\NotaFiscalResource::getUrl('edit', ['record' => $registro]); $temOcorrencia = $status === 'ocorrencia' || filled($registro->ocorrencia_at ?? null) || $ocorrenciasRegistro->isNotEmpty(); $temReentrega = ! $isColeta && ((bool) ($registro->reentrega ?? false) || (bool) ($registro->tentativa_reentrega ?? false)); $comprovantePath = $registro->comprovantes->first()?->arquivo_path ?: (! $isColeta ? ($registro->comprovante_path ?? null) : null); $comprovanteUrl = filled($comprovantePath) ? (str_starts_with((string) $comprovantePath, 'http') ? $comprovantePath : $sacUrl) : null; $validacoesComprovantes = $registro->comprovantes ->map(fn ($comprovante) => (string) (($comprovante->payload ?? [])['_validacao'] ?? 'pendente')); $validacaoComprovante = ! $comprovanteUrl ? 'pendente' : (($validacoesComprovantes->contains('reprovado') || (! $isColeta && (int) ($registro->ia ?? 0) === 2)) ? 'reprovado' : (($validacoesComprovantes->isNotEmpty() && $validacoesComprovantes->every(fn ($validacao) => $validacao === 'aprovado')) || (! $isColeta && (int) ($registro->ia ?? 0) === 1) ? 'aprovado' : 'pendente')); $validacaoLetra = match ($validacaoComprovante) {'aprovado' => 'A', 'reprovado' => 'R', default => 'N'}; $validacaoClasse = match ($validacaoComprovante) {'aprovado' => 'is-approved', 'reprovado' => 'is-rejected', default => 'is-pending'}; $despesaResumo = $registro->getAttribute('despesas_resumo') ?: []; $agendaMovimento = ! $isColeta && $registro->relationLoaded('agendamento') && $registro->agendamento?->status !== 'cancelado' ? $registro->agendamento : null; $temDespesa = (int) ($despesaResumo['total'] ?? 0) > 0; $despesaClasse = (int) ($despesaResumo['pendentes'] ?? 0) > 0 ? 'is-expense-pending' : (((int) ($despesaResumo['pagas'] ?? 0) === (int) ($despesaResumo['total'] ?? 0)) ? 'is-expense-paid' : (((int) ($despesaResumo['aprovadas'] ?? 0) > 0) ? 'is-expense-approved' : 'is-expense')); $despesaTitulo = $temDespesa ? (int) $despesaResumo['total'].' despesa(s) · R$ '.number_format((float) $despesaResumo['valor'], 2, ',', '.').' · Clique para visualizar' : ''; $validacaoTitulo = match ($validacaoComprovante) {'aprovado' => 'Comprovante aprovado', 'reprovado' => 'Comprovante reprovado', default => ($comprovanteUrl ? 'Comprovante ainda não validado' : 'Sem comprovante validado')}; @endphp
{{ $isColeta ? 'C' : ($registro->sequencia_entrega ?: $loop->iteration) }} {{ $isColeta ? 'COL' : 'ENT' }}
{{ $isColeta ? ($registro->filial?->sigla ?: '-') : ($registro->filial ?: '-') }} -> {{ $isColeta ? ($registro->destino_uf ?: '-') : ($registro->filial_documento ?: $registro->destino_uf ?: '-') }}
ID {{ $registro->id }}
@if($isColeta)
Coleta: {{ $registro->numero_coleta ?: $registro->id }}
Solicitada: {{ $registro->solicitada_at?->format('d/m/Y H:i') ?: '-' }}
Previsao: {{ $registro->previsao_coleta_at?->format('d/m/Y H:i') ?: '-' }}
@else
Nota Fiscal: {{ $registro->numero_nf ?: '-' }}
Min. / CTe: {{ $registro->numero_cte ?: '-' }}
Rom. {{ $registro->numero_romaneio ?: '-' }}
Pedido: {{ $registro->pedido ?? '-' }}
@endif
Caixas: {{ $isColeta ? ($registro->quantidade_volumes ?: '-') : ($registro->quantidade_volumes ?: $registro->volume_total ?: '-') }}
Peso: {{ number_format((float) ($isColeta ? $registro->peso_estimado : $registro->peso_total), 3, ',', '.') }}
Valor: R$ {{ number_format((float) ($isColeta ? $registro->valor_nota_fiscal : $registro->valor_total), 2, ',', '.') }}
Remetente: {{ $isColeta ? ($registro->remetente_nome ?: $registro->solicitante_nome ?: '-') : ($registro->remetente_nome ?: $registro->cliente_nome ?: '-') }}
Destinatario: {{ $registro->destinatario_nome ?: '-' }}
End: {{ $isColeta ? ($registro->origem_endereco ?: '-') : ($registro->destino_endereco ?: '-') }}
Bairro: {{ $isColeta ? ($registro->origem_bairro ?: '-') : ($registro->destino_bairro ?: '-') }}
Destino: {{ $isColeta ? trim(($registro->destino_cidade ?: $registro->origem_cidade ?: '-').' - '.($registro->destino_uf ?: $registro->origem_uf ?: '-')) : trim(($registro->destino_cidade ?: '-').' - '.($registro->destino_uf ?: '-')) }}
Integracao: {{ $isColeta ? ($registro->created_at?->format('d/m/Y H:i') ?: '-') : ($registro->importada_at?->format('d/m/Y H:i') ?: '-') }}
Previsao: {{ $isColeta ? ($registro->previsao_coleta_at?->format('d/m/Y H:i') ?: '-') : ($registro->previsao_entrega_at?->format('d/m/Y H:i') ?: '-') }}
@if($agendaMovimento)
Agendamento: {{ $agendaMovimento->data_agendamento?->format('d/m/Y') }}{{ $agendaMovimento->hora_inicio ? ' '.substr($agendaMovimento->hora_inicio,0,5) : '' }}{{ $agendaMovimento->hora_fim ? '–'.substr($agendaMovimento->hora_fim,0,5) : '' }}
@if($agendaMovimento->senha)
Senha: {{ $agendaMovimento->senha }}
@endif @endif
Baixa: {{ $isColeta ? ($registro->coletada_at?->format('d/m/Y H:i') ?: '-') : ($registro->entregue_at?->format('d/m/Y H:i') ?: '-') }}
@if($comprovanteUrl) @else @endif @if($temDespesa) @endif
@if($temOcorrencia && $descricaoOcorrenciaLinha !== '') @endif
@empty
Nenhum movimento vinculado a este romaneio.
@endforelse
Documentos
{{ $movimentosTotal }}
Concluídos
{{ $movimentosConcluidos }}
Peso
{{ number_format((float) $notasAtivas->sum('peso_total') + (float) $coletasAtivas->sum('peso_estimado'), 3, ',', '.') }}
Volumes
{{ number_format($volumesTotal, 0, ',', '.') }}
Valor
R$ {{ number_format((float) $notasAtivas->sum('valor_total') + (float) $coletasAtivas->sum('valor_nota_fiscal'), 2, ',', '.') }}
@endif @if($baixaManifestoModalAberto)
Baixa total do manifesto
Baixa manual dos movimentos abertos · comprovantes opcionais
Entregas{{ $baixaManifestoResumo['entregas_abertas'] ?? 0 }}abertas de {{ $baixaManifestoResumo['entregas_total'] ?? 0 }}
Coletas{{ $baixaManifestoResumo['coletas_abertas'] ?? 0 }}abertas de {{ $baixaManifestoResumo['coletas_total'] ?? 0 }}
Transferências{{ $baixaManifestoResumo['transferencias_abertas'] ?? 0 }}abertas de {{ $baixaManifestoResumo['transferencias_total'] ?? 0 }}
Reentregas{{ $baixaManifestoResumo['reentregas_abertas'] ?? 0 }}abertas de {{ $baixaManifestoResumo['reentregas_total'] ?? 0 }}
Ignorados{{ $baixaManifestoResumo['ignorados'] ?? 0 }}já concluídos ou não elegíveis
Movimentos a baixar
@foreach(['entregas' => ['Entregas','#2563eb'], 'coletas' => ['Coletas','#16a34a'], 'transferencias' => ['Transferências','#7c3aed'], 'reentregas' => ['Reentregas','#ea580c']] as $tipo => [$label, $cor]) @endforeach
@error('baixaManifestoForm.tipos'){{ $message }}@enderror
@error('baixaManifestoForm.chegada_at'){{ $message }}@enderror @error('baixaManifestoForm.baixa_at'){{ $message }}@enderror
Itens entregues, coletados, cancelados ou em ocorrência serão preservados. O manifesto somente será finalizado se não restar nenhum movimento ativo pendente.
@endif @if($movimentoModalAberto && $movimentoModal)
{{ $movimentoModal['titulo'] }}
Romaneio {{ $movimentoModal['romaneio'] }} · {{ $movimentoModal['destinatario'] }}
Salvando...
@if($movimentoFeedback)
✓ {{ $movimentoFeedback }}
@endif
@if($movimentoModalAba === 'resumo')
@foreach(['Status' => strtoupper(str_replace('_', ' ', $movimentoModal['status'])), 'Documento' => $movimentoModal['documento'], 'Romaneio' => $movimentoModal['romaneio'], 'Remetente' => $movimentoModal['remetente'], 'Destinatário' => $movimentoModal['destinatario'], 'Previsão' => $movimentoModal['previsao'] ?: '-', 'Chegada' => $movimentoModal['chegada'] ?: '-', 'Ocorrência' => $movimentoModal['ocorrencia_data'] ?: '-', 'Baixa' => $movimentoModal['baixa'] ?: '-', 'Recebedor' => $movimentoModal['recebedor'], 'Endereço' => $movimentoModal['endereco'] ?: '-'] as $label => $valor)
{{ $label }}{{ $valor }}
@endforeach
@if($movimentoModal['agendamento'] ?? null)
Agendamento {{ strtoupper($movimentoModal['agendamento']['status']) }}
{{ $movimentoModal['agendamento']['data'] }}{{ $movimentoModal['agendamento']['hora_inicio'] ? ' · '.$movimentoModal['agendamento']['hora_inicio'] : '' }}{{ $movimentoModal['agendamento']['hora_fim'] ? '–'.$movimentoModal['agendamento']['hora_fim'] : '' }}
@if($movimentoModal['agendamento']['senha'])
Senha: {{ $movimentoModal['agendamento']['senha'] }}
@endif @if($movimentoModal['agendamento']['observacao'])
{{ $movimentoModal['agendamento']['observacao'] }}
@endif
@endif @elseif($movimentoModalAba === 'status')
@if($movimentoModal['status'] === 'cancelada')
Movimento cancelado {{ $movimentoModal['cancelamento']['motivo'] ?: 'Motivo nao informado' }} {{ $movimentoModal['cancelamento']['usuario'] ?: 'Usuario nao informado' }} · {{ $movimentoModal['cancelamento']['data'] ?: '-' }}
@if(auth()->user()?->isTenantAdmin())
Reativar como EM ROTAUse quando o movimento tiver sido cancelado por engano. O histórico acima será preservado.
@error('reativacaoForm.motivo'){{ $message }}@enderror
@endif @else @php($ocorrenciaAtualResumo = collect($movimentoModal['ocorrencias'])->first()) @if($movimentoModal['status'] === 'ocorrencia' && $ocorrenciaAtualResumo)
Ocorrência atual · {{ $ocorrenciaAtualResumo['motivo'] }} {{ $ocorrenciaAtualResumo['descricao'] ?: 'Ocorrência sem descrição informada.' }}
{{ $ocorrenciaAtualResumo['data'] ?: '-' }}
{{ $ocorrenciaAtualResumo['tratada'] ? 'Tratada: '.($ocorrenciaAtualResumo['tratativa'] ?: 'sem descrição') : 'Pendente de tratamento' }}
@endif
@foreach(($movimentoModal['tipo'] === 'coleta' ? ['coletada' => 'Coletado', 'ocorrencia' => 'Ocorrência', 'em_rota' => 'Em rota'] : ['entregue' => 'Entregue', 'ocorrencia' => 'Ocorrência', 'em_rota' => 'Em rota']) as $valor => $label) @php($corStatus = $valor === 'ocorrencia' ? ['#f59e0b','#fffbeb','#92400e'] : ($valor === 'em_rota' ? ['#7e22ce','#faf5ff','#6b21a8'] : ['#16a34a','#f0fdf4','#166534'])) @endforeach
@if($movimentoModal['tipo'] === 'nota') @endif
@if(($movimentoForm['status'] ?? '') === 'entregue')
@endif @if(($movimentoForm['status'] ?? '') === 'ocorrencia')
@if($movimentoModal['tipo'] === 'nota')
Itens envolvidos (opcional)Selecione um produto importado ou inclua manualmente.
@if(!($movimentoModal['ocorrencia_itens_ready'] ?? false))
Execute a migration de ocorrências por item para utilizar esta opção.
@else @if(empty($ocorrenciaItensForm))
Esta NF não possui itens importados. Use + Incluir item.
@endif
@foreach($ocorrenciaItensForm as $indice => $itemForm)
@if($itemForm['manual']??false)
@if($produtoBuscaIndice===$indice)
@forelse($produtoBuscaResultados as $produto)@emptyNenhum produto encontrado. Ao salvar, este SKU será criado no catálogo.@endforelse
@endif @else @endif @if($itemForm['selecionado']??false)
@php($saldoItem=max(0,(float)($itemForm['valor_documento']??0)-(float)($itemForm['valor_entregue']??0)))
Saldo: {{number_format($saldoItem,4,',','.')}} {{$itemForm['unidade']}}
@endif
@endforeach
@endif
@endif
Pendência e reentrega serão geradas automaticamente conforme a configuração do motivo.
@endif
Cancelar esta {{ $movimentoModal['tipo'] === 'coleta' ? 'coleta' : 'entrega' }}O item permanecera no historico, sairá dos totais ativos e será preparado para remocao no aplicativo.
@error('cancelamentoForm.motivo'){{ $message }}@enderror
@endif
@elseif($movimentoModalAba === 'ocorrencia')
@forelse($movimentoModal['ocorrencias'] as $ocorrencia)
{{ $ocorrencia['descricao'] ?: 'Ocorrência registrada' }}{{ $ocorrencia['data'] ?: '-' }}
{{ $ocorrencia['tratada'] ? 'Tratada: '.($ocorrencia['tratativa'] ?: 'sem descrição') : 'Pendente de tratamento' }}
@if(!empty($ocorrencia['itens']))
@foreach($ocorrencia['itens'] as $itemOcorrencia)
{{$itemOcorrencia['codigo']?:'Sem SKU'}} · {{$itemOcorrencia['descricao']}}{{strtoupper(str_replace('_',' ',$itemOcorrencia['tipo']))}} · {{$itemOcorrencia['observacao']?:'Sem observação'}}Saldo {{number_format($itemOcorrencia['saldo'],4,',','.')}} {{$itemOcorrencia['unidade']}}{{strtoupper(str_replace('_',' ',$itemOcorrencia['status']))}}@if(!in_array($itemOcorrencia['status'],['reposto','indenizado','cancelada'],true))@endif
@endforeach
@endif
@empty
Nenhuma ocorrência registrada.
@endforelse @if($movimentoModal['reentrega'])Marcado para reentrega@endif @php($ocorrenciaComPendencia = collect($movimentoModal['ocorrencias'])->first(fn ($item) => ! empty($item['pendencia']))) @if($ocorrenciaComPendencia) @php($pendencia = $ocorrenciaComPendencia['pendencia'])
Pendência operacionalResponsável: {{ $pendencia['responsavel'] ?: 'Não definido' }} · Prazo: {{ $pendencia['prazo'] ?: 'Sem prazo' }}
{{ strtoupper(str_replace('_', ' ', $pendencia['status'])) }}
@if($pendencia['historicos'])
Ver histórico da pendência ({{ count($pendencia['historicos']) }})
@foreach($pendencia['historicos'] as $historico)
{{ $historico['data'] }} · {{ $historico['usuario'] ?: 'Sistema' }}
{{ $historico['descricao'] }}
@endforeach
@endif
@elseif(! empty($movimentoModal['ocorrencias']))
Manter como pendênciaA mercadoria ficará aguardando uma decisão, sem ser enviada para uma nova rota.
@endif
Programar reentregaMova este documento para uma nova data ou para um romaneio já aberto.
@error('reentregaForm.data'){{ $message }}@enderror
@elseif($movimentoModalAba === 'comprovantes') @php($primeiroComprovante = $movimentoModal['comprovantes'][0] ?? null)
@if($primeiroComprovante)
@foreach($movimentoModal['comprovantes'] as $comprovante) @php($corValidacao = match($comprovante['validacao']) {'aprovado'=>'#16a34a','reprovado'=>'#dc2626',default=>'#64748b'})
{{ $comprovante['validacao'] }}
@endforeach
@else
Nenhum comprovante vinculado.
@endif @error('movimentoUploads.*'){{ $message }}@enderror
@elseif($movimentoModalAba === 'despesas')
@if($tiposDespesasAdicionais->isEmpty())
Cadastre e ative as opções em Administração → Tipos de despesas. Se já estiverem cadastradas, execute a migration de despesas adicionais deste tenant.
@else
Nova despesa adicionalVinculada ao documento, romaneio, motorista e veículo.
@endif
Despesas deste item{{ count($movimentoModal['despesas']) }} lançamento(s)
@forelse($movimentoModal['despesas'] as $despesa) @php($corDespesa = match($despesa['status']) {'aprovada'=>'#16a34a','reprovada'=>'#dc2626','paga'=>'#2563eb',default=>'#d97706'})
{{ $despesa['tipo'] }} · R$ {{ number_format($despesa['valor'], 2, ',', '.') }}{{ $despesa['data'] }} · Responsável: {{ ucfirst(str_replace('_', ' ', $despesa['responsavel'])) }} · {{ $despesa['usuario'] ?: 'Sistema' }}
{{ $despesa['status'] }}
{{ $despesa['descricao'] }}
@if($despesa['comprovantes'])
@foreach($despesa['comprovantes'] as $arquivo)Ver comprovante {{ $loop->iteration }}@endforeach
@endif
@if(! in_array($despesa['status'], ['aprovada','paga']) || ($despesa['status'] === 'aprovada' && ! $despesa['financeiro_lancamento_id']))@endif @if(! in_array($despesa['status'], ['reprovada','paga']))@endif @if($despesa['financeiro_lancamento_id'])Financeiro #{{ $despesa['financeiro_lancamento_id'] }}@endif @if($despesa['status'] !== 'paga')@endif
@empty
Nenhuma despesa adicional lançada para este item.
@endforelse
@elseif($movimentoModalAba === 'localizacao') @if($movimentoModal['latitude'] && $movimentoModal['longitude'])
Ponto registrado{{ $movimentoModal['latitude'] }}, {{ $movimentoModal['longitude'] }}Abrir no mapa
@else
Este movimento ainda não possui latitude e longitude.
@endif @else
@forelse($movimentoModal['eventos'] as $evento)
{{ $evento['data'] ?: '-' }}{{ strtoupper(str_replace('_', ' ', $evento['evento'])) }}{{ $evento['descricao'] ?: trim(($evento['status_anterior'] ?: '-').' → '.($evento['status_novo'] ?: '-')) }}
@empty
Nenhum evento operacional registrado.
@endforelse
@endif
Abrir SAC @if($movimentoModalAba === 'status' && $movimentoModal['status'] !== 'cancelada') @endif
@endif @if($exclusaoModalAberto)
Exclusao administrativa definitiva
{{ $exclusaoTipo === 'nota_fiscal' ? 'NF '.$exclusaoReferencia : 'Romaneio '.$exclusaoReferencia }}
@if($exclusaoTipo === 'nota_fiscal') A nota, seus itens, ocorrencias, eventos e comprovantes serao apagados. O romaneio permanecera com os demais documentos. @else O romaneio, suas notas, coletas diretamente vinculadas, ocorrencias, eventos e comprovantes serao apagados. Motorista e veiculo serao preservados. @endif
@error('exclusaoMotivo')
{{ $message }}
@enderror @error('exclusaoConfirmacao')
{{ $message }}
@enderror
@endif @if($telemetriaModalAberto)
Aplicativo e telemetria
{{ $entrega?->motorista_nome ?: 'Motorista não definido' }} · {{ $entrega?->motorista_documento ?: '-' }}
@foreach(['historico' => 'Histórico', 'rota' => 'Rota'] as $aba => $label) @endforeach
@if($telemetriaMensagem)
{{ $telemetriaMensagem }}
@endif @if($telemetriaAba === 'historico')
@forelse($telemetriaLogs as $log)
{{ $log['data'] ?: '-' }}{{ $log['status'] ?: '-' }}App {{ $log['versao'] ?: '-' }}Bateria {{ $log['bateria'] !== null ? $log['bateria'].'%' : '-' }}{{ $log['origem'] }}
@empty @if(! $telemetriaMensagem)
Nenhum evento encontrado.
@endif @endforelse
@else @if($telemetriaRota)
{{ count($telemetriaRota) }} ponto(s), ordenados por data e hora.
@elseif(! $telemetriaMensagem)
Nenhum ponto de rota encontrado.
@endif @endif
@endif @if($ocorrenciaItemTratativa)
Tratativa da pendência do item{{$ocorrenciaItemTratativa['codigo']?:'Sem SKU'}} · {{$ocorrenciaItemTratativa['descricao']}}
Documento{{number_format($ocorrenciaItemTratativa['documento'],4,',','.')}} {{$ocorrenciaItemTratativa['unidade']}}
Entregue{{number_format($ocorrenciaItemTratativa['entregue'],4,',','.')}} {{$ocorrenciaItemTratativa['unidade']}}
Saldo{{number_format($ocorrenciaItemTratativa['saldo'],4,',','.')}} {{$ocorrenciaItemTratativa['unidade']}}
Status{{strtoupper(str_replace('_',' ',$ocorrenciaItemTratativa['status']))}}
@if(($ocorrenciaItemTratativaForm['acao']??'')==='reposicao')@else
@endif
@if(!empty($ocorrenciaItemTratativa['movimentacoes']))
Histórico do saldo@foreach($ocorrenciaItemTratativa['movimentacoes'] as $mov)
{{strtoupper(str_replace('_',' ',$mov['tipo']))}}{{$mov['data']}} · {{$mov['usuario']}}{{$mov['descricao']}}@if($mov['nf'])NF {{$mov['nf']}}@endif{{$mov['anterior']}} → {{$mov['novo']}}
@endforeach
@endif
@endif