Correção da função filtro de Pagamentos

This commit is contained in:
2026-06-17 16:34:29 -03:00
parent a476e32dc6
commit 50166686f8
2 changed files with 90 additions and 47 deletions

View File

@@ -88,17 +88,26 @@ class DashboardController < ApplicationController
end
def carregar_dados_pagamentos
finalizadas = @consolidacoes_mes.where(status: :finalizada)
cms = ConsolidacaoMotorista.where(consolidacao_id: finalizadas.select(:id))
intervalo = @periodo_inicio.beginning_of_day..@periodo_fim.end_of_day
@pag_pago_qtd = cms.pagos.count
@pag_pend_qtd = cms.pendentes.count
@pag_pago_valor = cms.pagos.sum(:valor_total)
@pag_pend_valor = cms.pendentes.sum(:valor_total)
# PAGOS: filtrados pela DATA DO PAGAMENTO (pago_em) dentro do período do topo
# — "quanto foi pago neste período".
pagos = ConsolidacaoMotorista
.joins(:consolidacao)
.where(consolidacoes: { status: :finalizada, deleted_at: nil })
.where(pago_em: intervalo)
@pag_pago_qtd = pagos.count
@pag_pago_valor = pagos.sum(:valor_total)
@tabela_pagamentos = finalizadas.recentes.map do |c|
{ consolidacao: c, status: c.status_pagamento, pago: c.valor_pago, pendente: c.valor_pendente }
end
# PENDENTES: consolidações finalizadas cujo PERÍODO cruza o filtro, ainda sem
# pagamento (pendente não tem data de pagamento para filtrar).
finalizadas_ids = @consolidacoes_mes.where(status: :finalizada).select(:id)
pendentes = ConsolidacaoMotorista.where(consolidacao_id: finalizadas_ids).pendentes
@pag_pend_qtd = pendentes.count
@pag_pend_valor = pendentes.sum(:valor_total)
@pagamentos_feitos = pagos.includes(:consolidacao, :pagador).order(pago_em: :desc)
@pagamentos_pendentes = pendentes.includes(:consolidacao).order(consolidacao_id: :desc)
end
def build_grafico_diario(entregas, preco_entrega)

View File

@@ -144,12 +144,12 @@
<%# Rosca pago vs a pagar (por valor) %>
<div class="bg-[#1a1a1a] rounded-2xl border border-white/5 p-6">
<h2 class="text-lg font-semibold text-white mb-1">💵 Pagamentos</h2>
<p class="text-gray-400 text-sm mb-4">Consolidações finalizadas no período</p>
<p class="text-gray-400 text-sm mb-4">Pagos por data de pagamento · pendentes no período</p>
<% if (@pag_pago_qtd + @pag_pend_qtd).zero? %>
<div class="text-center py-8 text-gray-500">
<div class="text-3xl mb-2">🧾</div>
<p class="text-sm">Nenhuma consolidação finalizada no período</p>
<p class="text-sm">Nenhum pagamento ou pendência no período</p>
</div>
<% else %>
<div class="relative h-44 mb-4">
@@ -157,9 +157,9 @@
</div>
<div class="space-y-2">
<div class="flex items-center justify-between text-sm">
<span class="text-green-400">● Pago</span>
<span class="text-green-400">● Pago no período</span>
<span class="text-white font-semibold">
<%= moeda(@pag_pago_valor) %> · <%= @pag_pago_qtd %> motorista(s)
<%= moeda(@pag_pago_valor) %> · <%= @pag_pago_qtd %> pagamento(s)
</span>
</div>
<div class="flex items-center justify-between text-sm">
@@ -172,42 +172,76 @@
<% end %>
</div>
<%# Tabela de consolidações com status de pagamento %>
<div class="xl:col-span-2 bg-[#1a1a1a] rounded-2xl border border-white/5 p-6">
<h2 class="text-lg font-semibold text-white mb-4">📋 Status de pagamento por consolidação</h2>
<%# Tabelas: pagamentos realizados (com data) + pendentes %>
<div class="xl:col-span-2 bg-[#1a1a1a] rounded-2xl border border-white/5 p-6 space-y-6">
<% if @tabela_pagamentos.any? %>
<div class="overflow-x-auto">
<table class="w-full text-sm">
<thead>
<tr class="text-gray-500 text-left border-b border-white/5">
<th class="py-2 pr-3 font-medium">Consolidação</th>
<th class="py-2 px-3 font-medium">Status</th>
<th class="py-2 px-3 font-medium text-right">Pago</th>
<th class="py-2 pl-3 font-medium text-right">A pagar</th>
</tr>
</thead>
<tbody>
<% @tabela_pagamentos.each do |linha| %>
<tr class="border-b border-white/5">
<td class="py-2.5 pr-3">
<%= link_to linha[:consolidacao].nome, consolidacao_path(linha[:consolidacao]),
class: 'text-white hover:text-orange-500 font-medium' %>
</td>
<td class="py-2.5 px-3"><%= badge_pagamento(linha[:status]) %></td>
<td class="py-2.5 px-3 text-right text-green-400"><%= moeda(linha[:pago]) %></td>
<td class="py-2.5 pl-3 text-right text-gray-400"><%= moeda(linha[:pendente]) %></td>
<%# Pagamentos realizados no período (filtrados por pago_em) %>
<div>
<h2 class="text-lg font-semibold text-white mb-4">✅ Pagamentos realizados no período</h2>
<% if @pagamentos_feitos.any? %>
<div class="overflow-x-auto">
<table class="w-full text-sm">
<thead>
<tr class="text-gray-500 text-left border-b border-white/5">
<th class="py-2 pr-3 font-medium">Pago em</th>
<th class="py-2 px-3 font-medium">Motorista</th>
<th class="py-2 px-3 font-medium">Consolidação</th>
<th class="py-2 px-3 font-medium">Forma</th>
<th class="py-2 pl-3 font-medium text-right">Valor</th>
</tr>
<% end %>
</tbody>
</table>
</div>
<% else %>
<div class="text-center py-8 text-gray-500">
<div class="text-3xl mb-2">📋</div>
<p class="text-sm">Nenhuma consolidação finalizada no período</p>
</div>
<% end %>
</thead>
<tbody>
<% @pagamentos_feitos.each do |cm| %>
<tr class="border-b border-white/5">
<td class="py-2.5 pr-3 text-gray-300 whitespace-nowrap"><%= l cm.pago_em.to_date, format: :short %></td>
<td class="py-2.5 px-3 text-white"><%= cm.motorista_nome %></td>
<td class="py-2.5 px-3">
<%= link_to cm.consolidacao.nome, consolidacao_path(cm.consolidacao),
class: 'text-gray-300 hover:text-orange-500' %>
</td>
<td class="py-2.5 px-3 text-gray-400"><%= cm.forma_pagamento&.humanize || '—' %></td>
<td class="py-2.5 pl-3 text-right text-green-400 font-semibold"><%= moeda(cm.valor_total) %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
<% else %>
<p class="text-gray-500 text-sm py-3">Nenhum pagamento realizado neste período.</p>
<% end %>
</div>
<%# Pendentes (consolidações finalizadas do período sem pagamento) %>
<div>
<h2 class="text-lg font-semibold text-white mb-4">🕗 Pagamentos pendentes</h2>
<% if @pagamentos_pendentes.any? %>
<div class="overflow-x-auto">
<table class="w-full text-sm">
<thead>
<tr class="text-gray-500 text-left border-b border-white/5">
<th class="py-2 pr-3 font-medium">Motorista</th>
<th class="py-2 px-3 font-medium">Consolidação</th>
<th class="py-2 pl-3 font-medium text-right">Valor</th>
</tr>
</thead>
<tbody>
<% @pagamentos_pendentes.each do |cm| %>
<tr class="border-b border-white/5">
<td class="py-2.5 pr-3 text-white"><%= cm.motorista_nome %></td>
<td class="py-2.5 px-3">
<%= link_to cm.consolidacao.nome, consolidacao_path(cm.consolidacao),
class: 'text-gray-300 hover:text-orange-500' %>
</td>
<td class="py-2.5 pl-3 text-right text-gray-400 font-semibold"><%= moeda(cm.valor_total) %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
<% else %>
<p class="text-gray-500 text-sm py-3">Nenhuma pendência no período. 🎉</p>
<% end %>
</div>
</div>
</div>