novo pilar tipo: termo (valor 5 no enum), lançado como uma linha por lote com manual: true e uma coluna nova quantidade. O valor_aplicado guarda o total do lote (qtd × preço), então recalcular_motorista! e todas as somas existentes seguem corretas sem mudança — linhas antigas ficam com quantidade = 1.
This commit is contained in:
@@ -159,8 +159,9 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
|
||||
todas = @consolidacao.consolidacao_entregas.where(motorista_nome: @motorista)
|
||||
|
||||
# Agregados calculados sobre o conjunto COMPLETO (não só a página exibida)
|
||||
@resumo = todas.group(:tipo).count
|
||||
# Agregados calculados sobre o conjunto COMPLETO (não só a página exibida).
|
||||
# sum(:quantidade) (default 1) conta os termos lançados em lote como N entregas.
|
||||
@resumo = todas.group(:tipo).sum(:quantidade)
|
||||
@total = todas.sum do |c|
|
||||
c.tipo == 'desconto' ? -c.valor_aplicado : c.valor_aplicado
|
||||
end
|
||||
@@ -255,6 +256,31 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
render_apontamento_erro(e.message)
|
||||
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.
|
||||
def apontar_termo
|
||||
authorize @consolidacao, :update?
|
||||
|
||||
motorista = @consolidacao.adicionar_termos!(
|
||||
motorista: params[:motorista].to_s.strip,
|
||||
quantidade: params[:quantidade],
|
||||
user: current_user
|
||||
)
|
||||
auditar!(:editar, @consolidacao,
|
||||
dados_novos: { entrega_termo: params[:quantidade].to_i, 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}."
|
||||
end
|
||||
end
|
||||
rescue ArgumentError => e
|
||||
render_apontamento_erro(e.message)
|
||||
end
|
||||
|
||||
# DELETE /consolidacoes/:consolidacao_id/consolidacao_entregas/remover_apontamento
|
||||
# Remove um apontamento manual — por ?id= (um pilar) ou por ?tracking_id=&motorista=
|
||||
# (todos os pilares daquela nota). Não passa pelo guard de elegibilidade, pois o
|
||||
|
||||
@@ -353,7 +353,8 @@ class ConsolidacoesController < ApplicationController
|
||||
authorize @consolidacao, :show?
|
||||
@motorista = params[:motorista]
|
||||
@entregas = @consolidacao.consolidacao_entregas.where(motorista_nome: @motorista)
|
||||
@resumo = @entregas.group(:tipo).count
|
||||
# sum(:quantidade) (default 1) conta os termos lançados em lote como N entregas.
|
||||
@resumo = @entregas.group(:tipo).sum(:quantidade)
|
||||
@total = @entregas.sum { |e| e.desconto? ? -e.valor_aplicado : e.valor_aplicado }
|
||||
render layout: false # renderiza dentro do modal (Turbo Frame)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user