Grande correção do filtro de veiculos na area de consolidação
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
# Snapshot do veículo em cada pilar da consolidação. O veículo vive só na tabela
|
||||
# externa de rastreio (db_reem_simplerout_2026), acessível via tracking_id. Guardar
|
||||
# uma cópia aqui permite fechar/consolidar POR VEÍCULO sem N+1 e mantém o histórico
|
||||
# estável mesmo que a base externa mude depois. Lançamentos sintéticos (apontamento
|
||||
# 100% manual "MAN-*" e entrega de termo "TERMO-*") não têm veículo na rastreio e
|
||||
# ficam NULL — o agrupamento trata NULL como "(sem veículo)".
|
||||
class AddVehicleToConsolidacaoEntregas < ActiveRecord::Migration[7.1]
|
||||
def up
|
||||
unless column_exists?(:consolidacao_entregas, :vehicle)
|
||||
add_column :consolidacao_entregas, :vehicle, :string
|
||||
add_index :consolidacao_entregas, %i[consolidacao_id motorista_nome vehicle],
|
||||
name: 'idx_consolidacao_entrega_veiculo'
|
||||
end
|
||||
|
||||
# Backfill dos lançamentos já existentes a partir da rastreio. Só roda onde a
|
||||
# tabela externa existe (dev/prod) — no banco de teste ela é isolada, então
|
||||
# pulamos para não quebrar o db:migrate.
|
||||
return unless connection.table_exists?('db_reem_simplerout_2026')
|
||||
|
||||
say_with_time 'backfill vehicle em consolidacao_entregas' do
|
||||
execute(<<~SQL.squish)
|
||||
UPDATE consolidacao_entregas ce
|
||||
SET vehicle = e.vehicle
|
||||
FROM db_reem_simplerout_2026 e
|
||||
WHERE e.tracking_id = ce.tracking_id
|
||||
AND ce.vehicle IS NULL
|
||||
SQL
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
if index_exists?(:consolidacao_entregas, %i[consolidacao_id motorista_nome vehicle],
|
||||
name: 'idx_consolidacao_entrega_veiculo')
|
||||
remove_index :consolidacao_entregas, name: 'idx_consolidacao_entrega_veiculo'
|
||||
end
|
||||
remove_column :consolidacao_entregas, :vehicle if column_exists?(:consolidacao_entregas, :vehicle)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user