From e9d64207f2fd1b1437267106618a5e5ced42ed93 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Wed, 9 Jan 2019 17:30:54 -0200 Subject: [PATCH 01/35] Fix #2447 --- sapl/materia/views.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 07911f09b..0f856ede3 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -26,7 +26,7 @@ import weasyprint import sapl from sapl.base.email_utils import do_envia_email_confirmacao -from sapl.base.models import Autor, CasaLegislativa +from sapl.base.models import Autor, CasaLegislativa, AppConfig as BaseAppConfig from sapl.base.signals import tramitacao_signal from sapl.comissoes.models import Comissao, Participacao from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_RESTRICT, @@ -783,16 +783,23 @@ class ProposicaoCrud(Crud): msg_error = _('Proposição não possui nenhum tipo de ' 'Texto associado.') else: - p.data_devolucao = None - p.data_envio = timezone.now() - p.save() - if p.texto_articulado.exists(): ta = p.texto_articulado.first() ta.privacidade = STATUS_TA_IMMUTABLE_RESTRICT ta.editing_locked = True ta.save() + receber_recibo = BaseAppConfig.attr( + 'receber_recibo_proposicao') + + if not receber_recibo: + ta = p.texto_articulado.first() + p.hash_code = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(p.pk) + + p.data_devolucao = None + p.data_envio = timezone.now() + p.save() + messages.success(request, _( 'Proposição enviada com sucesso.')) try: From 05f1bb923912b051d7710952a0b0792bdc1187da Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Thu, 10 Jan 2019 18:42:30 -0200 Subject: [PATCH 02/35] Release: 3.1.141 --- docker-compose.yml | 2 +- sapl/templates/base.html | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index b379cf46c..c796253d4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ sapldb: ports: - "5432:5432" sapl: - image: interlegis/sapl:3.1.140 + image: interlegis/sapl:3.1.141 restart: always environment: ADMIN_PASSWORD: interlegis diff --git a/sapl/templates/base.html b/sapl/templates/base.html index 59f9919f1..a738aa276 100644 --- a/sapl/templates/base.html +++ b/sapl/templates/base.html @@ -184,7 +184,7 @@ Desenvolvido pelo Interlegis em software livre e aberto. - Release: 3.1.140 + Release: 3.1.141

diff --git a/setup.py b/setup.py index 6b7c5a248..61de04956 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,7 @@ install_requires = [ ] setup( name='interlegis-sapl', - version='3.1.140', + version='3.1.141', packages=find_packages(), include_package_data=True, license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', From bd2bc3a4f7d71f6f7b387f13694defcebaca93ea Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Sat, 5 Jan 2019 04:39:39 -0200 Subject: [PATCH 03/35] bump django para 1.11 --- requirements/requirements.txt | 17 +++++++++-------- setup.py | 11 ++++++----- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 3c4d2e135..69cb803f5 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,18 +1,19 @@ +django>=1.11,<2.0 +django-haystack==2.8.1 +django-bootstrap3==11.0.0 +django-filter==2.0.0 +djangorestframework==3.9.0 + dj-database-url==0.4.1 -django-haystack==2.6.0 -django>=1.10,<1.11 -django-bootstrap3==7.0.1 django-bower==5.2.0 django-braces==1.9.0 django-compressor==2.0 django-crispy-forms==1.6.1 django-extensions==1.9.8 django-extra-views==0.11.0 -django-filter==1.0.0 django-floppyforms==1.6.2 django-model-utils==3.1.1 django-sass-processor==0.5.8 -djangorestframework==3.4.0 easy-thumbnails==2.5 django-image-cropping==1.2 libsass==0.11.1 @@ -32,6 +33,6 @@ whoosh==2.7.4 django-speedinfo==1.3.5 django-reversion-compare==0.8.4 -git+git://github.com/interlegis/trml2pdf.git -git+git://github.com/jasperlittle/django-rest-framework-docs -git+git://github.com/rubgombar1/django-admin-bootstrapped.git \ No newline at end of file +#git+git://github.com/interlegis/trml2pdf.git +#git+git://github.com/jasperlittle/django-rest-framework-docs +#git+git://github.com/rubgombar1/django-admin-bootstrapped.git \ No newline at end of file diff --git a/setup.py b/setup.py index 61de04956..a64217d42 100644 --- a/setup.py +++ b/setup.py @@ -9,21 +9,22 @@ with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme: os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) install_requires = [ + 'django>=1.11,<2.0', + 'django-haystack==2.8.1', + 'django-bootstrap3==11.0.0', + 'django-filter==2.0.0', + 'djangorestframework==3.9.0', + 'dj-database-url==0.4.1', - 'django-haystack==2.6.0', - 'django>=1.10,<1.11', - 'django-bootstrap3==7.0.1', 'django-bower==5.2.0', 'django-braces==1.9.0', 'django-compressor==2.0', 'django-crispy-forms==1.6.1', 'django-extensions==1.9.8', 'django-extra-views==0.11.0', - 'django-filter==0.15.3', 'django-floppyforms==1.6.2', 'django-model-utils==3.1.1', 'django-sass-processor==0.5.8', - 'djangorestframework==3.4.0', 'drfdocs', 'easy-thumbnails==2.5', 'django-image-cropping==1.1.0', From 55963883265c9165aa62a8bf62e030395eb7d80b Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Sat, 5 Jan 2019 04:40:44 -0200 Subject: [PATCH 04/35] =?UTF-8?q?altera=C3=A7=C3=B5es=20m=C3=ADnimas=20par?= =?UTF-8?q?a=20executar=20manage=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/forms.py | 2 +- sapl/api/views.py | 5 +++-- sapl/settings.py | 7 ++++--- sapl/utils.py | 21 ++++++++++----------- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/sapl/api/forms.py b/sapl/api/forms.py index fecfbf598..0c8a1889f 100644 --- a/sapl/api/forms.py +++ b/sapl/api/forms.py @@ -6,8 +6,8 @@ from django.forms.widgets import MultiWidget, TextInput from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from django_filters.filters import CharFilter, ModelChoiceFilter, DateFilter +from django_filters.rest_framework.filterset import FilterSet from rest_framework import serializers -from rest_framework.filters import FilterSet from sapl.base.models import Autor, TipoAutor from sapl.parlamentares.models import Legislatura diff --git a/sapl/api/views.py b/sapl/api/views.py index b8cafc1dd..336bb23d7 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -1,9 +1,10 @@ import logging + from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.http import Http404 from django.utils.translation import ugettext_lazy as _ -from rest_framework.filters import DjangoFilterBackend +from django_filters.rest_framework.backends import DjangoFilterBackend from rest_framework.generics import ListAPIView from rest_framework.mixins import ListModelMixin, RetrieveModelMixin from rest_framework.permissions import (AllowAny, IsAuthenticated, @@ -175,7 +176,7 @@ class AutoresProvaveisListView(ListAPIView): serializer_class = ChoiceSerializer def get_queryset(self): - + params = {'content_type__isnull': False} username = self.request.user.username tipo = '' diff --git a/sapl/settings.py b/sapl/settings.py index 80bf18273..63f18e325 100755 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -90,6 +90,7 @@ INSTALLED_APPS = ( 'haystack', 'sass_processor', 'rest_framework', + 'django_filters', 'reversion', 'reversion_compare', 'whoosh', @@ -110,7 +111,7 @@ SOLR_URL = config('SOLR_URL', cast=str, default='http://localhost:8983') SOLR_COLLECTION = config('SOLR_COLLECTION', cast=str, default='sapl') if USE_SOLR: - HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' #enable auto-index + HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' # enable auto-index SEARCH_BACKEND = 'haystack.backends.solr_backend.SolrEngine' SEARCH_URL = ('URL', '{}/solr/{}'.format(SOLR_URL, SOLR_COLLECTION)) @@ -118,7 +119,7 @@ if USE_SOLR: HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': SEARCH_BACKEND, - SEARCH_URL[0]: SEARCH_URL[1], + SEARCH_URL[0]: SEARCH_URL[1], 'BATCH_SIZE': 1000, 'TIMEOUT': 60, }, @@ -166,7 +167,7 @@ REST_FRAMEWORK = { "DEFAULT_PAGINATION_CLASS": "sapl.api.pagination.StandardPagination", "DEFAULT_FILTER_BACKENDS": ( "rest_framework.filters.SearchFilter", - "rest_framework.filters.DjangoFilterBackend", + 'django_filters.rest_framework.DjangoFilterBackend', ), } diff --git a/sapl/utils.py b/sapl/utils.py index def839eb1..c884a8c48 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -21,7 +21,6 @@ from django.db.models import Q from django.utils import six, timezone from django.utils.translation import ugettext_lazy as _ import django_filters -from django_filters.filterset import STRICTNESS from easy_thumbnails import source_generators from floppyforms import ClearableFileInput import magic @@ -685,12 +684,12 @@ def qs_override_django_filter(self): valid = self.is_bound and self.form.is_valid() if self.is_bound and not valid: - if self.strict == STRICTNESS.RAISE_VALIDATION_ERROR: + """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 + 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() @@ -703,12 +702,12 @@ def qs_override_django_filter(self): try: value = self.form.fields[name].clean(raw_value) except forms.ValidationError: - if self.strict == STRICTNESS.RAISE_VALIDATION_ERROR: + """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 + 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() From b4666807ab6c9f16101a2dd5cc832d580ef06c01 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Sat, 5 Jan 2019 04:52:22 -0200 Subject: [PATCH 05/35] =?UTF-8?q?adequa=C3=A7=C3=A3o=20de=20c=C3=B3digo=20?= =?UTF-8?q?na=20chamada=20do=20render=20de=20templates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/base/email_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/base/email_utils.py b/sapl/base/email_utils.py index 024045edd..b41c68402 100644 --- a/sapl/base/email_utils.py +++ b/sapl/base/email_utils.py @@ -18,7 +18,7 @@ def load_email_templates(templates, context={}): emails = [] for t in templates: tpl = loader.get_template(t) - email = tpl.render(Context(context)) + email = tpl.render(context) if t.endswith(".html"): email = email.replace('\n', '').replace('\r', '') emails.append(email) From 243f984a13a60ef441daff8fef9dc8603be773a1 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Sun, 6 Jan 2019 16:21:20 -0200 Subject: [PATCH 06/35] remove django-compressor --- requirements/requirements.txt | 11 ++++++----- sapl/base/templatetags/common_tags.py | 15 ++++++++++----- sapl/crud/base.py | 15 +++++++++------ setup.py | 9 +++++---- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 69cb803f5..944b300d7 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,13 +1,12 @@ django>=1.11,<2.0 -django-haystack==2.8.1 django-bootstrap3==11.0.0 +django-haystack==2.8.1 django-filter==2.0.0 djangorestframework==3.9.0 - -dj-database-url==0.4.1 +dj-database-url==0.5.0 django-bower==5.2.0 django-braces==1.9.0 -django-compressor==2.0 + django-crispy-forms==1.6.1 django-extensions==1.9.8 django-extra-views==0.11.0 @@ -35,4 +34,6 @@ django-reversion-compare==0.8.4 #git+git://github.com/interlegis/trml2pdf.git #git+git://github.com/jasperlittle/django-rest-framework-docs -#git+git://github.com/rubgombar1/django-admin-bootstrapped.git \ No newline at end of file +#git+git://github.com/rubgombar1/django-admin-bootstrapped.git + +#django-compressor==2.2 \ No newline at end of file diff --git a/sapl/base/templatetags/common_tags.py b/sapl/base/templatetags/common_tags.py index 89f781558..884a6968f 100644 --- a/sapl/base/templatetags/common_tags.py +++ b/sapl/base/templatetags/common_tags.py @@ -1,8 +1,4 @@ -import logging - -from compressor.utils import get_class from django import template -from django.conf import settings from django.template.defaultfilters import stringfilter from sapl.base.models import AppConfig @@ -15,6 +11,15 @@ from sapl.utils import filiacao_data, SEPARADOR_HASH_PROPOSICAO register = template.Library() +def get_class(class_string): + if not hasattr(class_string, '__bases__'): + class_string = str(class_string) + dot = class_string.rindex('.') + mod_name, class_name = class_string[:dot], class_string[dot + 1:] + if class_name: + return getattr(__import__(mod_name, {}, {}, [str('')]), class_name) + + @register.simple_tag def define(arg): return arg @@ -228,7 +233,7 @@ def file_extension(value): def cronometro_to_seconds(value): if not AppConfig.attr('cronometro_' + value): return 0 - + return AppConfig.attr('cronometro_' + value).seconds diff --git a/sapl/crud/base.py b/sapl/crud/base.py index e720b36cd..faa0e1287 100644 --- a/sapl/crud/base.py +++ b/sapl/crud/base.py @@ -1,6 +1,6 @@ import logging + from braces.views import FormMessagesMixin -from compressor.utils.decorators import cached_property from crispy_forms.bootstrap import FieldWithButtons, StrictButton from crispy_forms.helper import FormHelper from crispy_forms.layout import Field, Layout @@ -16,6 +16,7 @@ from django.http.response import Http404 from django.shortcuts import redirect from django.utils.decorators import classonlymethod from django.utils.encoding import force_text +from django.utils.functional import cached_property from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ from django.views.generic import (CreateView, DeleteView, DetailView, ListView, @@ -29,6 +30,7 @@ from sapl.rules.map_rules import (RP_ADD, RP_CHANGE, RP_DELETE, RP_DETAIL, from sapl.settings import BASE_DIR from sapl.utils import normalize + ACTION_LIST, ACTION_CREATE, ACTION_DETAIL, ACTION_UPDATE, ACTION_DELETE = \ 'list', 'create', 'detail', 'update', 'delete' @@ -558,7 +560,8 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): fm = model._meta.get_field(fo) except Exception as e: username = self.request.user.username - self.logger.error("user=" + username + ". " + str(e)) + self.logger.error( + "user=" + username + ". " + str(e)) pass if fm and hasattr(fm, 'related_model')\ @@ -824,7 +827,7 @@ class CrudUpdateView(PermissionRequiredContainerCrudMixin, logger = logging.getLogger(__name__) def form_valid(self, form): - + self.object = form.instance try: self.object.modifier = self.request.user @@ -882,12 +885,12 @@ class CrudDeleteView(PermissionRequiredContainerCrudMixin, error_msg2 += '{} - {}, '.format( i._meta.verbose_name, i ) - error_msg2 = error_msg2[:len(error_msg2)-2] + '.' + error_msg2 = error_msg2[:len(error_msg2) - 2] + '.' error_msg += '' - + username = request.user.username self.logger.error("user=" + username + ". Registro não pode ser removido, pois " - "é referenciado por outros registros: " + error_msg2) + "é referenciado por outros registros: " + error_msg2) messages.add_message(request, messages.ERROR, error_msg) diff --git a/setup.py b/setup.py index a64217d42..e44ded347 100644 --- a/setup.py +++ b/setup.py @@ -10,15 +10,14 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) install_requires = [ 'django>=1.11,<2.0', - 'django-haystack==2.8.1', 'django-bootstrap3==11.0.0', + 'django-haystack==2.8.1', 'django-filter==2.0.0', 'djangorestframework==3.9.0', - - 'dj-database-url==0.4.1', + 'dj-database-url==0.5.0', 'django-bower==5.2.0', 'django-braces==1.9.0', - 'django-compressor==2.0', + 'django-crispy-forms==1.6.1', 'django-extensions==1.9.8', 'django-extra-views==0.11.0', @@ -47,6 +46,8 @@ install_requires = [ # 'git+git://github.com/interlegis/trml2pdf.git', # 'git+git://github.com/jasperlittle/django-rest-framework-docs' # 'git+git://github.com/rubgombar1/django-admin-bootstrapped.git'' + + #'django-compressor==2.2', ] setup( name='interlegis-sapl', From 22b87f36ebc8659a6ecaf8831ab0f425206b0993 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Sun, 6 Jan 2019 16:49:40 -0200 Subject: [PATCH 07/35] =?UTF-8?q?bump=20django-crispy-forms=20e=20ajustes?= =?UTF-8?q?=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements/requirements.txt | 2 +- sapl/utils.py | 16 ++++++++++++---- setup.py | 4 ++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 944b300d7..7b6dc25c1 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -6,8 +6,8 @@ djangorestframework==3.9.0 dj-database-url==0.5.0 django-bower==5.2.0 django-braces==1.9.0 +django-crispy-forms==1.7.2 -django-crispy-forms==1.6.1 django-extensions==1.9.8 django-extra-views==0.11.0 django-floppyforms==1.6.2 diff --git a/sapl/utils.py b/sapl/utils.py index c884a8c48..706d5cb65 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -208,19 +208,27 @@ class RangeWidgetOverride(forms.MultiWidget): def __init__(self, attrs=None): widgets = (forms.DateInput(format='%d/%m/%Y', - attrs={'class': 'dateinput', + attrs={'class': 'dateinput form-control', 'placeholder': 'Inicial'}), forms.DateInput(format='%d/%m/%Y', - attrs={'class': 'dateinput', + attrs={'class': 'dateinput form-control', 'placeholder': 'Final'})) super(RangeWidgetOverride, self).__init__(widgets, attrs) def decompress(self, value): if value: return [value.start, value.stop] - return [None, None] + return [] + + def render(self, name, value, attrs=None, renderer=None): + rendered_widgets = [] + for i, x in enumerate(self.widgets): + rendered_widgets.append( + x.render( + '%s_%d' % (name, i), value[i] if value else '' + ) + ) - def format_output(self, rendered_widgets): html = '
%s
%s
'\ % tuple(rendered_widgets) return '
%s
' % html diff --git a/setup.py b/setup.py index e44ded347..018ff1002 100644 --- a/setup.py +++ b/setup.py @@ -17,8 +17,8 @@ install_requires = [ 'dj-database-url==0.5.0', 'django-bower==5.2.0', 'django-braces==1.9.0', + 'django-crispy-forms==1.7.2', - 'django-crispy-forms==1.6.1', 'django-extensions==1.9.8', 'django-extra-views==0.11.0', 'django-floppyforms==1.6.2', @@ -46,7 +46,7 @@ install_requires = [ # 'git+git://github.com/interlegis/trml2pdf.git', # 'git+git://github.com/jasperlittle/django-rest-framework-docs' # 'git+git://github.com/rubgombar1/django-admin-bootstrapped.git'' - + #'django-compressor==2.2', ] setup( From ca684e006734a94e10af7da367cba0c0db5747f8 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Sun, 6 Jan 2019 17:08:34 -0200 Subject: [PATCH 08/35] descomenta libs do requirements --- requirements/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 7b6dc25c1..4b869decc 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -32,8 +32,8 @@ whoosh==2.7.4 django-speedinfo==1.3.5 django-reversion-compare==0.8.4 -#git+git://github.com/interlegis/trml2pdf.git -#git+git://github.com/jasperlittle/django-rest-framework-docs -#git+git://github.com/rubgombar1/django-admin-bootstrapped.git +git+git://github.com/interlegis/trml2pdf.git +git+git://github.com/jasperlittle/django-rest-framework-docs +git+git://github.com/rubgombar1/django-admin-bootstrapped.git #django-compressor==2.2 \ No newline at end of file From 82fb5613c39f991a985f0291af0d6d95c86754d3 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Mon, 7 Jan 2019 00:43:54 -0200 Subject: [PATCH 09/35] bump django-floppyforms --- requirements/requirements.txt | 2 +- sapl/sessao/forms.py | 8 +++----- sapl/settings.py | 19 ++++++++++++------- sapl/static/styles/app.scss | 3 +++ .../parlamentares/parlamentares_list.html | 6 ++++-- setup.py | 4 ++-- 6 files changed, 25 insertions(+), 17 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 4b869decc..524549446 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -7,10 +7,10 @@ dj-database-url==0.5.0 django-bower==5.2.0 django-braces==1.9.0 django-crispy-forms==1.7.2 +django-floppyforms==1.7.0 django-extensions==1.9.8 django-extra-views==0.11.0 -django-floppyforms==1.6.2 django-model-utils==3.1.1 django-sass-processor==0.5.8 easy-thumbnails==2.5 diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 35d49e277..68f6d3222 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -3,7 +3,6 @@ from datetime import datetime from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button, Fieldset, Layout from django import forms -from django.contrib import messages from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import transaction @@ -12,22 +11,21 @@ from django.forms import ModelForm from django.forms.widgets import CheckboxSelectMultiple from django.utils.translation import ugettext_lazy as _ import django_filters -from floppyforms import widgets from sapl.base.models import Autor, TipoAutor from sapl.crispy_layout_mixin import form_actions, to_row, SaplFormLayout from sapl.materia.forms import MateriaLegislativaFilterSet from sapl.materia.models import (MateriaLegislativa, StatusTramitacao, TipoMateriaLegislativa) -from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato +from sapl.parlamentares.models import Parlamentar, Mandato from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, MateriaPesquisaOrderingFilter, autor_label, autor_modal, timezone, choice_anos_com_sessaoplenaria) from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, - SessaoPlenariaPresenca, TipoJustificativa, TipoResultadoVotacao, - OcorrenciaSessao, RegistroVotacao, RetiradaPauta, TipoRetiradaPauta) + SessaoPlenariaPresenca, TipoResultadoVotacao, + OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta) MES_CHOICES = RANGE_MESES diff --git a/sapl/settings.py b/sapl/settings.py index 63f18e325..fbc19f53f 100755 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -79,20 +79,25 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.staticfiles', - # more - 'django_extensions', 'djangobower', - 'bootstrap3', # basically for django_admin_bootstrapped + 'bootstrap3', 'crispy_forms', - 'easy_thumbnails', - 'image_cropping', 'floppyforms', - 'haystack', - 'sass_processor', + 'rest_framework', 'django_filters', + + + + 'django_extensions', + 'easy_thumbnails', + 'image_cropping', + 'sass_processor', + 'reversion', 'reversion_compare', + + 'haystack', 'whoosh', 'speedinfo', diff --git a/sapl/static/styles/app.scss b/sapl/static/styles/app.scss index a0540b8e1..f05189142 100644 --- a/sapl/static/styles/app.scss +++ b/sapl/static/styles/app.scss @@ -451,6 +451,9 @@ nav { overflow-x: auto; } } +.lista-parlamentares .table td { + vertical-align: middle; +} @media (min-width: 1092px) and (max-width: 1199px) { .container { diff --git a/sapl/templates/parlamentares/parlamentares_list.html b/sapl/templates/parlamentares/parlamentares_list.html index bc3955b06..43627a9ad 100644 --- a/sapl/templates/parlamentares/parlamentares_list.html +++ b/sapl/templates/parlamentares/parlamentares_list.html @@ -21,7 +21,7 @@ {% if not rows %}

{{ NO_ENTRIES_MSG }}

{% else %} -
+
{% blocktrans with verbose_name_plural=view.verbose_name_plural %}Total de {{ verbose_name_plural }}: {{count}}{% endblocktrans %}
@@ -43,7 +43,9 @@ {% for value, href, obj in value_list %} {% if forloop.first %} {% endif %} - + {% if protocolo.timestamp %} + + {% else %} + + {% endif %} {% if protocolo.tipo_processo == 1 %} diff --git a/sapl/templates/protocoloadm/protocolar_documento.html b/sapl/templates/protocoloadm/protocolar_documento.html index 5cb1fa789..49cf4933f 100644 --- a/sapl/templates/protocoloadm/protocolar_documento.html +++ b/sapl/templates/protocoloadm/protocolar_documento.html @@ -14,3 +14,17 @@ {% block detail_content %} {% crispy form %} {% endblock detail_content %} + +{% block extra_js %} + +{% endblock %} diff --git a/sapl/templates/protocoloadm/protocolar_materia.html b/sapl/templates/protocoloadm/protocolar_materia.html index db3785bd6..2dcb8b4f0 100644 --- a/sapl/templates/protocoloadm/protocolar_materia.html +++ b/sapl/templates/protocoloadm/protocolar_materia.html @@ -26,35 +26,43 @@ } $(document).ready(function() { - function busca_ementa() { - var vincular_materia = $("#id_vincular_materia_1").prop("checked"); - var ano_materia = $("#id_ano_materia").val(); - var numero_materia = $("#id_numero_materia").val(); - var tipo_materia = $("#id_tipo_materia").val(); - var json_data = { - ano : ano_materia, - numero : numero_materia, - tipo : tipo_materia - } - if (vincular_materia === true && ano_materia !== undefined && - numero_materia !== undefined && numero_materia !== "") { - $.getJSON("/protocoloadm/recuperar-materia", json_data, function(data){ - if (data) { - if (data['error'] === undefined){ - $('#id_assunto_ementa').val(data['ementa']); - if (data['autor'] !== undefined) { - $('#id_autor').val(data['autor']); - $('#id_tipo_autor').val(data['tipo_autor']); + $("input[name=data_hora_manual]").change(function(event) { + if (this.value === 'True' && this.checked) + $("#protocolo_data_hora_manual").removeClass('hidden'); + else if (this.value === 'False' && this.checked) + $("#protocolo_data_hora_manual").addClass('hidden'); + }); + $("input[name=data_hora_manual]").trigger('change') + + function busca_ementa() { + var vincular_materia = $("#id_vincular_materia_1").prop("checked"); + var ano_materia = $("#id_ano_materia").val(); + var numero_materia = $("#id_numero_materia").val(); + var tipo_materia = $("#id_tipo_materia").val(); + var json_data = { + ano : ano_materia, + numero : numero_materia, + tipo : tipo_materia + } + if (vincular_materia === true && ano_materia !== undefined && + numero_materia !== undefined && numero_materia !== "") { + $.getJSON("/protocoloadm/recuperar-materia", json_data, function(data){ + if (data) { + if (data['error'] === undefined){ + $('#id_assunto_ementa').val(data['ementa']); + if (data['autor'] !== undefined) { + $('#id_autor').val(data['autor']); + $('#id_tipo_autor').val(data['tipo_autor']); - } - } - } - }) - } + } + } + } + }) + } }; - $("#id_ano_materia").blur(busca_ementa); - $("#id_numero_materia").blur(busca_ementa); - $("#id_tipo_materia").change(busca_ementa); + $("#id_ano_materia").blur(busca_ementa); + $("#id_numero_materia").blur(busca_ementa); + $("#id_tipo_materia").change(busca_ementa); $("#id_tipo_autor").change(function() { var tipo_selecionado = $("#id_tipo_autor").val(); diff --git a/sapl/templates/protocoloadm/protocolo_mostrar.html b/sapl/templates/protocoloadm/protocolo_mostrar.html index 2cac987f3..d22464397 100644 --- a/sapl/templates/protocoloadm/protocolo_mostrar.html +++ b/sapl/templates/protocoloadm/protocolo_mostrar.html @@ -4,6 +4,14 @@ {% load crispy_forms_tags %} {% load static %} +{% block actions %} + + {{ block.super }} + +{% endblock %} + {% block detail_content %} Protocolo: {{ protocolo.numero|stringformat:'06d' }}/{{ protocolo.ano }} - Etiqueta Individual
@@ -12,7 +20,7 @@ {% if protocolo.timestamp %} Data Protocolo: {{ protocolo.timestamp|localtime|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ protocolo.timestamp|localtime|date:"G:i:s" }}
{% else %} - Data Protocolo: {{ protocolo.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ protocolo.hora|date:"G:i:s" }}
+ Data Protocolo: {{ protocolo.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ protocolo.hora|date:"G:i:s" }} - {% if not protocolo.timestamp %} Informado Manualmente por: {{protocolo.user_data_hora_manual}}{% endif %}
{% endif %} {% if protocolo.tipo_processo == 0 %} diff --git a/sapl/utils.py b/sapl/utils.py index 706d5cb65..eb26cadb1 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -18,6 +18,7 @@ from django.core.exceptions import ValidationError from django.core.mail import get_connection from django.db import models from django.db.models import Q +from django.forms.widgets import SplitDateTimeWidget from django.utils import six, timezone from django.utils.translation import ugettext_lazy as _ import django_filters @@ -234,6 +235,23 @@ class RangeWidgetOverride(forms.MultiWidget): return '
%s
' % html +class CustomSplitDateTimeWidget(SplitDateTimeWidget): + def render(self, name, value, attrs=None, renderer=None): + rendered_widgets = [] + for i, x in enumerate(self.widgets): + x.attrs['class'] += ' form-control' + rendered_widgets.append( + x.render( + '%s_%d' % (name, i), self.decompress( + value)[i] if value else '' + ) + ) + + html = '
%s
%s
'\ + % tuple(rendered_widgets) + return '
%s
' % html + + def register_all_models_in_admin(module_name, exclude_list=[]): appname = module_name.split('.') appname = appname[1] if appname[0] == 'sapl' else appname[0] From 5bbfbc4b74819351d8474a9d4f5fd42234b7f0eb Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Thu, 10 Jan 2019 20:51:51 -0200 Subject: [PATCH 24/35] =?UTF-8?q?add=20informa=C3=A7=C3=A3o=20na=20lista?= =?UTF-8?q?=20de=20protocolos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/templates/protocoloadm/protocolo_filter.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/templates/protocoloadm/protocolo_filter.html b/sapl/templates/protocoloadm/protocolo_filter.html index 316003075..d3d1968d8 100644 --- a/sapl/templates/protocoloadm/protocolo_filter.html +++ b/sapl/templates/protocoloadm/protocolo_filter.html @@ -47,7 +47,7 @@ {% if p.timestamp%} Data Protocolo: {{ p.timestamp|localtime|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.timestamp|localtime|date:"G:i:s" }}
{% else %} - Data Protocolo: {{ p.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.hora|date:"G:i:s" }}
+ Data Protocolo: {{ p.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.hora|date:"G:i:s" }} - {% if not p.timestamp %} Informado Manualmente por: {{p.user_data_hora_manual}}{% endif %}
{% endif %} {% if p.tipo_processo == 0 %} Interessado: {{ p.interessado|default_if_none:"Não informado" }}
From 091f566688363e3c8693c8d315e1b4ed898dfe38 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Fri, 11 Jan 2019 12:07:40 -0200 Subject: [PATCH 25/35] HOT-FIX: insere EMAIL_SEND_USER em docs e envs. --- config/env-sample | 1 + config/env_dockerfile | 1 + docker-compose.yml | 1 + docs/instalacao31.rst | 1 + sapl/.env_test | 1 + sapl/env-backup | 1 + 6 files changed, 6 insertions(+) diff --git a/config/env-sample b/config/env-sample index bde081a92..aeb8c38c4 100644 --- a/config/env-sample +++ b/config/env-sample @@ -5,4 +5,5 @@ EMAIL_USE_TLS = True EMAIL_PORT = 587 EMAIL_HOST = '' EMAIL_HOST_USER = '' +EMAIL_SEND_USER = '' EMAIL_HOST_PASSWORD = '' diff --git a/config/env_dockerfile b/config/env_dockerfile index c83fc88f1..134beb274 100644 --- a/config/env_dockerfile +++ b/config/env_dockerfile @@ -5,4 +5,5 @@ EMAIL_USE_TLS = True EMAIL_PORT = 587 EMAIL_HOST = '' EMAIL_HOST_USER = '' +EMAIL_SEND_USER = '' EMAIL_HOST_PASSWORD = '' diff --git a/docker-compose.yml b/docker-compose.yml index c796253d4..51af52a6b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,6 +21,7 @@ sapl: EMAIL_USE_TLS: 'False' EMAIL_HOST: smtp.dominio.net EMAIL_HOST_USER: usuariosmtp + EMAIL_SEND_USER: usuariosmtp EMAIL_HOST_PASSWORD: senhasmtp TZ: America/Sao_Paulo volumes: diff --git a/docs/instalacao31.rst b/docs/instalacao31.rst index e904f8d6c..6e9146ee4 100644 --- a/docs/instalacao31.rst +++ b/docs/instalacao31.rst @@ -147,6 +147,7 @@ Criação da `SECRET_KEY Date: Wed, 16 Jan 2019 10:57:00 -0200 Subject: [PATCH 26/35] HOT-FIX: corrige form e view no cadastro de Frentes --- sapl/parlamentares/views.py | 11 ++++++++++- sapl/templates/parlamentares/frente_form.html | 19 +++++++++---------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index c47d36566..7b09c4067 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -301,9 +301,18 @@ class FrenteCrud(Crud): def form_valid(self, form): return super(Crud.CreateView, self).form_valid(form) + class DetailView(Crud.DetailView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + class UpdateView(Crud.UpdateView): form_class = FrenteForm - + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context class MandatoCrud(MasterDetailCrud): diff --git a/sapl/templates/parlamentares/frente_form.html b/sapl/templates/parlamentares/frente_form.html index bbab780ae..1d71f6b76 100644 --- a/sapl/templates/parlamentares/frente_form.html +++ b/sapl/templates/parlamentares/frente_form.html @@ -57,16 +57,15 @@ function selecionar_parlamentares_frente() { // Seleciona automaticamente todos os parlamentares // que já estão presentes naquela frente - var update_view = {{ update_view }} - if (update_view == 1) { - var frente_id = {{ object.id }} - $.get("/sistema/frente/parlamentares-frente-selected", - {frente_id: frente_id}, - function (data) { - id_list = data['id_list']; - $("div.controls select").val(id_list); - }); - } + {% if object.id %} + var frente_id = {{ object.id }} + $.get("/sistema/frente/parlamentares-frente-selected", + {frente_id: frente_id}, + function (data) { + id_list = data['id_list']; + $("div.controls select").val(id_list); + }); + {% endif %} } function atualiza_parlamentares() { From a07e9ca39e156a3b0dd31dd0076feaf61f06fbdc Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Wed, 16 Jan 2019 11:11:34 -0200 Subject: [PATCH 27/35] HOT-FIX: corrige html em frente_form.html --- sapl/static/js/app.js | 2 +- sapl/templates/parlamentares/frente_form.html | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sapl/static/js/app.js b/sapl/static/js/app.js index d3616a8b5..c30f357bd 100644 --- a/sapl/static/js/app.js +++ b/sapl/static/js/app.js @@ -190,7 +190,7 @@ function OptionalCustomFrontEnd() { if (_label.length === 0) { _label = $('label[for='+this.id+']'); if (_label.length === 0) { - _label = $('').insertBefore(this) + _label = $('