Browse Source

feat: impl numeração automática em cadastros via API

pull/3822/head
LeandroJatai 1 week ago
parent
commit
bed41c435a
  1. 1
      sapl/api/serializers.py
  2. 26
      sapl/api/views_materia.py
  3. 5
      sapl/materia/models.py

1
sapl/api/serializers.py

@ -11,6 +11,7 @@ from rest_framework import serializers
from rest_framework.fields import SerializerMethodField
from sapl.base.models import Autor, CasaLegislativa, Metadata
from sapl.materia.models import MateriaLegislativa
from sapl.parlamentares.models import Parlamentar, Mandato, Legislatura
from sapl.sessao.models import OrdemDia, SessaoPlenaria

26
sapl/api/views_materia.py

@ -1,7 +1,9 @@
from copy import deepcopy
from django.apps.registry import apps
from django.db.models import Q
from rest_framework.decorators import action
from rest_framework.status import HTTP_201_CREATED
from rest_framework.response import Response
from drfautoapi.drfautoapi import ApiViewSetConstrutor, \
@ -90,6 +92,30 @@ class _MateriaLegislativaViewSet:
class Meta:
ordering = ['-ano', 'tipo', 'numero']
def create(self, request, *args, **kwargs):
data = deepcopy(request.data)
tipo = data.get('tipo', None)
numero = data.get('numero', None)
ano = data.get('ano', None)
if tipo:
numero, ano = MateriaLegislativa.get_proximo_numero(
tipo=tipo,
ano=ano,
numero_preferido=numero
)
data['numero'] = numero
data['ano'] = ano
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=HTTP_201_CREATED, headers=headers)
@action(detail=True, methods=['GET'])
def ultima_tramitacao(self, request, *args, **kwargs):

5
sapl/materia/models.py

@ -411,6 +411,9 @@ class MateriaLegislativa(models.Model):
except AttributeError:
pass
if not isinstance(tipo, TipoMateriaLegislativa):
tipo = TipoMateriaLegislativa.objects.get(pk=tipo)
# O tipo pode sobrescrever a configuração global
if tipo.sequencia_numeracao:
numeracao = tipo.sequencia_numeracao
@ -443,7 +446,7 @@ class MateriaLegislativa(models.Model):
tipo=tipo,
ano=ano,
numero=numero_preferido).exists():
return int(numero_preferido)
return int(numero_preferido), ano
# Retorna o próximo número sequencial
max_numero = numero['numero__max']

Loading…
Cancel
Save