Browse Source

HOT-FIX: alteração de datas nas sessões plenárias

Ao alterar o campo data_inicio em SessaoPlenaria, o campo data_ordem de
OrdemDia e ExpedienteMateria não eram atualizados.

Este commit impl a atualização em cascata no método SessaoPlenaria.save
e cria um migrate para correção dos erros anteriores a esta mudança.
pull/3459/head
Leandro Roberto 3 years ago
parent
commit
1548de35af
  1. 40
      sapl/sessao/migrations/0058_corrige_data_ordem.py
  2. 20
      sapl/sessao/models.py

40
sapl/sessao/migrations/0058_corrige_data_ordem.py

@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
from django.db.models import F
def clear_thumbnails_cache_migrate(apps, schema_editor):
SessaoPlenaria = apps.get_model("sessao", "SessaoPlenaria")
OrdemDia = apps.get_model("sessao", "OrdemDia")
ExpedienteMateria = apps.get_model("sessao", "ExpedienteMateria")
for m in (OrdemDia, ExpedienteMateria):
p1 = {f'{m._meta.model_name}__isnull': False}
p2 = {f'{m._meta.model_name}__data_ordem': F('data_inicio')}
sps = SessaoPlenaria.objects.filter(
**p1
).exclude(
**p2
).distinct().all().values('id', 'data_inicio')
for sp in sps:
m.objects.filter(
sessao_plenaria_id=sp['id']
).exclude(
data_ordem=F('sessao_plenaria__data_inicio')
).update(data_ordem=sp['data_inicio'])
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0020_fix_inicio_mandato'),
]
operations = [
migrations.RunPython(clear_thumbnails_cache_migrate),
]

20
sapl/sessao/models.py

@ -2,7 +2,7 @@ from operator import xor
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q, F
from django.utils import timezone, formats from django.utils import timezone, formats
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
@ -277,7 +277,7 @@ class SessaoPlenaria(models.Model):
upload_pauta = self.upload_pauta upload_pauta = self.upload_pauta
upload_ata = self.upload_ata upload_ata = self.upload_ata
upload_anexo = self.upload_anexo upload_anexo = self.upload_anexo
result = super().delete(using=using, keep_parents=keep_parents) result = super().delete(using=using, keep_parents=keep_parents)
if upload_pauta: if upload_pauta:
@ -311,11 +311,21 @@ class SessaoPlenaria(models.Model):
self.upload_ata = upload_ata self.upload_ata = upload_ata
self.upload_anexo = upload_anexo self.upload_anexo = upload_anexo
return models.Model.save(self, force_insert=force_insert, sp = models.Model.save(self, force_insert=force_insert,
force_update=force_update, force_update=force_update,
using=using, using=using,
update_fields=update_fields) update_fields=update_fields)
sp.ordemdia_set.exclude(
data_ordem=F('sessao_plenaria__data_inicio')
).update(data_ordem=sp.data_inicio)
sp.expedientemateria_set.exclude(
data_ordem=F('sessao_plenaria__data_inicio')
).update(data_ordem=sp.data_inicio)
return sp
@reversion.register() @reversion.register()
class AbstractOrdemDia(models.Model): class AbstractOrdemDia(models.Model):
@ -426,6 +436,7 @@ class OcorrenciaSessao(models.Model): # OcorrenciaSessaoPlenaria
def __str__(self): def __str__(self):
return '%s - %s' % (self.sessao_plenaria, self.conteudo) return '%s - %s' % (self.sessao_plenaria, self.conteudo)
@reversion.register() @reversion.register()
class ConsideracoesFinais(models.Model): # ConsideracoesFinaisSessaoPlenaria class ConsideracoesFinais(models.Model): # ConsideracoesFinaisSessaoPlenaria
sessao_plenaria = models.OneToOneField(SessaoPlenaria, sessao_plenaria = models.OneToOneField(SessaoPlenaria,
@ -496,6 +507,7 @@ class AbstractOrador(models.Model): # Oradores
return result return result
@reversion.register() @reversion.register()
class Orador(AbstractOrador): # Oradores class Orador(AbstractOrador): # Oradores
@ -979,4 +991,4 @@ class RegistroLeitura(models.Model):
raise ValidationError( raise ValidationError(
'RegistroLeitura deve ter exatamente um dos campos ' 'RegistroLeitura deve ter exatamente um dos campos '
'ordem ou expediente preenchido. Ambos estão preenchidos: ' 'ordem ou expediente preenchido. Ambos estão preenchidos: '
'{}, {}'. format(self.ordem, self.expediente)) '{}, {}'. format(self.ordem, self.expediente))

Loading…
Cancel
Save