From 6c3ca7e57b4ab027f4f76147802e7be14fa0f3d8 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Mon, 7 Jan 2019 00:03:10 -0200 Subject: [PATCH] corrige erro apontado pelo teste de doc adms inexistentes --- sapl/protocoloadm/forms.py | 6 +++--- sapl/protocoloadm/tests/test_protocoloadm.py | 7 +++++-- sapl/utils.py | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 9e8920f7f..9a9bda40b 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -20,8 +20,8 @@ from sapl.materia.models import (MateriaLegislativa, TipoMateriaLegislativa, UnidadeTramitacao) from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, AnoNumeroOrderingFilter, RangeWidgetOverride, autor_label, autor_modal, - choice_anos_com_protocolo, - choice_anos_com_documentoadministrativo, ANO_CHOICES) + choice_anos_com_protocolo, choice_force_optional, + choice_anos_com_documentoadministrativo) from .models import (AcompanhamentoDocumento, DocumentoAcessorioAdministrativo, DocumentoAdministrativo, @@ -711,7 +711,7 @@ class DocumentoAdministrativoForm(ModelForm): required=False, label=Protocolo._meta. get_field('ano').verbose_name, - choices=[('', '---------')] + choice_anos_com_protocolo(), + choices=choice_force_optional(choice_anos_com_protocolo), widget=forms.Select( attrs={'class': 'selector'})) diff --git a/sapl/protocoloadm/tests/test_protocoloadm.py b/sapl/protocoloadm/tests/test_protocoloadm.py index d61d7b2b3..2a4c9f53c 100644 --- a/sapl/protocoloadm/tests/test_protocoloadm.py +++ b/sapl/protocoloadm/tests/test_protocoloadm.py @@ -1,6 +1,7 @@ from datetime import date, timedelta from django.core.urlresolvers import reverse +from django.utils import timezone from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ from model_mommy import mommy @@ -191,7 +192,7 @@ def test_create_tramitacao(admin_client): 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'documento': documento_adm.pk, 'status': status.pk, - 'data_tramitacao': date.today() + timedelta( + 'data_tramitacao': timezone.now().date() + timedelta( days=1)}, follow=True) @@ -370,7 +371,9 @@ def test_documento_administrativo_protocolo_inexistente(): tipo = mommy.make(TipoDocumentoAdministrativo) protocolo = mommy.make(Protocolo, ano=2017, - numero=10) + numero=10, + anulado=False, + tipo_documento=tipo) form = DocumentoAdministrativoForm(data={'ano': '2017', 'tipo': str(tipo.pk), diff --git a/sapl/utils.py b/sapl/utils.py index b1970c46b..ee8271b4f 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -387,6 +387,26 @@ def choice_anos_com_sessaoplenaria(): return [] +def choice_force_optional(callable): + """ Django-filter faz algo que tenha o mesmo sentido em ChoiceFilter, + no entanto, as funções choice_anos_... podem ser usadas em formulários + comuns de adição e/ou edição, com a particularidade de terem + required=False. + Neste caso para ser possível contar com a otimização de apenas mostrar anos + que estejam na base de dados e ainda colocar o item opcional '---------', + é necessário encapsular então, as funções choice_anos_... com a + esta função choice_force_optional... isso ocorre e foi aplicado + inicialmente no cadastro de documentos administrativos onde tem-se + opcionalmente a possibilidade de colocar o ano do protocolo. + Em ChoiceFilter choice_force_optional não deve ser usado pois duplicaria + o item opcional '---------' já que ChoiceFilter já o adiciona, como dito + anteriormente. + """ + def _func(): + return [('', '---------')] + callable() + return _func + + TIPOS_TEXTO_PERMITIDOS = ( 'application/vnd.oasis.opendocument.text', 'application/x-vnd.oasis.opendocument.text',