From a1738c73ac7b0ab581f1f47ca466958209d9cc77 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Fri, 28 Aug 2015 15:50:09 -0300 Subject: [PATCH] Add Presenca View --- sessao/models.py | 1 + sessao/views.py | 65 +++++++++++++++++++++++++++++++--- templates/sessao/presenca.html | 8 ++--- 3 files changed, 66 insertions(+), 8 deletions(-) diff --git a/sessao/models.py b/sessao/models.py index cc3cf2532..d6deec1bf 100644 --- a/sessao/models.py +++ b/sessao/models.py @@ -263,6 +263,7 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar return _('Votação: %(votacao)s - Parlamentar: %(parlamentar)s') % { 'votacao': self.votacao, 'parlamentar': self.parlamentar} + class SessaoPlenariaPresenca(models.Model): sessao_plen = models.ForeignKey(SessaoPlenaria) parlamentar = models.ForeignKey(Parlamentar) diff --git a/sessao/views.py b/sessao/views.py index e30834778..8780621d3 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -1,7 +1,9 @@ +from django import forms from django.utils.translation import ugettext_lazy as _ +from django.views.generic.edit import FormMixin from extra_views import InlineFormSetView +from parlamentares.models import Parlamentar from sapl.crud import build_crud - from .models import (ExpedienteMateria, ExpedienteSessao, OrdemDia, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria) @@ -89,7 +91,62 @@ class ExpedienteView(InlineFormSetView): extra = 1 -class PresencaView(InlineFormSetView): - model = SessaoPlenaria - inline_model = SessaoPlenariaPresenca +class PresencaForm(forms.Form): + presenca = forms.CharField(required=False, initial=False) + parlamentar = forms.CharField(required=False, max_length=20) + + +class PresencaView(FormMixin, sessao_crud.CrudDetailView): template_name = 'sessao/presenca.html' + form_class = PresencaForm + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + form = self.get_form() + + if form.is_valid(): + # Pegar os presentes salvos no banco + presentes_banco = SessaoPlenariaPresenca.objects.filter( + sessao_plen_id=self.object.id) + + # Id dos parlamentares presentes + marcados = request.POST.getlist('presenca') + + # Deletar os que foram desmarcadors + deletar = set(set(presentes_banco) - set(marcados)) + for d in deletar: + SessaoPlenariaPresenca.objects.filter( + parlamentar_id=d.parlamentar_id).delete() + + for p in marcados: + sessao = SessaoPlenariaPresenca() + sessao.sessao_plen = self.object + sessao.parlamentar = Parlamentar.objects.get(id=p) + sessao.save() + + return self.form_valid(form) + else: + return self.form_invalid(form) + + def get_success_url(self): + return self.detail_url + + def get_parlamentares(self): + self.object = self.get_object() + + presencas = SessaoPlenariaPresenca.objects.filter( + sessao_plen_id=self.object.id + ) + + presentes = [] + for p in presencas: + presentes.append(p.parlamentar.id) + + for parlamentar in Parlamentar.objects.all(): + if parlamentar.ativo: + try: + presentes.index(parlamentar.id) + except ValueError: + yield (parlamentar, False) + else: + yield (parlamentar, True) diff --git a/templates/sessao/presenca.html b/templates/sessao/presenca.html index f17f7791f..a975c1dcc 100644 --- a/templates/sessao/presenca.html +++ b/templates/sessao/presenca.html @@ -13,11 +13,11 @@ - {{formset}} - {% for fieldname in view.get_parlamentares %} + + {% for parlamentar, check in view.get_parlamentares %} {% endfor %}