Browse Source

Fix #928 (#929)

pull/941/head
eduardocalil 8 years ago
committed by Edward
parent
commit
b30670163b
  1. 5
      sapl/base/templatetags/common_tags.py
  2. 7
      sapl/sessao/urls.py
  3. 58
      sapl/sessao/views.py
  4. 33
      sapl/templates/sessao/expedientemateria_list.html
  5. 33
      sapl/templates/sessao/ordemdia_list.html

5
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]

7
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<pk>\d+)/matexp/votsec/view/(?P<oid>\d+)/(?P<mid>\d+)$',
VotacaoExpedienteEditView.as_view(), name='votacaosecretaexpedit'),
url(r'^ajax/mudar-ordem-materia-sessao/',
mudar_ordem_materia_sessao,
name='mudar_ordem_materia_sessao'),
]

58
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

33
sapl/templates/sessao/expedientemateria_list.html

@ -15,3 +15,36 @@
{% endif %}
{% endblock more_buttons %}
{% block extra_js %}
<script type="text/javascript">
var pk_sessao = {{root_pk}};
var pk_list = {{ object_list|to_list_pk|safe }};
$('tbody').sortable({
start: function(event, ui) {
ui.item.startPos = ui.item.index();
},
stop: function(event, ui) {
var pos_ini = ui.item.startPos;
var pos_fim = ui.item.index();
$.ajax({
data: {pos_ini: pos_ini,
pos_fim: pos_fim,
pk_sessao: pk_sessao,
pk_list,
materia: 'expediente'},
type: 'POST',
url: "{% url 'sapl.sessao:mudar_ordem_materia_sessao' %}",
});
setTimeout(function(){ window.location.reload(true) }, 500);
}
});
</script>
{% endblock %}

33
sapl/templates/sessao/ordemdia_list.html

@ -15,3 +15,36 @@
{% endif %}
{% endblock more_buttons %}
{% block extra_js %}
<script type="text/javascript">
var pk_sessao = {{root_pk}};
var pk_list = {{ object_list|to_list_pk|safe }};
$('tbody').sortable({
start: function(event, ui) {
ui.item.startPos = ui.item.index();
},
stop: function(event, ui) {
var pos_ini = ui.item.startPos;
var pos_fim = ui.item.index();
$.ajax({
data: {pos_ini: pos_ini,
pos_fim: pos_fim,
pk_sessao: pk_sessao,
pk_list,
materia: 'ordem'},
type: 'POST',
url: "{% url 'sapl.sessao:mudar_ordem_materia_sessao' %}",
});
setTimeout(function(){ window.location.reload(true) }, 500);
}
});
</script>
{% endblock %}

Loading…
Cancel
Save