From 95b72d8151d4aad09a0bb19d5aa57fd25673b87c Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 27 Aug 2018 15:44:28 -0300 Subject: [PATCH 1/8] Release: 3.1.111 --- docker-compose.yml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 540062354..625fbbaa2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ sapldb: ports: - "5432:5432" sapl: - image: interlegis/sapl:3.1.110 + image: interlegis/sapl:3.1.111 restart: always environment: ADMIN_PASSWORD: interlegis diff --git a/setup.py b/setup.py index 98b9bce00..727c9d896 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,7 @@ install_requires = [ ] setup( name='interlegis-sapl', - version='3.1.110', + version='3.1.111', packages=find_packages(), include_package_data=True, license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', From d4c65c8c6db1939ba028a972f81751a53eb9d620 Mon Sep 17 00:00:00 2001 From: Mariana Mendes Date: Tue, 28 Aug 2018 13:19:20 -0300 Subject: [PATCH 2/8] fix #2172 (#2175) --- sapl/templates/materia/materialegislativa_filter.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/templates/materia/materialegislativa_filter.html b/sapl/templates/materia/materialegislativa_filter.html index b10c20346..d3184fda2 100644 --- a/sapl/templates/materia/materialegislativa_filter.html +++ b/sapl/templates/materia/materialegislativa_filter.html @@ -57,7 +57,7 @@
{% endif %} {% if m.numero_protocolo %} - Protocolo: {{m.numero_protocolo}}/{{m.ano}}    Data Entrada: {{m.data_entrada_protocolo}}
+ Protocolo: {{m.numero_protocolo}}/{{m.ano}}    Data Entrada: {{m.data_entrada_protocolo|default_if_none:"" }}
{% endif %} {% if m.autoria_set.all %} From d71b3b5016d76dd584252da847b04793cb5d8280 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 28 Aug 2018 13:20:26 -0300 Subject: [PATCH 3/8] =?UTF-8?q?HOT-FIX:=20ajusta=20recupera=C3=A7=C3=A3o?= =?UTF-8?q?=20de=20data=20de=20protocolo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/models.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sapl/materia/models.py b/sapl/materia/models.py index 82aea25dd..2cb6b679b 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -262,9 +262,13 @@ class MateriaLegislativa(models.Model): from sapl.protocoloadm.models import Protocolo if self.ano and self.numero_protocolo: try: - return Protocolo.objects.get( - ano=self.ano, - numero=self.numero_protocolo).data + protocolo = Protocolo.objects.get( + ano=self.ano, + numero=self.numero_protocolo) + if protocolo.timestamp: + return protocolo.timestamp.date() + else: + return protocolo.data except ObjectDoesNotExist: pass From fa36d1095bd43bd04088a9923b28bf56c05b6c66 Mon Sep 17 00:00:00 2001 From: Mariana Mendes Date: Tue, 28 Aug 2018 13:26:52 -0300 Subject: [PATCH 4/8] fix #2173 (#2174) --- sapl/norma/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sapl/norma/models.py b/sapl/norma/models.py index c011b174e..5e34214a1 100644 --- a/sapl/norma/models.py +++ b/sapl/norma/models.py @@ -147,7 +147,8 @@ class NormaJuridica(models.Model): return anexos def __str__(self): - return _('nº %(numero)s de %(data)s') % { + return _('%(tipo)s nº %(numero)s de %(data)s') % { + 'tipo': self.tipo, 'numero': self.numero, 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")} From 2fbd099810df884cf4d3be2d283cb23f68d76010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Sconetto?= Date: Tue, 28 Aug 2018 14:17:05 -0300 Subject: [PATCH 5/8] Adiciona documentos do Git Community (#2170) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adiciona os templates de Issue e Pull Request Adiciona o Código de Conduta Adiciona o documento de Contribuição --- .github/ISSUE_TEMPLATE.md | 36 ++++++++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 37 +++++++++++++++++++++++++++++ docs/CODE_OF_CONDUCT.md | 40 ++++++++++++++++++++++++++++++++ docs/CONTRIBUTING.md | 24 +++++++++++++++++++ 4 files changed, 137 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 docs/CODE_OF_CONDUCT.md create mode 100644 docs/CONTRIBUTING.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..8d64c275c --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,36 @@ + + +## Comportamento Esperado + + + +## Comportamento Atual + + + +## Possível Solução + + + +## Passos para Reproduzir (para bugs) + + +1. +2. +3. +4. + +## Contexto + + + +## Imagens do Ocorrido + + +* Versão usada (_Release_): +* Nome e versão do navegador: +* Nome e versão do Sistema Operacional (desktop ou mobile): +* Link para o seu projeto (Caso de fork deste projeto): \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..d30dcf3e1 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,37 @@ + + +## Descrição + + +## _Issue_ Relacionada + + + + + +## Motivação e Contexto + + +## Como Isso Foi Testado? + + + + +## Capturas de Tela (se apropriado): + + +## Tipos de Mudanças + +- [ ] _Bug fix_ (alteração que corrige uma _issue_ e não altera funcionalidades já existentes) +- [ ] Nova _feature_ (alteração que adiciona uma funcionalidade e não altera funcionalidades já existentes) +- [ ] Alteração disruptiva (_Breaking change_) (Correção ou funcionalidade que causa alteração nas funcionalidades existentes) + +## Checklist: + + +- [ ] Eu li o documento de Contribuição (**CONTRIBUTING**). +- [ ] Meu código segue o estilo de código desse projeto. +- [ ] Minha alteração requer uma alteração na documentação. +- [ ] Eu atualizei a documentação de acordo. +- [ ] Eu adicionei testes para cobrir minhas mudanças. +- [ ] Todos os testes novos e existentes passaram. \ No newline at end of file diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..d78064f5f --- /dev/null +++ b/docs/CODE_OF_CONDUCT.md @@ -0,0 +1,40 @@ +# Código de Conduta do Convênio de Contribuição + +## Nosso Compromisso +No interesse de promover um ambiente aberto e acolhedor, nós, como colaboradores e mantenedores, prometemos fazer parte de nosso projeto e de nossa comunidade uma experiência livre de assédio para todos, independentemente da idade, tamanho corporal, deficiência, etnia, identidade e expressão de gênero, nível de experiência, nacionalidade, aparência pessoal, raça, religião ou identidade e orientação sexual. + +## Nossos Padrões +Exemplos de comportamentos que contribuem para criar um ambiente positivo incluem: + +- Uso linguagem acolhedora e inclusiva. +- Ser respeitoso com diferentes pontos de vista e experiências. +- Aceitar críticas construtivas. +- Concentrar no que é melhor para a comunidade. +- Mostrar empatia para com outros membros da comunidade. + +Exemplos de comportamentos inaceitáveis dos contribuidores incluem: + +- O uso de linguagem ou imagens sexualizadas e avanços ou assédios sexuais indesejáveis. +- Comentários depreciativos, insultos/derrogatórios e ataques pessoais ou políticos. +- Assédio público ou em privado. +- Publicar a informação privada dos outros, como um endereço físico ou eletrônico, sem permissão explícita. +- Outra conduta que razoavelmente pode ser considerada inapropriada em um ambiente profissional. + +## Nossas Responsabilidades +Os responsáveis ​​pelo projeto são responsáveis ​​por esclarecer os padrões de comportamento aceitável e devem tomar medidas corretivas apropriadas e justas em resposta a qualquer instância de comportamento inaceitável. + +Os mantenedores do projeto têm o direito e a responsabilidade de remover, editar ou rejeitar comentários, compromissos, códigos, edições de wiki, problemas e outras contribuições que não estejam alinhados com este Código de Conduta ou proibir temporariamente ou permanentemente qualquer contribuinte para outros comportamentos que eles consideram inapropriado, ameaçador, ofensivo ou prejudicial. + +## Escopo +Este Código de Conduta aplica-se tanto nos espaços do projeto quanto nos espaços públicos quando um indivíduo representa o projeto ou sua comunidade. Exemplos de representar um projeto ou comunidade incluem o uso de um endereço de e-mail oficial do projeto, postagem através de uma conta oficial em mídias sociais, ou atuando como representante designado em um evento online ou offline. A representação de um projeto pode ser melhor definida e esclarecida pelos responsáveis ​​pelo projeto. + +## Execução +Instâncias de comportamento abusivo, de assédio ou de outra forma inaceitável podem ser comunicadas ao contactar a equipe do projeto através do COLAB do Interlegis para o projeto do SAPL, todas as informações podem ser acessadas através [deste link](https://colab.interlegis.leg.br/wiki/ProjetoSapl). +A equipe do projeto irá rever e investigar todas as queixas, e responderá da forma que julgar apropriada às circunstâncias. +A equipe do projeto buscará manter a confidencialidade em relação ao repórter de um incidente. Mais detalhes sobre políticas de execução específicas podem ser publicados separadamente. + +Os mantenedores do projeto que não seguem ou aplicam o Código de Conduta de boa fé podem enfrentar repercussões temporárias ou permanentes, conforme determinado por outros membros da liderança do projeto. + + +## Atribuição +Este Código de Conduta é adaptado da Convenção do Contribuinte, versão 1.4, disponível em http://contributor-covenant.org/version/1/4. \ No newline at end of file diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 000000000..89b8a8969 --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,24 @@ +# Contribuindo com SAPL + +Caso queira contribuir com o projeto, talvez seja uma boa ideia começar pelo [README](https://github.com/interlegis/sapl) para conhecer melhor sobre nós. +Outro documento importante e que deve ser lido é o [Código de Conduta](https://github.com/interlegis/sapl/blob/3.1.x/docs/CODE_OF_CONDUCT.md). + +Obrigado por contribuir! :tada::+1: Sua ajuda será recebida com muita gratidão! + + +# Como eu posso contribuir? + +## Reportando um Bug + +* Esse projeto segue um padrão de [_Issues_](https://github.com/interlegis/sapl/blob/3.1.x/.github/ISSUE_TEMPLATE.md). Logo, caso encontre um bug, verifique se ele não se encontra em uma das nossas _Issues_. Os bugs devem ser marcados com _tag (label)_ __bug__. + +* Se o bug encontrado não consta nas _Issues_, basta abrir uma [Nova _Issue_](https://github.com/interlegis/sapl/issues/new). + + +## Adicionando e/ou modificando alguma funcionalidade + +* Primeiro verifique que não existe nenhuma [_Issue_](https://github.com/interlegis/sapl/issues) a respeito dessa modificação e/ou adição. + +* Caso não exista, crie uma [Nova _Issue_](https://github.com/interlegis/sapl/issues/new). Dê um título significativo a ela, coloque uma descrição e pelo menos uma _label_. + +* As mudanças devem ser submetidas através de [_Pull Requests_](https://github.com/interlegis/sapl/compare). Você pode encontrar mais sobre isso no [_Pull Requests Template_](https://github.com/interlegis/sapl/blob/3.1.x/.github/PULL_REQUEST_TEMPLATE.md). From cdbcefcdbeb8ecb796448479891606f39573827b Mon Sep 17 00:00:00 2001 From: cristian-longhi Date: Tue, 28 Aug 2018 19:52:58 +0000 Subject: [PATCH 6/8] =?UTF-8?q?Corre=C3=A7=C3=A3o=20do=20Relat=C3=B3rio=20?= =?UTF-8?q?de=20Mat=C3=A9rias=20em=20Tramita=C3=A7=C3=A3o=20(#2176)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Correção do Relatório de Matérias em Tramitação * Correção do Relatório de Matérias em Tramitação * Correção do Relatório de Matérias em Tramitação --- sapl/base/forms.py | 15 ++++++++++++--- sapl/base/views.py | 19 ++++++++++++++++++- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/sapl/base/forms.py b/sapl/base/forms.py index b71d161da..227037ffd 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -17,7 +17,7 @@ from django.utils.translation import string_concat from sapl.base.models import Autor, TipoAutor from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column, to_row) -from sapl.materia.models import MateriaLegislativa +from sapl.materia.models import (MateriaLegislativa, UnidadeTramitacao, StatusTramitacao) from sapl.parlamentares.models import SessaoLegislativa from sapl.sessao.models import SessaoPlenaria from sapl.settings import MAX_IMAGE_UPLOAD_SIZE @@ -671,14 +671,23 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): label='Ano da Matéria', choices=RANGE_ANOS) + tramitacao__unidade_tramitacao_destino = django_filters.ModelChoiceFilter( + queryset=UnidadeTramitacao.objects.all(), + label=_('Unidade Atual')) + + tramitacao__status = django_filters.ModelChoiceFilter( + queryset=StatusTramitacao.objects.all(), + label=_('Status Atual')) + @property def qs(self): parent = super(RelatorioMateriasTramitacaoilterSet, self).qs return parent.distinct().order_by('-ano', 'tipo', '-numero') + class Meta: model = MateriaLegislativa - fields = ['ano', 'tipo', 'tramitacao__unidade_tramitacao_local', + fields = ['ano', 'tipo', 'tramitacao__unidade_tramitacao_destino', 'tramitacao__status'] def __init__(self, *args, **kwargs): @@ -689,7 +698,7 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): row1 = to_row([('ano', 12)]) row2 = to_row([('tipo', 12)]) - row3 = to_row([('tramitacao__unidade_tramitacao_local', 12)]) + row3 = to_row([('tramitacao__unidade_tramitacao_destino', 12)]) row4 = to_row([('tramitacao__status', 12)]) self.form.helper = FormHelper() diff --git a/sapl/base/views.py b/sapl/base/views.py index 870fbbaa5..65330fb78 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -44,6 +44,17 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm, from .models import AppConfig, CasaLegislativa +def filtra_url_materias_em_tramitacao(qr, qs, campo_url, local_ou_status): + id_materias = [] + filtro_url = qr[campo_url] + if local_ou_status == 'local': + id_materias = [item.id for item in qs if item.tramitacao_set.order_by('-id').first().unidade_tramitacao_destino_id == int(filtro_url)] + elif local_ou_status == 'status': + id_materias = [item.id for item in qs if item.tramitacao_set.order_by('-id').first().status_id == int(filtro_url)] + + return qs.filter(em_tramitacao=True, id__in=id_materias) + + def get_casalegislativa(): return CasaLegislativa.objects.first() @@ -395,8 +406,15 @@ class RelatorioMateriasTramitacaoView(FilterView): context['title'] = _('Matérias em Tramitação') + qr = self.request.GET.copy() qs = context['object_list'] qs = qs.filter(em_tramitacao=True) + + if qr.get('tramitacao__unidade_tramitacao_destino'): + qs = filtra_url_materias_em_tramitacao(qr, qs, 'tramitacao__unidade_tramitacao_destino', 'local') + if qr.get('tramitacao__status'): + qs = filtra_url_materias_em_tramitacao(qr, qs, 'tramitacao__status', 'status') + context['object_list'] = qs qtdes = {} @@ -407,7 +425,6 @@ class RelatorioMateriasTramitacaoView(FilterView): qtdes[tipo] = qtde context['qtdes'] = qtdes - qr = self.request.GET.copy() context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['show_results'] = show_results_filter_set(qr) From f769e6b108182fe41ab5b212b37820269558323d Mon Sep 17 00:00:00 2001 From: Talitha Pumar Date: Tue, 28 Aug 2018 18:42:34 -0300 Subject: [PATCH 7/8] Fix #2167 (#2178) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add campo Esfera Federação na Confiração da Aplicação e trazer esfera ja selecionada ao add norma juridica * ao adcionar norma juridica o campo complementar autocompletado como Não * fix migrations * Delete 0021_appconfig_esfera_federacao.py * Update 0022_auto_20180828_1439.py * update * Delete 0021_auto_20180828_1439.py * Create 0021_appconfig_esfera_federacao.py --- sapl/base/forms.py | 1 + .../0021_appconfig_esfera_federacao.py | 20 +++++++++++++++++++ sapl/base/models.py | 14 ++++++++++++- sapl/norma/views.py | 12 ++++++++++- sapl/templates/base/layouts.yaml | 3 +++ 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 sapl/base/migrations/0021_appconfig_esfera_federacao.py diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 227037ffd..12cc43564 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -849,6 +849,7 @@ class ConfiguracoesAppForm(ModelForm): model = AppConfig fields = ['documentos_administrativos', 'sequencia_numeracao', + 'esfera_federacao', # 'painel_aberto', # TODO: a ser implementado na versão 3.2 'texto_articulado_proposicao', 'texto_articulado_materia', diff --git a/sapl/base/migrations/0021_appconfig_esfera_federacao.py b/sapl/base/migrations/0021_appconfig_esfera_federacao.py new file mode 100644 index 000000000..a13e312cf --- /dev/null +++ b/sapl/base/migrations/0021_appconfig_esfera_federacao.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2018-08-28 18:16 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0020_auto_20180821_1421'), + ] + + operations = [ + migrations.AddField( + model_name='appconfig', + name='esfera_federacao', + field=models.CharField(blank=True, choices=[('M', 'Municipal'), ('E', 'Estadual'), ('F', 'Federal')], default='', max_length=1, verbose_name='Esfera Federação'), + ), + ] diff --git a/sapl/base/models.py b/sapl/base/models.py index 6e3d2ee67..afd4160ed 100644 --- a/sapl/base/models.py +++ b/sapl/base/models.py @@ -5,7 +5,7 @@ from django.db import models from django.db.models.signals import post_migrate from django.db.utils import DEFAULT_DB_ALIAS from django.utils.translation import ugettext_lazy as _ - +#from model_utils import Choices from sapl.utils import (LISTA_DE_UFS, YES_NO_CHOICES, get_settings_auth_user_model, models_with_gr_for_model) @@ -16,6 +16,11 @@ SEQUENCIA_NUMERACAO = (('A', _('Sequencial por ano')), ('L', _('Sequencial por legislatura')), ('U', _('Sequencial único'))) +ESFERA_FEDERACAO_CHOICES = (('M', _('Municipal')), + ('E', _('Estadual')), + ('F', _('Federal')), +) + @reversion.register() class CasaLegislativa(models.Model): @@ -78,6 +83,13 @@ class AppConfig(models.Model): verbose_name=_('Sequência de numeração'), choices=SEQUENCIA_NUMERACAO, default='A') + esfera_federacao = models.CharField( + max_length=1, + blank=True, + default = "", + verbose_name=_('Esfera Federação'), + choices=ESFERA_FEDERACAO_CHOICES) + # TODO: a ser implementado na versão 3.2 # painel_aberto = models.BooleanField( # verbose_name=_('Painel aberto para usuário anônimo'), diff --git a/sapl/norma/views.py b/sapl/norma/views.py index 80c30a63d..a05d61289 100644 --- a/sapl/norma/views.py +++ b/sapl/norma/views.py @@ -13,7 +13,7 @@ from django.views.generic.base import RedirectView from django.views.generic.edit import FormView from django_filters.views import FilterView import weasyprint - +import sapl from sapl.base.models import AppConfig from sapl.compilacao.views import IntegracaoTaView from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, @@ -196,6 +196,16 @@ class NormaCrud(Crud): def cancel_url(self): return self.search_url + def get_initial(self): + try: + esfera = sapl.base.models.AppConfig.objects.last( + ).esfera_federacao + self.initial['esfera_federacao'] = esfera + except: + pass + self.initial['complemento'] = False + return self.initial + layout_key = 'NormaJuridicaCreate' class ListView(Crud.ListView, RedirectView): diff --git a/sapl/templates/base/layouts.yaml b/sapl/templates/base/layouts.yaml index c07c15036..3f7941d64 100644 --- a/sapl/templates/base/layouts.yaml +++ b/sapl/templates/base/layouts.yaml @@ -14,6 +14,9 @@ AppConfig: {% trans 'Configurações da Aplicação' %}: - documentos_administrativos + {% trans 'Norma Jurídica' %}: + - esfera_federacao + {% trans 'Proposições e Protocolo' %}: - sequencia_numeracao proposicao_incorporacao_obrigatoria receber_recibo_proposicao From d3a75892600cf8ce686ace031d43aa69dcad855f Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 29 Aug 2018 13:49:46 -0300 Subject: [PATCH 8/8] Release: 3.1.112 --- docker-compose.yml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 625fbbaa2..a409b525b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ sapldb: ports: - "5432:5432" sapl: - image: interlegis/sapl:3.1.111 + image: interlegis/sapl:3.1.112 restart: always environment: ADMIN_PASSWORD: interlegis diff --git a/setup.py b/setup.py index 727c9d896..392f152d5 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,7 @@ install_requires = [ ] setup( name='interlegis-sapl', - version='3.1.111', + version='3.1.112', packages=find_packages(), include_package_data=True, license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007',