Browse Source

Protocola com sequencia de TipoMateriaLegislativa

pull/1663/head
Edward Ribeiro 7 years ago
committed by VictorFabreF
parent
commit
3b50db4ff7
  1. 39
      sapl/materia/forms.py
  2. 20
      sapl/materia/migrations/0024_tipomaterialegislativa_sequencia_numeracao.py
  3. 21
      sapl/materia/migrations/0025_auto_20180221_1649.py
  4. 9
      sapl/materia/models.py
  5. 41
      sapl/materia/views.py
  6. 16
      sapl/protocoloadm/views.py
  7. 2
      sapl/templates/materia/layouts.yaml

39
sapl/materia/forms.py

@ -34,6 +34,7 @@ from sapl.materia.models import (AssuntoMateria, MateriaAssunto,
TipoDocumento, TipoProposicao)
from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica)
from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo
from sapl.settings import MAX_DOC_UPLOAD_SIZE
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES,
@ -1554,15 +1555,41 @@ class ConfirmarProposicaoForm(ProposicaoForm):
if self.instance.tipo.content_type.model_class(
) == TipoMateriaLegislativa:
numero__max = MateriaLegislativa.objects.filter(
tipo=proposicao.tipo.tipo_conteudo_related,
ano=timezone.now().year).aggregate(Max('numero'))
numero__max = numero__max['numero__max']
numeracao = None
try:
numeracao = sapl.base.models.AppConfig.objects.last(
).sequencia_numeracao
except AttributeError:
pass
tipo = proposicao.tipo.tipo_conteudo_related
if tipo.sequencia_numeracao:
numeracao = tipo.sequencia_numeracao
if numeracao == 'A':
numero = MateriaLegislativa.objects.filter(
ano=timezone.now().year).aggregate(Max('numero'))
elif numeracao == 'L':
legislatura = Legislatura.objects.first()
data_inicio = legislatura.data_inicio
data_fim = legislatura.data_fim
numero = MateriaLegislativa.objects.filter(
data_apresentacao__gte=data_inicio,
data_apresentacao__lte=data_fim).aggregate(
Max('numero'))
elif numeracao == 'U':
numero = MateriaLegislativa.objects.all().aggregate(Max('numero'))
if numeracao is None:
numero['numero__max'] = 0
max_numero = numero['numero__max'] + 1 if numero['numero__max'] else 1
# dados básicos
materia = MateriaLegislativa()
materia.numero = (numero__max + 1) if numero__max else 1
materia.tipo = proposicao.tipo.tipo_conteudo_related
materia.numero = max_numero
materia.tipo = tipo
materia.ementa = proposicao.descricao
materia.ano = timezone.now().year
materia.data_apresentacao = timezone.now()

20
sapl/materia/migrations/0024_tipomaterialegislativa_sequencia_numeracao.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-02-21 19:37
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('materia', '0023_proposicao_hash_code'),
]
operations = [
migrations.AddField(
model_name='tipomaterialegislativa',
name='sequencia_numeracao',
field=models.CharField(blank=True, choices=[('A', 'Sequencial por ano'), ('L', 'Sequencial por legislatura'), ('U', 'Sequencial único')], max_length=1, null=True, verbose_name='Sequência de numeração'),
),
]

21
sapl/materia/migrations/0025_auto_20180221_1649.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-02-21 19:49
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('materia', '0024_tipomaterialegislativa_sequencia_numeracao'),
]
operations = [
migrations.AlterField(
model_name='tipomaterialegislativa',
name='sequencia_numeracao',
field=models.CharField(blank=True, choices=[('A', 'Sequencial por ano'), ('L', 'Sequencial por legislatura'), ('U', 'Sequencial único')], default='', max_length=1, verbose_name='Sequência de numeração'),
preserve_default=False,
),
]

9
sapl/materia/models.py

@ -9,7 +9,8 @@ from django.db.models.functions import Concat
from django.utils import formats, timezone
from django.utils.translation import ugettext_lazy as _
from model_utils import Choices
from sapl.base.models import Autor
from sapl.base.models import Autor, SEQUENCIA_NUMERACAO
from sapl.comissoes.models import Comissao
from sapl.compilacao.models import (PerfilEstruturalTextoArticulado,
TextoArticulado)
@ -87,6 +88,12 @@ class TipoMateriaLegislativa(models.Model):
('sigla', '__icontains')
))
sequencia_numeracao = models.CharField(
max_length=1,
blank=True,
verbose_name=_('Sequência de numeração'),
choices=SEQUENCIA_NUMERACAO)
class Meta:
verbose_name = _('Tipo de Matéria Legislativa')
verbose_name_plural = _('Tipos de Matérias Legislativas')

41
sapl/materia/views.py

@ -11,6 +11,7 @@ from django.contrib.auth.decorators import permission_required
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
from django.db.models import Max
from django.forms.forms import Form
from django.forms.utils import ErrorDict
from django.http import HttpResponse, JsonResponse
@ -40,6 +41,7 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm,
OrgaoForm, ProposicaoForm, TipoProposicaoForm,
TramitacaoForm, TramitacaoUpdateForm)
from sapl.norma.models import LegislacaoCitada
from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo
from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label,
autor_modal, gerar_hash_arquivo, get_base_url,
@ -281,17 +283,36 @@ def recuperar_materia(request):
tipo = TipoMateriaLegislativa.objects.get(pk=request.GET['tipo'])
ano = request.GET.get('ano', '')
param = {'tipo': tipo}
param['data_apresentacao__year'] = ano if ano else timezone.now().year
numeracao = None
try:
numeracao = sapl.base.models.AppConfig.objects.last(
).sequencia_numeracao
except AttributeError:
pass
materia = MateriaLegislativa.objects.filter(**param).order_by(
'tipo', 'ano', 'numero').values_list('numero', 'ano').last()
if materia:
response = JsonResponse({'numero': materia[0] + 1,
'ano': materia[1]})
else:
response = JsonResponse(
{'numero': 1, 'ano': ano if ano else timezone.now().year})
if tipo.sequencia_numeracao:
numeracao = tipo.sequencia_numeracao
if numeracao == 'A':
numero = MateriaLegislativa.objects.filter(
ano=timezone.now().year).aggregate(Max('numero'))
elif numeracao == 'L':
legislatura = Legislatura.objects.first()
data_inicio = legislatura.data_inicio
data_fim = legislatura.data_fim
numero = MateriaLegislativa.objects.filter(
data_apresentacao__gte=data_inicio,
data_apresentacao__lte=data_fim).aggregate(
Max('numero'))
elif numeracao == 'U':
numero = MateriaLegislativa.objects.all().aggregate(Max('numero'))
if numeracao is None:
numero['numero__max'] = 0
max_numero = numero['numero__max'] + 1 if numero['numero__max'] else 1
response = JsonResponse({'numero': max_numero, 'ano': ano})
return response

16
sapl/protocoloadm/views.py

@ -292,7 +292,7 @@ class ProtocoloDocumentoView(PermissionRequiredMixin,
numero = Protocolo.objects.filter(
ano=timezone.now().year).aggregate(Max('numero'))
elif numeracao == 'L':
legislatura = Legislatura.objects.last()
legislatura = Legislatura.objects.first()
data_inicio = legislatura.data_inicio
data_fim = legislatura.data_fim
numero = Protocolo.objects.filter(
@ -414,6 +414,7 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView):
'pk': protocolo.pk})
def form_valid(self, form):
try:
numeracao = sapl.base.models.AppConfig.objects.last(
).sequencia_numeracao
@ -423,9 +424,22 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView):
messages.add_message(self.request, messages.ERROR, msg)
return self.render_to_response(self.get_context_data())
# Se TipoMateriaLegislativa tem sequencia própria,
# então sobreescreve a sequência global
tipo = form.cleaned_data['tipo_materia']
if tipo.sequencia_numeracao:
numeracao = tipo.sequencia_numeracao
if numeracao == 'A':
numero = Protocolo.objects.filter(
ano=timezone.now().year).aggregate(Max('numero'))
elif numeracao == 'L':
legislatura = Legislatura.objects.first()
data_inicio = legislatura.data_inicio
data_fim = legislatura.data_fim
numero = Protocolo.objects.filter(
data__gte=data_inicio, data__lte=data_fim).aggregate(
Max('numero'))
elif numeracao == 'U':
numero = Protocolo.objects.all().aggregate(Max('numero'))

2
sapl/templates/materia/layouts.yaml

@ -5,7 +5,7 @@ Origem:
TipoMateriaLegislativa:
{% trans 'Tipo Matéria Legislativa' %}:
- sigla:4 descricao
- sigla:4 descricao sequencia_numeracao
RegimeTramitacao:
{% trans 'Tipo de Documento' %}:

Loading…
Cancel
Save