diff --git a/sapl/api/views.py b/sapl/api/views.py
index 769196c76..f2f146e24 100644
--- a/sapl/api/views.py
+++ b/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
diff --git a/sapl/materia/models.py b/sapl/materia/models.py
index 14e23dfc0..494d52a88 100644
--- a/sapl/materia/models.py
+++ b/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 ?
diff --git a/sapl/materia/views.py b/sapl/materia/views.py
index 9dea69843..e727fe0c7 100644
--- a/sapl/materia/views.py
+++ b/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 '{}'.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'))
diff --git a/sapl/templates/materia/tipomaterialegislativa_list.html b/sapl/templates/materia/tipomaterialegislativa_list.html
index 8ba1f428c..87e28a4a4 100644
--- a/sapl/templates/materia/tipomaterialegislativa_list.html
+++ b/sapl/templates/materia/tipomaterialegislativa_list.html
@@ -7,20 +7,33 @@