Browse Source

Protocola com sequencia de TipoMateriaLegislativa

pull/1663/head
Edward Ribeiro 7 years ago
committed by VictorFabreF
parent
commit
3b50db4ff7
  1. 37
      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

37
sapl/materia/forms.py

@ -34,6 +34,7 @@ from sapl.materia.models import (AssuntoMateria, MateriaAssunto,
TipoDocumento, TipoProposicao) TipoDocumento, TipoProposicao)
from sapl.norma.models import (LegislacaoCitada, NormaJuridica, from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo from sapl.protocoloadm.models import Protocolo
from sapl.settings import MAX_DOC_UPLOAD_SIZE from sapl.settings import MAX_DOC_UPLOAD_SIZE
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES,
@ -1554,15 +1555,41 @@ class ConfirmarProposicaoForm(ProposicaoForm):
if self.instance.tipo.content_type.model_class( if self.instance.tipo.content_type.model_class(
) == TipoMateriaLegislativa: ) == TipoMateriaLegislativa:
numero__max = MateriaLegislativa.objects.filter(
tipo=proposicao.tipo.tipo_conteudo_related, 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')) ano=timezone.now().year).aggregate(Max('numero'))
numero__max = numero__max['numero__max'] 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 # dados básicos
materia = MateriaLegislativa() materia = MateriaLegislativa()
materia.numero = (numero__max + 1) if numero__max else 1 materia.numero = max_numero
materia.tipo = proposicao.tipo.tipo_conteudo_related materia.tipo = tipo
materia.ementa = proposicao.descricao materia.ementa = proposicao.descricao
materia.ano = timezone.now().year materia.ano = timezone.now().year
materia.data_apresentacao = timezone.now() 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 import formats, timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices 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.comissoes.models import Comissao
from sapl.compilacao.models import (PerfilEstruturalTextoArticulado, from sapl.compilacao.models import (PerfilEstruturalTextoArticulado,
TextoArticulado) TextoArticulado)
@ -87,6 +88,12 @@ class TipoMateriaLegislativa(models.Model):
('sigla', '__icontains') ('sigla', '__icontains')
)) ))
sequencia_numeracao = models.CharField(
max_length=1,
blank=True,
verbose_name=_('Sequência de numeração'),
choices=SEQUENCIA_NUMERACAO)
class Meta: class Meta:
verbose_name = _('Tipo de Matéria Legislativa') verbose_name = _('Tipo de Matéria Legislativa')
verbose_name_plural = _('Tipos de Matérias Legislativas') 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.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Max
from django.forms.forms import Form from django.forms.forms import Form
from django.forms.utils import ErrorDict from django.forms.utils import ErrorDict
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
@ -40,6 +41,7 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm,
OrgaoForm, ProposicaoForm, TipoProposicaoForm, OrgaoForm, ProposicaoForm, TipoProposicaoForm,
TramitacaoForm, TramitacaoUpdateForm) TramitacaoForm, TramitacaoUpdateForm)
from sapl.norma.models import LegislacaoCitada from sapl.norma.models import LegislacaoCitada
from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo from sapl.protocoloadm.models import Protocolo
from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label, from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label,
autor_modal, gerar_hash_arquivo, get_base_url, autor_modal, gerar_hash_arquivo, get_base_url,
@ -281,17 +283,36 @@ def recuperar_materia(request):
tipo = TipoMateriaLegislativa.objects.get(pk=request.GET['tipo']) tipo = TipoMateriaLegislativa.objects.get(pk=request.GET['tipo'])
ano = request.GET.get('ano', '') ano = request.GET.get('ano', '')
param = {'tipo': tipo} numeracao = None
param['data_apresentacao__year'] = ano if ano else timezone.now().year try:
numeracao = sapl.base.models.AppConfig.objects.last(
).sequencia_numeracao
except AttributeError:
pass
materia = MateriaLegislativa.objects.filter(**param).order_by( if tipo.sequencia_numeracao:
'tipo', 'ano', 'numero').values_list('numero', 'ano').last() numeracao = tipo.sequencia_numeracao
if materia:
response = JsonResponse({'numero': materia[0] + 1, if numeracao == 'A':
'ano': materia[1]}) numero = MateriaLegislativa.objects.filter(
else: ano=timezone.now().year).aggregate(Max('numero'))
response = JsonResponse( elif numeracao == 'L':
{'numero': 1, 'ano': ano if ano else timezone.now().year}) 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 return response

16
sapl/protocoloadm/views.py

@ -292,7 +292,7 @@ class ProtocoloDocumentoView(PermissionRequiredMixin,
numero = Protocolo.objects.filter( numero = Protocolo.objects.filter(
ano=timezone.now().year).aggregate(Max('numero')) ano=timezone.now().year).aggregate(Max('numero'))
elif numeracao == 'L': elif numeracao == 'L':
legislatura = Legislatura.objects.last() legislatura = Legislatura.objects.first()
data_inicio = legislatura.data_inicio data_inicio = legislatura.data_inicio
data_fim = legislatura.data_fim data_fim = legislatura.data_fim
numero = Protocolo.objects.filter( numero = Protocolo.objects.filter(
@ -414,6 +414,7 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView):
'pk': protocolo.pk}) 'pk': protocolo.pk})
def form_valid(self, form): def form_valid(self, form):
try: try:
numeracao = sapl.base.models.AppConfig.objects.last( numeracao = sapl.base.models.AppConfig.objects.last(
).sequencia_numeracao ).sequencia_numeracao
@ -423,9 +424,22 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView):
messages.add_message(self.request, messages.ERROR, msg) messages.add_message(self.request, messages.ERROR, msg)
return self.render_to_response(self.get_context_data()) 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': if numeracao == 'A':
numero = Protocolo.objects.filter( numero = Protocolo.objects.filter(
ano=timezone.now().year).aggregate(Max('numero')) 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': elif numeracao == 'U':
numero = Protocolo.objects.all().aggregate(Max('numero')) numero = Protocolo.objects.all().aggregate(Max('numero'))

2
sapl/templates/materia/layouts.yaml

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

Loading…
Cancel
Save