diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index d980d0206..28ceb8517 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 (AdicionarVariasMateriasExpediente, + AdicionarVariasMateriasOrdemDia, BancadaCrud, CargoBancadaCrud, EditMateriaOrdemDiaView, ExpedienteMateriaCrud, ExpedienteView, ListMateriaOrdemDiaView, @@ -53,6 +54,9 @@ urlpatterns = [ url(r'^sessao/(?P\d+)/adicionar-varias-materias-expediente/', AdicionarVariasMateriasExpediente.as_view(), name='adicionar_varias_materias_expediente'), + url(r'^sessao/(?P\d+)/adicionar-varias-materias-ordem-dia/', + AdicionarVariasMateriasOrdemDia.as_view(), + name='adicionar_varias_materias_ordem_dia'), # PAUTA SESSÃO url(r'^pauta-sessao$', diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 318db7b26..9fb5417de 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -6,6 +6,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.urlresolvers import reverse from django.forms.utils import ErrorList from django.http.response import HttpResponseRedirect +from django.utils.datastructures import MultiValueDictKeyError from django.utils.html import strip_tags from django.utils.translation import ugettext_lazy as _ from django.views.generic import FormView, ListView, TemplateView @@ -1971,15 +1972,14 @@ def filtra_tramitacao_ordem_dia(): 'materia_id', flat=True) -def retira_materias_ja_adicionadas(id_sessao): - lista = ExpedienteMateria.objects.filter( +def retira_materias_ja_adicionadas(id_sessao, model): + lista = model.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 = AdicionarVariasMateriasFilterSet template_name = 'sessao/adicionar_varias_materias_expediente.html' @@ -1994,7 +1994,7 @@ class AdicionarVariasMateriasExpediente(MateriaLegislativaPesquisaView): lista_ordem_dia = filtra_tramitacao_ordem_dia() lista_materias_adicionadas = retira_materias_ja_adicionadas( - self.kwargs['pk']) + self.kwargs['pk'], ExpedienteMateria) qs = qs.filter(id__in=lista_ordem_dia).exclude( id__in=lista_materias_adicionadas).distinct() @@ -2024,7 +2024,16 @@ class AdicionarVariasMateriasExpediente(MateriaLegislativaPesquisaView): marcadas = request.POST.getlist('materia_id') for m in marcadas: - if request.POST['tipo_votacao_%s' % m]: + try: + tipo_votacao = request.POST['tipo_votacao_%s' % m] + except MultiValueDictKeyError: + msg = _('Formulário Inválido. Você esqueceu de selecionar ' + + 'o tipo de votação de %s' % + MateriaLegislativa.objects.get(id=m)) + messages.add_message(request, messages.ERROR, msg) + return self.get(request, self.kwargs) + + if tipo_votacao: lista_materias_expediente = ExpedienteMateria.objects.filter( sessao_plenaria_id=self.kwargs[ 'pk']) @@ -2044,3 +2053,63 @@ class AdicionarVariasMateriasExpediente(MateriaLegislativaPesquisaView): expediente.save() return self.get(request, self.kwargs) + + +class AdicionarVariasMateriasOrdemDia(AdicionarVariasMateriasExpediente): + filterset_class = AdicionarVariasMateriasFilterSet + template_name = 'sessao/adicionar_varias_materias_ordem.html' + + def get_filterset_kwargs(self, filterset_class): + super(AdicionarVariasMateriasExpediente, + self).get_filterset_kwargs(filterset_class) + + kwargs = {'data': self.request.GET or None} + + qs = self.get_queryset() + + lista_ordem_dia = filtra_tramitacao_ordem_dia() + + lista_materias_adicionadas = retira_materias_ja_adicionadas( + self.kwargs['pk'], OrdemDia) + + qs = qs.filter(id__in=lista_ordem_dia).exclude( + id__in=lista_materias_adicionadas).distinct() + + kwargs.update({ + 'queryset': qs, + }) + return kwargs + + def post(self, request, *args, **kwargs): + marcadas = request.POST.getlist('materia_id') + + for m in marcadas: + try: + tipo_votacao = request.POST['tipo_votacao_%s' % m] + except MultiValueDictKeyError: + msg = _('Formulário Inválido. Você esqueceu de selecionar ' + + 'o tipo de votação de %s' % + MateriaLegislativa.objects.get(id=m)) + messages.add_message(request, messages.ERROR, msg) + return self.get(request, self.kwargs) + + if tipo_votacao: + lista_materias_ordem_dia = OrdemDia.objects.filter( + sessao_plenaria_id=self.kwargs[ + 'pk']) + + materia = MateriaLegislativa.objects.get(id=m) + + ordem_dia = OrdemDia() + ordem_dia.sessao_plenaria_id = self.kwargs['pk'] + ordem_dia.materia_id = materia.id + if lista_materias_ordem_dia: + posicao = lista_materias_ordem_dia.last().numero_ordem + 1 + ordem_dia.numero_ordem = posicao + else: + ordem_dia.numero_ordem = 1 + ordem_dia.data_ordem = datetime.now() + ordem_dia.tipo_votacao = tipo_votacao + ordem_dia.save() + + return self.get(request, self.kwargs) diff --git a/sapl/templates/sessao/adicionar_varias_materias_expediente.html b/sapl/templates/sessao/adicionar_varias_materias_expediente.html index eee7b295e..eb224c8d6 100644 --- a/sapl/templates/sessao/adicionar_varias_materias_expediente.html +++ b/sapl/templates/sessao/adicionar_varias_materias_expediente.html @@ -6,17 +6,25 @@ {% block sections_nav %} {% endblock %} + + + + {% block detail_content %} - {% if filter_url %} - + {% block buttons %} + + {% if filter_url %} + + + - + {% endif %} - {% endif %} + {% endblock %} {% if not filter_url %} {% crispy filter.form %} diff --git a/sapl/templates/sessao/adicionar_varias_materias_ordem.html b/sapl/templates/sessao/adicionar_varias_materias_ordem.html new file mode 100644 index 000000000..6cb555ee7 --- /dev/null +++ b/sapl/templates/sessao/adicionar_varias_materias_ordem.html @@ -0,0 +1,18 @@ +{% extends "sessao/adicionar_varias_materias_expediente.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block buttons %} + + {% if filter_url %} + + + + + {% endif %} + + {% endblock %} \ No newline at end of file diff --git a/sapl/templates/sessao/materia_ordemdia_list.html b/sapl/templates/sessao/materia_ordemdia_list.html index 33d33fe84..bbf2708fb 100644 --- a/sapl/templates/sessao/materia_ordemdia_list.html +++ b/sapl/templates/sessao/materia_ordemdia_list.html @@ -78,7 +78,7 @@ Matérias da Ordem do Dia         - + {% trans 'Adicionar Várias Matérias' %} {% endblock detail_content %}