Browse Source

Fix #2987

pull/3019/head
João Rodrigues 6 years ago
parent
commit
a8dcc36d50
  1. 1
      sapl/base/forms.py
  2. 20
      sapl/base/migrations/0039_appconfig_inicio_numeracao_protocolo.py
  3. 5
      sapl/base/models.py
  4. 40
      sapl/base/views.py
  5. 4
      sapl/protocoloadm/forms.py
  6. 4
      sapl/protocoloadm/tests/test_protocoloadm.py
  7. 41
      sapl/protocoloadm/views.py
  8. 2
      sapl/templates/base/layouts.yaml

1
sapl/base/forms.py

@ -1504,6 +1504,7 @@ class ConfiguracoesAppForm(ModelForm):
model = AppConfig model = AppConfig
fields = ['documentos_administrativos', fields = ['documentos_administrativos',
'sequencia_numeracao_protocolo', 'sequencia_numeracao_protocolo',
'inicio_numeracao_protocolo',
'sequencia_numeracao_proposicao', 'sequencia_numeracao_proposicao',
'esfera_federacao', 'esfera_federacao',
# 'painel_aberto', # TODO: a ser implementado na versão 3.2 # 'painel_aberto', # TODO: a ser implementado na versão 3.2

20
sapl/base/migrations/0039_appconfig_inicio_numeracao_protocolo.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.23 on 2019-10-15 19:13
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0038_auditlog'),
]
operations = [
migrations.AddField(
model_name='appconfig',
name='inicio_numeracao_protocolo',
field=models.PositiveIntegerField(default=1, verbose_name='Início da numeração de protocolo'),
),
]

5
sapl/base/models.py

@ -107,6 +107,11 @@ class AppConfig(models.Model):
max_length=1, max_length=1,
verbose_name=_('Sequência de numeração de protocolos'), verbose_name=_('Sequência de numeração de protocolos'),
choices=SEQUENCIA_NUMERACAO_PROTOCOLO, default='A') choices=SEQUENCIA_NUMERACAO_PROTOCOLO, default='A')
inicio_numeracao_protocolo = models.PositiveIntegerField(
verbose_name=_('Início da numeração de protocolo'),
default=1
)
esfera_federacao = models.CharField( esfera_federacao = models.CharField(
max_length=1, max_length=1,

40
sapl/base/views.py

@ -2041,6 +2041,46 @@ class AppConfigCrud(CrudAux):
kwargs={'pk': app_config.pk})) kwargs={'pk': app_config.pk}))
class UpdateView(CrudAux.UpdateView):
form_class = ConfiguracoesAppForm
def form_valid(self, form):
numeracao = AppConfig.objects.last().sequencia_numeracao_protocolo
numeracao_antiga = AppConfig.objects.last().inicio_numeracao_protocolo
self.object = form.save()
numeracao_nova = self.object.inicio_numeracao_protocolo
if numeracao_nova != numeracao_antiga:
if numeracao == 'A':
numeros = Protocolo.objects.filter(
ano=timezone.now().year
)
elif numeracao == 'L':
legislatura = Legislatura.objects.filter(
data_inicio__year__lte=timezone.now().year,
data_fim__year__gte=timezone.now().year
).first()
data_inicio = legislatura.data_inicio
data_fim = legislatura.data_fim
numeros = Protocolo.objects.filter(
data__gte=data_inicio,
data_lte=data_fim
)
elif numeracao == 'U':
numeros = Protocolo.objects.all()
if numeros:
msg = "O novo início da numeração de protocolo entrará em vigor na " \
"próxima sequência, pois já existem protocolos cadastrados na " \
"atual."
messages.warning(self.request, msg)
return super().form_valid(form)
class ListView(CrudAux.ListView): class ListView(CrudAux.ListView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):

4
sapl/protocoloadm/forms.py

@ -343,7 +343,7 @@ class AnularProtocoloAdmForm(ModelForm):
*args, **kwargs) *args, **kwargs)
class ProtocoloDocumentForm(ModelForm): class ProtocoloDocumentoForm(ModelForm):
tipo_protocolo = forms.ChoiceField(required=True, tipo_protocolo = forms.ChoiceField(required=True,
label=_('Tipo de Protocolo'), label=_('Tipo de Protocolo'),
@ -445,7 +445,7 @@ class ProtocoloDocumentForm(ModelForm):
form_actions(label=_('Protocolar Documento')) form_actions(label=_('Protocolar Documento'))
) )
) )
super(ProtocoloDocumentForm, self).__init__( super(ProtocoloDocumentoForm, self).__init__(
*args, **kwargs) *args, **kwargs)
if not config.protocolo_manual: if not config.protocolo_manual:

4
sapl/protocoloadm/tests/test_protocoloadm.py

@ -13,7 +13,7 @@ from sapl.comissoes.models import Comissao, TipoComissao
from sapl.materia.models import UnidadeTramitacao from sapl.materia.models import UnidadeTramitacao
from sapl.protocoloadm.forms import (AnularProtocoloAdmForm, from sapl.protocoloadm.forms import (AnularProtocoloAdmForm,
DocumentoAdministrativoForm, DocumentoAdministrativoForm,
MateriaLegislativa, ProtocoloDocumentForm, MateriaLegislativa, ProtocoloDocumentoForm,
ProtocoloMateriaForm, TramitacaoAdmForm, ProtocoloMateriaForm, TramitacaoAdmForm,
TramitacaoAdmEditForm, TramitacaoAdmEditForm,
compara_tramitacoes_doc, compara_tramitacoes_doc,
@ -415,7 +415,7 @@ def test_protocolo_documento_form_invalido():
config = mommy.make(AppConfig) config = mommy.make(AppConfig)
form = ProtocoloDocumentForm( form = ProtocoloDocumentoForm(
data={}, data={},
initial={ initial={
'user_data_hora_manual': '', 'user_data_hora_manual': '',

41
sapl/protocoloadm/views.py

@ -44,23 +44,19 @@ from sapl.utils import (create_barcode, get_base_url, get_client_ip,
from django.shortcuts import render from django.shortcuts import render
from .forms import (AcompanhamentoDocumentoForm, AnularProtocoloAdmForm, from .forms import (AcompanhamentoDocumentoForm, AnexadoEmLoteFilterSet, AnexadoForm,
DocumentoAcessorioAdministrativoForm, AnularProtocoloAdmForm, compara_tramitacoes_doc,
DocumentoAdministrativoFilterSet,
DocumentoAdministrativoForm, FichaPesquisaAdmForm, FichaSelecionaAdmForm, ProtocoloDocumentForm,
ProtocoloFilterSet, ProtocoloMateriaForm,
TramitacaoAdmEditForm, TramitacaoAdmForm,
DesvincularDocumentoForm, DesvincularMateriaForm, DesvincularDocumentoForm, DesvincularMateriaForm,
filtra_tramitacao_adm_destino_and_status, DocumentoAcessorioAdministrativoForm, DocumentoAdministrativoFilterSet,
filtra_tramitacao_adm_destino, filtra_tramitacao_adm_status, DocumentoAdministrativoForm, FichaPesquisaAdmForm, FichaSelecionaAdmForm,
AnexadoForm, AnexadoEmLoteFilterSet, filtra_tramitacao_adm_destino, filtra_tramitacao_adm_destino_and_status,
PrimeiraTramitacaoEmLoteAdmFilterSet, filtra_tramitacao_adm_status, PrimeiraTramitacaoEmLoteAdmFilterSet,
TramitacaoEmLoteAdmForm, ProtocoloDocumentoForm, ProtocoloFilterSet, ProtocoloMateriaForm,
TramitacaoEmLoteAdmFilterSet, TramitacaoAdmEditForm, TramitacaoAdmForm, TramitacaoEmLoteAdmForm,
compara_tramitacoes_doc) TramitacaoEmLoteAdmFilterSet)
from .models import (AcompanhamentoDocumento, DocumentoAcessorioAdministrativo, from .models import (Anexado, AcompanhamentoDocumento, DocumentoAcessorioAdministrativo,
DocumentoAdministrativo, StatusTramitacaoAdministrativo, DocumentoAdministrativo, StatusTramitacaoAdministrativo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo, Anexado) TipoDocumentoAdministrativo, TramitacaoAdministrativo)
TipoDocumentoAdministrativoCrud = CrudAux.build( TipoDocumentoAdministrativoCrud = CrudAux.build(
@ -582,7 +578,7 @@ class ProtocoloDocumentoView(PermissionRequiredMixin,
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
template_name = "protocoloadm/protocolar_documento.html" template_name = "protocoloadm/protocolar_documento.html"
form_class = ProtocoloDocumentForm form_class = ProtocoloDocumentoForm
form_valid_message = _('Protocolo cadastrado com sucesso!') form_valid_message = _('Protocolo cadastrado com sucesso!')
permission_required = ('protocoloadm.add_protocolo', ) permission_required = ('protocoloadm.add_protocolo', )
@ -647,7 +643,10 @@ class ProtocoloDocumentoView(PermissionRequiredMixin,
protocolo.tipo_processo = '0' # TODO validar o significado protocolo.tipo_processo = '0' # TODO validar o significado
protocolo.anulado = False protocolo.anulado = False
protocolo.numero = ( numero['numero__max'] + 1 ) if numero['numero__max'] else 1 inicio_numeracao = AppConfig.objects.all()[0].inicio_numeracao_protocolo
protocolo.numero = (
(numero['numero__max'] + 1 ) if numero['numero__max'] else inicio_numeracao
)
protocolo.ano = timezone.now().year protocolo.ano = timezone.now().year
protocolo.assunto_ementa = self.request.POST['assunto'] protocolo.assunto_ementa = self.request.POST['assunto']
@ -849,10 +848,10 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView):
elif numeracao == 'U': elif numeracao == 'U':
numero = Protocolo.objects.all().aggregate(Max('numero')) numero = Protocolo.objects.all().aggregate(Max('numero'))
if numeracao is None: inicio_numeracao = AppConfig.objects.all()[0].inicio_numeracao_protocolo
numero['numero__max'] = 0 protocolo.numero = (
(numero['numero__max'] + 1 ) if numero['numero__max'] else inicio_numeracao
protocolo.numero = (numero['numero__max'] + 1) if numero['numero__max'] else 1 )
protocolo.ano = timezone.now().year protocolo.ano = timezone.now().year

2
sapl/templates/base/layouts.yaml

@ -18,7 +18,7 @@ AppConfig:
- esfera_federacao - esfera_federacao
{% trans 'Proposições e Protocolo' %}: {% trans 'Proposições e Protocolo' %}:
- sequencia_numeracao_proposicao sequencia_numeracao_protocolo - sequencia_numeracao_proposicao sequencia_numeracao_protocolo inicio_numeracao_protocolo
- protocolo_manual receber_recibo_proposicao - protocolo_manual receber_recibo_proposicao
- proposicao_incorporacao_obrigatoria escolher_numero_materia_proposicao - proposicao_incorporacao_obrigatoria escolher_numero_materia_proposicao

Loading…
Cancel
Save