From 6049ad777e7e3cbf2e1aaf7ac0788a66cd9a08d7 Mon Sep 17 00:00:00 2001 From: Cesar Carvalho Date: Fri, 9 Nov 2018 17:45:52 -0200 Subject: [PATCH] inicio da nova tela da votacao em bloco - em andamento --- sapl/sessao/views.py | 211 +++++++++++++++--- .../votacao/votacao_bloco_expediente.html | 44 ++-- 2 files changed, 195 insertions(+), 60 deletions(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index db33e970f..509904623 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -3218,13 +3218,15 @@ class JustificativaAusenciaCrud(MasterDetailCrud): class VotacaoEmBlocoExpediente(PermissionRequiredForAppCrudMixin, - MateriaLegislativaPesquisaView): + ListView): - filterset_class = VotacaoEmBlocoFilterSet + model = OrdemDia template_name = 'sessao/votacao/votacao_bloco_expediente.html' app_label = AppConfig.label logger = logging.getLogger(__name__) + import ipdb; ipdb.set_trace() + def get_filterset_kwargs(self, filterset_class): super(VotacaoEmBlocoExpediente, self).get_filterset_kwargs(filterset_class) @@ -3310,51 +3312,69 @@ class VotacaoEmBlocoExpediente(PermissionRequiredForAppCrudMixin, reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': pk})) -class VotacaoEmBlocoOrdemDia(VotacaoEmBlocoExpediente): - filterset_class = VotacaoEmBlocoFilterSet +class VotacaoEmBlocoOrdemDia(ListView): + model = OrdemDia template_name = 'sessao/votacao/votacao_bloco_ordem.html' app_label = AppConfig.label logger = logging.getLogger(__name__) + context_object_name = 'ordemdia' - def get_filterset_kwargs(self, filterset_class): - super(VotacaoEmBlocoExpediente, - self).get_filterset_kwargs(filterset_class) + def get_queryset(self): + kwargs = self.kwargs + return OrdemDia.objects.filter(sessao_plenaria_id= + kwargs['pk']) - kwargs = {'data': self.request.GET or None} + def get_context_data(self, **kwargs): + context = super(VotacaoEmBlocoOrdemDia, self).get_context_data(**kwargs) + import ipdb; ipdb.set_trace() + # paginator = context['paginator'] + context['page_obj'] = context['object_list'] - qs = self.get_queryset() + # context['page_range'] = make_pagination( + # page_obj.number, paginator.num_pages) + return context - if 'tramitacao__status' in self.request.GET: - if self.request.GET['tramitacao__status']: - lista_status = filtra_tramitacao_status( - self.request.GET['tramitacao__status']) - lista_materias_adicionadas = retira_materias_ja_adicionadas( - self.kwargs['pk'], OrdemDia) + # def get_filterset_kwargs(self, filterset_class): + # super(VotacaoEmBlocoExpediente, + # self).get_filterset_kwargs(filterset_class) - qs = qs.filter(id__in=lista_status).exclude( - id__in=lista_materias_adicionadas).distinct() + # kwargs = {'data': self.request.GET or None} - kwargs.update({ - 'queryset': qs, - }) - return kwargs + # qs = self.get_queryset() - def post(self, request, *args, **kwargs): - marcadas = request.POST.getlist('materia_id') - username = request.user.username - tipo_votacao = request.POST['tipo_votacao_'] + # if 'tramitacao__status' in self.request.GET: + # if self.request.GET['tramitacao__status']: + # lista_status = filtra_tramitacao_status( + # self.request.GET['tramitacao__status']) - qs = self.get_queryset() + # lista_materias_adicionadas = retira_materias_ja_adicionadas( + # self.kwargs['pk'], OrdemDia) - qs = qs.filter(id__in=marcadas).distinct() + # lista_materias_ordem_dia = OrdemDia.objects.filter( + # sessao_plenaria_id=self.kwargs['pk']) - kwargs.update({ - 'queryset': qs, - 'tipo_votacao': tipo_votacao - }) + # qs = qs.filter(id__in=lista_status).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') + # username = request.user.username + # tipo_votacao = request.POST['tipo_votacao_'] + + # qs = self.get_queryset() + + # qs = qs.filter(id__in=marcadas).distinct() - import pdb; pdb.set_trace() + # kwargs.update({ + # 'queryset': qs, + # 'tipo_votacao': tipo_votacao + # }) # for m in marcadas: # try: @@ -3393,4 +3413,129 @@ class VotacaoEmBlocoOrdemDia(VotacaoEmBlocoExpediente): # ordem_dia.save() return HttpResponseRedirect( - reverse('sapl.sessao:votacaosimbolicabloco', kwargs=self.kwargs)) \ No newline at end of file + reverse('sapl.sessao:votacaosimbolicabloco', kwargs=self.kwargs)) + + +class TelaVotacaoEmBlocoView(SessaoPermissionMixin): + + """ + Votação Simbólica e Secreta + """ + + template_name = 'sessao/votacao/votacao_para_votacaoembloco.html' + form_class = VotacaoForm + + logger = logging.getLogger(__name__) + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + context = self.get_context_data(object=self.object) + url = request.get_full_path() + + # TODO: HACK, VERIFICAR MELHOR FORMA DE FAZER ISSO + if "votsimb" in url: + titulo = _("Votação Simbólica") + elif "votsec" in url: + titulo = _("Votação Secreta") + else: + titulo = _("Não definida") + + ordem_id = kwargs['oid'] + ordem = OrdemDia.objects.get(id=ordem_id) + qtde_presentes = PresencaOrdemDia.objects.filter( + sessao_plenaria_id=self.object.id).count() + + materia = {'materia': ordem.materia, 'ementa': ordem.materia.ementa} + context.update({'votacao_titulo': titulo, + 'materia': materia, + 'total_presentes': qtde_presentes}) + + return self.render_to_response(context) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + form = VotacaoForm(request.POST) + context = self.get_context_data(object=self.object) + url = request.get_full_path() + + # ==================================================== + if "votsimb" in url: + titulo = _("Votação Simbólica") + elif "votsec" in url: + titulo = _("Votação Secreta") + else: + titulo = _("Não definida") + + ordem_id = kwargs['oid'] + ordem = OrdemDia.objects.get(id=ordem_id) + qtde_presentes = PresencaOrdemDia.objects.filter( + sessao_plenaria_id=self.object.id).count() + + materia = {'materia': ordem.materia, 'ementa': ordem.materia.ementa} + context.update({'votacao_titulo': titulo, + 'materia': materia, + 'total_presentes': qtde_presentes}) + context.update({'form': form}) + # ==================================================== + + if 'cancelar-votacao' in request.POST: + ordem.votacao_aberta = False + ordem.save() + return self.form_valid(form) + + if form.is_valid(): + materia_id = kwargs['mid'] + ordem_id = kwargs['oid'] + + qtde_presentes = PresencaOrdemDia.objects.filter( + sessao_plenaria_id=self.object.id).count() + qtde_votos = (int(request.POST['votos_sim']) + + int(request.POST['votos_nao']) + + int(request.POST['abstencoes'])) + + if (int(request.POST['voto_presidente']) == 0): + qtde_presentes -= 1 + + if (qtde_votos > qtde_presentes or qtde_votos < qtde_presentes): + form._errors["total_votos"] = ErrorList([u""]) + return self.render_to_response(context) + elif (qtde_presentes == qtde_votos): + try: + votacao = RegistroVotacao() + votacao.numero_votos_sim = int(request.POST['votos_sim']) + votacao.numero_votos_nao = int(request.POST['votos_nao']) + votacao.numero_abstencoes = int(request.POST['abstencoes']) + votacao.observacao = request.POST['observacao'] + votacao.materia_id = materia_id + votacao.ordem_id = ordem_id + votacao.tipo_resultado_votacao_id = int( + request.POST['resultado_votacao']) + votacao.save() + except Exception as e: + username = request.user.username + self.logger.error('user=' + username + '. Problemas ao salvar RegistroVotacao da materia de id={} ' + 'e da ordem de id={}. '.format(materia_id, ordem_id) + str(e)) + return self.form_invalid(form) + else: + ordem = OrdemDia.objects.get( + sessao_plenaria_id=self.object.id, + materia_id=materia_id) + resultado = TipoResultadoVotacao.objects.get( + id=request.POST['resultado_votacao']) + ordem.resultado = resultado.nome + ordem.votacao_aberta = False + ordem.save() + + return self.form_valid(form) + else: + return self.render_to_response(context) + + def get_tipos_votacao(self): + for tipo in TipoResultadoVotacao.objects.all(): + yield tipo + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('sapl.sessao:ordemdia_list', + kwargs={'pk': pk}) + diff --git a/sapl/templates/sessao/votacao/votacao_bloco_expediente.html b/sapl/templates/sessao/votacao/votacao_bloco_expediente.html index 2d5d0a326..bee161829 100644 --- a/sapl/templates/sessao/votacao/votacao_bloco_expediente.html +++ b/sapl/templates/sessao/votacao/votacao_bloco_expediente.html @@ -9,7 +9,7 @@ {% block detail_content %} {% block buttons %} - {% if filter_url and not filter.form.errors %} + {% comment %} {% if filter_url and not filter.form.errors %}
{% trans 'Fazer nova pesquisa' %}
@@ -18,29 +18,20 @@ {% trans 'Matérias do Expediente' %} - {% endif %} + {% endif %} {% endcomment %} {% endblock %} - {% if filter.form.errors %} - {% crispy filter.form %} - {% else %} - {% if not filter_url %} - {% crispy filter.form %} - {% endif %} - {% endif %} -

- {% if filter_url and not filter.form.errors %} - {% if paginator.count %} + {% comment %} {% if paginator.count %} {% endcomment %}
{% csrf_token %} - {% if paginator.count > 1 %} + {% comment %} {% 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 %} + {% endif %} {% endcomment %}

@@ -54,17 +45,16 @@

-

-

Selecione a(s) matéria(s) desejada(s).

+

Selecione a(s) ordem(s) do dia desejada(s).

- + @@ -72,9 +62,10 @@ @@ -93,17 +84,16 @@

{% trans "Matérias" %}

{% trans "Ordem do dia" %}

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

- {% else %} + {% comment %} {% else %}
-

Nenhuma matéria encontrada com essas especificações

+

Nenhuma ordem do dia aberta.

- {% endif %} + {% endif %} {% endcomment %} -{% endif %} {% endblock detail_content %}