diff --git a/sapl/parlamentares/migrations/0046_mesadiretora_legislatura.py b/sapl/parlamentares/migrations/0046_mesadiretora_legislatura.py new file mode 100644 index 000000000..052527523 --- /dev/null +++ b/sapl/parlamentares/migrations/0046_mesadiretora_legislatura.py @@ -0,0 +1,37 @@ +# Generated by Django 2.2.28 on 2026-04-13 01:48 + +from django.db import migrations, models +import django.db.models.deletion +from datetime import date + +def add_legislatura_to_mesa_diretora(apps, schema_editor): + MesaDiretora = apps.get_model('parlamentares', 'MesaDiretora') + SessaoLegislativa = apps.get_model('parlamentares', 'SessaoLegislativa') + + for mesa in MesaDiretora.objects.all(): + mesa.legislatura = mesa.sessao_legislativa.legislatura + data_inicio = mesa.sessao_legislativa.data_inicio + data_fim = mesa.sessao_legislativa.data_fim + if data_inicio.year == data_fim.year: + mesa.data_inicio = date(data_inicio.year, 1, 1) + mesa.data_fim = date(data_fim.year, 12, 31) + else: + mesa.data_inicio = data_inicio + mesa.data_fim = data_fim + mesa.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0045_auto_20251201_1531'), + ] + + operations = [ + migrations.AddField( + model_name='mesadiretora', + name='legislatura', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='parlamentares.Legislatura', verbose_name='Legislatura'), + ), + migrations.RunPython(add_legislatura_to_mesa_diretora), + ] diff --git a/sapl/parlamentares/migrations/0047_auto_20260412_2256.py b/sapl/parlamentares/migrations/0047_auto_20260412_2256.py new file mode 100644 index 000000000..66eae56c1 --- /dev/null +++ b/sapl/parlamentares/migrations/0047_auto_20260412_2256.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.28 on 2026-04-13 01:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0046_mesadiretora_legislatura'), + ] + + operations = [ + migrations.AlterField( + model_name='mesadiretora', + name='legislatura', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='parlamentares.Legislatura', verbose_name='Legislatura'), + ), + migrations.RemoveField( + model_name='mesadiretora', + name='sessao_legislativa', + ), + ] diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index eecc2f314..62c88e111 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -493,27 +493,30 @@ class CargoMesa(models.Model): class MesaDiretora(models.Model): data_inicio = models.DateField(verbose_name=_('Data Início'), null=True) data_fim = models.DateField(verbose_name=_('Data Fim'), null=True) - sessao_legislativa = models.ForeignKey(SessaoLegislativa, - on_delete=models.PROTECT) + legislatura = models.ForeignKey(Legislatura, + on_delete=models.PROTECT, + verbose_name=_('Legislatura')) descricao = models.TextField(verbose_name=_('Descrição'), blank=True) class Meta: verbose_name = _('Mesa Diretora') verbose_name_plural = _('Mesas Diretoras') - ordering = ('-data_inicio', '-sessao_legislativa') + ordering = ('-data_inicio', '-legislatura') def __str__(self): - return _('Mesa da %(sessao)s sessao da %(legislatura)s Legislatura') % { - 'sessao': self.sessao_legislativa, 'legislatura': self.sessao_legislativa.legislatura + return _('%(legislatura)s - %(data_inicio)s a %(data_fim)s') % { + 'legislatura': self.legislatura, + 'data_inicio': self.data_inicio, + 'data_fim': self.data_fim } - class ComposicaoMesa(models.Model): # TODO M2M ???? Ternary????? parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT) cargo = models.ForeignKey(CargoMesa, on_delete=models.PROTECT) mesa_diretora = models.ForeignKey( - MesaDiretora, on_delete=models.PROTECT, null=True) + MesaDiretora, on_delete=models.PROTECT, null=True, + related_name='composicaomesa_set') class Meta: verbose_name = _('Ocupação de cargo na Mesa') diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index d67a1f6b1..08442ee24 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import include, url -from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, +from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, ComposicaoMesaCrud, MesaDiretoraCrud, coligacao_legislatura, ComposicaoColigacaoCrud, DependenteCrud, FiliacaoCrud, FrenteCrud, FrenteList, @@ -104,6 +104,12 @@ urlpatterns = [ url(r'^sistema/mesa-diretora/cargo-mesa/', include(CargoMesaCrud.get_urls())), + url(r'^mesadiretora/', include( + MesaDiretoraCrud.get_urls() + ComposicaoMesaCrud.get_urls() + )), +] + +urlpatterns_mesa_old = [ url(r'^mesa-diretora/$', MesaDiretoraView.as_view(), name='mesa_diretora'), diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index a46ce2b84..9bc605eb3 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -1007,20 +1007,58 @@ def parlamentares_filiados(request, pk): return render(request, template_name, {'partido': partido, 'parlamentares': parlamentares_filiados}) +class MesaDiretoraCrud(Crud): + model = MesaDiretora + help_topic = 'mesa_diretora' + public = [RP_DETAIL, RP_LIST] + + class BaseMixin(Crud.BaseMixin): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + if 'subnav_template_name' not in context: + context['subnav_template_name'] = 'parlamentares/subnav_mesa.yaml' + return context + + class ListView(Crud.ListView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + class CreateView(Crud.CreateView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + +class ComposicaoMesaCrud(MasterDetailCrud): + model = ComposicaoMesa + parent_field = 'mesa_diretora' + help_topic = 'mesa_diretora' + public = [RP_LIST, RP_DETAIL] + + class BaseMixin(MasterDetailCrud.BaseMixin): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = 'parlamentares/subnav_mesa.yaml' + return context + + class MesaDiretoraView(FormView): - template_name = 'parlamentares/composicaomesa_form.html' - success_url = reverse_lazy('sapl.parlamentares:mesa_diretora') + template_name = 'parlamentares/composicaomesa_form_old.html' + success_url = ''#reverse_lazy('sapl.parlamentares:mesa_diretora') logger = logging.getLogger(__name__) def get_template_names(self): if self.request.user.has_perm('parlamentares.change_composicaomesa'): if 'iframe' not in self.request.GET: if not self.request.session.get('iframe'): - return 'parlamentares/composicaomesa_form.html' + return 'parlamentares/composicaomesa_form_old.html' elif self.request.GET['iframe'] == '0': - return 'parlamentares/composicaomesa_form.html' + return 'parlamentares/composicaomesa_form_old.html' - return 'parlamentares/public_composicaomesa_form.html' + return 'parlamentares/public_composicaomesa_form_old.html' # Essa função avisa quando se pode compor uma Mesa Legislativa def validation(self, request): diff --git a/sapl/templates/index.html b/sapl/templates/index.html index 3cb59bbc6..57b73cbcd 100644 --- a/sapl/templates/index.html +++ b/sapl/templates/index.html @@ -26,7 +26,7 @@ a dois anos.

- +
diff --git a/sapl/templates/navbar.yaml b/sapl/templates/navbar.yaml index e4dc39c10..1a5cb415b 100644 --- a/sapl/templates/navbar.yaml +++ b/sapl/templates/navbar.yaml @@ -6,7 +6,7 @@ - title: {% trans 'Institucional' %} children: - title: {% trans 'Mesa Diretora' %} - url: sapl.parlamentares:mesa_diretora + url: sapl.parlamentares:mesadiretora_list - title: {% trans 'Bancadas Parlamentares' %} url: sapl.sessao:bancada_list - title: {% trans 'Blocos Parlamentares' %} diff --git a/sapl/templates/parlamentares/composicaomesa_form.html b/sapl/templates/parlamentares/composicaomesa_form_old.html similarity index 100% rename from sapl/templates/parlamentares/composicaomesa_form.html rename to sapl/templates/parlamentares/composicaomesa_form_old.html diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index 9d2037477..3cb32ac9b 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -166,3 +166,18 @@ BlocoMembroList: - id - cargo:4 parlamentar - data_entrada data_saida + +MesaDiretora: + {% trans 'Período e Legislatura' %}: + - data_inicio data_fim legislatura:6 + - descricao + +MesaDiretoraDetail: + {% trans 'Período e Legislatura' %}: + - data_inicio data_fim legislatura:6 + - descricao + - composicaomesa_set + +ComposicaoMesa: + {% trans 'Composição da Mesa' %}: + - cargo:4 parlamentar \ No newline at end of file diff --git a/sapl/templates/parlamentares/public_composicaomesa_form.html b/sapl/templates/parlamentares/public_composicaomesa_form_old.html similarity index 100% rename from sapl/templates/parlamentares/public_composicaomesa_form.html rename to sapl/templates/parlamentares/public_composicaomesa_form_old.html diff --git a/sapl/templates/parlamentares/subnav_mesa.yaml b/sapl/templates/parlamentares/subnav_mesa.yaml new file mode 100644 index 000000000..32779de54 --- /dev/null +++ b/sapl/templates/parlamentares/subnav_mesa.yaml @@ -0,0 +1,5 @@ +{% load i18n common_tags %} +- title: {% trans 'Mesa Diretora' %} + url: sapl.parlamentares:mesadiretora_list +- title: {% trans 'Composição da Mesa' %} + url: sapl.parlamentares:composicaomesa_list \ No newline at end of file