From 1548de35af4e3eeaf1f04e6bfdd5fb3156a939bc Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Mon, 4 Oct 2021 14:49:43 -0300 Subject: [PATCH] =?UTF-8?q?HOT-FIX:=20altera=C3=A7=C3=A3o=20de=20datas=20n?= =?UTF-8?q?as=20sess=C3=B5es=20plen=C3=A1rias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .../migrations/0058_corrige_data_ordem.py | 40 +++++++++++++++++++ sapl/sessao/models.py | 20 ++++++++-- 2 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 sapl/sessao/migrations/0058_corrige_data_ordem.py diff --git a/sapl/sessao/migrations/0058_corrige_data_ordem.py b/sapl/sessao/migrations/0058_corrige_data_ordem.py new file mode 100644 index 000000000..03f7c4a2a --- /dev/null +++ b/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), + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 26463fa19..10c4a13cf 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -2,7 +2,7 @@ from operator import xor from django.core.exceptions import ValidationError 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.translation import ugettext_lazy as _ from model_utils import Choices @@ -277,7 +277,7 @@ class SessaoPlenaria(models.Model): upload_pauta = self.upload_pauta upload_ata = self.upload_ata upload_anexo = self.upload_anexo - + result = super().delete(using=using, keep_parents=keep_parents) if upload_pauta: @@ -311,11 +311,21 @@ class SessaoPlenaria(models.Model): self.upload_ata = upload_ata 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, using=using, 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() class AbstractOrdemDia(models.Model): @@ -426,6 +436,7 @@ class OcorrenciaSessao(models.Model): # OcorrenciaSessaoPlenaria def __str__(self): return '%s - %s' % (self.sessao_plenaria, self.conteudo) + @reversion.register() class ConsideracoesFinais(models.Model): # ConsideracoesFinaisSessaoPlenaria sessao_plenaria = models.OneToOneField(SessaoPlenaria, @@ -496,6 +507,7 @@ class AbstractOrador(models.Model): # Oradores return result + @reversion.register() class Orador(AbstractOrador): # Oradores @@ -979,4 +991,4 @@ class RegistroLeitura(models.Model): raise ValidationError( 'RegistroLeitura deve ter exatamente um dos campos ' 'ordem ou expediente preenchido. Ambos estão preenchidos: ' - '{}, {}'. format(self.ordem, self.expediente)) \ No newline at end of file + '{}, {}'. format(self.ordem, self.expediente))