correção do filtro de veiculos na area de consolidação
This commit is contained in:
@@ -208,6 +208,54 @@ class Consolidacao < ApplicationRecord
|
||||
.distinct.count(:tracking_id)
|
||||
end
|
||||
|
||||
# Status por veículo do motorista: array de { vehicle, eligible, classificadas,
|
||||
# completo, fechado, arquivado }. `completo` = 100% classificado (pode consolidar);
|
||||
# `fechado` = veículo consolidado (🔒); `arquivado` = fora do gate. Une os veículos
|
||||
# com entregas elegíveis (rastreio) com os que só têm linha em consolidacao_veiculos
|
||||
# (arquivados / buckets manuais). Fonte única do filtro de carros e do wizard.
|
||||
def veiculos_do_motorista(motorista)
|
||||
return [] unless motorista.present?
|
||||
|
||||
rel = Entrega.atendidas.da_conta_gade
|
||||
.no_periodo_checkout(data_inicio, data_fim)
|
||||
.do_motorista(motorista)
|
||||
rel = rel.da_veiculo(vehicle_ids) if vehicle_ids.present?
|
||||
rel = rel.da_operacoes(operacoes) if operacoes.present?
|
||||
|
||||
por_veiculo = rel.pluck(:tracking_id, :vehicle).group_by { |(_id, v)| v.presence || SEM_VEICULO }
|
||||
classificadas = consolidacao_entregas.where(motorista_nome: motorista, manual: false)
|
||||
.distinct.pluck(:tracking_id).to_set
|
||||
estados = consolidacao_veiculos.where(motorista_nome: motorista).index_by(&:vehicle)
|
||||
|
||||
(por_veiculo.keys + estados.keys).uniq.map do |veiculo|
|
||||
ids = (por_veiculo[veiculo] || []).map(&:first)
|
||||
feito = ids.count { |id| classificadas.include?(id) }
|
||||
cv = estados[veiculo]
|
||||
{ vehicle: veiculo, eligible: ids.size, classificadas: feito,
|
||||
completo: ids.size.positive? && feito >= ids.size,
|
||||
fechado: cv&.fechado? || false,
|
||||
arquivado: cv&.arquivado? || false }
|
||||
end.sort_by { |v| v[:vehicle] }
|
||||
end
|
||||
|
||||
# Arquiva os veículos PENDENTES (com entregas elegíveis mas não 100% classificadas)
|
||||
# de todos os motoristas ativos, deixando-os de fora da finalização. Usado pelo
|
||||
# atalho "arquivar pendentes e finalizar" — os prontos/consolidados seguem no todo.
|
||||
# Retorna a lista "Motorista · Veículo" arquivada.
|
||||
def arquivar_veiculos_pendentes!(user)
|
||||
arquivados = []
|
||||
consolidacao_motoristas.ativos.each do |cm|
|
||||
veiculos_do_motorista(cm.motorista_nome).each do |v|
|
||||
next if v[:fechado] || v[:arquivado] || v[:completo] || v[:eligible].zero?
|
||||
|
||||
cv = consolidacao_veiculos.find_or_create_by!(motorista_nome: cm.motorista_nome, vehicle: v[:vehicle])
|
||||
cv.arquivar!(user)
|
||||
arquivados << "#{cm.motorista_nome} · #{v[:vehicle]}"
|
||||
end
|
||||
end
|
||||
arquivados
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user