, Correçoes UX consolidaçoes e de backa-end

This commit is contained in:
2026-08-28 16:38:51 -03:00
parent b6fe6f796f
commit bfa474262f
7 changed files with 290 additions and 40 deletions

View File

@@ -348,9 +348,20 @@
<%# Composição por tipo (rosca) %>
<div class="bg-[#1a1a1a] rounded-2xl border border-white/5 p-6">
<h2 class="text-lg font-semibold text-white mb-1 flex items-center gap-2"><%= icone :composicao, espaco: false %> Composição do custo</h2>
<p class="text-gray-400 text-sm mb-4">Por tipo de lançamento</p>
<p class="text-gray-400 text-sm mb-4">Por tipo de lançamento, antes dos descontos</p>
<% if @fin_por_tipo.any? %>
<div class="relative h-64"><canvas id="grafico-composicao-tipo"></canvas></div>
<%# A rosca soma os pilares que ACRESCENTAM valor; o desconto subtrai e
não cabe como fatia (ver DashboardController#carregar_dados_financeiro).
Quando existe desconto, a diferença entre a soma das fatias e o
"Custo total" do topo é exatamente esta linha — dita aqui, no lugar
onde ela aparece, e não em documentação (diretriz 1). %>
<% if @fin_descontos.to_f.positive? %>
<p class="text-gray-400 text-xs mt-4 pt-3 border-t border-white/5">
<span class="text-gray-300 font-semibold"> <%= moeda(@fin_descontos) %></span>
em descontos, já abatidos no Custo total.
</p>
<% end %>
<% else %>
<div class="text-center py-8 text-gray-400"><div class="mb-2"><%= icone :composicao, tamanho: 'w-8 h-8', cor: 'text-gray-600', espaco: false %></div><p class="text-sm">Sem dados no período</p></div>
<% end %>
@@ -916,7 +927,10 @@
Chart.getChart(ctx)?.destroy();
const labels = <%= raw @fin_por_tipo.map { |h| h[:label] }.to_json %>;
const valores = <%= raw @fin_por_tipo.map { |h| h[:valor] }.to_json %>;
const cores = ['#f97316', '#9a3412', '#fed7aa', '#374151', '#9333ea'];
// A cor vem junto do label (DashboardController::CORES_TIPO). Era uma lista
// fixa de 5 cores aqui para 7 tipos possíveis: o Chart.js reciclava e
// "Entrega de Termo" saía com a mesma laranja de "Entrega Normal".
const cores = <%= raw @fin_por_tipo.map { |h| h[:cor] }.to_json %>;
new Chart(ctx, {
type: 'doughnut',
data: { labels: labels, datasets: [{ data: valores, backgroundColor: cores, borderColor: '#1a1a1a', borderWidth: 3 }] },