@php use App\Carroceria; use App\Consultas\Estoque; $moeda = fn ($v): string => number_format((float) $v, 2, ',', '.'); $inteiro = fn ($v): string => number_format((int) $v, 0, ',', '.'); $milhoes = fn ($v): string => (float) $v >= 1000000 ? 'R$ '.number_format((float) $v / 1000000, 2, ',', '.').' mi' : 'R$ '.number_format((float) $v / 1000, 0, ',', '.').' mil'; $cabecalho = 'border-b border-fio bg-chao/70 text-[0.7rem] uppercase tracking-[0.06em] text-suave'; // As mesmas cores de pátio do relatório de marcas e modelos. $tomDias = fn (int $dias): string => match (true) { $dias > Estoque::DIAS_CRITICO => 'font-medium text-rose-700', $dias > Estoque::DIAS_ATENCAO => 'text-amber-700', default => 'text-tinta', }; @endphp @if ($fotografia === null)

Nenhum estoque importado ainda.

Na Revenda Mais, gere a Lista Gerencial de Estoque com Margem, exporte em Excel e importe o arquivo aqui no painel.

@can('importar')
Importar arquivos
@endcan
@else {{-- A data da fotografia em destaque: é a única tela "de hoje". --}}
$diasDaFotografia > Estoque::FOTOGRAFIA_VELHA_DIAS, 'border-fio bg-superficie text-suave' => $diasDaFotografia <= Estoque::FOTOGRAFIA_VELHA_DIAS, ])>

$diasDaFotografia > Estoque::FOTOGRAFIA_VELHA_DIAS, 'bg-emerald-500' => $diasDaFotografia <= Estoque::FOTOGRAFIA_VELHA_DIAS]) aria-hidden="true"> Estoque em {{ $geradoEm->format('d/m/Y \à\s H:i') }} @if ($diasDaFotografia === 0) · de hoje @elseif ($diasDaFotografia > Estoque::FOTOGRAFIA_VELHA_DIAS) · há {{ $diasDaFotografia }} dias: carros podem ter sido vendidos ou comprados desde então. Importe um relatório novo. @else · há {{ $diasDaFotografia }} {{ $diasDaFotografia === 1 ? 'dia' : 'dias' }} @endif

importado em {{ \Carbon\CarbonImmutable::parse((string) $fotografia->importado_em)->format('d/m/Y \à\s H:i') }}{{ $fotografia->importado_por ? ' por '.$fotografia->importado_por : '' }}

{{-- O gerente vê o estoque inteiro, mas começa pela filial dele. --}} @if ($resumoDaMinhaFilial) @php $f = $resumoDaMinhaFilial; @endphp

Sua filial

@foreach ([ ['Veículos', $inteiro($f->quantidade).((int) $f->novos > 0 ? ' · '.$inteiro($f->novos).' novos' : ''), 'text-tinta'], ['Capital parado', 'R$ '.$moeda($f->capital), 'text-tinta'], ['Margem potencial', 'R$ '.$moeda($f->margem), (float) $f->margem < 0 ? 'text-rose-700' : 'text-emerald-700'], ['Dias em pátio, em média', $inteiro($f->dias_medios), $tomDias((int) $f->dias_medios)], ['Acima de '.Estoque::DIAS_ATENCAO.' dias', $inteiro($f->acima_atencao).' carros', (int) $f->acima_atencao > 0 ? 'text-amber-700' : 'text-tinta'], ] as [$rotulo, $valor, $tom])
{{ $rotulo }}
{{ $valor }}
@endforeach
@endif
{{-- O que pede ação: preço errado na origem e carro que vende no prejuízo. --}} @if ((int) $resumo->preco_a_conferir > 0 || (int) $resumo->margem_negativa > 0)
@if ((int) $resumo->preco_a_conferir > 0) {{ $inteiro($resumo->preco_a_conferir) }} {{ (int) $resumo->preco_a_conferir === 1 ? 'carro' : 'carros' }} com preço a conferir na Revenda Mais (zerado ou abaixo da metade do custo) — fora da margem até ser corrigido. @endif @if ((int) $resumo->margem_negativa > 0) {{ $inteiro($resumo->margem_negativa) }} {{ (int) $resumo->margem_negativa === 1 ? 'carro' : 'carros' }} com margem negativa pelo preço de hoje. @endif
@endif {{-- Os carros, um a um. --}} @php // A nota diz a ordem da lista em palavras, conforme a coluna escolhida. $descricaoDaOrdem = [ 'veiculo' => ['por modelo, de A a Z', 'por modelo, de Z a A'], 'ano' => ['do ano mais antigo para o mais novo', 'do ano mais novo para o mais antigo'], 'dias' => ['do mais novo no estoque para o mais parado', 'do mais parado para o mais novo'], 'custo' => ['do menor custo para o maior', 'do maior custo para o menor'], 'venda' => ['do menor preço para o maior', 'do maior preço para o menor'], 'margem' => ['da menor margem para a maior', 'da maior margem para a menor'], 'fipe' => ['da menor FIPE para a maior', 'da maior FIPE para a menor'], 'local' => ['por onde está, de A a Z', 'por onde está, de Z a A'], ][$ordemAtual][$direcaoAtual === 'asc' ? 0 : 1]; @endphp
@if ($porFilial->isNotEmpty()) @endif @if ($filtrando) @endif
@foreach ([ ['veiculo', 'Veículo', 'left', 'px-4'], ['ano', 'Ano', 'center', 'px-3'], ['dias', 'Dias', 'right', 'px-3'], ['custo', 'Custo total', 'right', 'px-3'], ['venda', 'Preço de venda', 'right', 'px-3'], ['margem', 'Margem', 'right', 'px-3'], ['fipe', 'FIPE', 'right', 'px-3'], ['local', 'Onde está', 'left', 'px-4'], ] as [$coluna, $rotuloColuna, $alinhar, $recuo]) @endforeach @forelse ($visiveis as $v) @php $daMinha = $minhaFilial !== null && (string) $v->unidade_id === $minhaFilial; @endphp $daMinha, 'hover:bg-chao/50' => ! $daMinha])> @empty @endforelse
Simular preço
@if ($daMinha)@endif {{-- A etiqueta vem antes do nome, sempre no mesmo lugar: a classe do usado, ou "novo". --}} @if ($v->classe && $v->classe !== '0KM') @endif @if ($v->novo) novo @endif {{ $v->modelo }} {{ $v->marca }} · {{ Carroceria::rotuloDe($v->carroceria) }} · {{ $v->placa ?? '0 km' }} @if ($v->km) · {{ $inteiro($v->km) }} km @endif @if ((float) $v->valor_quitacao > 0) · quitar {{ $moeda($v->valor_quitacao) }} @endif {{ $v->ano_modelo ?? '—' }} {{ $inteiro($v->dias) }} {{ $moeda($v->custo_total) }} {{ (float) $v->valor_venda > 0 ? $moeda($v->valor_venda) : '—' }} @if ($v->venda_negociada) negociado por {{ $moeda($v->venda_negociada) }} @endif @if ($v->preco_ok) (float) $v->margem < 0, 'text-tinta' => (float) $v->margem >= 0])>{{ $moeda($v->margem) }} {{ number_format((float) $v->margem_percentual, 1, ',', '.') }}% @else preço a conferir @endif {{ $v->fipe_atual ? $moeda($v->fipe_atual) : '—' }} @if ($v->filial) @else {{ \App\Consultas\Estoque::FORA_DAS_LOJAS[$v->local] ?? ($v->localizacao ?? '—') }} @endif
Nenhum carro com esses filtros.
@if ($veiculos->count() > $visiveis->count()) @php $faltam = $veiculos->count() - $visiveis->count(); @endphp
@endif
@if ($porFilial->isNotEmpty()) @foreach ($porFilial as $linha) @php $minha = $minhaFilial !== null && (string) $linha->chave === $minhaFilial; @endphp $minha, 'hover:bg-chao/50' => ! $minha, 'border-t-2 border-fio' => ! $linha->unidade_id && $loop->index > 0 && $porFilial[$loop->index - 1]->unidade_id, ])> @endforeach
Onde está Veículos Capital Margem potencial Dias, em média Acima de {{ Estoque::DIAS_ATENCAO }} dias
@if ($minha)@endif @if ($minha) sua filial @endif {{ $inteiro($linha->quantidade) }} @if ((int) $linha->novos > 0){{ $inteiro($linha->novos) }} novos@endif {{ $moeda($linha->capital) }} (float) $linha->margem < 0])>{{ $linha->margem === null ? '—' : $moeda($linha->margem) }} {{ $inteiro($linha->dias_medios) }} (int) $linha->acima_atencao > 0])>{{ $inteiro($linha->acima_atencao) }}
@endif
{{-- Onde o dinheiro está parado, por tempo. --}} @php $maiorFaixa = max(1.0, (float) $faixas->max('capital')); @endphp
    @foreach ($faixas as $faixa)
  • {{ $faixa->rotulo }} {{ $inteiro($faixa->quantidade) }} · {{ $milhoes($faixa->capital) }}
  • @endforeach
@foreach ($porCarroceria as $linha) @endforeach
Carroceria Veículos Capital Margem Dias
{{ Carroceria::rotuloDe($linha->chave) }} {{ $inteiro($linha->quantidade) }} {{ $moeda($linha->capital) }} (float) $linha->margem < 0])>{{ $linha->margem === null ? '—' : $moeda($linha->margem) }} {{ $inteiro($linha->dias_medios) }}
@if ($porCarroceria->contains('chave', 'sem'))

Modelo sem classificação aparece em "Sem classificação". @can('gerir-cadastros') Classificar agora → @endcan

@endif
@if ($consignados->isNotEmpty()) @foreach ($consignados as $v) @endforeach
Veículo Dias Valor do dono Preço de venda Parte da loja
{{ $v->modelo }} {{ $v->marca }} · {{ $v->placa ?? 'sem placa' }}@if ($v->filial) · {{ mb_convert_case($v->filial, MB_CASE_TITLE) }}@endif {{ $inteiro($v->dias) }} {{ (float) $v->valor_compra > 0 ? $moeda($v->valor_compra) : '—' }} {{ (float) $v->valor_venda > 0 ? $moeda($v->valor_venda) : '—' }} @if ($v->margem !== null) {{ $moeda($v->margem) }} @else sem valor combinado com o dono @endif
@endif @endif