Edição para contabilizar as entregas de falha tambem na consolidação

This commit is contained in:
2026-06-25 09:57:45 -03:00
parent 1807dc1821
commit 280c2c7143
4 changed files with 32 additions and 11 deletions

View File

@@ -139,11 +139,12 @@ class Consolidacao < ApplicationRecord
end
end
# Entregas pagas elegíveis para um motorista no período, respeitando o filtro
# de veículos da consolidação (quando houver). Fonte única usada pelo wizard,
# pela revisão e pelo gate de finalização.
# Entregas elegíveis para um motorista no período (atendidas: sucesso +
# insucesso, pois o motorista foi ao local), respeitando o filtro de veículos
# da consolidação (quando houver). Fonte única usada pelo wizard, pela revisão
# e pelo gate de finalização.
def entregas_elegiveis_count(motorista)
Entrega.contar_pagas(
Entrega.contar_atendidas(
inicio: data_inicio,
fim: data_fim,
motorista: motorista,

View File

@@ -17,11 +17,20 @@ class Entrega < ApplicationRecord
# AJUSTE aqui se o valor real for diferente (ex.: 'cancelled', 'not_delivered').
STATUS_FALHA = %w[failed].freeze
# Status em que o motorista FOI até o local: sucesso ('completed') ou
# insucesso ('failed'). Base da elegibilidade na consolidação — o motorista
# se deslocou, então a entrega precisa constar para ser classificada, mesmo
# que não tenha sido entregue com sucesso.
STATUS_ATENDIDO = (%w[completed] + STATUS_FALHA).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 }
# Atendidas = motorista foi ao local (sucesso OU insucesso) com checkout.
# É o conjunto elegível da consolidação (mais amplo que .pagas).
scope :atendidas, -> { where(status: STATUS_ATENDIDO).com_checkout }
# 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
@@ -121,10 +130,11 @@ class Entrega < ApplicationRecord
base.distinct.order(:vehicle).pluck(:vehicle).compact.reject(&:empty?)
end
# Contagem de entregas pagas para cálculo estimado.
# Contagem de entregas ATENDIDAS (motorista foi ao local: sucesso + insucesso)
# elegíveis para a consolidação.
# Período pela DATA REAL da entrega (checkout) — ver no_periodo_checkout.
def self.contar_pagas(inicio:, fim:, motorista: nil, vehicle: nil, operacoes: nil)
base = pagas.da_conta_gade.no_periodo_checkout(inicio, fim)
def self.contar_atendidas(inicio:, fim:, motorista: nil, vehicle: nil, operacoes: nil)
base = atendidas.da_conta_gade.no_periodo_checkout(inicio, fim)
base = base.do_motorista(motorista) if motorista.present?
base = base.da_veiculo(vehicle) if vehicle.present?
base = base.da_operacoes(operacoes) if operacoes.present?
@@ -160,6 +170,11 @@ class Entrega < ApplicationRecord
status == 'completed'
end
# Insucesso: o motorista foi ao local mas a entrega não foi concluída.
def falhada?
STATUS_FALHA.include?(status)
end
def checkout_registrado?
checkout.present?
end