mirror of https://github.com/interlegis/sapl.git
committed by
GitHub
5 changed files with 203 additions and 27 deletions
@ -0,0 +1,55 @@ |
|||||
|
# Generated by Django 2.2.28 on 2026-08-05 16:00 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
from django.db.models import Count |
||||
|
|
||||
|
|
||||
|
def remove_presencas_duplicadas(apps, schema_editor): |
||||
|
"""Mantém uma única presença por (sessão, parlamentar). |
||||
|
|
||||
|
Presença é um sim/não, então as linhas repetidas não carregam informação |
||||
|
adicional: preserva-se a de menor id e descartam-se as demais. Em |
||||
|
SessaoPlenariaPresenca dá-se preferência a uma linha com data_sessao |
||||
|
preenchida, caso exista, para não perder o único campo que as diferencia. |
||||
|
""" |
||||
|
for model_name, tem_data_sessao in (('SessaoPlenariaPresenca', True), |
||||
|
('PresencaOrdemDia', False)): |
||||
|
model = apps.get_model('sessao', model_name) |
||||
|
# list() para materializar antes de apagar dentro do laço |
||||
|
duplicados = list(model.objects.values_list( |
||||
|
'sessao_plenaria_id', 'parlamentar_id').annotate( |
||||
|
total=Count('id')).filter(total__gt=1)) |
||||
|
|
||||
|
for sessao_id, parlamentar_id, _total in duplicados: |
||||
|
linhas = list(model.objects.filter( |
||||
|
sessao_plenaria_id=sessao_id, |
||||
|
parlamentar_id=parlamentar_id).order_by('id')) |
||||
|
manter = linhas[0] |
||||
|
if tem_data_sessao: |
||||
|
com_data = [x for x in linhas if x.data_sessao is not None] |
||||
|
if com_data: |
||||
|
manter = com_data[0] |
||||
|
model.objects.filter( |
||||
|
sessao_plenaria_id=sessao_id, |
||||
|
parlamentar_id=parlamentar_id).exclude( |
||||
|
id=manter.id).delete() |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('sessao', '0069_auto_20220919_1705'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RunPython(remove_presencas_duplicadas, |
||||
|
migrations.RunPython.noop), |
||||
|
migrations.AlterUniqueTogether( |
||||
|
name='sessaoplenariapresenca', |
||||
|
unique_together={('sessao_plenaria', 'parlamentar')}, |
||||
|
), |
||||
|
migrations.AlterUniqueTogether( |
||||
|
name='presencaordemdia', |
||||
|
unique_together={('sessao_plenaria', 'parlamentar')}, |
||||
|
), |
||||
|
] |
||||
Loading…
Reference in new issue