Atualização da função de adicionar entregas por fora da operação
This commit is contained in:
@@ -160,6 +160,52 @@ class Consolidacao < ApplicationRecord
|
||||
.distinct.count(:tracking_id)
|
||||
end
|
||||
|
||||
# ── Apontamento manual ──────────────────────────────────────
|
||||
# Adiciona uma entrega "por fora" (NF que chegou depois) com um ou mais pilares
|
||||
# (tipos). O motorista vem da própria entrega e é incluído na consolidação se
|
||||
# ainda não estiver. Retorna o nome do motorista. Idempotente por (tracking, tipo).
|
||||
def adicionar_apontamento!(entrega, tipos, user)
|
||||
tipos_validos = Array(tipos).map(&:to_s).select { |t| ConsolidacaoEntrega.tipos.key?(t) }.uniq
|
||||
raise ArgumentError, 'Selecione ao menos uma classificação.' if tipos_validos.empty?
|
||||
|
||||
motorista = entrega.driver.to_s.strip
|
||||
raise ArgumentError, 'Entrega sem motorista — não é possível apontar.' if motorista.blank?
|
||||
|
||||
transaction do
|
||||
consolidacao_motoristas.find_or_create_by!(motorista_nome: motorista)
|
||||
|
||||
tipos_validos.each do |tipo|
|
||||
ce = consolidacao_entregas.find_or_initialize_by(tracking_id: entrega.tracking_id, tipo: tipo)
|
||||
next if ce.persisted? # pilar já existe — mantém
|
||||
|
||||
ce.assign_attributes(
|
||||
motorista_nome: motorista,
|
||||
valor_aplicado: ConsolidacaoEntrega.valor_para(tipo),
|
||||
manual: true,
|
||||
created_by: user&.id
|
||||
)
|
||||
ce.save!
|
||||
end
|
||||
|
||||
recalcular_motorista!(motorista)
|
||||
end
|
||||
|
||||
motorista
|
||||
end
|
||||
|
||||
# Recalcula o valor de um motorista (soma dos pilares, desconto subtrai) e o
|
||||
# total da consolidação. Fonte única usada pelo wizard e pelos apontamentos.
|
||||
def recalcular_motorista!(nome)
|
||||
cm = consolidacao_motoristas.find_by(motorista_nome: nome)
|
||||
return unless cm
|
||||
|
||||
total = consolidacao_entregas.where(motorista_nome: nome).sum do |e|
|
||||
e.desconto? ? -e.valor_aplicado : e.valor_aplicado
|
||||
end
|
||||
cm.update_column(:valor_total, total)
|
||||
update_column(:valor_total, consolidacao_motoristas.sum(:valor_total))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def periodo_valido
|
||||
|
||||
Reference in New Issue
Block a user