Adição do botão de entrega manual
This commit is contained in:
@@ -31,6 +31,9 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
@total_entregas = @consolidacao.entregas_elegiveis_count(@motorista)
|
||||
@classificadas = @consolidacao.classificadas_count(@motorista)
|
||||
|
||||
# Nomes dos motoristas ATIVOS — alimenta o seletor do apontamento 100% manual.
|
||||
@motoristas_consolidacao = @consolidacao.consolidacao_motoristas.ativos.pluck(:motorista_nome)
|
||||
|
||||
# Filtro "apenas não classificadas"
|
||||
if params[:apenas_pendentes] == '1'
|
||||
@entregas = @entregas.reject { |e| @classificacoes.key?(e.tracking_id) }
|
||||
@@ -157,8 +160,8 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
@pagy, @classificacoes = pagy(todas.order(:created_at), limit: @por_pagina, page: 1)
|
||||
end
|
||||
|
||||
# Próximo motorista pendente (para botão "Próximo Motorista")
|
||||
nomes_completos = @consolidacao.consolidacao_motoristas.map(&:motorista_nome)
|
||||
# Próximo motorista pendente (para botão "Próximo Motorista") — só ativos
|
||||
nomes_completos = @consolidacao.consolidacao_motoristas.ativos.map(&:motorista_nome)
|
||||
@proximo = nomes_completos.find do |nome|
|
||||
next false if nome == @motorista
|
||||
total = @consolidacao.entregas_elegiveis_count(nome)
|
||||
@@ -207,6 +210,36 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
render_apontamento_erro(e.message)
|
||||
end
|
||||
|
||||
# POST /consolidacoes/:consolidacao_id/consolidacao_entregas/apontar_manual
|
||||
# Apontamento 100% MANUAL — não consulta a base de rastreio. O admin informa o
|
||||
# motorista (pode ser outro que não o da tela), a NF (texto livre), uma
|
||||
# observação/local e os pilares. Usado quando o motorista foi ao local mas a
|
||||
# NF ficou registrada com outro motorista no rastreio.
|
||||
def apontar_manual
|
||||
authorize @consolidacao, :update?
|
||||
|
||||
motorista = @consolidacao.adicionar_apontamento_manual!(
|
||||
motorista: params[:motorista].to_s.strip,
|
||||
tipos: tipos_param,
|
||||
nf: params[:nf],
|
||||
obs: params[:obs],
|
||||
valor_extra: valor_extraordinaria_param,
|
||||
user: current_user
|
||||
)
|
||||
auditar!(:editar, @consolidacao,
|
||||
dados_novos: { apontamento_100_manual: params[:nf], motorista: motorista, tipos: tipos_param })
|
||||
|
||||
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: "Apontamento manual adicionado 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
|
||||
@@ -246,9 +279,9 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
redirect_to @consolidacao, alert: 'Consolidação finalizada — apenas admin/gerente podem editar.'
|
||||
end
|
||||
|
||||
# Motorista realmente faz parte desta consolidação?
|
||||
# Motorista realmente faz parte desta consolidação? (ignora arquivados)
|
||||
def motorista_na_consolidacao?(nome)
|
||||
nome.present? && @consolidacao.consolidacao_motoristas.exists?(motorista_nome: nome)
|
||||
nome.present? && @consolidacao.consolidacao_motoristas.ativos.exists?(motorista_nome: nome)
|
||||
end
|
||||
|
||||
# tracking_ids atendidos/elegíveis para o motorista no período (respeita veículos).
|
||||
@@ -311,6 +344,17 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
valor.present? && valor >= 0 ? valor : Configuracao.preco_extraordinaria
|
||||
end
|
||||
|
||||
# Valor customizado da Extraordinária vindo do formulário (params[:valor]),
|
||||
# aceitando vírgula decimal. Retorna nil se ausente/inválido — aí o model usa
|
||||
# o preço padrão de Configurações.
|
||||
def valor_extraordinaria_param
|
||||
bruto = params[:valor].to_s.strip.tr(',', '.')
|
||||
return nil if bruto.blank?
|
||||
|
||||
valor = BigDecimal(bruto) rescue nil
|
||||
valor if valor && valor >= 0
|
||||
end
|
||||
|
||||
def recalcular_motorista(nome)
|
||||
@consolidacao.recalcular_motorista!(nome)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user