39 lines
1.8 KiB
Ruby
39 lines
1.8 KiB
Ruby
# 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
|