Correção do relatório que é gerado para envio gade

This commit is contained in:
2026-07-22 10:01:41 -03:00
parent def8a8314c
commit d3667ac48a
2 changed files with 61 additions and 15 deletions

View File

@@ -66,6 +66,9 @@ module Analytics
# Cabeçalho da ENTREGAS
@cab_azul = st.add_style(bg_color: '1155CC', fg_color: 'FFFFFF', b: true)
@cab_verm = st.add_style(bg_color: 'C00000', fg_color: 'FFFFFF', b: true)
# Hiperlink (fotos/comprovantes do SimpliRoute) — azul sublinhado padrão.
@link = st.add_style(fg_color: '0563C1', u: true)
end
# ── RESUMO ───────────────────────────────────────────────────
@@ -183,19 +186,38 @@ module Analytics
# Dump cru do rastreio (todas as visitas das NFs da operação), com o
# cabeçalho exato do modelo — sem estilo, como no original; cabeçalho sem
# coluna correspondente sai vazio.
#
# As colunas de foto (Nota Fiscal, Termo de Recebimento, Foto da Fachada,
# Relatório de visita) guardam URLs do S3 do SimpliRoute: viram HIPERLINK
# clicável (azul sublinhado), para o cliente abrir o comprovante direto do
# Excel em vez de copiar e colar a URL.
def aba_simpliroute(wb)
colunas = @planilha.colunas_rastreio
linhas = @planilha.linhas_rastreio
wb.add_worksheet(name: 'SimpliRoute') do |sheet|
sheet.add_row(colunas.keys)
linhas.each do |r|
sheet.add_row(colunas.values.map { |col| col ? texto(r[col]) : '' },
types: Array.new(colunas.size, :string))
valores = colunas.values.map { |col| col ? texto(r[col]) : '' }
sheet.add_row(valores, types: Array.new(colunas.size, :string))
linkar_urls(sheet, valores)
end
sheet.auto_filter = "A1:#{Axlsx.col_ref(colunas.size - 1)}#{linhas.size + 1}"
end
end
# Transforma em hiperlink toda célula da linha recém-adicionada cujo valor
# seja uma URL http(s) — mesma checagem do foto_url do OperacaoMetricas,
# para não jogar lixo dentro do <hyperlink> do arquivo.
def linkar_urls(sheet, valores)
linha = sheet.rows.size
valores.each_with_index do |valor, i|
next unless valor.to_s.match?(%r{\Ahttps?://\S+\z}i)
sheet.add_hyperlink(location: valor, ref: "#{Axlsx.col_ref(i)}#{linha}")
sheet.rows.last.cells[i].style = @link
end
end
def texto(valor)
valor.respond_to?(:strftime) ? valor.strftime('%d/%m/%Y %H:%M') : valor.to_s
end