Browse Source

Cria a funcionalidade de Adicionar Varias Materias para Expediente

pull/519/head
Eduardo Calil 9 years ago
parent
commit
254dfa2c67
  1. 78
      sapl/sessao/forms.py
  2. 22
      sapl/sessao/migrations/0022_auto_20160805_0943.py
  3. 11
      sapl/sessao/models.py
  4. 7
      sapl/sessao/urls.py
  5. 102
      sapl/sessao/views.py
  6. 34
      sapl/templates/sessao/adicionar_varias_materias_expediente.html
  7. 2
      sapl/templates/sessao/expedientemateria_list.html

78
sapl/sessao/forms.py

@ -2,15 +2,16 @@ from datetime import datetime
import django_filters import django_filters
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Fieldset, Layout from crispy_forms.layout import HTML, Button, Fieldset, Layout
from django import forms from django import forms
from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _ 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.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.utils import RANGE_DIAS_MES, RANGE_MESES from sapl.utils import RANGE_DIAS_MES, RANGE_MESES, autor_label, autor_modal
from .models import Bancada, ExpedienteMateria, SessaoPlenaria from .models import Bancada, ExpedienteMateria, SessaoPlenaria
@ -171,3 +172,76 @@ class SessaoPlenariaFilterSet(django_filters.FilterSet):
row1, row1,
form_actions(save_label='Pesquisar')) form_actions(save_label='Pesquisar'))
) )
class AdicionarVariasMateriasFilterSet(MateriaLegislativaFilterSet):
class Meta:
model = MateriaLegislativa
fields = ['numero',
'numero_protocolo',
'ano',
'tipo',
'data_apresentacao',
'data_publicacao',
'autoria__autor__tipo',
'autoria__partido',
'relatoria__parlamentar_id',
'local_origem_externa',
'em_tramitacao',
]
order_by = (
('', 'Selecione'),
('dataC', 'Data, Tipo, Ano, Numero - Ordem Crescente'),
('dataD', 'Data, Tipo, Ano, Numero - Ordem Decrescente'),
('tipoC', 'Tipo, Ano, Numero, Data - Ordem Crescente'),
('tipoD', 'Tipo, Ano, Numero, Data - Ordem Decrescente')
)
def __init__(self, *args, **kwargs):
super(MateriaLegislativaFilterSet, self).__init__(*args, **kwargs)
self.filters['tipo'].label = 'Tipo de Matéria'
self.filters['autoria__autor__tipo'].label = 'Tipo de Autor'
self.filters['autoria__partido'].label = 'Partido do Autor'
self.filters['relatoria__parlamentar_id'].label = 'Relatoria'
row1 = to_row(
[('tipo', 12)])
row2 = to_row(
[('numero', 4),
('ano', 4),
('numero_protocolo', 4)])
row3 = to_row(
[('data_apresentacao', 6),
('data_publicacao', 6)])
row4 = to_row(
[('autoria__autor', 0),
(Button('pesquisar',
'Pesquisar Autor',
css_class='btn btn-primary btn-sm'), 2),
(Button('limpar',
'limpar Autor',
css_class='btn btn-primary btn-sm'), 10)])
row5 = to_row(
[('autoria__autor__tipo', 6),
('autoria__partido', 6)])
row6 = to_row(
[('relatoria__parlamentar_id', 6),
('local_origem_externa', 6)])
row7 = to_row(
[('em_tramitacao', 6),
('o', 6)])
row8 = to_row(
[('ementa', 12)])
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Pesquisa de Matéria'),
row1, row2, row3,
HTML(autor_label),
HTML(autor_modal),
row4, row5, row6, row7, row8,
form_actions(save_label='Pesquisar'))
)

22
sapl/sessao/migrations/0022_auto_20160805_0943.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-08-05 12:43
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('sessao', '0021_adicionamultiplasmaterias'),
]
operations = [
migrations.RemoveField(
model_name='adicionamultiplasmaterias',
name='materia',
),
migrations.DeleteModel(
name='AdicionaMultiplasMaterias',
),
]

11
sapl/sessao/models.py

@ -321,14 +321,3 @@ class SessaoPlenariaPresenca(models.Model):
verbose_name = _('Presença em Sessão Plenária') verbose_name = _('Presença em Sessão Plenária')
verbose_name_plural = _('Presenças em Sessões Plenárias') verbose_name_plural = _('Presenças em Sessões Plenárias')
ordering = ['parlamentar__nome_parlamentar'] ordering = ['parlamentar__nome_parlamentar']
class AdicionaMultiplasMaterias(models.Model):
materia = models.ForeignKey(MateriaLegislativa)
class Meta:
verbose_name = _('Tabela de Adicionar Várias Matérias')
verbose_name_plural = _('Tabela de Adicionar Várias Matérias')
def __str__(self):
return self.materia

7
sapl/sessao/urls.py

@ -1,6 +1,6 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sapl.sessao.views import (AdicionarVariasMaterias, from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
BancadaCrud, CargoBancadaCrud, BancadaCrud, CargoBancadaCrud,
EditMateriaOrdemDiaView, ExpedienteMateriaCrud, EditMateriaOrdemDiaView, ExpedienteMateriaCrud,
ExpedienteView, ListMateriaOrdemDiaView, ExpedienteView, ListMateriaOrdemDiaView,
@ -50,8 +50,9 @@ urlpatterns = [
include(BancadaCrud.get_urls())), include(BancadaCrud.get_urls())),
url(r'^sistema/cargo-bancada/', url(r'^sistema/cargo-bancada/',
include(CargoBancadaCrud.get_urls())), include(CargoBancadaCrud.get_urls())),
url(r'^sessao/(?P<pk>\d+)/adicionar-varias-materias/', url(r'^sessao/(?P<pk>\d+)/adicionar-varias-materias-expediente/',
AdicionarVariasMaterias.as_view(), name='adicionar_varias_materias'), AdicionarVariasMateriasExpediente.as_view(),
name='adicionar_varias_materias_expediente'),
# PAUTA SESSÃO # PAUTA SESSÃO
url(r'^pauta-sessao$', url(r'^pauta-sessao$',

102
sapl/sessao/views.py

@ -17,7 +17,7 @@ from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView,
CrudDetailView, CrudListView, CrudUpdateView, CrudDetailView, CrudListView, CrudUpdateView,
make_pagination) make_pagination)
from sapl.crud.masterdetail import MasterDetailCrud from sapl.crud.masterdetail import MasterDetailCrud
from sapl.materia.views import MateriaLegislativaFilterSet from sapl.materia.forms import pega_ultima_tramitacao
from sapl.materia.models import (Autoria, DocumentoAcessorio, from sapl.materia.models import (Autoria, DocumentoAcessorio,
TipoMateriaLegislativa, Tramitacao) TipoMateriaLegislativa, Tramitacao)
from sapl.materia.views import MateriaLegislativaPesquisaView from sapl.materia.views import MateriaLegislativaPesquisaView
@ -25,7 +25,8 @@ from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Parlamentar from sapl.parlamentares.models import Parlamentar
from sapl.sessao.serializers import SessaoPlenariaSerializer from sapl.sessao.serializers import SessaoPlenariaSerializer
from .forms import (BancadaForm, ExpedienteForm, ExpedienteMateriaForm, from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
ExpedienteForm, ExpedienteMateriaForm,
ListMateriaForm, MateriaOrdemDiaForm, MesaForm, ListMateriaForm, MateriaOrdemDiaForm, MesaForm,
PresencaForm, SessaoPlenariaFilterSet, VotacaoEditForm, PresencaForm, SessaoPlenariaFilterSet, VotacaoEditForm,
VotacaoForm, VotacaoNominalForm) VotacaoForm, VotacaoNominalForm)
@ -1962,21 +1963,41 @@ class PesquisarSessaoPlenariaView(FilterView):
return self.render_to_response(context) return self.render_to_response(context)
class AdicionarVariasMaterias(MateriaLegislativaPesquisaView): def filtra_tramitacao_ordem_dia():
lista = pega_ultima_tramitacao()
return Tramitacao.objects.filter(
id__in=lista,
status__descricao='Ordem do Dia').distinct().values_list(
'materia_id', flat=True)
def retira_materias_ja_adicionadas(id_sessao):
lista = ExpedienteMateria.objects.filter(
sessao_plenaria_id=id_sessao)
lista_id_materias = [l.materia_id for l in lista]
return lista_id_materias
class AdicionarVariasMateriasExpediente(MateriaLegislativaPesquisaView):
model = MateriaLegislativa model = MateriaLegislativa
filterset_class = MateriaLegislativaFilterSet filterset_class = AdicionarVariasMateriasFilterSet
paginate_by = 10 template_name = 'sessao/adicionar_varias_materias_expediente.html'
template_name = 'sessao/adicionar_varias_materias.html'
def get_filterset_kwargs(self, filterset_class): def get_filterset_kwargs(self, filterset_class):
super(AdicionarVariasMaterias, super(AdicionarVariasMateriasExpediente,
self).get_filterset_kwargs(filterset_class) self).get_filterset_kwargs(filterset_class)
kwargs = {'data': self.request.GET or None} kwargs = {'data': self.request.GET or None}
qs = self.get_queryset() qs = self.get_queryset()
qs = qs.distinct() lista_ordem_dia = filtra_tramitacao_ordem_dia()
lista_materias_adicionadas = retira_materias_ja_adicionadas(
self.kwargs['pk'])
qs = qs.filter(id__in=lista_ordem_dia).exclude(
id__in=lista_materias_adicionadas).distinct()
kwargs.update({ kwargs.update({
'queryset': qs, 'queryset': qs,
@ -1985,60 +2006,41 @@ class AdicionarVariasMaterias(MateriaLegislativaPesquisaView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
# import ipdb; ipdb.set_trace() # import ipdb; ipdb.set_trace()
import ipdb; ipdb.set_trace()
context = super(MateriaLegislativaPesquisaView, context = super(MateriaLegislativaPesquisaView,
self).get_context_data(**kwargs) self).get_context_data(**kwargs)
context['title'] = _('Pesquisar Matéria Legislativa') context['title'] = _('Pesquisar Matéria Legislativa')
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
self.filterset.form.fields['o'].label = _('Ordenação') self.filterset.form.fields['o'].label = _('Ordenação')
qr = self.request.GET.copy() qr = self.request.GET.copy()
if 'page' in qr:
del qr['page']
context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''
context['pk_sessao'] = self.kwargs['pk'] context['pk_sessao'] = self.kwargs['pk']
return context return context
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
import ipdb; ipdb.set_trace() marcadas = request.POST.getlist('materia_id')
sessao = SessaoPlenaria.objects.get(id=self.kwargs['pk']) for m in marcadas:
if request.POST['tipo_votacao_%s' % m]:
context = self.get_context_data() lista_materias_expediente = ExpedienteMateria.objects.filter(
sessao_plenaria_id=self.kwargs[
materia_id = request.POST['materia_id'] 'pk'])
materia = MateriaLegislativa.objects.get(id=materia_id)
materia = MateriaLegislativa.objects.get(id=m)
try:
materia = MateriaLegislativa.objects.get( expediente = ExpedienteMateria()
numero=request.POST['numero_materia'], expediente.sessao_plenaria_id = self.kwargs['pk']
tipo_id=request.POST['tipo_materia'], expediente.materia_id = materia.id
ano=request.POST['ano_materia']) if lista_materias_expediente:
except ObjectDoesNotExist: posicao = lista_materias_expediente.last().numero_ordem + 1
form._errors["error_message"] = ErrorList([u""]) expediente.numero_ordem = posicao
context.update({'form': form}) else:
return self.render_to_response(context) expediente.numero_ordem = 1
expediente.data_ordem = datetime.now()
# TODO: barrar matérias não existentes expediente.tipo_votacao = request.POST['tipo_votacao_%s' % m]
# TODO: barrar criação de ordemdia para materias já incluídas expediente.save()
expediente = ExpedienteMateria()
expediente.sessao_plenaria_id = self.kwargs['pk']
expediente.materia_id = materia.id
expediente.numero_ordem = request.POST['numero_ordem']
expediente.data_ordem = datetime.now()
expediente.observacao = sub('&nbsp;', ' ',
strip_tags(request.POST['observacao']))
ordemdia.tipo_votacao = request.POST['tipo_votacao']
ordemdia.save()
return self.form_valid(form) return self.get(request, self.kwargs)
else:
return self.form_invalid(form)

34
sapl/templates/sessao/adicionar_varias_materias.html → sapl/templates/sessao/adicionar_varias_materias_expediente.html

@ -9,8 +9,13 @@
{% block detail_content %} {% block detail_content %}
{% if filter_url %} {% if filter_url %}
<div class="actions btn-group pull-right" role="group"> <div class="actions btn-group pull-right" role="group">
<a href="{% url 'sapl.sessao:adicionar_varias_materias' pk_sessao %}" class="btn btn-default">{% trans 'Fazer nova pesquisa' %}</a> <a href="{% url 'sapl.sessao:adicionar_varias_materias_expediente' pk_sessao %}" class="btn btn-default">{% trans 'Fazer nova pesquisa' %}</a>
</div> </div>
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'sapl.sessao:expedientemateria_list' pk_sessao %}" class="btn btn-default">{% trans 'Matérias do Expediente' %}</a>
</div>
{% endif %} {% endif %}
{% if not filter_url %} {% if not filter_url %}
@ -21,7 +26,10 @@
{% if filter_url %} {% if filter_url %}
<table class="table table-striped table-bordered"> <table class="table table-striped table-bordered">
<thead class="thead-default"> <thead class="thead-default">
<tr><td><h3>{% trans "Resultados" %}</h3></td></tr> <tr>
<td><h3>{% trans "Matérias" %}</h3></td>
<td><h3>{% trans "Tipo de Votação" %}</h3></td>
</tr>
</thead> </thead>
{% if paginator.count %} {% if paginator.count %}
{% if paginator.count > 1 %} {% if paginator.count > 1 %}
@ -30,11 +38,13 @@
<h3>{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}</h3> <h3>{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}</h3>
{% endif %} {% endif %}
<form method="POST" enctype="application/x-www-form-urlencoded">
{% csrf_token %}
{% for m in page_obj %} {% for m in page_obj %}
<form method="POST" enctype="application/x-www-form-urlencoded">
{% csrf_token %}
<tr> <tr>
<td> <td>
<input type="checkbox" name="materia_id" value="{{m.id}}" {% if check %} checked {% endif %}/>
<strong><a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}</strong></a></br> <strong><a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}</strong></a></br>
<strong>Autores:</strong> <strong>Autores:</strong>
{% for a in m.autoria_set.all %} {% for a in m.autoria_set.all %}
@ -50,10 +60,15 @@
<strong>Data da última Tramitação:</strong> &nbsp;{{m.tramitacao_set.last.data_tramitacao|default_if_none:"Não Informada"}}</br> <strong>Data da última Tramitação:</strong> &nbsp;{{m.tramitacao_set.last.data_tramitacao|default_if_none:"Não Informada"}}</br>
<strong>Ementa:</strong>&nbsp;{{ m.ementa|safe }}</br> <strong>Ementa:</strong>&nbsp;{{ m.ementa|safe }}</br>
<p></p> <p></p>
<input type="hidden" name="materia_id" value="{{m.id}}"/> <td class="col-md-3">
<input type="submit" name="materia_adicionada" value="Adicionar" class="btn btn-primary" /> <input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="1"> <label for="sexo">Simbólica</label>
</tr> </br>
</form> <input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="2"> <label for="sexo">Nominal</label>
</br>
<input type="radio" name="tipo_votacao_{{m.id}}" id="tipo_votacao_{{m.id}}" value="3"> <label for="sexo">Secreta</label>
</td>
</td>
</tr>
{% endfor %} {% endfor %}
{% else %} {% else %}
@ -65,8 +80,9 @@
</table> </table>
<input type="submit" value="Adicionar matérias selecionadas" class="btn btn-primary"S>
</form>
{% include "paginacao.html" %}
{% endif %} {% endif %}
{% endblock detail_content %} {% endblock detail_content %}

2
sapl/templates/sessao/expedientemateria_list.html

@ -6,7 +6,7 @@
<a href="{% url 'sapl.sessao:reordenar_expediente' root_pk %}" class="btn btn-default"> <a href="{% url 'sapl.sessao:reordenar_expediente' root_pk %}" class="btn btn-default">
{% blocktrans with verbose_name=view.verbose_name %} Reordenar Matérias {% endblocktrans %} {% blocktrans with verbose_name=view.verbose_name %} Reordenar Matérias {% endblocktrans %}
</a> </a>
<a href="{% url 'sapl.sessao:adicionar_varias_materias' root_pk %}" class="btn btn-default"> <a href="{% url 'sapl.sessao:adicionar_varias_materias_expediente' root_pk %}" class="btn btn-default">
{% blocktrans with verbose_name=view.verbose_name %} Adicionar Várias Matérias {% endblocktrans %} {% blocktrans with verbose_name=view.verbose_name %} Adicionar Várias Matérias {% endblocktrans %}
</a> </a>
{% endblock more_buttons %} {% endblock more_buttons %}

Loading…
Cancel
Save