diff --git a/sapl/base/templatetags/common_tags.py b/sapl/base/templatetags/common_tags.py index 84b966598..9d643e70c 100644 --- a/sapl/base/templatetags/common_tags.py +++ b/sapl/base/templatetags/common_tags.py @@ -132,3 +132,8 @@ def cronometro_to_seconds(value): 'cronometro_' + value).isoformat().split(':') return 60 * int(m) + int(s) + + +@register.filter +def to_list_pk(object_list): + return [o.pk for o in object_list] diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index fd06ceb7f..d90fb64bb 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -23,7 +23,8 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente, recuperar_numero_sessao, reordernar_materias_expediente, reordernar_materias_ordem, - sessao_legislativa_legislatura_ajax) + sessao_legislativa_legislatura_ajax, + mudar_ordem_materia_sessao) from .apps import AppConfig @@ -127,4 +128,8 @@ urlpatterns = [ VotacaoExpedienteView.as_view(), name='votacaosecretaexp'), url(r'^sessao/(?P\d+)/matexp/votsec/view/(?P\d+)/(?P\d+)$', VotacaoExpedienteEditView.as_view(), name='votacaosecretaexpedit'), + + url(r'^ajax/mudar-ordem-materia-sessao/', + mudar_ordem_materia_sessao, + name='mudar_ordem_materia_sessao'), ] diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 8ff1edb40..928e5f746 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -12,6 +12,7 @@ from django.utils.datastructures import MultiValueDictKeyError from django.utils.decorators import method_decorator from django.utils.html import strip_tags from django.utils.translation import ugettext_lazy as _ +from django.views.decorators.csrf import csrf_exempt from django.views.generic import ListView, TemplateView from django.views.generic.base import RedirectView from django.views.generic.detail import DetailView @@ -2407,3 +2408,60 @@ class AdicionarVariasMateriasOrdemDia(AdicionarVariasMateriasExpediente): ordem_dia.save() return self.get(request, self.kwargs) + + +@csrf_exempt +def mudar_ordem_materia_sessao(request): + # Pega os dados vindos da requisição + posicao_inicial = int(request.POST['pos_ini']) + 1 + posicao_final = int(request.POST['pos_fim']) + 1 + pk_sessao = int(request.POST['pk_sessao']) + pk_list = request.POST.getlist('pk_list[]') + + materia = request.POST['materia'] + + # Verifica se está nas Matérias do Expediente ou da Ordem do Dia + if materia == 'expediente': + materia = ExpedienteMateria + elif materia == 'ordem': + materia = OrdemDia + else: + return + + # Testa se existe alguma matéria na posição recebida + try: + materia_1 = materia.objects.get( + sessao_plenaria=pk_sessao, + numero_ordem=posicao_inicial) + except ObjectDoesNotExist: + raise # TODO tratar essa exceção + + # Se a posição inicial for menor que a final, todos que + # estiverem acima da nova posição devem ter sua ordem decrementada + # em uma posição + if posicao_inicial < posicao_final: + materias_expediente = materia.objects.filter( + sessao_plenaria=pk_sessao, + numero_ordem__lte=posicao_final, + numero_ordem__gte=posicao_inicial) + for m in materias_expediente: + m.numero_ordem = m.numero_ordem - 1 + m.save() + + + # Se a posição inicial for maior que a final, todos que + # estiverem abaixo da nova posição devem ter sua ordem incrementada + # em uma posição + elif posicao_inicial > posicao_final: + materias_expediente = materia.objects.filter( + sessao_plenaria=pk_sessao, + numero_ordem__gte=posicao_final, + numero_ordem__lte=posicao_inicial) + for m in materias_expediente: + m.numero_ordem = m.numero_ordem + 1 + m.save() + + materia_1.numero_ordem = posicao_final + materia_1.save() + + return diff --git a/sapl/templates/sessao/expedientemateria_list.html b/sapl/templates/sessao/expedientemateria_list.html index 28b8482ea..6b7e61f3f 100644 --- a/sapl/templates/sessao/expedientemateria_list.html +++ b/sapl/templates/sessao/expedientemateria_list.html @@ -15,3 +15,36 @@ {% endif %} {% endblock more_buttons %} + +{% block extra_js %} + + + +{% endblock %} diff --git a/sapl/templates/sessao/ordemdia_list.html b/sapl/templates/sessao/ordemdia_list.html index a6b885558..59a6f7cb6 100644 --- a/sapl/templates/sessao/ordemdia_list.html +++ b/sapl/templates/sessao/ordemdia_list.html @@ -15,3 +15,36 @@ {% endif %} {% endblock more_buttons %} + +{% block extra_js %} + + + +{% endblock %}