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
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.core.exceptions import ObjectDoesNotExist, ValidationError
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
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.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
@ -171,3 +172,76 @@ class SessaoPlenariaFilterSet(django_filters.FilterSet):
row1,
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_plural = _('Presenças em Sessões Plenárias')
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 sapl.sessao.views import (AdicionarVariasMaterias,
from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
BancadaCrud, CargoBancadaCrud,
EditMateriaOrdemDiaView, ExpedienteMateriaCrud,
ExpedienteView, ListMateriaOrdemDiaView,
@ -50,8 +50,9 @@ urlpatterns = [
include(BancadaCrud.get_urls())),
url(r'^sistema/cargo-bancada/',
include(CargoBancadaCrud.get_urls())),
url(r'^sessao/(?P<pk>\d+)/adicionar-varias-materias/',
AdicionarVariasMaterias.as_view(), name='adicionar_varias_materias'),
url(r'^sessao/(?P<pk>\d+)/adicionar-varias-materias-expediente/',
AdicionarVariasMateriasExpediente.as_view(),
name='adicionar_varias_materias_expediente'),
# PAUTA SESSÃO
url(r'^pauta-sessao$',

102
sapl/sessao/views.py

@ -17,7 +17,7 @@ from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView,
CrudDetailView, CrudListView, CrudUpdateView,
make_pagination)
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,
TipoMateriaLegislativa, Tramitacao)
from sapl.materia.views import MateriaLegislativaPesquisaView
@ -25,7 +25,8 @@ from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Parlamentar
from sapl.sessao.serializers import SessaoPlenariaSerializer
from .forms import (BancadaForm, ExpedienteForm, ExpedienteMateriaForm,
from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
ExpedienteForm, ExpedienteMateriaForm,
ListMateriaForm, MateriaOrdemDiaForm, MesaForm,
PresencaForm, SessaoPlenariaFilterSet, VotacaoEditForm,
VotacaoForm, VotacaoNominalForm)
@ -1962,21 +1963,41 @@ class PesquisarSessaoPlenariaView(FilterView):
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
filterset_class = MateriaLegislativaFilterSet
paginate_by = 10
template_name = 'sessao/adicionar_varias_materias.html'
filterset_class = AdicionarVariasMateriasFilterSet
template_name = 'sessao/adicionar_varias_materias_expediente.html'
def get_filterset_kwargs(self, filterset_class):
super(AdicionarVariasMaterias,
super(AdicionarVariasMateriasExpediente,
self).get_filterset_kwargs(filterset_class)
kwargs = {'data': self.request.GET or None}
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({
'queryset': qs,
@ -1985,60 +2006,41 @@ class AdicionarVariasMaterias(MateriaLegislativaPesquisaView):
def get_context_data(self, **kwargs):
# import ipdb; ipdb.set_trace()
import ipdb; ipdb.set_trace()
context = super(MateriaLegislativaPesquisaView,
self).get_context_data(**kwargs)
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')
qr = self.request.GET.copy()
if 'page' in qr:
del qr['page']
context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''
context['pk_sessao'] = self.kwargs['pk']
return context
def post(self, request, *args, **kwargs):
import ipdb; ipdb.set_trace()
sessao = SessaoPlenaria.objects.get(id=self.kwargs['pk'])
context = self.get_context_data()
materia_id = request.POST['materia_id']
materia = MateriaLegislativa.objects.get(id=materia_id)
try:
materia = MateriaLegislativa.objects.get(
numero=request.POST['numero_materia'],
tipo_id=request.POST['tipo_materia'],
ano=request.POST['ano_materia'])
except ObjectDoesNotExist:
form._errors["error_message"] = ErrorList([u""])
context.update({'form': form})
return self.render_to_response(context)
# TODO: barrar matérias não existentes
# TODO: barrar criação de ordemdia para materias já incluídas
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()
marcadas = request.POST.getlist('materia_id')
for m in marcadas:
if request.POST['tipo_votacao_%s' % m]:
lista_materias_expediente = ExpedienteMateria.objects.filter(
sessao_plenaria_id=self.kwargs[
'pk'])
materia = MateriaLegislativa.objects.get(id=m)
expediente = ExpedienteMateria()
expediente.sessao_plenaria_id = self.kwargs['pk']
expediente.materia_id = materia.id
if lista_materias_expediente:
posicao = lista_materias_expediente.last().numero_ordem + 1
expediente.numero_ordem = posicao
else:
expediente.numero_ordem = 1
expediente.data_ordem = datetime.now()
expediente.tipo_votacao = request.POST['tipo_votacao_%s' % m]
expediente.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
return self.get(request, self.kwargs)

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

@ -9,8 +9,13 @@
{% block detail_content %}
{% if filter_url %}
<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 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 %}
{% if not filter_url %}
@ -21,7 +26,10 @@
{% if filter_url %}
<table class="table table-striped table-bordered">
<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>
{% if paginator.count %}
{% if paginator.count > 1 %}
@ -30,11 +38,13 @@
<h3>{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}</h3>
{% endif %}
<form method="POST" enctype="application/x-www-form-urlencoded">
{% csrf_token %}
{% for m in page_obj %}
<form method="POST" enctype="application/x-www-form-urlencoded">
{% csrf_token %}
<tr>
<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>Autores:</strong>
{% 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>Ementa:</strong>&nbsp;{{ m.ementa|safe }}</br>
<p></p>
<input type="hidden" name="materia_id" value="{{m.id}}"/>
<input type="submit" name="materia_adicionada" value="Adicionar" class="btn btn-primary" />
</tr>
</form>
<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>
</br>
<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 %}
{% else %}
@ -65,8 +80,9 @@
</table>
<input type="submit" value="Adicionar matérias selecionadas" class="btn btn-primary"S>
</form>
{% include "paginacao.html" %}
{% endif %}
{% 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">
{% blocktrans with verbose_name=view.verbose_name %} Reordenar Matérias {% endblocktrans %}
</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 %}
</a>
{% endblock more_buttons %}

Loading…
Cancel
Save