Correção de itens que estão fora do plano valores no dash principal

This commit is contained in:
2026-08-24 16:26:27 -03:00
parent 04b78bc7de
commit 94bbe7556f
10 changed files with 403 additions and 48 deletions

View File

@@ -78,6 +78,31 @@ class Operacao
grupos.sort_by { |titulo, _| ordem[titulo] }.map { |titulo, itens| [titulo, itens] }
end
# Em QUAIS operações cada NF aparece: { '85382' => ['UBS NORTE AGO 2026'] }.
# NFs que não estiverem em nenhuma planilha simplesmente não vêm no Hash — é
# assim que a tela de pendentes marca "fora da operação" (plano avulso/de
# inclusão) sem precisar de uma query por tabela.
#
# SEGURANÇA: as tabelas vêm de #nomes_validos (catálogo) + quote_table_name;
# as NFs entram por conn.quote. Uma query só, com UNION ALL.
def por_notas(notas)
lista = Array(notas).map(&:to_s).map(&:strip).reject(&:empty?).uniq
return {} if lista.empty?
tabelas = nomes_validos
return {} if tabelas.empty?
valores = lista.map { |n| conn.quote(n) }.join(', ')
sql = tabelas.map do |t|
"SELECT nota_fiscal, #{conn.quote(label(t))} AS operacao " \
"FROM #{conn.quote_table_name(t)} WHERE nota_fiscal IN (#{valores})"
end.join(' UNION ALL ')
conn.select_all(sql).to_a
.group_by { |r| r['nota_fiscal'].to_s }
.transform_values { |rows| rows.map { |r| r['operacao'] }.uniq.sort }
end
# Dados agregados das entregas das operações informadas, para pré-preencher o
# formulário de nova consolidação. Une as NFs de todas as tabelas válidas.
def dados(tabelas)