Browse Source

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
pull/3163/head
Ulysses Lara 5 years ago
committed by Edward Ribeiro
parent
commit
fa4608bdf8
  1. 35
      sapl/protocoloadm/forms.py
  2. 20
      sapl/protocoloadm/migrations/0031_documentoadministrativo_caractere_identificador.py
  3. 4
      sapl/protocoloadm/models.py
  4. 1
      sapl/protocoloadm/tests/test_protocoloadm.py
  5. 7
      sapl/protocoloadm/views.py
  6. 2
      sapl/templates/protocoloadm/documentoadministrativo_filter.html
  7. 2
      sapl/templates/protocoloadm/documentoadministrativo_form.html
  8. 3
      sapl/templates/protocoloadm/layouts.yaml

35
sapl/protocoloadm/forms.py

@ -1,3 +1,4 @@
import re
import django_filters import django_filters
import logging import logging
@ -180,6 +181,7 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
model = DocumentoAdministrativo model = DocumentoAdministrativo
fields = ['tipo', fields = ['tipo',
'numero', 'numero',
'complemento',
'protocolo__numero', 'protocolo__numero',
'numero_externo', 'numero_externo',
'data', 'data',
@ -200,17 +202,21 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
('o', 4), ]) ('o', 4), ])
row2 = to_row( row2 = to_row(
[('numero', 2), [('numero', 5),
('ano', 2), ('complemento',2),
('protocolo__numero', 2), ('ano', 5)])
('numero_externo', 2),
('data', 4)])
row3 = to_row( row3 = to_row(
[('protocolo__numero', 4),
('numero_externo', 4),
('data', 4)
])
row4 = to_row(
[('interessado', 6), [('interessado', 6),
('assunto', 6)]) ('assunto', 6)])
row4 = to_row( row5 = to_row(
[ [
('tramitacao', 2), ('tramitacao', 2),
('tramitacaoadministrativo__status', 4), ('tramitacaoadministrativo__status', 4),
@ -239,7 +245,7 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
Fieldset(_('Pesquisar Documento'), Fieldset(_('Pesquisar Documento'),
row1, row2, row1, row2,
row3, row4, row3, row4,
buttons,) row5, buttons,)
) )
@ -1080,6 +1086,7 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm):
model = DocumentoAdministrativo model = DocumentoAdministrativo
fields = ['tipo', fields = ['tipo',
'numero', 'numero',
'complemento',
'ano', 'ano',
'data', 'data',
'numero_protocolo', 'numero_protocolo',
@ -1115,10 +1122,18 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm):
numero_protocolo = self.data['numero_protocolo'] numero_protocolo = self.data['numero_protocolo']
ano_protocolo = self.data['ano_protocolo'] ano_protocolo = self.data['ano_protocolo']
complemento = re.sub('\s+', '', self.data['complemento']).upper()
numero_documento = int(self.cleaned_data['numero']) numero_documento = int(self.cleaned_data['numero'])
tipo_documento = int(self.data['tipo']) tipo_documento = int(self.data['tipo'])
ano_documento = int(self.data['ano']) 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 # não permite atualizar para numero/ano/tipo existente
if self.instance.pk: if self.instance.pk:
mudanca_doc = numero_documento != self.instance.numero \ mudanca_doc = numero_documento != self.instance.numero \
@ -1128,7 +1143,9 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm):
if not self.instance.pk or mudanca_doc: if not self.instance.pk or mudanca_doc:
doc_exists = DocumentoAdministrativo.objects.filter(numero=numero_documento, doc_exists = DocumentoAdministrativo.objects.filter(numero=numero_documento,
tipo=tipo_documento, tipo=tipo_documento,
ano=ano_documento).exists() ano=ano_documento,
complemento=complemento).exists()
if doc_exists: if doc_exists:
self.logger.error("DocumentoAdministrativo (numero={}, tipo={} e ano={}) já existe." self.logger.error("DocumentoAdministrativo (numero={}, tipo={} e ano={}) já existe."
.format(numero_documento, tipo_documento, ano_documento)) .format(numero_documento, tipo_documento, ano_documento))
@ -1194,7 +1211,7 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = to_row( row1 = to_row(
[('tipo', 6), ('numero', 3), ('ano', 3)]) [('tipo', 3), ('numero', 3),('complemento', 3), ('ano', 3)])
row2 = to_row( row2 = to_row(
[('data', 4), ('numero_protocolo', 4), ('ano_protocolo', 4)]) [('data', 4), ('numero_protocolo', 4), ('ano_protocolo', 4)])

20
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'),
),
]

4
sapl/protocoloadm/models.py

@ -134,6 +134,10 @@ class DocumentoAdministrativo(models.Model):
TipoDocumentoAdministrativo, on_delete=models.PROTECT, TipoDocumentoAdministrativo, on_delete=models.PROTECT,
verbose_name=_('Tipo Documento')) verbose_name=_('Tipo Documento'))
numero = models.PositiveIntegerField(verbose_name=_('Número')) numero = models.PositiveIntegerField(verbose_name=_('Número'))
complemento = models.CharField(max_length=10, blank=True,
verbose_name=_('Complemento'))
ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'), ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'),
choices=RANGE_ANOS) choices=RANGE_ANOS)
protocolo = models.ForeignKey( protocolo = models.ForeignKey(

1
sapl/protocoloadm/tests/test_protocoloadm.py

@ -398,6 +398,7 @@ def test_documento_administrativo_protocolo_inexistente():
'tipo': str(tipo.pk), 'tipo': str(tipo.pk),
'assunto': 'teste', 'assunto': 'teste',
'numero': '1', 'numero': '1',
'complemento':'',
'data': '2017-10-10', 'data': '2017-10-10',
'numero_protocolo': '11', 'numero_protocolo': '11',
'ano_protocolo': '2017', 'ano_protocolo': '2017',

7
sapl/protocoloadm/views.py

@ -1,5 +1,6 @@
from datetime import datetime from datetime import datetime
import logging import logging
import re
from random import choice from random import choice
from string import ascii_letters, digits from string import ascii_letters, digits
@ -365,6 +366,10 @@ class DocumentoAdministrativoCrud(Crud):
def cancel_url(self): def cancel_url(self):
return self.search_url 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): class UpdateView(Crud.UpdateView):
form_class = DocumentoAdministrativoForm form_class = DocumentoAdministrativoForm
layout_key = None layout_key = None
@ -394,6 +399,8 @@ class DocumentoAdministrativoCrud(Crud):
self.object.save() self.object.save()
break break
form.instance.complemento = re.sub('\s+', '', form.instance.complemento).upper()
return super().form_valid(form) return super().form_valid(form)
def get_initial(self): def get_initial(self):

2
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%} {% if request.user.is_anonymous and not d.restrito or not request.user.is_anonymous%}
<tr> <tr>
<td> <td>
<strong><a href="{% url 'sapl.protocoloadm:documentoadministrativo_detail' d.id %}">{{d.tipo.sigla}} {{d.numero}}/{{d.ano}} - {{d.tipo}}</strong></a></br> <strong><a href="{% url 'sapl.protocoloadm:documentoadministrativo_detail' d.id %}">{{d.tipo.sigla}} {{d.numero}}{%if d.complemento %}-{{d.complemento}}{% endif %}/{{d.ano}} - {{d.tipo}}</strong></a></br>
<strong>Interessado:</strong>&nbsp;{{ d.interessado|default_if_none:"Não informado"}} <strong>Interessado:</strong>&nbsp;{{ d.interessado|default_if_none:"Não informado"}}
</br> </br>
<strong>Assunto:</strong>&nbsp;{{ d.assunto|safe }} <strong>Assunto:</strong>&nbsp;{{ d.assunto|safe }}

2
sapl/templates/protocoloadm/documentoadministrativo_form.html

@ -3,6 +3,7 @@
{% block extra_js %} {% block extra_js %}
<script language="Javascript"> <script language="Javascript">
function atualizar_numero_documento(){ function atualizar_numero_documento(){
if ($('id_complemento').val() ==''){
var tipo = $("#id_tipo").val() var tipo = $("#id_tipo").val()
var ano = $("#id_ano").val() var ano = $("#id_ano").val()
if (tipo){ if (tipo){
@ -15,6 +16,7 @@
}); });
} }
} }
}
var fields = ["#id_tipo", "#id_ano"] var fields = ["#id_tipo", "#id_ano"]
for (i = 0; i < fields.length; i++) { for (i = 0; i < fields.length; i++) {
$(fields[i]).change(atualizar_numero_documento); $(fields[i]).change(atualizar_numero_documento);

3
sapl/templates/protocoloadm/layouts.yaml

@ -5,7 +5,8 @@ TipoDocumentoAdministrativo:
DocumentoAdministrativo: DocumentoAdministrativo:
{% trans 'Identificação Básica' %}: {% trans 'Identificação Básica' %}:
- tipo numero ano - tipo
- numero complemento ano
- data protocolo - data protocolo
- assunto - assunto
- interessado tramitacao - interessado tramitacao

Loading…
Cancel
Save