diff --git a/README.rst b/README.rst index b149ad906..3cc73b28b 100644 --- a/README.rst +++ b/README.rst @@ -17,7 +17,7 @@ atual do sistema (2.5), visite a página do `projeto na Interlegis wiki `_ + `Instalação do Ambiente de Desenvolvimento `_ Instruções para Importação da base mysql 2.5 diff --git a/docker-compose.yml b/docker-compose.yml index 695b26b22..146b7d726 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,11 @@ sapldb: ports: - "5532:5432" sapl: +<<<<<<< HEAD image: interlegis/sapl:3.1.6-BETA +======= + image: interlegis/sapl:3.1.7-BETA +>>>>>>> upstream2/master volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media diff --git a/docs/instacao31.rst b/docs/instalacao31.rst similarity index 99% rename from docs/instacao31.rst rename to docs/instalacao31.rst index 9a42573ac..731a2f67f 100644 --- a/docs/instacao31.rst +++ b/docs/instalacao31.rst @@ -151,7 +151,7 @@ Criação da `SECRET_KEY >>>>>> upstream2/master if not old.tip_votacao: new.tipo_votacao = 1 + if old.num_ordem is None: + new.numero_ordem = 999999999 + + +def adjust_ordemdia_depois_salvar(new, old): + if old.num_ordem is None and new.numero_ordem == 999999999: + with reversion.create_revision(): + problema = 'OrdemDia de PK %s tinha seu valor de numero ordem'\ + ' nulo.' % old.pk + descricao = 'O valor %s foi colocado no lugar.' % new.numero_ordem + warn(problema + ' => ' + descricao) + save_relation(obj=new, problema=problema, + descricao=descricao, eh_stub=False) + reversion.set_comment('OrdemDia sem número da ordem.') + pass if old.num_ordem is None: new.numero_ordem = 999999999 @@ -755,6 +781,13 @@ def adjust_autor(new, old): with reversion.create_revision(): user.save() reversion.set_comment('Objeto criado pela migração') + + grupo_autor = Group.objects.get(name="Autor") + user.groups.add(grupo_autor) + if old.cod_parlamentar: + grupo_parlamentar = Group.objects.get(name="Parlamentar") + user.groups.add(grupo_parlamentar) + new.user = user else: new.user = get_user_model().objects.filter( @@ -773,6 +806,7 @@ def adjust_comissao(new, old): AJUSTE_ANTES_SALVAR = { Autor: adjust_autor, + AcompanhamentoMateria: adjust_acompanhamentomateria, Comissao: adjust_comissao, NormaJuridica: adjust_normajuridica_antes_salvar, NormaRelacionada: adjust_normarelacionada, diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 37e65161a..87018e5fa 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -38,6 +38,7 @@ from sapl.materia.forms import (AnexadaForm, ConfirmarProposicaoForm, TramitacaoUpdateForm) from sapl.norma.models import LegislacaoCitada from sapl.protocoloadm.models import Protocolo +from sapl.settings import EMAIL_SEND_USER from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label, autor_modal, gerar_hash_arquivo, get_base_url, montar_row_autor) @@ -58,6 +59,7 @@ from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao, Tramitacao, UnidadeTramitacao) + AssuntoMateriaCrud = Crud.build(AssuntoMateria, 'assunto_materia') OrigemCrud = Crud.build(Origem, '') @@ -913,8 +915,16 @@ class TramitacaoCrud(MasterDetailCrud): unidade_destino = UnidadeTramitacao.objects.get( id=request.POST['unidade_tramitacao_destino'] ) +<<<<<<< HEAD do_envia_email_tramitacao( request, materia, status, unidade_destino) +======= + texto = request.POST['texto'] + data_tramitacao = request.POST['data_tramitacao'] + do_envia_email_tramitacao( + request, materia, status, + unidade_destino, texto, data_tramitacao) +>>>>>>> upstream2/master return super(CreateView, self).post(request, *args, **kwargs) class UpdateView(MasterDetailCrud.UpdateView): @@ -930,8 +940,16 @@ class TramitacaoCrud(MasterDetailCrud): unidade_destino = UnidadeTramitacao.objects.get( id=request.POST['unidade_tramitacao_destino'] ) +<<<<<<< HEAD do_envia_email_tramitacao( request, materia, status, unidade_destino) +======= + texto = request.POST['texto'] + data_tramitacao = request.POST['data_tramitacao'] + do_envia_email_tramitacao( + request, materia, status, + unidade_destino, texto, data_tramitacao) +>>>>>>> upstream2/master return super(UpdateView, self).post(request, *args, **kwargs) @@ -1292,8 +1310,9 @@ class AcompanhamentoConfirmarView(TemplateView): class AcompanhamentoExcluirView(TemplateView): - def get_redirect_url(self): - return reverse('sapl.sessao:list_pauta_sessao') + def get_success_url(self): + return reverse('sapl.materia:materialegislativa_detail', + kwargs={'pk': self.kwargs['pk']}) def get(self, request, *args, **kwargs): materia_id = kwargs['pk'] @@ -1305,7 +1324,7 @@ class AcompanhamentoExcluirView(TemplateView): except ObjectDoesNotExist: pass - return HttpResponseRedirect(self.get_redirect_url()) + return HttpResponseRedirect(self.get_success_url()) class MateriaLegislativaPesquisaView(FilterView): @@ -1484,8 +1503,14 @@ def criar_email_confirmacao(request, casa_legislativa, materia, hash_txt=''): return templates +<<<<<<< HEAD def criar_email_tramitacao(request, casa_legislativa, materia, status, unidade_destino, hash_txt=''): +======= +def criar_email_tramitacao( + request, casa_legislativa, materia, status, + unidade_destino, texto, data_tramitacao, hash_txt=''): +>>>>>>> upstream2/master if not casa_legislativa: raise ValueError("Casa Legislativa é obrigatória") @@ -1519,10 +1544,17 @@ def criar_email_tramitacao(request, casa_legislativa, materia, status, "logotipo": casa_legislativa.logotipo, "descricao_materia": materia.ementa, "autoria": autores, +<<<<<<< HEAD "data": tramitacao.data_tramitacao, "status": status, "localizacao": unidade_destino, "texto_acao": tramitacao.texto, +======= + "data": data_tramitacao, + "status": status, + "localizacao": unidade_destino, + "texto_acao": texto, +>>>>>>> upstream2/master "hash_txt": hash_txt, "materia": str(materia), "base_url": base_url, @@ -1579,7 +1611,7 @@ def do_envia_email_confirmacao(request, materia, email): confirmado=False) casa = CasaLegislativa.objects.first() - sender = 'sapl-test@interlegis.leg.br' + sender = EMAIL_SEND_USER # FIXME i18n subject = "[SAPL] " + str(materia) + " - Ative o Acompanhamento da Materia" messages = [] @@ -1601,7 +1633,12 @@ def do_envia_email_confirmacao(request, materia, email): return None +<<<<<<< HEAD def do_envia_email_tramitacao(request, materia, status, unidade_destino): +======= +def do_envia_email_tramitacao( + request, materia, status, unidade_destino, texto, data_tramitacao): +>>>>>>> upstream2/master # # Envia email de tramitacao para usuarios cadastrados # @@ -1609,7 +1646,7 @@ def do_envia_email_tramitacao(request, materia, status, unidade_destino): confirmado=True) casa = CasaLegislativa.objects.first() - sender = 'sapl-test@interlegis.leg.br' + sender = EMAIL_SEND_USER # FIXME i18n subject = "[SAPL] " + str(materia) + \ " - Acompanhamento de Materia Legislativa" @@ -1621,6 +1658,11 @@ def do_envia_email_tramitacao(request, materia, status, unidade_destino): materia, status, unidade_destino, +<<<<<<< HEAD +======= + texto, + data_tramitacao, +>>>>>>> upstream2/master destinatario.hash,) recipients.append(destinatario.email) messages.append({ @@ -1774,7 +1816,14 @@ class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView): qr = self.request.GET.copy() if ('tramitacao__status' in qr and +<<<<<<< HEAD 'tramitacao__unidade_tramitacao_destino' in qr): +======= + 'tramitacao__unidade_tramitacao_destino' in qr and + qr['tramitacao__status'] and + qr['tramitacao__unidade_tramitacao_destino'] + ): +>>>>>>> upstream2/master lista = filtra_tramitacao_destino_and_status( qr['tramitacao__status'], qr['tramitacao__unidade_tramitacao_destino']) diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index f9dc33f60..adbe6117e 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -4,6 +4,7 @@ from django.core.urlresolvers import reverse, reverse_lazy from django.db.models import F, Q from django.http import JsonResponse from django.http.response import HttpResponseRedirect +from django.templatetags.static import static from django.utils.datastructures import MultiValueDictKeyError from django.utils.translation import ugettext_lazy as _ from django.views.generic import FormView @@ -345,6 +346,14 @@ class ParlamentarCrud(Crud): # Tira Link do avatar_html e coloca no nome for row in context['rows']: + + # preenche coluna foto, se vazia + if not row[0][0]: + img = "
" \ + % static('img/avatar.png') + row[0] = (img, row[0][1]) + # Coloca a filiação atual ao invés da última if row[0][1]: # Pega o Parlamentar por meio da pk diff --git a/sapl/redireciona_urls/__init__.py b/sapl/redireciona_urls/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sapl/redireciona_urls/apps.py b/sapl/redireciona_urls/apps.py new file mode 100644 index 000000000..8ee8742bc --- /dev/null +++ b/sapl/redireciona_urls/apps.py @@ -0,0 +1,8 @@ +from django import apps +from django.utils.translation import ugettext_lazy as _ + + +class AppConfig(apps.AppConfig): + name = 'sapl.redireciona_urls' + label = 'redireciona_urls' + verbose_name = _('Redirecionador de URLs') diff --git a/sapl/redireciona_urls/exceptions.py b/sapl/redireciona_urls/exceptions.py new file mode 100644 index 000000000..e86aaefbb --- /dev/null +++ b/sapl/redireciona_urls/exceptions.py @@ -0,0 +1,13 @@ +from django.utils.translation import ugettext as _ + + +class UnknownUrlNameError(Exception): + + def __init__(self, url_name): + self.url_name = url_name + + def __str__(self): + return repr( + _("Funcionalidade") + + " '%s' " % (self.url_name) + + _("pode ter sido removida ou movida para outra url.")) diff --git a/sapl/redireciona_urls/tests.py b/sapl/redireciona_urls/tests.py new file mode 100644 index 000000000..f9ffa02ef --- /dev/null +++ b/sapl/redireciona_urls/tests.py @@ -0,0 +1,710 @@ +from django.core.urlresolvers import reverse +from django.test import TestCase + +MovedPermanentlyHTTPStatusCode = 301 +EMPTY_STRING = '' + + +class RedirecionaURLsTests(TestCase): + def test_redireciona_index_SAPL(self): + response = self.client.get(reverse( + 'sapl.redireciona_urls:redireciona_sapl_index') + ) + url_e = reverse('sapl_index') + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaParlamentarTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_parlamentar' + + def test_redireciona_parlamentar_list(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.parlamentares:parlamentar_list') + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_parlamentar_list_por_legislatura(self): + numero_legislatura = 123 + + url = reverse(self.url_pattern) + url_e = reverse('sapl.parlamentares:parlamentar_list') + + url = "%s%s" % ( + url, + "?hdn_num_legislatura=%s" % (numero_legislatura) + ) + url_e = "%s%s" % (url_e, "?pk=%s" % numero_legislatura) + + response = self.client.get(url) + + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_parlamentar_detail(self): + url = reverse(self.url_pattern) + pk_parlamentar = 21 + url = "%s%s" % (url, "?cod_parlamentar=%s" % (pk_parlamentar)) + url_e = reverse( + 'sapl.parlamentares:parlamentar_detail', + kwargs={'pk': pk_parlamentar} + ) + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaComissaoTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_comissao' + + def test_redireciona_comissao_detail(self): + url = reverse(self.url_pattern) + pk_comissao = 21 + url = "%s%s" % (url, "?cod_comissao=%s" % (pk_comissao)) + url_e = reverse( + 'sapl.comissoes:comissao_detail', + kwargs={'pk': pk_comissao} + ) + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_comissao_list(self): + url = reverse(self.url_pattern) + url_e = reverse( + 'sapl.comissoes:comissao_list') + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaPautaSessaoTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_pauta_sessao_' + + def test_redireciona_pauta_sessao_detail(self): + url = reverse(self.url_pattern) + pk_pauta_sessao = 21 + url = "%s%s" % (url, "?cod_sessao_plen=%s" % (pk_pauta_sessao)) + url_e = reverse( + 'sapl.sessao:pauta_sessao_detail', + kwargs={'pk': pk_pauta_sessao} + ) + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_pauta_sessao_list(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.sessao:pesquisar_pauta') + + response = self.client.get(url) + + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_pauta_sessao_list_por_dat_sessao_sel(self): + + url = reverse(self.url_pattern) + + ano_s_p = "2016" + mes_s_p = "05" + dia_s_p = "14" + data_s_p = "%s/%s/%s" % (dia_s_p, mes_s_p, ano_s_p) + + url = "%s%s" % (url, "?dat_sessao_sel=%s" % data_s_p) + + url_e = reverse('sapl.sessao:pesquisar_pauta') + + args_e = EMPTY_STRING + args_e += "?data_inicio__year=%s" % (ano_s_p) + args_e += "&data_inicio__month=%s" % (mes_s_p.lstrip("0")) + args_e += "&data_inicio__day=%s" % (dia_s_p.lstrip("0")) + args_e += "&tipo=&salvar=Pesquisar" + + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaMesaDiretoraTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_mesa_diretora' + + def test_redireciona_mesa_diretora(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.parlamentares:mesa_diretora') + + response = self.client.get(url) + + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaMesaDiretoraParlamentarTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_mesa_diretora_parlamentar' + + def test_redireciona_mesa_diretora_parlamentar(self): + url = reverse(self.url_pattern) + pk_parlamentar = 21 + url = "%s%s" % (url, "?cod_parlamentar=%s" % (pk_parlamentar)) + url_e = reverse( + 'sapl.parlamentares:parlamentar_detail', + kwargs={'pk': pk_parlamentar} + ) + + response = self.client.get(url) + + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaNormasJuridicasListTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_norma_juridica_pesquisa' + + def test_redireciona_norma_juridica_pesquisa_sem_parametros(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.norma:norma_pesquisa') + + tipo_norma = EMPTY_STRING + numero_norma = EMPTY_STRING + ano_norma = EMPTY_STRING + periodo_inicial_aprovacao = EMPTY_STRING + periodo_final_aprovacao = EMPTY_STRING + periodo_inicial_publicacao = EMPTY_STRING + periodo_final_publicacao = EMPTY_STRING + ementa_norma = EMPTY_STRING + assuntos_norma = EMPTY_STRING + + args = EMPTY_STRING + args += "?lst_tip_norma=%s" % (tipo_norma) + args += "&txt_numero=%s" % (numero_norma) + args += "&txt_ano=%s" % (ano_norma) + args += "&dt_norma=%s" % (periodo_inicial_aprovacao) + args += "&dt_norma2=%s" % (periodo_final_aprovacao) + args += "&dt_public=%s" % (periodo_inicial_publicacao) + args += "&dt_public2=%s" % (periodo_final_publicacao) + args += "&txt_assunto=%s" % (ementa_norma) + args += "&lst_assunto_norma=%s" % (assuntos_norma) + args += "&salvar=%s" % ('Pesquisar') + url = "%s%s" % (url, args) + + args_e = EMPTY_STRING + args_e += "?tipo=%s" % (tipo_norma) + args_e += "&numero=%s" % (numero_norma) + args_e += "&ano=%s" % (ano_norma) + args_e += "&data_0=%s" % (periodo_inicial_aprovacao) + args_e += "&data_1=%s" % (periodo_final_aprovacao) + args_e += "&data_publicacao_0=%s" % (periodo_inicial_publicacao) + args_e += "&data_publicacao_1=%s" % (periodo_final_publicacao) + args_e += "&ementa=%s" % (ementa_norma) + args_e += "&assuntos=%s" % (assuntos_norma) + args_e += "&salvar=%s" % ('Pesquisar') + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_norma_juridica_pesquisa_por_tipo(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.norma:norma_pesquisa') + + tipo_norma = '4' + numero_norma = EMPTY_STRING + ano_norma = EMPTY_STRING + periodo_inicial_aprovacao = EMPTY_STRING + periodo_final_aprovacao = EMPTY_STRING + periodo_inicial_publicacao = EMPTY_STRING + periodo_final_publicacao = EMPTY_STRING + ementa_norma = EMPTY_STRING + assuntos_norma = EMPTY_STRING + + args = EMPTY_STRING + args += "?lst_tip_norma=%s" % (tipo_norma) + args += "&txt_numero=%s" % (numero_norma) + args += "&txt_ano=%s" % (ano_norma) + args += "&dt_norma=%s" % (periodo_inicial_aprovacao) + args += "&dt_norma2=%s" % (periodo_final_aprovacao) + args += "&dt_public=%s" % (periodo_inicial_publicacao) + args += "&dt_public2=%s" % (periodo_final_publicacao) + args += "&txt_assunto=%s" % (ementa_norma) + args += "&lst_assunto_norma=%s" % (assuntos_norma) + args += "&salvar=%s" % ('Pesquisar') + url = "%s%s" % (url, args) + + args_e = EMPTY_STRING + args_e += "?tipo=%s" % (tipo_norma) + args_e += "&numero=%s" % (numero_norma) + args_e += "&ano=%s" % (ano_norma) + args_e += "&data_0=%s" % (periodo_inicial_aprovacao) + args_e += "&data_1=%s" % (periodo_final_aprovacao) + args_e += "&data_publicacao_0=%s" % (periodo_inicial_publicacao) + args_e += "&data_publicacao_1=%s" % (periodo_final_publicacao) + args_e += "&ementa=%s" % (ementa_norma) + args_e += "&assuntos=%s" % (assuntos_norma) + args_e += "&salvar=%s" % ('Pesquisar') + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_norma_juridica_pesquisa_por_ano(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.norma:norma_pesquisa') + + tipo_norma = EMPTY_STRING + numero_norma = EMPTY_STRING + ano_norma = '2010' + periodo_inicial_aprovacao = EMPTY_STRING + periodo_final_aprovacao = EMPTY_STRING + periodo_inicial_publicacao = EMPTY_STRING + periodo_final_publicacao = EMPTY_STRING + ementa_norma = EMPTY_STRING + assuntos_norma = EMPTY_STRING + + args = EMPTY_STRING + args += "?lst_tip_norma=%s" % (tipo_norma) + args += "&txt_numero=%s" % (numero_norma) + args += "&txt_ano=%s" % (ano_norma) + args += "&dt_norma=%s" % (periodo_inicial_aprovacao) + args += "&dt_norma2=%s" % (periodo_final_aprovacao) + args += "&dt_public=%s" % (periodo_inicial_publicacao) + args += "&dt_public2=%s" % (periodo_final_publicacao) + args += "&txt_assunto=%s" % (ementa_norma) + args += "&lst_assunto_norma=%s" % (assuntos_norma) + args += "&salvar=%s" % ('Pesquisar') + url = "%s%s" % (url, args) + + args_e = EMPTY_STRING + args_e += "?tipo=%s" % (tipo_norma) + args_e += "&numero=%s" % (numero_norma) + args_e += "&ano=%s" % (ano_norma) + args_e += "&data_0=%s" % (periodo_inicial_aprovacao) + args_e += "&data_1=%s" % (periodo_final_aprovacao) + args_e += "&data_publicacao_0=%s" % (periodo_inicial_publicacao) + args_e += "&data_publicacao_1=%s" % (periodo_final_publicacao) + args_e += "&ementa=%s" % (ementa_norma) + args_e += "&assuntos=%s" % (assuntos_norma) + args_e += "&salvar=%s" % ('Pesquisar') + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaNormasJuridicasDetailTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_norma_juridica_detail' + + def test_redireciona_norma_juridica_detail(self): + url = reverse(self.url_pattern) + + pk_norma = 120 + + args = EMPTY_STRING + args += "?cod_norma=%s" % (pk_norma) + url = "%s%s" % (url, args) + + url_e = reverse( + 'sapl.norma:normajuridica_detail', + kwargs={ + 'pk': pk_norma} + ) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_norma_juridica_detail_sem_parametros(self): + url = reverse(self.url_pattern) + + pk_norma = EMPTY_STRING + + args = EMPTY_STRING + args += "?cod_norma=%s" % (pk_norma) + url = "%s%s" % (url, args) + + url_e = reverse('sapl.norma:norma_pesquisa') + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaSessaoPlenariaTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_sessao_plenaria_' + + def test_redireciona_sessao_plenaria_detail(self): + url = reverse(self.url_pattern) + pk_sessao_plenaria = 258 + url = "%s%s" % (url, "?cod_sessao_plen=%s" % (pk_sessao_plenaria)) + url_e = reverse( + 'sapl.sessao:sessaoplenaria_detail', + kwargs={'pk': pk_sessao_plenaria} + ) + + response = self.client.get(url) + + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_sessao_plenaria_list_sem_parametro(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.sessao:pesquisar_sessao') + + year = EMPTY_STRING + month = EMPTY_STRING + day = EMPTY_STRING + tipo_sessao = EMPTY_STRING + + args = EMPTY_STRING + args += "?ano_sessao_sel=%s" % (year) + args += "&mes_sessao_sel=%s" % (month) + args += "&dia_sessao_sel=%s" % (day) + args += "&tip_sessao_sel=%s" % (tipo_sessao) + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + day = day.lstrip("0") + month = month.lstrip("0") + args_e = EMPTY_STRING + args_e += "?data_inicio__year=%s" % (year) + args_e += "&data_inicio__month=%s" % (month) + args_e += "&data_inicio__day=%s" % (day) + args_e += "&tipo=%s&salvar=Pesquisar" % (tipo_sessao) + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_sessao_plenaria_list_sem_tipo(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.sessao:pesquisar_sessao') + + year = '2015' + month = '04' + day = '06' + tipo_sessao = EMPTY_STRING + + args = EMPTY_STRING + args += "?ano_sessao_sel=%s" % (year) + args += "&mes_sessao_sel=%s" % (month) + args += "&dia_sessao_sel=%s" % (day) + args += "&tip_sessao_sel=%s" % (tipo_sessao) + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + day = day.lstrip("0") + month = month.lstrip("0") + args_e = EMPTY_STRING + args_e += "?data_inicio__year=%s" % (year) + args_e += "&data_inicio__month=%s" % (month) + args_e += "&data_inicio__day=%s" % (day) + args_e += "&tipo=%s&salvar=Pesquisar" % (tipo_sessao) + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_sessao_plenaria_list_sem_tipo_e_ano(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.sessao:pesquisar_sessao') + + year = EMPTY_STRING + month = '04' + day = '06' + tipo_sessao = EMPTY_STRING + + args = EMPTY_STRING + args += "?ano_sessao_sel=%s" % (year) + args += "&mes_sessao_sel=%s" % (month) + args += "&dia_sessao_sel=%s" % (day) + args += "&tip_sessao_sel=%s" % (tipo_sessao) + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + day = day.lstrip("0") + month = month.lstrip("0") + args_e = EMPTY_STRING + args_e += "?data_inicio__year=%s" % (year) + args_e += "&data_inicio__month=%s" % (month) + args_e += "&data_inicio__day=%s" % (day) + args_e += "&tipo=%s&salvar=Pesquisar" % (tipo_sessao) + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_sessao_plenaria_list_sem_ano(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.sessao:pesquisar_sessao') + + year = EMPTY_STRING + month = '04' + day = '06' + tipo_sessao = '4' + + args = EMPTY_STRING + args += "?ano_sessao_sel=%s" % (year) + args += "&mes_sessao_sel=%s" % (month) + args += "&dia_sessao_sel=%s" % (day) + args += "&tip_sessao_sel=%s" % (tipo_sessao) + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + day = day.lstrip("0") + month = month.lstrip("0") + args_e = EMPTY_STRING + args_e += "?data_inicio__year=%s" % (year) + args_e += "&data_inicio__month=%s" % (month) + args_e += "&data_inicio__day=%s" % (day) + args_e += "&tipo=%s&salvar=Pesquisar" % (tipo_sessao) + url_e = "%s%s" % (url_e, args_e) + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_sessao_plenaria_list_sem_mes_dia(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.sessao:pesquisar_sessao') + + year = '2015' + month = EMPTY_STRING + day = EMPTY_STRING + tipo_sessao = '4' + + args = EMPTY_STRING + args += "?ano_sessao_sel=%s" % (year) + args += "&mes_sessao_sel=%s" % (month) + args += "&dia_sessao_sel=%s" % (day) + args += "&tip_sessao_sel=%s" % (tipo_sessao) + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + day = day.lstrip("0") + month = month.lstrip("0") + args_e = EMPTY_STRING + args_e += "?data_inicio__year=%s" % (year) + args_e += "&data_inicio__month=%s" % (month) + args_e += "&data_inicio__day=%s" % (day) + args_e += "&tipo=%s&salvar=Pesquisar" % (tipo_sessao) + url_e = "%s%s" % (url_e, args_e) + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaHistoricoTramitacoesListTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_historico_tramitacoes' + + def test_redireciona_historico_tramitacoes_sem_parametros(self): + args_e = EMPTY_STRING + args = EMPTY_STRING + url = reverse(self.url_pattern) + url_e = reverse('sapl.base:historico_tramitacoes') + + inicio_dt_tramitacao = EMPTY_STRING + fim_dt_tramitacao = EMPTY_STRING + tipo_materia = EMPTY_STRING + unidade_local_tramitacao = EMPTY_STRING + status_tramitacao = EMPTY_STRING + + args += "?txt_dat_inicio_periodo=%s" % (inicio_dt_tramitacao) + args += "&txt_dat_fim_periodo=%s" % (fim_dt_tramitacao) + args += "&lst_tip_materia=%s" % (tipo_materia) + args += "&lst_cod_unid_tram_dest=%s" % (unidade_local_tramitacao) + args += "&lst_status=%s" % (status_tramitacao) + args += "&btn_materia_pesquisar=%s" % ('Pesquisar') + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + inicio_dt_tramitacao = inicio_dt_tramitacao.lstrip("0") + fim_dt_tramitacao = fim_dt_tramitacao.lstrip("0") + tipo_materia = tipo_materia.lstrip("0") + unidade_local_tramitacao = unidade_local_tramitacao.lstrip("0") + status_tramitacao = status_tramitacao.lstrip("0") + + if ( + (inicio_dt_tramitacao != EMPTY_STRING) or + (fim_dt_tramitacao != EMPTY_STRING) or + (tipo_materia != EMPTY_STRING) or + (unidade_local_tramitacao != EMPTY_STRING) or + (status_tramitacao != EMPTY_STRING)): + args_e += "?tramitacao__data_tramitacao_0=%s" % ( + inicio_dt_tramitacao) + args_e += "&tramitacao__data_tramitacao_1=%s" % ( + fim_dt_tramitacao) + args_e += "&tipo=%s" % (tipo_materia) + args_e += "&tramitacao__unidade_tramitacao_local=%s" % ( + unidade_local_tramitacao) + args_e += "&tramitacao__status=%s" % (status_tramitacao) + args_e += "&salvar=%s" % ('Pesquisar') + + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_historico_tramitacoes(self): + args = EMPTY_STRING + args_e = EMPTY_STRING + url = reverse(self.url_pattern) + url_e = reverse('sapl.base:historico_tramitacoes') + + inicio_dt_tramitacao = '12/07/2000' + fim_dt_tramitacao = '26/05/2017' + unidade_local_tramitacao = '0' + tipo_materia = '0' + status_tramitacao = '0' + + args += "?txt_dat_inicio_periodo=%s" % (inicio_dt_tramitacao) + args += "&txt_dat_fim_periodo=%s" % (fim_dt_tramitacao) + args += "&lst_tip_materia=%s" % (tipo_materia) + args += "&lst_cod_unid_tram_dest=%s" % (unidade_local_tramitacao) + args += "&lst_status=%s" % (status_tramitacao) + args += "&btn_materia_pesquisar=%s" % ('Pesquisar') + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + inicio_dt_tramitacao = inicio_dt_tramitacao.lstrip("0") + fim_dt_tramitacao = fim_dt_tramitacao.lstrip("0") + tipo_materia = tipo_materia.lstrip("0") + unidade_local_tramitacao = unidade_local_tramitacao.lstrip("0") + status_tramitacao = status_tramitacao.lstrip("0") + + if ( + (inicio_dt_tramitacao != EMPTY_STRING) or + (fim_dt_tramitacao != EMPTY_STRING) or + (tipo_materia != EMPTY_STRING) or + (unidade_local_tramitacao != EMPTY_STRING) or + (status_tramitacao != EMPTY_STRING)): + args_e += "?tramitacao__data_tramitacao_0=%s" % ( + inicio_dt_tramitacao) + args_e += "&tramitacao__data_tramitacao_1=%s" % ( + fim_dt_tramitacao) + args_e += "&tipo=%s" % (tipo_materia) + args_e += "&tramitacao__unidade_tramitacao_local=%s" % ( + unidade_local_tramitacao) + args_e += "&tramitacao__status=%s" % (status_tramitacao) + args_e += "&salvar=%s" % ('Pesquisar') + + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaPresencaParlamentaresTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_presencaparlamentar_list' + + def test_redireciona_presenca_list_sem_parametros(self): + args_e = EMPTY_STRING + args = EMPTY_STRING + url = reverse(self.url_pattern) + url_e = reverse('sapl.base:presenca_sessao') + + inicio_intervalo_presenca = EMPTY_STRING + fim_intervalo_presenca = EMPTY_STRING + + args += "?txt_dat_inicio=%s" % ( + inicio_intervalo_presenca) + args += "&txt_dat_fim=%s" % ( + fim_intervalo_presenca) + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + inicio_intervalo_presenca = inicio_intervalo_presenca.lstrip("0") + fim_intervalo_presenca = fim_intervalo_presenca.lstrip("0") + + args_e += "?data_inicio_0=%s" % ( + inicio_intervalo_presenca) + args_e += "&data_inicio_1=%s" % ( + fim_intervalo_presenca) + args_e += "&salvar=%s" % ('Pesquisar') + + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_presenca_list(self): + args_e = EMPTY_STRING + args = EMPTY_STRING + url = reverse(self.url_pattern) + url_e = reverse('sapl.base:presenca_sessao') + + inicio_intervalo_presenca = '01/02/2015' + fim_intervalo_presenca = '01/02/2017' + + args += "?txt_dat_inicio=%s" % ( + inicio_intervalo_presenca) + args += "&txt_dat_fim=%s" % ( + fim_intervalo_presenca) + url = "%s%s" % (url, args) + + # Remove zeros à esquerda + inicio_intervalo_presenca = inicio_intervalo_presenca.lstrip("0") + fim_intervalo_presenca = fim_intervalo_presenca.lstrip("0") + + args_e += "?data_inicio_0=%s" % ( + inicio_intervalo_presenca) + args_e += "&data_inicio_1=%s" % ( + fim_intervalo_presenca) + args_e += "&salvar=%s" % ('Pesquisar') + + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaMateriasPorAutorTests(TestCase): + url_pattern = 'sapl.redireciona_urls:redireciona_materias_por_autor_list' + + def test_redireciona_materias_por_autor_list_sem_parametros(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.base:materia_por_autor') + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + +class RedirecionaMateriasPorAnoAutorTipoTests(TestCase): + url_pattern = ( + 'sapl.redireciona_urls:redireciona_materia_por_ano_autor_tipo_list') + + def test_redireciona_materias_por_ano_autor_tipo_list_sem_parametros(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.base:materia_por_ano_autor_tipo') + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) + + def test_redireciona_materias_por_ano_autor_tipo_list(self): + url = reverse(self.url_pattern) + url_e = reverse('sapl.base:materia_por_ano_autor_tipo') + + ano = 2017 + + args = "?ano=%s" % (ano) + url = "%s%s" % (url, args) + + args_e = "?ano=%s&salvar=Pesquisar" % (ano) + url_e = "%s%s" % (url_e, args_e) + + response = self.client.get(url) + self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) + self.assertEqual(response.url, url_e) diff --git a/sapl/redireciona_urls/urls.py b/sapl/redireciona_urls/urls.py new file mode 100644 index 000000000..8e8ac7d99 --- /dev/null +++ b/sapl/redireciona_urls/urls.py @@ -0,0 +1,80 @@ +from .apps import AppConfig +from .views import ( + RedirecionaAtasList, + RedirecionaComissao, + RedirecionaHistoricoTramitacoesList, + RedirecionaMateriaLegislativaDetail, + RedirecionaMateriaLegislativaList, + RedirecionaMateriasPorAnoAutorTipo, + RedirecionaMateriasPorAutor, + RedirecionaMesaDiretoraView, + RedirecionaNormasJuridicasDetail, + RedirecionaNormasJuridicasList, + RedirecionaParlamentar, + RedirecionaPautaSessao, + RedirecionaPresencaParlamentares, + RedirecionaRelatoriosList, + RedirecionaRelatoriosMateriasEmTramitacaoList, + RedirecionaSessaoPlenaria, + RedirecionaSAPLIndex) +from django.conf.urls import url + + +app_name = AppConfig.name + +urlpatterns = [ + url(r'^default_index_html$', + RedirecionaSAPLIndex.as_view(), + name='redireciona_sapl_index'), + url(r'^consultas/parlamentar/parlamentar_', + RedirecionaParlamentar.as_view(), + name='redireciona_parlamentar'), + url(r'^consultas/comissao/comissao_', + RedirecionaComissao.as_view(), + name='redireciona_comissao'), + url(r'^consultas/pauta_sessao/pauta_sessao_', + RedirecionaPautaSessao.as_view(), + name='redireciona_pauta_sessao_'), + url(r'^consultas/mesa_diretora/mesa_diretora_index_html', + RedirecionaMesaDiretoraView.as_view(), + name='redireciona_mesa_diretora'), + url(r'^consultas/mesa_diretora/parlamentar/parlamentar_', + RedirecionaParlamentar.as_view(), + name='redireciona_mesa_diretora_parlamentar'), + url(r'^consultas/sessao_plenaria/', + RedirecionaSessaoPlenaria.as_view(), + name='redireciona_sessao_plenaria_'), + url(r'^generico/norma_juridica_pesquisar_', + RedirecionaNormasJuridicasList.as_view(), + name='redireciona_norma_juridica_pesquisa'), + url(r'^consultas/norma_juridica/norma_juridica_mostrar_proc', + RedirecionaNormasJuridicasDetail.as_view(), + name='redireciona_norma_juridica_detail'), + url(r'^relatorios_administrativos/relatorios_administrativos_index_html$', + RedirecionaRelatoriosList.as_view(), + name='redireciona_relatorios_list'), + url(r'tramitacaoMaterias/tramitacaoMaterias', + RedirecionaRelatoriosMateriasEmTramitacaoList.as_view(), + name='redireciona_relatorio_materia_por_tramitacao'), + url(r'tramitacaoMaterias/materia_mostrar_proc$', + RedirecionaMateriaLegislativaDetail.as_view(), + name='redireciona_materialegislativa_detail'), + url(r'^generico/materia_pesquisar_', + RedirecionaMateriaLegislativaList.as_view(), + name='redireciona_materialegislativa_list'), + url(r'historicoTramitacoes/historicoTramitacoes', + RedirecionaHistoricoTramitacoesList.as_view(), + name='redireciona_historico_tramitacoes'), + url(r'atasSessao', + RedirecionaAtasList.as_view(), + name='redireciona_atas_list'), + url(r'presencaSessao', + RedirecionaPresencaParlamentares.as_view(), + name='redireciona_presencaparlamentar_list'), + url(r'resumoPropositurasAutor', + RedirecionaMateriasPorAutor.as_view(), + name='redireciona_materias_por_autor_list'), + url(r'propositurasAnoAutorTipo', + RedirecionaMateriasPorAnoAutorTipo.as_view(), + name='redireciona_materia_por_ano_autor_tipo_list'), +] diff --git a/sapl/redireciona_urls/views.py b/sapl/redireciona_urls/views.py new file mode 100644 index 000000000..8e9d5afbe --- /dev/null +++ b/sapl/redireciona_urls/views.py @@ -0,0 +1,577 @@ +from .exceptions import UnknownUrlNameError +from django.core.urlresolvers import NoReverseMatch, reverse +from django.views.generic import RedirectView +from sapl.base.apps import AppConfig as atasConfig +from sapl.base.apps import AppConfig as presenca_sessaoConfig +from sapl.base.apps import AppConfig as relatoriosConfig +from sapl.comissoes.apps import AppConfig as comissoesConfig +from sapl.materia.apps import AppConfig as materiaConfig +from sapl.norma.apps import AppConfig as normaConfig +from sapl.parlamentares.apps import AppConfig as parlamentaresConfig +from sapl.sessao.apps import AppConfig as sessaoConfig + +EMPTY_STRING = '' + +app_parlamentares = parlamentaresConfig.name +app_atas = atasConfig.name +app_presenca_sessao = presenca_sessaoConfig.name +app_comissoes = comissoesConfig.name +app_materia = materiaConfig.name +app_sessao = sessaoConfig.name +app_norma = normaConfig.name +app_relatorios = relatoriosConfig.name + +pesquisar_atas = (app_atas + ':atas') +presenca_sessao = (app_presenca_sessao + ':presenca_sessao') +parlamentar_list = (app_parlamentares + ':parlamentar_list') +parlamentar_detail = (app_parlamentares + ':parlamentar_detail') +parlamentar_mesa_diretora = (app_parlamentares + ':mesa_diretora') + +comissao_list = (app_comissoes + ':comissao_list') +comissao_detail = (app_comissoes + ':comissao_detail') + + +materialegislativa_detail = (app_materia + ':materialegislativa_detail') +materialegislativa_list = (app_materia + ':pesquisar_materia') + +pauta_sessao_list = (app_sessao + ':pesquisar_pauta') +pauta_sessao_detail = (app_sessao + ':pauta_sessao_detail') +sessao_plenaria_list = (app_sessao + ':pesquisar_sessao') +sessao_plenaria_detail = (app_sessao + ':sessaoplenaria_detail') + +norma_juridica_detail = (app_norma + ':normajuridica_detail') +norma_juridica_pesquisa = (app_norma + ':norma_pesquisa') + +relatorios_list = (app_relatorios + ':relatorios_list') +relatorio_materia_por_tramitacao = (app_relatorios + ':materia_por_tramitacao') +relatorio_materia_por_autor = (app_relatorios + ':materia_por_autor') +relatorio_materia_por_ano_autor_tipo = ( + app_relatorios + ':materia_por_ano_autor_tipo') +historico_tramitacoes = (app_relatorios + ':historico_tramitacoes') + + +class RedirecionaSAPLIndex(RedirectView): + permanent = True + + def get_redirect_url(self): + url_pattern = 'sapl_index' + try: + url = reverse(url_pattern) + except NoReverseMatch: + raise UnknownUrlNameError(url_pattern) + return url + + +class RedirecionaParlamentar(RedirectView): + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + pk_parlamentar = self.request.GET.get( + 'cod_parlamentar', + EMPTY_STRING) + + if pk_parlamentar: + try: + kwargs = {'pk': pk_parlamentar} + url = reverse(parlamentar_detail, kwargs=kwargs) + except NoReverseMatch: + raise UnknownUrlNameError(parlamentar_detail, kwargs=kwargs) + else: + try: + url = reverse(parlamentar_list) + except NoReverseMatch: + raise UnknownUrlNameError(parlamentar_list) + + numero_legislatura = self.request.GET.get( + 'hdn_num_legislatura', + EMPTY_STRING) + if numero_legislatura: + args = '?pk=' + numero_legislatura + url = "%s%s" % (url, args) + + return url + + +class RedirecionaComissao(RedirectView): + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + pk_comissao = self.request.GET.get('cod_comissao', EMPTY_STRING) + + if pk_comissao: + kwargs = {'pk': pk_comissao} + + try: + url = reverse(comissao_detail, kwargs=kwargs) + except NoReverseMatch: + raise UnknownUrlNameError(comissao_detail) + else: + try: + url = reverse(comissao_list) + except NoReverseMatch: + raise UnknownUrlNameError(comissao_list) + return url + + +class RedirecionaPautaSessao(RedirectView): + permanent = True + + def get_redirect_url(self): + pk_sessao_plenaria = self.request.GET.get( + 'cod_sessao_plen', + EMPTY_STRING) + + if pk_sessao_plenaria: + kwargs = {'pk': pk_sessao_plenaria} + try: + url = reverse(pauta_sessao_detail, kwargs=kwargs) + except NoReverseMatch: + raise UnknownUrlNameError(pauta_sessao_detail) + else: + try: + url = reverse(pauta_sessao_list) + except NoReverseMatch: + raise UnknownUrlNameError(pauta_sessao_list) + + data_sessao_plenaria = self.request.GET.get( + 'dat_sessao_sel', + EMPTY_STRING) + + if data_sessao_plenaria: + dia_s_p, mes_s_p, ano_s_p = data_sessao_plenaria.split('/') + # Remove zeros à esquerda de dia_s_p e mes_s_p + dia_s_p = dia_s_p.lstrip("0") + mes_s_p = mes_s_p.lstrip("0") + args = EMPTY_STRING + args += "?data_inicio__year=%s" % (ano_s_p) + args += "&data_inicio__month=%s" % (mes_s_p) + args += "&data_inicio__day=%s" % (dia_s_p) + args += "&tipo=&salvar=Pesquisar" + url = "%s%s" % (url, args) + + return url + + +class RedirecionaSessaoPlenaria(RedirectView): + permanent = True + + def get_redirect_url(self): + pk_sessao_plenaria = self.request.GET.get( + 'cod_sessao_plen', + EMPTY_STRING) + url = EMPTY_STRING + if pk_sessao_plenaria: + kwargs = {'pk': pk_sessao_plenaria} + try: + url = reverse(sessao_plenaria_detail, kwargs=kwargs) + except NoReverseMatch: + raise UnknownUrlNameError(sessao_plenaria_detail) + + else: + try: + url = reverse(sessao_plenaria_list) + except NoReverseMatch: + raise UnknownUrlNameError(sessao_plenaria_list) + + year = self.request.GET.get( + 'ano_sessao_sel', + EMPTY_STRING) + month = self.request.GET.get( + 'mes_sessao_sel', + EMPTY_STRING) + day = self.request.GET.get( + 'dia_sessao_sel', + EMPTY_STRING) + tipo_sessao = self.request.GET.get( + 'tip_sessao_sel', + EMPTY_STRING) + + # Remove zeros à esquerda + day = day.lstrip("0") + month = month.lstrip("0") + args = EMPTY_STRING + args += "?data_inicio__year=%s" % (year) + args += "&data_inicio__month=%s" % (month) + args += "&data_inicio__day=%s" % (day) + args += "&tipo=%s&salvar=Pesquisar" % (tipo_sessao) + url = "%s%s" % (url, args) + + return url + + +class RedirecionaRelatoriosList(RedirectView): + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + try: + url = reverse(relatorios_list) + except NoReverseMatch: + raise UnknownUrlNameError(relatorios_list) + return url + + +class RedirecionaRelatoriosMateriasEmTramitacaoList(RedirectView): + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + try: + url = reverse(relatorio_materia_por_tramitacao) + except NoReverseMatch: + raise UnknownUrlNameError(relatorio_materia_por_tramitacao) + + year = self.request.GET.get( + 'selAno', + EMPTY_STRING) + if year: + tramitacao_tipo = self.request.GET.get( + 'lst_tip_materia', + EMPTY_STRING) + tramitacao_unidade_local = self.request.GET.get( + 'lst_cod_unid_tram_dest', + EMPTY_STRING) + tramitacao_status = self.request.GET.get( + 'lst_status', + EMPTY_STRING) + salvar = self.request.GET.get( + 'btn_materia_pesquisar', + 'Pesquisar') + + tramitacao_tipo = tramitacao_tipo.lstrip("0") + tramitacao_unidade_local = tramitacao_unidade_local.lstrip("0") + tramitacao_status = tramitacao_status.lstrip("0") + + args = EMPTY_STRING + args += "?ano=%s" % (year) + args += "&tipo=%s" % (tramitacao_tipo) + args += "&tramitacao__unidade_tramitacao_local=%s" % ( + tramitacao_unidade_local) + args += "&tramitacao__status=%s" % (tramitacao_status) + args += "&salvar=%s" % (salvar) + url = "%s%s" % (url, args) + + return url + + +class RedirecionaMateriaLegislativaDetail(RedirectView): + permanent = True + + def get_redirect_url(self): + pk = self.request.GET.get('cod_materia', EMPTY_STRING) + + if pk: + kwargs = {'pk': pk} + return reverse(materialegislativa_detail, kwargs=kwargs) + else: + return reverse(materialegislativa_list) + + +class RedirecionaMateriaLegislativaList(RedirectView): + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + args = EMPTY_STRING + try: + url = reverse(materialegislativa_list) + except NoReverseMatch: + raise UnknownUrlNameError(materialegislativa_list) + + tipo_materia = self.request.GET.get( + 'lst_tip_materia', + EMPTY_STRING) + numero_materia = self.request.GET.get( + 'txt_numero', + EMPTY_STRING) + ano_materia = self.request.GET.get( + 'txt_ano', + EMPTY_STRING) + num_protocolo_materia = self.request.GET.get( + 'txt_num_protocolo', + EMPTY_STRING) + periodo_inicial_apresentacao = self.request.GET.get( + 'dt_apres', + EMPTY_STRING) + periodo_final_apresentacao = self.request.GET.get( + 'dt_apres2', + EMPTY_STRING) + periodo_inicial_publicacao = self.request.GET.get( + 'dt_public', + EMPTY_STRING) + periodo_final_publicacao = self.request.GET.get( + 'dt_public2', + EMPTY_STRING) + tipo_autor = self.request.GET.get( + 'lst_tip_autor', + EMPTY_STRING) + ementa_materia = self.request.GET.get( + 'txt_assunto', + EMPTY_STRING) + tramitando = self.request.GET.get( + 'rad_tramitando', + EMPTY_STRING) + status_tramitacao = self.request.GET.get( + 'lst_status', + EMPTY_STRING) + + args += "?tipo=%s" % (tipo_materia) + args += "&numero=%s" % (numero_materia) + args += "&ano=%s" % (ano_materia) + args += "&numero_protocolo=%s" % (num_protocolo_materia) + args += "&data_apresentacao_0=%s" % (periodo_inicial_apresentacao) + args += "&data_apresentacao_1=%s" % (periodo_final_apresentacao) + args += "&data_publicacao_0=%s" % (periodo_inicial_publicacao) + args += "&data_publicacao_1=%s" % (periodo_final_publicacao) + args += "&autoria__autor=%s" % (EMPTY_STRING) + args += "&autoria__autor__tipo=%s" % (tipo_autor) + args += "&relatoria__parlamentar_id=%s" % (EMPTY_STRING) + args += "&local_origem_externa=%s" % (EMPTY_STRING) + args += "&tramitacao__unidade_tramitacao_destino=%s" % (EMPTY_STRING) + args += "&tramitacao__status=%s" % (status_tramitacao) + args += "&em_tramitacao=%s" % (tramitando) + args += "&o=%s" % (EMPTY_STRING) + args += "&materiaassunto__assunto=%s" % (EMPTY_STRING) + args += "&ementa=%s" % (ementa_materia) + args += "&salvar=%s" % ('Pesquisar') # Default in both SAPL version + + url = "%s%s" % (url, args) + + return url + + +class RedirecionaMesaDiretoraView(RedirectView): + permanent = True + + def get_redirect_url(self): + try: + url = reverse(parlamentar_mesa_diretora) + except NoReverseMatch: + raise UnknownUrlNameError(parlamentar_mesa_diretora) + + return url + + +class RedirecionaNormasJuridicasDetail(RedirectView): + permanent = True + + def get_redirect_url(self): + pk_norma = self.request.GET.get('cod_norma', EMPTY_STRING) + + if pk_norma: + kwargs = {'pk': pk_norma} + return reverse(norma_juridica_detail, kwargs=kwargs) + else: + return reverse(norma_juridica_pesquisa) + + +class RedirecionaNormasJuridicasList(RedirectView): + + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + args = EMPTY_STRING + try: + url = reverse(norma_juridica_pesquisa) + except NoReverseMatch: + raise UnknownUrlNameError(norma_juridica_pesquisa) + + tipo_norma = self.request.GET.get( + 'lst_tip_norma', + EMPTY_STRING) + numero_norma = self.request.GET.get( + 'txt_numero', + EMPTY_STRING) + ano_norma = self.request.GET.get( + 'txt_ano', + EMPTY_STRING) + periodo_inicial_aprovacao = self.request.GET.get( + 'dt_norma', + EMPTY_STRING) + periodo_final_aprovacao = self.request.GET.get( + 'dt_norma2', + EMPTY_STRING) + periodo_inicial_publicacao = self.request.GET.get( + 'dt_public', + EMPTY_STRING) + periodo_final_publicacao = self.request.GET.get( + 'dt_public2', + EMPTY_STRING) + ementa_norma = self.request.GET.get( + 'txt_assunto', + EMPTY_STRING) + assuntos_norma = self.request.GET.get( + 'lst_assunto_norma', + EMPTY_STRING) + + args += "?tipo=%s" % (tipo_norma) + args += "&numero=%s" % (numero_norma) + args += "&ano=%s" % (ano_norma) + args += "&data_0=%s" % (periodo_inicial_aprovacao) + args += "&data_1=%s" % (periodo_final_aprovacao) + args += "&data_publicacao_0=%s" % (periodo_inicial_publicacao) + args += "&data_publicacao_1=%s" % (periodo_final_publicacao) + args += "&ementa=%s" % (ementa_norma) + args += "&assuntos=%s" % (assuntos_norma) + args += "&salvar=%s" % ('Pesquisar') # Default in both SAPL version + + url = "%s%s" % (url, args) + + return url + + +class RedirecionaHistoricoTramitacoesList(RedirectView): + + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + args = EMPTY_STRING + try: + url = reverse(historico_tramitacoes) + except NoReverseMatch: + raise UnknownUrlNameError(historico_tramitacoes) + + inicio_intervalo_data_tramitacao = self.request.GET.get( + 'txt_dat_inicio_periodo', + EMPTY_STRING + ).lstrip("0") + fim_intervalo_data_tramitacao = self.request.GET.get( + 'txt_dat_fim_periodo', + EMPTY_STRING + ).lstrip("0") + tipo_materia = self.request.GET.get( + 'lst_tip_materia', + EMPTY_STRING + ).lstrip("0") + unidade_local_tramitacao = self.request.GET.get( + 'lst_cod_unid_tram_dest', + EMPTY_STRING + ).lstrip("0") + status_tramitacao = self.request.GET.get( + 'lst_status', + EMPTY_STRING + ).lstrip("0") + + if ( + (inicio_intervalo_data_tramitacao != EMPTY_STRING) or + (fim_intervalo_data_tramitacao != EMPTY_STRING) or + (tipo_materia != EMPTY_STRING) or + (unidade_local_tramitacao != EMPTY_STRING) or + (status_tramitacao != EMPTY_STRING)): + + args += "?tramitacao__data_tramitacao_0=%s" % ( + inicio_intervalo_data_tramitacao) + args += "&tramitacao__data_tramitacao_1=%s" % ( + fim_intervalo_data_tramitacao) + args += "&tipo=%s" % (tipo_materia) + args += "&tramitacao__unidade_tramitacao_local=%s" % ( + unidade_local_tramitacao) + args += "&tramitacao__status=%s" % (status_tramitacao) + args += "&salvar=%s" % ('Pesquisar') + + url = "%s%s" % (url, args) + + return url + + +class RedirecionaAtasList(RedirectView): + + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + args = EMPTY_STRING + try: + url = reverse(pesquisar_atas) + except NoReverseMatch: + raise UnknownUrlNameError(pesquisar_atas) + + inicio_intervalo_data_ata = self.request.GET.get( + 'txt_dat_inicio', + EMPTY_STRING + ).lstrip("0") + fim_intervalo_data_ata = self.request.GET.get( + 'txt_dat_fim', + EMPTY_STRING + ).lstrip("0") + + args += "?data_inicio_0=%s" % ( + inicio_intervalo_data_ata) + args += "&data_inicio_1=%s" % ( + fim_intervalo_data_ata) + args += "&salvar=%s" % ('Pesquisar') + + url = "%s%s" % (url, args) + + return url + + +class RedirecionaPresencaParlamentares(RedirectView): + + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + args = EMPTY_STRING + try: + url = reverse(presenca_sessao) + except NoReverseMatch: + raise UnknownUrlNameError(presenca_sessao) + + inicio_intervalo_data_presenca_parlamentar = self.request.GET.get( + 'txt_dat_inicio', + EMPTY_STRING + ).lstrip("0") + fim_intervalo_data_presenca_parlamentar = self.request.GET.get( + 'txt_dat_fim', + EMPTY_STRING + ).lstrip("0") + + args += "?data_inicio_0=%s" % ( + inicio_intervalo_data_presenca_parlamentar) + args += "&data_inicio_1=%s" % ( + fim_intervalo_data_presenca_parlamentar) + args += "&salvar=%s" % ('Pesquisar') + + url = "%s%s" % (url, args) + + return url + + +class RedirecionaMateriasPorAutor(RedirectView): + + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + try: + url = reverse(relatorio_materia_por_autor) + except NoReverseMatch: + raise UnknownUrlNameError(relatorio_materia_por_autor) + + return url + + +class RedirecionaMateriasPorAnoAutorTipo(RedirectView): + + permanent = True + + def get_redirect_url(self): + url = EMPTY_STRING + ano = self.request.GET.get('ano', '') + + try: + url = reverse(relatorio_materia_por_ano_autor_tipo) + except NoReverseMatch: + raise UnknownUrlNameError(relatorio_materia_por_ano_autor_tipo) + + if ano: + args = "?ano=%s" % (ano) + args += "&salvar=%s" % ('Pesquisar') + url = "%s%s" % (url, args) + + return url diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 90d3f4a10..150897243 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -996,6 +996,7 @@ def insere_parlamentar_composicao(request): else: return JsonResponse( {'msg': ('Você não tem permissão para esta operação!', 0)}) +<<<<<<< HEAD def remove_parlamentar_composicao(request): @@ -1016,6 +1017,28 @@ def remove_parlamentar_composicao(request): {'msg': ( 'Composição da Mesa não pôde ser removida!', 0)}) +======= + + +def remove_parlamentar_composicao(request): + """ + Essa função lida com qualquer operação de remoção + na composição da Mesa Diretora + """ + if request.POST and request.user.has_perm( + '%s.delete_%s' % ( + AppConfig.label, IntegranteMesa._meta.model_name)): + + if 'composicao_mesa' in request.POST: + try: + composicao = IntegranteMesa.objects.get( + id=int(request.POST['composicao_mesa'])) + except ObjectDoesNotExist: + return JsonResponse( + {'msg': ( + 'Composição da Mesa não pôde ser removida!', 0)}) + +>>>>>>> upstream2/master composicao.delete() return JsonResponse( diff --git a/sapl/settings.py b/sapl/settings.py index 694c12a95..69665f60b 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -53,6 +53,7 @@ SAPL_APPS = ( 'sapl.lexml', 'sapl.painel', 'sapl.protocoloadm', + 'sapl.redireciona_urls', 'sapl.compilacao', 'sapl.api', diff --git a/sapl/static/img/avatar.png b/sapl/static/img/avatar.png new file mode 100644 index 000000000..959c168a5 Binary files /dev/null and b/sapl/static/img/avatar.png differ diff --git a/sapl/static/styles/app.scss b/sapl/static/styles/app.scss index b7d83a3df..f1a1ff684 100644 --- a/sapl/static/styles/app.scss +++ b/sapl/static/styles/app.scss @@ -235,6 +235,8 @@ fieldset { .avatar-parlamentar { height: 84px; width: 84px; + margin: 0 auto; + display: table; } /* INDEX */ diff --git a/sapl/templates/materia/em_lote/acessorio.html b/sapl/templates/materia/em_lote/acessorio.html index a4b09d796..9f5407a5f 100644 --- a/sapl/templates/materia/em_lote/acessorio.html +++ b/sapl/templates/materia/em_lote/acessorio.html @@ -63,6 +63,13 @@
Matérias para inclusão do Documento Acessório +
+
+ +
+
@@ -85,3 +92,13 @@ {% endif %} {% endif %} {% endblock detail_content %} +{% block extra_js %} + +{% endblock %} diff --git a/sapl/templates/materia/em_lote/tramitacao.html b/sapl/templates/materia/em_lote/tramitacao.html index 687dcddd2..948eea1ce 100644 --- a/sapl/templates/materia/em_lote/tramitacao.html +++ b/sapl/templates/materia/em_lote/tramitacao.html @@ -93,11 +93,19 @@
2. Selecione as matérias para primeira tramitação:
Matéria
+
+
+ +
+
{% for materia in object_list %} +
Matéria
@@ -115,3 +123,13 @@ {% endif %} {% endif %} {% endblock detail_content %} +{% block extra_js %} + +{% endblock %} diff --git a/sapl/templates/protocoloadm/protocolo_filter.html b/sapl/templates/protocoloadm/protocolo_filter.html index 36fbf092a..6493ae37d 100644 --- a/sapl/templates/protocoloadm/protocolo_filter.html +++ b/sapl/templates/protocoloadm/protocolo_filter.html @@ -44,7 +44,17 @@
Assunto: {{ p.assunto_ementa|default_if_none:"Não Informado"}}
Data Protocolo: {{ p.data|date:"d/m/Y"|default_if_none:"Não Informado" }} - Horário: {{ p.hora|date:"G:i:s" }}
+<<<<<<< HEAD Autor: {{p.autor.nome}}
+======= + + {% if p.tipo_processo == 0 %} + Interessado: {{ p.interessado|default_if_none:"Não informado" }}
+ {% elif p.tipo_processo == 1 %} + Autor: {{ p.autor.nome|default_if_none:"Não informado" }}
+ {% endif %} + +>>>>>>> upstream2/master Natureza do Processo: {% if p.tipo_processo == 0 %} Administrativo
diff --git a/sapl/test_urls.py b/sapl/test_urls.py index 40339cef7..8b5207276 100644 --- a/sapl/test_urls.py +++ b/sapl/test_urls.py @@ -172,6 +172,27 @@ apps_url_patterns_prefixs_and_users = { 'prefixs': [ '/ta', ]}, + 'redireciona_urls': { + 'prefixs': [ + '/default_index_html', + '/consultas/parlamentar/parlamentar_', + '/consultas/comissao/comissao_', + '/consultas/pauta_sessao/pauta_sessao_', + '/consultas/sessao_plenaria/', + '/relatorios_administrativos/relatorios_administrativos_index_html', + '/tramitacaoMaterias/tramitacaoMaterias', + '/tramitacaoMaterias/materia_mostrar_proc', + '/generico/materia_pesquisar_', + '/consultas/mesa_diretora/mesa_diretora_index_html', + '/consultas/mesa_diretora/parlamentar/parlamentar_', + '/generico/norma_juridica_pesquisar_', + '/consultas/norma_juridica/norma_juridica_mostrar_proc', + '/historicoTramitacoes/historicoTramitacoes', + '/atasSessao', + '/presencaSessao', + '/resumoPropositurasAutor', + '/propositurasAnoAutorTipo', + ]}, 'lexml': { 'prefixs': [ '/lexml', @@ -235,6 +256,7 @@ apps_url_patterns_prefixs_and_users = { } +@pytest.mark.skip(reason="TODO: Lento demais. Precisa ser refatorado") @pytest.mark.parametrize('url_item', _lista_urls) def test_urlpatterns(url_item, admin_client): @@ -328,7 +350,7 @@ urls_publicas_excecoes = { '/proposicao/1', '/proposicao/create', '/proposicao/1/edit', - '/proposicao/1/delete', + '/proposicao/1/delete' }, 'get': [ diff --git a/sapl/urls.py b/sapl/urls.py index fe6bcc71e..91d3adeb6 100644 --- a/sapl/urls.py +++ b/sapl/urls.py @@ -30,11 +30,12 @@ import sapl.norma.urls import sapl.painel.urls import sapl.parlamentares.urls import sapl.protocoloadm.urls +import sapl.redireciona_urls.urls import sapl.relatorios.urls import sapl.sessao.urls urlpatterns = [ - url(r'^$', TemplateView.as_view(template_name='index.html')), + url(r'^$', TemplateView.as_view(template_name='index.html'), name='sapl_index'), url(r'^message$', TemplateView.as_view(template_name='base.html')), url(r'^admin/', include(admin.site.urls)), @@ -61,6 +62,7 @@ urlpatterns = [ # Folhas XSLT e extras referenciadas por documentos migrados do sapl 2.5 url(r'^XSLT/HTML/(?P.*)$', RedirectView.as_view( url='/static/XSLT/HTML/%(path)s', permanent=False)), + url(r'', include(sapl.redireciona_urls.urls)), ] diff --git a/start.sh b/start.sh index 1b00801a2..4688434d3 100755 --- a/start.sh +++ b/start.sh @@ -33,7 +33,10 @@ create_env() { echo "EMAIL_HOST = ""${EMAIL_HOST-''}" >> $FILENAME echo "EMAIL_HOST_USER = ""${EMAIL_HOST_USER-''}" >> $FILENAME echo "EMAIL_HOST_PASSWORD = ""${EMAIL_HOST_PASSWORD-''}" >> $FILENAME - + echo "EMAIL_SEND_USER = ""${EMAIL_HOST_USER-''}" >> $FILENAME + echo "DEFAULT_FROM_EMAIL = ""${EMAIL_HOST_USER-''}" >> $FILENAME + echo "SERVER_EMAIL = ""${EMAIL_HOST_USER-''}" >> $FILENAME + echo "[ENV FILE] done." }