diff --git a/sapl/painel/views.py b/sapl/painel/views.py index 847518898..88d0aa785 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -82,10 +82,114 @@ def votacao_aberta(request): return votacoes_abertas.first(), None +def votacao(context,context_vars): + + parlamentar = context_vars['votante'].parlamentar + parlamentar_presente = False + if parlamentar.id in context_vars['presentes']: + parlamentar_presente = True + context_vars.update({'parlamentar': parlamentar}) + else: + context.update({'error_message': + 'Não há presentes na Sessão com a ' + 'matéria em votação.'}) + + if parlamentar_presente: + voto = [] + if context_vars['ordem_dia']: + voto = VotoParlamentar.objects.filter( + ordem=context_vars['ordem_dia']) + elif context_vars['expediente']: + voto = VotoParlamentar.objects.filter( + expediente=context_vars['expediente']) + + if voto: + try: + voto = voto.get(parlamentar=context_vars['parlamentar']) + context.update({'voto_parlamentar': voto.voto}) + except ObjectDoesNotExist: + context.update( + {'voto_parlamentar': 'Voto não ' + 'computado.'}) + else: + context.update({'error_message': + 'Você não está presente na ' + 'Ordem do Dia/Expediente em votação.'}) + return context, context_vars + +def sessao_votacao(context,context_vars): + pk = context_vars['sessao'].pk + context.update({'sessao_id': pk}) + context.update({'sessao': context_vars['sessao'], + 'data': context_vars['sessao'].data_inicio, + 'hora': context_vars['sessao'].hora_inicio}) + + # Inicializa presentes + presentes = [] + ordem_dia = get_materia_aberta(pk) + expediente = get_materia_expediente_aberta(pk) + errors_msgs = {'materia':'Não há nenhuma matéria aberta.', + 'registro':'A votação para esta matéria já encerrou.', + 'tipo':'A matéria aberta não é do tipo votação nominal.'} + + materia_aberta = None + if ordem_dia: + materia_aberta = ordem_dia + presentes = PresencaOrdemDia.objects.filter( + sessao_plenaria_id=pk).values_list( + 'parlamentar_id', flat=True).distinct() + elif expediente: + materia_aberta = expediente + presentes = SessaoPlenariaPresenca.objects.filter( + sessao_plenaria_id=pk).values_list( + 'parlamentar_id', flat=True).distinct() + + context_vars.update({'ordem_dia': ordem_dia, + 'expediente':expediente, + 'presentes': presentes}) + + # Verifica votação aberta + # Se aberta, verifica se é nominal. ID nominal == 2 + erro = None + if not materia_aberta: + erro = 'materia' + elif materia_aberta.registro_aberto: + erro = 'registro' + elif materia_aberta.tipo_votacao != VOTACAO_NOMINAL: + erro = 'tipo' + + if not erro: + context.update({'materia': materia_aberta.materia, + 'ementa': materia_aberta.materia.ementa}) + context, context_vars = votacao(context, context_vars) + else: + context.update({'error_message': errors_msgs[erro]}) + + return context, context_vars + + +def can_vote(context, context_vars, request): + context.update({'permissao': True}) + + # Pega sessão + sessao, msg = votacao_aberta(request) + context_vars.update({'sessao':sessao}) + if sessao and not msg: + context, context_vars = sessao_votacao(context, context_vars) + elif not sessao and msg: + return HttpResponseRedirect('/') + else: + context.update( + {'error_message': 'Não há nenhuma sessão com matéria aberta.'}) + return context, context_vars + + def votante_view(request): # Pega o votante relacionado ao usuário template_name = 'painel/voto_nominal.html' context = {} + context_vars = {} + try: votante = Votante.objects.get(user=request.user) except ObjectDoesNotExist: @@ -95,96 +199,12 @@ def votante_view(request): }) return render(request, template_name, context) - + context_vars = {'votante': votante} context = {'head_title': str(_('Votação Individual'))} # Verifica se usuário possui permissão para votar if 'parlamentares.can_vote' in request.user.get_all_permissions(): - context.update({'permissao': True}) - - # Pega sessão - sessao, msg = votacao_aberta(request) - - if sessao and not msg: - pk = sessao.pk - context.update({'sessao_id': pk}) - context.update({'sessao': sessao, - 'data': sessao.data_inicio, - 'hora': sessao.hora_inicio}) - - # Inicializa presentes - presentes = [] - - # Verifica votação aberta - # Se aberta, verifica se é nominal. ID nominal == 2 - ordem_dia = get_materia_aberta(pk) - expediente = get_materia_expediente_aberta(pk) - - materia_aberta = None - if ordem_dia: - materia_aberta = ordem_dia - presentes = PresencaOrdemDia.objects.filter( - sessao_plenaria_id=pk).values_list( - 'parlamentar_id', flat=True).distinct() - elif expediente: - materia_aberta = expediente - presentes = SessaoPlenariaPresenca.objects.filter( - sessao_plenaria_id=pk).values_list( - 'parlamentar_id', flat=True).distinct() - - if materia_aberta: - if not materia_aberta.registro_aberto: - if materia_aberta.tipo_votacao == VOTACAO_NOMINAL: - context.update({'materia': materia_aberta.materia, - 'ementa': materia_aberta.materia.ementa}) - - parlamentar = votante.parlamentar - parlamentar_presente = False - if parlamentar.id in presentes: - parlamentar_presente = True - else: - context.update({'error_message': - 'Não há presentes na Sessão com a ' - 'matéria em votação.'}) - - if parlamentar_presente: - voto = [] - if ordem_dia: - voto = VotoParlamentar.objects.filter( - ordem=ordem_dia) - elif expediente: - voto = VotoParlamentar.objects.filter( - expediente=expediente) - - if voto: - try: - voto = voto.get(parlamentar=parlamentar) - context.update({'voto_parlamentar': voto.voto}) - except ObjectDoesNotExist: - context.update( - {'voto_parlamentar': 'Voto não ' - 'computado.'}) - else: - context.update({'error_message': - 'Você não está presente na ' - 'Ordem do Dia/Expediente em votação.'}) - else: - context.update( - {'error_message': 'A matéria aberta não é do tipo ' - 'votação nominal.'}) - else: - context.update( - {'error_message': 'A votação para esta matéria já encerrou.'}) - else: - context.update( - {'error_message': 'Não há nenhuma matéria aberta.'}) - - elif not sessao and msg: - return HttpResponseRedirect('/') - - else: - context.update( - {'error_message': 'Não há nenhuma sessão com matéria aberta.'}) + context, context_vars = can_vote(context, context_vars, request) else: context.update({'permissao': False, @@ -192,36 +212,36 @@ def votante_view(request): # Salva o voto if request.method == 'POST': - if ordem_dia: + if context_vars['ordem_dia']: try: voto = VotoParlamentar.objects.get( - parlamentar=parlamentar, - ordem=ordem_dia) + parlamentar=context_vars['parlamentar'], + ordem=context_vars['ordem_dia']) except ObjectDoesNotExist: voto = VotoParlamentar.objects.create( - parlamentar=parlamentar, + parlamentar=context_vars['parlamentar'], voto=request.POST['voto'], user=request.user, ip=get_client_ip(request), - ordem=ordem_dia) + ordem=context_vars['ordem_dia']) else: voto.voto = request.POST['voto'] voto.ip = get_client_ip(request) voto.user = request.user voto.save() - elif expediente: + elif context_vars['expediente']: try: voto = VotoParlamentar.objects.get( - parlamentar=parlamentar, - expediente=expediente) + parlamentar=context_vars['parlamentar'], + expediente=context_vars['expediente']) except ObjectDoesNotExist: voto = VotoParlamentar.objects.create( - parlamentar=parlamentar, + parlamentar=context_vars['parlamentar'], voto=request.POST['voto'], user=request.user, ip=get_client_ip(request), - expediente=expediente) + expediente=context_vars['expediente']) else: voto.voto = request.POST['voto'] voto.ip = get_client_ip(request)