From fa4608bdf8e115616eaede62aa0d47d79d901d36 Mon Sep 17 00:00:00 2001 From: Ulysses Lara Date: Mon, 3 Feb 2020 16:55:22 -0300 Subject: [PATCH] 3076 adicionar campo para complemento em doc administrativo (#3077) * Adicionando campo de caractere identificador Fix #3076 * Desabilitando o acrescimo do numero do doc quando ha a existencia do caractere * Adaptando testes * Mudando node de caracter identificador para complemento * Melhorando cadastro de complemento --- sapl/protocoloadm/forms.py | 35 ++++++++++++++----- ...oadministrativo_caractere_identificador.py | 20 +++++++++++ sapl/protocoloadm/models.py | 4 +++ sapl/protocoloadm/tests/test_protocoloadm.py | 1 + sapl/protocoloadm/views.py | 9 ++++- .../documentoadministrativo_filter.html | 2 +- .../documentoadministrativo_form.html | 22 ++++++------ sapl/templates/protocoloadm/layouts.yaml | 3 +- 8 files changed, 74 insertions(+), 22 deletions(-) create mode 100644 sapl/protocoloadm/migrations/0031_documentoadministrativo_caractere_identificador.py diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 82bba2372..4c1b2957e 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -1,3 +1,4 @@ +import re import django_filters import logging @@ -180,6 +181,7 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet): model = DocumentoAdministrativo fields = ['tipo', 'numero', + 'complemento', 'protocolo__numero', 'numero_externo', 'data', @@ -200,17 +202,21 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet): ('o', 4), ]) row2 = to_row( - [('numero', 2), - ('ano', 2), - ('protocolo__numero', 2), - ('numero_externo', 2), - ('data', 4)]) + [('numero', 5), + ('complemento',2), + ('ano', 5)]) row3 = to_row( + [('protocolo__numero', 4), + ('numero_externo', 4), + ('data', 4) + ]) + + row4 = to_row( [('interessado', 6), ('assunto', 6)]) - row4 = to_row( + row5 = to_row( [ ('tramitacao', 2), ('tramitacaoadministrativo__status', 4), @@ -239,7 +245,7 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet): Fieldset(_('Pesquisar Documento'), row1, row2, row3, row4, - buttons,) + row5, buttons,) ) @@ -1080,6 +1086,7 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): model = DocumentoAdministrativo fields = ['tipo', 'numero', + 'complemento', 'ano', 'data', 'numero_protocolo', @@ -1115,10 +1122,18 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): numero_protocolo = self.data['numero_protocolo'] ano_protocolo = self.data['ano_protocolo'] + complemento = re.sub('\s+', '', self.data['complemento']).upper() numero_documento = int(self.cleaned_data['numero']) tipo_documento = int(self.data['tipo']) ano_documento = int(self.data['ano']) + + equal_docs = DocumentoAdministrativo.objects.filter(numero=numero_documento, + ano=ano_documento, + complemento=complemento) + if equal_docs.exists() and equal_docs.first().pk != self.instance.pk: + raise ValidationError("Um documento administrativo com esse numero, complemento e ano já existe.") + # não permite atualizar para numero/ano/tipo existente if self.instance.pk: mudanca_doc = numero_documento != self.instance.numero \ @@ -1128,7 +1143,9 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): if not self.instance.pk or mudanca_doc: doc_exists = DocumentoAdministrativo.objects.filter(numero=numero_documento, tipo=tipo_documento, - ano=ano_documento).exists() + ano=ano_documento, + complemento=complemento).exists() + if doc_exists: self.logger.error("DocumentoAdministrativo (numero={}, tipo={} e ano={}) já existe." .format(numero_documento, tipo_documento, ano_documento)) @@ -1194,7 +1211,7 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): def __init__(self, *args, **kwargs): row1 = to_row( - [('tipo', 6), ('numero', 3), ('ano', 3)]) + [('tipo', 3), ('numero', 3),('complemento', 3), ('ano', 3)]) row2 = to_row( [('data', 4), ('numero_protocolo', 4), ('ano_protocolo', 4)]) diff --git a/sapl/protocoloadm/migrations/0031_documentoadministrativo_caractere_identificador.py b/sapl/protocoloadm/migrations/0031_documentoadministrativo_caractere_identificador.py new file mode 100644 index 000000000..abc1e28a6 --- /dev/null +++ b/sapl/protocoloadm/migrations/0031_documentoadministrativo_caractere_identificador.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.26 on 2020-01-15 14:41 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0030_auto_20200114_1121'), + ] + + operations = [ + migrations.AddField( + model_name='documentoadministrativo', + name='complemento', + field=models.CharField(blank=True, max_length=10, verbose_name='Complemento'), + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index b9582a204..e73a79719 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -134,6 +134,10 @@ class DocumentoAdministrativo(models.Model): TipoDocumentoAdministrativo, on_delete=models.PROTECT, verbose_name=_('Tipo Documento')) numero = models.PositiveIntegerField(verbose_name=_('Número')) + + complemento = models.CharField(max_length=10, blank=True, + verbose_name=_('Complemento')) + ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'), choices=RANGE_ANOS) protocolo = models.ForeignKey( diff --git a/sapl/protocoloadm/tests/test_protocoloadm.py b/sapl/protocoloadm/tests/test_protocoloadm.py index a1166f81b..631c56243 100644 --- a/sapl/protocoloadm/tests/test_protocoloadm.py +++ b/sapl/protocoloadm/tests/test_protocoloadm.py @@ -398,6 +398,7 @@ def test_documento_administrativo_protocolo_inexistente(): 'tipo': str(tipo.pk), 'assunto': 'teste', 'numero': '1', + 'complemento':'', 'data': '2017-10-10', 'numero_protocolo': '11', 'ano_protocolo': '2017', diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 458ff67d9..e771c59c9 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -1,5 +1,6 @@ from datetime import datetime import logging +import re from random import choice from string import ascii_letters, digits @@ -365,6 +366,10 @@ class DocumentoAdministrativoCrud(Crud): def cancel_url(self): return self.search_url + def form_valid(self, form): + form.instance.complemento = re.sub('\s+', '', form.instance.complemento).upper() + return super().form_valid(form) + class UpdateView(Crud.UpdateView): form_class = DocumentoAdministrativoForm layout_key = None @@ -376,7 +381,7 @@ class DocumentoAdministrativoCrud(Crud): self.object = form.save() dict_objeto_novo = self.object.__dict__ - + atributos = [ 'tipo_id', 'ano', 'numero', 'data', 'protocolo_id', 'assunto', 'interessado', 'tramitacao', 'restrito', 'texto_integral','numero_externo', @@ -393,6 +398,8 @@ class DocumentoAdministrativoCrud(Crud): self.object.save() break + + form.instance.complemento = re.sub('\s+', '', form.instance.complemento).upper() return super().form_valid(form) diff --git a/sapl/templates/protocoloadm/documentoadministrativo_filter.html b/sapl/templates/protocoloadm/documentoadministrativo_filter.html index 49234e5a6..e2442dc73 100644 --- a/sapl/templates/protocoloadm/documentoadministrativo_filter.html +++ b/sapl/templates/protocoloadm/documentoadministrativo_filter.html @@ -37,7 +37,7 @@ {% if request.user.is_anonymous and not d.restrito or not request.user.is_anonymous%} - {{d.tipo.sigla}} {{d.numero}}/{{d.ano}} - {{d.tipo}}
+ {{d.tipo.sigla}} {{d.numero}}{%if d.complemento %}-{{d.complemento}}{% endif %}/{{d.ano}} - {{d.tipo}}
Interessado: {{ d.interessado|default_if_none:"Não informado"}}
Assunto: {{ d.assunto|safe }} diff --git a/sapl/templates/protocoloadm/documentoadministrativo_form.html b/sapl/templates/protocoloadm/documentoadministrativo_form.html index 627271dcf..e88923e46 100644 --- a/sapl/templates/protocoloadm/documentoadministrativo_form.html +++ b/sapl/templates/protocoloadm/documentoadministrativo_form.html @@ -3,16 +3,18 @@ {% block extra_js %}