From 4b9ce1db65d3e3763e563c8aec8b913f4f4e935e Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 11 Jul 2017 12:34:57 -0300 Subject: [PATCH 01/49] =?UTF-8?q?Comenta=20gatilho=20de=20indexa=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20normas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/norma/apps.py | 4 ++-- sapl/norma/signals.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sapl/norma/apps.py b/sapl/norma/apps.py index f1b12064b..c4d55ade0 100644 --- a/sapl/norma/apps.py +++ b/sapl/norma/apps.py @@ -7,5 +7,5 @@ class AppConfig(apps.AppConfig): label = 'norma' verbose_name = _('Norma Jurídica') -# def ready(self): -# from . import signals + def ready(self): + from . import signals diff --git a/sapl/norma/signals.py b/sapl/norma/signals.py index c01ac927d..5743428e1 100644 --- a/sapl/norma/signals.py +++ b/sapl/norma/signals.py @@ -4,5 +4,5 @@ from sapl.utils import delete_texto, save_texto from .models import NormaJuridica -post_save.connect(save_texto, sender=NormaJuridica) -post_delete.connect(delete_texto, sender=NormaJuridica) +# post_save.connect(save_texto, sender=NormaJuridica) +# post_delete.connect(delete_texto, sender=NormaJuridica) From aa77412623c0598326e4d70b27e9884e25465924 Mon Sep 17 00:00:00 2001 From: Edward Date: Wed, 12 Jul 2017 09:58:05 -0300 Subject: [PATCH 02/49] Adiciona data_ultima_atualizacao em Norma, MateriaLegislativa e DocumentoAcessorio (#1270) Este campo permite que se se use o comando do haystack ./manage.py update_index --age=2 para indexar somente os registros que foram modificados nas ultimas duas horas. --- sapl/base/search_indexes.py | 9 +++++++ .../migrations/0009_auto_20170712_0951.py | 25 +++++++++++++++++++ sapl/materia/models.py | 10 ++++++++ ...6_normajuridica_data_ultima_atualizacao.py | 20 +++++++++++++++ sapl/norma/models.py | 7 +++++- 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 sapl/materia/migrations/0009_auto_20170712_0951.py create mode 100644 sapl/norma/migrations/0006_normajuridica_data_ultima_atualizacao.py diff --git a/sapl/base/search_indexes.py b/sapl/base/search_indexes.py index bee7a54e3..e614a2f79 100644 --- a/sapl/base/search_indexes.py +++ b/sapl/base/search_indexes.py @@ -28,6 +28,9 @@ class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable): def index_queryset(self, using=None): return self.get_model().objects.all() + def get_updated_field(self): + return 'data_ultima_atualizacao' + def solr_extraction(self, arquivo): extracted_data = self._get_backend(None).extract_file_contents( arquivo)['contents'] @@ -111,6 +114,9 @@ class MateriaLegislativaIndex(DocumentoAcessorioIndex): model = MateriaLegislativa template_name = 'materia/materialegislativa_text.txt' + def get_updated_field(self): + return 'data_ultima_atualizacao' + class NormaJuridicaIndex(DocumentoAcessorioIndex): text = indexes.CharField(document=True, use_template=True) @@ -118,3 +124,6 @@ class NormaJuridicaIndex(DocumentoAcessorioIndex): filename = 'texto_integral' model = NormaJuridica template_name = 'norma/normajuridica_text.txt' + + def get_updated_field(self): + return 'data_ultima_atualizacao' diff --git a/sapl/materia/migrations/0009_auto_20170712_0951.py b/sapl/materia/migrations/0009_auto_20170712_0951.py new file mode 100644 index 000000000..ecec298a9 --- /dev/null +++ b/sapl/materia/migrations/0009_auto_20170712_0951.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-07-12 09:51 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0008_auto_20170622_1527'), + ] + + operations = [ + migrations.AddField( + model_name='documentoacessorio', + name='data_ultima_atualizacao', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data'), + ), + migrations.AddField( + model_name='materialegislativa', + name='data_ultima_atualizacao', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data'), + ), + ] diff --git a/sapl/materia/models.py b/sapl/materia/models.py index ec17e1ded..8d9eae4f5 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -225,6 +225,11 @@ class MateriaLegislativa(models.Model): through_fields=('materia', 'autor'), symmetrical=False,) + data_ultima_atualizacao = models.DateTimeField( + blank=True, null=True, + auto_now=True, + verbose_name=_('Data')) + class Meta: verbose_name = _('Matéria Legislativa') verbose_name_plural = _('Matérias Legislativas') @@ -421,6 +426,11 @@ class DocumentoAcessorio(models.Model): proposicao = GenericRelation( 'Proposicao', related_query_name='proposicao') + data_ultima_atualizacao = models.DateTimeField( + blank=True, null=True, + auto_now=True, + verbose_name=_('Data')) + class Meta: verbose_name = _('Documento Acessório') verbose_name_plural = _('Documentos Acessórios') diff --git a/sapl/norma/migrations/0006_normajuridica_data_ultima_atualizacao.py b/sapl/norma/migrations/0006_normajuridica_data_ultima_atualizacao.py new file mode 100644 index 000000000..9f5d5faba --- /dev/null +++ b/sapl/norma/migrations/0006_normajuridica_data_ultima_atualizacao.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-07-12 09:51 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0005_merge'), + ] + + operations = [ + migrations.AddField( + model_name='normajuridica', + name='data_ultima_atualizacao', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data'), + ), + ] diff --git a/sapl/norma/models.py b/sapl/norma/models.py index 20166e7f5..a80f5a564 100644 --- a/sapl/norma/models.py +++ b/sapl/norma/models.py @@ -69,7 +69,7 @@ class NormaJuridica(models.Model): ('F', 'federal', _('Federal')), ('M', 'municipal', _('Municipal')), ) - + texto_integral = models.FileField( blank=True, null=True, @@ -121,6 +121,11 @@ class NormaJuridica(models.Model): texto_articulado = GenericRelation( TextoArticulado, related_query_name='texto_articulado') + data_ultima_atualizacao = models.DateTimeField( + blank=True, null=True, + auto_now=True, + verbose_name=_('Data')) + class Meta: verbose_name = _('Norma Jurídica') verbose_name_plural = _('Normas Jurídicas') From 71491c33dd3769b66bc98199e6d8027f6862e4e5 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 12 Jul 2017 12:07:27 -0300 Subject: [PATCH 03/49] Introduz o RealtimeSignalProcessor --- sapl/materia/signals.py | 5 ----- sapl/norma/signals.py | 3 --- sapl/settings.py | 1 + sapl/utils.py | 17 ----------------- 4 files changed, 1 insertion(+), 25 deletions(-) diff --git a/sapl/materia/signals.py b/sapl/materia/signals.py index 9dd5e4fb9..e82f3b692 100644 --- a/sapl/materia/signals.py +++ b/sapl/materia/signals.py @@ -8,8 +8,3 @@ from .models import DocumentoAcessorio, MateriaLegislativa tramitacao_signal = django.dispatch.Signal(providing_args=['post', 'request']) - -# post_save.connect(save_texto, sender=MateriaLegislativa) -# post_save.connect(save_texto, sender=DocumentoAcessorio) -# post_delete.connect(delete_texto, sender=MateriaLegislativa) -# post_delete.connect(delete_texto, sender=DocumentoAcessorio) diff --git a/sapl/norma/signals.py b/sapl/norma/signals.py index 5743428e1..8f2e77c4b 100644 --- a/sapl/norma/signals.py +++ b/sapl/norma/signals.py @@ -3,6 +3,3 @@ from django.db.models.signals import post_delete, post_save from sapl.utils import delete_texto, save_texto from .models import NormaJuridica - -# post_save.connect(save_texto, sender=NormaJuridica) -# post_delete.connect(delete_texto, sender=NormaJuridica) diff --git a/sapl/settings.py b/sapl/settings.py index 8769115bc..7ca99b1bf 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -86,6 +86,7 @@ INSTALLED_APPS = ( ) + SAPL_APPS # FTS = Full Text Search +HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' SEARCH_BACKEND = 'haystack.backends.whoosh_backend.WhooshEngine' SEARCH_URL = ('PATH', PROJECT_DIR.child('whoosh')) diff --git a/sapl/utils.py b/sapl/utils.py index e4b3fc074..7a4146fc5 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -553,20 +553,3 @@ def texto_upload_path(instance, filename, subpath='', pk_first=False): } return path - - -class UpdateIndexCommand(Thread): - - def run(self): - call([PROJECT_DIR.child('manage.py'), 'update_index'], - stdout=PIPE) - - -def save_texto(sender, instance, **kwargs): - update_index = UpdateIndexCommand() - update_index.start() - - -def delete_texto(sender, instance, **kwargs): - update_index = UpdateIndexCommand() - update_index.start() From 914e2eff6d8b0ce2e2990dd6ec7a539beebba8b0 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 12 Jul 2017 13:07:09 -0300 Subject: [PATCH 04/49] =?UTF-8?q?HOT-FIX:=20remove=20imports=20n=C3=A3o=20?= =?UTF-8?q?mais=20utilizados.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/signals.py | 2 -- sapl/norma/signals.py | 2 -- 2 files changed, 4 deletions(-) diff --git a/sapl/materia/signals.py b/sapl/materia/signals.py index e82f3b692..f1cf66e03 100644 --- a/sapl/materia/signals.py +++ b/sapl/materia/signals.py @@ -2,8 +2,6 @@ from django.db.models.signals import post_delete, post_save import django.dispatch -from sapl.utils import delete_texto, save_texto - from .models import DocumentoAcessorio, MateriaLegislativa diff --git a/sapl/norma/signals.py b/sapl/norma/signals.py index 8f2e77c4b..4a5472715 100644 --- a/sapl/norma/signals.py +++ b/sapl/norma/signals.py @@ -1,5 +1,3 @@ from django.db.models.signals import post_delete, post_save -from sapl.utils import delete_texto, save_texto - from .models import NormaJuridica From 078319154ee4370bdee6149c173fe1c75acc09ad Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Wed, 12 Jul 2017 13:20:30 -0300 Subject: [PATCH 05/49] Fix #1203 frente parlamentar (#1267) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Inicia a reestruturação * Adiciona lógica para aparecer ou esconder caixa de seleção de parlamentares * Cria o campo de data de inicio do mandato * Adiciona campo de inicio de mandato nos forms e details * Cria logica para mostrar somente os ativos * Finaliza as melhorias em Frente * Tira obrigatoriedade do campo Data Inicio de Mandato * Conserta teste de mandato --- sapl/parlamentares/forms.py | 3 +- .../migrations/0003_auto_20170707_1656.py | 27 ++++ .../migrations/0004_auto_20170711_1305.py | 20 +++ sapl/parlamentares/models.py | 7 +- .../parlamentares/tests/test_parlamentares.py | 2 - sapl/parlamentares/urls.py | 10 ++ sapl/parlamentares/views.py | 110 ++++++++++++++- sapl/templates/parlamentares/frente_form.html | 128 ++++++++++++++++++ sapl/templates/parlamentares/layouts.yaml | 3 +- scripts/set_inicio_mandato.py | 10 ++ 10 files changed, 312 insertions(+), 8 deletions(-) create mode 100644 sapl/parlamentares/migrations/0003_auto_20170707_1656.py create mode 100644 sapl/parlamentares/migrations/0004_auto_20170711_1305.py create mode 100644 sapl/templates/parlamentares/frente_form.html create mode 100644 scripts/set_inicio_mandato.py diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index bdb8c4d00..d36b3ff73 100644 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -54,7 +54,8 @@ class MandatoForm(ModelForm): class Meta: model = Mandato fields = ['legislatura', 'coligacao', 'votos_recebidos', - 'data_fim_mandato', 'data_expedicao_diploma', 'titular', + 'data_inicio_mandato', 'data_fim_mandato', + 'data_expedicao_diploma', 'titular', 'tipo_afastamento', 'observacao', 'parlamentar'] widgets = {'parlamentar': forms.HiddenInput()} diff --git a/sapl/parlamentares/migrations/0003_auto_20170707_1656.py b/sapl/parlamentares/migrations/0003_auto_20170707_1656.py new file mode 100644 index 000000000..e6212354d --- /dev/null +++ b/sapl/parlamentares/migrations/0003_auto_20170707_1656.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2017-07-07 16:56 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0002_auto_20170504_1751'), + ] + + operations = [ + migrations.AddField( + model_name='mandato', + name='data_inicio_mandato', + field=models.DateField(default=datetime.datetime(2017, 7, 7, 16, 56, 58, 525896), verbose_name='Início do Mandato'), + preserve_default=False, + ), + migrations.AlterField( + model_name='mandato', + name='data_fim_mandato', + field=models.DateField(blank=True, null=True, verbose_name='Fim do Mandato'), + ), + ] diff --git a/sapl/parlamentares/migrations/0004_auto_20170711_1305.py b/sapl/parlamentares/migrations/0004_auto_20170711_1305.py new file mode 100644 index 000000000..9ef1faef6 --- /dev/null +++ b/sapl/parlamentares/migrations/0004_auto_20170711_1305.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2017-07-11 13:05 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0003_auto_20170707_1656'), + ] + + operations = [ + migrations.AlterField( + model_name='mandato', + name='data_inicio_mandato', + field=models.DateField(blank=True, null=True, verbose_name='Início do Mandato'), + ), + ] diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index d81412a4c..5039be89e 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -449,7 +449,12 @@ class Mandato(models.Model): on_delete=models.PROTECT, verbose_name=_('Coligação')) # TODO what is this field?????? tipo_causa_fim_mandato = models.PositiveIntegerField(blank=True, null=True) - data_fim_mandato = models.DateField(verbose_name=_('Fim do Mandato')) + data_inicio_mandato = models.DateField(verbose_name=_('Início do Mandato'), + blank=True, + null=True) + data_fim_mandato = models.DateField(verbose_name=_('Fim do Mandato'), + blank=True, + null=True) votos_recebidos = models.PositiveIntegerField( blank=True, null=True, verbose_name=_('Votos Recebidos (Mandato)')) data_expedicao_diploma = models.DateField( diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py index b71816d5b..f210a4551 100644 --- a/sapl/parlamentares/tests/test_parlamentares.py +++ b/sapl/parlamentares/tests/test_parlamentares.py @@ -147,7 +147,5 @@ def test_form_errors_mandato(admin_client): assert (response.context_data['form'].errors['legislatura'] == ['Este campo é obrigatório.']) - assert (response.context_data['form'].errors['data_fim_mandato'] == - ['Este campo é obrigatório.']) assert (response.context_data['form'].errors['data_expedicao_diploma'] == ['Este campo é obrigatório.']) diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 68ddcc16b..7b0f8f031 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -15,7 +15,9 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, TipoMilitarCrud, VotanteView, altera_field_mesa, altera_field_mesa_public_view, + frente_atualiza_lista_parlamentares, insere_parlamentar_composicao, + parlamentares_frente_selected, remove_parlamentar_composicao) from .apps import AppConfig @@ -38,8 +40,16 @@ urlpatterns = [ url(r'^sistema/coligacao/', include(ColigacaoCrud.get_urls() + ComposicaoColigacaoCrud.get_urls())), + url(r'^sistema/frente/', include(FrenteCrud.get_urls())), + url(r'^sistema/frente/atualiza-lista-parlamentares', + frente_atualiza_lista_parlamentares, + name='atualiza_lista_parlamentares'), + url(r'^sistema/frente/parlamentares-frente-selected', + parlamentares_frente_selected, + name='parlamentares_frente_selected'), + url(r'^sistema/parlamentar/legislatura/', include(LegislaturaCrud.get_urls())), url(r'^sistema/parlamentar/tipo-dependente/', diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 77ad62cf7..309c8b3cd 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -30,6 +30,10 @@ from sapl.materia.models import Autoria from django.contrib.contenttypes.models import ContentType from django.db.models.aggregates import Count +import datetime +import json + + CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa') PartidoCrud = CrudAux.build(Partido, 'partidos') SessaoLegislativaCrud = CrudAux.build(SessaoLegislativa, 'sessao_legislativa') @@ -38,9 +42,6 @@ NivelInstrucaoCrud = CrudAux.build(NivelInstrucao, 'nivel_instrucao') TipoAfastamentoCrud = CrudAux.build(TipoAfastamento, 'tipo_afastamento') TipoMilitarCrud = CrudAux.build(SituacaoMilitar, 'tipo_situa_militar') -FrenteCrud = CrudAux.build(Frente, 'tipo_situa_militar', list_field_names=[ - 'nome', 'data_criacao', 'parlamentares']) - DependenteCrud = MasterDetailCrud.build( Dependente, 'parlamentar', 'dependente') @@ -211,6 +212,109 @@ class ColigacaoCrud(CrudAux): subnav_template_name = 'parlamentares/subnav_coligacao.yaml' +def json_date_convert(date): + ''' + :param date: recebe a data de uma chamada ajax no formato de + string "dd/mm/yyyy" + :return: + ''' + dia, mes, ano = date.split('/') + return datetime.date(day=int(dia), + month=int(mes), + year=int(ano)) + + +def parlamentares_ativos(data_inicio, data_fim=None): + ''' + :param data_inicio: define a data de inicial do período desejado + :param data_fim: define a data final do período desejado + :return: queryset dos parlamentares ativos naquele período + ''' + mandatos_ativos = Mandato.objects.filter(Q( + data_inicio_mandato__lte=data_inicio, + data_fim_mandato__isnull=True) | Q( + data_inicio_mandato__lte=data_inicio, + data_fim_mandato__gte=data_inicio)) + if data_fim: + mandatos_ativos = mandatos_ativos | Mandato.objects.filter( + data_inicio_mandato__gte=data_inicio, + data_inicio_mandato__lte=data_fim) + else: + mandatos_ativos = mandatos_ativos | Mandato.objects.filter( + data_inicio_mandato__gte=data_inicio) + + parlamentares_id = mandatos_ativos.values_list( + 'parlamentar_id', + flat=True).distinct('parlamentar_id') + + return Parlamentar.objects.filter(id__in=parlamentares_id) + + +def frente_atualiza_lista_parlamentares(request): + ''' + :param request: recebe os parâmetros do GET da chamada Ajax + :return: retorna a lista atualizada dos parlamentares + ''' + ativos = json.loads(request.GET['ativos']) + + parlamentares = Parlamentar.objects.all() + + if ativos: + if 'data_criacao' in request.GET and request.GET['data_criacao']: + data_criacao = json_date_convert(request.GET['data_criacao']) + + if 'data_extincao' in request.GET and request.GET['data_extincao']: + data_extincao = json_date_convert(request.GET['data_extincao']) + parlamentares = parlamentares_ativos(data_criacao, + data_extincao) + else: + parlamentares = parlamentares_ativos(data_criacao) + + parlamentares_list = [(p.id, p.__str__()) for p in parlamentares] + + return JsonResponse({'parlamentares_list': parlamentares_list}) + + +def parlamentares_frente_selected(request): + ''' + :return: Lista com o id dos parlamentares em uma frente + ''' + try: + frente = Frente.objects.get(id=int(request.GET['frente_id'])) + except ObjectDoesNotExist: + lista_parlamentar_id = [] + else: + lista_parlamentar_id = frente.parlamentares.all().values_list( + 'id', flat=True) + return JsonResponse({'id_list': list(lista_parlamentar_id)}) + + +class FrenteCrud(CrudAux): + model = Frente + help_path = 'tabelas_auxiliares#tipo_situa_militar' + list_field_names = ['nome', 'data_criacao', 'parlamentares'] + + class CreateView(CrudAux.CreateView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + # Update view é um indicador para o javascript + # de que esta não é uma tela de edição de frente + context['update_view'] = 0 + + return context + + class UpdateView(CrudAux.UpdateView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + # Update view é um indicador para o javascript + # de que esta não é uma tela de edição de frente + context['update_view'] = 1 + + return context + + class MandatoCrud(MasterDetailCrud): model = Mandato parent_field = 'parlamentar' diff --git a/sapl/templates/parlamentares/frente_form.html b/sapl/templates/parlamentares/frente_form.html new file mode 100644 index 000000000..5d9ae8fc1 --- /dev/null +++ b/sapl/templates/parlamentares/frente_form.html @@ -0,0 +1,128 @@ +{% extends "crud/form.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% load common_tags %} + +{% block base_content %} +
+ {% csrf_token %} + +
+
+ {{ form.nome|as_crispy_field }} +
+
+ +
+
+ {{ form.data_criacao|as_crispy_field }} +
+
+ {{ form.data_extincao|as_crispy_field }} +
+
+ + + +
+
+ {{ form.descricao|as_crispy_field }} +
+
+ +
+ +
+ +{% endblock base_content %} + +{% block extra_js %} + +{% endblock %} diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index c839c1b53..57a3b86ba 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -71,7 +71,8 @@ Filiacao: Mandato: {% trans 'Mandato' %}: - legislatura coligacao votos_recebidos - - data_fim_mandato data_expedicao_diploma titular + - data_inicio_mandato data_fim_mandato + - data_expedicao_diploma titular - tipo_afastamento - observacao diff --git a/scripts/set_inicio_mandato.py b/scripts/set_inicio_mandato.py new file mode 100644 index 000000000..37dfcfc0c --- /dev/null +++ b/scripts/set_inicio_mandato.py @@ -0,0 +1,10 @@ +from sapl.parlamentares.models import Mandato + + +def popula_campo_data_inicio(): + for m in Mandato.objects.all(): + m.data_inicio_mandato = m.legislatura.data_inicio + m.save() + +if __name__ == '__main__': + popula_campo_data_inicio() \ No newline at end of file From 49c3c8428c4c9da7140e3e3221d3534d8518f631 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 12 Jul 2017 13:28:13 -0300 Subject: [PATCH 06/49] Remove controlador painel --- sapl/painel/urls.py | 6 ++---- sapl/painel/views.py | 21 ------------------- sapl/templates/painel/controlador.html | 28 -------------------------- 3 files changed, 2 insertions(+), 53 deletions(-) delete mode 100644 sapl/templates/painel/controlador.html diff --git a/sapl/painel/urls.py b/sapl/painel/urls.py index 86cf20277..29890f30f 100644 --- a/sapl/painel/urls.py +++ b/sapl/painel/urls.py @@ -1,8 +1,8 @@ from django.conf.urls import url from .apps import AppConfig -from .views import (controlador_painel, cronometro_painel, get_dados_painel, - painel_mensagem_view, painel_parlamentar_view, painel_view, +from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view, + painel_parlamentar_view, painel_view, painel_votacao_view, votante_view) app_name = AppConfig.name @@ -11,8 +11,6 @@ urlpatterns = [ url(r'^painel-principal/(?P\d+)$', painel_view, name="painel_principal"), url(r'^painel/(?P\d+)/dados$', get_dados_painel, name='dados_painel'), - url(r'^painel/controlador$', - controlador_painel, name='painel_controlador'), url(r'^painel/mensagem$', painel_mensagem_view, name="painel_mensagem"), url(r'^painel/parlamentar$', painel_parlamentar_view, name='painel_parlamentar'), diff --git a/sapl/painel/views.py b/sapl/painel/views.py index ecf7528a3..b6abd9cc5 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -219,27 +219,6 @@ def votante_view(request): return render(request, 'painel/voto_nominal.html', context) -@user_passes_test(check_permission) -def controlador_painel(request): - - painel_created = Painel.objects.get_or_create(data_painel=date.today()) - painel = painel_created[0] - - if request.method == 'POST': - if 'start-painel' in request.POST: - painel.aberto = True - painel.save() - elif 'stop-painel' in request.POST: - painel.aberto = False - painel.save() - elif 'save-painel' in request.POST: - painel.mostrar = request.POST['tipo_painel'] - painel.save() - - context = {'painel': painel, 'PAINEL_TYPES': Painel.PAINEL_TYPES} - return render(request, 'painel/controlador.html', context) - - @user_passes_test(check_permission) def painel_view(request, pk): context = {'head_title': str(_('Painel Plenário')), 'sessao_id': pk} diff --git a/sapl/templates/painel/controlador.html b/sapl/templates/painel/controlador.html deleted file mode 100644 index 32ed27913..000000000 --- a/sapl/templates/painel/controlador.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends 'base.html' %} -{% load i18n %} -{% block base_content %} - -STATUS: -{% if painel.aberto %} -ABERTO -{% else %} -FECHADO -{% endif %} -
-
- {% csrf_token %} - Tipo de painel: {{ painel.get_mostrar_display }}
- {% for id, value in PAINEL_TYPES %} - -
- {% endfor %} -
- - - -
-
-
-Voltar - -{% endblock %} From 05f90fd9b4d802042bbeffd54770292482e76066 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 12 Jul 2017 13:34:52 -0300 Subject: [PATCH 07/49] =?UTF-8?q?HOT-FIX:=20remove=20controlador=20painel?= =?UTF-8?q?=20de=20sess=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/templates/sessao/painel.html | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sapl/templates/sessao/painel.html b/sapl/templates/sessao/painel.html index 2857bc4bb..5cd84ec32 100644 --- a/sapl/templates/sessao/painel.html +++ b/sapl/templates/sessao/painel.html @@ -13,12 +13,7 @@ {% block detail_content %}
From 73f9f6a2747641e4c5c6650c447823028a547f7d Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Fri, 14 Jul 2017 18:09:31 -0300 Subject: [PATCH 08/49] =?UTF-8?q?Aumenta=20tamanho=20m=C3=A1ximo=20de=20PD?= =?UTF-8?q?F=20para=2020MB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/settings.py b/sapl/settings.py index 7ca99b1bf..9bb544a15 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -193,7 +193,7 @@ EMAIL_SEND_USER = config('EMAIL_SEND_USER', cast=str, default='') DEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL', cast=str, default='') SERVER_EMAIL = config('SERVER_EMAIL', cast=str, default='') -MAX_DOC_UPLOAD_SIZE = 10 * 1024 * 1024 # 10MB +MAX_DOC_UPLOAD_SIZE = 20 * 1024 * 1024 # 20MB MAX_IMAGE_UPLOAD_SIZE = 2 * 1024 * 1024 # 2MB # Internationalization From cd0e867e93d09ec40000bba22d71a4cb025beb7c Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Fri, 14 Jul 2017 18:18:29 -0300 Subject: [PATCH 09/49] Mostra valor real de limite de upload. --- sapl/materia/forms.py | 4 +++- sapl/norma/forms.py | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 123f8084c..47eabe43b 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1022,7 +1022,9 @@ class ProposicaoForm(forms.ModelForm): texto_original = self.cleaned_data.get('texto_original', False) if texto_original: if texto_original.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("Arquivo muito grande. ( > 5mb )") + max_size = str(MAX_DOC_UPLOAD_SIZE / (1024 * 1024)) + raise ValidationError( + "Arquivo muito grande. ( > {0}MB )".format(max_size)) return texto_original def clean(self): diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py index ffdd09481..5ba72e161 100644 --- a/sapl/norma/forms.py +++ b/sapl/norma/forms.py @@ -144,7 +144,9 @@ class NormaJuridicaForm(ModelForm): texto_integral = self.cleaned_data.get('texto_integral', False) if texto_integral: if texto_integral.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("Arquivo muito grande. ( > 5mb )") + max_size = str(MAX_DOC_UPLOAD_SIZE / (1024 * 1024)) + raise ValidationError( + "Arquivo muito grande. ( > {0}MB )".format(max_size)) return texto_integral def save(self, commit=False): @@ -178,7 +180,7 @@ class NormaRelacionadaForm(ModelForm): def clean(self): super(NormaRelacionadaForm, self).clean() - + if self.errors: return self.errors cleaned_data = self.cleaned_data From f80ffb1079f8c7b7bc0e888f6f1548f87a928662 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Fri, 14 Jul 2017 18:19:14 -0300 Subject: [PATCH 10/49] Novo Release --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index fd549bd1f..a06f2c81c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ sapldb: ports: - "5532:5432" sapl: - image: interlegis/sapl:3.1.11-BETA + image: interlegis/sapl:3.1.12-BETA volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media From 123d9d09165ac6f313b74555a4aa3f78ecc89489 Mon Sep 17 00:00:00 2001 From: Luciano Henrique Nunes de Almeida Date: Mon, 17 Jul 2017 13:44:33 -0300 Subject: [PATCH 11/49] fix #1106 - dados duplicados constraint (#1276) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adiciona exclusão de RegistroVotacao duplicados. Signed-off-by: Luciano Almeida * Recria constraints e marca problemas caso exista Signed-off-by: Luciano Almeida --- .../migrations/0004_auto_20170714_1838.py | 24 +++ sapl/base/models.py | 4 +- sapl/legacy/migration.py | 142 +++++++++++++----- 3 files changed, 127 insertions(+), 43 deletions(-) create mode 100644 sapl/base/migrations/0004_auto_20170714_1838.py diff --git a/sapl/base/migrations/0004_auto_20170714_1838.py b/sapl/base/migrations/0004_auto_20170714_1838.py new file mode 100644 index 000000000..f675e2e67 --- /dev/null +++ b/sapl/base/migrations/0004_auto_20170714_1838.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.12 on 2017-07-14 18:38 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0003_auto_20170519_1106'), + ] + + operations = [ + migrations.RemoveField( + model_name='problemamigracao', + name='eh_importante', + ), + migrations.AddField( + model_name='problemamigracao', + name='critico', + field=models.BooleanField(default=False, verbose_name='Crítico'), + ), + ] diff --git a/sapl/base/models.py b/sapl/base/models.py index 3edef25e9..f2f81ab15 100644 --- a/sapl/base/models.py +++ b/sapl/base/models.py @@ -65,8 +65,8 @@ class ProblemaMigracao(models.Model): problema = models.CharField(max_length=300, verbose_name=_('Problema')) descricao = models.CharField(max_length=300, verbose_name=_('Descrição')) eh_stub = models.BooleanField(verbose_name=_('É stub?')) - eh_importante = models.BooleanField( - default=False, verbose_name=_('É importante?')) + critico = models.BooleanField( + default=False, verbose_name=_('Crítico')) class Meta: verbose_name = _('Problema na Migração') diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index b41eeaedf..8f56f91f1 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -12,7 +12,7 @@ from django.contrib.auth.models import Group from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist from django.db import OperationalError, ProgrammingError, connections, models -from django.db.models import CharField, Max, ProtectedError, TextField +from django.db.models import CharField, Max, ProtectedError, TextField, Count from django.db.models.base import ModelBase from django.db.models.signals import post_delete, post_save from model_mommy import mommy @@ -34,7 +34,7 @@ from sapl.protocoloadm.models import (DocumentoAdministrativo,Protocolo, StatusTramitacaoAdministrativo) from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao from sapl.settings import PROJECT_DIR -from sapl.utils import delete_texto, normalize, save_texto +from sapl.utils import normalize # BASE ###################################################################### # apps to be migrated, in app dependency order (very important) @@ -161,6 +161,8 @@ def get_fk_related(field, value, label=None): ct = ContentType.objects.get(pk=13) value = TipoProposicao.objects.create( id=value, descricao='Erro', content_type=ct) + ultimo_valor = get_last_value(type(value)) + alter_sequence(type(value), ultimo_valor+1) else: value = tipo[0] else: @@ -244,6 +246,25 @@ def delete_constraints(model): (table, r[0])) +def problema_duplicatas(model, lista_duplicatas, argumentos): + for obj in lista_duplicatas: + pks = [] + string_pks = "" + problema = "%s de PK %s não é único." % (model.__name__, obj.pk) + args_dict = {k: obj.__dict__[k] + for k in set(argumentos) & set(obj.__dict__.keys())} + for dup in model.objects.filter(**args_dict): + pks.append(dup.pk) + string_pks = "(" + ", ".join(map(str, pks)) + ")" + descricao = "As entradas de PK %s são idênticas, mas " \ + "apenas uma deve existir" % string_pks + with reversion.create_revision(): + warn(problema + ' => ' + descricao) + save_relation(obj=obj, problema=problema, + descricao=descricao, eh_stub=False, critico=True) + reversion.set_comment('%s não é único.' % model.__name__) + + def recria_constraints(): constraints = Constraint.objects.all() for con in constraints: @@ -253,6 +274,8 @@ def recria_constraints(): args = [a.argumento for a in con.argumento_set.all()] args_string = '' args_string = "(" + "_".join(map(str, args[2:-1])) + ")" + model = ContentType.objects.filter( + model=con.nome_model.lower())[0].model_class() try: exec_sql("ALTER TABLE %s ADD CONSTRAINT %s UNIQUE %s;" % (nome_tabela, nome_constraint, args_string)) @@ -272,18 +295,30 @@ def recria_constraints(): args[i] = args[i] + '_id' args_string = '' args_string += "(" + ', '.join(map(str, args)) + ")" - try: - exec_sql("ALTER TABLE %s ADD CONSTRAINT %s UNIQUE %s;" % - (nome_tabela, nome_constraint, args_string)) - except ProgrammingError: - info('A constraint %s já foi recriada!' % nome_constraint) - except Exception as err: - problema = re.findall('\(.*?\)', err.args[0]) - erro('A constraint [%s] da tabela [%s] não pode ser recriada' % - (nome_constraint, nome_tabela)) - erro('Os dados %s = %s estão duplicados. ' - 'Arrume antes de recriar as constraints!' % - (problema[0], problema[1])) + + distintos = model.objects.distinct(*args) + todos = model.objects.all() + if hasattr(model, "content_type"): + distintos = distintos.exclude(content_type_id=None, + object_id=None) + todos = todos.exclude(content_type_id=None, object_id=None) + + lista_duplicatas = list(set(todos).difference(set(distintos))) + if lista_duplicatas: + problema_duplicatas(model, lista_duplicatas, args) + else: + try: + exec_sql("ALTER TABLE %s ADD CONSTRAINT %s UNIQUE %s;" % + (nome_tabela, nome_constraint, args_string)) + except ProgrammingError: + info('A constraint %s já foi recriada!' % nome_constraint) + except Exception as err: + problema = re.findall('\(.*?\)', err.args[0]) + erro('A constraint [%s] da tabela [%s] não pode ser" \ + recriada' % (nome_constraint, nome_tabela)) + erro('Os dados %s = %s estão duplicados. ' + 'Arrume antes de recriar as constraints!' % + (problema[0], problema[1])) def obj_desnecessario(obj): @@ -315,10 +350,10 @@ def save_with_id(new, id): def save_relation(obj, nome_campo='', problema='', descricao='', - eh_stub=False): + eh_stub=False, critico=False): link = ProblemaMigracao( content_object=obj, nome_campo=nome_campo, problema=problema, - descricao=descricao, eh_stub=eh_stub,) + descricao=descricao, eh_stub=eh_stub, critico=critico) link.save() @@ -373,6 +408,34 @@ def fill_vinculo_norma_juridica(): TipoVinculoNormaJuridica.objects.bulk_create(lista_objs) +# Uma anomalia no sapl 2.5 causa a duplicação de registros de votação. +# Essa duplicação deve ser eliminada para que não haja erro no sapl 3.1 +def excluir_registrovotacao_duplicados(): + duplicatas_ids = RegistroVotacao.objects.values( + 'materia', 'ordem', 'expediente').annotate( + Count('id')).order_by().filter(id__count__gt=1) + duplicatas_queryset = RegistroVotacao.objects.filter( + materia__in=[item['materia'] for item in duplicatas_ids]) + + for dup in duplicatas_queryset: + lista_dups = duplicatas_queryset.filter( + materia=dup.materia, expediente=dup.expediente, ordem=dup.ordem) + primeiro_registro = lista_dups[0] + lista_dups = lista_dups.exclude(pk=primeiro_registro.pk) + for objeto in lista_dups: + if (objeto.pk > primeiro_registro.pk): + try: + objeto.delete() + except: + assert 0 + else: + try: + primeiro_registro.delete() + primeiro_registro = objeto + except: + assert 0 + + class DataMigrator: def __init__(self): @@ -449,8 +512,6 @@ class DataMigrator: call([PROJECT_DIR.child('manage.py'), 'flush', '--database=default', '--no-input'], stdout=PIPE) - desconecta_sinais_indexacao() - fill_vinculo_norma_juridica() info('Começando migração: %s...' % obj) self._do_migrate(obj) @@ -468,11 +529,15 @@ class DataMigrator: save_relation(obj=obj, problema=msg, descricao=descricao, eh_stub=False) + info('Excluindo possíveis duplicações em RegistroVotacao...') + excluir_registrovotacao_duplicados() + info('Deletando stubs desnecessários...') while self.delete_stubs(): pass - conecta_sinais_indexacao() + info('Recriando constraints...') + recria_constraints() def _do_migrate(self, obj): if isinstance(obj, AppConfig): @@ -655,11 +720,25 @@ def adjust_participacao(new, old): new.composicao = composicao -def adjust_proposicao(new, old): +def adjust_proposicao_antes_salvar(new, old): if new.data_envio: new.ano = new.data_envio.year +def adjust_proposicao_depois_salvar(new, old): + if not hasattr(old.dat_envio, 'year') or old.dat_envio.year == 1800: + msg = "O valor do campo data_envio (DateField) da model Proposicao" + "era inválido" + descricao = 'A data 1111-11-11 foi colocada no lugar' + problema = 'O valor da data era nulo ou inválido' + warn(msg + ' => ' + descricao) + new.data_envio = date(1111, 11, 11) + with reversion.create_revision(): + save_relation(obj=new, problema=problema, + descricao=descricao, eh_stub=False) + reversion.set_comment('Ajuste de data pela migração') + + def adjust_normarelacionada(new, old): tipo = TipoVinculoNormaJuridica.objects.filter(sigla=old.tip_vinculo) assert len(tipo) == 1 @@ -817,7 +896,7 @@ AJUSTE_ANTES_SALVAR = { OrdemDia: adjust_ordemdia_antes_salvar, Parlamentar: adjust_parlamentar, Participacao: adjust_participacao, - Proposicao: adjust_proposicao, + Proposicao: adjust_proposicao_antes_salvar, Protocolo: adjust_protocolo, RegistroVotacao: adjust_registrovotacao_antes_salvar, TipoAfastamento: adjust_tipoafastamento, @@ -830,6 +909,7 @@ AJUSTE_ANTES_SALVAR = { AJUSTE_DEPOIS_SALVAR = { NormaJuridica: adjust_normajuridica_depois_salvar, OrdemDia: adjust_ordemdia_depois_salvar, + Proposicao: adjust_proposicao_depois_salvar, Protocolo: adjust_protocolo_depois_salvar, RegistroVotacao: adjust_registrovotacao_depois_salvar, } @@ -865,23 +945,3 @@ def make_with_log(model, _quantity=None, make_m2m=False, **attrs): return stub make_with_log.required = foreign_key_required - -# DISCONNECT SIGNAL ######################################################## - - -def desconecta_sinais_indexacao(): - post_save.disconnect(save_texto, NormaJuridica) - post_save.disconnect(save_texto, DocumentoAcessorio) - post_save.disconnect(save_texto, MateriaLegislativa) - post_delete.disconnect(delete_texto, NormaJuridica) - post_delete.disconnect(delete_texto, DocumentoAcessorio) - post_delete.disconnect(delete_texto, MateriaLegislativa) - - -def conecta_sinais_indexacao(): - post_save.connect(save_texto, NormaJuridica) - post_save.connect(save_texto, DocumentoAcessorio) - post_save.connect(save_texto, MateriaLegislativa) - post_delete.connect(delete_texto, NormaJuridica) - post_delete.connect(delete_texto, DocumentoAcessorio) - post_delete.connect(delete_texto, MateriaLegislativa) From 691eb03c1a3dc2a9cef48b3c0a4c5ed554d371ea Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 24 Jul 2017 10:35:42 -0300 Subject: [PATCH 12/49] Fix #1285 --- sapl/templates/navbar.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapl/templates/navbar.yaml b/sapl/templates/navbar.yaml index 502fb09f1..47d58eec4 100644 --- a/sapl/templates/navbar.yaml +++ b/sapl/templates/navbar.yaml @@ -36,6 +36,8 @@ - title: {% trans 'Proposições' %} url: sapl.materia:proposicao_list check_permission: materia.add_proposicao + - title: {% trans 'Relatórios' %} + url: sapl.base:relatorios_list - title: {% trans 'Sessões Plenárias' %} url: sapl.sessao:pesquisar_sessao - title: {% trans 'Tramitação em Lote' %} From 11237329c32d5de82d5c4ebe981bd9f5e7becc0f Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 24 Jul 2017 10:52:52 -0300 Subject: [PATCH 13/49] Fix #1281 --- sapl/materia/views.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index f4b6c4e35..937831ea2 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1100,6 +1100,13 @@ class AutoriaCrud(MasterDetailCrud): q = autor_parlamentar | autor_comissoes | autores_outros return q + class ListView(MasterDetailCrud.ListView): + + def get_queryset(self): + qs = super().get_queryset() + + return qs.order_by('-primeiro_autor', 'autor__nome') + class DespachoInicialCrud(MasterDetailCrud): model = DespachoInicial From 174296720db49d153c787dc25bf4d217806ffafa Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 24 Jul 2017 14:03:02 -0300 Subject: [PATCH 14/49] =?UTF-8?q?Solu=C3=A7=C3=A3o=20para=20a=20issue=20(#?= =?UTF-8?q?1298)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/crispy_layout_mixin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py index 29cd7849f..e0704d3f3 100644 --- a/sapl/crispy_layout_mixin.py +++ b/sapl/crispy_layout_mixin.py @@ -67,7 +67,7 @@ def get_field_display(obj, fieldname): ou mesmo uma método no model. """ value = getattr(obj, fieldname) - verbose_name = '' + verbose_name = value.model._meta.verbose_name else: verbose_name = str(field.verbose_name)\ From 4fcd06bdc3f691d704f2b99f2735185520cc0e32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Fr=C3=A1?= Date: Mon, 24 Jul 2017 14:44:57 -0300 Subject: [PATCH 15/49] Mostra todos os autores no resultado da pesquisa (#1288) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Mostra todos os autores no resultado da pesquisa * Update materialegislativa_filter.html Conserta identação * Update materialegislativa_filter.html Fixes #1282 --- sapl/templates/materia/materialegislativa_filter.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sapl/templates/materia/materialegislativa_filter.html b/sapl/templates/materia/materialegislativa_filter.html index d7b0bb3ec..285379cc5 100644 --- a/sapl/templates/materia/materialegislativa_filter.html +++ b/sapl/templates/materia/materialegislativa_filter.html @@ -60,10 +60,12 @@ {% endif %} {% if m.autoria_set.all %} - Autor: - {% for a in m.autoria_set.all %} - {% if a.primeiro_autor %} -  {{a.autor.nome}} + Autor: + {% for a in m.autoria_set.all %} + {% if not forloop.first %} +
{{a.autor}} + {% else %} +  {{a.autor}} {% endif %} {% endfor %}
From 0d6610338a2bc3cbf3d64b57282e158b8d949981 Mon Sep 17 00:00:00 2001 From: Eliseu Egewarth Date: Mon, 24 Jul 2017 18:19:54 -0300 Subject: [PATCH 16/49] Fix #1277 (#1301) Signed-off-by: Eliseu Egewarth --- sapl/legacy/migracao_documentos.py | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index bd770a06e..50fc1e694 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -14,7 +14,6 @@ from sapl.protocoloadm.models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo) from sapl.sessao.models import SessaoPlenaria from sapl.settings import MEDIA_ROOT -from sapl.utils import delete_texto, save_texto # MIGRAÇÃO DE DOCUMENTOS ################################################### EXTENSOES = { @@ -192,29 +191,7 @@ def migrar_docs_por_ids(tipo): tipo.__name__, id, destino)) -def desconecta_sinais_indexacao(): - post_save.disconnect(save_texto, NormaJuridica) - post_save.disconnect(save_texto, DocumentoAcessorio) - post_save.disconnect(save_texto, MateriaLegislativa) - post_delete.disconnect(delete_texto, NormaJuridica) - post_delete.disconnect(delete_texto, DocumentoAcessorio) - post_delete.disconnect(delete_texto, MateriaLegislativa) - - -def conecta_sinais_indexacao(): - post_save.connect(save_texto, NormaJuridica) - post_save.connect(save_texto, DocumentoAcessorio) - post_save.connect(save_texto, MateriaLegislativa) - post_delete.connect(delete_texto, NormaJuridica) - post_delete.connect(delete_texto, DocumentoAcessorio) - post_delete.connect(delete_texto, MateriaLegislativa) - - def migrar_documentos(): - # precisamos excluir os sinais de post_save e post_delete para não que o - # computador não trave com a criação de threads desnecessárias - desconecta_sinais_indexacao() - # aqui supomos que uma pasta chamada sapl_documentos está em MEDIA_ROOT # com o conteúdo da pasta de mesmo nome do zope # Os arquivos da pasta serão movidos para a nova estrutura e a pasta será @@ -241,6 +218,3 @@ def migrar_documentos(): len(sobrando))) for doc in sobrando: print(' {}'. format(doc)) - # - # reconexão dos sinais desligados no inicio da migração de documentos - conecta_sinais_indexacao() From 5f49e3b9c7d980614ba68d0c8400ce7cbd924f1a Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 26 Jul 2017 11:57:45 -0300 Subject: [PATCH 17/49] Fixes #1309 --- sapl/templates/sessao/pauta_sessao_detail.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/templates/sessao/pauta_sessao_detail.html b/sapl/templates/sessao/pauta_sessao_detail.html index e4f41f312..1c31aa973 100644 --- a/sapl/templates/sessao/pauta_sessao_detail.html +++ b/sapl/templates/sessao/pauta_sessao_detail.html @@ -3,7 +3,7 @@ {% load crispy_forms_tags %} {% block base_content %} - +
Identificação Básica From 494775980a6fa668370b14c6a2db9fdfd59a0039 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 25 Jul 2017 15:55:46 -0300 Subject: [PATCH 18/49] =?UTF-8?q?Conserta=20anula=C3=A7=C3=A3o=20de=20vota?= =?UTF-8?q?=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/sessao/views.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 16ca533e3..009d4d350 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -1400,9 +1400,8 @@ class VotacaoEditView(SessaoPermissionMixin): ordem_id = kwargs['oid'] if(int(request.POST['anular_votacao']) == 1): - RegistroVotacao.objects.filter( - materia_id=materia_id, - ordem_id=ordem_id).last().delete() + for r in RegistroVotacao.objects.filter(ordem_id=ordem_id): + r.delete() ordem = OrdemDia.objects.get( sessao_plenaria_id=self.object.id, @@ -2165,14 +2164,8 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin): expediente_id = kwargs['oid'] if(int(request.POST['anular_votacao']) == 1): - try: - RegistroVotacao.objects.get( - materia_id=materia_id, - expediente_id=expediente_id).delete() - except MultipleObjectsReturned: - RegistroVotacao.objects.filter( - materia_id=materia_id, - expediente_id=expediente_id).last().delete() + for r in RegistroVotacao.objects.filter(expediente_id=expediente_id): + r.delete() expediente = ExpedienteMateria.objects.get( sessao_plenaria_id=self.object.id, From 58441a0c6aa3a85d80a68fbaea90cd178d0614bc Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 25 Jul 2017 15:56:18 -0300 Subject: [PATCH 19/49] Conserta bug e melhora visual do Painel --- sapl/templates/painel/index.html | 45 ++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html index b78fb7774..98eabb6ab 100644 --- a/sapl/templates/painel/index.html +++ b/sapl/templates/painel/index.html @@ -181,25 +181,38 @@ else if (data["presentes_expediente"] != null){ presentes_ordem_dia = data["presentes_expediente"] } - if( (data["tipo_resultado"] == "Aprovado por unanimidade") || (data["tipo_resultado"] == "Aprovado por maioria") || (data["tipo_resultado"] == "Rejeitado")){ - if(data["tipo_votacao"] == "Nominal") { - jQuery.each(data["votos"], function(index, parlamentar) { - $('
  • ', {text: parlamentar.parlamentar + ' - ' + parlamentar.partido + ' - Voto: ' + parlamentar.voto}).appendTo(presentes); + presentes.append('
  • '); + if( (data["tipo_resultado"] == "Aprovado por Unanimidade") || (data["tipo_resultado"] == "Aprovado por maioria") || (data["tipo_resultado"] == "Rejeitado")) { + if (data["tipo_votacao"] == "Nominal") { + jQuery.each(data["votos"], function (index, parlamentar) { + $('#parlamentares_list').append('') }); } - else{ - jQuery.each(presentes_ordem_dia, function(index, parlamentar) { - $('
  • ', {text: parlamentar.nome + ' - ' + parlamentar.partido}).appendTo(presentes); - }); + else { + jQuery.each(data["votos"], function (index, parlamentar) { + $('#parlamentares_list').append('
  • ') + }); } } else{ - jQuery.each(presentes_ordem_dia, function(index, parlamentar) { - $('
  • ', {text: parlamentar.nome + ' - ' + parlamentar.partido}).appendTo(presentes); - }); + jQuery.each(presentes_ordem_dia, function (index, parlamentar) { + $('#parlamentares_list').append('
  • ') + }); } + presentes.append('
    ' + + parlamentar.parlamentar + + ' ' + + parlamentar.partido + ' ' + + show_voto(parlamentar.voto) + '
    ' + + parlamentar.parlamentar + + ' ' + + parlamentar.partido + '
    ' + + parlamentar.nome + + ' ' + + parlamentar.partido + '
    '); + //console.debug(presentes_ordem_dia) var votacao = $("#votacao") if (data["num_presentes_ordem_dia"] != null) { @@ -280,5 +293,15 @@ }) })(); }); + + function show_voto(voto) { + if (voto == "Sim"){ + return ' Sim ' + } + else if (voto == "Não"){ + return ' Não ' + } + return voto + } From 6ce9d5357fdcdd9e25b35e52ee0a01e7b8b6d326 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 25 Jul 2017 16:33:00 -0300 Subject: [PATCH 20/49] Fix #1275 Fix #1293 --- sapl/painel/views.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sapl/painel/views.py b/sapl/painel/views.py index b6abd9cc5..57ecf5c0e 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -439,7 +439,7 @@ def get_votos(response, materia): def get_votos_nominal(response, materia): - votos = {} + votos = [] if materia.tipo_votacao == 1: tipo_votacao = 'Simbólica' @@ -468,7 +468,7 @@ def get_votos_nominal(response, materia): else: votos_parlamentares = VotoParlamentar.objects.filter( - votacao_id=registro.id) + votacao_id=registro.id).order_by('parlamentar__nome_parlamentar') filiacao = Filiacao.objects.filter( data_desfiliacao__isnull=True, parlamentar__ativo=True) @@ -481,18 +481,18 @@ def get_votos_nominal(response, materia): try: parlamentar_partido[v.parlamentar.nome_parlamentar] except KeyError: - votos.update({v.parlamentar.id: { + votos.append({ 'parlamentar': v.parlamentar.nome_parlamentar, 'voto': str(v.voto), 'partido': str(_('Sem Registro')) - }}) + }) else: - votos.update({v.parlamentar.id: { + votos.append({ 'parlamentar': v.parlamentar.nome_parlamentar, 'voto': str(v.voto), 'partido': parlamentar_partido[ v.parlamentar.nome_parlamentar] - }}) + }) total = (registro.numero_votos_sim + registro.numero_votos_nao + From 0452697d95f6c86278cc4722ebe08c64e9c8d6b6 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 25 Jul 2017 16:54:43 -0300 Subject: [PATCH 21/49] Fix #1299 --- sapl/templates/sessao/mesa.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sapl/templates/sessao/mesa.html b/sapl/templates/sessao/mesa.html index 311a76b87..5f21556f6 100644 --- a/sapl/templates/sessao/mesa.html +++ b/sapl/templates/sessao/mesa.html @@ -20,7 +20,9 @@
    - Escolha da Composição da Mesa Diretora da Sessão Plenária + {% if perms.parlamentares.add_cargomesa %} + Escolha da Composição da Mesa Diretora da Sessão Plenária + {% endif %}
    From 06e04b4b2ccd70a3a40c25bd783a8250fb79dd4c Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Wed, 26 Jul 2017 09:36:21 -0300 Subject: [PATCH 22/49] Fix #1303 --- sapl/templates/sessao/mesa.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sapl/templates/sessao/mesa.html b/sapl/templates/sessao/mesa.html index 5f21556f6..9e046761d 100644 --- a/sapl/templates/sessao/mesa.html +++ b/sapl/templates/sessao/mesa.html @@ -20,7 +20,7 @@
    - {% if perms.parlamentares.add_cargomesa %} + {% if perms.sessao.add_integrantemesa %} Escolha da Composição da Mesa Diretora da Sessão Plenária {% endif %}
    @@ -37,12 +37,12 @@


    - {% if perms.parlamentares.add_cargomesa %} + {% if perms.sessao.add_integrantemesa %} {% endif %}

    - {% if perms.parlamentares.add_composicaomesa %} + {% if perms.sessao.add_integrantemesa %} {% endif %}
    From 6f046b9f4acb98dd3a7951f11e5c52ed4d41e246 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 26 Jul 2017 12:08:54 -0300 Subject: [PATCH 23/49] Novo release --- docker-compose.yml | 2 +- sapl/settings.py | 4 ++-- sapl/templates/protocoloadm/protocolo_list.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a06f2c81c..9b4326ce1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ sapldb: ports: - "5532:5432" sapl: - image: interlegis/sapl:3.1.12-BETA + image: interlegis/sapl:3.1.13-BETA volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media diff --git a/sapl/settings.py b/sapl/settings.py index 9bb544a15..5e390d6ee 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -205,8 +205,8 @@ LANGUAGES = ( TIME_ZONE = 'America/Sao_Paulo' USE_I18N = True -USE_L10N = False -USE_TZ = False +USE_L10N = True +USE_TZ = True # DATE_FORMAT = 'N j, Y' DATE_FORMAT = 'd/m/Y' SHORT_DATE_FORMAT = 'd/m/Y' diff --git a/sapl/templates/protocoloadm/protocolo_list.html b/sapl/templates/protocoloadm/protocolo_list.html index 4ae55baf0..8abcb0d7c 100644 --- a/sapl/templates/protocoloadm/protocolo_list.html +++ b/sapl/templates/protocoloadm/protocolo_list.html @@ -20,7 +20,7 @@ Etiqueta Individual
    Assunto: {{ p.assunto_ementa }}
    - Data Protocolo: {{ p.data|date:"d/m/Y" }} - Horário: {{ p.timestamp|date:"H:m:s" }}
    + Data Protocolo: {{ p.data|date:"d/m/Y" }} - Horário: {{ p.hora|date:"H:m:s" }}
    Natureza do Processo: {% if p.tipo_processo == 0 %} Administrativo
    From e506f8f8fb5ed8236f0a4eaf0c4dd372c26f3acb Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 26 Jul 2017 13:35:22 -0300 Subject: [PATCH 24/49] Fixes #1308 --- sapl/sessao/views.py | 10 +++++++--- sapl/templates/sessao/pauta_sessao_detail.html | 18 +++++++++--------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 009d4d350..9e82b4e0e 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -2289,11 +2289,13 @@ class PautaSessaoDetailView(DetailView): ementa = o.observacao titulo = o.materia numero = o.numero_ordem - + situacao = o.materia.tramitacao_set.last().status + if situacao is None: + situacao = _("Não informada") # Verificar resultado - resultado = o.registrovotacao_set.all() + rv = o.registrovotacao_set.all() if resultado: - resultado = resultado[0].tipo_resultado_votacao.nome + resultado = rv[0].tipo_resultado_votacao.nome else: resultado = _('Matéria não votada') @@ -2306,6 +2308,8 @@ class PautaSessaoDetailView(DetailView): 'titulo': titulo, 'numero': numero, 'resultado': resultado, + 'resultado_observacao': resultado_observacao, + 'situacao': situacao, 'autor': autor } materias_ordem.append(mat) diff --git a/sapl/templates/sessao/pauta_sessao_detail.html b/sapl/templates/sessao/pauta_sessao_detail.html index 1c31aa973..4664e8638 100644 --- a/sapl/templates/sessao/pauta_sessao_detail.html +++ b/sapl/templates/sessao/pauta_sessao_detail.html @@ -25,7 +25,7 @@ {{e.tipo}}:
    -

    {{e.conteudo}}

    +

    {{e.conteudo|safe}}

    {% endfor %} @@ -36,7 +36,7 @@
    Matérias do Expediente - + @@ -45,13 +45,13 @@ {% for m in materia_expediente %} - - - + + {% endfor %}
    Matéria Ementa
    + {{m.numero}} - {{m.titulo}}
    Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}
    {{m.ementa|safe}}{{m.situacao}}{{m.ementa|safe}}{{m.situacao}}
    @@ -78,7 +78,7 @@
    Matérias da Ordem do Dia - + @@ -87,13 +87,13 @@ {% for m in materias_ordem %} - - - + + {% endfor %}
    Matéria Ementa
    + {{m.numero}} - {{m.titulo}}
    Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}
    {{m.ementa|safe}}{{m.situacao}}{{m.ementa|safe}}{{m.situacao}}
    From 743c44eb90d5b88575be64a7c25671d443f6d825 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 26 Jul 2017 13:54:32 -0300 Subject: [PATCH 25/49] =?UTF-8?q?Ajusta=20preenchimento=20de=20campos=20de?= =?UTF-8?q?=20protocolo=20mat=C3=A9ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/protocoloadm/views.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index c478b6f62..e11def026 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -419,12 +419,10 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView): protocolo.numero = ( numero['numero__max'] + 1) if numero['numero__max'] else 1 protocolo.ano = datetime.now().year - protocolo.data = datetime.strptime(datetime.now().strftime("%Y-%m-%d"), - '%Y-%m-%d') - protocolo.hora = datetime.strptime(datetime.now().strftime("%H:%M"), - '%H:%M') - protocolo.timestamp = datetime.strptime( - datetime.now().strftime("%Y-%m-%d %H:%M"), "%Y-%m-%d %H:%M") + protocolo.data = datetime.now().date() + protocolo.hora = datetime.now().time() + protocolo.timestamp = datetime.now() + protocolo.tipo_protocolo = 0 protocolo.tipo_processo = '1' # TODO validar o significado protocolo.anulado = False From 669181cbc379ba1067fd0c93d6a4ab502e367ef1 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 26 Jul 2017 13:57:40 -0300 Subject: [PATCH 26/49] =?UTF-8?q?Conserta=20erro=20de=20portugu=C3=AAs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/templates/protocoloadm/MateriaTemplate.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/templates/protocoloadm/MateriaTemplate.html b/sapl/templates/protocoloadm/MateriaTemplate.html index fc490fcc5..05d1f65ad 100644 --- a/sapl/templates/protocoloadm/MateriaTemplate.html +++ b/sapl/templates/protocoloadm/MateriaTemplate.html @@ -3,7 +3,7 @@ {% block base_content %}
    From a38d06da2cd09d4d36a2a6763d57f3fe3265a724 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 26 Jul 2017 14:05:22 -0300 Subject: [PATCH 27/49] =?UTF-8?q?Revertendo=20configura=C3=A7=C3=A3o=20de?= =?UTF-8?q?=20timezone=20do=20settings.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/settings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sapl/settings.py b/sapl/settings.py index 5e390d6ee..cefd6b2a8 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -204,9 +204,9 @@ LANGUAGES = ( ) TIME_ZONE = 'America/Sao_Paulo' -USE_I18N = True -USE_L10N = True -USE_TZ = True +USE_I18N = False +USE_L10N = False +USE_TZ = False # DATE_FORMAT = 'N j, Y' DATE_FORMAT = 'd/m/Y' SHORT_DATE_FORMAT = 'd/m/Y' From ca060f0458d785fced46d12995cea82bcaaff0d6 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 26 Jul 2017 14:06:17 -0300 Subject: [PATCH 28/49] Novo release --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9b4326ce1..8b71fe686 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ sapldb: ports: - "5532:5432" sapl: - image: interlegis/sapl:3.1.13-BETA + image: interlegis/sapl:3.1.14-BETA volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media From df9eb1c635a035c332792ffe0c6389e35ed971d7 Mon Sep 17 00:00:00 2001 From: Edward Date: Wed, 26 Jul 2017 16:52:15 -0300 Subject: [PATCH 29/49] =?UTF-8?q?HOT-FIX:=20reseta=20valores=20de=20i18n?= =?UTF-8?q?=20e=20localiza=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit reseta valores originais de i18n e localização. --- sapl/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sapl/settings.py b/sapl/settings.py index cefd6b2a8..d6590c5b4 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -204,8 +204,8 @@ LANGUAGES = ( ) TIME_ZONE = 'America/Sao_Paulo' -USE_I18N = False -USE_L10N = False +USE_I18N = True +USE_L10N = True USE_TZ = False # DATE_FORMAT = 'N j, Y' DATE_FORMAT = 'd/m/Y' From bbaae5a5bd74b469d1349b4433aebafc26fe79f9 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 26 Jul 2017 16:56:12 -0300 Subject: [PATCH 30/49] Novo Release --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8b71fe686..7b97b49f4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ sapldb: ports: - "5532:5432" sapl: - image: interlegis/sapl:3.1.14-BETA + image: interlegis/sapl:3.1.15-BETA volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media From 750748afce1cf90444ee199369515a190f51df4a Mon Sep 17 00:00:00 2001 From: Edward Date: Thu, 27 Jul 2017 12:37:04 -0300 Subject: [PATCH 31/49] Fixes #1300 (#1310) --- sapl/materia/views.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 937831ea2..fb5fbd216 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -958,6 +958,12 @@ class TramitacaoCrud(MasterDetailCrud): def form_valid(self, form): self.object = form.save() + if form.instance.status.indicador == 'F': + form.instance.materia.em_tramitacao = False + else: + form.instance.materia.em_tramitacao = True + form.instance.materia.save() + try: tramitacao_signal.send(sender=Tramitacao, post=self.object, @@ -981,6 +987,12 @@ class TramitacaoCrud(MasterDetailCrud): def form_valid(self, form): self.object = form.save() + if form.instance.status.indicador == 'F': + form.instance.materia.em_tramitacao = False + else: + form.instance.materia.em_tramitacao = True + form.instance.materia.save() + try: tramitacao_signal.send(sender=Tramitacao, post=self.object, From 2b7e537643846f69d2098e429a052a5949d14c8b Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 27 Jul 2017 12:47:20 -0300 Subject: [PATCH 32/49] Fix #1302 restringir tipo pesq textual (#1313) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Conserta anulação de votação * Conserta bug e melhora visual do Painel * Fix #1275 Fix #1293 * Fix #1299 * Fix #1303 * Inicia resolução * Fix #1302 --- sapl/base/urls.py | 5 +++-- sapl/base/views.py | 21 +++++++++++++++++++++ sapl/templates/search/search.html | 8 ++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/sapl/base/urls.py b/sapl/base/urls.py index 2b4e52d62..f44ba22b3 100644 --- a/sapl/base/urls.py +++ b/sapl/base/urls.py @@ -16,7 +16,8 @@ from .views import (AppConfigCrud, CasaLegislativaCrud, HelpView, RelatorioMateriasPorAnoAutorTipoView, RelatorioMateriasPorAutorView, RelatorioMateriasTramitacaoView, - RelatorioPresencaSessaoView) + RelatorioPresencaSessaoView, + SaplSearchView) app_name = AppConfig.name @@ -100,6 +101,6 @@ urlpatterns = [ name='login'), url(r'^logout/$', views.logout, {'next_page': '/login'}, name='logout'), - url(r'^sistema/search/', include('haystack.urls')), + url(r'^sistema/search/', SaplSearchView(), name='search_view'), ] + recuperar_senha diff --git a/sapl/base/views.py b/sapl/base/views.py index 96b989479..4c86ff515 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -14,6 +14,8 @@ from django.utils.translation import ugettext_lazy as _ from django.views.generic.base import TemplateView from django_filters.views import FilterView +from haystack.views import SearchView + from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm from sapl.base.models import Autor, TipoAutor from sapl.crud.base import CrudAux @@ -454,3 +456,22 @@ class AppConfigCrud(CrudAux): def get(self, request, *args, **kwargs): return HttpResponseRedirect(reverse('sapl.base:appconfig_create')) + + +class SaplSearchView(SearchView): + results_per_page = 10 + + def get_context(self): + context = super(SaplSearchView, self).get_context() + + if 'models' in self.request.GET: + models = self.request.GET.getlist('models') + else: + models = [] + + context['models'] = '' + + for m in models: + context['models'] = context['models'] + '&models=' + m + + return context \ No newline at end of file diff --git a/sapl/templates/search/search.html b/sapl/templates/search/search.html index 4efae2cc5..80365f5b2 100644 --- a/sapl/templates/search/search.html +++ b/sapl/templates/search/search.html @@ -93,9 +93,13 @@ {% if page.has_previous or page.has_next %}
    - {% if page.has_previous %}{% endif %}« Previous{% if page.has_previous %}{% endif %} + {% if page.has_previous %} + + {% endif %}« Previous{% if page.has_previous %}{% endif %} | - {% if page.has_next %}{% endif %}Next »{% if page.has_next %}{% endif %} + {% if page.has_next %} + + {% endif %}Next »{% if page.has_next %}{% endif %}
    {% endif %} {% else %} From 9b315d8582e51b2ee250232965a07da7a39e9804 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 27 Jul 2017 13:08:08 -0300 Subject: [PATCH 33/49] HOT FIX --- sapl/base/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/base/urls.py b/sapl/base/urls.py index f44ba22b3..500d44f04 100644 --- a/sapl/base/urls.py +++ b/sapl/base/urls.py @@ -101,6 +101,6 @@ urlpatterns = [ name='login'), url(r'^logout/$', views.logout, {'next_page': '/login'}, name='logout'), - url(r'^sistema/search/', SaplSearchView(), name='search_view'), + url(r'^sistema/search/', SaplSearchView(), name='haystack_search'), ] + recuperar_senha From da2c4f7f6a6deadfc41041bd4e4ae5034cc5fce7 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 27 Jul 2017 13:20:24 -0300 Subject: [PATCH 34/49] Traduz texto no template de pesquisa textual --- sapl/templates/search/search.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sapl/templates/search/search.html b/sapl/templates/search/search.html index 80365f5b2..3ea67cc86 100644 --- a/sapl/templates/search/search.html +++ b/sapl/templates/search/search.html @@ -95,11 +95,11 @@
    {% if page.has_previous %} - {% endif %}« Previous{% if page.has_previous %}{% endif %} + {% endif %}« Anterior{% if page.has_previous %}{% endif %} | {% if page.has_next %} - {% endif %}Next »{% if page.has_next %}{% endif %} + {% endif %}Próxima »{% if page.has_next %}{% endif %}
    {% endif %} {% else %} From bbeac60c80151a85d73e051290650982d549d890 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Thu, 27 Jul 2017 17:13:14 -0300 Subject: [PATCH 35/49] =?UTF-8?q?Revert=20"Solu=C3=A7=C3=A3o=20para=20a=20?= =?UTF-8?q?issue=20(#1298)"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Este commit do PR 1298 introduziu um erro na listagem de parlamentares. Revertando até termos uma solução sem efeitos adversos. This reverts commit 174296720db49d153c787dc25bf4d217806ffafa. --- sapl/crispy_layout_mixin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py index e0704d3f3..29cd7849f 100644 --- a/sapl/crispy_layout_mixin.py +++ b/sapl/crispy_layout_mixin.py @@ -67,7 +67,7 @@ def get_field_display(obj, fieldname): ou mesmo uma método no model. """ value = getattr(obj, fieldname) - verbose_name = value.model._meta.verbose_name + verbose_name = '' else: verbose_name = str(field.verbose_name)\ From 6a2fddabd45578267cb821ad21c072a935ca544c Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Thu, 27 Jul 2017 17:50:28 -0300 Subject: [PATCH 36/49] =?UTF-8?q?Configura=20timezone=20das=20m=C3=A1quina?= =?UTF-8?q?s=20docker=20para=20America/Sao=5FPaulo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 5 +- docker-compose.yml | 2 +- out | 129 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 out diff --git a/Dockerfile b/Dockerfile index 85724ca11..98ed28f0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ ENV BUILD_PACKAGES postgresql-dev graphviz-dev graphviz build-base git pkgconfig python3-dev libxml2-dev jpeg-dev libressl-dev libffi-dev libxslt-dev nodejs py3-lxml \ py3-magic postgresql-client poppler-utils vim -RUN apk add --no-cache python3 nginx && \ +RUN apk add --no-cache python3 nginx tzdata && \ python3 -m ensurepip && \ rm -r /usr/lib/python*/ensurepip && \ pip3 install --upgrade pip setuptools && \ @@ -30,6 +30,9 @@ RUN pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgr COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env +# Configura timezone +RUN cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime && echo "America/Sao_Paulo" > /etc/timezone + # manage.py bower install bug: https://github.com/nvbn/django-bower/issues/51 # compilescss - Precompile all occurrences of your SASS/SCSS files for the whole project into css files diff --git a/docker-compose.yml b/docker-compose.yml index 7b97b49f4..1ca2625bb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ sapldb: ports: - "5532:5432" sapl: - image: interlegis/sapl:3.1.15-BETA + image: interlegis/sapl:3.1.16-BETA volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media diff --git a/out b/out new file mode 100644 index 000000000..a0beccb6c --- /dev/null +++ b/out @@ -0,0 +1,129 @@ +System check identified no issues (0 silenced). +./create_admin.py:4:1: F401 'sapl.settings' imported but unused +./create_admin.py:8:1: E302 expected 2 blank lines, found 1 +./create_admin.py:12:80: E501 line too long (87 > 79 characters) +./create_admin.py:16:80: E501 line too long (87 > 79 characters) +./create_admin.py:20:80: E501 line too long (116 > 79 characters) +./create_admin.py:25:80: E501 line too long (92 > 79 characters) +./genkey.py:5:80: E501 line too long (123 > 79 characters) +./scripts/set_inicio_mandato.py:10:31: W292 no newline at end of file +./sapl/settings.py:104:22: E203 whitespace before ':' +./sapl/settings.py:203:13: E231 missing whitespace after ',' +./sapl/test_urls.py:182:80: E501 line too long (80 > 79 characters) +./sapl/urls.py:38:80: E501 line too long (84 > 79 characters) +./sapl/utils.py:7:1: F401 'subprocess.PIPE' imported but unused +./sapl/utils.py:7:1: F401 'subprocess.call' imported but unused +./sapl/utils.py:8:1: F401 'threading.Thread' imported but unused +./sapl/utils.py:27:1: F401 'sapl.settings.PROJECT_DIR' imported but unused +./sapl/utils.py:541:80: E501 line too long (81 > 79 characters) +./sapl/utils.py:544:80: E501 line too long (85 > 79 characters) +./sapl/parlamentares/forms.py:326:1: W293 blank line contains whitespace +./sapl/parlamentares/views.py:192:80: E501 line too long (89 > 79 characters) +./sapl/parlamentares/views.py:204:80: E501 line too long (91 > 79 characters) +./sapl/parlamentares/views.py:347:5: E303 too many blank lines (2) +./sapl/protocoloadm/views.py:9:1: F401 'django.http.HttpResponseRedirect' imported but unused +./sapl/protocoloadm/views.py:13:1: F401 'django.views.generic.DetailView' imported but unused +./sapl/protocoloadm/views.py:13:1: F401 'django.views.generic.FormView' imported but unused +./sapl/protocoloadm/views.py:115:5: F811 redefinition of unused 'DetailView' from line 13 +./sapl/protocoloadm/views.py:542:5: F811 redefinition of unused 'DetailView' from line 13 +./sapl/protocoloadm/views.py:570:5: F811 redefinition of unused 'DetailView' from line 13 +./sapl/norma/apps.py:11:9: F401 '.signals' imported but unused +./sapl/norma/models.py:62:1: E302 expected 2 blank lines, found 1 +./sapl/norma/models.py:65:1: E302 expected 2 blank lines, found 1 +./sapl/norma/signals.py:1:1: F401 'django.db.models.signals.post_delete' imported but unused +./sapl/norma/signals.py:1:1: F401 'django.db.models.signals.post_save' imported but unused +./sapl/norma/signals.py:3:1: F401 '.models.NormaJuridica' imported but unused +./sapl/base/forms.py:731:1: W293 blank line contains whitespace +./sapl/base/search_indexes.py:129:41: W291 trailing whitespace +./sapl/painel/views.py:1:1: F401 'datetime.date' imported but unused +./sapl/painel/views.py:5:1: F401 'django.core.exceptions.MultipleObjectsReturned' imported but unused +./sapl/painel/views.py:15:1: F401 'sapl.painel.models.Painel' imported but unused +./sapl/sessao/views.py:84:1: E302 expected 2 blank lines, found 1 +./sapl/sessao/views.py:175:80: E501 line too long (100 > 79 characters) +./sapl/sessao/views.py:176:80: E501 line too long (92 > 79 characters) +./sapl/sessao/views.py:425:80: E501 line too long (100 > 79 characters) +./sapl/sessao/views.py:426:80: E501 line too long (92 > 79 characters) +./sapl/sessao/views.py:622:22: E127 continuation line over-indented for visual indent +./sapl/sessao/views.py:722:9: F841 local variable 'pk' is assigned to but never used +./sapl/sessao/views.py:732:22: E127 continuation line over-indented for visual indent +./sapl/sessao/views.py:2167:80: E501 line too long (81 > 79 characters) +./sapl/relatorios/views.py:16:1: F401 'sapl.sessao.models.RegistroVotacao' imported but unused +./sapl/relatorios/views.py:16:1: F401 'sapl.sessao.models.TipoExpediente' imported but unused +./sapl/compilacao/views.py:145:9: F841 local variable 'map_fields' is assigned to but never used +./sapl/compilacao/templatetags/compilacao_filters.py:290:1: E303 too many blank lines (3) +./sapl/api/forms.py:45:80: E501 line too long (94 > 79 characters) +./sapl/api/serializers.py:67:80: E501 line too long (84 > 79 characters) +./sapl/api/serializers.py:71:80: E501 line too long (82 > 79 characters) +./sapl/api/serializers.py:72:80: E501 line too long (85 > 79 characters) +./sapl/api/serializers.py:74:80: E501 line too long (99 > 79 characters) +./sapl/api/serializers.py:83:28: E222 multiple spaces after operator +./sapl/api/serializers.py:84:31: E222 multiple spaces after operator +./sapl/api/serializers.py:85:22: E222 multiple spaces after operator +./sapl/api/serializers.py:109:9: F841 local variable 'casa' is assigned to but never used +./sapl/api/serializers.py:149:5: E301 expected 1 blank line, found 0 +./sapl/api/views.py:10:1: F401 'rest_framework.viewsets.ModelViewSet' imported but unused +./sapl/api/views.py:88:61: W291 trailing whitespace +./sapl/api/views.py:117:66: W291 trailing whitespace +./sapl/api/views.py:130:73: W291 trailing whitespace +./sapl/materia/apps.py:11:9: F401 '.signals' imported but unused +./sapl/materia/email_utils.py:209:80: E501 line too long (82 > 79 characters) +./sapl/materia/forms.py:494:80: E501 line too long (82 > 79 characters) +./sapl/materia/forms.py:495:80: E501 line too long (86 > 79 characters) +./sapl/materia/signals.py:1:1: F401 'django.db.models.signals.post_delete' imported but unused +./sapl/materia/signals.py:1:1: F401 'django.db.models.signals.post_save' imported but unused +./sapl/materia/signals.py:5:1: F401 '.models.DocumentoAcessorio' imported but unused +./sapl/materia/signals.py:5:1: F401 '.models.MateriaLegislativa' imported but unused +./sapl/materia/urls.py:28:1: F401 '.receivers' imported but unused +./sapl/materia/views.py:24:1: F401 'django.forms' imported but unused +./sapl/materia/views.py:29:1: F401 'django.core.exceptions.MultipleObjectsReturned' imported but unused +./sapl/materia/views.py:45:1: F811 redefinition of unused 'Comissao' from line 44 +./sapl/materia/views.py:55:80: E501 line too long (82 > 79 characters) +./sapl/materia/views.py:58:1: F811 redefinition of unused 'Autor' from line 43 +./sapl/materia/views.py:68:1: E303 too many blank lines (3) +./sapl/materia/views.py:96:5: E129 visually indented line with same indent as next logical line +./sapl/materia/views.py:1092:80: E501 line too long (101 > 79 characters) +./sapl/materia/views.py:1094:80: E501 line too long (119 > 79 characters) +./sapl/materia/views.py:1096:80: E501 line too long (147 > 79 characters) +./sapl/materia/views.py:1096:84: E227 missing whitespace around bitwise or shift operator +./sapl/materia/views.py:1098:80: E501 line too long (110 > 79 characters) +./sapl/materia/views.py:1099:80: E501 line too long (104 > 79 characters) +./sapl/materia/views.py:1689:12: E128 continuation line under-indented for visual indent +./sapl/materia/views.py:1690:12: E128 continuation line under-indented for visual indent +./sapl/materia/views.py:1691:12: E124 closing bracket does not match visual indentation +./sapl/legacy/migracao_documentos.py:6:1: F401 'django.db.models.signals.post_delete' imported but unused +./sapl/legacy/migracao_documentos.py:6:1: F401 'django.db.models.signals.post_save' imported but unused +./sapl/legacy/migracao_documentos.py:89:80: E501 line too long (87 > 79 characters) +./sapl/legacy/migracao_documentos.py:208:7: E101 indentation contains mixed spaces and tabs +./sapl/legacy/migracao_documentos.py:208:7: W191 indentation contains tabs +./sapl/legacy/migration.py:17:1: F401 'django.db.models.signals.post_delete' imported but unused +./sapl/legacy/migration.py:17:1: F401 'django.db.models.signals.post_save' imported but unused +./sapl/legacy/migration.py:24:1: F401 'sapl.materia.models.DocumentoAcessorio' imported but unused +./sapl/legacy/migration.py:24:1: F401 'sapl.materia.models.MateriaLegislativa' imported but unused +./sapl/legacy/migration.py:31:51: E231 missing whitespace after ',' +./sapl/legacy/migration.py:33:62: E231 missing whitespace after ',' +./sapl/legacy/migration.py:255:21: E128 continuation line under-indented for visual indent +./sapl/legacy/migration.py:792:1: E303 too many blank lines (3) +./sapl/legacy/scripts/street_sweeper.py:15:80: E501 line too long (82 > 79 characters) +./sapl/legacy/scripts/street_sweeper.py:22:10: E261 at least two spaces before inline comment +./sapl/legacy/scripts/street_sweeper.py:46:1: E302 expected 2 blank lines, found 1 +./sapl/legacy/scripts/street_sweeper.py:61:80: E501 line too long (113 > 79 characters) +./sapl/legacy/scripts/street_sweeper.py:72:51: E222 multiple spaces after operator +./sapl/legacy/scripts/street_sweeper.py:72:80: E501 line too long (89 > 79 characters) +./sapl/legacy/scripts/street_sweeper.py:77:51: E127 continuation line over-indented for visual indent +./sapl/legacy/management/commands/migracao_25_31.py:8:11: E225 missing whitespace around operator +./sapl/legacy/management/commands/migracao_documentos.py:8:11: E225 missing whitespace around operator +./sapl/comissoes/views.py:85:80: E501 line too long (94 > 79 characters) +./sapl/comissoes/views.py:100:1: E303 too many blank lines (3) +ERROR: /home/eribeiro/python-projects/sapl/sapl/crispy_layout_mixin.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/parlamentares/views.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/parlamentares/models.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/redireciona_urls/views.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/redireciona_urls/urls.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/painel/views.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/sessao/views.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/views.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/models.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/signals.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/urls.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/forms.py Imports are incorrectly sorted. +ERROR: /home/eribeiro/python-projects/sapl/sapl/legacy/migration.py Imports are incorrectly sorted. From 688be1d764e31fdfbe45c4078811fed71e2bcc15 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Thu, 27 Jul 2017 17:50:58 -0300 Subject: [PATCH 37/49] Remove out --- out | 129 ------------------------------------------------------------ 1 file changed, 129 deletions(-) delete mode 100644 out diff --git a/out b/out deleted file mode 100644 index a0beccb6c..000000000 --- a/out +++ /dev/null @@ -1,129 +0,0 @@ -System check identified no issues (0 silenced). -./create_admin.py:4:1: F401 'sapl.settings' imported but unused -./create_admin.py:8:1: E302 expected 2 blank lines, found 1 -./create_admin.py:12:80: E501 line too long (87 > 79 characters) -./create_admin.py:16:80: E501 line too long (87 > 79 characters) -./create_admin.py:20:80: E501 line too long (116 > 79 characters) -./create_admin.py:25:80: E501 line too long (92 > 79 characters) -./genkey.py:5:80: E501 line too long (123 > 79 characters) -./scripts/set_inicio_mandato.py:10:31: W292 no newline at end of file -./sapl/settings.py:104:22: E203 whitespace before ':' -./sapl/settings.py:203:13: E231 missing whitespace after ',' -./sapl/test_urls.py:182:80: E501 line too long (80 > 79 characters) -./sapl/urls.py:38:80: E501 line too long (84 > 79 characters) -./sapl/utils.py:7:1: F401 'subprocess.PIPE' imported but unused -./sapl/utils.py:7:1: F401 'subprocess.call' imported but unused -./sapl/utils.py:8:1: F401 'threading.Thread' imported but unused -./sapl/utils.py:27:1: F401 'sapl.settings.PROJECT_DIR' imported but unused -./sapl/utils.py:541:80: E501 line too long (81 > 79 characters) -./sapl/utils.py:544:80: E501 line too long (85 > 79 characters) -./sapl/parlamentares/forms.py:326:1: W293 blank line contains whitespace -./sapl/parlamentares/views.py:192:80: E501 line too long (89 > 79 characters) -./sapl/parlamentares/views.py:204:80: E501 line too long (91 > 79 characters) -./sapl/parlamentares/views.py:347:5: E303 too many blank lines (2) -./sapl/protocoloadm/views.py:9:1: F401 'django.http.HttpResponseRedirect' imported but unused -./sapl/protocoloadm/views.py:13:1: F401 'django.views.generic.DetailView' imported but unused -./sapl/protocoloadm/views.py:13:1: F401 'django.views.generic.FormView' imported but unused -./sapl/protocoloadm/views.py:115:5: F811 redefinition of unused 'DetailView' from line 13 -./sapl/protocoloadm/views.py:542:5: F811 redefinition of unused 'DetailView' from line 13 -./sapl/protocoloadm/views.py:570:5: F811 redefinition of unused 'DetailView' from line 13 -./sapl/norma/apps.py:11:9: F401 '.signals' imported but unused -./sapl/norma/models.py:62:1: E302 expected 2 blank lines, found 1 -./sapl/norma/models.py:65:1: E302 expected 2 blank lines, found 1 -./sapl/norma/signals.py:1:1: F401 'django.db.models.signals.post_delete' imported but unused -./sapl/norma/signals.py:1:1: F401 'django.db.models.signals.post_save' imported but unused -./sapl/norma/signals.py:3:1: F401 '.models.NormaJuridica' imported but unused -./sapl/base/forms.py:731:1: W293 blank line contains whitespace -./sapl/base/search_indexes.py:129:41: W291 trailing whitespace -./sapl/painel/views.py:1:1: F401 'datetime.date' imported but unused -./sapl/painel/views.py:5:1: F401 'django.core.exceptions.MultipleObjectsReturned' imported but unused -./sapl/painel/views.py:15:1: F401 'sapl.painel.models.Painel' imported but unused -./sapl/sessao/views.py:84:1: E302 expected 2 blank lines, found 1 -./sapl/sessao/views.py:175:80: E501 line too long (100 > 79 characters) -./sapl/sessao/views.py:176:80: E501 line too long (92 > 79 characters) -./sapl/sessao/views.py:425:80: E501 line too long (100 > 79 characters) -./sapl/sessao/views.py:426:80: E501 line too long (92 > 79 characters) -./sapl/sessao/views.py:622:22: E127 continuation line over-indented for visual indent -./sapl/sessao/views.py:722:9: F841 local variable 'pk' is assigned to but never used -./sapl/sessao/views.py:732:22: E127 continuation line over-indented for visual indent -./sapl/sessao/views.py:2167:80: E501 line too long (81 > 79 characters) -./sapl/relatorios/views.py:16:1: F401 'sapl.sessao.models.RegistroVotacao' imported but unused -./sapl/relatorios/views.py:16:1: F401 'sapl.sessao.models.TipoExpediente' imported but unused -./sapl/compilacao/views.py:145:9: F841 local variable 'map_fields' is assigned to but never used -./sapl/compilacao/templatetags/compilacao_filters.py:290:1: E303 too many blank lines (3) -./sapl/api/forms.py:45:80: E501 line too long (94 > 79 characters) -./sapl/api/serializers.py:67:80: E501 line too long (84 > 79 characters) -./sapl/api/serializers.py:71:80: E501 line too long (82 > 79 characters) -./sapl/api/serializers.py:72:80: E501 line too long (85 > 79 characters) -./sapl/api/serializers.py:74:80: E501 line too long (99 > 79 characters) -./sapl/api/serializers.py:83:28: E222 multiple spaces after operator -./sapl/api/serializers.py:84:31: E222 multiple spaces after operator -./sapl/api/serializers.py:85:22: E222 multiple spaces after operator -./sapl/api/serializers.py:109:9: F841 local variable 'casa' is assigned to but never used -./sapl/api/serializers.py:149:5: E301 expected 1 blank line, found 0 -./sapl/api/views.py:10:1: F401 'rest_framework.viewsets.ModelViewSet' imported but unused -./sapl/api/views.py:88:61: W291 trailing whitespace -./sapl/api/views.py:117:66: W291 trailing whitespace -./sapl/api/views.py:130:73: W291 trailing whitespace -./sapl/materia/apps.py:11:9: F401 '.signals' imported but unused -./sapl/materia/email_utils.py:209:80: E501 line too long (82 > 79 characters) -./sapl/materia/forms.py:494:80: E501 line too long (82 > 79 characters) -./sapl/materia/forms.py:495:80: E501 line too long (86 > 79 characters) -./sapl/materia/signals.py:1:1: F401 'django.db.models.signals.post_delete' imported but unused -./sapl/materia/signals.py:1:1: F401 'django.db.models.signals.post_save' imported but unused -./sapl/materia/signals.py:5:1: F401 '.models.DocumentoAcessorio' imported but unused -./sapl/materia/signals.py:5:1: F401 '.models.MateriaLegislativa' imported but unused -./sapl/materia/urls.py:28:1: F401 '.receivers' imported but unused -./sapl/materia/views.py:24:1: F401 'django.forms' imported but unused -./sapl/materia/views.py:29:1: F401 'django.core.exceptions.MultipleObjectsReturned' imported but unused -./sapl/materia/views.py:45:1: F811 redefinition of unused 'Comissao' from line 44 -./sapl/materia/views.py:55:80: E501 line too long (82 > 79 characters) -./sapl/materia/views.py:58:1: F811 redefinition of unused 'Autor' from line 43 -./sapl/materia/views.py:68:1: E303 too many blank lines (3) -./sapl/materia/views.py:96:5: E129 visually indented line with same indent as next logical line -./sapl/materia/views.py:1092:80: E501 line too long (101 > 79 characters) -./sapl/materia/views.py:1094:80: E501 line too long (119 > 79 characters) -./sapl/materia/views.py:1096:80: E501 line too long (147 > 79 characters) -./sapl/materia/views.py:1096:84: E227 missing whitespace around bitwise or shift operator -./sapl/materia/views.py:1098:80: E501 line too long (110 > 79 characters) -./sapl/materia/views.py:1099:80: E501 line too long (104 > 79 characters) -./sapl/materia/views.py:1689:12: E128 continuation line under-indented for visual indent -./sapl/materia/views.py:1690:12: E128 continuation line under-indented for visual indent -./sapl/materia/views.py:1691:12: E124 closing bracket does not match visual indentation -./sapl/legacy/migracao_documentos.py:6:1: F401 'django.db.models.signals.post_delete' imported but unused -./sapl/legacy/migracao_documentos.py:6:1: F401 'django.db.models.signals.post_save' imported but unused -./sapl/legacy/migracao_documentos.py:89:80: E501 line too long (87 > 79 characters) -./sapl/legacy/migracao_documentos.py:208:7: E101 indentation contains mixed spaces and tabs -./sapl/legacy/migracao_documentos.py:208:7: W191 indentation contains tabs -./sapl/legacy/migration.py:17:1: F401 'django.db.models.signals.post_delete' imported but unused -./sapl/legacy/migration.py:17:1: F401 'django.db.models.signals.post_save' imported but unused -./sapl/legacy/migration.py:24:1: F401 'sapl.materia.models.DocumentoAcessorio' imported but unused -./sapl/legacy/migration.py:24:1: F401 'sapl.materia.models.MateriaLegislativa' imported but unused -./sapl/legacy/migration.py:31:51: E231 missing whitespace after ',' -./sapl/legacy/migration.py:33:62: E231 missing whitespace after ',' -./sapl/legacy/migration.py:255:21: E128 continuation line under-indented for visual indent -./sapl/legacy/migration.py:792:1: E303 too many blank lines (3) -./sapl/legacy/scripts/street_sweeper.py:15:80: E501 line too long (82 > 79 characters) -./sapl/legacy/scripts/street_sweeper.py:22:10: E261 at least two spaces before inline comment -./sapl/legacy/scripts/street_sweeper.py:46:1: E302 expected 2 blank lines, found 1 -./sapl/legacy/scripts/street_sweeper.py:61:80: E501 line too long (113 > 79 characters) -./sapl/legacy/scripts/street_sweeper.py:72:51: E222 multiple spaces after operator -./sapl/legacy/scripts/street_sweeper.py:72:80: E501 line too long (89 > 79 characters) -./sapl/legacy/scripts/street_sweeper.py:77:51: E127 continuation line over-indented for visual indent -./sapl/legacy/management/commands/migracao_25_31.py:8:11: E225 missing whitespace around operator -./sapl/legacy/management/commands/migracao_documentos.py:8:11: E225 missing whitespace around operator -./sapl/comissoes/views.py:85:80: E501 line too long (94 > 79 characters) -./sapl/comissoes/views.py:100:1: E303 too many blank lines (3) -ERROR: /home/eribeiro/python-projects/sapl/sapl/crispy_layout_mixin.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/parlamentares/views.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/parlamentares/models.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/redireciona_urls/views.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/redireciona_urls/urls.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/painel/views.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/sessao/views.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/views.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/models.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/signals.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/urls.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/materia/forms.py Imports are incorrectly sorted. -ERROR: /home/eribeiro/python-projects/sapl/sapl/legacy/migration.py Imports are incorrectly sorted. From 369723348431bb3983637e659856c60ca32b823a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Fr=C3=A1?= Date: Fri, 28 Jul 2017 14:45:50 -0300 Subject: [PATCH 38/49] Sobrando fechamento de tag (#1317) --- sapl/templates/sessao/pauta_sessao_detail.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/templates/sessao/pauta_sessao_detail.html b/sapl/templates/sessao/pauta_sessao_detail.html index 4664e8638..a16f86802 100644 --- a/sapl/templates/sessao/pauta_sessao_detail.html +++ b/sapl/templates/sessao/pauta_sessao_detail.html @@ -3,7 +3,7 @@ {% load crispy_forms_tags %} {% block base_content %} - +
    Identificação Básica From 7551d30ba98f8a7b4b48a005427322734501da42 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 31 Jul 2017 14:09:09 -0300 Subject: [PATCH 39/49] Fixes #1316 --- sapl/sessao/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 9e82b4e0e..61cadbf71 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -2294,7 +2294,7 @@ class PautaSessaoDetailView(DetailView): situacao = _("Não informada") # Verificar resultado rv = o.registrovotacao_set.all() - if resultado: + if rv: resultado = rv[0].tipo_resultado_votacao.nome else: resultado = _('Matéria não votada') From 1d4b865778e0c0be2e652619372851001b5d90d7 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 31 Jul 2017 14:10:45 -0300 Subject: [PATCH 40/49] Novo release --- Dockerfile | 4 ++-- docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 98ed28f0f..42ed97c71 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,8 +30,8 @@ RUN pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgr COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env -# Configura timezone -RUN cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime && echo "America/Sao_Paulo" > /etc/timezone +# Configura timezone para BRT +# RUN cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime && echo "America/Sao_Paulo" > /etc/timezone # manage.py bower install bug: https://github.com/nvbn/django-bower/issues/51 diff --git a/docker-compose.yml b/docker-compose.yml index 1ca2625bb..fbf0501db 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ sapldb: ports: - "5532:5432" sapl: - image: interlegis/sapl:3.1.16-BETA + image: interlegis/sapl:3.1.17-BETA volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media From 9579f2f649dbe6b43dd24ee696fe019eb738b023 Mon Sep 17 00:00:00 2001 From: Eliseu Egewarth Date: Mon, 31 Jul 2017 14:35:39 -0300 Subject: [PATCH 41/49] Fixes #1290 (#1314) Fixes #1283 Signed-off-by: Eliseu Egewarth --- sapl/protocoloadm/forms.py | 34 ++++++++++++++++------------------ sapl/protocoloadm/views.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index e513d4b1b..c8880960c 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -333,7 +333,10 @@ class ProtocoloDocumentForm(ModelForm): class ProtocoloMateriaForm(ModelForm): - autor = forms.IntegerField(widget=forms.HiddenInput(), required=False) + autor = forms.ModelChoiceField(required=True, + empty_label='------', + queryset=Autor.objects.all() + ) tipo_materia = forms.ModelChoiceField( label=_('Tipo de Matéria'), @@ -350,15 +353,6 @@ class ProtocoloMateriaForm(ModelForm): assunto_ementa = forms.CharField(required=True, widget=forms.Textarea, label='Ementa') - def clean_autor(self): - autor_field = self.cleaned_data['autor'] - try: - autor = Autor.objects.get(id=autor_field) - except ObjectDoesNotExist: - autor_field = None - else: - autor_field = autor - return autor_field class Meta: model = Protocolo @@ -368,19 +362,23 @@ class ProtocoloMateriaForm(ModelForm): 'assunto_ementa', 'observacao'] + def clean_autor(self): + autor_field = self.cleaned_data['autor'] + try: + autor = Autor.objects.get(id=autor_field.id) + except ObjectDoesNotExist: + autor_field = None + else: + autor_field = autor + return autor_field + def __init__(self, *args, **kwargs): row1 = to_row( [('tipo_materia', 4), ('numero_paginas', 4)]) row2 = to_row( - [('autor', 0), - (Button('pesquisar', - 'Pesquisar Autor', - css_class='btn btn-primary btn-sm'), 2), - (Button('limpar', - 'limpar Autor', - css_class='btn btn-primary btn-sm'), 10)]) + [('autor', 4)]) row3 = to_row( [('assunto_ementa', 12)]) row4 = to_row( @@ -389,7 +387,7 @@ class ProtocoloMateriaForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset(_('Identificação da Matéria'), - row1, HTML(autor_label), HTML(autor_modal), row2, row3, + row1, row2, row3, row4, form_actions(save_label='Protocolar Matéria'))) super(ProtocoloMateriaForm, self).__init__( diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index e11def026..9fffa3669 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -1,8 +1,10 @@ from datetime import date, datetime + from braces.views import FormValidMessageMixin from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin +from django.db.models import Q from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse from django.db.models import Max @@ -15,6 +17,7 @@ from django.views.generic.base import TemplateView from django_filters.views import FilterView import sapl +from sapl.base.models import Autor from sapl.crud.base import Crud, CrudAux, MasterDetailCrud, make_pagination from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.utils import create_barcode, get_client_ip @@ -27,6 +30,10 @@ from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo, Protocolo, StatusTramitacaoAdministrativo, TipoDocumentoAdministrativo, TramitacaoAdministrativo) +from sapl.parlamentares.models import Parlamentar +from sapl.protocoloadm.models import Protocolo +from sapl.comissoes.models import Comissao +from django.contrib.contenttypes.models import ContentType TipoDocumentoAdministrativoCrud = CrudAux.build( TipoDocumentoAdministrativo, '') @@ -438,6 +445,30 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView): protocolo.save() return redirect(self.get_success_url(protocolo)) + def get_context_data(self, **kwargs): + context = super(CreateView, self).get_context_data(**kwargs) + autores_ativos = self.autores_ativos() + + autores = [] + autores.append(['0', '------']) + for a in autores_ativos: + autores.append([a.id, a.__str__()]) + + context['form'].fields['autor'].choices = autores + return context + + def autores_ativos(self): + lista_parlamentares = Parlamentar.objects.filter(ativo=True).values_list('id', flat=True) + model_parlamentar = ContentType.objects.get_for_model(Parlamentar) + autor_parlamentar = Autor.objects.filter(content_type=model_parlamentar, object_id__in=lista_parlamentares) + + lista_comissoes = Comissao.objects.filter(Q(data_extincao__isnull=True)|Q(data_extincao__gt=date.today())).values_list('id', flat=True) + model_comissao = ContentType.objects.get_for_model(Comissao) + autor_comissoes = Autor.objects.filter(content_type=model_comissao, object_id__in=lista_comissoes) + autores_outros = Autor.objects.exclude(content_type__in=[model_parlamentar, model_comissao]) + q = autor_parlamentar | autor_comissoes | autores_outros + return q + class ProtocoloMateriaTemplateView(PermissionRequiredMixin, TemplateView): From 1ea7aef6a1548ecd0d7e8ba3c66400a36ba487f3 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 31 Jul 2017 14:36:22 -0300 Subject: [PATCH 42/49] Fix #1229 (#1318) --- sapl/materia/forms.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 47eabe43b..f809970de 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -16,10 +16,14 @@ from django.db.models import Max from django.forms import ModelForm, widgets from django.forms.forms import Form from django.forms.widgets import Select +from django.utils import six from django.utils.encoding import force_text from django.utils.html import format_html from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ + +from django_filters.filterset import STRICTNESS + import django_filters from sapl.base.models import Autor @@ -586,6 +590,45 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): form_actions(save_label='Pesquisar')) ) + @property + def qs(self): + if not hasattr(self, '_qs'): + valid = self.is_bound and self.form.is_valid() + + if self.is_bound and not valid: + if self.strict == STRICTNESS.RAISE_VALIDATION_ERROR: + raise forms.ValidationError(self.form.errors) + elif bool(self.strict) == STRICTNESS.RETURN_NO_RESULTS: + self._qs = self.queryset.none() + return self._qs + # else STRICTNESS.IGNORE... ignoring + + # start with all the results and filter from there + qs = self.queryset.all() + for name, filter_ in six.iteritems(self.filters): + value = None + if valid: + value = self.form.cleaned_data[name] + else: + raw_value = self.form[name].value() + try: + value = self.form.fields[name].clean(raw_value) + except forms.ValidationError: + if self.strict == STRICTNESS.RAISE_VALIDATION_ERROR: + raise + elif bool(self.strict) == STRICTNESS.RETURN_NO_RESULTS: + self._qs = self.queryset.none() + return self._qs + # else STRICTNESS.IGNORE... ignoring + + if value is not None: # valid & clean data + qs = qs._next_is_sticky() + qs = filter_.filter(qs, value) + + self._qs = qs + + return self._qs + def pega_ultima_tramitacao(): ultimas_tramitacoes = Tramitacao.objects.values( From 9374dff90cc18b50d06d658c51a27210aa638331 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 31 Jul 2017 14:38:29 -0300 Subject: [PATCH 43/49] Fix #1265 autoria filtrar tipo (#1272) * Fixes #1265 * WIP --- sapl/materia/forms.py | 24 +++++++++++++++++++++--- sapl/materia/views.py | 4 ++++ sapl/templates/materia/layouts.yaml | 8 ++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index f809970de..a8cf6cb66 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -13,7 +13,7 @@ from django.core.files.base import File from django.core.urlresolvers import reverse from django.db import models, transaction from django.db.models import Max -from django.forms import ModelForm, widgets +from django.forms import ModelForm, ModelChoiceField, widgets from django.forms.forms import Form from django.forms.widgets import Select from django.utils import six @@ -26,7 +26,7 @@ from django_filters.filterset import STRICTNESS import django_filters -from sapl.base.models import Autor +from sapl.base.models import Autor, TipoAutor from sapl.comissoes.models import Comissao from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC, STATUS_TA_PRIVATE) @@ -691,9 +691,27 @@ class DespachoInicialForm(ModelForm): class AutoriaForm(ModelForm): + tipo_autor = ModelChoiceField(label=_('Tipo Autor'), + required=False, + queryset= + TipoAutor.objects.all().order_by('descricao'), + empty_label='Selecione',) + + def __init__(self, *args, **kwargs): + super(AutoriaForm, self).__init__(*args, **kwargs) + + row1 = to_row([('tipo_autor', 4), + ('autor', 4), + ('primeiro_autor', 4)]) + + self.helper = FormHelper() + self.helper.layout = Layout( + Fieldset(_('Autoria'), + row1, form_actions(save_label='Salvar'))) + class Meta: model = Autoria - fields = ['autor', 'primeiro_autor'] + fields = ['tipo_autor', 'autor', 'primeiro_autor'] def clean(self): super(AutoriaForm, self).clean() diff --git a/sapl/materia/views.py b/sapl/materia/views.py index fb5fbd216..ddb78defb 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1089,6 +1089,10 @@ class AutoriaCrud(MasterDetailCrud): class CreateView(MasterDetailCrud.CreateView): form_class = AutoriaForm + @property + def layout_key(self): + return 'AutoriaCreate' + def get_context_data(self, **kwargs): context = super(CreateView, self).get_context_data(**kwargs) autores_ativos = self.autores_ativos() diff --git a/sapl/templates/materia/layouts.yaml b/sapl/templates/materia/layouts.yaml index 6045d61d9..aac494432 100644 --- a/sapl/templates/materia/layouts.yaml +++ b/sapl/templates/materia/layouts.yaml @@ -61,6 +61,14 @@ Autoria: {% trans 'Autoria' %}: - autor primeiro_autor +AutoriaCreate: + {% trans 'Autoria' %}: + - tipo_autor autor primeiro_autor + +AutoriaUpdate: + {% trans 'Autoria' %}: + - tipo_autor autor primeiro_autor + DocumentoAcessorio: {% trans 'Documento Acessório' %}: - tipo nome data From d5072d6be48efa7aeeff1b0432d04682db99f4b6 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 31 Jul 2017 17:07:45 -0300 Subject: [PATCH 44/49] Fixes #1265 --- sapl/materia/views.py | 2 -- sapl/templates/crud/detail.html | 2 ++ sapl/templates/materia/autoria_form.html | 31 ++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 sapl/templates/materia/autoria_form.html diff --git a/sapl/materia/views.py b/sapl/materia/views.py index ddb78defb..bc2478d49 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1098,8 +1098,6 @@ class AutoriaCrud(MasterDetailCrud): autores_ativos = self.autores_ativos() autores = [] - for a in autores_ativos: - autores.append([a.id, a.__str__()]) context['form'].fields['autor'].choices = autores return context diff --git a/sapl/templates/crud/detail.html b/sapl/templates/crud/detail.html index 64bd7203a..1653a11e4 100644 --- a/sapl/templates/crud/detail.html +++ b/sapl/templates/crud/detail.html @@ -114,4 +114,6 @@ {% include "paginacao.html" %} {% endblock table_content %} + + {% block extra_js %}{% endblock %} {% endblock base_content %} diff --git a/sapl/templates/materia/autoria_form.html b/sapl/templates/materia/autoria_form.html new file mode 100644 index 000000000..c310b9128 --- /dev/null +++ b/sapl/templates/materia/autoria_form.html @@ -0,0 +1,31 @@ +{% extends "crud/form.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% load common_tags %} + +{% block extra_js %} + +{% endblock %} From bc015604b00d2c144c49f2e3b097a1690f13cd14 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 31 Jul 2017 17:20:32 -0300 Subject: [PATCH 45/49] HACK: ordena os autores no lado cliente (via JS) em Autoria de Materia Legislativa --- sapl/templates/materia/autoria_form.html | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sapl/templates/materia/autoria_form.html b/sapl/templates/materia/autoria_form.html index c310b9128..e3b194fdb 100644 --- a/sapl/templates/materia/autoria_form.html +++ b/sapl/templates/materia/autoria_form.html @@ -5,6 +5,15 @@ {% block extra_js %} #}scr From d67612241c82927b2329aafa6eb42207fa07f899 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 31 Jul 2017 19:36:37 -0300 Subject: [PATCH 47/49] Remove arquivos de origem desconhecida --- bug.txt | 0 envfile | 1 - 2 files changed, 1 deletion(-) delete mode 100644 bug.txt delete mode 100644 envfile diff --git a/bug.txt b/bug.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/envfile b/envfile deleted file mode 100644 index a7aef4b0f..000000000 --- a/envfile +++ /dev/null @@ -1 +0,0 @@ -EMAIL_HOST_USER=foo From 45ed6850d03aca30cfcb5e420885f25a2e378aa3 Mon Sep 17 00:00:00 2001 From: Eliseu Egewarth Date: Tue, 1 Aug 2017 08:52:49 -0300 Subject: [PATCH 48/49] Update instalacao31.rst (#1322) --- docs/instalacao31.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/instalacao31.rst b/docs/instalacao31.rst index 60c30df56..a7f9e3060 100644 --- a/docs/instalacao31.rst +++ b/docs/instalacao31.rst @@ -93,7 +93,7 @@ Criar o ambiente virtual de desenvolvimento para o SAPL ------------------------------------------------------- * :: - mkvirtualenv sapl -a /var/interlegis/sapl -p /usr/bin/python3 + mkvirtualenv -a /var/interlegis/sapl -p python3 -r requirements/requirements.txt sapl Instalação e configuração das dependências do projeto ----------------------------------------------------- @@ -119,9 +119,9 @@ Instalação e configuração das dependências do projeto * (caso você já possua uma instalação do postrgresql anterior ao processo de instalação do ambiente de desenvolvimento do SAPL em sua máquina e sábia como fazer, esteja livre para proceder como desejar, porém, ao configurar o arquivo ``.env`` no próximo passo, as mesmas definições deverão ser usadas) -* **Ajustar as permissões - onde sapl31 trocar por usuario**:: +* **Ajustar as permissões - onde $USER trocar por usuario**:: - sudo chown -R sapl31:sapl31 /var/interlegis/ + eval $(echo "sudo chown -R $USER:$USER /var/interlegis/") @@ -178,7 +178,7 @@ Copie a chave que aparecerá, edite o arquivo .env e altere o valor do parâmetr * Instalar as dependências do ``bower``:: - sudo chown -R sapl31:sapl31 /home/sapl31/ + eval $(echo "sudo chown -R $USER:$USER /home/$USER/") ./manage.py bower install * Atualizar e/ou criar as tabelas da base de dados para refletir o modelo da versão clonada:: From b74784c3109d7689bf5a784e76649ae539084619 Mon Sep 17 00:00:00 2001 From: Luciano Henrique Nunes de Almeida Date: Tue, 1 Aug 2017 08:55:16 -0300 Subject: [PATCH 49/49] Muda valor de ind_excluido de 0 para string vazia (#1321) Signed-off-by: Luciano Almeida --- sapl/legacy/scripts/fix_tables.sql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sapl/legacy/scripts/fix_tables.sql b/sapl/legacy/scripts/fix_tables.sql index ed93373b1..e1dddc393 100644 --- a/sapl/legacy/scripts/fix_tables.sql +++ b/sapl/legacy/scripts/fix_tables.sql @@ -5,6 +5,7 @@ DROP PROCEDURE IF EXISTS verifica_campos_proposicao; DROP PROCEDURE IF EXISTS verifica_campos_tipo_materia_legislativa; DROP PROCEDURE IF EXISTS verifica_campos_sessao_plenaria_presenca; DROP PROCEDURE IF EXISTS cria_lexml_registro_provedor_e_publicador; +DROP PROCEDURE IF EXISTS muda_vinculo_norma_juridica_ind_excluido; -- Procedure para criar campo num_proposicao em proposicao CREATE PROCEDURE verifica_campos_proposicao() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='proposicao' AND column_name='num_proposicao') THEN ALTER TABLE proposicao ADD COLUMN num_proposicao INT(11) NULL after txt_justif_devolucao; END IF; END; -- Procedure para criar campo iind_num_automatica em tipo_materia_legislativa @@ -13,8 +14,11 @@ CREATE PROCEDURE verifica_campos_tipo_materia_legislativa() BEGIN IF NOT EXISTS CREATE PROCEDURE verifica_campos_sessao_plenaria_presenca() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='sessao_plenaria_presenca' AND column_name='cod_presenca_sessao') THEN ALTER TABLE sessao_plenaria_presenca DROP PRIMARY KEY, ADD cod_presenca_sessao INT AUTO_INCREMENT PRIMARY KEY FIRST; END IF; IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='sessao_plenaria_presenca' AND column_name='dat_sessao') THEN ALTER TABLE sessao_plenaria_presenca ADD COLUMN dat_sessao DATE NULL after cod_parlamentar; END IF; END; -- Procedure para criar tabela lexml_registro_provedor e lexml_registro_publicador CREATE PROCEDURE cria_lexml_registro_provedor_e_publicador() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='lexml_registro_publicador') THEN CREATE TABLE lexml_registro_publicador (cod_publicador INT AUTO_INCREMENT NOT NULL, id_publicador INT, nom_publicador VARCHAR(255), adm_email VARCHAR(50), sigla VARCHAR(255), nom_responsavel VARCHAR(255), tipo VARCHAR(50), id_responsavel INT, PRIMARY KEY (cod_publicador)); END IF; IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='lexml_registro_provedor') THEN CREATE TABLE lexml_registro_provedor (cod_provedor INT AUTO_INCREMENT NOT NULL, id_provedor INT, nom_provedor VARCHAR(255), sgl_provedor VARCHAR(15), adm_email VARCHAR(50), nom_responsavel VARCHAR(255), tipo VARCHAR(50), id_responsavel INT, xml_provedor LONGTEXT, PRIMARY KEY (cod_provedor)); END IF; END; +-- Procedure para mudar valor do campo ind_excluido da tabela vinculo_norma_juridica de 0 para string vazia '' +CREATE PROCEDURE muda_vinculo_norma_juridica_ind_excluido() BEGIN UPDATE vinculo_norma_juridica SET ind_excluido = '' WHERE trim(ind_excluido) = '0'; END; -- Executa as procedures criadas acima CALL verifica_campos_proposicao; CALL verifica_campos_tipo_materia_legislativa; CALL verifica_campos_sessao_plenaria_presenca; CALL cria_lexml_registro_provedor_e_publicador; +CALL muda_vinculo_norma_juridica_ind_excluido;