diff --git a/sapl/sessao/migrations/0021_adicionamultiplasmaterias.py b/sapl/sessao/migrations/0021_adicionamultiplasmaterias.py new file mode 100644 index 000000000..7eb3dbd48 --- /dev/null +++ b/sapl/sessao/migrations/0021_adicionamultiplasmaterias.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-03 14:27 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0038_auto_20160612_1506'), + ('sessao', '0020_auto_20160517_1450'), + ] + + operations = [ + migrations.CreateModel( + name='AdicionaMultiplasMaterias', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('materia', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='materia.MateriaLegislativa')), + ], + options={ + 'verbose_name_plural': 'Tabela de Adicionar Várias Matérias', + 'verbose_name': 'Tabela de Adicionar Várias Matérias', + }, + ), + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 14e961fdf..796af349b 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -321,3 +321,14 @@ 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 diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index ef1a4c7be..876dd6a11 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -1,6 +1,7 @@ from django.conf.urls import include, url -from sapl.sessao.views import (BancadaCrud, CargoBancadaCrud, +from sapl.sessao.views import (AdicionarVariasMaterias, + BancadaCrud, CargoBancadaCrud, EditMateriaOrdemDiaView, ExpedienteMateriaCrud, ExpedienteView, ListMateriaOrdemDiaView, MateriaOrdemDiaView, MesaView, OradorCrud, @@ -49,6 +50,8 @@ urlpatterns = [ include(BancadaCrud.get_urls())), url(r'^sistema/cargo-bancada/', include(CargoBancadaCrud.get_urls())), + url(r'^sessao/(?P\d+)/adicionar-varias-materias/', + AdicionarVariasMaterias.as_view(), name='adicionar_varias_materias'), # PAUTA SESSÃO url(r'^pauta-sessao$', diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 7cdb90d2a..308e5197e 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -8,7 +8,7 @@ from django.forms.utils import ErrorList from django.http.response import HttpResponseRedirect from django.utils.html import strip_tags from django.utils.translation import ugettext_lazy as _ -from django.views.generic import ListView, TemplateView +from django.views.generic import FormView, ListView, TemplateView from django.views.generic.edit import FormMixin from django_filters.views import FilterView from rest_framework import generics @@ -17,8 +17,10 @@ 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.models import (Autoria, DocumentoAcessorio, TipoMateriaLegislativa, Tramitacao) +from sapl.materia.views import MateriaLegislativaPesquisaView from sapl.norma.models import NormaJuridica from sapl.parlamentares.models import Parlamentar from sapl.sessao.serializers import SessaoPlenariaSerializer @@ -1958,3 +1960,85 @@ class PesquisarSessaoPlenariaView(FilterView): ) return self.render_to_response(context) + + +class AdicionarVariasMaterias(MateriaLegislativaPesquisaView): + model = MateriaLegislativa + filterset_class = MateriaLegislativaFilterSet + paginate_by = 10 + template_name = 'sessao/adicionar_varias_materias.html' + + def get_filterset_kwargs(self, filterset_class): + super(AdicionarVariasMaterias, + self).get_filterset_kwargs(filterset_class) + + kwargs = {'data': self.request.GET or None} + + qs = self.get_queryset() + + qs = qs.distinct() + + kwargs.update({ + 'queryset': qs, + }) + return kwargs + + 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(' ', ' ', + strip_tags(request.POST['observacao'])) + ordemdia.tipo_votacao = request.POST['tipo_votacao'] + ordemdia.save() + + return self.form_valid(form) + else: + return self.form_invalid(form) diff --git a/sapl/templates/sessao/adicionar_varias_materias.html b/sapl/templates/sessao/adicionar_varias_materias.html new file mode 100644 index 000000000..16c8f9309 --- /dev/null +++ b/sapl/templates/sessao/adicionar_varias_materias.html @@ -0,0 +1,72 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% block actions %}{% endblock %} + +{% block sections_nav %} +{% endblock %} + +{% block detail_content %} + {% if filter_url %} +
+ {% trans 'Fazer nova pesquisa' %} +
+ {% endif %} + + {% if not filter_url %} + {% crispy filter.form %} + {% endif %} + +

+ {% if filter_url %} + + + + + {% if paginator.count %} + {% if paginator.count > 1 %} +

{% blocktrans with paginator.count as total_materias %}Pesquisa concluída com sucesso! Foram encontradas {{total_materias}} matérias.{% endblocktrans %}

+ {% elif paginator.count == 1 %} +

{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}

+ {% endif %} + + {% for m in page_obj %} + + {% csrf_token %} + + + + {% endfor %} + + {% else %} + + + {% endif %} + +

{% trans "Resultados" %}

+ {{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}
+ Autores: + {% for a in m.autoria_set.all %} + {% if not forloop.first %} + ,    {{a.autor|default_if_none:"Não Informado"}} + {% else %} +  {{a.autor|default_if_none:"Não Informado"}} + {% endif %} + {% endfor %} +
+ Localização Atual:  {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não Informada"}}
+ Status:  {{m.tramitacao_set.last.status|default_if_none:"Não Informada"}}
+ Data da última Tramitação:  {{m.tramitacao_set.last.data_tramitacao|default_if_none:"Não Informada"}}
+ Ementa: {{ m.ementa|safe }}
+

+ + +
+

Nenhuma matéria encontrada com essas especificações

+
+ + +{% include "paginacao.html" %} +{% endif %} + +{% endblock detail_content %} diff --git a/sapl/templates/sessao/expedientemateria_list.html b/sapl/templates/sessao/expedientemateria_list.html index 1844124e0..3836447c5 100644 --- a/sapl/templates/sessao/expedientemateria_list.html +++ b/sapl/templates/sessao/expedientemateria_list.html @@ -6,4 +6,7 @@ {% blocktrans with verbose_name=view.verbose_name %} Reordenar Matérias {% endblocktrans %} + + {% blocktrans with verbose_name=view.verbose_name %} Adicionar Várias Matérias {% endblocktrans %} + {% endblock more_buttons %}