From 0585bd7130efaa95b5718c3bebdadd3da8a51bea Mon Sep 17 00:00:00 2001 From: Edward Date: Thu, 28 Mar 2019 17:29:13 -0300 Subject: [PATCH 1/6] =?UTF-8?q?HOT-FIX:=20remove=20refer=C3=AAncia=20dupla?= =?UTF-8?q?=20a=20openssh-client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d970a4e4c..cc8d62e22 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.8 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 antiword \ - curl jq openssh-client vim openssh-client bash + curl jq openssh-client vim bash RUN apk update --update-cache && apk upgrade From 7e37308042141836943cd9744275855a5c1f004a Mon Sep 17 00:00:00 2001 From: Edward Date: Thu, 28 Mar 2019 17:48:37 -0300 Subject: [PATCH 2/6] =?UTF-8?q?HOT-FIX:=20Remove=20coment=C3=A1rio=20de=20?= =?UTF-8?q?Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index cc8d62e22..015357a40 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,9 +32,6 @@ RUN pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgr COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env -# Configura timezone para BRT -# RUN cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime && echo "America/Sao_Paulo" > /etc/timezone - RUN python3 manage.py collectstatic --noinput --clear # Remove .env(fake) e sapl.db da imagem From c9d2295033cc70ad20f49185307ce3076f8c36ed Mon Sep 17 00:00:00 2001 From: Cesar Augusto de Carvalho Date: Fri, 29 Mar 2019 15:33:01 -0300 Subject: [PATCH 3/6] =?UTF-8?q?Fix=20Documento=20Acess=C3=B3rio=20em=20Lot?= =?UTF-8?q?e=20para=20Arquivos=20Grandes=20(#2664)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0044_auto_20190327_1409.py | 22 +++++++++++++ sapl/materia/models.py | 1 + sapl/materia/views.py | 32 ++++++++++++++++--- 3 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 sapl/materia/migrations/0044_auto_20190327_1409.py diff --git a/sapl/materia/migrations/0044_auto_20190327_1409.py b/sapl/materia/migrations/0044_auto_20190327_1409.py new file mode 100644 index 000000000..5322d7833 --- /dev/null +++ b/sapl/materia/migrations/0044_auto_20190327_1409.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-03-27 17:09 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.materia.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0043_auto_20190320_1749'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorio', + name='arquivo', + field=models.FileField(blank=True, max_length=255, null=True, upload_to=sapl.materia.models.anexo_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + ] diff --git a/sapl/materia/models.py b/sapl/materia/models.py index af4cb1231..c7aaaed15 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -497,6 +497,7 @@ class DocumentoAcessorio(models.Model): arquivo = models.FileField( blank=True, null=True, + max_length=255, upload_to=anexo_upload_path, verbose_name=_('Texto Integral'), validators=[restringe_tipos_de_arquivo_txt]) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 696b1235a..846f367fa 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1,5 +1,10 @@ -from datetime import datetime import logging +import os +import shutil +import tempfile +import weasyprint + +from datetime import datetime from random import choice from string import ascii_letters, digits @@ -45,6 +50,7 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm, from sapl.norma.models import LegislacaoCitada from sapl.parlamentares.models import Legislatura from sapl.protocoloadm.models import Protocolo +from sapl.settings import MEDIA_ROOT from sapl.utils import (YES_NO_CHOICES, autor_label, autor_modal, SEPARADOR_HASH_PROPOSICAO, gerar_hash_arquivo, get_base_url, get_mime_type_from_file_extension, montar_row_autor, @@ -2035,17 +2041,35 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): messages.add_message(request, messages.ERROR, msg) return self.get(request, self.kwargs) + tmp_name = os.path.join(tempfile.gettempdir(), request.FILES['arquivo'].name) + with open(tmp_name, 'wb') as destination: + for chunk in request.FILES['arquivo'].chunks(): + destination.write(chunk) + + doc_data = tz.localize(datetime.strptime( + request.POST['data'], "%d/%m/%Y")) for materia_id in marcadas: doc = DocumentoAcessorio() doc.materia_id = materia_id doc.tipo = tipo - doc.arquivo = request.FILES['arquivo'] doc.nome = request.POST['nome'] - doc.data = tz.localize(datetime.strptime( - request.POST['data'], "%d/%m/%Y")) + doc.data = doc_data doc.autor = request.POST['autor'] doc.ementa = request.POST['ementa'] doc.save() + diretorio = os.path.join(MEDIA_ROOT, + 'sapl/public/documentoacessorio', + str(doc_data.year), + str(doc.id)) + if not os.path.exists(diretorio): + os.makedirs(diretorio) + file_path = os.path.join(diretorio, + request.FILES['arquivo'].name) + shutil.copy2(tmp_name, file_path) + doc.arquivo.name = file_path.split(MEDIA_ROOT)[1] # Retira MEDIA_ROOT do nome + doc.save() + os.remove(tmp_name) + msg = _('Documento(s) criado(s).') messages.add_message(request, messages.SUCCESS, msg) return self.get(request, self.kwargs) From fb6832e7fb38bab0a9938fd8ef4ff9caaa7cfdc0 Mon Sep 17 00:00:00 2001 From: Cesar Augusto de Carvalho Date: Mon, 1 Apr 2019 14:29:06 -0300 Subject: [PATCH 4/6] =?UTF-8?q?Fix=20#2665=20-=20Tramitar=20mat=C3=A9rias?= =?UTF-8?q?=20anexadas=20junto=20com=20as=20mat=C3=A9rias=20anexadoras=20(?= =?UTF-8?q?#2674)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/views.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 846f367fa..a2366c8d9 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -3,6 +3,7 @@ import os import shutil import tempfile import weasyprint +import itertools from datetime import datetime from random import choice @@ -2249,8 +2250,18 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): # issue https://github.com/interlegis/sapl/issues/1123 # TODO: usar Form urgente = request.POST['urgente'] == 'True' - flag_error = False - for materia_id in marcadas: + flag_error = False + + materias_principais = [m for m in MateriaLegislativa.objects.filter(id__in=marcadas)] + materias_anexadas = [m.anexadas.all() for m in MateriaLegislativa.objects.filter(id__in=marcadas) if m.anexadas.all()] + materias_anexadas = list(itertools.chain.from_iterable(materias_anexadas)) + tramitacao_local = int(request.POST['unidade_tramitacao_local']) + materias_anexadas = list(filter(lambda ma : not ma.tramitacao_set.all() or \ + ma.tramitacao_set.last().unidade_tramitacao_destino.id == tramitacao_local, + materias_anexadas)) + materias = set(materias_principais + materias_anexadas) + + for materia in materias: try: data_tramitacao = tz.localize(datetime.strptime( request.POST['data_tramitacao'], "%d/%m/%Y")) @@ -2260,7 +2271,7 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): return self.get(request, self.kwargs) t = Tramitacao( - materia_id=materia_id, + materia=materia, data_tramitacao=data_tramitacao, data_encaminhamento=data_encaminhamento, data_fim_prazo=data_fim_prazo, @@ -2294,7 +2305,7 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): status = StatusTramitacao.objects.get(id=request.POST['status']) - for materia in MateriaLegislativa.objects.filter(id__in=marcadas): + for materia in materias: if status.indicador == 'F': materia.em_tramitacao = False elif self.primeira_tramitacao: From 2bcaedda76a8a99e4febac0595d2d4e565b2da22 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 1 Apr 2019 14:48:45 -0300 Subject: [PATCH 5/6] =?UTF-8?q?Retira=20atributos=20class=20e=20espa=C3=A7?= =?UTF-8?q?os=20de=20tags=20

?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/relatorios/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index dec1d50b7..9439b1578 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -578,6 +578,8 @@ def get_sessao_plenaria(sessao, casa): # unescape HTML codes # https://github.com/interlegis/sapl/issues/1046 conteudo = re.sub('style=".*?"', '', conteudo) + conteudo = re.sub('class=".*?"', '', conteudo) + conteudo = re.sub('', '

', conteudo) conteudo = html.unescape(conteudo) # escape special character '&' From 4b35e6a4fe37ba10d6ac95ae02cc220a14c61e80 Mon Sep 17 00:00:00 2001 From: Ulysses Lara Date: Mon, 1 Apr 2019 15:09:50 -0300 Subject: [PATCH 6/6] Fix #2663 parte relacionada a turno (#2675) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #2663 parte relacionada a turno * Retira parênteses desnecessários --- sapl/sessao/views.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 4e4ad02fa..9300ab9e1 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -1378,9 +1378,15 @@ def get_materias_expediente(sessao_plenaria): ementa = m.materia.ementa titulo = m.materia numero = m.numero_ordem - tramitacao = m.materia.tramitacao_set.last() - turno = None + tramitacao = '' + tramitacoes = Tramitacao.objects.filter(materia=m.materia).order_by('-pk') + for aux_tramitacao in tramitacoes: + if aux_tramitacao.turno: + tramitacao = aux_tramitacao + break + + turno = None if tramitacao: turno = get_turno(tramitacao.turno) @@ -1486,7 +1492,14 @@ def get_materias_ordem_do_dia(sessao_plenaria): ementa_observacao = o.observacao titulo = o.materia numero = o.numero_ordem - tramitacao = o.materia.tramitacao_set.last() + + tramitacao = '' + tramitacoes = Tramitacao.objects.filter(materia=o.materia).order_by('-pk') + for aux_tramitacao in tramitacoes: + if aux_tramitacao.turno: + tramitacao = aux_tramitacao + break + turno = None if tramitacao: turno = get_turno(tramitacao.turno)