Browse Source

Merge branch 'master' of github.com:interlegis/sapl into 758-refatora-painel

pull/760/head
Eduardo Calil 9 years ago
parent
commit
724376d9c5
  1. 23
      sapl/base/templatetags/menus.py
  2. 36
      sapl/materia/forms.py
  3. 24
      sapl/materia/migrations/0067_auto_20161025_1630.py
  4. 13
      sapl/materia/models.py
  5. 3
      sapl/materia/views.py
  6. 21
      sapl/protocoloadm/tests/test_protocoloadm.py
  7. 10
      sapl/sessao/views.py
  8. 77
      sapl/templates/base.html
  9. 2
      sapl/templates/materia/layouts.yaml
  10. 4
      sapl/templates/materia/tipoproposicao_form.html
  11. 27
      sapl/templates/menus/nav.html
  12. 66
      sapl/templates/navbar.yaml
  13. 6
      sapl/templates/sessao/adicionar_varias_materias_expediente.html
  14. 33
      sapl/templates/sessao/presenca.html
  15. 15
      sapl/templates/sessao/votacao/nominal.html

23
sapl/base/templatetags/menus.py

@ -11,6 +11,15 @@ register = template.Library()
@register.inclusion_tag('menus/subnav.html', takes_context=True) @register.inclusion_tag('menus/subnav.html', takes_context=True)
def subnav(context, path=None): 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 """Renderiza sub navegação para objetos no padrão Mestre Detalhe
Existem três possíveis fontes de busca do yaml Existem três possíveis fontes de busca do yaml
@ -32,7 +41,7 @@ def subnav(context, path=None):
if obj: if obj:
root_pk = obj.pk 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'] request = context['request']
""" """
@ -106,14 +115,20 @@ def resolve_urls_inplace(menu, pk, rm, context):
menu['url'] = reverse('%s' % menu['url'], menu['url'] = reverse('%s' % menu['url'],
kwargs={'pk': pk}) kwargs={'pk': pk})
except: except:
try:
menu['url'] = reverse('%s' % menu['url']) menu['url'] = reverse('%s' % menu['url'])
except:
pass
else: else:
try: try:
menu['url'] = reverse('%s:%s' % ( menu['url'] = reverse('%s:%s' % (
rm.app_name, menu['url']), kwargs={'pk': pk}) rm.app_name, menu['url']), kwargs={'pk': pk})
except: except:
try:
menu['url'] = reverse('%s:%s' % ( menu['url'] = reverse('%s:%s' % (
rm.app_name, menu['url'])) rm.app_name, menu['url']))
except:
pass
menu['active'] = 'active'\ menu['active'] = 'active'\
if context['request'].path == menu['url'] else '' if context['request'].path == menu['url'] else ''
@ -125,7 +140,7 @@ def resolve_urls_inplace(menu, pk, rm, context):
as funcionalidades diretas do MasterDetailCrud, como: as funcionalidades diretas do MasterDetailCrud, como:
- visualização de detalhes, adição, edição, remoção. - visualização de detalhes, adição, edição, remoção.
""" """
if 'view' in context:
view = context['view'] view = context['view']
if hasattr(view, '__class__') and\ if hasattr(view, '__class__') and\
hasattr(view.__class__, 'crud'): hasattr(view.__class__, 'crud'):
@ -136,6 +151,10 @@ def resolve_urls_inplace(menu, pk, rm, context):
u.name in menu['urls_extras']): u.name in menu['urls_extras']):
menu['active'] = 'active' menu['active'] = 'active'
break 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: if 'children' in menu:
menu['active'] = resolve_urls_inplace( menu['active'] = resolve_urls_inplace(

36
sapl/materia/forms.py

@ -778,9 +778,9 @@ class TramitacaoEmLoteFilterSet(django_filters.FilterSet):
class TipoProposicaoForm(ModelForm): class TipoProposicaoForm(ModelForm):
conteudo = forms.ModelChoiceField( content_type = forms.ModelChoiceField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
label=TipoProposicao._meta.get_field('conteudo').verbose_name, label=TipoProposicao._meta.get_field('content_type').verbose_name,
required=True) required=True)
tipo_conteudo_related_radio = ChoiceWithoutValidationField( tipo_conteudo_related_radio = ChoiceWithoutValidationField(
@ -795,7 +795,7 @@ class TipoProposicaoForm(ModelForm):
class Meta: class Meta:
model = TipoProposicao model = TipoProposicao
fields = ['descricao', fields = ['descricao',
'conteudo', 'content_type',
'tipo_conteudo_related_radio', 'tipo_conteudo_related_radio',
'tipo_conteudo_related'] 'tipo_conteudo_related']
@ -805,7 +805,7 @@ class TipoProposicaoForm(ModelForm):
tipo_select = Fieldset(TipoProposicao._meta.verbose_name, tipo_select = Fieldset(TipoProposicao._meta.verbose_name,
to_column(('descricao', 5)), to_column(('descricao', 5)),
to_column(('conteudo', 7)), to_column(('content_type', 7)),
to_column(('tipo_conteudo_related_radio', 12))) to_column(('tipo_conteudo_related_radio', 12)))
self.helper = FormHelper() self.helper = FormHelper()
@ -816,9 +816,9 @@ class TipoProposicaoForm(ModelForm):
content_types = ContentType.objects.get_for_models( content_types = ContentType.objects.get_for_models(
*models_with_gr_for_model(TipoProposicao)) *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()] (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: if self.instance.pk:
self.fields[ self.fields[
@ -827,17 +827,17 @@ class TipoProposicaoForm(ModelForm):
def clean(self): def clean(self):
cd = self.cleaned_data 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']: if 'tipo_conteudo_related' not in cd or not cd['tipo_conteudo_related']:
raise ValidationError( raise ValidationError(
_('Seleção de Tipo não definida')) _('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(): pk=cd['tipo_conteudo_related']).exists():
raise ValidationError( raise ValidationError(
_('O Registro definido (%s) não está na base de %s.' _('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 return self.cleaned_data
@ -846,10 +846,10 @@ class TipoProposicaoForm(ModelForm):
tipo_proposicao = super(TipoProposicaoForm, self).save(commit) tipo_proposicao = super(TipoProposicaoForm, self).save(commit)
assert tipo_proposicao.conteudo assert tipo_proposicao.content_type
tipo_proposicao.tipo_conteudo_related = \ 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']) ).objects.get(pk=self.cleaned_data['tipo_conteudo_related'])
tipo_proposicao.save() tipo_proposicao.save()
@ -1090,7 +1090,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
'sem anexação se for possível para esta ' 'sem anexação se for possível para esta '
'Proposição. Não sendo, a rotina de incorporação ' 'Proposição. Não sendo, a rotina de incorporação '
'não permitirá estes campos serem vazios.' 'não permitirá estes campos serem vazios.'
) % self.instance.tipo.conteudo, ) % self.instance.tipo.content_type,
css_class="alert-info", css_class="alert-info",
dismiss=False), 5)), dismiss=False), 5)),
to_column( to_column(
@ -1141,14 +1141,14 @@ class ConfirmarProposicaoForm(ProposicaoForm):
if 'incorporar' in self.data: if 'incorporar' in self.data:
cd = ProposicaoForm.clean(self) cd = ProposicaoForm.clean(self)
if self.instance.tipo.conteudo.model_class() ==\ if self.instance.tipo.content_type.model_class() ==\
TipoMateriaLegislativa: TipoMateriaLegislativa:
if 'regime_tramitacao' not in cd or\ if 'regime_tramitacao' not in cd or\
not cd['regime_tramitacao']: not cd['regime_tramitacao']:
raise ValidationError( raise ValidationError(
_('Regimente de Tramitação deve ser informado.')) _('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']: and not cd['materia_de_vinculo']:
raise ValidationError( raise ValidationError(
@ -1216,7 +1216,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
proposicao = self.instance proposicao = self.instance
conteudo_gerado = None 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( numero__max = MateriaLegislativa.objects.filter(
tipo=proposicao.tipo.tipo_conteudo_related, tipo=proposicao.tipo.tipo_conteudo_related,
ano=datetime.now().year).aggregate(Max('numero')) ano=datetime.now().year).aggregate(Max('numero'))
@ -1269,7 +1269,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
'sapl.materia:materialegislativa_detail', 'sapl.materia:materialegislativa_detail',
kwargs={'pk': materia.pk}) kwargs={'pk': materia.pk})
elif self.instance.tipo.conteudo.model_class() == TipoDocumento: elif self.instance.tipo.content_type.model_class() == TipoDocumento:
# dados básicos # dados básicos
doc = DocumentoAcessorio() doc = DocumentoAcessorio()
@ -1349,9 +1349,9 @@ class ConfirmarProposicaoForm(ProposicaoForm):
protocolo.numero_paginas = cd['numero_de_paginas'] protocolo.numero_paginas = cd['numero_de_paginas']
protocolo.anulado = False 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 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.tipo_documento = proposicao.tipo.tipo_conteudo_related
protocolo.save() protocolo.save()

24
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')]),
),
]

13
sapl/materia/models.py

@ -36,12 +36,12 @@ class TipoProposicao(models.Model):
# FIXME - para a rotina de migração - estes campos mudaram # FIXME - para a rotina de migração - estes campos mudaram
# retire o comentário quando resolver # retire o comentário quando resolver
conteudo = models.ForeignKey(ContentType, default=None, content_type = models.ForeignKey(ContentType, default=None,
verbose_name=_('Definição de Tipo')) verbose_name=_('Definição de Tipo'))
object_id = models.PositiveIntegerField( object_id = models.PositiveIntegerField(
blank=True, null=True, default=None) blank=True, null=True, default=None)
tipo_conteudo_related = SaplGenericForeignKey( 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( """materia_ou_documento = models.CharField(
max_length=1, verbose_name=_('Gera'), choices=MAT_OU_DOC_CHOICES) max_length=1, verbose_name=_('Gera'), choices=MAT_OU_DOC_CHOICES)
@ -60,7 +60,7 @@ class TipoProposicao(models.Model):
class Meta: class Meta:
verbose_name = _('Tipo de Proposição') verbose_name = _('Tipo de Proposição')
verbose_name_plural = _('Tipos de Proposições') verbose_name_plural = _('Tipos de Proposições')
unique_together = (('conteudo', 'object_id'), ) unique_together = (('content_type', 'object_id'), )
def __str__(self): def __str__(self):
return self.descricao return self.descricao
@ -417,6 +417,13 @@ class Orgao(models.Model):
telefone = models.CharField( telefone = models.CharField(
max_length=50, blank=True, verbose_name=_('Telefone')) max_length=50, blank=True, verbose_name=_('Telefone'))
autor = SaplGenericRelation(Autor,
related_query_name='orgao_set',
fields_search=(
('nome', '__icontains'),
('sigla', '__icontains')
))
class Meta: class Meta:
verbose_name = _('Órgão') verbose_name = _('Órgão')
verbose_name_plural = _('Órgãos') verbose_name_plural = _('Órgãos')

3
sapl/materia/views.py

@ -138,7 +138,8 @@ class TipoProposicaoCrud(CrudAux):
help_text = 'tipo_proposicao' help_text = 'tipo_proposicao'
class BaseMixin(CrudAux.BaseMixin): 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): class CreateView(CrudAux.CreateView):
form_class = TipoProposicaoForm form_class = TipoProposicaoForm

21
sapl/protocoloadm/tests/test_protocoloadm.py

@ -1,9 +1,10 @@
import datetime import datetime
import pytest
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_mommy import mommy from model_mommy import mommy
import pytest
from sapl.materia.models import UnidadeTramitacao from sapl.materia.models import UnidadeTramitacao
from sapl.protocoloadm.forms import AnularProcoloAdmForm from sapl.protocoloadm.forms import AnularProcoloAdmForm
@ -147,13 +148,14 @@ def test_create_tramitacao(admin_client):
'sapl.protocoloadm:tramitacaoadministrativo_create', 'sapl.protocoloadm:tramitacaoadministrativo_create',
kwargs={'pk': documento_adm.pk}), kwargs={'pk': documento_adm.pk}),
{'unidade_tramitacao_local': unidade_tramitacao_destino_2.pk, {'unidade_tramitacao_local': unidade_tramitacao_destino_2.pk,
'unidade_tramitacao_destino': unidade_tramitacao_local_1.pk,
'documento': documento_adm.pk, 'documento': documento_adm.pk,
'status': status.pk, 'status': status.pk,
'data_tramitacao': datetime.date(2016, 8, 21)}, 'data_tramitacao': datetime.date(2016, 8, 21)},
follow=True) follow=True)
msg = _('A origem da nova tramitação deve ser igual ao ' msg = force_text(_('A origem da nova tramitação deve ser igual ao '
'destino da última adicionada!') 'destino da última adicionada!'))
# Verifica se a origem da nova tramitacao é igual ao destino da última # Verifica se a origem da nova tramitacao é igual ao destino da última
assert msg in response.context_data[ assert msg in response.context_data[
@ -164,6 +166,7 @@ def test_create_tramitacao(admin_client):
'sapl.protocoloadm:tramitacaoadministrativo_create', 'sapl.protocoloadm:tramitacaoadministrativo_create',
kwargs={'pk': documento_adm.pk}), kwargs={'pk': documento_adm.pk}),
{'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk,
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk, 'documento': documento_adm.pk,
'status': status.pk, 'status': status.pk,
'data_tramitacao': datetime.date(2016, 8, 20)}, 'data_tramitacao': datetime.date(2016, 8, 20)},
@ -181,14 +184,15 @@ def test_create_tramitacao(admin_client):
'sapl.protocoloadm:tramitacaoadministrativo_create', 'sapl.protocoloadm:tramitacaoadministrativo_create',
kwargs={'pk': documento_adm.pk}), kwargs={'pk': documento_adm.pk}),
{'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk,
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk, 'documento': documento_adm.pk,
'status': status.pk, 'status': status.pk,
'data_tramitacao': datetime.date.today() + datetime.timedelta( 'data_tramitacao': datetime.date.today() + datetime.timedelta(
days=1)}, days=1)},
follow=True) follow=True)
msg = _('A data de tramitação deve ser ' + msg = force_text(_('A data de tramitação deve ser ' +
'menor ou igual a data de hoje!') 'menor ou igual a data de hoje!'))
# Verifica se a data da tramitação é menor do que a data de hoje # Verifica se a data da tramitação é menor do que a data de hoje
assert msg in response.context_data[ assert msg in response.context_data[
@ -199,14 +203,15 @@ def test_create_tramitacao(admin_client):
'sapl.protocoloadm:tramitacaoadministrativo_create', 'sapl.protocoloadm:tramitacaoadministrativo_create',
kwargs={'pk': documento_adm.pk}), kwargs={'pk': documento_adm.pk}),
{'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk,
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk, 'documento': documento_adm.pk,
'status': status.pk, 'status': status.pk,
'data_tramitacao': datetime.date(2016, 8, 21), 'data_tramitacao': datetime.date(2016, 8, 21),
'data_encaminhamento': datetime.date(2016, 8, 20)}, 'data_encaminhamento': datetime.date(2016, 8, 20)},
follow=True) follow=True)
msg = _('A data de encaminhamento deve ser ' + msg = force_text(_('A data de encaminhamento deve ser ' +
'maior que a data de tramitação!') 'maior que a data de tramitação!'))
# Verifica se a data da encaminhamento é menor do que a data de tramitacao # Verifica se a data da encaminhamento é menor do que a data de tramitacao
assert msg in response.context_data[ assert msg in response.context_data[
@ -217,6 +222,7 @@ def test_create_tramitacao(admin_client):
'sapl.protocoloadm:tramitacaoadministrativo_create', 'sapl.protocoloadm:tramitacaoadministrativo_create',
kwargs={'pk': documento_adm.pk}), kwargs={'pk': documento_adm.pk}),
{'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk,
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk, 'documento': documento_adm.pk,
'status': status.pk, 'status': status.pk,
'data_tramitacao': datetime.date(2016, 8, 21), 'data_tramitacao': datetime.date(2016, 8, 21),
@ -235,6 +241,7 @@ def test_create_tramitacao(admin_client):
'sapl.protocoloadm:tramitacaoadministrativo_create', 'sapl.protocoloadm:tramitacaoadministrativo_create',
kwargs={'pk': documento_adm.pk}), kwargs={'pk': documento_adm.pk}),
{'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk, {'unidade_tramitacao_local': unidade_tramitacao_destino_1.pk,
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk, 'documento': documento_adm.pk,
'status': status.pk, 'status': status.pk,
'data_tramitacao': datetime.date(2016, 8, 21)}, 'data_tramitacao': datetime.date(2016, 8, 21)},

10
sapl/sessao/views.py

@ -1300,13 +1300,16 @@ class VotacaoNominalView(SessaoPermissionMixin):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
ordem_id = kwargs['mid'] ordem_id = kwargs['mid']
ordem = OrdemDia.objects.get(id=ordem_id) ordem = OrdemDia.objects.get(id=ordem_id)
total = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=ordem.sessao_plenaria_id).count()
materia = {'materia': ordem.materia, materia = {'materia': ordem.materia,
'ementa': sub( 'ementa': sub(
' ', ' ', strip_tags(ordem.observacao))} ' ', ' ', strip_tags(ordem.observacao))}
context = {'materia': materia, 'object': self.get_object(), context = {'materia': materia, 'object': self.get_object(),
'parlamentares': self.get_parlamentares(), 'parlamentares': self.get_parlamentares(),
'tipos': self.get_tipos_votacao()} 'tipos': self.get_tipos_votacao(),
'total': total}
return self.render_to_response(context) return self.render_to_response(context)
@ -1502,13 +1505,16 @@ class VotacaoNominalExpedienteView(SessaoPermissionMixin):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
expediente_id = kwargs['mid'] expediente_id = kwargs['mid']
expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente = ExpedienteMateria.objects.get(id=expediente_id)
total = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=expediente.sessao_plenaria_id).count()
materia = {'materia': expediente.materia, materia = {'materia': expediente.materia,
'ementa': sub( 'ementa': sub(
' ', ' ', strip_tags(expediente.observacao))} ' ', ' ', strip_tags(expediente.observacao))}
context = {'materia': materia, 'object': self.get_object(), context = {'materia': materia, 'object': self.get_object(),
'parlamentares': self.get_parlamentares(), 'parlamentares': self.get_parlamentares(),
'tipos': self.get_tipos_votacao()} 'tipos': self.get_tipos_votacao(),
'total': total}
return self.render_to_response(context) return self.render_to_response(context)

77
sapl/templates/base.html

@ -41,84 +41,9 @@
</button> </button>
</div> </div>
<div id="navbar" class="navbar-collapse collapse"> <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="/" role="button" aria-haspopup="true" aria-expanded="false">Inicio</a></li>
<li class="dropdown"> {% block sections_navbar %} {% navbar 'navbar.yaml' %}{% endblock sections_navbar %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Institucional <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.parlamentares:mesa_diretora' %}">Mesa Diretora</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.comissoes:comissao_list' %}">Comissões</a></li>
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="#">Bancadas</a></li> -->
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.parlamentares:parlamentar_list' %}">Parlamentares</a></li>
</ul>
</li>
{% if perms.protocoloadm %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Protocolo <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.protocoloadm:protocolo' %}">Pesquisar Protocolo</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:receber-proposicao' %}">Receber Proposições</a></li>
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="/materia">Protocolo Legislativo</a></li> -->
{# <li class="nav__sub-item"><a class="nav__sub-link" href="">Protocolo Geral</a></li> #}
{# <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:proposicao' %}">Proposições</a></li> #}
</ul>
</li>
{% endif %}
{% if user|get_doc_adm_template_perms %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Documentos Administrativos <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.protocoloadm:pesq_doc_adm' %}">Pesquisar Documento Administrativo</a></li>
</ul>
</li>
{% endif %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Atividade Legislativa <span class="caret"></span></a>
<ul class="dropdown-menu">
{% if perms.materia.add_proposicao %}
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:proposicao_list' %}">Proposições</a></li>
{% endif %}
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:pesquisar_materia' %}">Matérias Legislativas</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.sessao:pesquisar_sessao' %}">Sessões Plenárias</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.sessao:pesquisar_pauta' %}">Pautas das Sessões</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:primeira_tramitacao_em_lote' %}">Tramitação em Lote</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:acessorio_em_lote' %}">Acessório em Lote</a></li>
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="#">Atas das Sessões</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Reuniões das Comissões</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Impressos</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Relatórios</a></li> -->
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{% trans 'Legislação'%} <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.norma:norma_pesquisa'%}">{% trans 'Pesquisar Normas Jurídicas'%}</a></li>
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="#">Índice de Assuntos</a></li> -->
</ul>
</li>
{% if perms.base.menu_sistemas %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Sistema <span class="caret"></span></a>
<ul class="dropdown-menu">
{% if perms.base.view_tabelas_auxiliares %}<li class="nav__sub-item"><a class="nav__sub-link" href="/sistema">Tabelas Auxiliares</a></li>{%endif%}
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="#">Provedor LexML</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Publicador LexML</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Gerenciar Usuários</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Backup e Restauração</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Migração de Dados</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Sobre</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">ZopeEdit Windows</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Troca de Senha</a></li> -->
</ul>
</li>
{% endif %}
</ul>
<ul class="nav navbar-nav navbar-right" id="autenticacao"> <ul class="nav navbar-nav navbar-right" id="autenticacao">
<li class="dropdown pesquisa"> <li class="dropdown pesquisa">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><img src="{% static 'img/search.png' %}"><span class="caret"></span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><img src="{% static 'img/search.png' %}"><span class="caret"></span></a>

2
sapl/templates/materia/layouts.yaml

@ -74,7 +74,7 @@ Relatoria:
TipoProposicao: TipoProposicao:
{% trans 'Tipo Proposição' %}: {% trans 'Tipo Proposição' %}:
- descricao conteudo - descricao content_type
- tipo_conteudo_related - tipo_conteudo_related
Proposicao: Proposicao:

4
sapl/templates/materia/tipoproposicao_form.html

@ -8,7 +8,7 @@ aaa
$(document).ready(function(){ $(document).ready(function(){
var initial_select = $("input[name=tipo_conteudo_related]").val(); var initial_select = $("input[name=tipo_conteudo_related]").val();
$("input[name=tipo_conteudo_related]").remove(); $("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 pk = this[event.target.selectedIndex].value;
var url = '{% url 'sapl.api:model_list' 0 ''%}' var url = '{% url 'sapl.api:model_list' 0 ''%}'
url = url.replace('0', pk) + '?pagination=False' 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'); $("#div_id_tipo_conteudo_related_radio .controls").addClass('controls-radio-checkbox');
}); });

27
sapl/templates/menus/nav.html

@ -0,0 +1,27 @@
{% load i18n %}
{% if menu %}
<ul class="nav navbar-nav">
{% for item in menu %}
{% if item.children %}
<li class="dropdown">
<a class="dropdown-toggle"href="#fakeLink" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
{{ item.title }}
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
{% for subitem in item.children %}
{% if subitem.url %}
<li><a href="{{ subitem.url }}">{{ subitem.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
</li>
{% else %}
{% if item.url %}
<li><a href="{{ item.url }}">{% trans item.title %}</a></li>
{% endif %}
{% endif %}
{% endfor %}
</ul>
{% endif %}

66
sapl/templates/navbar.yaml

@ -0,0 +1,66 @@
{% load i18n common_tags %}
- title: {% trans 'Início' %}
url: '/'
- title: {% trans 'Institucional' %}
children:
- title: {% trans 'Mesa Diretora' %}
url: sapl.parlamentares:mesa_diretora
- title: {% trans 'Comissões' %}
url: sapl.comissoes:comissao_list
- title: {% trans 'Parlamentares' %}
url: sapl.parlamentares:parlamentar_list
- title: {% trans 'Protocolo' %}
check_permission: protolcoloadm.list_protocolo
children:
- title: {% trans 'Pesquisar Protocolo' %}
url: sapl.protocoloadm:protocolo
- title: {% trans 'Receber Proposições' %}
url: sapl.materia:receber-proposicao
- title: {% trans 'Documentos Administrativos' %}
{% if 'documentos_administrativos'|get_config_attr == 'R' %}check_permission: protolcoloadm.list_documentoadministrativo{%endif%}
url: sapl.protocoloadm:pesq_doc_adm
- title: {% trans 'Atividade Legislativa' %}
children:
- title: {% trans 'Proposições' %}
url: sapl.materia:proposicao_list
check_permission: materia.add_proposicao
- title: {% trans 'Matérias Legislativas' %}
url: sapl.materia:pesquisar_materia
- title: {% trans 'Sessões Plenárias' %}
url: sapl.sessao:pesquisar_sessao
- title: {% trans 'Pautas das Sessões' %}
url: sapl.sessao:pesquisar_pauta
- title: {% trans 'Tramitação em Lote' %}
url: sapl.materia:primeira_tramitacao_em_lote
check_permission: materia.list_tramitacao {% comment %} FIXME transformar para checagens de menu_[funcionalidade]{% endcomment%}
- title: {% trans 'Acessório em Lote' %}
url: sapl.materia:acessorio_em_lote
check_permission: materia.list_documentoacessorio {% comment %} FIXME transformar para checagens de menu_[funcionalidade]{% endcomment%}
- title: {% trans 'Normas Jurídicas' %}
children:
- title: {% trans 'Pesquisar Normas Jurídicas' %}
url: sapl.norma:normajuridica_list
- title: {% trans 'Sistema' %}
check_permission: base.menu_sistemas
children:
- title: {% trans 'Tabelas Auxiliares' %}
url: '/sistema'
check_permission: base.view_tabelas_auxiliares
{% comment %}
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Provedor LexML</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Publicador LexML</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Gerenciar Usuários</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Backup e Restauração</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Migração de Dados</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Sobre</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">ZopeEdit Windows</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Troca de Senha</a></li>
{% endcomment%}

6
sapl/templates/sessao/adicionar_varias_materias_expediente.html

@ -69,11 +69,11 @@
<strong>Ementa:</strong>&nbsp;{{ m.ementa|safe }}</br> <strong>Ementa:</strong>&nbsp;{{ m.ementa|safe }}</br>
<p></p> <p></p>
<td class="col-md-3"> <td class="col-md-3">
<input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="1"> <label for="sexo">Simbólica</label> <input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="1"> <label for="tipo">Simbólica</label>
</br> </br>
<input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="2"> <label for="sexo">Nominal</label> <input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="2"> <label for="tipo">Nominal</label>
</br> </br>
<input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="3"> <label for="sexo">Secreta</label> <input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="3"> <label for="tipo">Secreta</label>
</td> </td>
</td> </td>
</tr> </tr>

33
sapl/templates/sessao/presenca.html

@ -10,21 +10,24 @@
<form method="POST"> <form method="POST">
{% csrf_token %} {% csrf_token %}
<div class="row"> <div class="controls">
<div class="col-md-6">Presença</div> <div class="checkbox">
<div class="col-md-6">Parlamentar</div> <label for="id_check_all">
<input type="checkbox" id="id_check_all" onchange="checkAll(event)" /> Marcar/Desmarcar Todos
</label>
</div> </div>
<div class="row">
<div class="col-md-12"><input type="checkbox" onClick="checkAll(this)" /> Marcar/Desmarcar Todos</div>
</div> </div>
<br />
<div class="controls">
{% for parlamentar, check in view.get_presencas %} {% for parlamentar, check in view.get_presencas %}
<div class="row"> <div class="checkbox">
<div class="col-md-6"><input type="checkbox" name="presenca" value="{{ parlamentar.id }}" {% if check %} checked {% endif %}/></div> <label for="id_presenca_{{forloop.counter}}">
<div class="col-md-6"><label for="parlamentar">{{ parlamentar }}</label></div> <input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca" value="{{ parlamentar.id }}" {% if check %} checked {% endif %}/>
{{ parlamentar }}
</label>
</div> </div>
{% endfor %} {% endfor %}
</div>
<br /> <br />
<input type="submit" value="Salvar" class="btn btn-primary" /> <input type="submit" value="Salvar" class="btn btn-primary" />
@ -51,11 +54,11 @@
{% block extra_js %} {% block extra_js %}
<script language="JavaScript"> <script language="JavaScript">
function checkAll(source) { function checkAll(event) {
checkboxes = document.getElementsByName('presenca'); $('[name=presenca]').each(function() {
for(var i=0, n=checkboxes.length;i<n;i++) { $(this).prop('checked', event.target.checked ? 'checked': null);
checkboxes[i].checked = source.checked; $(this).trigger('click');
} });
} }
</script> </script>
{% endblock %} {% endblock %}

15
sapl/templates/sessao/votacao/nominal.html

@ -13,6 +13,12 @@
Ementa: {{materia.ementa|safe}} Ementa: {{materia.ementa|safe}}
</div> </div>
<br /> <br />
{% if total == 0 %}
<div class="alert alert-info alert-dismissible fade in" role="alert">
<div>Não existe nenhum parlamentar presente para que a votação ocorra.</div>
</div>
<a href="{% url 'sapl.sessao:sessaoplenaria_detail' object.pk %}" class="btn btn-warning">Voltar</a>
{% else %}
<fieldset class="form-group"> <fieldset class="form-group">
<legend>Votos</legend> <legend>Votos</legend>
<div class="row"> <div class="row">
@ -54,4 +60,13 @@
<input type="submit" id="cancelar-votacao" name="cancelar-votacao" value="Cancelar Votação" class="btn btn-warning" /> <input type="submit" id="cancelar-votacao" name="cancelar-votacao" value="Cancelar Votação" class="btn btn-warning" />
</fieldset> </fieldset>
</form> </form>
{% endif %}
{% endblock detail_content %} {% endblock detail_content %}
{% block extra_js %}
<script>
function voltar() {
window.history.back();
}
</script>
{% endblock extra_js%}

Loading…
Cancel
Save