Browse Source

Merge pull request #7 from interlegis/master

09082017
pull/1374/head
Rogério Frá 7 years ago
committed by GitHub
parent
commit
5d09f545f8
  1. 8
      sapl/base/views.py
  2. 4
      sapl/legacy/scripts/fix_tables.sql
  3. 9
      sapl/materia/forms.py
  4. 19
      sapl/materia/migrations/0011_auto_20170808_1034.py
  5. 21
      sapl/materia/tests/test_materia.py
  6. 15
      sapl/protocoloadm/forms.py
  7. 66
      sapl/redireciona_urls/views.py
  8. 2
      sapl/sessao/views.py
  9. 2
      sapl/templates/sessao/pauta_sessao_detail.html

8
sapl/base/views.py

@ -21,7 +21,7 @@ from sapl.base.models import Autor, TipoAutor
from sapl.crud.base import CrudAux from sapl.crud.base import CrudAux
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.parlamentares.models import Parlamentar from sapl.parlamentares.models import Parlamentar
from sapl.sessao.models import OrdemDia, SessaoPlenaria from sapl.sessao.models import PresencaOrdemDia, SessaoPlenaria
from sapl.utils import sapl_logger from sapl.utils import sapl_logger
from .forms import (CasaLegislativaForm, ConfiguracoesAppForm, from .forms import (CasaLegislativaForm, ConfiguracoesAppForm,
@ -253,9 +253,9 @@ class RelatorioPresencaSessaoView(FilterView):
sessao_count=0, sessao_count=0,
ordemdia_count=0) ordemdia_count=0)
total_ordemdia = OrdemDia.objects.order_by( total_ordemdia = PresencaOrdemDia.objects.filter(
'sessao_plenaria').filter(**param0).distinct( **param0).distinct('sessao_plenaria__id').order_by(
'sessao_plenaria').count() 'sessao_plenaria__id').count()
self.calcular_porcentagem_presenca( self.calcular_porcentagem_presenca(
pls, pls,

4
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_tipo_materia_legislativa;
DROP PROCEDURE IF EXISTS verifica_campos_sessao_plenaria_presenca; DROP PROCEDURE IF EXISTS verifica_campos_sessao_plenaria_presenca;
DROP PROCEDURE IF EXISTS cria_lexml_registro_provedor_e_publicador; DROP PROCEDURE IF EXISTS cria_lexml_registro_provedor_e_publicador;
DROP PROCEDURE IF EXISTS cria_tipo_situacao_militar;
DROP PROCEDURE IF EXISTS muda_vinculo_norma_juridica_ind_excluido; DROP PROCEDURE IF EXISTS muda_vinculo_norma_juridica_ind_excluido;
-- Procedure para criar campo num_proposicao em proposicao -- 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 UPDATE proposicao SET dat_envio = '1800-01-01' WHERE CAST(dat_envio AS CHAR(20)) = '0000-00-00 00:00:00'; ALTER TABLE proposicao ADD COLUMN num_proposicao INT(11) NULL after txt_justif_devolucao; END IF; END; 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 UPDATE proposicao SET dat_envio = '1800-01-01' WHERE CAST(dat_envio AS CHAR(20)) = '0000-00-00 00:00:00'; ALTER TABLE proposicao ADD COLUMN num_proposicao INT(11) NULL after txt_justif_devolucao; END IF; END;
@ -14,6 +15,8 @@ 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; 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 -- 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; 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 criar tabela tipo_situacao_militar
CREATE PROCEDURE cria_tipo_situacao_militar() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='tipo_situacao_militar') THEN CREATE TABLE tipo_situacao_militar (tip_situacao_militar INT AUTO_INCREMENT NOT NULL, des_tipo_situacao VARCHAR(50), ind_excluido INT, PRIMARY KEY (tip_situacao_militar)); END IF; END;
-- Procedure para mudar valor do campo ind_excluido da tabela vinculo_norma_juridica de 0 para string vazia '' -- 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; 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 -- Executa as procedures criadas acima
@ -21,4 +24,5 @@ CALL verifica_campos_proposicao;
CALL verifica_campos_tipo_materia_legislativa; CALL verifica_campos_tipo_materia_legislativa;
CALL verifica_campos_sessao_plenaria_presenca; CALL verifica_campos_sessao_plenaria_presenca;
CALL cria_lexml_registro_provedor_e_publicador; CALL cria_lexml_registro_provedor_e_publicador;
CALL cria_tipo_situacao_militar;
CALL muda_vinculo_norma_juridica_ind_excluido; CALL muda_vinculo_norma_juridica_ind_excluido;

9
sapl/materia/forms.py

@ -697,7 +697,7 @@ class AutoriaForm(ModelForm):
empty_label=_('Selecione'),) empty_label=_('Selecione'),)
data_relativa = forms.DateField( data_relativa = forms.DateField(
widget=forms.HiddenInput()) widget=forms.HiddenInput(), required=False)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(AutoriaForm, self).__init__(*args, **kwargs) super(AutoriaForm, self).__init__(*args, **kwargs)
@ -721,12 +721,15 @@ class AutoriaForm(ModelForm):
def clean(self): def clean(self):
cd = super(AutoriaForm, self).clean() cd = super(AutoriaForm, self).clean()
if self.errors:
return self.errors
autorias = Autoria.objects.filter( autorias = Autoria.objects.filter(
materia=self.instance.materia, autor=cd['autor']) materia=self.instance.materia, autor=cd['autor'])
pk = self.instance.pk pk = self.instance.pk
if ((not pk and autorias.exists()) if ((not pk and autorias.exists()) or
or (pk and autorias.exclude(pk=pk).exists())): (pk and autorias.exclude(pk=pk).exists())):
raise ValidationError(_('Esse Autor já foi cadastrado.')) raise ValidationError(_('Esse Autor já foi cadastrado.'))
return cd return cd

19
sapl/materia/migrations/0011_auto_20170808_1034.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2017-08-08 10:34
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('materia', '0010_auto_20170808_0850'),
]
operations = [
migrations.AlterModelOptions(
name='autoria',
options={'ordering': ('-primeiro_autor', 'autor__nome'), 'verbose_name': 'Autoria', 'verbose_name_plural': 'Autorias'},
),
]

21
sapl/materia/tests/test_materia.py

@ -1,9 +1,9 @@
import pytest
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from model_mommy import mommy from model_mommy import mommy
import pytest
from sapl.base.models import Autor, TipoAutor from sapl.base.models import Autor, TipoAutor
from sapl.comissoes.models import Comissao, TipoComissao from sapl.comissoes.models import Comissao, TipoComissao
@ -133,14 +133,13 @@ def test_autoria_submit(admin_client):
nome='Autor Teste') nome='Autor Teste')
# Testa POST # Testa POST
response = admin_client.post(reverse('sapl.materia:autoria_create', response = admin_client.post(
kwargs={'pk': materia_principal.pk}), reverse('sapl.materia:autoria_create',
{'autor': autor.pk, kwargs={'pk': materia_principal.pk}),
'primeiro_autor': True, {'autor': autor.pk,
'materia_id': materia_principal.pk, 'primeiro_autor': True,
'partido': '', 'materia_id': materia_principal.pk, },
'salvar': 'salvar'}, follow=True)
follow=True)
assert response.status_code == 200 assert response.status_code == 200
# Verifica se o autor foi realmente criado # Verifica se o autor foi realmente criado
@ -323,9 +322,7 @@ def test_form_errors_autoria(admin_client):
response = admin_client.post(reverse('sapl.materia:autoria_create', response = admin_client.post(reverse('sapl.materia:autoria_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'materia_id': materia_principal.pk, {'materia_id': materia_principal.pk,
'partido': '', 'autor_id': '', },
'autor': '',
'salvar': 'salvar'},
follow=True) follow=True)
assert (response.context_data['form'].errors['autor'] == assert (response.context_data['form'].errors['autor'] ==

15
sapl/protocoloadm/forms.py

@ -12,7 +12,7 @@ from django.utils.translation import ugettext_lazy as _
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.crispy_layout_mixin import form_actions, to_row from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.materia.models import TipoMateriaLegislativa, UnidadeTramitacao from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa, UnidadeTramitacao
from sapl.utils import (RANGE_ANOS, AnoNumeroOrderingFilter, from sapl.utils import (RANGE_ANOS, AnoNumeroOrderingFilter,
RangeWidgetOverride, autor_label, autor_modal) RangeWidgetOverride, autor_label, autor_modal)
@ -233,7 +233,18 @@ class AnularProcoloAdmForm(ModelForm):
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise forms.ValidationError( raise forms.ValidationError(
_("Protocolo %s/%s não existe" % (numero, ano))) _("Protocolo %s/%s não existe" % (numero, ano)))
exists = False
if protocolo.tipo_materia:
exists = MateriaLegislativa.objects.filter(
numero_protocolo=protocolo.numero, ano=protocolo.ano).exists()
elif protocolo.tipo_documento:
exists = protocolo.documentoadministrativo_set.all(
).order_by('-ano', '-numero').exists()
if exists:
raise forms.ValidationError(
_("Protocolo %s/%s não pode ser removido pois existem"
"documentos vinculados a ele." % (numero, ano)))
class Meta: class Meta:
model = Protocolo model = Protocolo
fields = ['numero', fields = ['numero',

66
sapl/redireciona_urls/views.py

@ -50,6 +50,20 @@ relatorio_materia_por_ano_autor_tipo = (
historico_tramitacoes = (app_relatorios + ':historico_tramitacoes') historico_tramitacoes = (app_relatorios + ':historico_tramitacoes')
def has_iframe(url, request):
iframe = request.GET.get(
'iframe',
EMPTY_STRING)
if iframe:
iframe_qs= ("iframe=" + iframe)
url += ("&" if "?" in url else "?")
url += iframe_qs
return url
class RedirecionaSAPLIndex(RedirectView): class RedirecionaSAPLIndex(RedirectView):
permanent = True permanent = True
@ -59,6 +73,9 @@ class RedirecionaSAPLIndex(RedirectView):
url = reverse(url_pattern) url = reverse(url_pattern)
except NoReverseMatch: except NoReverseMatch:
raise UnknownUrlNameError(url_pattern) raise UnknownUrlNameError(url_pattern)
url = has_iframe(url, self.request)
return url return url
@ -90,6 +107,8 @@ class RedirecionaParlamentar(RedirectView):
args = '?pk=' + numero_legislatura args = '?pk=' + numero_legislatura
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -112,6 +131,9 @@ class RedirecionaComissao(RedirectView):
url = reverse(comissao_list) url = reverse(comissao_list)
except NoReverseMatch: except NoReverseMatch:
raise UnknownUrlNameError(comissao_list) raise UnknownUrlNameError(comissao_list)
url = has_iframe(url, self.request)
return url return url
@ -151,6 +173,8 @@ class RedirecionaPautaSessao(RedirectView):
args += "&tipo=&salvar=Pesquisar" args += "&tipo=&salvar=Pesquisar"
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -198,6 +222,8 @@ class RedirecionaSessaoPlenaria(RedirectView):
args += "&tipo=%s&salvar=Pesquisar" % (tipo_sessao) args += "&tipo=%s&salvar=Pesquisar" % (tipo_sessao)
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -210,6 +236,9 @@ class RedirecionaRelatoriosList(RedirectView):
url = reverse(relatorios_list) url = reverse(relatorios_list)
except NoReverseMatch: except NoReverseMatch:
raise UnknownUrlNameError(relatorios_list) raise UnknownUrlNameError(relatorios_list)
url = has_iframe(url, self.request)
return url return url
@ -253,6 +282,8 @@ class RedirecionaRelatoriosMateriasEmTramitacaoList(RedirectView):
args += "&salvar=%s" % (salvar) args += "&salvar=%s" % (salvar)
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -260,13 +291,18 @@ class RedirecionaMateriaLegislativaDetail(RedirectView):
permanent = True permanent = True
def get_redirect_url(self): def get_redirect_url(self):
url = EMPTY_STRING
pk = self.request.GET.get('cod_materia', EMPTY_STRING) pk = self.request.GET.get('cod_materia', EMPTY_STRING)
if pk: if pk:
kwargs = {'pk': pk} kwargs = {'pk': pk}
return reverse(materialegislativa_detail, kwargs=kwargs) url = reverse(materialegislativa_detail, kwargs=kwargs)
else: else:
return reverse(materialegislativa_list) url = reverse(materialegislativa_list)
url = has_iframe(url, self.request)
return url
class RedirecionaMateriaLegislativaList(RedirectView): class RedirecionaMateriaLegislativaList(RedirectView):
@ -339,6 +375,8 @@ class RedirecionaMateriaLegislativaList(RedirectView):
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -346,11 +384,14 @@ class RedirecionaMesaDiretoraView(RedirectView):
permanent = True permanent = True
def get_redirect_url(self): def get_redirect_url(self):
url = EMPTY_STRING
try: try:
url = reverse(parlamentar_mesa_diretora) url = reverse(parlamentar_mesa_diretora)
except NoReverseMatch: except NoReverseMatch:
raise UnknownUrlNameError(parlamentar_mesa_diretora) raise UnknownUrlNameError(parlamentar_mesa_diretora)
url = has_iframe(url, self.request)
return url return url
@ -358,13 +399,18 @@ class RedirecionaNormasJuridicasDetail(RedirectView):
permanent = True permanent = True
def get_redirect_url(self): def get_redirect_url(self):
url = EMPTY_STRING
pk_norma = self.request.GET.get('cod_norma', EMPTY_STRING) pk_norma = self.request.GET.get('cod_norma', EMPTY_STRING)
if pk_norma: if pk_norma:
kwargs = {'pk': pk_norma} kwargs = {'pk': pk_norma}
return reverse(norma_juridica_detail, kwargs=kwargs) url = reverse(norma_juridica_detail, kwargs=kwargs)
else: else:
return reverse(norma_juridica_pesquisa) url = reverse(norma_juridica_pesquisa)
url = has_iframe(url, self.request)
return url
class RedirecionaNormasJuridicasList(RedirectView): class RedirecionaNormasJuridicasList(RedirectView):
@ -420,6 +466,8 @@ class RedirecionaNormasJuridicasList(RedirectView):
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -475,6 +523,8 @@ class RedirecionaHistoricoTramitacoesList(RedirectView):
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -507,6 +557,8 @@ class RedirecionaAtasList(RedirectView):
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -539,6 +591,8 @@ class RedirecionaPresencaParlamentares(RedirectView):
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url
@ -553,6 +607,8 @@ class RedirecionaMateriasPorAutor(RedirectView):
except NoReverseMatch: except NoReverseMatch:
raise UnknownUrlNameError(relatorio_materia_por_autor) raise UnknownUrlNameError(relatorio_materia_por_autor)
url = has_iframe(url, self.request)
return url return url
@ -574,4 +630,6 @@ class RedirecionaMateriasPorAnoAutorTipo(RedirectView):
args += "&salvar=%s" % ('Pesquisar') args += "&salvar=%s" % ('Pesquisar')
url = "%s%s" % (url, args) url = "%s%s" % (url, args)
url = has_iframe(url, self.request)
return url return url

2
sapl/sessao/views.py

@ -2268,7 +2268,7 @@ class PautaSessaoDetailView(DetailView):
tipo = TipoExpediente.objects.get( tipo = TipoExpediente.objects.get(
id=e.tipo_id) id=e.tipo_id)
conteudo = sub( conteudo = sub(
'&nbsp;', ' ', strip_tags(e.conteudo)) '&nbsp;', ' ', strip_tags(e.conteudo.replace('<br/>', '\n')))
ex = {'tipo': tipo, 'conteudo': conteudo} ex = {'tipo': tipo, 'conteudo': conteudo}
expedientes.append(ex) expedientes.append(ex)

2
sapl/templates/sessao/pauta_sessao_detail.html

@ -25,7 +25,7 @@
<tr> <tr>
<td> <td>
<b>{{e.tipo}}: </b> <br /> <b>{{e.tipo}}: </b> <br />
<p style="text-indent: 50px;">{{e.conteudo|safe}}</p> <p style="text-indent: 50px;">{{e.conteudo|safe|linebreaks}}</p>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

Loading…
Cancel
Save