Skip to content

feat: ativar/desativar vários agendamentos de uma vez no admin - #1108

Merged
Winzen merged 1 commit into
mainfrom
feat/admin-bulk-activate-deactivate-schedules
Oct 7, 2026
Merged

Winzen merged 1 commit into
mainfrom
feat/admin-bulk-activate-deactivate-schedules

Conversation

@Winzen

@Winzen Winzen commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Contexto

A página "Flow Schedules" do admin (DisabledFlowSchedule) só tinha dois jeitos de ligar/desligar um agendamento: abrir a página de edição de cada registro, ou chamar a API set-schedule-active na mão. Pra agir sobre várias linhas de uma vez, nenhum dos dois é prático.

Arquivos alterados

backend/apps/admin_data_tools/schedule_actions.py   (novo)
backend/apps/admin_data_tools/admin.py
backend/apps/admin_data_tools/flow_monitoring.py
backend/apps/admin_data_tools/static/admin_data_tools/js/confirm_schedule_toggle.js   (novo)
backend/apps/admin_data_tools/static/admin_data_tools/css/hide_manual_save_button.css   (novo)
backend/apps/admin_data_tools/tests.py

Mudança

Lógica compartilhada, extraída uma vez — admin.py e SetScheduleActiveView duplicavam a sequência "Prefect primeiro, depois o banco". Agora os dois (e os caminhos novos abaixo) chamam schedule_actions.apply_schedule_state(record, active).

Checkbox editável na lista (list_editable), com confirmação via JS antes de enviar:

// confirm_schedule_toggle.js — delegado em `document`, fase de captura
// (este admin roda Jazzmin, que mexe no DOM da lista)
document.addEventListener("change", function (event) {
  // ...confirma com o nome do flow; cancelar reverte a caixa sozinha;
  // confirmar clica no botão real de "Salvar" (precisa ser um clique de
  // verdade — o Django só processa o list_editable quando vê `_save` no
  // POST, e `form.submit()` programático não inclui isso).
}, true);

O botão "Salvar" manual do rodapé da lista fica escondido via CSS (ainda existe no DOM — o JS acima clica nele — só não aparece pra ninguém clicar sem passar pela confirmação).

Duas ações em lote no dropdown padrão do admin (mesmo padrão já usado em reorder_columns):

@admin.action(description="Ativar agendamento selecionado(s)")
def activate_selected(modeladmin, request, queryset): ...

@admin.action(description="Desativar agendamento selecionado(s)")
def deactivate_selected(modeladmin, request, queryset): ...

Só toca nas linhas que precisam mudar (queryset.exclude(is_schedule_active=active)), e uma falha isolada (ex. Prefect fora do ar) não aborta o resto do lote — fica registrada no resumo junto com o que deu certo.

Benefícios

  • Ativar/desativar várias linhas de uma vez, sem abrir cada uma.
  • Confirmação explícita antes de qualquer mudança real em produção, sem exigir um segundo clique separado em "Salvar".
  • Lógica de escrita num só lugar — o próximo campo/mudança de ordem só precisa mudar em apply_schedule_state.

Acompanhamento

Registro completo, test plan e os 2 bugs achados testando de verdade (não só lint): #1109.

Flow Schedules só tinha dois jeitos de ligar/desligar um agendamento:
abrir a página de edição de cada registro, ou chamar a API
(set-schedule-active) na mão. Pra algumas linhas de uma vez, nenhum
dos dois é prático.

- Checkbox editável direto na lista (list_editable), com confirmação
  via JS antes de enviar — evita clicar sem querer numa linha de
  produção, e dispensa a necessidade de um segundo clique em "Salvar"
  (confirma -> já envia; cancela -> volta a caixa sozinha).
- Duas ações em lote no dropdown padrão do admin (mesmo padrão do
  "Alterar ordem das colunas"), pra ativar/desativar várias linhas
  selecionadas de uma vez. Uma falha (ex. Prefect fora do ar) não
  aborta o resto do lote — fica registrada no resumo junto com o que
  deu certo.
- A lógica de "Prefect primeiro, depois o banco" — antes duplicada
  entre o admin e a SetScheduleActiveView — foi extraída pra
  schedule_actions.apply_schedule_state, usada pelos três caminhos
  (edição manual, checkbox/ações em lote, API).

Testado de ponta a ponta contra Postgres real (Docker local, não só
lint): 22 testes passando, incluindo os 5 novos de
DisabledFlowScheduleAdminActionsTests. A UI em si (checkbox + confirm
+ auto-submit) foi testada manualmente no navegador.
@github-actions github-actions Bot added the prod Indica que o Pull Request está com a branch de destino (base) apontando para main label Oct 7, 2026
@Winzen Winzen self-assigned this Oct 7, 2026
@Winzen
Winzen merged commit 2b30090 into main Oct 7, 2026
6 checks passed
@Winzen
Winzen deleted the feat/admin-bulk-activate-deactivate-schedules branch October 7, 2026 05:40
github-actions Bot added a commit that referenced this pull request Oct 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

prod Indica que o Pull Request está com a branch de destino (base) apontando para main

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Ativar/desativar vários agendamentos de uma vez na página Flow Schedules

1 participant