Browse Source

Cria a funcionalidade

pull/1109/head
Eduardo Calil 9 years ago
parent
commit
ab2f18cd7f
  1. 3
      sapl/base/urls.py
  2. 32
      sapl/materia/migrations/0005_auto_20170522_1051.py
  3. 22
      sapl/norma/migrations/0004_auto_20170522_1051.py
  4. 81
      sapl/sessao/forms.py
  5. 35
      sapl/sessao/migrations/0003_resumoordenacao.py
  6. 25
      sapl/sessao/models.py
  7. 6
      sapl/sessao/urls.py
  8. 97
      sapl/sessao/views.py
  9. 22
      sapl/templates/sessao/resumo.html
  10. 13
      sapl/templates/sessao/resumo_ordenacao.html
  11. 2
      sapl/templates/sistema.html

3
sapl/base/urls.py

@ -92,7 +92,8 @@ urlpatterns = [
# todos os sublinks de sistema devem vir acima deste # todos os sublinks de sistema devem vir acima deste
url(r'^sistema/$', permission_required('base.view_tabelas_auxiliares') url(r'^sistema/$', permission_required('base.view_tabelas_auxiliares')
(TemplateView.as_view(template_name='sistema.html'))), (TemplateView.as_view(template_name='sistema.html')),
name='sistema'),
url(r'^login/$', views.login, { url(r'^login/$', views.login, {
'template_name': 'base/login.html', 'authentication_form': LoginForm}, 'template_name': 'base/login.html', 'authentication_form': LoginForm},

32
sapl/materia/migrations/0005_auto_20170522_1051.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-05-22 10:51
from __future__ import unicode_literals
from django.db import migrations, models
import sapl.materia.models
import sapl.utils
class Migration(migrations.Migration):
dependencies = [
('materia', '0004_auto_20170504_1751'),
]
operations = [
migrations.AlterField(
model_name='documentoacessorio',
name='arquivo',
field=models.FileField(blank=True, null=True, upload_to=sapl.materia.models.anexo_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'),
),
migrations.AlterField(
model_name='materialegislativa',
name='texto_original',
field=models.FileField(blank=True, null=True, upload_to=sapl.materia.models.materia_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Original'),
),
migrations.AlterField(
model_name='proposicao',
name='texto_original',
field=models.FileField(blank=True, null=True, upload_to=sapl.materia.models.materia_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Original'),
),
]

22
sapl/norma/migrations/0004_auto_20170522_1051.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-05-22 10:51
from __future__ import unicode_literals
from django.db import migrations, models
import sapl.norma.models
import sapl.utils
class Migration(migrations.Migration):
dependencies = [
('norma', '0003_auto_20170510_1549'),
]
operations = [
migrations.AlterField(
model_name='normajuridica',
name='texto_integral',
field=models.FileField(blank=True, null=True, upload_to=sapl.norma.models.norma_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'),
),
]

81
sapl/sessao/forms.py

@ -28,7 +28,7 @@ def recupera_anos():
# apos a adicao do .dates(), por isso o reversed() abaixo # apos a adicao do .dates(), por isso o reversed() abaixo
anos = [(k.year, k.year) for k in reversed(anos_list)] anos = [(k.year, k.year) for k in reversed(anos_list)]
return anos return anos
except: except Exception:
return [] return []
@ -39,6 +39,18 @@ MES_CHOICES = [('', '---------')] + RANGE_MESES
DIA_CHOICES = [('', '---------')] + RANGE_DIAS_MES DIA_CHOICES = [('', '---------')] + RANGE_DIAS_MES
ORDENACAO_RESUMO = [('cont_mult', 'Conteúdo Multimídia'),
('exp', 'Expedientes'),
('id_basica', 'Identificação Básica'),
('lista_p', 'Lista de Presença'),
('lista_p_o_d', 'Lista de Presença Ordem do Dia'),
('mat_exp', 'Matérias do Expediente'),
('mat_o_d', 'Matérias da Ordem do Dia'),
('mesa_d', 'Mesa Diretora'),
('oradores_exped', 'Oradores do Expediente'),
('oradores_expli', 'Oradores das Explicações Pessoais')]
class BancadaForm(ModelForm): class BancadaForm(ModelForm):
class Meta: class Meta:
@ -359,3 +371,70 @@ class OradorExpedienteForm(ModelForm):
class PautaSessaoFilterSet(SessaoPlenariaFilterSet): class PautaSessaoFilterSet(SessaoPlenariaFilterSet):
titulo = _('Pesquisa de Pauta de Sessão') titulo = _('Pesquisa de Pauta de Sessão')
class ResumoOrdenacaoForm(forms.Form):
primeiro = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
segundo = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
terceiro = forms.ChoiceField(label=u'',
choices=ORDENACAO_RESUMO)
quarto = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
quinto = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
sexto = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
setimo = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
oitavo = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
decimo = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
nono = forms.ChoiceField(label=u'10°',
choices=ORDENACAO_RESUMO)
def __init__(self, *args, **kwargs):
super(ResumoOrdenacaoForm, self).__init__(*args, **kwargs)
row1 = to_row(
[('primeiro', 12)])
row2 = to_row(
[('segundo', 12)])
row3 = to_row(
[('terceiro', 12)])
row4 = to_row(
[('quarto', 12)])
row5 = to_row(
[('quinto', 12)])
row6 = to_row(
[('sexto', 12)])
row7 = to_row(
[('setimo', 12)])
row8 = to_row(
[('oitavo', 12)])
row9 = to_row(
[('nono', 12)])
row10 = to_row(
[('decimo', 12)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(_('Pesquisa de Matéria'),
row1, row2, row3, row4, row5,
row6, row7, row8, row9, row10,
form_actions(save_label='Atualizar'))
)
def clean(self):
cleaned_data = self.cleaned_data
for c1 in cleaned_data:
i = 0
for c2 in cleaned_data:
if cleaned_data[str(c1)] == cleaned_data[str(c2)]:
i = i + 1
if i > 1:
raise ValidationError(_(
'Não é possível ter campos repetidos'))

35
sapl/sessao/migrations/0003_resumoordenacao.py

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-05-22 10:51
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0002_sessaoplenaria_interativa'),
]
operations = [
migrations.CreateModel(
name='ResumoOrdenacao',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('primeiro', models.CharField(max_length=30)),
('segundo', models.CharField(max_length=30)),
('terceiro', models.CharField(max_length=30)),
('quarto', models.CharField(max_length=30)),
('quinto', models.CharField(max_length=30)),
('sexto', models.CharField(max_length=30)),
('setimo', models.CharField(max_length=30)),
('oitavo', models.CharField(max_length=30)),
('nono', models.CharField(max_length=30)),
('decimo', models.CharField(max_length=30)),
],
options={
'verbose_name': 'Ordenação do Resumo de uma Sessão',
'verbose_name_plural': 'Ordenação do Resumo de uma Sessão',
},
),
]

25
sapl/sessao/models.py

@ -493,3 +493,28 @@ class Bloco(models.Model):
def __str__(self): def __str__(self):
return self.nome return self.nome
@reversion.register()
class ResumoOrdenacao(models.Model):
'''
Tabela para registrar em qual ordem serão renderizados os componentes
da tela de resumo de uma sessão
'''
primeiro = models.CharField(max_length=30)
segundo = models.CharField(max_length=30)
terceiro = models.CharField(max_length=30)
quarto = models.CharField(max_length=30)
quinto = models.CharField(max_length=30)
sexto = models.CharField(max_length=30)
setimo = models.CharField(max_length=30)
oitavo = models.CharField(max_length=30)
nono = models.CharField(max_length=30)
decimo = models.CharField(max_length=30)
class Meta:
verbose_name = _('Ordenação do Resumo de uma Sessão')
verbose_name_plural = _('Ordenação do Resumo de uma Sessão')
def __str__(self):
return 'Ordenação do Resumo de uma Sessão'

6
sapl/sessao/urls.py

@ -10,7 +10,8 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
PautaSessaoDetailView, PautaSessaoListView, PautaSessaoDetailView, PautaSessaoListView,
PesquisarPautaSessaoView, PesquisarPautaSessaoView,
PesquisarSessaoPlenariaView, PesquisarSessaoPlenariaView,
PresencaOrdemDiaView, PresencaView, ResumoView, PresencaOrdemDiaView, PresencaView,
ResumoOrdenacaoView, ResumoView,
SessaoCrud, TipoExpedienteCrud, SessaoCrud, TipoExpedienteCrud,
TipoResultadoVotacaoCrud, TipoSessaoCrud, TipoResultadoVotacaoCrud, TipoSessaoCrud,
VotacaoEditView, VotacaoExpedienteEditView, VotacaoEditView, VotacaoExpedienteEditView,
@ -68,6 +69,9 @@ urlpatterns = [
include(BlocoCrud.get_urls())), include(BlocoCrud.get_urls())),
url(r'^sistema/cargo-bancada/', url(r'^sistema/cargo-bancada/',
include(CargoBancadaCrud.get_urls())), include(CargoBancadaCrud.get_urls())),
url(r'^sistema/resumo-ordenacao/',
ResumoOrdenacaoView.as_view(),
name='resumo_ordenacao'),
url(r'^sessao/(?P<pk>\d+)/adicionar-varias-materias-expediente/', url(r'^sessao/(?P<pk>\d+)/adicionar-varias-materias-expediente/',
AdicionarVariasMateriasExpediente.as_view(), AdicionarVariasMateriasExpediente.as_view(),
name='adicionar_varias_materias_expediente'), name='adicionar_varias_materias_expediente'),

97
sapl/sessao/views.py

@ -13,7 +13,7 @@ from django.utils.decorators import method_decorator
from django.utils.html import strip_tags from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.views.generic import ListView, TemplateView from django.views.generic import FormView, ListView, TemplateView
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
@ -36,13 +36,14 @@ from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm
from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm, from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm,
ListMateriaForm, MesaForm, OradorExpedienteForm, ListMateriaForm, MesaForm, OradorExpedienteForm,
OradorForm, PautaSessaoFilterSet, PresencaForm, OradorForm, PautaSessaoFilterSet, PresencaForm,
ResumoOrdenacaoForm,
SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm, SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm) 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,
PresencaOrdemDia, RegistroVotacao, SessaoPlenaria, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenariaPresenca, TipoExpediente, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, VotoNominal, TipoResultadoVotacao, TipoSessaoPlenaria, VotoNominal,
VotoParlamentar) VotoParlamentar)
@ -930,6 +931,47 @@ class MesaView(FormMixin, DetailView):
return reverse('sapl.sessao:mesa', kwargs={'pk': pk}) return reverse('sapl.sessao:mesa', kwargs={'pk': pk})
class ResumoOrdenacaoView(FormView):
template_name = 'sessao/resumo_ordenacao.html'
form_class = ResumoOrdenacaoForm
def get_success_url(self):
return reverse('sapl.base:sistema')
def get_initial(self):
ordenacao = ResumoOrdenacao.objects.first()
if ordenacao:
return {'primeiro': ordenacao.primeiro,
'segundo': ordenacao.segundo,
'terceiro': ordenacao.terceiro,
'quarto': ordenacao.quarto,
'quinto': ordenacao.quinto,
'sexto': ordenacao.sexto,
'setimo': ordenacao.setimo,
'oitavo': ordenacao.oitavo,
'nono': ordenacao.nono,
'decimo': ordenacao.decimo}
return self.initial.copy()
def form_valid(self, form):
ordenacao = ResumoOrdenacao.objects.get_or_create()[0]
ordenacao.primeiro = form.cleaned_data['primeiro']
ordenacao.segundo = form.cleaned_data['segundo']
ordenacao.terceiro = form.cleaned_data['terceiro']
ordenacao.quarto = form.cleaned_data['quarto']
ordenacao.quinto = form.cleaned_data['quinto']
ordenacao.sexto = form.cleaned_data['sexto']
ordenacao.setimo = form.cleaned_data['setimo']
ordenacao.oitavo = form.cleaned_data['oitavo']
ordenacao.nono = form.cleaned_data['nono']
ordenacao.decimo = form.cleaned_data['decimo']
ordenacao.save()
return HttpResponseRedirect(self.get_success_url())
class ResumoView(DetailView): class ResumoView(DetailView):
template_name = 'sessao/resumo.html' template_name = 'sessao/resumo.html'
model = SessaoPlenaria model = SessaoPlenaria
@ -1121,13 +1163,54 @@ class ResumoView(DetailView):
if not partido_sigla: if not partido_sigla:
partido_sigla = '' partido_sigla = ''
oradores = { oradores = {
'numero_ordem': orador.numero_ordem, 'numero_ordem': orador.numero_ordem,
'parlamentar': parlamentar, 'parlamentar': parlamentar,
'sgl_partido': partido_sigla 'sgl_partido': partido_sigla
} }
oradores_explicacoes.append(oradores) oradores_explicacoes.append(oradores)
context.update({'oradores_explicacoes': oradores_explicacoes}) context.update({'oradores_explicacoes': oradores_explicacoes})
# =====================================================================
# Indica a ordem com a qual o template será renderizado
ordenacao = ResumoOrdenacao.objects.first()
dict_ord_template = {
'cont_mult': 'conteudo_multimidia.html',
'exp': 'expedientes.html',
'id_basica': 'identificacao_basica.html',
'lista_p': 'lista_presenca.html',
'lista_p_o_d': 'lista_presenca_ordem_dia.html',
'mat_exp': 'materias_expediente.html',
'mat_o_d': 'materias_ordem_dia.html',
'mesa_d': 'mesa_diretora.html',
'oradores_exped': 'oradores_expediente.html',
'oradores_expli': 'oradores_explicacoes.html'
}
if ordenacao:
context.update(
{'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro],
'segundo_ordenacao': dict_ord_template[ordenacao.segundo],
'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro],
'quarto_ordenacao': dict_ord_template[ordenacao.quarto],
'quinto_ordenacao': dict_ord_template[ordenacao.quinto],
'sexto_ordenacao': dict_ord_template[ordenacao.sexto],
'setimo_ordenacao': dict_ord_template[ordenacao.setimo],
'oitavo_ordenacao': dict_ord_template[ordenacao.oitavo],
'nono_ordenacao': dict_ord_template[ordenacao.nono],
'decimo_ordenacao': dict_ord_template[ordenacao.decimo]})
else:
context.update(
{'primeiro_ordenacao': dict_ord_template['id_basica'],
'segundo_ordenacao': dict_ord_template['cont_mult'],
'terceiro_ordenacao': dict_ord_template['mesa_d'],
'quarto_ordenacao': dict_ord_template['lista_p'],
'quinto_ordenacao': dict_ord_template['exp'],
'sexto_ordenacao': dict_ord_template['mat_exp'],
'setimo_ordenacao': dict_ord_template['oradores_exped'],
'oitavo_ordenacao': dict_ord_template['lista_p_o_d'],
'nono_ordenacao': dict_ord_template['mat_o_d'],
'decimo_ordenacao': dict_ord_template['oradores_expli']})
return self.render_to_response(context) return self.render_to_response(context)

22
sapl/templates/sessao/resumo.html

@ -19,34 +19,36 @@
</strong> </strong>
</p> </p>
</div> </div>
{% include 'sessao/blocos_resumo/identificacao_basica.html' %}
{% include 'sessao/blocos_resumo/'|add:primeiro_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/conteudo_multimidia.html' %} {% include 'sessao/blocos_resumo/'|add:segundo_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/mesa_diretora.html' %} {% include 'sessao/blocos_resumo/'|add:terceiro_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/lista_presenca.html' %} {% include 'sessao/blocos_resumo/'|add:quarto_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/expedientes.html' %} {% include 'sessao/blocos_resumo/'|add:quinto_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/materias_expediente.html' %} {% include 'sessao/blocos_resumo/'|add:sexto_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/oradores_expediente.html' %} {% include 'sessao/blocos_resumo/'|add:setimo_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/lista_presenca_ordem_dia.html' %} {% include 'sessao/blocos_resumo/'|add:oitavo_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/materias_ordem_dia.html' %} {% include 'sessao/blocos_resumo/'|add:nono_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% include 'sessao/blocos_resumo/oradores_explicacoes.html' %} {% include 'sessao/blocos_resumo/'|add:decimo_ordenacao %}
<br /><br /><br /> <br /><br /><br />
{% endblock detail_content %} {% endblock detail_content %}

13
sapl/templates/sessao/resumo_ordenacao.html

@ -0,0 +1,13 @@
{% extends "crud/form.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}
<h1 class="page-header">Ordenação do Resumo</h1>
{% endblock %}
{% block base_content %}
{% crispy form %}
{% endblock %}

2
sapl/templates/sistema.html

@ -82,7 +82,7 @@
<div class="col-md-6"><a href="{% url 'sapl.sessao:tiporesultadovotacao_list' %}" class="btn btn-link">Tipo de Resultado da Votação</a></div> <div class="col-md-6"><a href="{% url 'sapl.sessao:tiporesultadovotacao_list' %}" class="btn btn-link">Tipo de Resultado da Votação</a></div>
<div class="col-md-6"><a href="#" class="btn btn-link">Cadastro dos endereços dos computadores dos parlamentares</a></div> <div class="col-md-6"><a href="#" class="btn btn-link">Cadastro dos endereços dos computadores dos parlamentares</a></div>
<div class="col-md-6"><a href="{% url 'sapl.sessao:tipoexpediente_list' %}" class="btn btn-link">Tipo de Expediente</a></div> <div class="col-md-6"><a href="{% url 'sapl.sessao:tipoexpediente_list' %}" class="btn btn-link">Tipo de Expediente</a></div>
<div class="col-md-6"><a href="#" class="btn btn-link">Propriedades do Painel Eletrônico</a></div> <div class="col-md-6"><a href="{% url 'sapl.sessao:resumo_ordenacao' %}" class="btn btn-link">Ordenação do Resumo</a></div>
</div> </div>
<hr /> <hr />

Loading…
Cancel
Save