@extends('layouts/layoutMaster') @section('title', 'Dashboard') @section('vendor-style') @endsection @section('page-style') @endsection @section('vendor-script') @endsection @section('page-script') @endsection @section('content') @if(session('success'))
@endif @if(session('error'))
@endif @if($errors->any())
@endif @if($bloqueadoPorInadimplencia ?? false)
Sistema Bloqueado por Inadimplência

Sua empresa possui pendências financeiras que precisam ser regularizadas.

@if(strtolower(auth()->user()->finalidade ?? '') === 'administrador')
Informações importantes:
  • O acesso ao sistema está temporariamente suspenso devido a pagamentos em atraso.
  • Regularize as pendências para restaurar o acesso completo imediatamente.
  • Após a confirmação do pagamento, o sistema será desbloqueado automaticamente.
  • Se precisar de ajuda, entre em contato com nosso suporte.
@else
O acesso ao sistema está temporariamente suspenso devido a pendências financeiras. Entre em contato com o administrador da sua empresa para regularizar a situação.
@endif
@elseif($testeBloqueado ?? false)
@elseif($semPlanoAtivo ?? false)
@elseif($emTeste ?? false)
@endif @if($assinaturaPendentePagamento ?? false)
@endif @if(($onboardingDadosPendente ?? false) || ($onboardingContratoPendente ?? false))
@endif @if(($emTeste ?? false) || ($testeBloqueado ?? false) || ($semPlanoAtivo ?? false))
@foreach($planos as $index => $plano) @php $cores = ['primary', 'success', 'info', 'warning']; $cor = $cores[$index % count($cores)]; $nomePlanoNormalizado = strtolower(trim((string) $plano->nome)); $nomePlanoNormalizado = preg_replace('/^plano\s+/i', '', $nomePlanoNormalizado); $valorMensalExibicao = (float) ($plano->valor_exibicao ?? $plano->valor ?? 0); $valorAdesaoExibicao = (float) ($plano->adesao_exibicao ?? $plano->adesao ?? 0); $recursosFixosPorPlano = [ 'start' => [ 'Clientes - Limite: 500', 'Produtos - Limite: 500', 'Locações Completas', '1 Modelo de contrato', 'Financeiro Completo', 'Sem emissão de Boleto', 'Usuários - Limite: 1', ], 'pro' => [ 'Clientes - Limite: 1.500', 'Produtos - Limite: 1.500', 'Locações Completas', 'Modelos de contratos ilimitados', 'Financeiro Completo', '1 banco pra boleto', 'Usuários - Limite: 3', ], 'plus' => [ 'Clientes - Limite: 3.000', 'Produtos - Limite: 3.000', 'Locações Completas', 'Modelos de contratos ilimitados', 'Financeiro Completo', 'Bancos pra Boletos Ilimitados', 'Usuários - Limite: 10', ], 'premium' => [ 'Clientes - Ilimitado', 'Produtos - Ilimitado', 'Locações Completas', 'Modelos de contratos ilimitados', 'Financeiro Completo', 'Bancos pra Boletos Ilimitados', 'Usuários - Ilimitado', ], ]; $recursosPlano = $recursosFixosPorPlano[$nomePlanoNormalizado] ?? null; // Fallback para planos fora do padrão Start/Pro/Plus/Premium. if (is_null($recursosPlano)) { $modulosPlanoRaw = collect($plano->modulos ?? []) ->filter(function ($moduloPlano) { return !empty($moduloPlano->modulo); }); $idsComFilhosNoPlano = $modulosPlanoRaw ->map(function ($moduloPlano) { return $moduloPlano->modulo->id_modulo_pai ?? null; }) ->filter(function ($idPai) { return !empty($idPai); }) ->map(function ($idPai) { return (string) $idPai; }) ->unique(); $modulosExcluidos = ['dashboard']; $modulosAgrupados = $modulosPlanoRaw ->filter(function ($moduloPlano) use ($modulosExcluidos) { $nomeModulo = strtolower(trim((string) ($moduloPlano->modulo->nome ?? ''))); return !in_array($nomeModulo, $modulosExcluidos); }) ->map(function ($moduloPlano) use ($idsComFilhosNoPlano) { $modulo = $moduloPlano->modulo; $nomeOriginal = trim((string) ($modulo->nome ?? '')); $nomeGrupo = $nomeOriginal; $ordemGrupo = (int) ($modulo->ordem ?? 9999); $categoriaGrupo = (int) ($modulo->categoria ?? 9999); $grupoId = null; if (!empty($modulo->moduloPai)) { $grupoId = (string) $modulo->moduloPai->id_modulo; $nomeGrupo = trim((string) ($modulo->moduloPai->nome ?? $nomeOriginal)); $ordemGrupo = (int) ($modulo->moduloPai->ordem ?? $ordemGrupo); $categoriaGrupo = (int) ($modulo->moduloPai->categoria ?? $categoriaGrupo); } elseif ($idsComFilhosNoPlano->contains((string) $modulo->id_modulo)) { $grupoId = (string) $modulo->id_modulo; } else { $grupoId = 'nome:' . strtolower($nomeGrupo); } return [ 'grupo_id' => $grupoId, 'nome' => $nomeGrupo, 'categoria' => $categoriaGrupo, 'ordem' => $ordemGrupo, 'limite' => is_numeric($moduloPlano->limite) ? (int) $moduloPlano->limite : null, ]; }) ->groupBy('grupo_id') ->map(function ($itens) { $primeiro = $itens->first(); $ordemGrupo = $itens->pluck('ordem')->filter(fn($o) => !is_null($o))->min(); $categoriaGrupo = $itens->pluck('categoria')->filter(fn($c) => !is_null($c))->min(); $limiteSelecionado = $itens->pluck('limite') ->filter(function ($limite) { return !is_null($limite) && (int) $limite > 0; }) ->min(); return [ 'nome' => $primeiro['nome'], 'categoria' => !is_null($categoriaGrupo) ? (int) $categoriaGrupo : 9999, 'ordem' => !is_null($ordemGrupo) ? (int) $ordemGrupo : 9999, 'limite' => is_null($limiteSelecionado) ? null : (int) $limiteSelecionado, ]; }) ->sortBy(function ($item) { $categoria = str_pad((int) ($item['categoria'] ?? 9999), 5, '0', STR_PAD_LEFT); $ordem = str_pad((int) ($item['ordem'] ?? 9999), 5, '0', STR_PAD_LEFT); return $categoria . '-' . $ordem . '-' . strtolower((string) $item['nome']); }) ->values(); $temBoletos = false; $recursosPlano = []; foreach ($modulosAgrupados as $moduloInfo) { $nomeModulo = (string) ($moduloInfo['nome'] ?? ''); $nomeModuloLower = strtolower($nomeModulo); $limiteModulo = $moduloInfo['limite'] ?? null; if (str_contains($nomeModuloLower, 'boleto')) { $temBoletos = true; if (!is_null($limiteModulo) && (int) $limiteModulo > 0) { $recursosPlano[] = $nomeModulo . ' - Limite: ' . number_format((int) $limiteModulo, 0, ',', '.') . ' Bancos'; } else { $recursosPlano[] = $nomeModulo . ' - Limite: Ilimitado'; } continue; } if (!is_null($limiteModulo) && (int) $limiteModulo > 0) { $recursosPlano[] = $nomeModulo . ' - Limite: ' . number_format((int) $limiteModulo, 0, ',', '.'); } else { $recursosPlano[] = $nomeModulo . ' - Limite: Ilimitado'; } } if (!$temBoletos) { $recursosPlano[] = 'Sem emissão de Boleto'; } } @endphp
{{ $plano->nome }}

R$ {{ number_format($valorMensalExibicao, 2, ',', '.') }}

/mês
Adesão: {{ $valorAdesaoExibicao > 0 ? 'R$ ' . number_format($valorAdesaoExibicao, 2, ',', '.') : 'Grátis' }}
    @forelse($recursosPlano as $recurso)
  • {{ $recurso }}
  • @empty
  • Sem módulos configurados para este plano.
  • @endforelse
@endforeach
@endif
Locações do Dia
{{ $dataHoje }}
Movimentações
  • {{ $locacoesIniciamHoje }}

    Iniciam Hoje

  • {{ $locacoesTerminamHoje }}

    Terminam Hoje

  • {{ $locacoesEmAndamento }}

    Em Andamento

  • {{ $locacoesAtrasadas }}

    Atrasadas

Locações
Financeiro do Mês
{{ $mesAno }}
Resumo

R$ {{ number_format($totalRecebidoMes/1000, 1, ',', '.') }}k

Recebido

R$ {{ number_format($contasReceberMes/1000, 1, ',', '.') }}k

A Receber

R$ {{ number_format($totalPagoMes/1000, 1, ',', '.') }}k

Pago

R$ {{ number_format($contasPagarMes/1000, 1, ',', '.') }}k

A Pagar
Financeiro
Logística
Status das Entregas
Situação Atual
  • {{ $logisticaParaSeparar }}

    Para Separar

  • {{ $logisticaEmRota }}

    Em Rota

  • {{ $logisticaProntoPatio }}

    Pronto Pátio

  • {{ $logisticaAguardandoColeta }}

    Ag. Coleta

Logística
Faturamento do Mês

{{ $variacaoFaturamento >= 0 ? '+' : '' }}{{ $variacaoFaturamento }}%

R$ {{ number_format($faturamentoMes, 0, ',', '.') }}

Receber

R$ {{ number_format($contasReceberHoje/1000, 1, ',', '.') }}k
Hoje
VS

Pagar

R$ {{ number_format($contasPagarHoje/1000, 1, ',', '.') }}k
Hoje
@php $totalFinanceiro = $contasReceberHoje + $contasPagarHoje; $percentReceber = $totalFinanceiro > 0 ? ($contasReceberHoje / $totalFinanceiro) * 100 : 50; @endphp
R$ {{ number_format($faturamentoMes/1000, 1, ',', '.') }}k
Faturamento do Mês
Locações da Semana
Últimos 7 Dias

{{ $locacoesMes }}

{{ $variacaoLocacoes >= 0 ? '+' : '' }}{{ $variacaoLocacoes }}%
Locações este mês comparado ao anterior
Iniciam Hoje

{{ $locacoesIniciamHoje }}

Terminam Hoje

{{ $locacoesTerminamHoje }}

Atrasadas

{{ $locacoesAtrasadas }}

Logística
Status das Entregas

{{ $logisticaParaSeparar + $logisticaProntoPatio + $logisticaEmRota + $logisticaEntregue + $logisticaAguardandoColeta }}

Total de Pedidos

  • Para Separar
    {{ $logisticaParaSeparar }}
  • Pronto no Pátio
    {{ $logisticaProntoPatio }}
  • Em Rota
    {{ $logisticaEmRota }}
  • Aguardando Coleta
    {{ $logisticaAguardandoColeta }}
Clientes que Mais Locam
Top 5 do Sistema
    @forelse($topClientes as $index => $cliente)
  • {{ strtoupper(substr($cliente->nome, 0, 2)) }}
    {{ Str::limit($cliente->nome, 20) }}
    {{ $cliente->total_locacoes }} locações

    R$ {{ number_format($cliente->valor_total / 1000, 1, ',', '.') }}k

  • @empty
  • Nenhum cliente encontrado

  • @endforelse
Produtos Mais Locados
@forelse($topProdutos as $index => $produto)
{{ Str::limit($produto->nome, 25) }}
{{ $produto->codigo ?? 'Sem código' }}

{{ $produto->total_quantidade }} un

{{ $produto->total_locacoes }} loc.
@empty

Nenhum produto encontrado

@endforelse
Manutenções em Andamento
{{ $totalManutencoesAndamento }} produto(s) em manutenção
    @forelse($manutencoesEmAndamento as $manutencao)
  • {{ Str::limit($manutencao->produto->nome ?? 'Produto', 20) }}
    {{ ucfirst($manutencao->tipo ?? 'Manutenção') }}

    {{ $manutencao->quantidade ?? 1 }} un

    @if($manutencao->data_previsao) Prev: {{ $manutencao->data_previsao->format('d/m') }} @endif
  • @empty
  • Nenhum produto em manutenção

  • @endforelse
Contas Vencidas
Atenção Necessária
  • A Receber Vencidas
    Valores em atraso

    R$ {{ number_format($contasReceberVencidas, 2, ',', '.') }}

  • A Pagar Vencidas
    Contas em atraso

    R$ {{ number_format($contasPagarVencidas, 2, ',', '.') }}

  • Recebido este Mês
    Total recebido

    R$ {{ number_format($totalRecebidoMes, 2, ',', '.') }}

  • Pago este Mês
    Total pago

    R$ {{ number_format($totalPagoMes, 2, ',', '.') }}

Resumo Rápido
{{ $locacoesMes }}
Locações do Mês
R$ {{ number_format($faturamentoMes/1000, 1, ',', '.') }}k
Faturamento
{{ $totalManutencoesAndamento }}
Em Manutenção
{{ $locacoesAtrasadas }}
Atrasadas
Minha Empresa
{{ $empresa->status ?? 'ativo' }}
@if($logoUrl)
Logo
@else
@endif
{{ $empresa->nome_empresa ?? $empresa->razao_social ?? 'Empresa' }}
@if($empresa->razao_social && $empresa->nome_empresa) {{ Str::limit($empresa->razao_social, 30) }} @endif
@if($empresa->cnpj)
CNPJ {{ preg_replace('/(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/', '$1.$2.$3/$4-$5', $empresa->cnpj) }}
@elseif($empresa->cpf)
CPF {{ preg_replace('/(\d{3})(\d{3})(\d{3})(\d{2})/', '$1.$2.$3-$4', $empresa->cpf) }}
@endif @if($empresa->telefone)
Telefone {{ $empresa->telefone }}
@endif @if($empresa->email)
E-mail {{ $empresa->email }}
@endif @if($empresa->endereco)
Endereço {{ $empresa->endereco }}{{ $empresa->numero ? ', ' . $empresa->numero : '' }} @if($empresa->bairro || $empresa->cidade) - {{ $empresa->bairro }}{{ $empresa->cidade ? ', ' . $empresa->cidade : '' }}{{ $empresa->uf ? '/' . $empresa->uf : '' }} @endif
@endif
@endsection