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 rest_framework.fields import SerializerMethodField
from sapl.base.models import Autor, CasaLegislativa, Metadata from sapl.base.models import Autor, CasaLegislativa, Metadata
from sapl.materia.models import MateriaLegislativa
from sapl.parlamentares.models import Parlamentar, Mandato, Legislatura from sapl.parlamentares.models import Parlamentar, Mandato, Legislatura
from sapl.sessao.models import OrdemDia, SessaoPlenaria 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.apps.registry import apps
from django.db.models import Q from django.db.models import Q
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.status import HTTP_201_CREATED
from rest_framework.response import Response from rest_framework.response import Response
from drfautoapi.drfautoapi import ApiViewSetConstrutor, \ from drfautoapi.drfautoapi import ApiViewSetConstrutor, \
@ -90,6 +92,30 @@ class _MateriaLegislativaViewSet:
class Meta: class Meta:
ordering = ['-ano', 'tipo', 'numero'] 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']) @action(detail=True, methods=['GET'])
def ultima_tramitacao(self, request, *args, **kwargs): def ultima_tramitacao(self, request, *args, **kwargs):

5
sapl/materia/models.py

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

Loading…
Cancel
Save