From 54c6b384abaa3314143206da204d7828d0f5fd72 Mon Sep 17 00:00:00 2001 From: Ulysses Lara Date: Fri, 3 May 2019 12:34:54 -0300 Subject: [PATCH] 1798 mover model bloco para app parlamentares (#2760) * Migrando model de bloco de sessao para parlamentar * Migrando views e forms de bancada para app de parlamentares --- sapl/legacy/test_renames.py | 4 +- sapl/parlamentares/forms.py | 37 ++++++++++++++++++- sapl/parlamentares/migrations/0026_bloco.py | 37 +++++++++++++++++++ .../migrations/0027_auto_20190430_0839.py | 19 ++++++++++ sapl/parlamentares/models.py | 34 +++++++++++++++++ sapl/parlamentares/urls.py | 8 ++-- sapl/parlamentares/views.py | 18 ++++++++- sapl/rules/map_rules.py | 3 +- sapl/sessao/forms.py | 37 +------------------ .../migrations/0039_auto_20190430_0825.py | 22 +++++++++++ sapl/sessao/models.py | 34 ----------------- sapl/sessao/urls.py | 6 +-- sapl/sessao/views.py | 14 +------ sapl/templates/menu_tabelas_auxiliares.yaml | 2 +- sapl/templates/parlamentares/layouts.yaml | 7 ++++ sapl/templates/sessao/layouts.yaml | 7 ---- 16 files changed, 186 insertions(+), 103 deletions(-) create mode 100644 sapl/parlamentares/migrations/0026_bloco.py create mode 100644 sapl/parlamentares/migrations/0027_auto_20190430_0839.py create mode 100644 sapl/sessao/migrations/0039_auto_20190430_0825.py diff --git a/sapl/legacy/test_renames.py b/sapl/legacy/test_renames.py index b92c5d0ac..9a5c4ebaf 100644 --- a/sapl/legacy/test_renames.py +++ b/sapl/legacy/test_renames.py @@ -13,9 +13,9 @@ from sapl.materia.models import (AcompanhamentoMateria, DocumentoAcessorio, from sapl.norma.models import (AnexoNormaJuridica, NormaJuridica, NormaRelacionada, TipoVinculoNormaJuridica) from sapl.parlamentares.models import (Frente, Mandato, Parlamentar, Partido, - TipoAfastamento, Votante) + TipoAfastamento, Votante, Bloco) from sapl.protocoloadm.models import DocumentoAdministrativo -from sapl.sessao.models import (Bancada, Bloco, CargoBancada, +from sapl.sessao.models import (Bancada, CargoBancada, ExpedienteMateria, Orador, OradorExpediente, OrdemDia, RegistroVotacao, ResumoOrdenacao, SessaoPlenaria, TipoResultadoVotacao, diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index f52cea871..90d6e150c 100755 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -23,7 +23,7 @@ from sapl.rules import SAPL_GROUP_VOTANTE import django_filters from .models import (ComposicaoColigacao, Filiacao, Frente, Legislatura, - Mandato, Parlamentar, Votante) + Mandato, Parlamentar, Votante, Bloco) class ImageThumbnailFileInput(ClearableFileInput): @@ -568,3 +568,38 @@ class VincularParlamentarForm(forms.Form): raise ValidationError(_('Data da Expedição do Diploma deve ser anterior a data de início da Legislatura.')) return cleaned_data + + +class BlocoForm(ModelForm): + + class Meta: + model = Bloco + fields = ['nome', 'partidos', 'data_criacao', + 'data_extincao', 'descricao'] + + def clean(self): + super(BlocoForm, self).clean() + + if not self.is_valid(): + return self.cleaned_data + + if self.cleaned_data['data_extincao']: + if (self.cleaned_data['data_extincao'] < + self.cleaned_data['data_criacao']): + msg = _('Data de extinção não pode ser menor que a de criação') + raise ValidationError(msg) + return self.cleaned_data + + @transaction.atomic + def save(self, commit=True): + bloco = super(BlocoForm, self).save(commit) + content_type = ContentType.objects.get_for_model(Bloco) + object_id = bloco.pk + tipo = TipoAutor.objects.get(content_type=content_type) + Autor.objects.create( + content_type=content_type, + object_id=object_id, + tipo=tipo, + nome=bloco.nome + ) + return bloco \ No newline at end of file diff --git a/sapl/parlamentares/migrations/0026_bloco.py b/sapl/parlamentares/migrations/0026_bloco.py new file mode 100644 index 000000000..2ba9f2c07 --- /dev/null +++ b/sapl/parlamentares/migrations/0026_bloco.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-30 11:28 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0025_auto_20180924_1724'), + ('sessao', '0039_auto_20190430_0825') + ] + + state_operations = [ + migrations.CreateModel( + name='Bloco', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nome', models.CharField(max_length=80, verbose_name='Nome do Bloco')), + ('data_criacao', models.DateField(null=True, verbose_name='Data Criação')), + ('data_extincao', models.DateField(blank=True, null=True, verbose_name='Data Dissolução')), + ('descricao', models.TextField(blank=True, verbose_name='Descrição')), + ('partidos', models.ManyToManyField(blank=True, to='parlamentares.Partido', verbose_name='Partidos')), + ], + options={ + 'db_table': 'parlamentares_bloco', + 'verbose_name': 'Bloco Parlamentar', + 'verbose_name_plural': 'Blocos Parlamentares', + }, + bases=(models.Model,), + ), + ] + + operations = [ + migrations.SeparateDatabaseAndState(state_operations=state_operations) + ] diff --git a/sapl/parlamentares/migrations/0027_auto_20190430_0839.py b/sapl/parlamentares/migrations/0027_auto_20190430_0839.py new file mode 100644 index 000000000..454101416 --- /dev/null +++ b/sapl/parlamentares/migrations/0027_auto_20190430_0839.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-30 11:39 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0026_bloco'), + ] + + operations = [ + migrations.AlterModelTable( + name='bloco', + table=None, + ), + ] diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index d88f2fd87..d50600eba 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -568,3 +568,37 @@ class Votante(models.Model): def __str__(self): return self.user.username + + +@reversion.register() +class Bloco(models.Model): + ''' + * blocos podem existir por mais de uma legislatura + ''' + nome = models.CharField( + max_length=80, verbose_name=_('Nome do Bloco')) + partidos = models.ManyToManyField( + Partido, blank=True, verbose_name=_('Partidos')) + data_criacao = models.DateField( + blank=False, null=True, verbose_name=_('Data Criação')) + data_extincao = models.DateField( + blank=True, null=True, verbose_name=_('Data Dissolução')) + descricao = models.TextField(blank=True, verbose_name=_('Descrição')) + + # campo conceitual de reversão genérica para o model Autor que dá a + # o meio possível de localização de tipos de autores. + autor = SaplGenericRelation(Autor, + related_query_name='bloco_set', + fields_search=( + ('nome', '__icontains'), + ('descricao', '__icontains'), + ('partidos__sigla', '__icontains'), + ('partidos__nome', '__icontains'), + )) + + class Meta: + verbose_name = _('Bloco Parlamentar') + verbose_name_plural = _('Blocos Parlamentares') + + def __str__(self): + return self.nome diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 51fb856b4..4c1434333 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -18,7 +18,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, insere_parlamentar_composicao, parlamentares_frente_selected, remove_parlamentar_composicao, - parlamentares_filiados, + parlamentares_filiados, BlocoCrud, PesquisarParlamentarView, VincularParlamentarView) from .apps import AppConfig @@ -46,8 +46,9 @@ urlpatterns = [ url(r'^sistema/coligacao/', include(ColigacaoCrud.get_urls() + - ComposicaoColigacaoCrud.get_urls())), - + ComposicaoColigacaoCrud.get_urls())), + url(r'^sistema/bloco/', + include(BlocoCrud.get_urls())), url(r'^sistema/frente/', include(FrenteCrud.get_urls())), url(r'^sistema/frente/atualiza-lista-parlamentares', @@ -89,4 +90,5 @@ urlpatterns = [ url(r'^mesa-diretora/remove-parlamentar-composicao/$', remove_parlamentar_composicao, name='remove_parlamentar_composicao'), + ] diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index ed2ef44c1..f5777824c 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -34,11 +34,15 @@ from sapl.parlamentares.apps import AppConfig from sapl.utils import (parlamentares_ativos, show_results_filter_set) from .forms import (FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm, - ParlamentarCreateForm, ParlamentarForm, VotanteForm, ParlamentarFilterSet, VincularParlamentarForm) + ParlamentarCreateForm, ParlamentarForm, VotanteForm, + ParlamentarFilterSet, VincularParlamentarForm, + BlocoForm) + from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, Dependente, Filiacao, Frente, Legislatura, Mandato, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, - SituacaoMilitar, TipoAfastamento, TipoDependente, Votante) + SituacaoMilitar, TipoAfastamento, TipoDependente, Votante, + Bloco) CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa') @@ -1164,3 +1168,13 @@ class VincularParlamentarView(PermissionRequiredMixin, FormView): mandato.save() return HttpResponseRedirect(self.get_success_url()) + + +class BlocoCrud(CrudAux): + model = Bloco + + class CreateView(CrudAux.CreateView): + form_class = BlocoForm + + def get_success_url(self): + return reverse('sapl.parlamentares:bloco_list') \ No newline at end of file diff --git a/sapl/rules/map_rules.py b/sapl/rules/map_rules.py index a82ef2c3f..75fc76f33 100644 --- a/sapl/rules/map_rules.py +++ b/sapl/rules/map_rules.py @@ -278,6 +278,8 @@ rules_group_geral = { (parlamentares.ComposicaoMesa, __base__, __perms_publicas__), (parlamentares.Frente, __base__, __perms_publicas__), (parlamentares.Votante, __base__, __perms_publicas__), + (parlamentares.Bloco, __base__, __perms_publicas__), + (sessao.CargoBancada, __base__, __perms_publicas__), (sessao.Bancada, __base__, __perms_publicas__), @@ -286,7 +288,6 @@ rules_group_geral = { (sessao.TipoExpediente, __base__, __perms_publicas__), (sessao.TipoJustificativa, __base__, __perms_publicas__), (sessao.JustificativaAusencia, __base__, __perms_publicas__), - (sessao.Bloco, __base__, __perms_publicas__), (sessao.ResumoOrdenacao, __base__, __perms_publicas__), (sessao.TipoRetiradaPauta, __base__, __perms_publicas__), diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 451f2b990..1e14b0f45 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -23,7 +23,7 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, autor_modal, timezone, choice_anos_com_sessaoplenaria, FileFieldCheckMixin) -from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia, +from .models import (Bancada, ExpedienteMateria, JustificativaAusencia, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao, OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia, ORDENACAO_RESUMO, @@ -316,41 +316,6 @@ class BancadaForm(ModelForm): return bancada -class BlocoForm(ModelForm): - - class Meta: - model = Bloco - fields = ['nome', 'partidos', 'data_criacao', - 'data_extincao', 'descricao'] - - def clean(self): - super(BlocoForm, self).clean() - - if not self.is_valid(): - return self.cleaned_data - - if self.cleaned_data['data_extincao']: - if (self.cleaned_data['data_extincao'] < - self.cleaned_data['data_criacao']): - msg = _('Data de extinção não pode ser menor que a de criação') - raise ValidationError(msg) - return self.cleaned_data - - @transaction.atomic - def save(self, commit=True): - bloco = super(BlocoForm, self).save(commit) - content_type = ContentType.objects.get_for_model(Bloco) - object_id = bloco.pk - tipo = TipoAutor.objects.get(content_type=content_type) - Autor.objects.create( - content_type=content_type, - object_id=object_id, - tipo=tipo, - nome=bloco.nome - ) - return bloco - - class ExpedienteMateriaForm(ModelForm): _model = ExpedienteMateria diff --git a/sapl/sessao/migrations/0039_auto_20190430_0825.py b/sapl/sessao/migrations/0039_auto_20190430_0825.py new file mode 100644 index 000000000..5a1c717f5 --- /dev/null +++ b/sapl/sessao/migrations/0039_auto_20190430_0825.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-30 11:25 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0038_merge_20190415_1800'), + ] + + database_operations = [migrations.AlterModelTable('Bloco', 'parlamentares_bloco')] + + state_operations = [migrations.DeleteModel('Bloco')] + + operations = [ + migrations.SeparateDatabaseAndState( + database_operations=database_operations, + state_operations=state_operations) + ] \ No newline at end of file diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 3d7c98186..53721499b 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -550,40 +550,6 @@ class SessaoPlenariaPresenca(models.Model): ordering = ['parlamentar__nome_parlamentar'] -@reversion.register() -class Bloco(models.Model): - ''' - * blocos podem existir por mais de uma legislatura - ''' - nome = models.CharField( - max_length=80, verbose_name=_('Nome do Bloco')) - partidos = models.ManyToManyField( - Partido, blank=True, verbose_name=_('Partidos')) - data_criacao = models.DateField( - blank=False, null=True, verbose_name=_('Data Criação')) - data_extincao = models.DateField( - blank=True, null=True, verbose_name=_('Data Dissolução')) - descricao = models.TextField(blank=True, verbose_name=_('Descrição')) - - # campo conceitual de reversão genérica para o model Autor que dá a - # o meio possível de localização de tipos de autores. - autor = SaplGenericRelation(Autor, - related_query_name='bloco_set', - fields_search=( - ('nome', '__icontains'), - ('descricao', '__icontains'), - ('partidos__sigla', '__icontains'), - ('partidos__nome', '__icontains'), - )) - - class Meta: - verbose_name = _('Bloco Parlamentar') - verbose_name_plural = _('Blocos Parlamentares') - - def __str__(self): - return self.nome - - ORDENACAO_RESUMO = [ ('id_basica', 'Identificação Básica'), ('cont_mult', 'Conteúdo Multimídia'), diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index 00add810a..d5d709967 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -2,8 +2,8 @@ from django.conf.urls import include, url from sapl.sessao.views import (AdicionarVariasMateriasExpediente, AdicionarVariasMateriasOrdemDia, BancadaCrud, - BlocoCrud, CargoBancadaCrud, - ExpedienteMateriaCrud, ExpedienteView, JustificativaAusenciaCrud, + CargoBancadaCrud, ExpedienteMateriaCrud, + ExpedienteView, JustificativaAusenciaCrud, OcorrenciaSessaoView, MateriaOrdemDiaCrud, OradorOrdemDiaCrud, MesaView, OradorCrud, OradorExpedienteCrud, PainelView, @@ -96,8 +96,6 @@ urlpatterns = [ include(TipoRetiradaPautaCrud.get_urls())), url(r'^sistema/bancada/', include(BancadaCrud.get_urls())), - url(r'^sistema/bloco/', - include(BlocoCrud.get_urls())), url(r'^sistema/cargo-bancada/', include(CargoBancadaCrud.get_urls())), url(r'^sistema/resumo-ordenacao/', diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 8961a27b4..191de0b8f 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -37,13 +37,13 @@ from sapl.sessao.apps import AppConfig from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm from sapl.utils import show_results_filter_set, remover_acentos, get_client_ip -from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm, BlocoForm, +from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm, ExpedienteForm, JustificativaAusenciaForm, OcorrenciaSessaoForm, ListMateriaForm, MesaForm, OradorExpedienteForm, OradorForm, PautaSessaoFilterSet, PresencaForm, ResumoOrdenacaoForm, SessaoPlenariaFilterSet, SessaoPlenariaForm, VotacaoEditForm, VotacaoForm, VotacaoNominalForm, RetiradaPautaForm, OradorOrdemDiaForm) -from .models import (Bancada, Bloco, CargoBancada, CargoMesa, +from .models import (Bancada, CargoBancada, CargoMesa, ExpedienteMateria, ExpedienteSessao, OcorrenciaSessao, IntegranteMesa, MateriaLegislativa, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao, @@ -679,16 +679,6 @@ class BancadaCrud(CrudAux): return reverse('sapl.sessao:bancada_list') -class BlocoCrud(CrudAux): - model = Bloco - - class CreateView(CrudAux.CreateView): - form_class = BlocoForm - - def get_success_url(self): - return reverse('sapl.sessao:bloco_list') - - def recuperar_numero_sessao(request): try: sessao = SessaoPlenaria.objects.filter( diff --git a/sapl/templates/menu_tabelas_auxiliares.yaml b/sapl/templates/menu_tabelas_auxiliares.yaml index 4f690ca00..9a9c40d8d 100644 --- a/sapl/templates/menu_tabelas_auxiliares.yaml +++ b/sapl/templates/menu_tabelas_auxiliares.yaml @@ -78,7 +78,7 @@ url: sapl.parlamentares:frente_list css_class: btn btn-link - title: {% trans 'Bloco Parlamentar' %} - url: sapl.sessao:bloco_list + url: sapl.parlamentares:bloco_list css_class: btn btn-link - title: {% trans 'Módulo Proposições' %} css_class: head_title diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index 030e32758..7c3e59908 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -127,3 +127,10 @@ Votante: {% trans 'Votante' %}: - parlamentar user - data + +Bloco: + {% trans 'Bloco' %}: + - nome + - data_criacao data_extincao + - partidos + - descricao \ No newline at end of file diff --git a/sapl/templates/sessao/layouts.yaml b/sapl/templates/sessao/layouts.yaml index 98307d74d..16e353910 100644 --- a/sapl/templates/sessao/layouts.yaml +++ b/sapl/templates/sessao/layouts.yaml @@ -84,13 +84,6 @@ CargoBancada: {% trans 'Cargo de Bancada' %}: - nome_cargo:8 cargo_unico -Bloco: - {% trans 'Bloco' %}: - - nome - - data_criacao data_extincao - - partidos - - descricao - TipoJustificativa: {% trans 'Tipo de Justificativa' %}: - descricao