Browse Source

Merge master

pull/615/head
Eduardo Calil 8 years ago
parent
commit
8a043842b3
  1. 31
      README.rst
  2. 28
      sapl/parlamentares/migrations/0028_auto_20160922_1443.py
  3. 9
      sapl/parlamentares/models.py
  4. 28
      sapl/sessao/forms.py
  5. 26
      sapl/sessao/views.py
  6. 4
      sapl/templates/base.html
  7. 2
      sapl/templates/parlamentares/layouts.yaml
  8. 63
      sapl/templates/sessao/sessaoplenaria_filter.html
  9. 5
      sapl/utils.py

31
README.rst

@ -173,7 +173,7 @@ Instalação e configuração das dependências do projeto
./manage.py bower install ./manage.py bower install
* Atualizar e/ou criar a base de dados para refletir o modelo da versão clonada:: * Atualizar e/ou criar as tabelas da base de dados para refletir o modelo da versão clonada::
./manage.py migrate ./manage.py migrate
@ -189,6 +189,35 @@ Instalação e configuração das dependências do projeto
http://localhost:8000/ http://localhost:8000/
Instruções para criação dos grupos de perfis de usuários e os usuários de testes
===========================================================================
* Criar super usuário do django-contrib-admin (Será solicitado alguns dados para criação)::
./manage.py createsuperuser
Os perfis semânticos do SAPL devem ser criados manualmente através da execução de um script que gera esses perfis e adiciona um usuário padrão em cada perfil. Para testar o comportamento de cada perfil é necessário executar este script:
* Execute::
./manage.py shell_plus
* Será aberto um prompt do python customizado com diversas funcionalidades do django e do sapl. Execute dentro do prompt::
%run scripts/inicializa_grupos_autorizacoes.py
* Os usuários criados, todos com senha "interlegis", serão::
operador_administrativo
operador_protocoloadm
operador_comissoes
operador_materia
operador_norma
operador_sessao
operador_painel
operador_geral
operador_autor
Instruções para Tradução Instruções para Tradução
======================== ========================

28
sapl/parlamentares/migrations/0028_auto_20160922_1443.py

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-22 17:43
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0027_merge'),
]
operations = [
migrations.RemoveField(
model_name='tipoafastamento',
name='afastamento',
),
migrations.RemoveField(
model_name='tipoafastamento',
name='fim_mandato',
),
migrations.AddField(
model_name='tipoafastamento',
name='indicador',
field=models.CharField(choices=[('A', 'Afastamento'), ('F', 'Fim de Mandato')], default='F', max_length=1, verbose_name='Indicador'),
),
]

9
sapl/parlamentares/models.py

@ -4,7 +4,8 @@ from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
from sapl.utils import (UF, YES_NO_CHOICES, intervalos_tem_intersecao, from sapl.utils import (INDICADOR_AFASTAMENTO, UF, YES_NO_CHOICES,
intervalos_tem_intersecao,
restringe_tipos_de_arquivo_img) restringe_tipos_de_arquivo_img)
@ -328,9 +329,9 @@ class Filiacao(models.Model):
class TipoAfastamento(models.Model): class TipoAfastamento(models.Model):
descricao = models.CharField(max_length=50, verbose_name=_('Descrição')) descricao = models.CharField(max_length=50, verbose_name=_('Descrição'))
afastamento = models.BooleanField( indicador = models.CharField(
choices=YES_NO_CHOICES, verbose_name=_('Indicador')) max_length=1, verbose_name=_('Indicador'), default='F',
fim_mandato = models.BooleanField(verbose_name=_('Indicador')) choices=INDICADOR_AFASTAMENTO)
dispositivo = models.CharField( dispositivo = models.CharField(
max_length=50, blank=True, verbose_name=_('Dispositivo')) max_length=50, blank=True, verbose_name=_('Dispositivo'))

28
sapl/sessao/forms.py

@ -11,9 +11,11 @@ from django.utils.translation import ugettext_lazy as _
from sapl.crispy_layout_mixin import form_actions, to_row from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.materia.forms import MateriaLegislativaFilterSet from sapl.materia.forms import MateriaLegislativaFilterSet
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.parlamentares.models import Parlamentar
from sapl.utils import RANGE_DIAS_MES, RANGE_MESES, autor_label, autor_modal from sapl.utils import RANGE_DIAS_MES, RANGE_MESES, autor_label, autor_modal
from .models import Bancada, ExpedienteMateria, OrdemDia, SessaoPlenaria from .models import (Bancada, ExpedienteMateria, Orador, OradorExpediente,
OrdemDia, SessaoPlenaria)
def pega_anos(): def pega_anos():
@ -265,3 +267,27 @@ class AdicionarVariasMateriasFilterSet(MateriaLegislativaFilterSet):
row4, row5, row6, row7, row8, row4, row5, row6, row7, row8,
form_actions(save_label='Pesquisar')) form_actions(save_label='Pesquisar'))
) )
class OradorForm(ModelForm):
def __init__(self, *args, **kwargs):
super(OradorForm, self).__init__(*args, **kwargs)
self.fields['parlamentar'].queryset = Parlamentar.objects.filter(
ativo=True).order_by('nome_completo')
class Meta:
model = Orador
exclude = ['sessao_plenaria']
class OradorExpedienteForm(ModelForm):
def __init__(self, *args, **kwargs):
super(OradorExpedienteForm, self).__init__(*args, **kwargs)
self.fields['parlamentar'].queryset = Parlamentar.objects.filter(
ativo=True).order_by('nome_completo')
class Meta:
model = OradorExpediente
exclude = ['sessao_plenaria']

26
sapl/sessao/views.py

@ -29,9 +29,9 @@ from sapl.utils import permissao_tb_aux, permissoes_painel, permissoes_sessao
from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm, from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
ExpedienteForm, ExpedienteMateriaForm, ListMateriaForm, ExpedienteForm, ExpedienteMateriaForm, ListMateriaForm,
MesaForm, OrdemDiaForm, PresencaForm, MesaForm, OradorExpedienteForm, OradorForm, OrdemDiaForm,
SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm, PresencaForm, SessaoPlenariaFilterSet, VotacaoEditForm,
VotacaoNominalForm) VotacaoForm, VotacaoNominalForm)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa, from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, IntegranteMesa, ExpedienteMateria, ExpedienteSessao, IntegranteMesa,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia, MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
@ -180,6 +180,10 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
class CreateView(MasterDetailCrud.CreateView): class CreateView(MasterDetailCrud.CreateView):
form_class = OrdemDiaForm form_class = OrdemDiaForm
def get_success_url(self):
return reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': self.kwargs['pk']})
class UpdateView(MasterDetailCrud.UpdateView): class UpdateView(MasterDetailCrud.UpdateView):
form_class = OrdemDiaForm form_class = OrdemDiaForm
@ -349,6 +353,10 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
form_class = ExpedienteMateriaForm form_class = ExpedienteMateriaForm
permission_required = permissoes_sessao() permission_required = permissoes_sessao()
def get_success_url(self):
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': self.kwargs['pk']})
class UpdateView(PermissionRequiredMixin, MasterDetailCrud.UpdateView): class UpdateView(PermissionRequiredMixin, MasterDetailCrud.UpdateView):
form_class = ExpedienteMateriaForm form_class = ExpedienteMateriaForm
permission_required = permissoes_sessao() permission_required = permissoes_sessao()
@ -392,9 +400,15 @@ class OradorExpedienteCrud(OradorCrud):
class CreateView(PermissionRequiredMixin, MasterDetailCrud.CreateView): class CreateView(PermissionRequiredMixin, MasterDetailCrud.CreateView):
permission_required = permissoes_sessao() permission_required = permissoes_sessao()
form_class = OradorExpedienteForm
def get_success_url(self):
return reverse('sapl.sessao:oradorexpediente_list',
kwargs={'pk': self.kwargs['pk']})
class UpdateView(PermissionRequiredMixin, MasterDetailCrud.UpdateView): class UpdateView(PermissionRequiredMixin, MasterDetailCrud.UpdateView):
permission_required = permissoes_sessao() permission_required = permissoes_sessao()
form_class = OradorExpedienteForm
class DeleteView(PermissionRequiredMixin, MasterDetailCrud.DeleteView): class DeleteView(PermissionRequiredMixin, MasterDetailCrud.DeleteView):
permission_required = permissoes_sessao() permission_required = permissoes_sessao()
@ -405,9 +419,15 @@ class OradorCrud(OradorCrud):
class CreateView(PermissionRequiredMixin, MasterDetailCrud.CreateView): class CreateView(PermissionRequiredMixin, MasterDetailCrud.CreateView):
permission_required = permissoes_sessao() permission_required = permissoes_sessao()
form_class = OradorForm
def get_success_url(self):
return reverse('sapl.sessao:orador_list',
kwargs={'pk': self.kwargs['pk']})
class UpdateView(PermissionRequiredMixin, MasterDetailCrud.UpdateView): class UpdateView(PermissionRequiredMixin, MasterDetailCrud.UpdateView):
permission_required = permissoes_sessao() permission_required = permissoes_sessao()
form_class = OradorForm
class DeleteView(PermissionRequiredMixin, MasterDetailCrud.DeleteView): class DeleteView(PermissionRequiredMixin, MasterDetailCrud.DeleteView):
permission_required = permissoes_sessao() permission_required = permissoes_sessao()

4
sapl/templates/base.html

@ -160,9 +160,9 @@
<span class="vcenter"> <span class="vcenter">
{# XXX Make better use of translation tags in html blocks ie. actually use the proper blocktrans tag efficiently #} {# XXX Make better use of translation tags in html blocks ie. actually use the proper blocktrans tag efficiently #}
{% if nome %} {% if nome %}
{{ nome }} {% trans 'de' %} {{ municipio }} - {{ uf }} {{ nome }}
{% else %} {% else %}
{% trans 'Câmara Municipal'%} {% trans 'Câmara/Assembléia não configurada'%}
{% endif %} {% endif %}
<br/><small>{% trans 'Sistema de Apoio ao Processo Legislativo' %}</small> <br/><small>{% trans 'Sistema de Apoio ao Processo Legislativo' %}</small>
</span> </span>

2
sapl/templates/parlamentares/layouts.yaml

@ -82,7 +82,7 @@ NivelInstrucao:
TipoAfastamento: TipoAfastamento:
{% trans 'Tipo de Afastamento' %}: {% trans 'Tipo de Afastamento' %}:
- descricao:5 dispositivo:5 afastamento - descricao dispositivo indicador
SituacaoMilitar: SituacaoMilitar:
{% trans 'Tipo Situação Militar' %}: {% trans 'Tipo Situação Militar' %}:

63
sapl/templates/sessao/sessaoplenaria_filter.html

@ -18,41 +18,36 @@
{% block detail_content %} {% block detail_content %}
<h1><b>Pesquisar Sessão Plenária</b></h1> <h1><b>Pesquisar Sessão Plenária</b></h1>
<br></br> <br></br>
{% crispy filter.form %} {% crispy filter.form %}
<p></p> {% if filter_url %}
<table class="table table-striped table-hover"> <p></p>
<thead class="thead-default"> <table class="table table-striped table-hover">
<tr><td><h3>Resultados</h3></td></tr> <thead class="thead-default">
</thead> <tr><td><h3>Resultados</h3></td></tr>
{% if page_obj|length %} </thead>
{% if numero_res > 1 %} {% if page_obj|length %}
<h3>Foram encontradas {{numero_res}} sessões.</h3></br> {% if numero_res > 1 %}
{% elif numero_res == 1 %} <h3>Foram encontradas {{numero_res}} sessões.</h3></br>
<h3>Foi encontrada {{numero_res}} sessão.</h3></br> {% elif numero_res == 1 %}
{% endif %} <h3>Foi encontrada {{numero_res}} sessão.</h3></br>
{% for s in page_obj %}
<tr>
<td>
<strong><a href="{% url 'sapl.sessao:sessaoplenaria_detail' s.id %}">{{s}}</strong></a></br>
<strong>Abertura:</strong> {{s.data_inicio}}</br>
<strong>Legislatura:</strong> {{s.legislatura}}</br>
<strong>Sessão Legislativa:</strong> {{s.sessao_legislativa}}</br>
<strong>Tipo:</strong> {{s.tipo}}</br>
</>
</tr>
{% endfor %}
{% else %}
<tr>
<td>
<h3>Nenhuma Sessão Plenária encontrada com essas especificações</h3>
</tr>
{% endif %} {% endif %}
</table>
{% include "paginacao.html" %} {% for s in page_obj %}
<tr>
{% endblock detail_content %} <td>
<strong><a href="{% url 'sapl.sessao:sessaoplenaria_detail' s.id %}">{{s}}</strong></a></br>
<strong>Abertura:</strong> {{s.data_inicio}}</br>
<strong>Legislatura:</strong> {{s.legislatura}}</br>
<strong>Sessão Legislativa:</strong> {{s.sessao_legislativa}}</br>
<strong>Tipo:</strong> {{s.tipo}}</br>
</td>
</tr>
{% endfor %}
{% else %}
<tr><td><h3>Nenhuma Sessão Plenária encontrada com essas especificações</h3></tr>
{% endif %}
</table>
{% include "paginacao.html" %}
{% endif %}
{% endblock detail_content %}

5
sapl/utils.py

@ -111,6 +111,11 @@ TURNO_TRAMITACAO_CHOICES = [
('C', _('2ª e 3ª Votação')), ('C', _('2ª e 3ª Votação')),
] ]
INDICADOR_AFASTAMENTO = [
('A', _('Afastamento')),
('F', _('Fim de Mandato')),
]
def listify(function): def listify(function):
@wraps(function) @wraps(function)

Loading…
Cancel
Save