Browse Source

impl a reordenação no list dos tipos de matéria

pull/2646/head
Leandro Roberto 7 years ago
parent
commit
d6a0d2afb3
  1. 20
      sapl/api/views.py
  2. 31
      sapl/materia/models.py
  3. 24
      sapl/materia/views.py
  4. 31
      sapl/templates/materia/tipomaterialegislativa_list.html

20
sapl/api/views.py

@ -22,7 +22,7 @@ from sapl.api.forms import SaplFilterSetMixin
from sapl.api.permissions import SaplModelPermissions
from sapl.api.serializers import ChoiceSerializer
from sapl.base.models import Autor, AppConfig, DOC_ADM_OSTENSIVO
from sapl.materia.models import Proposicao
from sapl.materia.models import Proposicao, TipoMateriaLegislativa
from sapl.parlamentares.models import Parlamentar
from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria
@ -349,6 +349,23 @@ class _ProposicaoViewSet(SaplSetViews['materia']['proposicao']):
return qs
class _TipoMateriaLegislativaViewSet(SaplSetViews['materia']['tipomaterialegislativa']):
@action(detail=True, methods=['POST'])
def change_position(self, request, *args, **kwargs):
result = {
'status': 200,
'message': 'OK'
}
d = request.data
if 'pos_ini' in d and 'pos_fim' in d:
if d['pos_ini'] != d['pos_fim']:
pk = kwargs['pk']
TipoMateriaLegislativa.objects.reposicione(pk, d['pos_fim'])
return Response(result)
class _DocumentoAdministrativoViewSet(SaplSetViews['protocoloadm']['documentoadministrativo']):
class DocumentoAdministrativoPermission(SaplModelPermissions):
@ -427,6 +444,7 @@ class _SessaoPlenariaViewSet(
SaplSetViews['base']['autor'] = _AutorViewSet.build_class_with_actions()
SaplSetViews['materia']['proposicao'] = _ProposicaoViewSet
SaplSetViews['materia']['tipomaterialegislativa'] = _TipoMateriaLegislativaViewSet
SaplSetViews['parlamentares']['parlamentar'] = _ParlamentarViewSet

31
sapl/materia/models.py

@ -78,8 +78,39 @@ class TipoProposicao(models.Model):
return self.descricao
class TipoMateriaManager(models.Manager):
def reordene(self, exclude_pk=None):
tipos = self.get_queryset()
if exclude_pk:
tipos = tipos.exclude(pk=exclude_pk)
sr = 1
for t in tipos:
t.sequencia_regimental = sr
t.save()
sr += 1
def reposicione(self, pk, idx):
tipos = self.reordene(exclude_pk=pk)
self.get_queryset(
).filter(
sequencia_regimental__gte=idx
).update(
sequencia_regimental=models.F('sequencia_regimental') + 1
)
self.get_queryset(
).filter(
pk=pk
).update(
sequencia_regimental=idx
)
@reversion.register()
class TipoMateriaLegislativa(models.Model):
objects = TipoMateriaManager()
sigla = models.CharField(max_length=5, verbose_name=_('Sigla'))
descricao = models.CharField(max_length=50, verbose_name=_('Descrição '))
# XXX o que é isso ?

24
sapl/materia/views.py

@ -2501,13 +2501,26 @@ class TipoMateriaCrud(CrudAux):
class DetailView(CrudAux.DetailView):
layout_key = 'TipoMateriaLegislativaDetail'
class DeleteView(CrudAux.DeleteView):
def delete(self, request, *args, **kwargs):
d = CrudAux.DeleteView.delete(self, request, *args, **kwargs)
TipoMateriaLegislativa.objects.reordene()
return d
class ListView(CrudAux.ListView):
paginate_by = None
layout_key = 'TipoMateriaLegislativaDetail'
template_name = "materia/tipomaterialegislativa_list.html"
def hook_sequencia_regimental(self, obj):
return obj.sequencia_regimental
def hook_sigla(self, obj, default, url):
return '<a href="{}" pk="{}">{}</a>'.format(
url, obj.id, obj.sigla), ''
def get(self, request, *args, **kwargs):
if TipoMateriaLegislativa.objects.filter(
sequencia_regimental=0).exists():
TipoMateriaLegislativa.objects.reordene()
return CrudAux.ListView.get(self, request, *args, **kwargs)
class CreateView(CrudAux.CreateView):
@ -2516,12 +2529,7 @@ class TipoMateriaCrud(CrudAux):
if not TipoMateriaLegislativa.objects.exclude(
sequencia_regimental=0).exists():
tipos = TipoMateriaLegislativa.objects.all()
sr = 1
for t in tipos:
t.sequencia_regimental = sr
t.save()
sr += 1
TipoMateriaLegislativa.objects.reordene()
else:
sr__max = TipoMateriaLegislativa.objects.all().aggregate(
Max('sequencia_regimental'))

31
sapl/templates/materia/tipomaterialegislativa_list.html

@ -7,20 +7,33 @@
<script type="text/javascript">
$('tbody').sortable({
revert: false,
distance: 15,
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();
var pos_ini = ui.item.startPos + 1;
var pos_fim = ui.item.index() + 1;
var pk = ui.item.find('a[pk]').attr('pk');
var url = "{% url 'sapl.api:tipomaterialegislativa-change-position' 0 %}";
url = url.replace('0', pk) ;
$.ajax({
data: {pos_ini: pos_ini,
pos_fim: pos_fim,
pk_sessao: pk_sessao,
pk_list,
materia: 'expediente'},
type: 'PATCH',
url: "{% url 'sapl.sessao:mudar_ordem_materia_sessao' %}",
url: url,
type: 'POST',
contentType: "application/json",
data: JSON.stringify({
"pos_ini": pos_ini,
"pos_fim": pos_fim,
}),
headers: {
'X-CSRFToken': getCookie('csrftoken')
},
error: function(e) {
console.log(e);
}
});
setTimeout(function(){ window.location.reload(true) }, 500);

Loading…
Cancel
Save