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. 49
      sapl/base/templatetags/menus.py
  2. 36
      sapl/materia/forms.py
  3. 24
      sapl/materia/migrations/0067_auto_20161025_1630.py
  4. 15
      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. 79
      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. 53
      sapl/templates/sessao/presenca.html
  15. 91
      sapl/templates/sessao/votacao/nominal.html

49
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(

36
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()

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

15
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
@ -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')

3
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

21
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)},

10
sapl/sessao/views.py

@ -1300,13 +1300,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)
@ -1502,13 +1505,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)

79
sapl/templates/base.html

@ -41,84 +41,9 @@
</button>
</div>
<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">
<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 %}
{% block sections_navbar %} {% navbar 'navbar.yaml' %}{% endblock sections_navbar %}
{% 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">
<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>
@ -286,7 +211,7 @@
<script src="{% static 'tinymce/tinymce.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jsdiff/diff.min.js' %}"></script>
<script type="text/javascript" src="{% static 'drunken-parrot-flat-ui/js/checkbox.js' %}"></script>
<script type="text/javascript" src="{% static 'drunken-parrot-flat-ui/js/radio.js' %}"></script>

2
sapl/templates/materia/layouts.yaml

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

4
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');
});

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>
<p></p>
<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>
<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>
<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>
</tr>

53
sapl/templates/sessao/presenca.html

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

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

@ -13,45 +13,60 @@
Ementa: {{materia.ementa|safe}}
</div>
<br />
<fieldset class="form-group">
<legend>Votos</legend>
<div class="row">
{% for parlamentar in parlamentares %}
<div class="col-md-6">{{parlamentar.nome_parlamentar}}</div>
<div class="col-md-6">
<select id="voto_parlamentar" name="voto_parlamentar" class="form-control">
<option value="sim:{{parlamentar.id}}">Sim</option>
<option value="nao:{{parlamentar.id}}">Não</option>
<option value="abstencao:{{parlamentar.id}}">Abstenção</option>
<option value="nao_votou:{{parlamentar.id}}">Não Votou</option>
</select>
</div>
{% endfor %}
</div>
</fieldset>
{% 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">
<legend>Votos</legend>
<div class="row">
{% for parlamentar in parlamentares %}
<div class="col-md-6">{{parlamentar.nome_parlamentar}}</div>
<div class="col-md-6">
<select id="voto_parlamentar" name="voto_parlamentar" class="form-control">
<option value="sim:{{parlamentar.id}}">Sim</option>
<option value="nao:{{parlamentar.id}}">Não</option>
<option value="abstencao:{{parlamentar.id}}">Abstenção</option>
<option value="nao_votou:{{parlamentar.id}}">Não Votou</option>
</select>
</div>
{% endfor %}
</div>
</fieldset>
<div class="row">
<div class="col-md-12">
Resultado da Votação
<select id="resultado_votacao" name="resultado_votacao" class="form-control">
{% for tipo in tipos %}
<option value="{{tipo.id}}">{{tipo.nome}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="row">
<div class="col-md-12">
Resultado da Votação
<select id="resultado_votacao" name="resultado_votacao" class="form-control">
{% for tipo in tipos %}
<option value="{{tipo.id}}">{{tipo.nome}}</option>
{% endfor %}
</select>
</div>
</div>
<br />
<div class="row">
<div class="col-md-12">
Observações<br/>
<textarea id="observacao" name="observacao" style="width:100%;" rows="7"></textarea>
</div>
</div>
<br />
<div class="row">
<div class="col-md-12">
Observações<br/>
<textarea id="observacao" name="observacao" style="width:100%;" rows="7"></textarea>
</div>
</div>
<br /><br />
<input type="submit" id="salvar-votacao" name="salvar-votacao" value="Salvar" class="btn btn-primary" />
<input type="submit" id="cancelar-votacao" name="cancelar-votacao" value="Cancelar Votação" class="btn btn-warning" />
</fieldset>
</form>
<br /><br />
<input type="submit" id="salvar-votacao" name="salvar-votacao" value="Salvar" class="btn btn-primary" />
<input type="submit" id="cancelar-votacao" name="cancelar-votacao" value="Cancelar Votação" class="btn btn-warning" />
</fieldset>
</form>
{% endif %}
{% endblock detail_content %}
{% block extra_js %}
<script>
function voltar() {
window.history.back();
}
</script>
{% endblock extra_js%}

Loading…
Cancel
Save