Browse Source

celery

Websocket_painel
Gustavo274 3 years ago
parent
commit
84f4b660e4
  1. 3
      sapl/__init__.py
  2. 73
      sapl/painel/views.py
  3. 32
      sapl/sessao/views.py
  4. 2
      sapl/settings.py

3
sapl/__init__.py

@ -0,0 +1,3 @@
from .celery import app as celery_app
__all__ = ['celery_app']

73
sapl/painel/views.py

@ -78,9 +78,9 @@ def votacao_aberta(request):
if numero_materias_abertas > 1: if numero_materias_abertas > 1:
logger.info('user=' + username + '. Existe mais de uma votação aberta na Sessão: ' + logger.info('user=' + username + '. Existe mais de uma votação aberta na Sessão: ' +
('''<li><a href="%s">%s</a></li>''' % ( ('''<li><a href="%s">%s</a></li>''' % (
reverse('sapl.sessao:sessaoplenaria_detail', reverse('sapl.sessao:sessaoplenaria_detail',
kwargs={'pk': votacoes_abertas.first().id}), kwargs={'pk': votacoes_abertas.first().id}),
votacoes_abertas.first().__str__()))) votacoes_abertas.first().__str__())))
msg = _('Existe mais de uma votação aberta na Sessão: ' + msg = _('Existe mais de uma votação aberta na Sessão: ' +
('''<li><a href="%s">%s</a></li>''' % ( ('''<li><a href="%s">%s</a></li>''' % (
reverse('sapl.sessao:sessaoplenaria_detail', reverse('sapl.sessao:sessaoplenaria_detail',
@ -93,7 +93,7 @@ def votacao_aberta(request):
return votacoes_abertas.first(), None return votacoes_abertas.first(), None
def votacao(context,context_vars): def votacao(context, context_vars):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
parlamentar = context_vars['votante'].parlamentar parlamentar = context_vars['votante'].parlamentar
parlamentar_presente = False parlamentar_presente = False
@ -116,23 +116,26 @@ def votacao(context,context_vars):
if voto: if voto:
try: try:
logger.debug("Tentando obter objeto VotoParlamentar com parlamentar={}.".format(context_vars['parlamentar'])) logger.debug("Tentando obter objeto VotoParlamentar com parlamentar={}.".format(
context_vars['parlamentar']))
voto = voto.get(parlamentar=context_vars['parlamentar']) voto = voto.get(parlamentar=context_vars['parlamentar'])
context.update({'voto_parlamentar': voto.voto}) context.update({'voto_parlamentar': voto.voto})
except ObjectDoesNotExist: except ObjectDoesNotExist:
logger.error("Voto do parlamentar {} não computado.".format(context_vars['parlamentar'])) logger.error("Voto do parlamentar {} não computado.".format(
context_vars['parlamentar']))
context.update( context.update(
{'voto_parlamentar': 'Voto não ' {'voto_parlamentar': 'Voto não '
'computado.'}) 'computado.'})
else: else:
logger.error("Parlamentar com id={} não está presente na " logger.error("Parlamentar com id={} não está presente na "
"Ordem do Dia/Expediente em votação.".format(parlamentar.id)) "Ordem do Dia/Expediente em votação.".format(parlamentar.id))
context.update({'error_message': context.update({'error_message':
'Você não está presente na ' 'Você não está presente na '
'Ordem do Dia/Expediente em votação.'}) 'Ordem do Dia/Expediente em votação.'})
return context, context_vars return context, context_vars
def sessao_votacao(context,context_vars):
def sessao_votacao(context, context_vars):
pk = context_vars['sessao'].pk pk = context_vars['sessao'].pk
context.update({'sessao_id': pk}) context.update({'sessao_id': pk})
context.update({'sessao': context_vars['sessao'], context.update({'sessao': context_vars['sessao'],
@ -143,9 +146,9 @@ def sessao_votacao(context,context_vars):
presentes = [] presentes = []
ordem_dia = get_materia_aberta(pk) ordem_dia = get_materia_aberta(pk)
expediente = get_materia_expediente_aberta(pk) expediente = get_materia_expediente_aberta(pk)
errors_msgs = {'materia':'Não há nenhuma matéria aberta.', errors_msgs = {'materia': 'Não há nenhuma matéria aberta.',
'registro':'A votação para esta matéria já encerrou.', 'registro': 'A votação para esta matéria já encerrou.',
'tipo':'A matéria aberta não é do tipo votação nominal.'} 'tipo': 'A matéria aberta não é do tipo votação nominal.'}
materia_aberta = None materia_aberta = None
if ordem_dia: if ordem_dia:
@ -160,8 +163,8 @@ def sessao_votacao(context,context_vars):
'parlamentar_id', flat=True).distinct() 'parlamentar_id', flat=True).distinct()
context_vars.update({'ordem_dia': ordem_dia, context_vars.update({'ordem_dia': ordem_dia,
'expediente':expediente, 'expediente': expediente,
'presentes': presentes}) 'presentes': presentes})
# Verifica votação aberta # Verifica votação aberta
# Se aberta, verifica se é nominal. ID nominal == 2 # Se aberta, verifica se é nominal. ID nominal == 2
@ -188,7 +191,7 @@ def can_vote(context, context_vars, request):
# Pega sessão # Pega sessão
sessao, msg = votacao_aberta(request) sessao, msg = votacao_aberta(request)
context_vars.update({'sessao':sessao}) context_vars.update({'sessao': sessao})
if sessao and not msg: if sessao and not msg:
context, context_vars = sessao_votacao(context, context_vars) context, context_vars = sessao_votacao(context, context_vars)
elif not sessao and msg: elif not sessao and msg:
@ -202,20 +205,21 @@ def can_vote(context, context_vars, request):
def votante_view(request): def votante_view(request):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
username = request.user.username if request.user.is_authenticated else 'AnonymousUser' username = request.user.username if request.user.is_authenticated else 'AnonymousUser'
# Pega o votante relacionado ao usuário # Pega o votante relacionado ao usuário
template_name = 'painel/voto_nominal.html' template_name = 'painel/voto_nominal.html'
context = {} context = {}
context_vars = {} context_vars = {}
try: try:
logger.debug(f'user={username}. Tentando obter objeto Votante com user={request.user}.') logger.debug(
f'user={username}. Tentando obter objeto Votante com user={request.user}.')
if not request.user.is_anonymous and request.user.is_authenticated: if not request.user.is_anonymous and request.user.is_authenticated:
votante = Votante.objects.get(user=request.user) votante = Votante.objects.get(user=request.user)
else: else:
raise ObjectDoesNotExist raise ObjectDoesNotExist
except ObjectDoesNotExist: except ObjectDoesNotExist:
logger.error(f"user={username}. Usuário (user={request.user}) não cadastrado como votante na tela de parlamentares. " logger.error(f"user={username}. Usuário (user={request.user}) não cadastrado como votante na tela de parlamentares. "
"Contate a administração de sua Casa Legislativa!") "Contate a administração de sua Casa Legislativa!")
msg = _("Usuário não cadastrado como votante na tela de parlamentares. Contate a administração de sua Casa Legislativa!") msg = _("Usuário não cadastrado como votante na tela de parlamentares. Contate a administração de sua Casa Legislativa!")
context.update({'error_message': msg}) context.update({'error_message': msg})
@ -227,9 +231,11 @@ def votante_view(request):
# Verifica se usuário possui permissão para votar # Verifica se usuário possui permissão para votar
if 'parlamentares.can_vote' in request.user.get_all_permissions(): if 'parlamentares.can_vote' in request.user.get_all_permissions():
context, context_vars = can_vote(context, context_vars, request) context, context_vars = can_vote(context, context_vars, request)
logger.debug("user=" + username + ". Verificando se usuário {} possui permissão para votar.".format(request.user)) logger.debug("user=" + username +
". Verificando se usuário {} possui permissão para votar.".format(request.user))
else: else:
logger.error("user=" + username + ". Usuário {} sem permissão para votar.".format(request.user)) logger.error("user=" + username +
". Usuário {} sem permissão para votar.".format(request.user))
context.update({'permissao': False, context.update({'permissao': False,
'error_message': 'Usuário sem permissão para votar.'}) 'error_message': 'Usuário sem permissão para votar.'})
@ -294,7 +300,8 @@ def painel_view(request, pk):
now = timezone.localtime(timezone.now()) now = timezone.localtime(timezone.now())
utc_offset = now.utcoffset().total_seconds() / 60 utc_offset = now.utcoffset().total_seconds() / 60
context = {'head_title': str(_('Painel Plenário')), 'sessao_id': pk, 'utc_offset': utc_offset } context = {'head_title': str(
_('Painel Plenário')), 'sessao_id': pk, 'utc_offset': utc_offset}
return render(request, 'painel/index.html', context) return render(request, 'painel/index.html', context)
@ -348,10 +355,12 @@ def get_cronometro_status(request, name):
logger.debug("user=" + username + ". Tentando obter cronometro.") logger.debug("user=" + username + ". Tentando obter cronometro.")
cronometro = request.session[name] cronometro = request.session[name]
except KeyError as e: except KeyError as e:
logger.error("user=" + username + ". Erro ao obter cronometro. Retornado como vazio. " + str(e)) logger.error("user=" + username +
". Erro ao obter cronometro. Retornado como vazio. " + str(e))
cronometro = '' cronometro = ''
return cronometro return cronometro
def get_cronometro_value(request, name): def get_cronometro_value(request, name):
if name == 'discurso': if name == 'discurso':
result = ConfiguracoesAplicacao.objects.first().cronometro_discurso result = ConfiguracoesAplicacao.objects.first().cronometro_discurso
@ -377,7 +386,7 @@ def get_presentes(pk, response, materia):
else: else:
presentes = SessaoPlenariaPresenca.objects.filter( presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=pk) sessao_plenaria_id=pk)
sessao = SessaoPlenaria.objects.get(id=pk) sessao = SessaoPlenaria.objects.get(id=pk)
num_presentes = len(presentes) num_presentes = len(presentes)
data_sessao = sessao.data_inicio data_sessao = sessao.data_inicio
@ -503,7 +512,8 @@ def get_votos(response, materia):
for i, p in enumerate(response['presentes']): for i, p in enumerate(response['presentes']):
try: try:
logger.info("Tentando obter votos do parlamentar (id={}).".format(p['parlamentar_id'])) logger.info("Tentando obter votos do parlamentar (id={}).".format(
p['parlamentar_id']))
if votos_parlamentares.get(parlamentar_id=p['parlamentar_id']).voto: if votos_parlamentares.get(parlamentar_id=p['parlamentar_id']).voto:
response['presentes'][i]['voto'] = 'Voto Informado' response['presentes'][i]['voto'] = 'Voto Informado'
except ObjectDoesNotExist: except ObjectDoesNotExist:
@ -531,11 +541,13 @@ def get_votos(response, materia):
for i, p in enumerate(response['presentes']): for i, p in enumerate(response['presentes']):
try: try:
logger.debug("Tentando obter votos do parlamentar (id={}).".format(p['parlamentar_id'])) logger.debug("Tentando obter votos do parlamentar (id={}).".format(
p['parlamentar_id']))
response['presentes'][i]['voto'] = votos_parlamentares.get( response['presentes'][i]['voto'] = votos_parlamentares.get(
parlamentar_id=p['parlamentar_id']).voto parlamentar_id=p['parlamentar_id']).voto
except ObjectDoesNotExist: except ObjectDoesNotExist:
logger.error("Votos do parlamentar (id={}) não encontrados. Retornado None.".format(p['parlamentar_id'])) logger.error("Votos do parlamentar (id={}) não encontrados. Retornado None.".format(
p['parlamentar_id']))
response['presentes'][i]['voto'] = None response['presentes'][i]['voto'] = None
response.update({ response.update({
@ -562,7 +574,7 @@ def get_dados_painel(request, pk):
if casa and app_config and (bool(casa.logotipo)): if casa and app_config and (bool(casa.logotipo)):
brasao = casa.logotipo.url \ brasao = casa.logotipo.url \
if app_config.mostrar_brasao_painel else None if app_config.mostrar_brasao_painel else None
response = { response = {
'sessao_plenaria': str(sessao), 'sessao_plenaria': str(sessao),
'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'), 'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'),
@ -570,6 +582,7 @@ def get_dados_painel(request, pk):
'sessao_solene': sessao.tipo.nome == "Solene", 'sessao_solene': sessao.tipo.nome == "Solene",
'sessao_finalizada': sessao.finalizada, 'sessao_finalizada': sessao.finalizada,
'tema_solene': sessao.tema_solene, 'tema_solene': sessao.tema_solene,
'status_cronometro_discurso': get_cronometro_status(request, 'discurso'),
'cronometro_aparte': get_cronometro_value(request, 'aparte'), 'cronometro_aparte': get_cronometro_value(request, 'aparte'),
'cronometro_discurso': get_cronometro_value(request, 'discurso'), 'cronometro_discurso': get_cronometro_value(request, 'discurso'),
'cronometro_ordem': get_cronometro_value(request, 'ordem'), 'cronometro_ordem': get_cronometro_value(request, 'ordem'),
@ -611,18 +624,18 @@ def get_dados_painel(request, pk):
ordem_expediente = last_ordem_voto.ordem ordem_expediente = last_ordem_voto.ordem
ultimo_timestamp = last_ordem_voto.data_hora ultimo_timestamp = last_ordem_voto.data_hora
if (last_expediente_voto and ultimo_timestamp and last_expediente_voto.data_hora > ultimo_timestamp) or \ if (last_expediente_voto and ultimo_timestamp and last_expediente_voto.data_hora > ultimo_timestamp) or \
(not ultimo_timestamp and last_expediente_voto): (not ultimo_timestamp and last_expediente_voto):
ordem_expediente = last_expediente_voto.expediente ordem_expediente = last_expediente_voto.expediente
ultimo_timestamp = last_expediente_voto.data_hora ultimo_timestamp = last_expediente_voto.data_hora
if (last_ordem_leitura and ultimo_timestamp and last_ordem_leitura.data_hora > ultimo_timestamp) or \ if (last_ordem_leitura and ultimo_timestamp and last_ordem_leitura.data_hora > ultimo_timestamp) or \
(not ultimo_timestamp and last_ordem_leitura): (not ultimo_timestamp and last_ordem_leitura):
ordem_expediente = last_ordem_leitura.ordem ordem_expediente = last_ordem_leitura.ordem
ultimo_timestamp = last_ordem_leitura.data_hora ultimo_timestamp = last_ordem_leitura.data_hora
if (last_expediente_leitura and ultimo_timestamp and last_expediente_leitura.data_hora > ultimo_timestamp) or \ if (last_expediente_leitura and ultimo_timestamp and last_expediente_leitura.data_hora > ultimo_timestamp) or \
(not ultimo_timestamp and last_expediente_leitura): (not ultimo_timestamp and last_expediente_leitura):
ordem_expediente = last_expediente_leitura.expediente ordem_expediente = last_expediente_leitura.expediente
ultimo_timestamp = last_expediente_leitura.data_hora ultimo_timestamp = last_expediente_leitura.data_hora
if ordem_expediente: if ordem_expediente:
return JsonResponse(get_votos( return JsonResponse(get_votos(
get_presentes(pk, response, ordem_expediente), get_presentes(pk, response, ordem_expediente),

32
sapl/sessao/views.py

@ -2,6 +2,7 @@
import logging import logging
from collections import OrderedDict from collections import OrderedDict
from re import sub from re import sub
from sapl.painel.views import get_cronometro_status
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
@ -308,7 +309,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
page_number = "" page_number = ""
if 'page' in context: if 'page' in context:
#url += "?page={}".format(context['page']) #url += "?page={}".format(context['page'])
page_number = "<input type='hidden' name='page' value='%s' />" % context['page'] page_number = "<input type='hidden' name='page' value='%s' />" % context[
'page']
if has_permission: if has_permission:
if obj.tipo_votacao != LEITURA: if obj.tipo_votacao != LEITURA:
@ -649,7 +651,7 @@ class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView):
numero_ordem = exp.last().numero_ordem if exp.exists() else 0 numero_ordem = exp.last().numero_ordem if exp.exists() else 0
for num_ordem, expediente in enumerate( for num_ordem, expediente in enumerate(
ExpedienteMateria.objects.filter(id__in=marcadas), ExpedienteMateria.objects.filter(id__in=marcadas),
numero_ordem+1 numero_ordem + 1
): ):
lista_expediente.append( lista_expediente.append(
ExpedienteMateria( ExpedienteMateria(
@ -669,7 +671,7 @@ class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView):
o = OrdemDia.objects.filter(sessao_plenaria=sessao) o = OrdemDia.objects.filter(sessao_plenaria=sessao)
numero_ordem = o.last().numero_ordem if o.exists() else 0 numero_ordem = o.last().numero_ordem if o.exists() else 0
for num_ordem, ordemdia in enumerate( for num_ordem, ordemdia in enumerate(
OrdemDia.objects.filter(id__in=marcadas), numero_ordem+1 OrdemDia.objects.filter(id__in=marcadas), numero_ordem + 1
): ):
lista_ordemdia.append( lista_ordemdia.append(
OrdemDia( OrdemDia(
@ -945,7 +947,8 @@ class OradorCrud(MasterDetailCrud):
{'subnav_template_name': 'sessao/subnav-solene.yaml'}) {'subnav_template_name': 'sessao/subnav-solene.yaml'})
ultimo_orador = Orador.objects.filter( ultimo_orador = Orador.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 context[
"ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context return context
def get_success_url(self): def get_success_url(self):
@ -1018,7 +1021,8 @@ class OradorExpedienteCrud(OradorCrud):
{'subnav_template_name': 'sessao/subnav-solene.yaml'}) {'subnav_template_name': 'sessao/subnav-solene.yaml'})
ultimo_orador = OradorExpediente.objects.filter( ultimo_orador = OradorExpediente.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 context[
"ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context return context
def get_success_url(self): def get_success_url(self):
@ -1098,7 +1102,8 @@ class OradorOrdemDiaCrud(OradorCrud):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
ultimo_orador = OradorOrdemDia.objects.filter( ultimo_orador = OradorOrdemDia.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 context[
"ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context return context
class UpdateView(MasterDetailCrud.UpdateView): class UpdateView(MasterDetailCrud.UpdateView):
@ -2936,7 +2941,8 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
elif self.expediente: elif self.expediente:
votacao.expediente_id = expediente_id votacao.expediente_id = expediente_id
votacao.tipo_resultado_votacao = form.cleaned_data['resultado_votacao'] votacao.tipo_resultado_votacao = form.cleaned_data[
'resultado_votacao']
votacao.save() votacao.save()
for votos in request.POST.getlist('voto_parlamentar'): for votos in request.POST.getlist('voto_parlamentar'):
@ -4496,7 +4502,8 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView)
votacao.observacao = request.POST['observacao'] votacao.observacao = request.POST['observacao']
votacao.materia = ordem.materia votacao.materia = ordem.materia
votacao.ordem = ordem votacao.ordem = ordem
votacao.tipo_resultado_votacao = form.cleaned_data['resultado_votacao'] votacao.tipo_resultado_votacao = form.cleaned_data[
'resultado_votacao']
votacao.user = request.user votacao.user = request.user
votacao.ip = get_client_ip(request) votacao.ip = get_client_ip(request)
votacao.save() votacao.save()
@ -4517,7 +4524,8 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView)
voto_parlamentar.ip = get_client_ip(request) voto_parlamentar.ip = get_client_ip(request)
voto_parlamentar.save() voto_parlamentar.save()
ordem.resultado = form.cleaned_data['resultado_votacao'].nome ordem.resultado = form.cleaned_data[
'resultado_votacao'].nome
ordem.votacao_aberta = False ordem.votacao_aberta = False
ordem.save() ordem.save()
@ -4541,7 +4549,8 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView)
votacao.observacao = request.POST['observacao'] votacao.observacao = request.POST['observacao']
votacao.materia = expediente.materia votacao.materia = expediente.materia
votacao.expediente = expediente votacao.expediente = expediente
votacao.tipo_resultado_votacao = form.cleaned_data['resultado_votacao'] votacao.tipo_resultado_votacao = form.cleaned_data[
'resultado_votacao']
votacao.user = request.user votacao.user = request.user
votacao.ip = get_client_ip(request) votacao.ip = get_client_ip(request)
votacao.save() votacao.save()
@ -4563,7 +4572,8 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView)
voto_parlamentar.ip = get_client_ip(request) voto_parlamentar.ip = get_client_ip(request)
voto_parlamentar.save() voto_parlamentar.save()
expediente.resultado = form.cleaned_data['resultado_votacao'].nome expediente.resultado = form.cleaned_data[
'resultado_votacao'].nome
expediente.votacao_aberta = False expediente.votacao_aberta = False
expediente.save() expediente.save()

2
sapl/settings.py

@ -204,6 +204,8 @@ TEMPLATES = [
WSGI_APPLICATION = 'sapl.wsgi.application' WSGI_APPLICATION = 'sapl.wsgi.application'
CELERY_BROKER_URL = 'redis://localhost:6379'
# Database # Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases # https://docs.djangoproject.com/en/1.8/ref/settings/#databases

Loading…
Cancel
Save