@ -1,38 +1,18 @@
# Generated by Django 2.2.28 on 2026-08-05 16:00
# Generated by Django 2.2.28 on 2026-08-05 16:00
from django . db import migrations
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,
""" Mantém uma única presença por (sessão, parlamentar).
# então as linhas repetidas não carregam informação adicional: preserva-se a
# de menor id e descartam-se as demais.
Presença é um sim / não , então as linhas repetidas não carregam informação
REMOVE_DUPLICADAS_SQL = """
adicional : preserva - se a de menor id e descartam - se as demais . Em
DELETE FROM { tabela } a
SessaoPlenariaPresenca dá - se preferência a uma linha com data_sessao
USING { tabela } b
preenchida , caso exista , para não perder o único campo que as diferencia .
WHERE a . sessao_plenaria_id = b . sessao_plenaria_id
"""
AND a . parlamentar_id = b . parlamentar_id
for model_name , tem_data_sessao in ( ( ' SessaoPlenariaPresenca ' , True ) ,
AND a . id > b . id ;
( ' 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 ) :
class Migration ( migrations . Migration ) :
@ -42,8 +22,13 @@ class Migration(migrations.Migration):
]
]
operations = [
operations = [
migrations . RunPython ( remove_presencas_duplicadas ,
migrations . RunSQL (
migrations . RunPython . noop ) ,
REMOVE_DUPLICADAS_SQL . format (
tabela = ' sessao_sessaoplenariapresenca ' ) ,
migrations . RunSQL . noop ) ,
migrations . RunSQL (
REMOVE_DUPLICADAS_SQL . format ( tabela = ' sessao_presencaordemdia ' ) ,
migrations . RunSQL . noop ) ,
migrations . AlterUniqueTogether (
migrations . AlterUniqueTogether (
name = ' sessaoplenariapresenca ' ,
name = ' sessaoplenariapresenca ' ,
unique_together = { ( ' sessao_plenaria ' , ' parlamentar ' ) } ,
unique_together = { ( ' sessao_plenaria ' , ' parlamentar ' ) } ,