Implandação da customização das permissões dos usuarios e das notificaçoes

This commit is contained in:
2026-08-26 17:24:25 -03:00
parent 808c2c7545
commit 5bb5d74e22
71 changed files with 2487 additions and 269 deletions

View File

@@ -106,7 +106,9 @@
</details>
<% end %>
<%# Imprimir relatório financeiro do período/operação atuais %>
<%# Imprimir relatório financeiro do período/operação atuais — só para quem
pode ver custo (permissão `dashboard.financeiro`). %>
<% if @ver_financeiro %>
<%= link_to rotulo(:imprimir, 'Relatório', cor: nil),
dashboard_relatorio_financeiro_path(
inicio: @periodo_inicio.strftime('%Y-%m-%d'),
@@ -114,6 +116,7 @@
operacoes: @operacao_filtro),
data: { turbo: false },
class: 'pl-4 pr-4 py-2.5 bg-orange-500 hover:bg-orange-600 text-black font-bold rounded-xl text-sm whitespace-nowrap' %>
<% end %>
</form>
</div>
@@ -147,6 +150,7 @@
</div>
<%# Card destacado: total consolidado e pago (consolidações finalizadas do período) %>
<% if @ver_financeiro %>
<div class="sm:col-span-2 xl:col-span-1 bg-[#1a1a1a] rounded-2xl border border-green-500/30 p-6">
<p class="text-gray-400 text-sm font-medium mb-2 flex items-center gap-2"><%= icone :consolidado_pago, espaco: false %> Consolidado / Pago</p>
<p class="text-3xl font-black text-white mb-1"><%= moeda(@fin_custo_total) %></p>
@@ -156,6 +160,7 @@
<span class="text-gray-400">pago</span>
</div>
</div>
<% end %>
<%# Card 2: Total de entregas %>
<div class="bg-[#1a1a1a] rounded-2xl border border-white/5 p-6">
@@ -203,6 +208,7 @@
</div>
<%# KPIs FINANCEIROS (consolidações finalizadas, já com filtro de operação) %>
<% if @ver_financeiro %>
<div class="grid grid-cols-[repeat(auto-fit,minmax(13rem,1fr))] gap-4">
<div class="bg-[#1a1a1a] rounded-2xl border border-white/5 p-6">
<p class="text-gray-400 text-sm font-medium mb-2 flex items-center gap-2"><%= icone :dinheiro, espaco: false %> Custo total</p>
@@ -225,6 +231,7 @@
<p class="text-gray-400 text-xs mt-1">pendente</p>
</div>
</div>
<% end %>
<%# GRÁFICO + MOTORISTAS (lado a lado no desktop) %>
<div class="grid grid-cols-1 xl:grid-cols-3 gap-4">
@@ -244,7 +251,9 @@
<canvas id="grafico-diario"></canvas>
</div>
<%# Pagamentos por dia (fluxo de caixa) — quando o dinheiro saiu de fato %>
<%# Pagamentos por dia (fluxo de caixa) — quando o dinheiro saiu de fato.
É valor pago: fica atrás da mesma permissão dos demais blocos de custo. %>
<% if @ver_financeiro %>
<div class="flex flex-wrap items-center justify-between gap-2 mt-6 mb-4 pt-6 border-t border-white/5">
<div>
<h2 class="text-lg font-semibold text-white">Pagamentos por dia</h2>
@@ -273,6 +282,7 @@
<% end %>
</div>
<% end %>
<% end %>
</div>
<%# Top motoristas — DUAS ABAS sobre o mesmo ranking:
@@ -320,6 +330,7 @@
</div>
</div>
<% if @ver_financeiro %>
<%# ── FINANCEIRO POR OPERAÇÃO ───────────────────────────── %>
<div class="grid grid-cols-1 xl:grid-cols-3 gap-4">
@@ -472,7 +483,9 @@
</div>
</div>
<%# Por operação %>
<% end %>
<%# Por operação (contagem de entregas — não é custo, fica para todos) %>
<% if @por_operacao.any? %>
<div class="bg-[#1a1a1a] rounded-2xl border border-white/5 p-6">
<h2 class="text-lg font-semibold text-white mb-4 flex items-center gap-2"><%= icone :operacao, espaco: false %> Entregas por Local</h2>
@@ -719,7 +732,9 @@
})();
</script>
<%# Fluxo de pagamentos: barras (pago no dia) + linha (acumulado no período) %>
<%# Fluxo de pagamentos: barras (pago no dia) + linha (acumulado no período).
Sem permissão de financeiro os dados não são carregados — o script sai fora. %>
<% if @ver_financeiro %>
<script>
(function () {
const ctx = document.getElementById('grafico-pagamentos-dia');
@@ -795,7 +810,7 @@
})();
</script>
<%# Rosca de pagamentos (pago x a pagar, por valor) %>
<%# Rosca de pagamentos (pago x a pagar, por valor) — mesmo bloco de permissão. %>
<script>
(function () {
const ctx = document.getElementById('grafico-pagamentos');
@@ -839,7 +854,12 @@
})();
</script>
<%# ── Gráficos financeiros por operação ─────────────────────── %>
<% end %>
<%# ── Gráficos financeiros por operação ───────────────────────
Sem a permissão de financeiro os dados nem chegam à página: o controller não
carrega, e este script inteiro fica de fora do HTML. %>
<% if @ver_financeiro %>
<script>
(function () {
const moedaTick = (v) => 'R$ ' + Number(v).toLocaleString('pt-BR', { minimumFractionDigits: 0 });
@@ -905,3 +925,4 @@
})();
})();
</script>
<% end %>