From a9681848574bed407d49c835bd945d4f1d271d79 Mon Sep 17 00:00:00 2001 From: LeandroRoberto Date: Mon, 24 Oct 2016 16:19:36 -0200 Subject: [PATCH 1/8] Corrige test_create_tramitacao --- sapl/protocoloadm/tests/test_protocoloadm.py | 21 +++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/sapl/protocoloadm/tests/test_protocoloadm.py b/sapl/protocoloadm/tests/test_protocoloadm.py index e249a3312..ea012b47f 100644 --- a/sapl/protocoloadm/tests/test_protocoloadm.py +++ b/sapl/protocoloadm/tests/test_protocoloadm.py @@ -1,9 +1,10 @@ import datetime -import pytest from django.core.urlresolvers import reverse +from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ from model_mommy import mommy +import pytest from sapl.materia.models import UnidadeTramitacao from sapl.protocoloadm.forms import AnularProcoloAdmForm @@ -147,13 +148,14 @@ def test_create_tramitacao(admin_client): 'sapl.protocoloadm:tramitacaoadministrativo_create', kwargs={'pk': documento_adm.pk}), {'unidade_tramitacao_local': unidade_tramitacao_destino_2.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_local_1.pk, 'documento': documento_adm.pk, 'status': status.pk, 'data_tramitacao': datetime.date(2016, 8, 21)}, follow=True) - msg = _('A origem da nova tramitação deve ser igual ao ' - 'destino da última adicionada!') + msg = force_text(_('A origem da nova tramitação deve ser igual ao ' + 'destino da última adicionada!')) # Verifica se a origem da nova tramitacao é igual ao destino da última assert msg in response.context_data[ @@ -164,6 +166,7 @@ def test_create_tramitacao(admin_client): 'sapl.protocoloadm:tramitacaoadministrativo_create', kwargs={'pk': documento_adm.pk}), {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'documento': documento_adm.pk, 'status': status.pk, 'data_tramitacao': datetime.date(2016, 8, 20)}, @@ -181,14 +184,15 @@ def test_create_tramitacao(admin_client): 'sapl.protocoloadm:tramitacaoadministrativo_create', kwargs={'pk': documento_adm.pk}), {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'documento': documento_adm.pk, 'status': status.pk, 'data_tramitacao': datetime.date.today() + datetime.timedelta( days=1)}, follow=True) - msg = _('A data de tramitação deve ser ' + - 'menor ou igual a data de hoje!') + msg = force_text(_('A data de tramitação deve ser ' + + 'menor ou igual a data de hoje!')) # Verifica se a data da tramitação é menor do que a data de hoje assert msg in response.context_data[ @@ -199,14 +203,15 @@ def test_create_tramitacao(admin_client): 'sapl.protocoloadm:tramitacaoadministrativo_create', kwargs={'pk': documento_adm.pk}), {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'documento': documento_adm.pk, 'status': status.pk, 'data_tramitacao': datetime.date(2016, 8, 21), 'data_encaminhamento': datetime.date(2016, 8, 20)}, follow=True) - msg = _('A data de encaminhamento deve ser ' + - 'maior que a data de tramitação!') + msg = force_text(_('A data de encaminhamento deve ser ' + + 'maior que a data de tramitação!')) # Verifica se a data da encaminhamento é menor do que a data de tramitacao assert msg in response.context_data[ @@ -217,6 +222,7 @@ def test_create_tramitacao(admin_client): 'sapl.protocoloadm:tramitacaoadministrativo_create', kwargs={'pk': documento_adm.pk}), {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'documento': documento_adm.pk, 'status': status.pk, 'data_tramitacao': datetime.date(2016, 8, 21), @@ -235,6 +241,7 @@ def test_create_tramitacao(admin_client): 'sapl.protocoloadm:tramitacaoadministrativo_create', kwargs={'pk': documento_adm.pk}), {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'documento': documento_adm.pk, 'status': status.pk, 'data_tramitacao': datetime.date(2016, 8, 21)}, From d08f15f9e3192ab698213cf672431477c90a2cfd Mon Sep 17 00:00:00 2001 From: LeandroRoberto Date: Tue, 25 Oct 2016 09:05:37 -0200 Subject: [PATCH 2/8] =?UTF-8?q?Add=20o=20model=20Orgao=20como=20um=20poss?= =?UTF-8?q?=C3=ADvel=20tipo=20de=20Autor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/models.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sapl/materia/models.py b/sapl/materia/models.py index 910228689..e064b6f02 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -417,6 +417,13 @@ class Orgao(models.Model): telefone = models.CharField( max_length=50, blank=True, verbose_name=_('Telefone')) + autor = SaplGenericRelation(Autor, + related_query_name='orgao_set', + fields_search=( + ('nome', '__icontains'), + ('sigla', '__icontains') + )) + class Meta: verbose_name = _('Órgão') verbose_name_plural = _('Órgãos') From 98807dbf3fc84c1a9bd39810e950092e9ecf05cb Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 25 Oct 2016 11:39:02 -0200 Subject: [PATCH 3/8] Conserta label errada --- .../sessao/adicionar_varias_materias_expediente.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sapl/templates/sessao/adicionar_varias_materias_expediente.html b/sapl/templates/sessao/adicionar_varias_materias_expediente.html index eb224c8d6..8a56acdc7 100644 --- a/sapl/templates/sessao/adicionar_varias_materias_expediente.html +++ b/sapl/templates/sessao/adicionar_varias_materias_expediente.html @@ -69,11 +69,11 @@ Ementa: {{ m.ementa|safe }}

- +
- +
- + From beb4fa70b66597004125da09305edee6214aba9b Mon Sep 17 00:00:00 2001 From: LeandroRoberto Date: Tue, 25 Oct 2016 16:32:15 -0200 Subject: [PATCH 4/8] Fix #761 --- sapl/materia/forms.py | 36 +++++++++---------- .../migrations/0067_auto_20161025_1630.py | 24 +++++++++++++ sapl/materia/models.py | 8 ++--- sapl/materia/views.py | 3 +- sapl/templates/materia/layouts.yaml | 2 +- .../materia/tipoproposicao_form.html | 4 +-- 6 files changed, 51 insertions(+), 26 deletions(-) create mode 100644 sapl/materia/migrations/0067_auto_20161025_1630.py diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index e3a31107a..ebb3ab215 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -778,9 +778,9 @@ class TramitacaoEmLoteFilterSet(django_filters.FilterSet): class TipoProposicaoForm(ModelForm): - conteudo = forms.ModelChoiceField( + content_type = forms.ModelChoiceField( queryset=ContentType.objects.all(), - label=TipoProposicao._meta.get_field('conteudo').verbose_name, + label=TipoProposicao._meta.get_field('content_type').verbose_name, required=True) tipo_conteudo_related_radio = ChoiceWithoutValidationField( @@ -795,7 +795,7 @@ class TipoProposicaoForm(ModelForm): class Meta: model = TipoProposicao fields = ['descricao', - 'conteudo', + 'content_type', 'tipo_conteudo_related_radio', 'tipo_conteudo_related'] @@ -805,7 +805,7 @@ class TipoProposicaoForm(ModelForm): tipo_select = Fieldset(TipoProposicao._meta.verbose_name, to_column(('descricao', 5)), - to_column(('conteudo', 7)), + to_column(('content_type', 7)), to_column(('tipo_conteudo_related_radio', 12))) self.helper = FormHelper() @@ -816,9 +816,9 @@ class TipoProposicaoForm(ModelForm): content_types = ContentType.objects.get_for_models( *models_with_gr_for_model(TipoProposicao)) - self.fields['conteudo'].choices = [ + self.fields['content_type'].choices = [ (ct.pk, ct) for k, ct in content_types.items()] - self.fields['conteudo'].choices.sort(key=lambda x: str(x[1])) + self.fields['content_type'].choices.sort(key=lambda x: str(x[1])) if self.instance.pk: self.fields[ @@ -827,17 +827,17 @@ class TipoProposicaoForm(ModelForm): def clean(self): cd = self.cleaned_data - conteudo = cd['conteudo'] + content_type = cd['content_type'] if 'tipo_conteudo_related' not in cd or not cd['tipo_conteudo_related']: raise ValidationError( _('Seleção de Tipo não definida')) - if not conteudo.model_class().objects.filter( + if not content_type.model_class().objects.filter( pk=cd['tipo_conteudo_related']).exists(): raise ValidationError( _('O Registro definido (%s) não está na base de %s.' - ) % (cd['tipo_conteudo_related'], cd['q'], conteudo)) + ) % (cd['tipo_conteudo_related'], cd['q'], content_type)) return self.cleaned_data @@ -846,10 +846,10 @@ class TipoProposicaoForm(ModelForm): tipo_proposicao = super(TipoProposicaoForm, self).save(commit) - assert tipo_proposicao.conteudo + assert tipo_proposicao.content_type tipo_proposicao.tipo_conteudo_related = \ - tipo_proposicao.conteudo.model_class( + tipo_proposicao.content_type.model_class( ).objects.get(pk=self.cleaned_data['tipo_conteudo_related']) tipo_proposicao.save() @@ -1090,7 +1090,7 @@ class ConfirmarProposicaoForm(ProposicaoForm): 'sem anexação se for possível para esta ' 'Proposição. Não sendo, a rotina de incorporação ' 'não permitirá estes campos serem vazios.' - ) % self.instance.tipo.conteudo, + ) % self.instance.tipo.content_type, css_class="alert-info", dismiss=False), 5)), to_column( @@ -1141,14 +1141,14 @@ class ConfirmarProposicaoForm(ProposicaoForm): if 'incorporar' in self.data: cd = ProposicaoForm.clean(self) - if self.instance.tipo.conteudo.model_class() ==\ + if self.instance.tipo.content_type.model_class() ==\ TipoMateriaLegislativa: if 'regime_tramitacao' not in cd or\ not cd['regime_tramitacao']: raise ValidationError( _('Regimente de Tramitação deve ser informado.')) - elif self.instance.tipo.conteudo.model_class() == TipoDocumento\ + elif self.instance.tipo.content_type.model_class() == TipoDocumento\ and not cd['materia_de_vinculo']: raise ValidationError( @@ -1216,7 +1216,7 @@ class ConfirmarProposicaoForm(ProposicaoForm): proposicao = self.instance conteudo_gerado = None - if self.instance.tipo.conteudo.model_class() == TipoMateriaLegislativa: + if self.instance.tipo.content_type.model_class() == TipoMateriaLegislativa: numero__max = MateriaLegislativa.objects.filter( tipo=proposicao.tipo.tipo_conteudo_related, ano=datetime.now().year).aggregate(Max('numero')) @@ -1269,7 +1269,7 @@ class ConfirmarProposicaoForm(ProposicaoForm): 'sapl.materia:materialegislativa_detail', kwargs={'pk': materia.pk}) - elif self.instance.tipo.conteudo.model_class() == TipoDocumento: + elif self.instance.tipo.content_type.model_class() == TipoDocumento: # dados básicos doc = DocumentoAcessorio() @@ -1349,9 +1349,9 @@ class ConfirmarProposicaoForm(ProposicaoForm): protocolo.numero_paginas = cd['numero_de_paginas'] protocolo.anulado = False - if self.instance.tipo.conteudo.model_class() == TipoMateriaLegislativa: + if self.instance.tipo.content_type.model_class() == TipoMateriaLegislativa: protocolo.tipo_materia = proposicao.tipo.tipo_conteudo_related - elif self.instance.tipo.conteudo.model_class() == TipoDocumento: + elif self.instance.tipo.content_type.model_class() == TipoDocumento: protocolo.tipo_documento = proposicao.tipo.tipo_conteudo_related protocolo.save() diff --git a/sapl/materia/migrations/0067_auto_20161025_1630.py b/sapl/materia/migrations/0067_auto_20161025_1630.py new file mode 100644 index 000000000..93e8eac0c --- /dev/null +++ b/sapl/materia/migrations/0067_auto_20161025_1630.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-10-25 16:30 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0066_proposicao_ano'), + ] + + operations = [ + migrations.RenameField( + model_name='tipoproposicao', + old_name='conteudo', + new_name='content_type', + ), + migrations.AlterUniqueTogether( + name='tipoproposicao', + unique_together=set([('content_type', 'object_id')]), + ), + ] diff --git a/sapl/materia/models.py b/sapl/materia/models.py index e064b6f02..32d8fb486 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -36,12 +36,12 @@ class TipoProposicao(models.Model): # FIXME - para a rotina de migração - estes campos mudaram # retire o comentário quando resolver - conteudo = models.ForeignKey(ContentType, default=None, - verbose_name=_('Definição de Tipo')) + content_type = models.ForeignKey(ContentType, default=None, + verbose_name=_('Definição de Tipo')) object_id = models.PositiveIntegerField( blank=True, null=True, default=None) tipo_conteudo_related = SaplGenericForeignKey( - 'conteudo', 'object_id', verbose_name=_('Seleção de Tipo')) + 'content_type', 'object_id', verbose_name=_('Seleção de Tipo')) """materia_ou_documento = models.CharField( max_length=1, verbose_name=_('Gera'), choices=MAT_OU_DOC_CHOICES) @@ -60,7 +60,7 @@ class TipoProposicao(models.Model): class Meta: verbose_name = _('Tipo de Proposição') verbose_name_plural = _('Tipos de Proposições') - unique_together = (('conteudo', 'object_id'), ) + unique_together = (('content_type', 'object_id'), ) def __str__(self): return self.descricao diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 5773e8861..3fc9c8048 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -138,7 +138,8 @@ class TipoProposicaoCrud(CrudAux): help_text = 'tipo_proposicao' class BaseMixin(CrudAux.BaseMixin): - list_field_names = ["descricao", "conteudo", 'tipo_conteudo_related'] + list_field_names = [ + "descricao", "content_type", 'tipo_conteudo_related'] class CreateView(CrudAux.CreateView): form_class = TipoProposicaoForm diff --git a/sapl/templates/materia/layouts.yaml b/sapl/templates/materia/layouts.yaml index a5070ef86..d1c5f7911 100644 --- a/sapl/templates/materia/layouts.yaml +++ b/sapl/templates/materia/layouts.yaml @@ -74,7 +74,7 @@ Relatoria: TipoProposicao: {% trans 'Tipo Proposição' %}: - - descricao conteudo + - descricao content_type - tipo_conteudo_related Proposicao: diff --git a/sapl/templates/materia/tipoproposicao_form.html b/sapl/templates/materia/tipoproposicao_form.html index 5168cb29a..a19814e4e 100644 --- a/sapl/templates/materia/tipoproposicao_form.html +++ b/sapl/templates/materia/tipoproposicao_form.html @@ -8,7 +8,7 @@ aaa $(document).ready(function(){ var initial_select = $("input[name=tipo_conteudo_related]").val(); $("input[name=tipo_conteudo_related]").remove(); - $('#id_conteudo').change(function(event) { + $('#id_content_type').change(function(event) { var pk = this[event.target.selectedIndex].value; var url = '{% url 'sapl.api:model_list' 0 ''%}' url = url.replace('0', pk) + '?pagination=False' @@ -27,7 +27,7 @@ $(document).ready(function(){ }); }); - $('#id_conteudo').trigger('change'); + $('#id_content_type').trigger('change'); $("#div_id_tipo_conteudo_related_radio .controls").addClass('controls-radio-checkbox'); }); From 3f60bfe9afa3950237321f24d311c97a86ca5ebc Mon Sep 17 00:00:00 2001 From: LeandroRoberto Date: Tue, 25 Oct 2016 19:18:50 -0200 Subject: [PATCH 5/8] Refatora Menu geral --- sapl/base/templatetags/menus.py | 49 +++++++++++++------- sapl/templates/base.html | 79 +-------------------------------- sapl/templates/menus/nav.html | 27 +++++++++++ sapl/templates/navbar.yaml | 66 +++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 92 deletions(-) create mode 100644 sapl/templates/menus/nav.html create mode 100644 sapl/templates/navbar.yaml diff --git a/sapl/base/templatetags/menus.py b/sapl/base/templatetags/menus.py index a839ed680..1ce1d4ea5 100644 --- a/sapl/base/templatetags/menus.py +++ b/sapl/base/templatetags/menus.py @@ -11,6 +11,15 @@ register = template.Library() @register.inclusion_tag('menus/subnav.html', takes_context=True) def subnav(context, path=None): + return nav_run(context, path) + + +@register.inclusion_tag('menus/nav.html', takes_context=True) +def navbar(context, path=None): + return nav_run(context, path) + + +def nav_run(context, path=None): """Renderiza sub navegação para objetos no padrão Mestre Detalhe Existem três possíveis fontes de busca do yaml @@ -32,7 +41,7 @@ def subnav(context, path=None): if obj: root_pk = obj.pk - if root_pk or 'subnav_template_name' in context: + if root_pk or 'subnav_template_name' in context or path: request = context['request'] """ @@ -106,14 +115,20 @@ def resolve_urls_inplace(menu, pk, rm, context): menu['url'] = reverse('%s' % menu['url'], kwargs={'pk': pk}) except: - menu['url'] = reverse('%s' % menu['url']) + try: + menu['url'] = reverse('%s' % menu['url']) + except: + pass else: try: menu['url'] = reverse('%s:%s' % ( rm.app_name, menu['url']), kwargs={'pk': pk}) except: - menu['url'] = reverse('%s:%s' % ( - rm.app_name, menu['url'])) + try: + menu['url'] = reverse('%s:%s' % ( + rm.app_name, menu['url'])) + except: + pass menu['active'] = 'active'\ if context['request'].path == menu['url'] else '' @@ -125,17 +140,21 @@ def resolve_urls_inplace(menu, pk, rm, context): as funcionalidades diretas do MasterDetailCrud, como: - visualização de detalhes, adição, edição, remoção. """ - - view = context['view'] - if hasattr(view, '__class__') and\ - hasattr(view.__class__, 'crud'): - urls = view.__class__.crud.get_urls() - for u in urls: - if (u.name == url_name or - 'urls_extras' in menu and - u.name in menu['urls_extras']): - menu['active'] = 'active' - break + if 'view' in context: + view = context['view'] + if hasattr(view, '__class__') and\ + hasattr(view.__class__, 'crud'): + urls = view.__class__.crud.get_urls() + for u in urls: + if (u.name == url_name or + 'urls_extras' in menu and + u.name in menu['urls_extras']): + menu['active'] = 'active' + break + elif 'check_permission' in menu and not context[ + 'request'].user.has_perm(menu['check_permission']): + menu['active'] = '' + del menu['children'] if 'children' in menu: menu['active'] = resolve_urls_inplace( diff --git a/sapl/templates/base.html b/sapl/templates/base.html index 40295a7f3..d14b35e37 100644 --- a/sapl/templates/base.html +++ b/sapl/templates/base.html @@ -41,84 +41,9 @@
-
- Votos -
- {% for parlamentar in parlamentares %} -
{{parlamentar.nome_parlamentar}}
-
- -
- {% endfor %} -
-
+ {% if parlamentares|length == 0 %} + + Voltar + {% else %} +
+ Votos +
+ {% for parlamentar in parlamentares %} +
{{parlamentar.nome_parlamentar}}
+
+ +
+ {% endfor %} +
+
-
-
- Resultado da Votação - -
-
+
+
+ Resultado da Votação + +
+
-
-
-
- Observações
- -
-
+
+
+
+ Observações
+ +
+
-

- - - - +

+ + + + + {% endif %} {% endblock detail_content %} + +{% block extra_js %} + +{% endblock extra_js%} From cdcb6af8376e4255970e1b18d42c5300d113163d Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 26 Oct 2016 12:02:04 -0200 Subject: [PATCH 7/8] =?UTF-8?q?Refatora=20inputs=20na=20presen=C3=A7a=20da?= =?UTF-8?q?=20sess=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/templates/sessao/presenca.html | 53 +++++++++++++++-------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/sapl/templates/sessao/presenca.html b/sapl/templates/sessao/presenca.html index 94b27f656..bbdb934a4 100644 --- a/sapl/templates/sessao/presenca.html +++ b/sapl/templates/sessao/presenca.html @@ -10,21 +10,24 @@
{% csrf_token %} -
-
Presença
-
Parlamentar
-
- -
-
Marcar/Desmarcar Todos
-
- - {% for parlamentar, check in view.get_presencas %} -
-
-
-
- {% endfor %} +
+
+ +
+
+
+
+ {% for parlamentar, check in view.get_presencas %} +
+ +
+ {% endfor %} +

@@ -37,11 +40,11 @@
{% for parlamentar, check in view.get_presencas %} - {% if check %} -
-
-
- {% endif %} + {% if check %} +
+
+
+ {% endif %} {% endfor %} {% endif %} @@ -51,11 +54,11 @@ {% block extra_js %} {% endblock %} From 1b4fe0e6adb4bedc186bf7778d4d301b29710293 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 26 Oct 2016 12:18:56 -0200 Subject: [PATCH 8/8] =?UTF-8?q?Fix=20alerta=20de=20presen=C3=A7a=20na=20vo?= =?UTF-8?q?ta=C3=A7=C3=A3o=20nominal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/sessao/views.py | 10 ++++++++-- sapl/templates/sessao/votacao/nominal.html | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index cac20bece..9c7ca77dc 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -1299,13 +1299,16 @@ class VotacaoNominalView(SessaoPermissionMixin): def get(self, request, *args, **kwargs): ordem_id = kwargs['mid'] ordem = OrdemDia.objects.get(id=ordem_id) + total = PresencaOrdemDia.objects.filter( + sessao_plenaria_id=ordem.sessao_plenaria_id).count() materia = {'materia': ordem.materia, 'ementa': sub( ' ', ' ', strip_tags(ordem.observacao))} context = {'materia': materia, 'object': self.get_object(), 'parlamentares': self.get_parlamentares(), - 'tipos': self.get_tipos_votacao()} + 'tipos': self.get_tipos_votacao(), + 'total': total} return self.render_to_response(context) @@ -1501,13 +1504,16 @@ class VotacaoNominalExpedienteView(SessaoPermissionMixin): def get(self, request, *args, **kwargs): expediente_id = kwargs['mid'] expediente = ExpedienteMateria.objects.get(id=expediente_id) + total = SessaoPlenariaPresenca.objects.filter( + sessao_plenaria_id=expediente.sessao_plenaria_id).count() materia = {'materia': expediente.materia, 'ementa': sub( ' ', ' ', strip_tags(expediente.observacao))} context = {'materia': materia, 'object': self.get_object(), 'parlamentares': self.get_parlamentares(), - 'tipos': self.get_tipos_votacao()} + 'tipos': self.get_tipos_votacao(), + 'total': total} return self.render_to_response(context) diff --git a/sapl/templates/sessao/votacao/nominal.html b/sapl/templates/sessao/votacao/nominal.html index afe0bbf38..9bc54a73a 100644 --- a/sapl/templates/sessao/votacao/nominal.html +++ b/sapl/templates/sessao/votacao/nominal.html @@ -13,7 +13,7 @@ Ementa: {{materia.ementa|safe}}
- {% if parlamentares|length == 0 %} + {% if total == 0 %}