From 25c679cba94e166002e649c17c970571f6f15db8 Mon Sep 17 00:00:00 2001 From: "tapumar@gmail.com" Date: Thu, 1 Mar 2018 10:24:31 -0300 Subject: [PATCH 1/3] HOT-FIX: tirar ipdb do materia/form --- sapl/materia/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 011181ec7..5c4032635 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1250,7 +1250,7 @@ class ProposicaoForm(forms.ModelForm): inst.texto_original: inst.texto_original.delete() inst.save() - import ipdb; ipdb.set_trace() + if receber_recibo == True or not inst.texto_original: inst.hash_code = '' else: From 379baafb9c9d58bb93a80f908203361937ed5b7e Mon Sep 17 00:00:00 2001 From: "tapumar@gmail.com" Date: Thu, 1 Mar 2018 11:22:19 -0300 Subject: [PATCH 2/3] HOT-HOT-FIX: gerar hash_code para texto articulado --- sapl/materia/forms.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 5c4032635..5ee44e1c2 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1208,6 +1208,20 @@ class ProposicaoForm(forms.ModelForm): "Arquivo muito grande. ( > {0}MB )".format(max_size)) return texto_original + def gerar_hash(self, inst, receber_recibo): + + inst.save() + if receber_recibo == True: + inst.hash_code = '' + else: + if inst.texto_original: + inst.hash_code = gerar_hash_arquivo( + inst.texto_original.path, str(inst.pk)) + elif inst.texto_articulado.exists(): + ta = inst.texto_articulado.first() + # FIXME hash para textos articulados + inst.hash_code = 'P' + ta.hash() + '/' + str(inst.pk) + def clean(self): super(ProposicaoForm, self).clean() @@ -1249,13 +1263,8 @@ class ProposicaoForm(forms.ModelForm): not cd['texto_original'] and \ inst.texto_original: inst.texto_original.delete() - inst.save() - if receber_recibo == True or not inst.texto_original: - inst.hash_code = '' - else: - _hash = gerar_hash_arquivo(inst.texto_original.path, str(inst.pk)) - inst.hash_code = _hash + self.gerar_hash(inst, receber_recibo) return super().save(commit) @@ -1267,12 +1276,7 @@ class ProposicaoForm(forms.ModelForm): inst.numero_proposicao = ( numero__max + 1) if numero__max else 1 - inst.save() - if receber_recibo == True or not inst.texto_original: - inst.hash_code = '' - else: - _hash = gerar_hash_arquivo(inst.texto_original.path, str(inst.pk)) - inst.hash_code = _hash + self.gerar_hash(inst, receber_recibo) inst.save() From f3d1a9925a16a7e15ef864430d43f28377efde42 Mon Sep 17 00:00:00 2001 From: Talitha Pumar Date: Thu, 1 Mar 2018 11:45:54 -0300 Subject: [PATCH 3/3] 1664 fix numeracao materia legislativa (#1726) * Fix #1714 * Fixes #1718 * Fix #1718 * Progress * Fix #1664 * Fix #1664 * Fix #1664 --- sapl/materia/forms.py | 2 +- sapl/materia/tests/test_materia.py | 75 ++++++++++++++++++++++++++++++ sapl/materia/urls.py | 2 +- sapl/materia/views.py | 6 ++- 4 files changed, 81 insertions(+), 4 deletions(-) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 5ee44e1c2..6ef99995b 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1575,7 +1575,7 @@ class ConfirmarProposicaoForm(ProposicaoForm): except AttributeError: pass - tipo = proposicao.tipo.tipo_conteudo_related + tipo = self.instance.tipo.tipo_conteudo_related if tipo.sequencia_numeracao: numeracao = tipo.sequencia_numeracao diff --git a/sapl/materia/tests/test_materia.py b/sapl/materia/tests/test_materia.py index c0a0358d6..ff8f89ad6 100644 --- a/sapl/materia/tests/test_materia.py +++ b/sapl/materia/tests/test_materia.py @@ -1,10 +1,12 @@ import pytest +from django.db.models import Max from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.core.files.uploadedfile import SimpleUploadedFile from django.core.urlresolvers import reverse from model_mommy import mommy from sapl.base.models import Autor, TipoAutor +from sapl.parlamentares.models import Legislatura from sapl.comissoes.models import Comissao, TipoComissao from sapl.materia.models import (Anexada, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, @@ -505,3 +507,76 @@ def test_form_errors_proposicao(admin_client): ['Este campo é obrigatório.']) assert (response.context_data['form'].errors['descricao'] == ['Este campo é obrigatório.']) + + + +@pytest.mark.django_db(transaction=False) +def test_numeracao_materia_legislativa_por_legislatura(admin_client): + + #Criar Legislaturas + legislatura1 = mommy.make(Legislatura, + data_inicio='2014-01-01', + data_fim='2018-12-31', + numero=20, + data_eleicao='2013-10-15' + ) + legislatura2 = mommy.make(Legislatura, + data_inicio='2009-01-01', + data_fim='2013-12-31', + numero=21, + data_eleicao='2018-10-15' + ) + + + # Cria uma materia na legislatura1 + tipo_materia = mommy.make(TipoMateriaLegislativa, id=1,sequencia_numeracao='L') + materia = mommy.make(MateriaLegislativa, + tipo=tipo_materia, + ano=2017, + numero=1 + ) + + url = reverse('sapl.materia:recuperar_materia') + + # Testa numeração do Materia Legislativa na Legislatura1 + query_params = '?tipo={}&ano={}'.format(materia.tipo.id, materia.ano) + response = admin_client.get(url + query_params, follow=True) + response_content = eval(response.content.decode('ascii')) + esperado_legislatura1 = eval('{"numero": 2, "ano": "2017"}') + assert response_content['numero'] == esperado_legislatura1['numero'] + + # Testa numeração do Materia Legislativa na Legislatura2 + query_params = '?tipo={}&ano={}'.format(1, '2010') + response = admin_client.get(url + query_params, follow=True) + response_content = eval(response.content.decode('ascii')) + esperado_legislatura2 = eval('{"ano": "2010", "numero": 1}') + assert response_content['numero'] == esperado_legislatura2['numero'] + + +@pytest.mark.django_db(transaction=False) +def test_numeracao_materia_legislativa_por_ano(admin_client): + + # Cria uma materia + tipo_materia = mommy.make(TipoMateriaLegislativa, id=1,sequencia_numeracao='A') + materia = mommy.make(MateriaLegislativa, + tipo=tipo_materia, + ano=2017, + numero=1 + ) + + + url = reverse('sapl.materia:recuperar_materia') + + # Testa numeração da Materia Legislativa no ano da materia criada + query_params = '?tipo={}&ano={}'.format(materia.tipo.id, materia.ano) + response = admin_client.get(url + query_params, follow=True) + response_content = eval(response.content.decode('ascii')) + esperado_ano = eval('{"numero": 2, "ano": "2017"}') + assert response_content['numero'] == esperado_ano['numero'] + + # Testa numeração da Materia Legislativa de outro ano + query_params = '?tipo={}&ano={}'.format(1, '2010') + response = admin_client.get(url + query_params, follow=True) + response_content = eval(response.content.decode('ascii')) + esperado_outro_ano = eval('{"ano": "2010", "numero": 1}') + assert response_content['numero'] == esperado_outro_ano['numero'] diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index 67ecf010f..3a30800d2 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -62,7 +62,7 @@ urlpatterns_materia = [ url(r'^materia/(?P[0-9]+)/create_simplificado$', CriarProtocoloMateriaView.as_view(), name='materia_create_simplificado'), - url(r'^materia/recuperar-materia', recuperar_materia), + url(r'^materia/recuperar-materia',recuperar_materia, name='recuperar_materia'), url(r'^materia/(?P[0-9]+)/ta$', MateriaTaView.as_view(), name='materia_ta'), diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 7ca7c0b7a..ffeda503b 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -295,9 +295,11 @@ def recuperar_materia(request): if numeracao == 'A': numero = MateriaLegislativa.objects.filter( - ano=timezone.now().year).aggregate(Max('numero')) + ano=ano).aggregate(Max('numero')) elif numeracao == 'L': - legislatura = Legislatura.objects.first() + legislatura = Legislatura.objects.filter( + data_inicio__year__lte=ano, + data_fim__year__gte=ano).first() data_inicio = legislatura.data_inicio data_fim = legislatura.data_fim numero = MateriaLegislativa.objects.filter(