Pagamento por checkout + consolidação por veículo (em vez de rota)
Regra de pagamento: - Entrega.pagas agora exige status='completed' E checkout preenchido (antes era checkin). Afeta dashboard, painel do motorista, job 1h e elegibilidade das consolidações de forma consistente. Veículo no lugar de rota na consolidação: - migration troca consolidacoes.route_ids por vehicle_ids (jsonb + gin) - Entrega: da_veiculo/veiculos_unicos; contar_pagas usa vehicle - new.html.erb: filtro "Veículos" (multi-select por vehicle) - validar.html.erb: mostra o veículo em vez do código da rota - filtros/elegibilidade do controller passam a usar vehicle_ids Docs/diagnóstico atualizados. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
.da_conta_gade
|
||||
.no_periodo(@consolidacao.data_inicio, @consolidacao.data_fim)
|
||||
.do_motorista(@motorista)
|
||||
@entregas = @entregas.da_rota(@consolidacao.route_ids) if @consolidacao.route_ids.present?
|
||||
@entregas = @entregas.da_veiculo(@consolidacao.vehicle_ids) if @consolidacao.vehicle_ids.present?
|
||||
@entregas = @entregas.order(:planned_date)
|
||||
|
||||
# Classificações já feitas — indexadas por tracking_id
|
||||
@@ -139,18 +139,18 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
nome.present? && @consolidacao.consolidacao_motoristas.exists?(motorista_nome: nome)
|
||||
end
|
||||
|
||||
# tracking_ids pagos/elegíveis para o motorista no período (respeita rotas)
|
||||
# tracking_ids pagos/elegíveis para o motorista no período (respeita veículos)
|
||||
def tracking_ids_elegiveis(motorista)
|
||||
return [] unless motorista.present?
|
||||
|
||||
rel = Entrega.pagas.da_conta_gade
|
||||
.no_periodo(@consolidacao.data_inicio, @consolidacao.data_fim)
|
||||
.do_motorista(motorista)
|
||||
rel = rel.da_rota(@consolidacao.route_ids) if @consolidacao.route_ids.present?
|
||||
rel = rel.da_veiculo(@consolidacao.vehicle_ids) if @consolidacao.vehicle_ids.present?
|
||||
rel.pluck(:tracking_id)
|
||||
end
|
||||
|
||||
# Valida que a entrega pertence ao motorista informado e ao período/rota da
|
||||
# Valida que a entrega pertence ao motorista informado e ao período/veículo da
|
||||
# consolidação — impede classificar tracking_ids arbitrários via requisição.
|
||||
def entrega_elegivel?(motorista, tracking_id)
|
||||
motorista_na_consolidacao?(motorista) &&
|
||||
|
||||
@@ -22,8 +22,8 @@ class ConsolidacoesController < ApplicationController
|
||||
@consolidacoes = @consolidacoes.where(id: ids)
|
||||
end
|
||||
|
||||
if params[:route_id].present?
|
||||
@consolidacoes = @consolidacoes.where('route_ids @> ?', [params[:route_id]].to_json)
|
||||
if params[:vehicle].present?
|
||||
@consolidacoes = @consolidacoes.where('vehicle_ids @> ?', [params[:vehicle]].to_json)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -35,7 +35,7 @@ class ConsolidacoesController < ApplicationController
|
||||
data_fim: Date.current
|
||||
)
|
||||
@motoristas = Entrega.motoristas_ativos
|
||||
@rotas = Entrega.rotas_unicas
|
||||
@veiculos = Entrega.veiculos_unicos
|
||||
end
|
||||
|
||||
# POST /consolidacoes
|
||||
@@ -160,10 +160,10 @@ class ConsolidacoesController < ApplicationController
|
||||
|
||||
def preparar_form_new
|
||||
@motoristas = Entrega.motoristas_ativos
|
||||
@rotas = Entrega.rotas_unicas
|
||||
@veiculos = Entrega.veiculos_unicos
|
||||
end
|
||||
|
||||
def consolidacao_params
|
||||
params.require(:consolidacao).permit(:nome, :data_inicio, :data_fim, route_ids: [])
|
||||
params.require(:consolidacao).permit(:nome, :data_inicio, :data_fim, vehicle_ids: [])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -61,7 +61,7 @@ class DashboardController < ApplicationController
|
||||
}
|
||||
end
|
||||
|
||||
# Por operação (route_id → contact_name)
|
||||
# Por local de entrega (contact_name)
|
||||
@por_operacao = entregas.pagas
|
||||
.group(:contact_name)
|
||||
.count
|
||||
|
||||
Reference in New Issue
Block a user