Repository: interlegis/sapl

Issue:
Alteração da vinculação da Matéria Legislativa com outro protocolo inexistente
Na edição de uma Matéria Legislativa, está se permitindo modificar o numero do protocolo, pra um outro número qualquer, existente ou não.

Sugestão: estando preenchido o número do protocolo, bloquea-lo para alteração.

Em se permitindo a modificação, teria que validar os dados da matéria como tipo, ano e número, no novo número de protocolo indicado e também, a anulação do número do protocolo anterior que foi alterado.


grato

Adal/Morale


Discussion:
@54adal, pode ocorrer a vinculação de mais de uma Matéria Legislativa por protocolo?
Não.

2018-05-03 17:55 GMT-03:00 Talitha Pumar <notifications@github.com>:

> @54adal <https://github.com/54adal>, pode ocorrer a vinculação de mais de
> uma Matéria Legislativa por protocolo?
>
> —
> You are receiving this because you are subscribed to this thread.
> Reply to this email directly, view it on GitHub
> <https://github.com/interlegis/sapl/issues/1922#issuecomment-386433699>,
> or mute the thread
> <https://github.com/notifications/unsubscribe-auth/ACAkCQGwNwXYQmu0S7k-KNScNH_pBqTfks5tu26rgaJpZM4TxpTG>
> .
>



-- 
Att,

Claudio Morale
celular: 9965-6139

Obrigada @morale. O mesmo vale para Documento Administrativo?
Certamente! O campo numero do protocolo também está liberado para edição. Pode bloqueá-lo!

Resolving patch:
diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py
--- a/sapl/materia/forms.py
+++ b/sapl/materia/forms.py
@@ -36,7 +36,7 @@
 from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
                                TipoNormaJuridica)
 from sapl.parlamentares.models import Legislatura
-from sapl.protocoloadm.models import Protocolo
+from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo
 from sapl.settings import MAX_DOC_UPLOAD_SIZE
 from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES,
                         ChoiceWithoutValidationField,
@@ -182,19 +182,39 @@ def clean(self):
 
         data_apresentacao = cleaned_data['data_apresentacao']
         ano = cleaned_data['ano']
+        protocolo = cleaned_data['numero_protocolo']
+        protocolo_antigo = self.instance.numero_protocolo
+
+        if protocolo:
+            if not Protocolo.objects.filter(numero=protocolo,ano=ano).exists():
+                raise ValidationError(_('Protocolo %s/%s não'
+                                        ' existe' % (protocolo, ano)))
+
+            if protocolo_antigo != protocolo:
+                exist_materia = MateriaLegislativa.objects.filter(
+                                                    numero_protocolo=protocolo,
+                                                    ano=ano).exists()
+
+                exist_doc = DocumentoAdministrativo.objects.filter(
+                                                        protocolo_id=protocolo,
+                                                        ano=ano).exists()
+                if exist_materia or exist_doc:
+                    raise ValidationError(_('Protocolo %s/%s ja possui'
+                                            ' documento vinculado'
+                                             % (protocolo, ano)))
 
         if data_apresentacao.year != ano:
-            raise ValidationError("O ano da matéria não pode ser "
-                                  "diferente do ano na data de apresentação")
+            raise ValidationError(_("O ano da matéria não pode ser "
+                                  "diferente do ano na data de apresentação"))
 
         ano_origem_externa = cleaned_data['ano_origem_externa']
         data_origem_externa = cleaned_data['data_origem_externa']
 
         if ano_origem_externa and data_origem_externa and \
                 ano_origem_externa != data_origem_externa.year:
-            raise ValidationError("O ano de origem externa da matéria não "
+            raise ValidationError(_("O ano de origem externa da matéria não "
                                   "pode ser diferente do ano na data de "
-                                  "origem externa")
+                                  "origem externa"))
 
         return cleaned_data
 
diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py
--- a/sapl/protocoloadm/forms.py
+++ b/sapl/protocoloadm/forms.py
@@ -698,6 +698,22 @@ def clean(self):
                         numero_protocolo, ano_protocolo))
                 raise ValidationError(msg)
 
+            inst = self.instance.protocolo
+            protocolo_antigo = inst.numero if inst else None
+
+            if str(protocolo_antigo) != numero_protocolo:
+                exist_materia = MateriaLegislativa.objects.filter(
+                                                    numero_protocolo=numero_protocolo,
+                                                    ano=ano_protocolo).exists()
+
+                exist_doc = DocumentoAdministrativo.objects.filter(
+                                                        protocolo_id=numero_protocolo,
+                                                        ano=ano_protocolo).exists()
+                if exist_materia or exist_doc:
+                    raise ValidationError(_('Protocolo %s/%s ja possui'
+                                            ' documento vinculado'
+                                            % (numero_protocolo, ano_protocolo)))
+
         return self.cleaned_data
 
     def save(self, commit=True):


Test patch: