Adição de mais um preço 'Termo especial'

This commit is contained in:
2026-07-15 16:27:20 -03:00
parent e129e991e4
commit 5af51534be
13 changed files with 158 additions and 62 deletions

View File

@@ -64,7 +64,8 @@ class ConsolidacaoEntregasController < ApplicationController
bonus: Configuracao.preco_bonus,
desconto: Configuracao.preco_desconto,
extraordinaria: Configuracao.preco_extraordinaria,
termo: Configuracao.preco_termo
termo: Configuracao.preco_termo,
termo_especial: Configuracao.preco_termo_especial
}
end
@@ -267,25 +268,38 @@ class ConsolidacaoEntregasController < ApplicationController
end
# POST /consolidacoes/:consolidacao_id/consolidacao_entregas/apontar_termo
# ENTREGA DE TERMO — lança um lote de N termos para o motorista. Não há NF nem
# código de rastreio: só a quantidade, a um preço fixo configurável.
# ENTREGA DE TERMO — lança lotes de termos para o motorista. Não há NF nem
# código de rastreio: só as quantidades (normal e especial), cada tipo a um
# preço fixo configurável.
def apontar_termo
authorize @consolidacao, :update?
motorista = @consolidacao.adicionar_termos!(
motorista: params[:motorista].to_s.strip,
quantidade: params[:quantidade],
vehicle: params[:vehicle], # veículo escolhido no lançamento (Q3)
user: current_user
)
qtd_normal = params[:quantidade].to_i
qtd_especial = params[:quantidade_especial].to_i
raise ArgumentError, 'Informe ao menos um termo (normal ou especial).' if qtd_normal < 1 && qtd_especial < 1
motorista = nil
ActiveRecord::Base.transaction do
{ 'termo' => qtd_normal, 'termo_especial' => qtd_especial }.each do |tipo, qtd|
next if qtd < 1
motorista = @consolidacao.adicionar_termos!(
motorista: params[:motorista].to_s.strip,
quantidade: qtd,
tipo: tipo,
vehicle: params[:vehicle], # veículo escolhido no lançamento (Q3)
user: current_user
)
end
end
auditar!(:editar, @consolidacao,
dados_novos: { entrega_termo: params[:quantidade].to_i, motorista: motorista })
dados_novos: { entrega_termo: qtd_normal, entrega_termo_especial: qtd_especial, motorista: motorista })
respond_to do |format|
format.json { render json: resumo_json(motorista).merge(motorista: motorista) }
format.html do
redirect_to validar_consolidacao_consolidacao_entregas_path(@consolidacao, motorista: motorista),
notice: "#{params[:quantidade].to_i} entrega(s) de termo adicionada(s) para #{motorista}."
notice: "#{qtd_normal + qtd_especial} entrega(s) de termo adicionada(s) para #{motorista}."
end
end
rescue ArgumentError => e
@@ -534,8 +548,9 @@ class ConsolidacaoEntregasController < ApplicationController
# Conta lançamentos manuais como ENTREGAS: cada termo vale `quantidade` (lote
# numa só linha); os demais apontamentos manuais valem 1 por nota (tracking).
def contar_manuais(rel_manual)
rel_manual.termo.sum(:quantidade) +
rel_manual.where.not(tipo: ConsolidacaoEntrega.tipos[:termo]).distinct.count(:tracking_id)
tipos_termo = ConsolidacaoEntrega.tipos.values_at(:termo, :termo_especial)
rel_manual.where(tipo: tipos_termo).sum(:quantidade) +
rel_manual.where.not(tipo: tipos_termo).distinct.count(:tracking_id)
end
# `vehicles` (opcional, string ou array): quando presente, TODO o resumo