Repository: interlegis/sapl

Issue:
Protocolo - setar valor inicial
Permitir definir um valor inicial para o número de protocolo.


Discussion:

Resolving patch:
diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py
--- a/sapl/protocoloadm/forms.py
+++ b/sapl/protocoloadm/forms.py
@@ -308,6 +308,8 @@ class ProtocoloDocumentForm(ModelForm):
     observacao = forms.CharField(required=False,
                                  widget=forms.Textarea, label='Observação')
 
+    numero = forms.IntegerField(required=False, label='Número de Protocolo (opcional)')
+
     class Meta:
         model = Protocolo
         fields = ['tipo_protocolo',
@@ -316,6 +318,7 @@ class Meta:
                   'assunto',
                   'interessado',
                   'observacao',
+                  'numero'
                   ]
 
     def __init__(self, *args, **kwargs):
@@ -331,6 +334,8 @@ def __init__(self, *args, **kwargs):
             [('interessado', 12)])
         row5 = to_row(
             [('observacao', 12)])
+        row6 = to_row(
+            [('numero', 12)])
 
         self.helper = FormHelper()
         self.helper.layout = Layout(
@@ -341,6 +346,11 @@ def __init__(self, *args, **kwargs):
                      row4,
                      row5,
                      HTML("&nbsp;"),
+                     ),
+            Fieldset(_('Número do Protocolo (Apenas se quiser que a numeração comece '
+                       'a partir do número a ser informado)'),
+                     row6,
+                     HTML("&nbsp;"),
                      form_actions(label=_('Protocolar Documento'))
                      )
         )
@@ -385,6 +395,8 @@ class ProtocoloMateriaForm(ModelForm):
     assunto_ementa = forms.CharField(required=True,
                                      widget=forms.Textarea, label='Ementa')
 
+    numero = forms.IntegerField(required=False, label='Número de Protocolo (opcional)')
+
     class Meta:
         model = Protocolo
         fields = ['tipo_materia',
@@ -395,7 +407,8 @@ class Meta:
                   'observacao',
                   'numero_materia',
                   'ano_materia',
-                  'vincular_materia'
+                  'vincular_materia',
+                  'numero'
                   ]
 
     def clean_autor(self):
@@ -447,12 +460,24 @@ def __init__(self, *args, **kwargs):
             [('assunto_ementa', 12)])
         row4 = to_row(
             [('observacao', 12)])
+        row5 = to_row(
+            [('numero', 12)])
 
         self.helper = FormHelper()
         self.helper.layout = Layout(
             Fieldset(_('Identificação da Matéria'),
-                     row1, row2, row3,
-                     row4, form_actions(label='Protocolar Matéria')))
+                     row1,
+                     row2,
+                     row3,
+                     row4,
+                     HTML("&nbsp;"),
+                     ),
+            Fieldset(_('Número do Protocolo (Apenas se quiser que a numeração comece'
+                       ' a partir do número a ser informado)'),
+                row5,
+                HTML("&nbsp;"),
+                form_actions(label=_('Protocolar Matéria')))
+        )
 
         super(ProtocoloMateriaForm, self).__init__(
             *args, **kwargs)
diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py
--- a/sapl/protocoloadm/views.py
+++ b/sapl/protocoloadm/views.py
@@ -304,7 +304,12 @@ def form_valid(self, form):
 
         protocolo.tipo_processo = '0'  # TODO validar o significado
         protocolo.anulado = False
-        protocolo.numero = (numero['numero__max'] + 1) if numero['numero__max'] else 1
+        if not protocolo.numero:
+            protocolo.numero = (numero['numero__max'] + 1) if numero['numero__max'] else 1
+        if protocolo.numero < (numero['numero__max'] + 1):
+            msg = _('Número de protocolo deve ser maior que {}').format(numero['numero__max'])
+            messages.add_message(self.request, messages.ERROR, msg)
+            return self.render_to_response(self.get_context_data())
         protocolo.ano = timezone.now().year
         protocolo.data = timezone.now()
         protocolo.hora = timezone.now().time()
@@ -415,6 +420,7 @@ def get_success_url(self, protocolo):
             'pk': protocolo.pk})
 
     def form_valid(self, form):
+        protocolo = form.save(commit=False)
         try:
             numeracao = sapl.base.models.AppConfig.objects.last(
             ).sequencia_numeracao
@@ -443,10 +449,12 @@ def form_valid(self, form):
         if numeracao is None:
             numero['numero__max'] = 0
 
-        protocolo = Protocolo()
-
-        protocolo.numero = (
-            numero['numero__max'] + 1) if numero['numero__max'] else 1
+        if not protocolo.numero:
+            protocolo.numero = (numero['numero__max'] + 1) if numero['numero__max'] else 1
+        if protocolo.numero < (numero['numero__max'] + 1):
+            msg = _('Número de protocolo deve ser maior que {}').format(numero['numero__max'])
+            messages.add_message(self.request, messages.ERROR, msg)
+            return self.render_to_response(self.get_context_data())
         protocolo.ano = timezone.now().year
         protocolo.data = timezone.now().date()
         protocolo.hora = timezone.now().time()


Test patch: