diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 677c16c..369e4d9 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -80,14 +80,19 @@ class DashboardController < ApplicationController pagas = Entrega.da_conta_gade.pagas.no_periodo_checkout(@periodo_inicio, @periodo_fim) pagas = pagas.da_operacoes(@operacao_filtro) if @operacao_filtro.present? - # PENDENTES (não concluídas) pela data planejada — não têm checkout. + # PENDENTES (em aberto, nem concluídas nem falhadas) pela data planejada. pendentes = Entrega.da_conta_gade.pendentes.no_periodo(@periodo_inicio, @periodo_fim) pendentes = pendentes.da_operacoes(@operacao_filtro) if @operacao_filtro.present? + # FALHADAS (insucesso) pela data planejada — também não têm checkout. + falhadas = Entrega.da_conta_gade.falhadas.no_periodo(@periodo_inicio, @periodo_fim) + falhadas = falhadas.da_operacoes(@operacao_filtro) if @operacao_filtro.present? + # Totais gerais @entregas_pagas = pagas.count @entregas_pendentes = pendentes.count - @total_entregas = @entregas_pagas + @entregas_pendentes + @entregas_falhadas = falhadas.count + @total_entregas = @entregas_pagas + @entregas_pendentes + @entregas_falhadas # Configurações de preço config = Configuracao.mapa_de_precos diff --git a/app/models/entrega.rb b/app/models/entrega.rb index 69e898c..5c6f000 100644 --- a/app/models/entrega.rb +++ b/app/models/entrega.rb @@ -13,12 +13,20 @@ class Entrega < ApplicationRecord true end + # Status que o SimpleRoute grava para entregas SEM SUCESSO (falha/insucesso). + # AJUSTE aqui se o valor real for diferente (ex.: 'cancelled', 'not_delivered'). + STATUS_FALHA = %w[failed].freeze + # ── Scopes ────────────────────────────────────────────────── scope :concluidas, -> { where(status: 'completed') } scope :com_checkout, -> { where.not(checkout: nil) } # Pagamento = entrega concluída com checkout registrado scope :pagas, -> { concluidas.com_checkout } - scope :pendentes, -> { where.not(status: 'completed') } + # Falhadas = entregas que não tiveram sucesso (status de falha) + scope :falhadas, -> { where(status: STATUS_FALHA) } + # Pendentes = nem concluídas nem falhadas (ainda em aberto). Exclui as falhadas + # para que entregues/pendentes/falhadas não se sobreponham no dashboard. + scope :pendentes, -> { where.not(status: ['completed'] + STATUS_FALHA) } # planned_date é timestamp: usamos o dia inteiro do limite superior para não # descartar as entregas do último dia do período (causava dashboard zerado e diff --git a/app/views/dashboard/index.html.erb b/app/views/dashboard/index.html.erb index 4b4bf4c..a11eb21 100644 --- a/app/views/dashboard/index.html.erb +++ b/app/views/dashboard/index.html.erb @@ -5,8 +5,41 @@ <%# alterado pelo JS, sem reexecutar scripts) e só voltava com F5. %> <% content_for :head do %> + + <%# Flatpickr — CSS no
(evita flash sem estilo) + tema escuro oficial %> + + + <% end %> +<%# Quick-ranges no formato YYYY-MM-DD para os atalhos do filtro %> +<% hoje = Date.current %> +<% atalhos = { + 'Hoje' => [hoje, hoje], + '7 dias' => [hoje - 6, hoje], + 'Este mês' => [hoje.beginning_of_month, hoje], + '30 dias' => [hoje - 29, hoje] + } %> +