From d69ec04a3f826e760011a24d59c7e4e1f19ee07f Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Tue, 15 Sep 2015 16:53:00 -0300 Subject: [PATCH] Add Page Mesa --- sessao/urls.py | 3 +- sessao/views.py | 101 +++++++++++++++++++- templates/sessao/mesa.html | 44 +++++++++ templates/sessao/sessaoplenaria_detail.html | 1 + 4 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 templates/sessao/mesa.html diff --git a/sessao/urls.py b/sessao/urls.py index 531571a86..3b372e66b 100644 --- a/sessao/urls.py +++ b/sessao/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import include, url -from sessao.views import (ExpedienteView, OradorExpedienteDelete, +from sessao.views import (ExpedienteView, MesaView, OradorExpedienteDelete, OradorExpedienteEdit, OradorExpedienteView, PainelView, PresencaOrdemDiaView, PresencaView, sessao_crud, tipo_expediente_crud, @@ -22,6 +22,7 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [ OradorExpedienteDelete.as_view(), name='oradorexcluir'), url(r'^(?P\d+)/oradorexpediente/editar/(?P\d+)$', OradorExpedienteEdit.as_view(), name='oradoreditar'), + url(r'^(?P\d+)/mesa$', MesaView.as_view(), name='mesa'), ] sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace diff --git a/sessao/views.py b/sessao/views.py index 6496a20cf..04c3f06ef 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -6,9 +6,10 @@ from extra_views import InlineFormSetView from parlamentares.models import Parlamentar from sapl.crud import build_crud -from .models import (ExpedienteMateria, ExpedienteSessao, OradorExpediente, - OrdemDia, PresencaOrdemDia, RegistroVotacao, - SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, +from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao, + IntegranteMesa, OradorExpediente, OrdemDia, + PresencaOrdemDia, RegistroVotacao, SessaoPlenaria, + SessaoPlenariaPresenca, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria) tipo_sessao_crud = build_crud( @@ -356,3 +357,97 @@ class OradorExpedienteView(FormMixin, sessao_crud.CrudDetailView): def get_success_url(self): return self.detail_url + + +class MesaForm(forms.Form): + parlamentar = forms.IntegerField(required=True) + cargo = forms.IntegerField(required=True) + + +class MesaView(FormMixin, sessao_crud.CrudDetailView): + template_name = 'sessao/mesa.html' + form_class = MesaForm + + def get_success_url(self): + return self.detail_url + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + form = MesaForm(request.POST) + + if 'Incluir' in request.POST: + if form.is_valid(): + integrante = IntegranteMesa() + integrante.sessao_plenaria_id = self.object.id + integrante.parlamentar_id = request.POST['parlamentar'] + integrante.cargo_id = request.POST['cargo'] + integrante.save() + + return self.form_valid(form) + + else: + form.clean() + return self.form_valid(form) + elif 'Excluir' in request.POST: + ids = request.POST['composicao_mesa'].split(':') + IntegranteMesa.objects.get( + sessao_plenaria_id=self.object.id, + parlamentar_id=ids[0], + cargo_id=ids[1] + ).delete() + + return self.form_valid(form) + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + context = self.get_context_data(object=self.object) + + mesa = IntegranteMesa.objects.filter( + sessao_plenaria=self.object) + + integrantes = [] + for m in mesa: + parlamentar = Parlamentar.objects.get( + id=m.parlamentar_id) + cargo = CargoMesa.objects.get( + id=m.cargo_id) + integrante = {'parlamentar': parlamentar, 'cargo': cargo} + integrantes.append(integrante) + + context.update({'integrantes': integrantes}) + + return self.render_to_response(context) + + def get_candidatos_mesa(self): + self.object = self.get_object() + lista_parlamentares = [] + lista_integrantes = [] + + for parlamentar in Parlamentar.objects.all(): + if parlamentar.ativo: + lista_parlamentares.append(parlamentar) + + for integrante in IntegranteMesa.objects.filter( + sessao_plenaria=self.object): + parlamentar = Parlamentar.objects.get( + id=integrante.parlamentar_id) + lista_integrantes.append(parlamentar) + + lista = list(set(lista_parlamentares) - set(lista_integrantes)) + lista.sort(key=lambda x: x.nome_parlamentar) + return lista + + def get_cargos_mesa(self): + self.object = self.get_object() + lista_cargos = CargoMesa.objects.all() + lista_cargos_ocupados = [] + + for integrante in IntegranteMesa.objects.filter( + sessao_plenaria=self.object): + cargo = CargoMesa.objects.get( + id=integrante.cargo_id) + lista_cargos_ocupados.append(cargo) + + lista = list(set(lista_cargos) - set(lista_cargos_ocupados)) + lista.sort(key=lambda x: x.descricao) + return lista diff --git a/templates/sessao/mesa.html b/templates/sessao/mesa.html new file mode 100644 index 000000000..77d395f92 --- /dev/null +++ b/templates/sessao/mesa.html @@ -0,0 +1,44 @@ +{% extends "sessao/sessaoplenaria_detail.html" %} +{% load i18n %} + +{% block detail_content %} +
+ Mesa Diretora da Sessão +
+ {% csrf_token %} + +
    +
  • + +
  • + +
  • + {% if view.get_cargos_mesa %}{% endif %} +
    +
    + +
  • + {% if view.get_cargos_mesa %} +
  • + + +
  • + {% endif %} +
+
+
+{% endblock detail_content %} diff --git a/templates/sessao/sessaoplenaria_detail.html b/templates/sessao/sessaoplenaria_detail.html index 70b8f5bb5..433ee27ab 100644 --- a/templates/sessao/sessaoplenaria_detail.html +++ b/templates/sessao/sessaoplenaria_detail.html @@ -8,6 +8,7 @@
{% trans 'Presença' %}
{% trans 'Presença Ordem do Dia' %}
{% trans 'Oradores do Expediente' %}
+
{% trans 'Mesa' %}
{% trans 'Painel Eletrônico' %}
{% endblock sections_nav %}