Correção do relatório que é gerado para completo
This commit is contained in:
@@ -166,20 +166,24 @@ module Analytics
|
||||
# Todas as visitas do rastreio para as NFs da operação (inclui repetidas,
|
||||
# como no dump original do SimpliRoute).
|
||||
def linhas_rastreio
|
||||
gade = conn.quote_table_name(@tabela)
|
||||
sql = <<~SQL
|
||||
SELECT r.*
|
||||
FROM #{conn.quote_table_name(Entrega.table_name)} r
|
||||
WHERE r.reference_id::text IN (SELECT nota_fiscal FROM #{gade} WHERE nota_fiscal IS NOT NULL)
|
||||
ORDER BY r.reference_id, r.checkout NULLS LAST
|
||||
SQL
|
||||
conn.select_all(sql).to_a
|
||||
@linhas_rastreio ||= begin
|
||||
gade = conn.quote_table_name(@tabela)
|
||||
sql = <<~SQL
|
||||
SELECT r.*
|
||||
FROM #{conn.quote_table_name(Entrega.table_name)} r
|
||||
WHERE r.reference_id::text IN (SELECT nota_fiscal FROM #{gade} WHERE nota_fiscal IS NOT NULL)
|
||||
ORDER BY r.reference_id, r.checkout NULLS LAST
|
||||
SQL
|
||||
completar_serie(conn.select_all(sql).to_a)
|
||||
end
|
||||
end
|
||||
|
||||
# { cabeçalho do modelo => coluna real do rastreio (ou nil) }.
|
||||
def colunas_rastreio
|
||||
existentes = conn.columns(Entrega.table_name).map(&:name)
|
||||
RASTREIO_COLUNAS.transform_values { |cands| cands.find { |c| existentes.include?(c) } }
|
||||
@colunas_rastreio ||= begin
|
||||
existentes = conn.columns(Entrega.table_name).map(&:name)
|
||||
RASTREIO_COLUNAS.transform_values { |cands| cands.find { |c| existentes.include?(c) } }
|
||||
end
|
||||
end
|
||||
|
||||
# ── Aba RESUMO ───────────────────────────────────────────────
|
||||
@@ -224,6 +228,23 @@ module Analytics
|
||||
ActiveRecord::Base.connection
|
||||
end
|
||||
|
||||
# O espelho tem a coluna do número de série mas o sync NUNCA a preenche
|
||||
# (0 de ~6.000 linhas em fev/mar/mai/jul/2026) e a tabela é read-only —
|
||||
# quem busca o dado na API é o SincronizarSeriesAparelhoJob, que grava em
|
||||
# series_aparelho. Aqui só completamos as linhas em que o espelho veio
|
||||
# vazio: se um dia o sync passar a preencher, o valor dele continua valendo.
|
||||
def completar_serie(linhas)
|
||||
coluna = colunas_rastreio['Número de Série da Base (Aparelho)']
|
||||
return linhas if coluna.nil?
|
||||
|
||||
pendentes = linhas.reject { |r| r[coluna].present? }
|
||||
return linhas if pendentes.empty?
|
||||
|
||||
series = SerieAparelho.por_tracking(pendentes.map { |r| r['tracking_id'] })
|
||||
pendentes.each { |r| r[coluna] = series[r['tracking_id']] if series[r['tracking_id']] }
|
||||
linhas
|
||||
end
|
||||
|
||||
# SELECT das colunas whitelisted; ausentes viram NULL com o mesmo alias.
|
||||
# O nome real pode diferir da chave (ver ALIAS_GADE) — o alias no SELECT é
|
||||
# sempre a chave, então quem lê a linha não precisa saber da diferença.
|
||||
|
||||
Reference in New Issue
Block a user