@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'))
@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
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