, Correçoes UX consolidaçoes e de backa-end

This commit is contained in:
2026-08-28 16:38:51 -03:00
parent b6fe6f796f
commit bfa474262f
7 changed files with 290 additions and 40 deletions

View File

@@ -284,6 +284,37 @@ class ConsolidacoesController < ApplicationController
redirect_to consolidacoes_path, notice: 'Consolidação arquivada.'
end
# POST /consolidacoes/arquivar_em_lote — arquiva as consolidações marcadas na
# lista. Mesma regra do arquivar de uma só (nenhuma trava extra): arquivar é
# REVERSÍVEL (Arquivadas → Reativar), então o lote não precisa de confirmação
# mais dura do que a de uma — o que ele precisa é dizer QUANTAS foram.
#
# Ignora em silêncio id que não está mais ativo (alguém arquivou pela outra
# aba enquanto a lista estava aberta): o resultado que o operador queria — "essas
# saem da lista" — já é o que está na tela, e erro aqui só assustaria à toa.
def arquivar_em_lote
authorize Consolidacao, :arquivar?
ids = Array(params[:ids]).map(&:to_i).reject(&:zero?)
if ids.empty?
return redirect_back fallback_location: consolidacoes_path,
alert: 'Marque ao menos uma consolidação para arquivar.'
end
alvos = Consolidacao.ativas.where(id: ids).to_a
alvos.each do |c|
c.arquivar!(current_user)
auditar!(:arquivar, c, dados_novos: { em_lote: true, total_do_lote: alvos.size })
end
aviso = case alvos.size
when 0 then 'Nenhuma das consolidações marcadas continuava ativa.'
when 1 then "1 consolidação arquivada. Você pode restaurar em \"Arquivadas\"."
else "#{alvos.size} consolidações arquivadas. Você pode restaurar em \"Arquivadas\"."
end
redirect_back fallback_location: consolidacoes_path, notice: aviso
end
# GET /consolidacoes/arquivadas — histórico de consolidações arquivadas
def arquivadas
authorize Consolidacao