Browse Source

Merge branch '1410-correcao-erros-check'

pull/1416/head
Marcio Mazza 7 years ago
parent
commit
1909718e8c
  1. 16
      create_admin.py
  2. 3
      fix_qa.sh
  3. 4
      genkey.py
  4. 4
      sapl/api/forms.py
  5. 24
      sapl/api/serializers.py
  6. 6
      sapl/api/urls.py
  7. 8
      sapl/api/views.py
  8. 5
      sapl/base/forms.py
  9. 3
      sapl/base/models.py
  10. 2
      sapl/base/search_indexes.py
  11. 3
      sapl/base/templatetags/common_tags.py
  12. 5
      sapl/base/tests/teststub_urls.py
  13. 3
      sapl/base/urls.py
  14. 9
      sapl/base/views.py
  15. 8
      sapl/comissoes/views.py
  16. 1
      sapl/compilacao/templatetags/compilacao_filters.py
  17. 1
      sapl/compilacao/views.py
  18. 2
      sapl/crispy_layout_mixin.py
  19. 3
      sapl/crud/base.py
  20. 2
      sapl/legacy/management/commands/migracao_25_31.py
  21. 2
      sapl/legacy/management/commands/migracao_documentos.py
  22. 6
      sapl/legacy/migracao_documentos.py
  23. 34
      sapl/legacy/migration.py
  24. 14
      sapl/legacy/scripts/street_sweeper.py
  25. 1
      sapl/materia/admin.py
  26. 3
      sapl/materia/apps.py
  27. 3
      sapl/materia/email_utils.py
  28. 17
      sapl/materia/forms.py
  29. 3
      sapl/materia/models.py
  30. 4
      sapl/materia/signals.py
  31. 2
      sapl/materia/tests/test_materia.py
  32. 10
      sapl/materia/urls.py
  33. 29
      sapl/materia/views.py
  34. 3
      sapl/norma/apps.py
  35. 8
      sapl/norma/models.py
  36. 3
      sapl/norma/signals.py
  37. 4
      sapl/painel/urls.py
  38. 7
      sapl/painel/views.py
  39. 8
      sapl/parlamentares/forms.py
  40. 2
      sapl/parlamentares/models.py
  41. 3
      sapl/parlamentares/urls.py
  42. 4
      sapl/parlamentares/views.py
  43. 6
      sapl/protocoloadm/forms.py
  44. 63
      sapl/protocoloadm/views.py
  45. 6
      sapl/redireciona_urls/exceptions.py
  46. 47
      sapl/redireciona_urls/tests.py
  47. 32
      sapl/redireciona_urls/urls.py
  48. 227
      sapl/relatorios/templates/pdf_capa_processo_preparar_pysc.py
  49. 456
      sapl/relatorios/templates/pdf_detalhe_materia_gerar.py
  50. 457
      sapl/relatorios/templates/pdf_detalhe_materia_preparar_pysc.py
  51. 221
      sapl/relatorios/templates/pdf_documento_administrativo_preparar_pysc.py
  52. 241
      sapl/relatorios/templates/pdf_espelho_gerar.py
  53. 290
      sapl/relatorios/templates/pdf_espelho_preparar_pysc.py
  54. 210
      sapl/relatorios/templates/pdf_etiqueta_protocolo_preparar_pysc.py
  55. 152
      sapl/relatorios/templates/pdf_materia_gerar.py
  56. 272
      sapl/relatorios/templates/pdf_materia_preparar_pysc.py
  57. 164
      sapl/relatorios/templates/pdf_norma_gerar.py
  58. 153
      sapl/relatorios/templates/pdf_norma_preparar_pysc.py
  59. 180
      sapl/relatorios/templates/pdf_ordem_dia_preparar_pysc.py
  60. 4
      sapl/relatorios/templates/pdf_pauta_sessao_gerar.py
  61. 183
      sapl/relatorios/templates/pdf_pauta_sessao_preparar_pysc.py
  62. 189
      sapl/relatorios/templates/pdf_protocolo_gerar.py
  63. 217
      sapl/relatorios/templates/pdf_protocolo_preparar_pysc.py
  64. 20
      sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
  65. 285
      sapl/relatorios/templates/pdf_sessao_plenaria_preparar_pysc.py
  66. 35
      sapl/relatorios/views.py
  67. 14
      sapl/sessao/forms.py
  68. 13
      sapl/sessao/models.py
  69. 1
      sapl/sessao/serializers.py
  70. 112
      sapl/sessao/views.py
  71. 1
      sapl/settings.py
  72. 36
      sapl/test_urls.py
  73. 3
      sapl/urls.py
  74. 17
      sapl/utils.py
  75. 2
      scripts/set_inicio_mandato.py

16
create_admin.py

@ -1,28 +1,34 @@
import os import os
import sys import sys
import django import django
from sapl import settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sapl.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sapl.settings")
def create_superuser(): def create_superuser():
from django.contrib.auth.models import User from django.contrib.auth.models import User
username = "admin" username = "admin"
password = os.environ['ADMIN_PASSWORD'] if 'ADMIN_PASSWORD' in os.environ else None password = os.environ[
'ADMIN_PASSWORD'] if 'ADMIN_PASSWORD' in os.environ else None
email = os.environ['ADMIN_EMAIL'] if 'ADMIN_EMAIL' in os.environ else '' email = os.environ['ADMIN_EMAIL'] if 'ADMIN_EMAIL' in os.environ else ''
if User.objects.filter(username=username).exists(): if User.objects.filter(username=username).exists():
print("[SUPERUSER] User %s already exists. Exiting without change." % username) print("[SUPERUSER] User %s already exists."
" Exiting without change." % username)
sys.exit('ADMIN_USER_EXISTS') sys.exit('ADMIN_USER_EXISTS')
else: else:
if not password: if not password:
print("[SUPERUSER] Environment variable $ADMIN_PASSWORD for user %s was not set. Leaving..." % username) print(
"[SUPERUSER] Environment variable $ADMIN_PASSWORD"
" for user %s was not set. Leaving..." % username)
sys.exit('MISSING_ADMIN_PASSWORD') sys.exit('MISSING_ADMIN_PASSWORD')
print("[SUPERUSER] Creating superuser...") print("[SUPERUSER] Creating superuser...")
u = User.objects.create_superuser(username=username, password=password, email=email) u = User.objects.create_superuser(
username=username, password=password, email=email)
u.save() u.save()
print("[SUPERUSER] Done.") print("[SUPERUSER] Done.")

3
fix_qa.sh

@ -8,4 +8,5 @@
# Uma forma simples de fazer isso é adicionando antes suas mudanças à # Uma forma simples de fazer isso é adicionando antes suas mudanças à
# "staging area" do git, com `git add .` e após usar o script `git diff`. # "staging area" do git, com `git add .` e após usar o script `git diff`.
isort --recursive --skip='migrations' --skip='templates' --skip='ipython_log.py' . isort --recursive --skip='migrations' --skip='templates' --skip='ipython_log.py*' .
autopep8 --in-place --recursive . --exclude='migrations,ipython_log.py*'

4
genkey.py

@ -2,7 +2,9 @@ import random
def generate_secret(): def generate_secret():
return ''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)]) return (''.join([random.SystemRandom().choice(
'abcdefghijklmnopqrst'
'uvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)]))
if __name__ == '__main__': if __name__ == '__main__':
print(generate_secret()) print(generate_secret())

4
sapl/api/forms.py

@ -1,9 +1,9 @@
from django.db.models import Q, F from django.db.models import Q
from django.forms.fields import CharField, MultiValueField from django.forms.fields import CharField, MultiValueField
from django.forms.widgets import MultiWidget, TextInput from django.forms.widgets import MultiWidget, TextInput
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django_filters.filters import MethodFilter, ModelChoiceFilter, DateFilter from django_filters.filters import DateFilter, MethodFilter, ModelChoiceFilter
from rest_framework import serializers from rest_framework import serializers
from rest_framework.compat import django_filters from rest_framework.compat import django_filters
from rest_framework.filters import FilterSet from rest_framework.filters import FilterSet

24
sapl/api/serializers.py

@ -64,14 +64,18 @@ class SessaoPlenariaSerializer(serializers.ModelSerializer):
txtSiglaOrgao = serializers.SerializerMethodField('get_sigla_orgao') txtSiglaOrgao = serializers.SerializerMethodField('get_sigla_orgao')
txtApelido = serializers.SerializerMethodField('get_name') txtApelido = serializers.SerializerMethodField('get_name')
txtNomeOrgao = serializers.SerializerMethodField('get_nome_orgao') txtNomeOrgao = serializers.SerializerMethodField('get_nome_orgao')
codEstadoReuniao = serializers.SerializerMethodField('get_estadoSessaoPlenaria') codEstadoReuniao = serializers.SerializerMethodField(
'get_estadoSessaoPlenaria')
txtTipoReuniao = serializers.SerializerMethodField('get_tipo_sessao') txtTipoReuniao = serializers.SerializerMethodField('get_tipo_sessao')
txtObjeto = serializers.SerializerMethodField('get_assunto_sessao') txtObjeto = serializers.SerializerMethodField('get_assunto_sessao')
txtLocal = serializers.SerializerMethodField('get_endereco_orgao') txtLocal = serializers.SerializerMethodField('get_endereco_orgao')
bolReuniaoConjunta = serializers.SerializerMethodField('get_reuniao_conjunta') bolReuniaoConjunta = serializers.SerializerMethodField(
bolHabilitarEventoInterativo = serializers.SerializerMethodField('get_iterativo') 'get_reuniao_conjunta')
bolHabilitarEventoInterativo = serializers.SerializerMethodField(
'get_iterativo')
idYoutube = serializers.SerializerMethodField('get_url') idYoutube = serializers.SerializerMethodField('get_url')
codEstadoTransmissaoYoutube = serializers.SerializerMethodField('get_estadoTransmissaoYoutube') codEstadoTransmissaoYoutube = serializers.SerializerMethodField(
'get_estadoTransmissaoYoutube')
datReuniaoString = serializers.SerializerMethodField('get_date') datReuniaoString = serializers.SerializerMethodField('get_date')
# Constantes SessaoPlenaria (de 1-9) (apenas 3 serão usados) # Constantes SessaoPlenaria (de 1-9) (apenas 3 serão usados)
@ -80,9 +84,9 @@ class SessaoPlenariaSerializer(serializers.ModelSerializer):
SESSAO_CONVOCADA = 2 SESSAO_CONVOCADA = 2
# Constantes EstadoTranmissaoYoutube (de 0 a 2) # Constantes EstadoTranmissaoYoutube (de 0 a 2)
TRANSMISSAO_ENCERRADA = 2 TRANSMISSAO_ENCERRADA = 2
TRANSMISSAO_EM_ANDAMENTO = 1 TRANSMISSAO_EM_ANDAMENTO = 1
SEM_TRANSMISSAO = 0 SEM_TRANSMISSAO = 0
class Meta: class Meta:
model = SessaoPlenaria model = SessaoPlenaria
@ -102,11 +106,10 @@ class SessaoPlenariaSerializer(serializers.ModelSerializer):
'idYoutube', 'idYoutube',
'codEstadoTransmissaoYoutube', 'codEstadoTransmissaoYoutube',
'datReuniaoString' 'datReuniaoString'
) )
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(SessaoPlenariaSerializer, self).__init__(args, kwargs) super(SessaoPlenariaSerializer, self).__init__(args, kwargs)
casa = CasaLegislativa.objects.first()
def get_pk_sessao(self, obj): def get_pk_sessao(self, obj):
return obj.pk return obj.pk
@ -136,7 +139,7 @@ class SessaoPlenariaSerializer(serializers.ModelSerializer):
obj.data_inicio.strftime("%d/%m/%Y"), obj.data_inicio.strftime("%d/%m/%Y"),
obj.hora_inicio, obj.hora_inicio,
":00" ":00"
) )
def get_estadoTransmissaoYoutube(self, obj): def get_estadoTransmissaoYoutube(self, obj):
if obj.url_video: if obj.url_video:
@ -146,6 +149,7 @@ class SessaoPlenariaSerializer(serializers.ModelSerializer):
return self.TRANSMISSAO_EM_ANDAMENTO return self.TRANSMISSAO_EM_ANDAMENTO
else: else:
return self.SEM_TRANSMISSAO return self.SEM_TRANSMISSAO
def get_assunto_sessao(self, obj): def get_assunto_sessao(self, obj):
pauta_sessao = '' pauta_sessao = ''
ordem_dia = OrdemDia.objects.filter(sessao_plenaria=obj.pk) ordem_dia = OrdemDia.objects.filter(sessao_plenaria=obj.pk)

6
sapl/api/urls.py

@ -2,9 +2,9 @@ from django.conf import settings
from django.conf.urls import include, url from django.conf.urls import include, url
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from sapl.api.views import (AutorListView, MateriaLegislativaViewSet, from sapl.api.views import (AutoresPossiveisListView, AutoresProvaveisListView,
ModelChoiceView, SessaoPlenariaViewSet, AutorListView, MateriaLegislativaViewSet,
AutoresPossiveisListView, AutoresProvaveisListView) ModelChoiceView, SessaoPlenariaViewSet)
from .apps import AppConfig from .apps import AppConfig

8
sapl/api/views.py

@ -7,10 +7,10 @@ from rest_framework.generics import ListAPIView
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin from rest_framework.mixins import ListModelMixin, RetrieveModelMixin
from rest_framework.permissions import (AllowAny, IsAuthenticated, from rest_framework.permissions import (AllowAny, IsAuthenticated,
IsAuthenticatedOrReadOnly) IsAuthenticatedOrReadOnly)
from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.viewsets import GenericViewSet
from sapl.api.forms import AutorChoiceFilterSet, AutorSearchForFieldFilterSet,\ from sapl.api.forms import (AutorChoiceFilterSet, AutoresPossiveisFilterSet,
AutoresPossiveisFilterSet AutorSearchForFieldFilterSet)
from sapl.api.serializers import (AutorChoiceSerializer, AutorSerializer, from sapl.api.serializers import (AutorChoiceSerializer, AutorSerializer,
ChoiceSerializer, ChoiceSerializer,
MateriaLegislativaSerializer, MateriaLegislativaSerializer,
@ -173,8 +173,6 @@ class AutoresProvaveisListView(ListAPIView):
serializer_class = ChoiceSerializer serializer_class = ChoiceSerializer
def get_queryset(self): def get_queryset(self):
queryset = ListAPIView.get_queryset(self)
params = {'content_type__isnull': False} params = {'content_type__isnull': False}
tipo = '' tipo = ''

5
sapl/base/forms.py

@ -1,3 +1,4 @@
import django_filters
from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row
@ -12,9 +13,8 @@ from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models, transaction from django.db import models, transaction
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.translation import string_concat
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
import django_filters from django.utils.translation import string_concat
from sapl.base.models import Autor, TipoAutor from sapl.base.models import Autor, TipoAutor
from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column, from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column,
@ -29,7 +29,6 @@ from sapl.utils import (RANGE_ANOS, ChoiceWithoutValidationField,
from .models import AppConfig, CasaLegislativa from .models import AppConfig, CasaLegislativa
ACTION_CREATE_USERS_AUTOR_CHOICE = [ ACTION_CREATE_USERS_AUTOR_CHOICE = [
('C', _('Criar novo Usuário')), ('C', _('Criar novo Usuário')),
('A', _('Associar um usuário existente')), ('A', _('Associar um usuário existente')),

3
sapl/base/models.py

@ -1,12 +1,11 @@
import reversion
from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
import reversion
from sapl.utils import UF, YES_NO_CHOICES, get_settings_auth_user_model from sapl.utils import UF, YES_NO_CHOICES, get_settings_auth_user_model
TIPO_DOCUMENTO_ADMINISTRATIVO = (('O', _('Ostensivo')), TIPO_DOCUMENTO_ADMINISTRATIVO = (('O', _('Ostensivo')),
('R', _('Restritivo'))) ('R', _('Restritivo')))

2
sapl/base/search_indexes.py

@ -126,4 +126,4 @@ class NormaJuridicaIndex(DocumentoAcessorioIndex):
template_name = 'norma/normajuridica_text.txt' template_name = 'norma/normajuridica_text.txt'
def get_updated_field(self): def get_updated_field(self):
return 'data_ultima_atualizacao' return 'data_ultima_atualizacao'

3
sapl/base/templatetags/common_tags.py

@ -4,6 +4,7 @@ from django import template
from sapl.base.models import AppConfig from sapl.base.models import AppConfig
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Filiacao
from sapl.utils import filiacao_data from sapl.utils import filiacao_data
register = template.Library() register = template.Library()
@ -117,6 +118,7 @@ def str2intabs(value):
except: except:
return '' return ''
@register.filter @register.filter
def has_iframe(request): def has_iframe(request):
@ -181,6 +183,7 @@ def urldetail(obj):
return '%s:%s_detail' % ( return '%s:%s_detail' % (
obj._meta.app_config.name, obj._meta.model_name) obj._meta.app_config.name, obj._meta.model_name)
@register.filter @register.filter
def filiacao_data_filter(parlamentar, data_inicio): def filiacao_data_filter(parlamentar, data_inicio):
return filiacao_data(parlamentar, data_inicio) return filiacao_data(parlamentar, data_inicio)

5
sapl/base/tests/teststub_urls.py

@ -5,6 +5,5 @@ from sapl.urls import urlpatterns as original_patterns
urlpatterns = original_patterns + patterns('', url(r'^zzzz$', urlpatterns = original_patterns + patterns('', url(r'^zzzz$',
TemplateView.as_view( TemplateView.as_view(
template_name='index.html'), template_name='index.html'),
name='zzzz') name='zzzz'))
)

3
sapl/base/urls.py

@ -16,8 +16,7 @@ from .views import (AppConfigCrud, CasaLegislativaCrud, HelpView,
RelatorioMateriasPorAnoAutorTipoView, RelatorioMateriasPorAnoAutorTipoView,
RelatorioMateriasPorAutorView, RelatorioMateriasPorAutorView,
RelatorioMateriasTramitacaoView, RelatorioMateriasTramitacaoView,
RelatorioPresencaSessaoView, RelatorioPresencaSessaoView, SaplSearchView)
SaplSearchView)
app_name = AppConfig.name app_name = AppConfig.name

9
sapl/base/views.py

@ -7,22 +7,21 @@ from django.contrib.auth.tokens import default_token_generator
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.mail import send_mail from django.core.mail import send_mail
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Count, Q from django.db.models import Count
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.utils.encoding import force_bytes from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django_filters.views import FilterView from django_filters.views import FilterView
from haystack.views import SearchView from haystack.views import SearchView
from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm
from sapl.base.models import Autor, TipoAutor 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.sessao.models import (PresencaOrdemDia, SessaoPlenaria,
from sapl.sessao.models import PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca SessaoPlenariaPresenca)
from sapl.utils import parlamentares_ativos, sapl_logger from sapl.utils import parlamentares_ativos, sapl_logger
from .forms import (CasaLegislativaForm, ConfiguracoesAppForm, from .forms import (CasaLegislativaForm, ConfiguracoesAppForm,
@ -497,4 +496,4 @@ class SaplSearchView(SearchView):
for m in models: for m in models:
context['models'] = context['models'] + '&models=' + m context['models'] = context['models'] + '&models=' + m
return context return context

8
sapl/comissoes/views.py

@ -72,7 +72,7 @@ class ComposicaoCrud(MasterDetailCrud):
context['participacao_set'] = Participacao.objects.filter( context['participacao_set'] = Participacao.objects.filter(
composicao__pk=context['composicao_pk'] composicao__pk=context['composicao_pk']
).order_by('parlamentar') ).order_by('parlamentar')
return context return context
@ -82,21 +82,23 @@ class ComissaoCrud(Crud):
public = [RP_LIST, RP_DETAIL, ] public = [RP_LIST, RP_DETAIL, ]
class BaseMixin(Crud.BaseMixin): class BaseMixin(Crud.BaseMixin):
list_field_names = ['nome', 'sigla', 'tipo', 'data_criacao', 'data_extincao', 'ativa'] list_field_names = ['nome', 'sigla', 'tipo',
'data_criacao', 'data_extincao', 'ativa']
ordering = '-ativa', 'sigla' ordering = '-ativa', 'sigla'
class ListView(Crud.ListView): class ListView(Crud.ListView):
@xframe_options_exempt @xframe_options_exempt
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
class DetailView(Crud.DetailView): class DetailView(Crud.DetailView):
@xframe_options_exempt @xframe_options_exempt
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
class MateriasTramitacaoListView(ListView): class MateriasTramitacaoListView(ListView):
template_name = "comissoes/materias_em_tramitacao.html" template_name = "comissoes/materias_em_tramitacao.html"
paginate_by = 10 paginate_by = 10

1
sapl/compilacao/templatetags/compilacao_filters.py

@ -286,7 +286,6 @@ def nomenclatura_heranca(d, ignore_ultimo=0, ignore_primeiro=0):
return result return result
@register.filter @register.filter
def list(obj): def list(obj):
return [obj, ] return [obj, ]

1
sapl/compilacao/views.py

@ -143,7 +143,6 @@ class IntegracaoTaView(TemplateView):
implemente, ou passe `None` para as chaves que são fixas. implemente, ou passe `None` para as chaves que são fixas.
""") """)
map_fields = self.map_fields
ta_values = getattr(self, 'ta_values', {}) ta_values = getattr(self, 'ta_values', {})
item = get_object_or_404(self.model, pk=kwargs['pk']) item = get_object_or_404(self.model, pk=kwargs['pk'])

2
sapl/crispy_layout_mixin.py

@ -1,5 +1,6 @@
from math import ceil from math import ceil
import rtyaml
from crispy_forms.bootstrap import FormActions from crispy_forms.bootstrap import FormActions
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Div, Fieldset, Layout, Submit from crispy_forms.layout import HTML, Div, Fieldset, Layout, Submit
@ -7,7 +8,6 @@ from django import template
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils import formats from django.utils import formats
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
import rtyaml
def heads_and_tails(list_of_lists): def heads_and_tails(list_of_lists):

3
sapl/crud/base.py

@ -17,8 +17,8 @@ from django.http.response import Http404
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.decorators import classonlymethod from django.utils.decorators import classonlymethod
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.translation import string_concat
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import string_concat
from django.views.generic import (CreateView, DeleteView, DetailView, ListView, from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
UpdateView) UpdateView)
from django.views.generic.base import ContextMixin from django.views.generic.base import ContextMixin
@ -30,7 +30,6 @@ from sapl.rules.map_rules import (RP_ADD, RP_CHANGE, RP_DELETE, RP_DETAIL,
from sapl.settings import BASE_DIR from sapl.settings import BASE_DIR
from sapl.utils import normalize from sapl.utils import normalize
logger = logging.getLogger(BASE_DIR.name) logger = logging.getLogger(BASE_DIR.name)
ACTION_LIST, ACTION_CREATE, ACTION_DETAIL, ACTION_UPDATE, ACTION_DELETE = \ ACTION_LIST, ACTION_CREATE, ACTION_DETAIL, ACTION_UPDATE, ACTION_DELETE = \

2
sapl/legacy/management/commands/migracao_25_31.py

@ -5,7 +5,7 @@ from sapl.legacy import migration
class Command(BaseCommand): class Command(BaseCommand):
help ='Migração de dados do SAPL 2.5 para o SAPL 3.1' help = 'Migração de dados do SAPL 2.5 para o SAPL 3.1'
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument( parser.add_argument(

2
sapl/legacy/management/commands/migracao_documentos.py

@ -5,7 +5,7 @@ from sapl.legacy.migracao_documentos import migrar_documentos
class Command(BaseCommand): class Command(BaseCommand):
help ='Migração documentos do SAPL 2.5 para o SAPL 3.1' help = 'Migração documentos do SAPL 2.5 para o SAPL 3.1'
def handle(self, *args, **options): def handle(self, *args, **options):
migrar_documentos() migrar_documentos()

6
sapl/legacy/migracao_documentos.py

@ -3,7 +3,6 @@ import os
import re import re
import magic import magic
from django.db.models.signals import post_delete, post_save
from sapl.base.models import CasaLegislativa from sapl.base.models import CasaLegislativa
from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa, from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa,
@ -86,7 +85,8 @@ DOCS = {
DocumentoAcessorioAdministrativo: [( DocumentoAcessorioAdministrativo: [(
'arquivo', 'arquivo',
'administrativo/{}', 'administrativo/{}',
'private/documentoacessorioadministrativo/{0}/{0}_acessorio_administrativo{1}') 'private/documentoacessorioadministrativo/{0}/'
'{0}_acessorio_administrativo{1}')
], ],
} }
@ -205,7 +205,7 @@ def migrar_documentos():
SessaoPlenaria, SessaoPlenaria,
Proposicao, Proposicao,
DocumentoAdministrativo, DocumentoAdministrativo,
DocumentoAcessorioAdministrativo, DocumentoAcessorioAdministrativo,
]: ]:
migrar_docs_por_ids(tipo) migrar_docs_por_ids(tipo)

34
sapl/legacy/migration.py

@ -12,25 +12,22 @@ from django.contrib.auth.models import Group
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.db import OperationalError, ProgrammingError, connections, models from django.db import OperationalError, ProgrammingError, connections, models
from django.db.models import CharField, Max, ProtectedError, TextField, Count from django.db.models import CharField, Count, Max, ProtectedError, TextField
from django.db.models.base import ModelBase from django.db.models.base import ModelBase
from django.db.models.signals import post_delete, post_save
from model_mommy import mommy from model_mommy import mommy
from model_mommy.mommy import foreign_key_required, make from model_mommy.mommy import foreign_key_required, make
from sapl.base.models import Argumento, Autor, Constraint, ProblemaMigracao from sapl.base.models import Argumento, Autor, Constraint, ProblemaMigracao
from sapl.comissoes.models import Comissao, Composicao, Participacao from sapl.comissoes.models import Comissao, Composicao, Participacao
from sapl.legacy.models import Protocolo as ProtocoloLegado from sapl.materia.models import (AcompanhamentoMateria, Proposicao,
from sapl.materia.models import (AcompanhamentoMateria, DocumentoAcessorio,
MateriaLegislativa, Proposicao,
StatusTramitacao, TipoDocumento, StatusTramitacao, TipoDocumento,
TipoMateriaLegislativa, TipoProposicao, TipoMateriaLegislativa, TipoProposicao,
Tramitacao) Tramitacao)
from sapl.norma.models import (AssuntoNorma, NormaJuridica, from sapl.norma.models import (AssuntoNorma, NormaJuridica, NormaRelacionada,
TipoVinculoNormaJuridica, NormaRelacionada) TipoVinculoNormaJuridica)
from sapl.parlamentares.models import (Legislatura,Mandato, Parlamentar, from sapl.parlamentares.models import (Legislatura, Mandato, Parlamentar,
TipoAfastamento) TipoAfastamento)
from sapl.protocoloadm.models import (DocumentoAdministrativo,Protocolo, from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo,
StatusTramitacaoAdministrativo) StatusTramitacaoAdministrativo)
from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao
from sapl.settings import PROJECT_DIR from sapl.settings import PROJECT_DIR
@ -162,7 +159,7 @@ def get_fk_related(field, value, label=None):
value = TipoProposicao.objects.create( value = TipoProposicao.objects.create(
id=value, descricao='Erro', content_type=ct) id=value, descricao='Erro', content_type=ct)
ultimo_valor = get_last_value(type(value)) ultimo_valor = get_last_value(type(value))
alter_sequence(type(value), ultimo_valor+1) alter_sequence(type(value), ultimo_valor + 1)
else: else:
value = tipo[0] value = tipo[0]
else: else:
@ -252,7 +249,7 @@ def problema_duplicatas(model, lista_duplicatas, argumentos):
string_pks = "" string_pks = ""
problema = "%s de PK %s não é único." % (model.__name__, obj.pk) problema = "%s de PK %s não é único." % (model.__name__, obj.pk)
args_dict = {k: obj.__dict__[k] args_dict = {k: obj.__dict__[k]
for k in set(argumentos) & set(obj.__dict__.keys())} for k in set(argumentos) & set(obj.__dict__.keys())}
for dup in model.objects.filter(**args_dict): for dup in model.objects.filter(**args_dict):
pks.append(dup.pk) pks.append(dup.pk)
string_pks = "(" + ", ".join(map(str, pks)) + ")" string_pks = "(" + ", ".join(map(str, pks)) + ")"
@ -407,7 +404,7 @@ def fill_vinculo_norma_juridica():
'Julgada parcialmente inconstitucional')] 'Julgada parcialmente inconstitucional')]
lista_objs = [TipoVinculoNormaJuridica( lista_objs = [TipoVinculoNormaJuridica(
sigla=item[0], descricao_ativa=item[1], descricao_passiva=item[2]) sigla=item[0], descricao_ativa=item[1], descricao_passiva=item[2])
for item in lista] for item in lista]
TipoVinculoNormaJuridica.objects.bulk_create(lista_objs) TipoVinculoNormaJuridica.objects.bulk_create(lista_objs)
@ -610,7 +607,7 @@ class DataMigrator:
# necessário para ajustar sequence da tabela para o ultimo valor de id # necessário para ajustar sequence da tabela para o ultimo valor de id
ultimo_valor = get_last_value(model) ultimo_valor = get_last_value(model)
alter_sequence(model, ultimo_valor+1) alter_sequence(model, ultimo_valor + 1)
def delete_ind_excluido(self): def delete_ind_excluido(self):
excluidos = 0 excluidos = 0
@ -665,15 +662,15 @@ def adjust_documentoadministrativo(new, old):
except Exception: except Exception:
try: try:
protocolo = Protocolo.objects.get(numero=new.numero_protocolo, protocolo = Protocolo.objects.get(numero=new.numero_protocolo,
ano=new.ano+1) ano=new.ano + 1)
new.protocolo = protocolo new.protocolo = protocolo
except Exception: except Exception:
protocolo = mommy.make(Protocolo, numero=new.numero_protocolo, protocolo = mommy.make(Protocolo, numero=new.numero_protocolo,
ano=new.ano) ano=new.ano)
with reversion.create_revision(): with reversion.create_revision():
problema = 'Protocolo Vinculado [numero_protocolo=%s, '\ problema = 'Protocolo Vinculado [numero_protocolo=%s, '\
'ano=%s] não existe' % (new.numero_protocolo, 'ano=%s] não existe' % (new.numero_protocolo,
new.ano) new.ano)
descricao = 'O protocolo inexistente foi criado' descricao = 'O protocolo inexistente foi criado'
warn(problema + ' => ' + descricao) warn(problema + ' => ' + descricao)
save_relation(obj=protocolo, problema=problema, save_relation(obj=protocolo, problema=problema,
@ -751,7 +748,7 @@ def adjust_proposicao_antes_salvar(new, old):
def adjust_proposicao_depois_salvar(new, old): def adjust_proposicao_depois_salvar(new, old):
if not hasattr(old.dat_envio, 'year') or old.dat_envio.year == 1800: if not hasattr(old.dat_envio, 'year') or old.dat_envio.year == 1800:
msg = "O valor do campo data_envio (DateField) da model Proposicao"\ msg = "O valor do campo data_envio (DateField) da model Proposicao"\
" era inválido" " era inválido"
descricao = 'A data 1111-11-11 foi colocada no lugar' descricao = 'A data 1111-11-11 foi colocada no lugar'
problema = 'O valor da data era nulo ou inválido' problema = 'O valor da data era nulo ou inválido'
warn(msg + ' => ' + descricao) warn(msg + ' => ' + descricao)
@ -816,7 +813,6 @@ def adjust_tipoafastamento(new, old):
new.indicador = 'A' new.indicador = 'A'
def adjust_tipoproposicao(new, old): def adjust_tipoproposicao(new, old):
if old.ind_mat_ou_doc == 'M': if old.ind_mat_ou_doc == 'M':
new.tipo_conteudo_related = TipoMateriaLegislativa.objects.get( new.tipo_conteudo_related = TipoMateriaLegislativa.objects.get(
@ -870,7 +866,7 @@ def adjust_autor(new, old):
except Exception: except Exception:
with reversion.create_revision(): with reversion.create_revision():
msg = 'Um parlamentar relacionado de PK [%s] não existia' \ msg = 'Um parlamentar relacionado de PK [%s] não existia' \
% old.cod_parlamentar % old.cod_parlamentar
reversion.set_comment('Stub criado pela migração') reversion.set_comment('Stub criado pela migração')
value = make_stub(Parlamentar, old.cod_parlamentar) value = make_stub(Parlamentar, old.cod_parlamentar)
descricao = 'stub criado para entrada orfã!' descricao = 'stub criado para entrada orfã!'

14
sapl/legacy/scripts/street_sweeper.py

@ -12,14 +12,15 @@ DB = ''
SELECT_EXCLUIDOS = "SELECT %s FROM %s WHERE ind_excluido = 1 ORDER BY %s" SELECT_EXCLUIDOS = "SELECT %s FROM %s WHERE ind_excluido = 1 ORDER BY %s"
REGISTROS_INCONSISTENTES = "DELETE FROM %s WHERE %s in (%s) AND ind_excluido = 0 " REGISTROS_INCONSISTENTES = "DELETE FROM %s WHERE %s "
"in (%s) AND ind_excluido = 0 "
EXCLUI_REGISTRO = "DELETE FROM %s WHERE ind_excluido=1" EXCLUI_REGISTRO = "DELETE FROM %s WHERE ind_excluido=1"
NORMA_DEP = "DELETE FROM vinculo_norma_juridica WHERE cod_norma_referente in (%s) OR \ NORMA_DEP = "DELETE FROM vinculo_norma_juridica WHERE cod_norma_referente in (%s) OR \
cod_norma_referida in (%s) AND ind_excluido = 0 " cod_norma_referida in (%s) AND ind_excluido = 0 "
mapa = {} # mapa com tabela principal -> tabelas dependentes mapa = {} # mapa com tabela principal -> tabelas dependentes
mapa['tipo_autor'] = ['autor'] mapa['tipo_autor'] = ['autor']
mapa['materia_legislativa'] = ['acomp_materia', 'autoria', 'despacho_inicial', mapa['materia_legislativa'] = ['acomp_materia', 'autoria', 'despacho_inicial',
@ -43,6 +44,7 @@ mapa['parlamentar'] = ['autor', 'autoria', 'composicao_comissao',
'sessao_plenaria_presenca', 'unidade_tramitacao'] 'sessao_plenaria_presenca', 'unidade_tramitacao']
""" """
def get_ids_excluidos(cursor, query): def get_ids_excluidos(cursor, query):
""" """
recupera as PKs de registros com ind_excluido = 1 da tabela principal recupera as PKs de registros com ind_excluido = 1 da tabela principal
@ -58,7 +60,8 @@ def remove_tabelas(cursor, tabela_principal, pk, query_dependentes=None):
QUERY = SELECT_EXCLUIDOS % (pk, tabela_principal, pk) QUERY = SELECT_EXCLUIDOS % (pk, tabela_principal, pk)
ids_excluidos = get_ids_excluidos(cursor, QUERY) ids_excluidos = get_ids_excluidos(cursor, QUERY)
print("\nRegistros da tabela '%s' com ind_excluido = 1: %s" % (tabela_principal.upper(), len(ids_excluidos))) print("\nRegistros da tabela '%s' com ind_excluido = 1: %s" %
(tabela_principal.upper(), len(ids_excluidos)))
""" """
Remove registros de tabelas que dependem da tabela principal, Remove registros de tabelas que dependem da tabela principal,
@ -69,12 +72,13 @@ def remove_tabelas(cursor, tabela_principal, pk, query_dependentes=None):
print("Dependencias inconsistentes") print("Dependencias inconsistentes")
for tabela in mapa[tabela_principal]: for tabela in mapa[tabela_principal]:
QUERY_DEP = REGISTROS_INCONSISTENTES % (tabela, pk, ','.join(ids_excluidos)) QUERY_DEP = REGISTROS_INCONSISTENTES % (
tabela, pk, ','.join(ids_excluidos))
# Trata caso especifico de norma_juridica # Trata caso especifico de norma_juridica
if query_dependentes: if query_dependentes:
QUERY_DEP = query_dependentes % (','.join(ids_excluidos), QUERY_DEP = query_dependentes % (','.join(ids_excluidos),
','.join(ids_excluidos)) ','.join(ids_excluidos))
print(tabela.upper(), cursor.execute(QUERY_DEP)) print(tabela.upper(), cursor.execute(QUERY_DEP))

1
sapl/materia/admin.py

@ -11,6 +11,7 @@ if not DEBUG:
admin.site.unregister(Proposicao) admin.site.unregister(Proposicao)
class ProposicaoAdmin(admin.ModelAdmin): class ProposicaoAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None): def has_add_permission(self, request, obj=None):
return False return False

3
sapl/materia/apps.py

@ -6,6 +6,3 @@ class AppConfig(apps.AppConfig):
name = 'sapl.materia' name = 'sapl.materia'
label = 'materia' label = 'materia'
verbose_name = _('Matéria') verbose_name = _('Matéria')
def ready(self):
from . import signals

3
sapl/materia/email_utils.py

@ -206,6 +206,7 @@ def do_envia_email_tramitacao(base_url, materia, status, unidade_destino):
# a conexão será fechada # a conexão será fechada
except Exception: except Exception:
connection.close() connection.close()
raise Exception('Erro ao enviar e-mail de acompanhamento de matéria.') raise Exception(
'Erro ao enviar e-mail de acompanhamento de matéria.')
connection.close() connection.close()

17
sapl/materia/forms.py

@ -1,7 +1,8 @@
from datetime import date, datetime
import os import os
from datetime import date, datetime
import django_filters
from crispy_forms.bootstrap import Alert, FormActions, InlineRadios from crispy_forms.bootstrap import Alert, FormActions, InlineRadios
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import (HTML, Button, Column, Div, Field, Fieldset, from crispy_forms.layout import (HTML, Button, Column, Div, Field, Fieldset,
@ -13,16 +14,16 @@ from django.core.files.base import File
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import models, transaction from django.db import models, transaction
from django.db.models import Max from django.db.models import Max
from django.forms import ModelForm, ModelChoiceField, widgets from django.forms import ModelChoiceField, ModelForm, widgets
from django.forms.forms import Form from django.forms.forms import Form
from django.forms.models import ModelMultipleChoiceField from django.forms.models import ModelMultipleChoiceField
from django.forms.widgets import Select, CheckboxSelectMultiple, HiddenInput from django.forms.widgets import CheckboxSelectMultiple, HiddenInput, Select
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
import django_filters
import sapl
from sapl.base.models import Autor, TipoAutor from sapl.base.models import Autor, TipoAutor
from sapl.comissoes.models import Comissao from sapl.comissoes.models import Comissao
from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC, from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC,
@ -41,7 +42,6 @@ from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES,
MateriaPesquisaOrderingFilter, RangeWidgetOverride, MateriaPesquisaOrderingFilter, RangeWidgetOverride,
autor_label, autor_modal, models_with_gr_for_model, autor_label, autor_modal, models_with_gr_for_model,
qs_override_django_filter) qs_override_django_filter)
import sapl
from .models import (AcompanhamentoMateria, Anexada, Autoria, DespachoInicial, from .models import (AcompanhamentoMateria, Anexada, Autoria, DespachoInicial,
DocumentoAcessorio, Numeracao, Proposicao, Relatoria, DocumentoAcessorio, Numeracao, Proposicao, Relatoria,
@ -493,9 +493,10 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet):
autoria__autor = django_filters.CharFilter(widget=forms.HiddenInput()) autoria__autor = django_filters.CharFilter(widget=forms.HiddenInput())
autoria__primeiro_autor = django_filters.BooleanFilter(required=False, autoria__primeiro_autor = django_filters.BooleanFilter(
label='Primeiro Autor', required=False,
widget=forms.HiddenInput()) label='Primeiro Autor',
widget=forms.HiddenInput())
ementa = django_filters.CharFilter(lookup_expr='icontains') ementa = django_filters.CharFilter(lookup_expr='icontains')

3
sapl/materia/models.py

@ -1,5 +1,6 @@
from datetime import datetime from datetime import datetime
import reversion
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.contrib.contenttypes.fields import GenericRelation from django.contrib.contenttypes.fields import GenericRelation
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
@ -8,7 +9,6 @@ from django.db import models
from django.utils import formats from django.utils import formats
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
import reversion
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.comissoes.models import Comissao from sapl.comissoes.models import Comissao
@ -19,7 +19,6 @@ from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, SaplGenericForeignKey,
SaplGenericRelation, restringe_tipos_de_arquivo_txt, SaplGenericRelation, restringe_tipos_de_arquivo_txt,
texto_upload_path) texto_upload_path)
EM_TRAMITACAO = [(1, 'Sim'), EM_TRAMITACAO = [(1, 'Sim'),
(0, 'Não')] (0, 'Não')]

4
sapl/materia/signals.py

@ -1,8 +1,4 @@
from django.db.models.signals import post_delete, post_save
import django.dispatch import django.dispatch
from .models import DocumentoAcessorio, MateriaLegislativa
tramitacao_signal = django.dispatch.Signal(providing_args=['post', 'request']) tramitacao_signal = django.dispatch.Signal(providing_args=['post', 'request'])

2
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

10
sapl/materia/urls.py

@ -4,8 +4,9 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
AcompanhamentoExcluirView, AcompanhamentoExcluirView,
AcompanhamentoMateriaView, AnexadaCrud, AcompanhamentoMateriaView, AnexadaCrud,
AssuntoMateriaCrud, AutoriaCrud, AssuntoMateriaCrud, AutoriaCrud,
ConfirmarProposicao, CriarProtocoloMateriaView, AutoriaMultiCreateView, ConfirmarProposicao,
DespachoInicialCrud, DocumentoAcessorioCrud, CriarProtocoloMateriaView, DespachoInicialCrud,
DocumentoAcessorioCrud,
DocumentoAcessorioEmLoteView, DocumentoAcessorioEmLoteView,
LegislacaoCitadaCrud, MateriaAssuntoCrud, LegislacaoCitadaCrud, MateriaAssuntoCrud,
MateriaLegislativaCrud, MateriaLegislativaCrud,
@ -20,13 +21,10 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
TipoFimRelatoriaCrud, TipoMateriaCrud, TipoFimRelatoriaCrud, TipoMateriaCrud,
TipoProposicaoCrud, TramitacaoCrud, TipoProposicaoCrud, TramitacaoCrud,
TramitacaoEmLoteView, UnidadeTramitacaoCrud, TramitacaoEmLoteView, UnidadeTramitacaoCrud,
proposicao_texto, recuperar_materia, proposicao_texto, recuperar_materia)
AutoriaMultiCreateView)
from . import receivers
from .apps import AppConfig from .apps import AppConfig
app_name = AppConfig.name app_name = AppConfig.name
urlpatterns_materia = [ urlpatterns_materia = [

29
sapl/materia/views.py

@ -1,18 +1,14 @@
from datetime import datetime, date from datetime import datetime
from random import choice from random import choice
from string import ascii_letters, digits from string import ascii_letters, digits
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML from crispy_forms.layout import HTML
from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin
from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist
from django.core.exceptions import (ObjectDoesNotExist,
MultipleObjectsReturned)
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from django.http.response import Http404, HttpResponseRedirect from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
@ -23,6 +19,7 @@ from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django_filters.views import FilterView from django_filters.views import FilterView
import sapl
from sapl.base.models import Autor, CasaLegislativa from sapl.base.models import Autor, CasaLegislativa
from sapl.comissoes.models import Comissao, Participacao from sapl.comissoes.models import Comissao, Participacao
from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_RESTRICT, from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_RESTRICT,
@ -33,16 +30,16 @@ from sapl.crud.base import (ACTION_CREATE, ACTION_DELETE, ACTION_DETAIL,
ACTION_LIST, ACTION_UPDATE, RP_DETAIL, RP_LIST, ACTION_LIST, ACTION_UPDATE, RP_DETAIL, RP_LIST,
Crud, CrudAux, MasterDetailCrud, Crud, CrudAux, MasterDetailCrud,
PermissionRequiredForAppCrudMixin, make_pagination) PermissionRequiredForAppCrudMixin, make_pagination)
from sapl.materia.forms import (AnexadaForm, ConfirmarProposicaoForm, from sapl.materia.forms import (AnexadaForm, AutoriaForm,
LegislacaoCitadaForm, AutoriaForm, ProposicaoForm, AutoriaMultiCreateForm,
TipoProposicaoForm, TramitacaoForm, ConfirmarProposicaoForm, LegislacaoCitadaForm,
TramitacaoUpdateForm, AutoriaMultiCreateForm) ProposicaoForm, TipoProposicaoForm,
TramitacaoForm, TramitacaoUpdateForm)
from sapl.norma.models import LegislacaoCitada from sapl.norma.models import LegislacaoCitada
from sapl.protocoloadm.models import Protocolo from sapl.protocoloadm.models import Protocolo
from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label, from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label,
autor_modal, gerar_hash_arquivo, get_base_url, autor_modal, gerar_hash_arquivo, get_base_url,
montar_row_autor) montar_row_autor)
import sapl
from .email_utils import do_envia_email_confirmacao from .email_utils import do_envia_email_confirmacao
from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm,
@ -62,7 +59,6 @@ from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria,
TipoProposicao, Tramitacao, UnidadeTramitacao) TipoProposicao, Tramitacao, UnidadeTramitacao)
from .signals import tramitacao_signal from .signals import tramitacao_signal
AssuntoMateriaCrud = Crud.build(AssuntoMateria, 'assunto_materia') AssuntoMateriaCrud = Crud.build(AssuntoMateria, 'assunto_materia')
OrigemCrud = Crud.build(Origem, '') OrigemCrud = Crud.build(Origem, '')
@ -1061,11 +1057,11 @@ class DocumentoAcessorioCrud(MasterDetailCrud):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(MasterDetailCrud.CreateView, self).__init__(**kwargs) super(MasterDetailCrud.CreateView, self).__init__(**kwargs)
def get_initial(self): def get_initial(self):
self.initial['data'] = datetime.now().date() self.initial['data'] = datetime.now().date()
return self.initial return self.initial
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super( context = super(
@ -1736,9 +1732,8 @@ class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView):
if ('tramitacao__status' in qr and if ('tramitacao__status' in qr and
'tramitacao__unidade_tramitacao_destino' in qr and 'tramitacao__unidade_tramitacao_destino' in qr and
qr['tramitacao__status'] and qr['tramitacao__status'] and
qr['tramitacao__unidade_tramitacao_destino'] qr['tramitacao__unidade_tramitacao_destino']):
):
lista = filtra_tramitacao_destino_and_status( lista = filtra_tramitacao_destino_and_status(
qr['tramitacao__status'], qr['tramitacao__status'],
qr['tramitacao__unidade_tramitacao_destino']) qr['tramitacao__unidade_tramitacao_destino'])

3
sapl/norma/apps.py

@ -6,6 +6,3 @@ class AppConfig(apps.AppConfig):
name = 'sapl.norma' name = 'sapl.norma'
label = 'norma' label = 'norma'
verbose_name = _('Norma Jurídica') verbose_name = _('Norma Jurídica')
def ready(self):
from . import signals

8
sapl/norma/models.py

@ -59,8 +59,10 @@ class TipoNormaJuridica(models.Model):
def __str__(self): def __str__(self):
return self.descricao return self.descricao
def norma_upload_path(instance, filename): def norma_upload_path(instance, filename):
return texto_upload_path(instance, filename, subpath=instance.ano) return texto_upload_path(instance, filename, subpath=instance.ano)
@reversion.register() @reversion.register()
class NormaJuridica(models.Model): class NormaJuridica(models.Model):
@ -133,9 +135,9 @@ class NormaJuridica(models.Model):
def get_normas_relacionadas(self): def get_normas_relacionadas(self):
principais = NormaRelacionada.objects.filter( principais = NormaRelacionada.objects.filter(
norma_principal=self.id) norma_principal=self.id)
relacionadas = NormaRelacionada.objects.filter( relacionadas = NormaRelacionada.objects.filter(
norma_relacionada=self.id) norma_relacionada=self.id)
return (principais, relacionadas) return (principais, relacionadas)
def __str__(self): def __str__(self):

3
sapl/norma/signals.py

@ -1,3 +0,0 @@
from django.db.models.signals import post_delete, post_save
from .models import NormaJuridica

4
sapl/painel/urls.py

@ -2,8 +2,8 @@ from django.conf.urls import url
from .apps import AppConfig from .apps import AppConfig
from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view, from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view,
painel_parlamentar_view, painel_view, painel_parlamentar_view, painel_view, painel_votacao_view,
painel_votacao_view, votante_view) votante_view)
app_name = AppConfig.name app_name = AppConfig.name

7
sapl/painel/views.py

@ -1,10 +1,10 @@
from datetime import date
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.decorators import user_passes_test
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from django.http.response import Http404, HttpResponseRedirect from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
@ -12,7 +12,6 @@ from django.utils.translation import ugettext_lazy as _
from sapl.crud.base import Crud from sapl.crud.base import Crud
from sapl.painel.apps import AppConfig from sapl.painel.apps import AppConfig
from sapl.painel.models import Painel
from sapl.parlamentares.models import Filiacao, Votante from sapl.parlamentares.models import Filiacao, Votante
from sapl.sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia, from sapl.sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia,
RegistroVotacao, SessaoPlenaria, RegistroVotacao, SessaoPlenaria,

8
sapl/parlamentares/forms.py

@ -65,9 +65,9 @@ class MandatoForm(ModelForm):
data = self.cleaned_data data = self.cleaned_data
try: try:
if 'legislatura' in data and 'parlamentar' in data: if 'legislatura' in data and 'parlamentar' in data:
Mandato.objects.get( Mandato.objects.get(
parlamentar__pk=self.initial['parlamentar'].pk, parlamentar__pk=self.initial['parlamentar'].pk,
legislatura__pk=data['legislatura'].pk) legislatura__pk=data['legislatura'].pk)
except ObjectDoesNotExist: except ObjectDoesNotExist:
pass pass
else: else:
@ -323,7 +323,7 @@ class VotanteForm(ModelForm):
def clean(self): def clean(self):
super(VotanteForm, self).clean() super(VotanteForm, self).clean()
cd = self.cleaned_data cd = self.cleaned_data
username = cd['username'] username = cd['username']

2
sapl/parlamentares/models.py

@ -1,9 +1,9 @@
from datetime import datetime from datetime import datetime
import reversion
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
import reversion
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.utils import (INDICADOR_AFASTAMENTO, UF, YES_NO_CHOICES, from sapl.utils import (INDICADOR_AFASTAMENTO, UF, YES_NO_CHOICES,

3
sapl/parlamentares/urls.py

@ -5,8 +5,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
FiliacaoCrud, FrenteCrud, FrenteList, FiliacaoCrud, FrenteCrud, FrenteList,
LegislaturaCrud, MandatoCrud, LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud, MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud, ParlamentarCrud, ParlamentarMateriasView,
ParlamentarMateriasView,
ParticipacaoParlamentarCrud, PartidoCrud, ParticipacaoParlamentarCrud, PartidoCrud,
ProposicaoParlamentarCrud, ProposicaoParlamentarCrud,
RelatoriaParlamentarCrud, RelatoriaParlamentarCrud,

4
sapl/parlamentares/views.py

@ -21,8 +21,7 @@ from sapl.comissoes.models import Participacao
from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux, from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux,
CrudBaseForListAndDetailExternalAppView, CrudBaseForListAndDetailExternalAppView,
MasterDetailCrud) MasterDetailCrud)
from sapl.materia.models import Autoria from sapl.materia.models import Autoria, Proposicao, Relatoria
from sapl.materia.models import Proposicao, Relatoria
from sapl.parlamentares.apps import AppConfig from sapl.parlamentares.apps import AppConfig
from sapl.utils import parlamentares_ativos from sapl.utils import parlamentares_ativos
@ -34,7 +33,6 @@ from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa,
SituacaoMilitar, TipoAfastamento, TipoDependente, Votante) SituacaoMilitar, TipoAfastamento, TipoDependente, Votante)
CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa') CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa')
PartidoCrud = CrudAux.build(Partido, 'partidos') PartidoCrud = CrudAux.build(Partido, 'partidos')
SessaoLegislativaCrud = CrudAux.build(SessaoLegislativa, 'sessao_legislativa') SessaoLegislativaCrud = CrudAux.build(SessaoLegislativa, 'sessao_legislativa')

6
sapl/protocoloadm/forms.py

@ -1,5 +1,6 @@
from datetime import datetime from datetime import datetime
import django_filters
from crispy_forms.bootstrap import InlineRadios from crispy_forms.bootstrap import InlineRadios
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Fieldset, Layout, Submit from crispy_forms.layout import HTML, Button, Fieldset, Layout, Submit
@ -8,11 +9,11 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import models from django.db import models
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
import django_filters
from sapl.base.models import Autor, TipoAutor from sapl.base.models import Autor, TipoAutor
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 MateriaLegislativa, 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)
@ -20,7 +21,6 @@ from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo,
Protocolo, TipoDocumentoAdministrativo, Protocolo, TipoDocumentoAdministrativo,
TramitacaoAdministrativo) TramitacaoAdministrativo)
TIPOS_PROTOCOLO = [('0', 'Recebido'), ('1', 'Enviado'), ('', 'Ambos')] TIPOS_PROTOCOLO = [('0', 'Recebido'), ('1', 'Enviado'), ('', 'Ambos')]
TIPOS_PROTOCOLO_CREATE = [('0', 'Recebido'), ('1', 'Enviado')] TIPOS_PROTOCOLO_CREATE = [('0', 'Recebido'), ('1', 'Enviado')]

63
sapl/protocoloadm/views.py

@ -1,25 +1,26 @@
from datetime import date, datetime from datetime import date, datetime
from braces.views import FormValidMessageMixin from braces.views import FormValidMessageMixin
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin
from django.db.models import Q from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Max from django.db.models import Max, Q
from django.http import (Http404, HttpResponse, HttpResponseRedirect, from django.http import Http404, HttpResponse, JsonResponse
JsonResponse)
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, DetailView, FormView, ListView from django.views.generic import CreateView, ListView
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django_filters.views import FilterView from django_filters.views import FilterView
import sapl import sapl
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.comissoes.models import Comissao
from sapl.crud.base import Crud, CrudAux, MasterDetailCrud, make_pagination from sapl.crud.base import Crud, CrudAux, MasterDetailCrud, make_pagination
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.parlamentares.models import Legislatura, Parlamentar
from sapl.protocoloadm.models import Protocolo
from sapl.utils import create_barcode, get_client_ip from sapl.utils import create_barcode, get_client_ip
from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm,
@ -28,12 +29,8 @@ from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm,
ProtocoloFilterSet, ProtocoloMateriaForm, ProtocoloFilterSet, ProtocoloMateriaForm,
TramitacaoAdmEditForm, TramitacaoAdmForm) TramitacaoAdmEditForm, TramitacaoAdmForm)
from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo, from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo,
Protocolo, StatusTramitacaoAdministrativo, StatusTramitacaoAdministrativo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo) 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( TipoDocumentoAdministrativoCrud = CrudAux.build(
TipoDocumentoAdministrativo, '') TipoDocumentoAdministrativo, '')
@ -120,6 +117,7 @@ class DocumentoAdministrativoCrud(Crud):
'numero_protocolo': p.numero} 'numero_protocolo': p.numero}
class DetailView(DocumentoAdministrativoMixin, Crud.DetailView): class DetailView(DocumentoAdministrativoMixin, Crud.DetailView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
self.layout_display[0]['rows'][-1][0]['text'] = ( self.layout_display[0]['rows'][-1][0]['text'] = (
@ -129,6 +127,7 @@ class DocumentoAdministrativoCrud(Crud):
return context return context
class DeleteView(DocumentoAdministrativoMixin, Crud.DeleteView): class DeleteView(DocumentoAdministrativoMixin, Crud.DeleteView):
def get_success_url(self): def get_success_url(self):
return reverse('sapl.protocoloadm:pesq_doc_adm', kwargs={}) return reverse('sapl.protocoloadm:pesq_doc_adm', kwargs={})
@ -453,28 +452,34 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView):
return redirect(self.get_success_url(protocolo)) return redirect(self.get_success_url(protocolo))
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(CreateView, self).get_context_data(**kwargs) context = super(CreateView, self).get_context_data(**kwargs)
autores_ativos = self.autores_ativos() autores_ativos = self.autores_ativos()
autores = [] autores = []
autores.append(['0', '------']) autores.append(['0', '------'])
for a in autores_ativos: for a in autores_ativos:
autores.append([a.id, a.__str__()]) autores.append([a.id, a.__str__()])
context['form'].fields['autor'].choices = autores context['form'].fields['autor'].choices = autores
return context return context
def autores_ativos(self): def autores_ativos(self):
lista_parlamentares = Parlamentar.objects.filter(ativo=True).values_list('id', flat=True) lista_parlamentares = Parlamentar.objects.filter(
model_parlamentar = ContentType.objects.get_for_model(Parlamentar) ativo=True).values_list('id', flat=True)
autor_parlamentar = Autor.objects.filter(content_type=model_parlamentar, object_id__in=lista_parlamentares) model_parlamentar = ContentType.objects.get_for_model(Parlamentar)
autor_parlamentar = Autor.objects.filter(
lista_comissoes = Comissao.objects.filter(Q(data_extincao__isnull=True)|Q(data_extincao__gt=date.today())).values_list('id', flat=True) content_type=model_parlamentar, object_id__in=lista_parlamentares)
model_comissao = ContentType.objects.get_for_model(Comissao)
autor_comissoes = Autor.objects.filter(content_type=model_comissao, object_id__in=lista_comissoes) lista_comissoes = Comissao.objects.filter(Q(
autores_outros = Autor.objects.exclude(content_type__in=[model_parlamentar, model_comissao]) data_extincao__isnull=True) | Q(
q = autor_parlamentar | autor_comissoes | autores_outros data_extincao__gt=date.today())).values_list('id', flat=True)
return q 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): class ProtocoloMateriaTemplateView(PermissionRequiredMixin, TemplateView):

6
sapl/redireciona_urls/exceptions.py

@ -8,6 +8,6 @@ class UnknownUrlNameError(Exception):
def __str__(self): def __str__(self):
return repr( return repr(
_("Funcionalidade") _("Funcionalidade")
+ " '%s' " % (self.url_name) + " '%s' " % (self.url_name)
+ _("pode ter sido removida ou movida para outra url.")) + _("pode ter sido removida ou movida para outra url."))

47
sapl/redireciona_urls/tests.py

@ -6,6 +6,7 @@ EMPTY_STRING = ''
class RedirecionaURLsTests(TestCase): class RedirecionaURLsTests(TestCase):
def test_redireciona_index_SAPL(self): def test_redireciona_index_SAPL(self):
response = self.client.get(reverse( response = self.client.get(reverse(
'sapl.redireciona_urls:redireciona_sapl_index') 'sapl.redireciona_urls:redireciona_sapl_index')
@ -34,7 +35,7 @@ class RedirecionaParlamentarTests(TestCase):
url = "%s%s" % ( url = "%s%s" % (
url, url,
"?hdn_num_legislatura=%s" % (numero_legislatura) "?hdn_num_legislatura=%s" % (numero_legislatura)
) )
url_e = "%s%s" % (url_e, "?pk=%s" % numero_legislatura) url_e = "%s%s" % (url_e, "?pk=%s" % numero_legislatura)
response = self.client.get(url) response = self.client.get(url)
@ -49,7 +50,7 @@ class RedirecionaParlamentarTests(TestCase):
url_e = reverse( url_e = reverse(
'sapl.parlamentares:parlamentar_detail', 'sapl.parlamentares:parlamentar_detail',
kwargs={'pk': pk_parlamentar} kwargs={'pk': pk_parlamentar}
) )
response = self.client.get(url) response = self.client.get(url)
self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode)
self.assertEqual(response.url, url_e) self.assertEqual(response.url, url_e)
@ -65,7 +66,7 @@ class RedirecionaComissaoTests(TestCase):
url_e = reverse( url_e = reverse(
'sapl.comissoes:comissao_detail', 'sapl.comissoes:comissao_detail',
kwargs={'pk': pk_comissao} kwargs={'pk': pk_comissao}
) )
response = self.client.get(url) response = self.client.get(url)
self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode)
self.assertEqual(response.url, url_e) self.assertEqual(response.url, url_e)
@ -89,7 +90,7 @@ class RedirecionaPautaSessaoTests(TestCase):
url_e = reverse( url_e = reverse(
'sapl.sessao:pauta_sessao_detail', 'sapl.sessao:pauta_sessao_detail',
kwargs={'pk': pk_pauta_sessao} kwargs={'pk': pk_pauta_sessao}
) )
response = self.client.get(url) response = self.client.get(url)
self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode)
self.assertEqual(response.url, url_e) self.assertEqual(response.url, url_e)
@ -153,7 +154,7 @@ class RedirecionaMesaDiretoraParlamentarTests(TestCase):
url_e = reverse( url_e = reverse(
'sapl.parlamentares:parlamentar_detail', 'sapl.parlamentares:parlamentar_detail',
kwargs={'pk': pk_parlamentar} kwargs={'pk': pk_parlamentar}
) )
response = self.client.get(url) response = self.client.get(url)
@ -313,7 +314,7 @@ class RedirecionaNormasJuridicasDetailTests(TestCase):
'sapl.norma:normajuridica_detail', 'sapl.norma:normajuridica_detail',
kwargs={ kwargs={
'pk': pk_norma} 'pk': pk_norma}
) )
response = self.client.get(url) response = self.client.get(url)
self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode)
@ -345,7 +346,7 @@ class RedirecionaSessaoPlenariaTests(TestCase):
url_e = reverse( url_e = reverse(
'sapl.sessao:sessaoplenaria_detail', 'sapl.sessao:sessaoplenaria_detail',
kwargs={'pk': pk_sessao_plenaria} kwargs={'pk': pk_sessao_plenaria}
) )
response = self.client.get(url) response = self.client.get(url)
@ -532,18 +533,18 @@ class RedirecionaHistoricoTramitacoesListTests(TestCase):
status_tramitacao = status_tramitacao.lstrip("0") status_tramitacao = status_tramitacao.lstrip("0")
if ( if (
(inicio_dt_tramitacao != EMPTY_STRING) or (inicio_dt_tramitacao != EMPTY_STRING) or
(fim_dt_tramitacao != EMPTY_STRING) or (fim_dt_tramitacao != EMPTY_STRING) or
(tipo_materia != EMPTY_STRING) or (tipo_materia != EMPTY_STRING) or
(unidade_local_tramitacao != EMPTY_STRING) or (unidade_local_tramitacao != EMPTY_STRING) or
(status_tramitacao != EMPTY_STRING)): (status_tramitacao != EMPTY_STRING)):
args_e += "?tramitacao__data_tramitacao_0=%s" % ( args_e += "?tramitacao__data_tramitacao_0=%s" % (
inicio_dt_tramitacao) inicio_dt_tramitacao)
args_e += "&tramitacao__data_tramitacao_1=%s" % ( args_e += "&tramitacao__data_tramitacao_1=%s" % (
fim_dt_tramitacao) fim_dt_tramitacao)
args_e += "&tipo=%s" % (tipo_materia) args_e += "&tipo=%s" % (tipo_materia)
args_e += "&tramitacao__unidade_tramitacao_local=%s" % ( args_e += "&tramitacao__unidade_tramitacao_local=%s" % (
unidade_local_tramitacao) unidade_local_tramitacao)
args_e += "&tramitacao__status=%s" % (status_tramitacao) args_e += "&tramitacao__status=%s" % (status_tramitacao)
args_e += "&salvar=%s" % ('Pesquisar') args_e += "&salvar=%s" % ('Pesquisar')
@ -581,18 +582,18 @@ class RedirecionaHistoricoTramitacoesListTests(TestCase):
status_tramitacao = status_tramitacao.lstrip("0") status_tramitacao = status_tramitacao.lstrip("0")
if ( if (
(inicio_dt_tramitacao != EMPTY_STRING) or (inicio_dt_tramitacao != EMPTY_STRING) or
(fim_dt_tramitacao != EMPTY_STRING) or (fim_dt_tramitacao != EMPTY_STRING) or
(tipo_materia != EMPTY_STRING) or (tipo_materia != EMPTY_STRING) or
(unidade_local_tramitacao != EMPTY_STRING) or (unidade_local_tramitacao != EMPTY_STRING) or
(status_tramitacao != EMPTY_STRING)): (status_tramitacao != EMPTY_STRING)):
args_e += "?tramitacao__data_tramitacao_0=%s" % ( args_e += "?tramitacao__data_tramitacao_0=%s" % (
inicio_dt_tramitacao) inicio_dt_tramitacao)
args_e += "&tramitacao__data_tramitacao_1=%s" % ( args_e += "&tramitacao__data_tramitacao_1=%s" % (
fim_dt_tramitacao) fim_dt_tramitacao)
args_e += "&tipo=%s" % (tipo_materia) args_e += "&tipo=%s" % (tipo_materia)
args_e += "&tramitacao__unidade_tramitacao_local=%s" % ( args_e += "&tramitacao__unidade_tramitacao_local=%s" % (
unidade_local_tramitacao) unidade_local_tramitacao)
args_e += "&tramitacao__status=%s" % (status_tramitacao) args_e += "&tramitacao__status=%s" % (status_tramitacao)
args_e += "&salvar=%s" % ('Pesquisar') args_e += "&salvar=%s" % ('Pesquisar')

32
sapl/redireciona_urls/urls.py

@ -1,24 +1,18 @@
from .apps import AppConfig
from .views import (
RedirecionaAtasList,
RedirecionaComissao,
RedirecionaHistoricoTramitacoesList,
RedirecionaMateriaLegislativaDetail,
RedirecionaMateriaLegislativaList,
RedirecionaMateriasPorAnoAutorTipo,
RedirecionaMateriasPorAutor,
RedirecionaMesaDiretoraView,
RedirecionaNormasJuridicasDetail,
RedirecionaNormasJuridicasList,
RedirecionaParlamentar,
RedirecionaPautaSessao,
RedirecionaPresencaParlamentares,
RedirecionaRelatoriosList,
RedirecionaRelatoriosMateriasEmTramitacaoList,
RedirecionaSessaoPlenaria,
RedirecionaSAPLIndex)
from django.conf.urls import url from django.conf.urls import url
from .apps import AppConfig
from .views import (RedirecionaAtasList, RedirecionaComissao,
RedirecionaHistoricoTramitacoesList,
RedirecionaMateriaLegislativaDetail,
RedirecionaMateriaLegislativaList,
RedirecionaMateriasPorAnoAutorTipo,
RedirecionaMateriasPorAutor, RedirecionaMesaDiretoraView,
RedirecionaNormasJuridicasDetail,
RedirecionaNormasJuridicasList, RedirecionaParlamentar,
RedirecionaPautaSessao, RedirecionaPresencaParlamentares,
RedirecionaRelatoriosList,
RedirecionaRelatoriosMateriasEmTramitacaoList,
RedirecionaSAPLIndex, RedirecionaSessaoPlenaria)
app_name = AppConfig.name app_name = AppConfig.name

227
sapl/relatorios/templates/pdf_capa_processo_preparar_pysc.py

@ -1,138 +1,149 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
data=DateTime().strftime('%d/%m/%Y') data = DateTime().strftime('%d/%m/%Y')
#Abaixo é gerada a string para o rodapé da página # Abaixo é gerada a string para o rodapé da página
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
if len(casa["num_cep"])==8: cod_localidade=casa["cod_localidade"])
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] if len(casa["num_cep"]) == 8:
cep = casa["num_cep"][:4] + "-" + casa["num_cep"][5:]
else: else:
cep="" cep = ""
linha1=casa["end_casa"] linha1 = casa["end_casa"]
if cep!="": if cep != "":
if casa["end_casa"]!="" and casa["end_casa"]!=None: if casa["end_casa"] != "" and casa["end_casa"] != None:
linha1 = linha1 + " - " linha1 = linha1 + " - "
linha1 = linha1 + "CEP "+cep linha1 = linha1 + "CEP " + cep
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: if localidade[0].nom_localidade != "" and localidade[0].nom_localidade != None:
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf linha1 = linha1 + " - " + \
if casa["num_tel"]!="" and casa["num_tel"]!=None: localidade[0].nom_localidade + " " + localidade[0].sgl_uf
linha1 = linha1 + " Tel.: "+ casa["num_tel"] if casa["num_tel"] != "" and casa["num_tel"] != None:
linha1 = linha1 + " Tel.: " + casa["num_tel"]
linha2=casa["end_web_casa"]
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: linha2 = casa["end_web_casa"]
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: if casa["end_email_casa"] != "" and casa["end_email_casa"] != None:
linha2 = linha2 + " - " if casa["end_web_casa"] != "" and casa["end_web_casa"] != None:
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] linha2 = linha2 + " - "
linha2 = linha2 + "E-mail: " + casa["end_email_casa"]
data_emissao=DateTime().strftime("%d/%m/%Y")
rodape=[linha1,linha2,data_emissao] data_emissao = DateTime().strftime("%d/%m/%Y")
rodape = [linha1, linha2, data_emissao]
#Por fim, gera-se as entradas para o cabeçalho
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") # Por fim, gera-se as entradas para o cabeçalho
estados = context.zsql.localidade_obter_zsql(tip_localidade="u")
for uf in estados: for uf in estados:
if localidade[0].sgl_uf==uf.sgl_uf: if localidade[0].sgl_uf == uf.sgl_uf:
nom_estado=uf.nom_localidade nom_estado = uf.nom_localidade
break break
cabecalho={} cabecalho = {}
cabecalho["nom_casa"]=casa["nom_casa"] cabecalho["nom_casa"] = casa["nom_casa"]
cabecalho["nom_estado"]="Estado de "+nom_estado cabecalho["nom_estado"] = "Estado de " + nom_estado
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados # Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados
protocolos=[] protocolos = []
REQUEST=context.REQUEST REQUEST = context.REQUEST
for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'], for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'],
cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST['txt_ano_protocolo'], cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST[
tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST['rad_tip_processo'], 'txt_ano_protocolo'],
tip_materia=REQUEST['lst_tip_materia'], des_assunto=REQUEST['txt_assunto'], tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST[
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST['txa_txt_interessado'], 'rad_tip_processo'],
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']): tip_materia=REQUEST[
dic={} 'lst_tip_materia'], des_assunto=REQUEST['txt_assunto'],
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST[
'txa_txt_interessado'],
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']):
dic = {}
dic['titulo']=str(protocolo.cod_protocolo) dic['titulo'] = str(protocolo.cod_protocolo)
dic['ano']=str(protocolo.ano_protocolo) dic['ano'] = str(protocolo.ano_protocolo)
dic['data']=context.pysc.iso_to_port_pysc(protocolo.dat_protocolo)+' - '+protocolo.hor_protocolo dic['data'] = context.pysc.iso_to_port_pysc(
protocolo.dat_protocolo) + ' - ' + protocolo.hor_protocolo
dic['txt_assunto']=protocolo.txt_assunto_ementa dic['txt_assunto'] = protocolo.txt_assunto_ementa
dic['txt_interessado']=protocolo.txt_interessado dic['txt_interessado'] = protocolo.txt_interessado
dic['nom_autor'] = " " dic['nom_autor'] = " "
if protocolo.cod_autor!=None: if protocolo.cod_autor != None:
for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor): for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor):
if autor.des_tipo_autor=='Parlamentar': if autor.des_tipo_autor == 'Parlamentar':
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar):
dic['nom_autor']=parlamentar.nom_completo dic['nom_autor'] = parlamentar.nom_completo
elif autor.des_tipo_autor=='Comissao': elif autor.des_tipo_autor == 'Comissao':
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao):
dic['nom_autor']=comissao.nom_comissao dic['nom_autor'] = comissao.nom_comissao
else: else:
dic['nom_autor']=autor.nom_autor dic['nom_autor'] = autor.nom_autor
else: else:
dic['nom_autor']=protocolo.txt_interessado dic['nom_autor'] = protocolo.txt_interessado
dic['natureza']='' dic['natureza'] = ''
if protocolo.tip_processo==0: if protocolo.tip_processo == 0:
dic['natureza']='Administrativo' dic['natureza'] = 'Administrativo'
if protocolo.tip_processo==1: if protocolo.tip_processo == 1:
dic['natureza']='Legislativo' dic['natureza'] = 'Legislativo'
dic['ident_processo']=protocolo.des_tipo_materia or protocolo.des_tipo_documento
dic['sgl_processo']=protocolo.sgl_tipo_materia or protocolo.sgl_tipo_documento dic['ident_processo'] = protocolo.des_tipo_materia or protocolo.des_tipo_documento
dic['num_materia']='' dic['sgl_processo'] = protocolo.sgl_tipo_materia or protocolo.sgl_tipo_documento
for materia in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo,ano_ident_basica=protocolo.ano_protocolo):
dic['num_materia']=str(materia.num_ident_basica)+'/'+ str(materia.ano_ident_basica)
dic['num_documento']='' dic['num_materia'] = ''
for documento in context.zsql.documento_administrativo_obter_zsql(num_protocolo=protocolo.cod_protocolo): for materia in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo, ano_ident_basica=protocolo.ano_protocolo):
dic['num_documento']=str(documento.num_documento)+'/'+ str(documento.ano_documento) dic['num_materia'] = str(materia.num_ident_basica) + \
'/' + str(materia.ano_ident_basica)
dic['num_processo']=dic['num_materia'] or dic['num_documento'] dic['num_documento'] = ''
for documento in context.zsql.documento_administrativo_obter_zsql(num_protocolo=protocolo.cod_protocolo):
dic['num_documento'] = str(
documento.num_documento) + '/' + str(documento.ano_documento)
dic['numeracao']='' dic['num_processo'] = dic['num_materia'] or dic['num_documento']
for materia_num in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo,ano_ident_basica=protocolo.ano_protocolo):
for numera in context.zsql.numeracao_obter_zsql(cod_materia=materia_num.cod_materia,ind_excluido=0):
dic['numeracao']='PROCESSO N° ' +str(numera.num_materia)+'/'+ str(numera.ano_materia)
dic['anulado']='' dic['numeracao'] = ''
if protocolo.ind_anulado==1: for materia_num in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo, ano_ident_basica=protocolo.ano_protocolo):
dic['anulado']='Nulo' for numera in context.zsql.numeracao_obter_zsql(cod_materia=materia_num.cod_materia, ind_excluido=0):
dic['numeracao'] = 'PROCESSO N° ' + \
str(numera.num_materia) + '/' + str(numera.ano_materia)
protocolos.append(dic) dic['anulado'] = ''
if protocolo.ind_anulado == 1:
dic['anulado'] = 'Nulo'
filtro={} # Dicionário que conterá os dados do filtro protocolos.append(dic)
filtro = {} # Dicionário que conterá os dados do filtro
# Atribuições diretas do REQUEST # Atribuições diretas do REQUEST
filtro['numero']=REQUEST.txt_num_protocolo filtro['numero'] = REQUEST.txt_num_protocolo
filtro['ano']=REQUEST.txt_ano_protocolo filtro['ano'] = REQUEST.txt_ano_protocolo
filtro['tipo_protocolo']=REQUEST.rad_tip_protocolo filtro['tipo_protocolo'] = REQUEST.rad_tip_protocolo
filtro['tipo_processo']=REQUEST.rad_tip_processo filtro['tipo_processo'] = REQUEST.rad_tip_processo
filtro['assunto']=REQUEST.txt_assunto filtro['assunto'] = REQUEST.txt_assunto
filtro['autor']=REQUEST.hdn_cod_autor filtro['autor'] = REQUEST.hdn_cod_autor
filtro['interessado']=REQUEST.txa_txt_interessado filtro['interessado'] = REQUEST.txa_txt_interessado
sessao=session.id sessao = session.id
caminho = context.pdf_capa_processo_gerar(sessao,imagem,data,protocolos,cabecalho,rodape,filtro) caminho = context.pdf_capa_processo_gerar(
if caminho=='aviso': sessao, imagem, data, protocolos, cabecalho, rodape, filtro)
return response.redirect('mensagem_emitir_proc') if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

456
sapl/relatorios/templates/pdf_detalhe_materia_gerar.py

@ -11,326 +11,402 @@ import time
from trml2pdf import parseString from trml2pdf import parseString
def cabecalho(dic_inf_basicas,imagem): def cabecalho(dic_inf_basicas, imagem):
""" """
Função que gera o código rml do cabeçalho da página Função que gera o código rml do cabeçalho da página
""" """
tmp='' tmp = ''
tmp+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' tmp += '\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n'
tmp+='\t\t\t\t<lines>2cm 24.5cm 19cm 24.5cm</lines>\n' tmp += '\t\t\t\t<lines>2cm 24.5cm 19cm 24.5cm</lines>\n'
if dic_inf_basicas['nom_camara']!="" and dic_inf_basicas['nom_camara']!=None: if dic_inf_basicas['nom_camara'] != "" and dic_inf_basicas['nom_camara'] != None:
tmp+='\t\t\t\t<setFont name="Helvetica" size="16"/>\n' tmp += '\t\t\t\t<setFont name="Helvetica" size="16"/>\n'
tmp+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_inf_basicas['nom_camara'] + '</drawString>\n' tmp += '\t\t\t\t<drawString x="5cm" y="27.2cm">' + \
tmp+='\t\t\t\t<setFont name="Helvetica" size="14"/>\n' dic_inf_basicas['nom_camara'] + '</drawString>\n'
tmp+='\t\t\t\t<drawString x="5cm" y="26.5cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' tmp += '\t\t\t\t<setFont name="Helvetica" size="14"/>\n'
tmp += '\t\t\t\t<drawString x="5cm" y="26.5cm">Sistema de Apoio ao Processo Legislativo</drawString>\n'
if str(dic_inf_basicas['nom_projeto']) != "" and str(dic_inf_basicas['nom_projeto']) != None: if str(dic_inf_basicas['nom_projeto']) != "" and str(dic_inf_basicas['nom_projeto']) != None:
tmp+='\t\t\t\t<setFont name="Helvetica" size="15"/>\n' tmp += '\t\t\t\t<setFont name="Helvetica" size="15"/>\n'
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">' + str(dic_inf_basicas['nom_projeto']) + '</drawCentredString>\n' tmp += '\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">' + \
str(dic_inf_basicas['nom_projeto']) + '</drawCentredString>\n'
if str(dic_inf_basicas['cod_projeto']) != "" and str(dic_inf_basicas['cod_projeto']) != None: if str(dic_inf_basicas['cod_projeto']) != "" and str(dic_inf_basicas['cod_projeto']) != None:
tmp+='\t\t\t\t<setFont name="Helvetica" size="15"/>\n' tmp += '\t\t\t\t<setFont name="Helvetica" size="15"/>\n'
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="24.7cm">' + str(dic_inf_basicas['cod_projeto']) + '</drawCentredString>\n' tmp += '\t\t\t\t<drawCentredString x="10.5cm" y="24.7cm">' + \
str(dic_inf_basicas['cod_projeto']) + '</drawCentredString>\n'
return tmp return tmp
def rodape(dic_rodape): def rodape(dic_rodape):
""" """
Função que gera o codigo rml do rodape da pagina. Função que gera o codigo rml do rodape da pagina.
""" """
tmp='' tmp = ''
linha1 = dic_rodape['end_casa'] linha1 = dic_rodape['end_casa']
if dic_rodape['end_casa']!="" and dic_rodape['end_casa']!=None: if dic_rodape['end_casa'] != "" and dic_rodape['end_casa'] != None:
linha1 = linha1 + " - " linha1 = linha1 + " - "
if dic_rodape['num_cep']!="" and dic_rodape['num_cep']!=None: if dic_rodape['num_cep'] != "" and dic_rodape['num_cep'] != None:
linha1 = linha1 + "CEP " + dic_rodape['num_cep'] linha1 = linha1 + "CEP " + dic_rodape['num_cep']
if dic_rodape['nom_localidade']!="" and dic_rodape['nom_localidade']!=None: if dic_rodape['nom_localidade'] != "" and dic_rodape['nom_localidade'] != None:
linha1 = linha1 + " - " + dic_rodape['nom_localidade'] linha1 = linha1 + " - " + dic_rodape['nom_localidade']
if dic_rodape['sgl_uf']!="" and dic_rodape['sgl_uf']!=None: if dic_rodape['sgl_uf'] != "" and dic_rodape['sgl_uf'] != None:
inha1 = linha1 + " " + dic_rodape['sgl_uf'] inha1 = linha1 + " " + dic_rodape['sgl_uf']
if dic_rodape['num_tel']!="" and dic_rodape['num_tel']!=None: if dic_rodape['num_tel'] != "" and dic_rodape['num_tel'] != None:
linha1 = linha1 + " Tel: "+ dic_rodape['num_tel'] linha1 = linha1 + " Tel: " + dic_rodape['num_tel']
if dic_rodape['end_web_casa']!="" and dic_rodape['end_web_casa']!=None: if dic_rodape['end_web_casa'] != "" and dic_rodape['end_web_casa'] != None:
linha2 = dic_rodape['end_web_casa'] linha2 = dic_rodape['end_web_casa']
if dic_rodape['end_email_casa']!="" and dic_rodape['end_email_casa']!=None: if dic_rodape['end_email_casa'] != "" and dic_rodape['end_email_casa'] != None:
linha2 = linha2 + " - E-mail: " + dic_rodape['end_email_casa'] linha2 = linha2 + " - E-mail: " + dic_rodape['end_email_casa']
if dic_rodape['data_emissao']!="" and dic_rodape['data_emissao']!=None: if dic_rodape['data_emissao'] != "" and dic_rodape['data_emissao'] != None:
data_emissao = dic_rodape['data_emissao'] data_emissao = dic_rodape['data_emissao']
tmp+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' tmp += '\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n'
tmp+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' tmp += '\t\t\t\t<setFont name="Helvetica" size="8"/>\n'
tmp+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + data_emissao + '</drawString>\n' tmp += '\t\t\t\t<drawString x="2cm" y="3.3cm">' + data_emissao + '</drawString>\n'
tmp+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' tmp += '\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n'
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + linha1 + '</drawCentredString>\n' tmp += '\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + \
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + linha2 + '</drawCentredString>\n' linha1 + '</drawCentredString>\n'
tmp += '\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + \
linha2 + '</drawCentredString>\n'
return tmp return tmp
def paraStyle(): def paraStyle():
"""Função que gera o código rml que define o estilo dos parágrafos""" """Função que gera o código rml que define o estilo dos parágrafos"""
tmp='' tmp = ''
tmp+='\t<stylesheet>\n' tmp += '\t<stylesheet>\n'
tmp+='\t\t<blockTableStyle id="Standard_Outline">\n' tmp += '\t\t<blockTableStyle id="Standard_Outline">\n'
tmp+='\t\t\t<blockAlignment value="LEFT"/>\n' tmp += '\t\t\t<blockAlignment value="LEFT"/>\n'
tmp+='\t\t\t<blockValign value="TOP"/>\n' tmp += '\t\t\t<blockValign value="TOP"/>\n'
tmp+='\t\t</blockTableStyle>\n' tmp += '\t\t</blockTableStyle>\n'
tmp+='\t\t<initialize>\n' tmp += '\t\t<initialize>\n'
tmp+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' tmp += '\t\t\t<paraStyle name="all" alignment="justify"/>\n'
tmp+='\t\t</initialize>\n' tmp += '\t\t</initialize>\n'
#titulo do parágrafo: é por default centralizado # titulo do parágrafo: é por default centralizado
tmp+='\t\t<paraStyle name="style.Title" fontName="Helvetica" fontSize="11" leading="13" alignment="RIGHT"/>\n' tmp += '\t\t<paraStyle name="style.Title" fontName="Helvetica" fontSize="11" leading="13" alignment="RIGHT"/>\n'
tmp+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="12.0" textColor="gray" leading="14" spaceBefore="6" alignment="LEFT"/>\n' tmp += '\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="12.0" textColor="gray" leading="14" spaceBefore="6" alignment="LEFT"/>\n'
tmp+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="10" alignment="LEFT"/>\n' tmp += '\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="10" alignment="LEFT"/>\n'
tmp+='\t\t<paraStyle name="texto_projeto" fontName="Helvetica" fontSize="12.0" leading="12" spaceAfter="10" alignment="JUSTIFY"/>\n' tmp += '\t\t<paraStyle name="texto_projeto" fontName="Helvetica" fontSize="12.0" leading="12" spaceAfter="10" alignment="JUSTIFY"/>\n'
tmp+='\t</stylesheet>\n' tmp += '\t</stylesheet>\n'
return tmp return tmp
def inf_basicas(dic_inf_basicas): def inf_basicas(dic_inf_basicas):
""" """
Função que gera o código rml das funções básicas do relatório Função que gera o código rml das funções básicas do relatório
""" """
tmp='' tmp = ''
#Texto do projeto # Texto do projeto
texto_projeto = str(dic_inf_basicas['texto_projeto']) texto_projeto = str(dic_inf_basicas['texto_projeto'])
if texto_projeto != "" and texto_projeto != None : if texto_projeto != "" and texto_projeto != None:
tmp+='\t\t<para style="texto_projeto">' + texto_projeto.replace('&','&amp;') + '</para>\n' tmp += '\t\t<para style="texto_projeto">' + \
texto_projeto.replace('&', '&amp;') + '</para>\n'
#início das informações básicas # início das informações básicas
tmp+='\t\t<para style="P1">Informações Básicas</para>\n' tmp += '\t\t<para style="P1">Informações Básicas</para>\n'
if str(dic_inf_basicas['apresentada']) != "" and str(dic_inf_basicas['apresentada']) != None: if str(dic_inf_basicas['apresentada']) != "" and str(dic_inf_basicas['apresentada']) != None:
tmp+='\t\t<para style="P2"><b>Apresentada em: </b> ' + str(dic_inf_basicas['apresentada']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Apresentada em: </b> ' + \
str(dic_inf_basicas['apresentada']) + '</para>\n'
if str(dic_inf_basicas['formato']) != "" and str(dic_inf_basicas['formato']) != None: if str(dic_inf_basicas['formato']) != "" and str(dic_inf_basicas['formato']) != None:
tmp+='\t\t<para style="P2"><b>Formato: </b> ' + str(dic_inf_basicas['formato']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Formato: </b> ' + \
str(dic_inf_basicas['formato']) + '</para>\n'
if dic_inf_basicas['publicada']==0: if dic_inf_basicas['publicada'] == 0:
tmp+='\t\t<para style="P2"><b>Publicada:</b> Não</para>\n' tmp += '\t\t<para style="P2"><b>Publicada:</b> Não</para>\n'
else: else:
tmp+='\t\t<para style="P2"><b>Publicada:</b> Sim</para>\n' tmp += '\t\t<para style="P2"><b>Publicada:</b> Sim</para>\n'
if str(dic_inf_basicas['objeto']) != "" and str(dic_inf_basicas['objeto']) != None: if str(dic_inf_basicas['objeto']) != "" and str(dic_inf_basicas['objeto']) != None:
tmp+='\t\t<para style="P2"><b>Objeto: </b> ' + str(dic_inf_basicas['objeto']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Objeto: </b> ' + \
str(dic_inf_basicas['objeto']) + '</para>\n'
if dic_inf_basicas['tramitacao']==0: if dic_inf_basicas['tramitacao'] == 0:
tmp+='\t\t<para style="P2"><b>Tramitação:</b> Não</para>\n' tmp += '\t\t<para style="P2"><b>Tramitação:</b> Não</para>\n'
else: else:
tmp+='\t\t<para style="P2"><b>Tramitação:</b> Sim</para>\n' tmp += '\t\t<para style="P2"><b>Tramitação:</b> Sim</para>\n'
if str(dic_inf_basicas['reg_tramitacao']) != "" and str(dic_inf_basicas['reg_tramitacao']) != None: if str(dic_inf_basicas['reg_tramitacao']) != "" and str(dic_inf_basicas['reg_tramitacao']) != None:
tmp+='\t\t<para style="P2"><b>Regime: </b> ' + str(dic_inf_basicas['reg_tramitacao']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Regime: </b> ' + \
str(dic_inf_basicas['reg_tramitacao']) + '</para>\n'
if str(dic_inf_basicas['prazo']) != "" and str(dic_inf_basicas['prazo']) != None: if str(dic_inf_basicas['prazo']) != "" and str(dic_inf_basicas['prazo']) != None:
tmp+='\t\t<para style="P2"><b>Dias de prazo: </b> ' + str(dic_inf_basicas['prazo']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Dias de prazo: </b> ' + \
str(dic_inf_basicas['prazo']) + '</para>\n'
if str(dic_inf_basicas['fim_prazo']) != "" and str(dic_inf_basicas['fim_prazo']) != None: if str(dic_inf_basicas['fim_prazo']) != "" and str(dic_inf_basicas['fim_prazo']) != None:
tmp+='\t\t<para style="P2"><b>Data do fim do prazo: </b> ' + str(dic_inf_basicas['fim_prazo']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Data do fim do prazo: </b> ' + \
str(dic_inf_basicas['fim_prazo']) + '</para>\n'
if dic_inf_basicas['mat_complementar'] == 0: if dic_inf_basicas['mat_complementar'] == 0:
tmp+='\t\t<para style="P2"><b>Matéria Complementar:</b> Não</para>\n' tmp += '\t\t<para style="P2"><b>Matéria Complementar:</b> Não</para>\n'
else: else:
tmp+='\t\t<para style="P2"><b>Matéria Complementar:</b> Sim</para>\n' tmp += '\t\t<para style="P2"><b>Matéria Complementar:</b> Sim</para>\n'
if dic_inf_basicas['polemica'] == 0: if dic_inf_basicas['polemica'] == 0:
tmp+='\t\t<para style="P2"><b>Polêmica:</b> Não</para>\n' tmp += '\t\t<para style="P2"><b>Polêmica:</b> Não</para>\n'
else: else:
tmp+='\t\t<para style="P2"><b>Polêmica:</b> Sim</para>\n' tmp += '\t\t<para style="P2"><b>Polêmica:</b> Sim</para>\n'
apelido = dic_inf_basicas['apelido'] apelido = dic_inf_basicas['apelido']
if apelido != "" and apelido != None: if apelido != "" and apelido != None:
tmp+='\t\t<para style="P2"><b>Apelido: </b> ' + apelido.replace('&','&amp;') + '</para>\n' tmp += '\t\t<para style="P2"><b>Apelido: </b> ' + \
apelido.replace('&', '&amp;') + '</para>\n'
indexacao = dic_inf_basicas['indexacao'] indexacao = dic_inf_basicas['indexacao']
if indexacao != "" and indexacao != None: if indexacao != "" and indexacao != None:
tmp+='\t\t<para style="P2"><b>Indexação: </b> ' + indexacao.replace('&','&amp;') + '</para>\n' tmp += '\t\t<para style="P2"><b>Indexação: </b> ' + \
indexacao.replace('&', '&amp;') + '</para>\n'
observacao = dic_inf_basicas['observacao'] observacao = dic_inf_basicas['observacao']
if observacao != "" and observacao != None: if observacao != "" and observacao != None:
tmp+='\t\t<para style="P2"><b>Observação: </b> ' + observacao.replace('&','&amp;') + '</para>\n' tmp += '\t\t<para style="P2"><b>Observação: </b> ' + \
observacao.replace('&', '&amp;') + '</para>\n'
return tmp return tmp
def orig_externa(dic_orig_externa): def orig_externa(dic_orig_externa):
""" """
Função que gera o código rml da origem externa Função que gera o código rml da origem externa
""" """
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Origem Externa</para>\n' tmp += '\t\t<para style="P1">Origem Externa</para>\n'
try: try:
if dic_orig_externa['local'] != "" and dic_orig_externa['local'] != None: if dic_orig_externa['local'] != "" and dic_orig_externa['local'] != None:
tmp+='\t\t<para style="P2"><b>Local:</b> ' + dic_orig_externa['local'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Local:</b> ' + \
dic_orig_externa['local'] + '</para>\n'
if dic_orig_externa['data'] != "" and dic_orig_externa['data'] != None: if dic_orig_externa['data'] != "" and dic_orig_externa['data'] != None:
tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_orig_externa['data'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Data:</b> ' + \
dic_orig_externa['data'] + '</para>\n'
if dic_orig_externa['tipo'] != "" and dic_orig_externa['tipo'] != None: if dic_orig_externa['tipo'] != "" and dic_orig_externa['tipo'] != None:
tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_orig_externa['tipo'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Tipo:</b> ' + \
dic_orig_externa['tipo'] + '</para>\n'
if dic_orig_externa['numero_ano'] != "" and dic_orig_externa['numero_ano'] != None: if dic_orig_externa['numero_ano'] != "" and dic_orig_externa['numero_ano'] != None:
tmp+='\t\t<para style="P2"><b>Número/Ano:</b> ' + dic_orig_externa['numero_ano'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Número/Ano:</b> ' + \
except: pass dic_orig_externa['numero_ano'] + '</para>\n'
except:
pass
return tmp return tmp
def mat_anexadas(lst_mat_anexadas): def mat_anexadas(lst_mat_anexadas):
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Matérias Anexadas</para>\n' tmp += '\t\t<para style="P1">Matérias Anexadas</para>\n'
for dic_mat in lst_mat_anexadas: for dic_mat in lst_mat_anexadas:
if dic_mat['nom_mat']!="" and dic_mat['nom_mat']!= None: if dic_mat['nom_mat'] != "" and dic_mat['nom_mat'] != None:
tmp+='\t\t<para style="P2"><b>Nome da matéria:</b> ' + dic_mat['nom_mat'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Nome da matéria:</b> ' + \
tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_mat['data'] + '</para>\n' dic_mat['nom_mat'] + '</para>\n'
tmp+='\t\t<para style="P2"><b>Data final:</b> ' + str(dic_mat['data_fim']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Data:</b> ' + \
dic_mat['data'] + '</para>\n'
tmp += '\t\t<para style="P2"><b>Data final:</b> ' + \
str(dic_mat['data_fim']) + '</para>\n'
return tmp return tmp
def autoria(lst_autoria): def autoria(lst_autoria):
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Autores</para>\n' tmp += '\t\t<para style="P1">Autores</para>\n'
for dic_autor in lst_autoria: for dic_autor in lst_autoria:
if dic_autor['nom_autor'] != "" and dic_autor['nom_autor'] != None: if dic_autor['nom_autor'] != "" and dic_autor['nom_autor'] != None:
tmp+='\t\t<para style="P2"><b>Nome do Autor:</b> ' + dic_autor['nom_autor'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Nome do Autor:</b> ' + \
dic_autor['nom_autor'] + '</para>\n'
if dic_autor['nom_autor'] != "" and dic_autor['cargo'] != None: if dic_autor['nom_autor'] != "" and dic_autor['cargo'] != None:
tmp+='\t\t<para style="P2"><b>Cargo:</b> ' + dic_autor['cargo'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Cargo:</b> ' + \
dic_autor['cargo'] + '</para>\n'
if dic_autor['nom_autor'] != "" and dic_autor['tipo'] != None: if dic_autor['nom_autor'] != "" and dic_autor['tipo'] != None:
tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_autor['tipo'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Tipo:</b> ' + \
dic_autor['tipo'] + '</para>\n'
return tmp return tmp
def despachos_iniciais(lst_des_iniciais): def despachos_iniciais(lst_des_iniciais):
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Despachos Iniciais</para>\n' tmp += '\t\t<para style="P1">Despachos Iniciais</para>\n'
for dic_dados in lst_des_iniciais: for dic_dados in lst_des_iniciais:
if dic_dados['nom_comissao']==None: if dic_dados['nom_comissao'] == None:
dic_dados['nom_comissao']=" " dic_dados['nom_comissao'] = " "
tmp+='\t\t<para style="P2"><b>Nome da comissão:</b> ' + dic_dados['nom_comissao'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Nome da comissão:</b> ' + \
dic_dados['nom_comissao'] + '</para>\n'
return tmp return tmp
def tramitacoes(dic_tramitacoes): def tramitacoes(dic_tramitacoes):
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Última Tramitação</para>\n' tmp += '\t\t<para style="P1">Última Tramitação</para>\n'
try: try:
tmp+='\t\t<para style="P2"><b>Data Ação:</b> ' + str(dic_tramitacoes['data']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Data Ação:</b> ' + \
tmp+='\t\t<para style="P2"><b>Unidade Local:</b> ' + dic_tramitacoes['unidade'] + '</para>\n' str(dic_tramitacoes['data']) + '</para>\n'
tmp+='\t\t<para style="P2"><b>Encaminhada em:</b> ' + str(dic_tramitacoes['data_enc']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Unidade Local:</b> ' + \
tmp+='\t\t<para style="P2"><b>Destino:</b> ' + dic_tramitacoes['destino'] + '</para>\n' dic_tramitacoes['unidade'] + '</para>\n'
tmp+='\t\t<para style="P2"><b>Turno:</b> ' + dic_tramitacoes['turno'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Encaminhada em:</b> ' + \
tmp+='\t\t<para style="P2"><b>Status:</b> ' + dic_tramitacoes['status'] + '</para>\n' str(dic_tramitacoes['data_enc']) + '</para>\n'
if dic_tramitacoes['urgente']==0: tmp += '\t\t<para style="P2"><b>Destino:</b> ' + \
tmp+='\t\t<para style="P2"><b>Urgente:</b> Não</para>\n' dic_tramitacoes['destino'] + '</para>\n'
else: tmp += '\t\t<para style="P2"><b>Turno:</b> ' + \
tmp+='\t\t<para style="P2"><b>Urgente:</b> Sim</para>\n' dic_tramitacoes['turno'] + '</para>\n'
tmp += '\t\t<para style="P2"><b>Status:</b> ' + \
tmp+='\t\t<para style="P2"><b>Data do fim do prazo:</b> ' + str(dic_tramitacoes['data_fim']) + '</para>\n' dic_tramitacoes['status'] + '</para>\n'
if dic_tramitacoes['texto_acao'] != "" and dic_tramitacoes['texto_acao'] != None : if dic_tramitacoes['urgente'] == 0:
tmp+='\t\t<para style="P2"><b>Texto da Ação:</b> ' + dic_tramitacoes['texto_acao'].replace('&','&amp;') + '</para>\n' tmp += '\t\t<para style="P2"><b>Urgente:</b> Não</para>\n'
else:
except: pass tmp += '\t\t<para style="P2"><b>Urgente:</b> Sim</para>\n'
tmp += '\t\t<para style="P2"><b>Data do fim do prazo:</b> ' + \
str(dic_tramitacoes['data_fim']) + '</para>\n'
if dic_tramitacoes['texto_acao'] != "" and dic_tramitacoes['texto_acao'] != None:
tmp += '\t\t<para style="P2"><b>Texto da Ação:</b> ' + \
dic_tramitacoes['texto_acao'].replace(
'&', '&amp;') + '</para>\n'
except:
pass
return tmp return tmp
def relatorias(lst_relatorias): def relatorias(lst_relatorias):
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Relatorias</para>\n' tmp += '\t\t<para style="P1">Relatorias</para>\n'
for dic_comissao in lst_relatorias: for dic_comissao in lst_relatorias:
tmp+='\t\t<para style="P2"><b>Comissão:</b> ' + dic_comissao['nom_comissao'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Comissão:</b> ' + \
tmp+='\t\t<para style="P2"><b>Data Designação:</b> ' + str(dic_comissao['data_desig']) + '</para>\n' dic_comissao['nom_comissao'] + '</para>\n'
tmp+='\t\t<para style="P2"><b>Parlamentar:</b> ' + dic_comissao['parlamentar'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Data Designação:</b> ' + \
tmp+='\t\t<para style="P2"><b>Data Destituição:</b> ' + str(dic_comissao['data_dest']) + '</para>\n' str(dic_comissao['data_desig']) + '</para>\n'
tmp+='\t\t<para style="P2"><b>Motivo Fim Relatoria:</b> ' + dic_comissao['motivo'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Parlamentar:</b> ' + \
dic_comissao['parlamentar'] + '</para>\n'
tmp += '\t\t<para style="P2"><b>Data Destituição:</b> ' + \
str(dic_comissao['data_dest']) + '</para>\n'
tmp += '\t\t<para style="P2"><b>Motivo Fim Relatoria:</b> ' + \
dic_comissao['motivo'] + '</para>\n'
return tmp return tmp
def numeracoes(lst_numeracoes): def numeracoes(lst_numeracoes):
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Numerações</para>\n' tmp += '\t\t<para style="P1">Numerações</para>\n'
for dic_dados in lst_numeracoes: for dic_dados in lst_numeracoes:
tmp+='\t\t<para style="P2"><b>Nome:</b> ' + dic_dados['nome'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Nome:</b> ' + \
tmp+='\t\t<para style="P2"><b>Ano:</b> ' + str(dic_dados['ano']) + '</para>\n' dic_dados['nome'] + '</para>\n'
tmp += '\t\t<para style="P2"><b>Ano:</b> ' + \
str(dic_dados['ano']) + '</para>\n'
return tmp return tmp
def legislacoes_citadas(lst_leg_citadas): def legislacoes_citadas(lst_leg_citadas):
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Legislações Citadas</para>\n' tmp += '\t\t<para style="P1">Legislações Citadas</para>\n'
for dic_dados in lst_leg_citadas: for dic_dados in lst_leg_citadas:
tmp+='\t\t<para style="P2"><b>Tipo Norma:</b> ' + str(dic_dados['nome_lei']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Tipo Norma:</b> ' + \
tmp+='\t\t<para style="P2"><b>Disposição:</b> ' + str(dic_dados['disposicao']) + '</para>\n' str(dic_dados['nome_lei']) + '</para>\n'
tmp+='\t\t<para style="P2"><b>Parte:</b> ' + str(dic_dados['parte']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Disposição:</b> ' + \
tmp+='\t\t<para style="P2"><b>Livro:</b> ' + str(dic_dados['livro']) + '</para>\n' str(dic_dados['disposicao']) + '</para>\n'
tmp+='\t\t<para style="P2"><b>Tí­tulo:</b> ' + str(dic_dados['titulo']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Parte:</b> ' + \
tmp+='\t\t<para style="P2"><b>Capí­tulo:</b> ' + str(dic_dados['capitulo']) + '</para>\n' str(dic_dados['parte']) + '</para>\n'
tmp+='\t\t<para style="P2"><b>Seção:</b> ' + str(dic_dados['secao']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Livro:</b> ' + \
tmp+='\t\t<para style="P2"><b>Subseção:</b> ' + str(dic_dados['subsecao']) + '</para>\n' str(dic_dados['livro']) + '</para>\n'
tmp+='\t\t<para style="P2"><b>Artigo:</b> ' + str(dic_dados['artigo']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Tí­tulo:</b> ' + \
tmp+='\t\t<para style="P2"><b>Parágrafo:</b> ' + str(dic_dados['paragrafo']) + '</para>\n' str(dic_dados['titulo']) + '</para>\n'
tmp+='\t\t<para style="P2"><b>Inciso:</b> ' + str(dic_dados['inciso']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Capí­tulo:</b> ' + \
tmp+='\t\t<para style="P2"><b>Alí­nea:</b> ' + str(dic_dados['alinea']) + '</para>\n' str(dic_dados['capitulo']) + '</para>\n'
tmp+='\t\t<para style="P2"><b>Item:</b> ' + str(dic_dados['item']) + '</para>\n' tmp += '\t\t<para style="P2"><b>Seção:</b> ' + \
str(dic_dados['secao']) + '</para>\n'
tmp += '\t\t<para style="P2"><b>Subseção:</b> ' + \
str(dic_dados['subsecao']) + '</para>\n'
tmp += '\t\t<para style="P2"><b>Artigo:</b> ' + \
str(dic_dados['artigo']) + '</para>\n'
tmp += '\t\t<para style="P2"><b>Parágrafo:</b> ' + \
str(dic_dados['paragrafo']) + '</para>\n'
tmp += '\t\t<para style="P2"><b>Inciso:</b> ' + \
str(dic_dados['inciso']) + '</para>\n'
tmp += '\t\t<para style="P2"><b>Alí­nea:</b> ' + \
str(dic_dados['alinea']) + '</para>\n'
tmp += '\t\t<para style="P2"><b>Item:</b> ' + \
str(dic_dados['item']) + '</para>\n'
return tmp return tmp
def documentos_acessorios(lst_acessorios): def documentos_acessorios(lst_acessorios):
tmp='' tmp = ''
tmp+='\t\t<para style="P1">Documentos Acessórios</para>\n' tmp += '\t\t<para style="P1">Documentos Acessórios</para>\n'
for dic_dados in lst_acessorios: for dic_dados in lst_acessorios:
if dic_dados['tipo']!=None: if dic_dados['tipo'] != None:
tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_dados['tipo'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Tipo:</b> ' + \
dic_dados['tipo'] + '</para>\n'
if dic_dados['nome']!=None:
tmp+='\t\t<para style="P2"><b>Nome:</b> ' + dic_dados['nome'] + '</para>\n' if dic_dados['nome'] != None:
tmp += '\t\t<para style="P2"><b>Nome:</b> ' + \
tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_dados['data'] + '</para>\n' dic_dados['nome'] + '</para>\n'
if dic_dados['autor']!=None:
tmp+='\t\t<para style="P2"><b>Autor:</b> ' + dic_dados['autor'] + '</para>\n' tmp += '\t\t<para style="P2"><b>Data:</b> ' + \
dic_dados['data'] + '</para>\n'
if dic_dados['ementa']!=None: if dic_dados['autor'] != None:
tmp+='\t\t<para style="P2"><b>Ementa:</b> ' + dic_dados['ementa'].replace('&','&amp;') + '</para>\n' tmp += '\t\t<para style="P2"><b>Autor:</b> ' + \
if dic_dados['indexacao']!=None: dic_dados['autor'] + '</para>\n'
tmp+='\t\t<para style="P2"><b>Ementa:</b> ' + dic_dados['indexacao'].replace('&','&amp;') + '</para>\n'
if dic_dados['ementa'] != None:
tmp += '\t\t<para style="P2"><b>Ementa:</b> ' + \
dic_dados['ementa'].replace('&', '&amp;') + '</para>\n'
if dic_dados['indexacao'] != None:
tmp += '\t\t<para style="P2"><b>Ementa:</b> ' + \
dic_dados['indexacao'].replace('&', '&amp;') + '</para>\n'
return tmp return tmp
def principal(imagem, dic_rodape,dic_inf_basicas,dic_orig_externa,lst_mat_anexadas,lst_autoria,lst_des_iniciais,
dic_tramitacoes,lst_relatorias,lst_numeracoes,lst_leg_citadas,lst_acessorios,sessao=''): def principal(imagem, dic_rodape, dic_inf_basicas, dic_orig_externa, lst_mat_anexadas, lst_autoria, lst_des_iniciais,
dic_tramitacoes, lst_relatorias, lst_numeracoes, lst_leg_citadas, lst_acessorios, sessao=''):
""" """
Função principal responsável por chamar as funções que irão gerar o código rml apropriado Função principal responsável por chamar as funções que irão gerar o código rml apropriado
""" """
arquivoPdf=str(int(time.time()*100))+".pdf" arquivoPdf = str(int(time.time() * 100)) + ".pdf"
tmp='' tmp = ''
tmp+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' tmp += '<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n'
tmp+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' tmp += '<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n'
tmp+='<document filename="relatorio.pdf">\n' tmp += '<document filename="relatorio.pdf">\n'
tmp+='\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n' tmp += '\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n'
tmp+='\t\t<pageTemplate id="first">\n' tmp += '\t\t<pageTemplate id="first">\n'
tmp+='\t\t\t<pageGraphics>\n' tmp += '\t\t\t<pageGraphics>\n'
tmp+=cabecalho(dic_inf_basicas,imagem) tmp += cabecalho(dic_inf_basicas, imagem)
tmp+=rodape(dic_rodape) tmp += rodape(dic_rodape)
tmp+='\t\t\t</pageGraphics>\n' tmp += '\t\t\t</pageGraphics>\n'
tmp+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="20.5cm"/>\n' tmp += '\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="20.5cm"/>\n'
tmp+='\t\t</pageTemplate>\n' tmp += '\t\t</pageTemplate>\n'
tmp+='\t</template>\n' tmp += '\t</template>\n'
tmp+=paraStyle() tmp += paraStyle()
tmp+='\t<story>\n' tmp += '\t<story>\n'
tmp+=inf_basicas(dic_inf_basicas) tmp += inf_basicas(dic_inf_basicas)
tmp+=orig_externa(dic_orig_externa) tmp += orig_externa(dic_orig_externa)
tmp+=mat_anexadas(lst_mat_anexadas) tmp += mat_anexadas(lst_mat_anexadas)
tmp+=autoria(lst_autoria) tmp += autoria(lst_autoria)
tmp+=despachos_iniciais(lst_des_iniciais) tmp += despachos_iniciais(lst_des_iniciais)
tmp+=tramitacoes(dic_tramitacoes) tmp += tramitacoes(dic_tramitacoes)
tmp+=relatorias(lst_relatorias) tmp += relatorias(lst_relatorias)
tmp+=numeracoes(lst_numeracoes) tmp += numeracoes(lst_numeracoes)
tmp+=legislacoes_citadas(lst_leg_citadas) tmp += legislacoes_citadas(lst_leg_citadas)
tmp+=documentos_acessorios(lst_acessorios) tmp += documentos_acessorios(lst_acessorios)
tmp+='\t</story>\n' tmp += '\t</story>\n'
tmp+='</document>\n' tmp += '</document>\n'
tmp_pdf=parseString(tmp) tmp_pdf = parseString(tmp)
return tmp_pdf return tmp_pdf
# if hasattr(context.temp_folder,arquivoPdf): # if hasattr(context.temp_folder,arquivoPdf):
@ -339,9 +415,9 @@ def principal(imagem, dic_rodape,dic_inf_basicas,dic_orig_externa,lst_mat_anexad
# arq=context.temp_folder[arquivoPdf] # arq=context.temp_folder[arquivoPdf]
# arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') # arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf')
# # try: # # try:
# # tmp_pdf=parseString(unicode(tmp, 'utf-8')) # # tmp_pdf=parseString(unicode(tmp, 'utf-8'))
# # except: # # except:
# # tmp_pdf=parseString(unicode(tmp, 'utf-8')) # # tmp_pdf=parseString(unicode(tmp, 'utf-8'))
# return "/temp_folder/"+arquivoPdf # return "/temp_folder/"+arquivoPdf

457
sapl/relatorios/templates/pdf_detalhe_materia_preparar_pysc.py

@ -1,89 +1,94 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
cabecalho={} cabecalho = {}
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Abaixo é gerado o dic do rodapé da página (linha 7) # Abaixo é gerado o dic do rodapé da página (linha 7)
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
data_emissao= DateTime().strftime("%d/%m/%Y") cod_localidade=casa["cod_localidade"])
rodape= casa data_emissao = DateTime().strftime("%d/%m/%Y")
rodape['data_emissao']= data_emissao rodape = casa
rodape['data_emissao'] = data_emissao
inf_basicas_dic = {} inf_basicas_dic = {}
inf_basicas_dic['nom_camara']= casa['nom_casa'] inf_basicas_dic['nom_camara'] = casa['nom_casa']
REQUEST=context.REQUEST REQUEST = context.REQUEST
for local in context.zsql.localidade_obter_zsql(cod_localidade = casa['cod_localidade']): for local in context.zsql.localidade_obter_zsql(cod_localidade=casa['cod_localidade']):
rodape['nom_localidade']= " "+local.nom_localidade rodape['nom_localidade'] = " " + local.nom_localidade
rodape['sgl_uf']= local.sgl_uf rodape['sgl_uf'] = local.sgl_uf
orig_externa_dic = {} orig_externa_dic = {}
for materia in context.zsql.materia_obter_zsql(cod_materia=REQUEST['cod_materia']): for materia in context.zsql.materia_obter_zsql(cod_materia=REQUEST['cod_materia']):
#Abaixo é gerado os dados para o bloco Informações Básicas (ln 23) # Abaixo é gerado os dados para o bloco Informações Básicas (ln 23)
inf_basicas_dic['texto_projeto']= materia.txt_ementa inf_basicas_dic['texto_projeto'] = materia.txt_ementa
inf_basicas_dic['apresentada']= materia.dat_apresentacao inf_basicas_dic['apresentada'] = materia.dat_apresentacao
inf_basicas_dic['formato']= materia.tip_apresentacao inf_basicas_dic['formato'] = materia.tip_apresentacao
inf_basicas_dic['publicada']= materia.dat_publicacao inf_basicas_dic['publicada'] = materia.dat_publicacao
inf_basicas_dic['objeto']= materia.des_objeto inf_basicas_dic['objeto'] = materia.des_objeto
inf_basicas_dic['tramitacao']= materia.ind_tramitacao inf_basicas_dic['tramitacao'] = materia.ind_tramitacao
inf_basicas_dic['cod_projeto']= materia.sgl_tipo_materia+" "+ str(materia.num_ident_basica)+" de "+ str(materia.ano_ident_basica) inf_basicas_dic['cod_projeto'] = materia.sgl_tipo_materia + " " + \
inf_basicas_dic['nom_projeto']= materia.des_tipo_materia str(materia.num_ident_basica) + " de " + str(materia.ano_ident_basica)
inf_basicas_dic['nom_projeto'] = materia.des_tipo_materia
for tramitacao in context.zsql.regime_tramitacao_obter_zsql(cod_regime_tramitacao=materia.cod_regime_tramitacao):
# """#tratando possíveis erros""" for tramitacao in context.zsql.regime_tramitacao_obter_zsql(cod_regime_tramitacao=materia.cod_regime_tramitacao):
# if tramitacao.des_regime_tramitacao==None: tramitacao.des_regime_tramitacao="" # """#tratando possíveis erros"""
# if materia.num_dias_prazo==None: materia.num_dias_prazo="" # if tramitacao.des_regime_tramitacao==None: tramitacao.des_regime_tramitacao=""
# if materia.dat_fim_prazo==None: materia.dat_fim_prazo="" # if materia.num_dias_prazo==None: materia.num_dias_prazo=""
# if materia.ind_complementar==None: materia.ind_complementar="" # if materia.dat_fim_prazo==None: materia.dat_fim_prazo=""
# if materia.ind_polemica==None: materia.ind_polemica="" # if materia.ind_complementar==None: materia.ind_complementar=""
# if materia.nom_apelido==None: materia.nom_apelido="" # if materia.ind_polemica==None: materia.ind_polemica=""
# if materia.txt_indexacao==None: materia.txt_indexacao="" # if materia.nom_apelido==None: materia.nom_apelido=""
# if materia.txt_observacao==None: materia.txt_observacao="" # if materia.txt_indexacao==None: materia.txt_indexacao=""
# """#atribuindo valores""" # if materia.txt_observacao==None: materia.txt_observacao=""
inf_basicas_dic['reg_tramitacao']= tramitacao.des_regime_tramitacao # """#atribuindo valores"""
inf_basicas_dic['prazo']= materia.num_dias_prazo inf_basicas_dic['reg_tramitacao'] = tramitacao.des_regime_tramitacao
inf_basicas_dic['fim_prazo']= materia.dat_fim_prazo inf_basicas_dic['prazo'] = materia.num_dias_prazo
inf_basicas_dic['mat_complementar']= materia.ind_complementar inf_basicas_dic['fim_prazo'] = materia.dat_fim_prazo
inf_basicas_dic['polemica']= materia.ind_polemica inf_basicas_dic['mat_complementar'] = materia.ind_complementar
inf_basicas_dic['apelido']= materia.nom_apelido inf_basicas_dic['polemica'] = materia.ind_polemica
inf_basicas_dic['indexacao']= materia.txt_indexacao inf_basicas_dic['apelido'] = materia.nom_apelido
inf_basicas_dic['observacao']= materia.txt_observacao inf_basicas_dic['indexacao'] = materia.txt_indexacao
inf_basicas_dic['observacao'] = materia.txt_observacao
# #o bloco abaixo gera o dicionario da origem externa (ln 47) # #o bloco abaixo gera o dicionario da origem externa (ln 47)
for origem in context.zsql.origem_obter_zsql(cod_origem = materia.cod_local_origem_externa): for origem in context.zsql.origem_obter_zsql(cod_origem=materia.cod_local_origem_externa):
# #tratando possíveis erros # #tratando possíveis erros
# if origem.sgl_origem==None: origem.sgl_origem="" # if origem.sgl_origem==None: origem.sgl_origem=""
# if origem.nom_origem==None: origem.nom_origem="" # if origem.nom_origem==None: origem.nom_origem=""
# if materia.tip_origem_externa==None: materia.tip_origem_externa="" # if materia.tip_origem_externa==None: materia.tip_origem_externa=""
# if materia.dat_origem_externa==None: materia.dat_origem_externa="" # if materia.dat_origem_externa==None: materia.dat_origem_externa=""
# if materia.num_origem_externa==None: materia.num_origem_externa="" # if materia.num_origem_externa==None: materia.num_origem_externa=""
# if materia.ano_origem_externa==None: materia.ano_origem_externa="" # if materia.ano_origem_externa==None: materia.ano_origem_externa=""
orig_externa_dic['local']= origem.sgl_origem+ "-"+ origem.nom_origem orig_externa_dic['local'] = origem.sgl_origem + "-" + origem.nom_origem
orig_externa_dic['tipo']= materia.tip_origem_externa orig_externa_dic['tipo'] = materia.tip_origem_externa
orig_externa_dic['data']= materia.dat_origem_externa orig_externa_dic['data'] = materia.dat_origem_externa
orig_externa_dic['numero_ano']= str(materia.num_origem_externa)+ "/"+ str(materia.ano_origem_externa) orig_externa_dic['numero_ano'] = str(
materia.num_origem_externa) + "/" + str(materia.ano_origem_externa)
# #o bloco abaixo gera o dicionario das materias anexadas (ln 55) # #o bloco abaixo gera o dicionario das materias anexadas (ln 55)
lst_mat_anexadas = [] lst_mat_anexadas = []
dic_mat = {} dic_mat = {}
for anexada in context.zsql.anexada_obter_zsql(cod_materia_principal=materia.cod_materia): for anexada in context.zsql.anexada_obter_zsql(cod_materia_principal=materia.cod_materia):
aux1 = context.zsql.materia_obter_zsql(cod_materia = anexada.cod_materia_anexada) aux1 = context.zsql.materia_obter_zsql(
aux2 = context.zsql.tipo_materia_legislativa_obter_zsql(tip_materia = aux1[0].tip_id_basica) cod_materia=anexada.cod_materia_anexada)
aux2 = context.zsql.tipo_materia_legislativa_obter_zsql(
tip_materia=aux1[0].tip_id_basica)
# """#tratando possíveis erros""" # """#tratando possíveis erros"""
# if aux2.sgl_tipo_materia==None: aux2.sgl_tipo_materia="" # if aux2.sgl_tipo_materia==None: aux2.sgl_tipo_materia=""
# if aux2.num_ident_basica==None: aux2.num_ident_basica="" # if aux2.num_ident_basica==None: aux2.num_ident_basica=""
@ -91,33 +96,34 @@ for materia in context.zsql.materia_obter_zsql(cod_materia=REQUEST['cod_materia'
# if anexadas.dat_anexacao==None: anexadas.dat_anexacao="" # if anexadas.dat_anexacao==None: anexadas.dat_anexacao=""
# if anexadas.dat_desanexacao==None: anexadas.dat_desanexacao="" # if anexadas.dat_desanexacao==None: anexadas.dat_desanexacao=""
# """#""" # """#"""
dic_mat['nom_mat']= aux2[0].sgl_tipo_materia+ "/"+ str(aux1[0].num_ident_basica)+ "/"+ str(aux1[0].ano_ident_basica) dic_mat['nom_mat'] = aux2[0].sgl_tipo_materia + "/" + \
dic_mat['data']= anexada.dat_anexacao str(aux1[0].num_ident_basica) + "/" + str(aux1[0].ano_ident_basica)
dic_mat['data_fim']= anexada.dat_desanexacao dic_mat['data'] = anexada.dat_anexacao
lst_mat_anexadas.append(dic_mat) dic_mat['data_fim'] = anexada.dat_desanexacao
lst_mat_anexadas.append(dic_mat)
# #o bloco abaixo gera o dicionario dos autores(ln 66) # #o bloco abaixo gera o dicionario dos autores(ln 66)
lst_autoria = [] lst_autoria = []
# dic_autor = {} # dic_autor = {}
for autoria in context.zsql.autoria_obter_zsql(cod_materia = materia.cod_materia): for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia):
dic_autor = {} dic_autor = {}
if autoria.ind_primeiro_autor: if autoria.ind_primeiro_autor:
dic_autor['tipo']= "primeiro autor" dic_autor['tipo'] = "primeiro autor"
else: else:
dic_autor['tipo']= " " dic_autor['tipo'] = " "
for autor in context.zsql.autor_obter_zsql(cod_autor = autoria.cod_autor): for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor):
dic_autor['cargo']= " " dic_autor['cargo'] = " "
if autor.des_tipo_autor=='Parlamentar': if autor.des_tipo_autor == 'Parlamentar':
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar):
dic_autor['nom_autor']=parlamentar.nom_completo dic_autor['nom_autor'] = parlamentar.nom_completo
elif autor.des_tipo_autor=='Comissao': elif autor.des_tipo_autor == 'Comissao':
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao):
dic_autor['nom_autor']=comissao.nom_comissao dic_autor['nom_autor'] = comissao.nom_comissao
else: else:
dic_autor['nom_autor']=autor.nom_autor dic_autor['nom_autor'] = autor.nom_autor
dic_autor['cargo']= autor.des_cargo dic_autor['cargo'] = autor.des_cargo
lst_autoria.append(dic_autor) lst_autoria.append(dic_autor)
# """#tratando possíveis erros""" # """#tratando possíveis erros"""
# if autor.nom_autor==None: autor.nom_autor="" # if autor.nom_autor==None: autor.nom_autor=""
@ -127,141 +133,152 @@ for materia in context.zsql.materia_obter_zsql(cod_materia=REQUEST['cod_materia'
# dic_autor['cargo']= autor.des_cargo # dic_autor['cargo']= autor.des_cargo
# if autoria.ind_primeiro_autor: # if autoria.ind_primeiro_autor:
# dic_autor['tipo']= "primeiro autor" # dic_autor['tipo']= "primeiro autor"
# else: # else:
# dic_autor['tipo']= " " # dic_autor['tipo']= " "
# #o bloco abaixo gera o dicionario de despachos iniciais (ln 79) # #o bloco abaixo gera o dicionario de despachos iniciais (ln 79)
lst_des_iniciais=[] lst_des_iniciais = []
for despacho in context.zsql.despacho_inicial_obter_zsql(cod_materia = materia.cod_materia): for despacho in context.zsql.despacho_inicial_obter_zsql(cod_materia=materia.cod_materia):
for comissao in context.zsql.comissao_obter_zsql(cod_comissao = despacho.cod_comissao_sel): for comissao in context.zsql.comissao_obter_zsql(cod_comissao=despacho.cod_comissao_sel):
dic_dados={} dic_dados = {}
if comissao.nom_comissao==None: if comissao.nom_comissao == None:
comissao.nom_comissao='' comissao.nom_comissao = ''
if comissao.sgl_comissao==None: if comissao.sgl_comissao == None:
comissao.sgl_comissao='' comissao.sgl_comissao = ''
dic_dados['nom_comissao']=comissao.nom_comissao+ " - "+ comissao.sgl_comissao dic_dados['nom_comissao'] = comissao.nom_comissao + \
lst_des_iniciais.append(dic_dados) " - " + comissao.sgl_comissao
lst_des_iniciais.append(dic_dados)
# #o bloco abaixo gera o dicionário de Tramitacoes(ln 87) # #o bloco abaixo gera o dicionário de Tramitacoes(ln 87)
dic_tramitacoes = {} dic_tramitacoes = {}
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=REQUEST['cod_materia'], ind_ult_tramitacao=1): for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=REQUEST['cod_materia'], ind_ult_tramitacao=1):
dic_tramitacoes['data']= tramitacao.dat_tramitacao dic_tramitacoes['data'] = tramitacao.dat_tramitacao
dic_tramitacoes['data_enc']= tramitacao.dat_encaminha dic_tramitacoes['data_enc'] = tramitacao.dat_encaminha
dic_tramitacoes['turno']= tramitacao.sgl_turno dic_tramitacoes['turno'] = tramitacao.sgl_turno
dic_tramitacoes['status']= tramitacao.des_status dic_tramitacoes['status'] = tramitacao.des_status
dic_tramitacoes['urgente']= tramitacao.ind_urgencia dic_tramitacoes['urgente'] = tramitacao.ind_urgencia
dic_tramitacoes['data_fim']= tramitacao.dat_fim_prazo dic_tramitacoes['data_fim'] = tramitacao.dat_fim_prazo
dic_tramitacoes['texto_acao']= tramitacao.txt_tramitacao dic_tramitacoes['texto_acao'] = tramitacao.txt_tramitacao
for unidade in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao=tramitacao.cod_unid_tram_local):
#-----------------se unidade for comissao--------------------------
if unidade.cod_orgao == None:
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=unidade.cod_comissao):
if tramitacao.cod_unid_tram_dest != None:
for unidade_dest in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao=tramitacao.cod_unid_tram_dest):
# se unidade destino for comissao
if unidade_dest.cod_orgao == None:
for comissao_dest in context.zsql.comissao_obter_zsql(cod_comissao=unidade_dest.cod_comissao):
dic_tramitacoes[
'unidade'] = comissao.nom_comissao
dic_tramitacoes[
'destino'] = comissao_dest.nom_comissao
# se unidade destino for orgao
if unidade_dest.cod_comissao == None:
for orgao_dest in context.zsql.orgao_obter_zsql(cod_orgao=unidade_dest.cod_orgao):
dic_tramitacoes[
'unidade'] = comissao.nom_comissao
dic_tramitacoes[
'destino'] = orgao_dest.nom_orgao
else:
dic_tramitacoes['unidade'] = comissao.nom_comissao
dic_tramitacoes['destino'] = "None"
#---------------se unidade for orgao-------------------------------
if unidade.cod_comissao == None:
for orgao in context.zsql.orgao_obter_zsql(cod_orgao=unidade.cod_orgao):
if tramitacao.cod_unid_tram_dest != None:
for unidade_dest in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao=tramitacao.cod_unid_tram_dest):
# se unidade destino for comissao
if unidade_dest.cod_orgao == None:
for comissao_dest in context.zsql.comissao_obter_zsql(cod_comissao=unidade_dest.cod_comissao):
dic_tramitacoes[
'unidade'] = orgao.nom_orgao
dic_tramitacoes[
'destino'] = comissao_dest.nom_comissao
# se unidade destino for orgao
if unidade_dest.cod_comissao == None:
for orgao_dest in context.zsql.orgao_obter_zsql(cod_orgao=unidade_dest.cod_orgao):
dic_tramitacoes[
'unidade'] = orgao.nom_orgao
dic_tramitacoes[
'destino'] = orgao_dest.nom_orgao
else:
dic_tramitacoes['unidade'] = orgao.nom_orgao
dic_tramitacoes['destino'] = "None"
for unidade in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = tramitacao.cod_unid_tram_local):
#-----------------se unidade for comissao---------------------------------
if unidade.cod_orgao==None:
for comissao in context.zsql.comissao_obter_zsql(cod_comissao = unidade.cod_comissao):
if tramitacao.cod_unid_tram_dest!=None:
for unidade_dest in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = tramitacao.cod_unid_tram_dest):
#se unidade destino for comissao
if unidade_dest.cod_orgao==None:
for comissao_dest in context.zsql.comissao_obter_zsql(cod_comissao = unidade_dest.cod_comissao):
dic_tramitacoes['unidade']= comissao.nom_comissao
dic_tramitacoes['destino']= comissao_dest.nom_comissao
#se unidade destino for orgao
if unidade_dest.cod_comissao==None:
for orgao_dest in context.zsql.orgao_obter_zsql(cod_orgao = unidade_dest.cod_orgao):
dic_tramitacoes['unidade']= comissao.nom_comissao
dic_tramitacoes['destino']= orgao_dest.nom_orgao
else:
dic_tramitacoes['unidade']= comissao.nom_comissao
dic_tramitacoes['destino']= "None"
#---------------se unidade for orgao-----------------------------------------
if unidade.cod_comissao==None:
for orgao in context.zsql.orgao_obter_zsql(cod_orgao = unidade.cod_orgao):
if tramitacao.cod_unid_tram_dest!=None:
for unidade_dest in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = tramitacao.cod_unid_tram_dest):
#se unidade destino for comissao
if unidade_dest.cod_orgao==None:
for comissao_dest in context.zsql.comissao_obter_zsql(cod_comissao = unidade_dest.cod_comissao):
dic_tramitacoes['unidade']= orgao.nom_orgao
dic_tramitacoes['destino']= comissao_dest.nom_comissao
#se unidade destino for orgao
if unidade_dest.cod_comissao==None:
for orgao_dest in context.zsql.orgao_obter_zsql(cod_orgao = unidade_dest.cod_orgao):
dic_tramitacoes['unidade']= orgao.nom_orgao
dic_tramitacoes['destino']= orgao_dest.nom_orgao
else:
dic_tramitacoes['unidade']= orgao.nom_orgao
dic_tramitacoes['destino']= "None"
# #o bloco abaixo gera o dicionario de relatorias(ln 106) # #o bloco abaixo gera o dicionario de relatorias(ln 106)
lst_relatorias = [] lst_relatorias = []
dic_comissao = {} dic_comissao = {}
for relatoria in context.zsql.relatoria_obter_zsql(cod_materia = materia.cod_materia): for relatoria in context.zsql.relatoria_obter_zsql(cod_materia=materia.cod_materia):
for comissao in context.zsql.comissao_obter_zsql(cod_comissao = relatoria.cod_comissao): for comissao in context.zsql.comissao_obter_zsql(cod_comissao=relatoria.cod_comissao):
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar = relatoria.cod_parlamentar): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=relatoria.cod_parlamentar):
dic_comissao['nom_comissao']= comissao.nom_comissao dic_comissao['nom_comissao'] = comissao.nom_comissao
dic_comissao['data_desig']= relatoria.dat_desig_relator dic_comissao['data_desig'] = relatoria.dat_desig_relator
dic_comissao['parlamentar']= parlamentar.nom_completo dic_comissao['parlamentar'] = parlamentar.nom_completo
dic_comissao['data_dest']= relatoria.dat_destit_relator dic_comissao['data_dest'] = relatoria.dat_destit_relator
if relatoria.tip_fim_relatoria==None or relatoria.tip_fim_relatoria=='0': if relatoria.tip_fim_relatoria == None or relatoria.tip_fim_relatoria == '0':
num = 0 num = 0
dic_comissao['motivo']="" dic_comissao['motivo'] = ""
else: else:
num=relatoria.tip_fim_relatoria num = relatoria.tip_fim_relatoria
for tipo_fim in context.zsql.tipo_fim_relatoria_obter_zsql(tip_fim_relatoria = num): for tipo_fim in context.zsql.tipo_fim_relatoria_obter_zsql(tip_fim_relatoria=num):
dic_comissao['motivo']= tipo_fim.des_fim_relatoria dic_comissao['motivo'] = tipo_fim.des_fim_relatoria
lst_relatorias.append(dic_comissao) lst_relatorias.append(dic_comissao)
# #o bloco abaixo gera o dicionario de Numeracoes(ln 121) # #o bloco abaixo gera o dicionario de Numeracoes(ln 121)
lst_numeracoes = [] lst_numeracoes = []
dic_dados={} dic_dados = {}
for numeracao in context.zsql.numeracao_obter_zsql(cod_materia = materia.cod_materia): for numeracao in context.zsql.numeracao_obter_zsql(cod_materia=materia.cod_materia):
for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(tip_materia = numeracao.tip_materia): for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(tip_materia=numeracao.tip_materia):
dic_dados['nome']= tipo_materia.sgl_tipo_materia+ "-"+ tipo_materia.des_tipo_materia+ ""+ numeracao.num_materia dic_dados['nome'] = tipo_materia.sgl_tipo_materia + "-" + \
dic_dados['ano']= numeracao.ano_materia tipo_materia.des_tipo_materia + "" + numeracao.num_materia
lst_numeracoes.append(dic_dados) dic_dados['ano'] = numeracao.ano_materia
lst_numeracoes.append(dic_dados)
# #o bloco abaixo gera o dicionário de legislacoes citadas(132) # #o bloco abaixo gera o dicionário de legislacoes citadas(132)
lst_legis_citadas = [] lst_legis_citadas = []
dic_dados = {} dic_dados = {}
for legislacao in context.zsql.legislacao_citada_obter_zsql(cod_materia = materia.cod_materia): for legislacao in context.zsql.legislacao_citada_obter_zsql(cod_materia=materia.cod_materia):
norma = context.zsql.norma_juridica_obter_zsql(cod_norma = legislacao.cod_norma_sel) norma = context.zsql.norma_juridica_obter_zsql(
dic_dados['nome_lei']= str(norma[0].tip_norma_sel) + ""+ str(norma[0].num_norma) + " de"+ str(norma[0].ano_norma) cod_norma=legislacao.cod_norma_sel)
dic_dados['disposicao']= legislacao.des_disposicoes dic_dados['nome_lei'] = str(norma[0].tip_norma_sel) + "" + \
dic_dados['parte']= legislacao.des_parte str(norma[0].num_norma) + " de" + str(norma[0].ano_norma)
dic_dados['livro']= legislacao.des_livro dic_dados['disposicao'] = legislacao.des_disposicoes
dic_dados['titulo']= legislacao.des_titulo dic_dados['parte'] = legislacao.des_parte
dic_dados['capitulo']= legislacao.des_capitulo dic_dados['livro'] = legislacao.des_livro
dic_dados['secao']= legislacao.des_secao dic_dados['titulo'] = legislacao.des_titulo
dic_dados['subsecao']= legislacao.des_subsecao dic_dados['capitulo'] = legislacao.des_capitulo
dic_dados['artigo']= legislacao.des_artigo dic_dados['secao'] = legislacao.des_secao
dic_dados['paragrafo']= legislacao.des_paragrafo dic_dados['subsecao'] = legislacao.des_subsecao
dic_dados['inciso']= legislacao.des_inciso dic_dados['artigo'] = legislacao.des_artigo
dic_dados['alinea']= legislacao.des_alinea dic_dados['paragrafo'] = legislacao.des_paragrafo
dic_dados['item']= legislacao.des_item dic_dados['inciso'] = legislacao.des_inciso
lst_legis_citadas.append(dic_dados) dic_dados['alinea'] = legislacao.des_alinea
dic_dados['item'] = legislacao.des_item
lst_legis_citadas.append(dic_dados)
# #o bloco abaixo gera o dicionario de Documentos Acessórios(153) # #o bloco abaixo gera o dicionario de Documentos Acessórios(153)
lst_acessorios = []
for documento in context.zsql.documento_acessorio_obter_zsql(cod_materia = materia.cod_materia):
dic_dados = {}
dic_dados['tipo']= documento.tip_documento
dic_dados['nome']= documento.nom_documento
dic_dados['data']= documento.dat_documento
dic_dados['autor']= documento.nom_autor_documento
dic_dados['ementa']= documento.txt_ementa
dic_dados['indexacao']= documento.txt_indexacao
lst_acessorios.append(dic_dados)
caminho=context.pdf_detalhe_materia_gerar(imagem, rodape,inf_basicas_dic,orig_externa_dic,lst_mat_anexadas,lst_autoria, lst_acessorios = []
lst_des_iniciais,dic_tramitacoes,lst_relatorias,lst_numeracoes, for documento in context.zsql.documento_acessorio_obter_zsql(cod_materia=materia.cod_materia):
lst_legis_citadas,lst_acessorios,sessao=session.id) dic_dados = {}
if caminho=='aviso': dic_dados['tipo'] = documento.tip_documento
return response.redirect('mensagem_emitir_proc') dic_dados['nome'] = documento.nom_documento
dic_dados['data'] = documento.dat_documento
dic_dados['autor'] = documento.nom_autor_documento
dic_dados['ementa'] = documento.txt_ementa
dic_dados['indexacao'] = documento.txt_indexacao
lst_acessorios.append(dic_dados)
caminho = context.pdf_detalhe_materia_gerar(imagem, rodape, inf_basicas_dic, orig_externa_dic, lst_mat_anexadas, lst_autoria,
lst_des_iniciais, dic_tramitacoes, lst_relatorias, lst_numeracoes,
lst_legis_citadas, lst_acessorios, sessao=session.id)
if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

221
sapl/relatorios/templates/pdf_documento_administrativo_preparar_pysc.py

@ -1,124 +1,135 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
data=DateTime().strftime('%d/%m/%Y') data = DateTime().strftime('%d/%m/%Y')
#Abaixo é gerada a string para o rodapé da página # Abaixo é gerada a string para o rodapé da página
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
if len(casa["num_cep"])==8: cod_localidade=casa["cod_localidade"])
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] if len(casa["num_cep"]) == 8:
cep = casa["num_cep"][:4] + "-" + casa["num_cep"][5:]
else: else:
cep="" cep = ""
linha1=casa["end_casa"] linha1 = casa["end_casa"]
if cep!="": if cep != "":
if casa["end_casa"]!="" and casa["end_casa"]!=None: if casa["end_casa"] != "" and casa["end_casa"] != None:
linha1 = linha1 + " - " linha1 = linha1 + " - "
linha1 = linha1 + "CEP "+cep linha1 = linha1 + "CEP " + cep
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: if localidade[0].nom_localidade != "" and localidade[0].nom_localidade != None:
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf linha1 = linha1 + " - " + \
if casa["num_tel"]!="" and casa["num_tel"]!=None: localidade[0].nom_localidade + " " + localidade[0].sgl_uf
linha1 = linha1 + " Tel.: "+ casa["num_tel"] if casa["num_tel"] != "" and casa["num_tel"] != None:
linha1 = linha1 + " Tel.: " + casa["num_tel"]
linha2=casa["end_web_casa"]
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: linha2 = casa["end_web_casa"]
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: if casa["end_email_casa"] != "" and casa["end_email_casa"] != None:
linha2 = linha2 + " - " if casa["end_web_casa"] != "" and casa["end_web_casa"] != None:
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] linha2 = linha2 + " - "
linha2 = linha2 + "E-mail: " + casa["end_email_casa"]
data_emissao=DateTime().strftime("%d/%m/%Y")
rodape=[linha1,linha2,data_emissao] data_emissao = DateTime().strftime("%d/%m/%Y")
rodape = [linha1, linha2, data_emissao]
#Por fim, gera-se as entradas para o cabeçalho
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") # Por fim, gera-se as entradas para o cabeçalho
estados = context.zsql.localidade_obter_zsql(tip_localidade="u")
for uf in estados: for uf in estados:
if localidade[0].sgl_uf==uf.sgl_uf: if localidade[0].sgl_uf == uf.sgl_uf:
nom_estado=uf.nom_localidade nom_estado = uf.nom_localidade
break break
cabecalho={} cabecalho = {}
cabecalho["nom_casa"]=casa["nom_casa"] cabecalho["nom_casa"] = casa["nom_casa"]
cabecalho["nom_estado"]="Estado de "+nom_estado cabecalho["nom_estado"] = "Estado de " + nom_estado
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Por fim, utiliza o PythonScript para pesquisar os documentos e gerar os dados # Por fim, utiliza o PythonScript para pesquisar os documentos e gerar os dados
documentos=[] documentos = []
REQUEST=context.REQUEST REQUEST = context.REQUEST
for documento in context.zsql.documento_administrativo_pesquisar_zsql(tip_documento=REQUEST['lst_tip_documento'], for documento in context.zsql.documento_administrativo_pesquisar_zsql(tip_documento=REQUEST['lst_tip_documento'],
num_documento=REQUEST['txt_num_documento'], ano_documento=REQUEST['txt_ano_documento'], num_documento=REQUEST['txt_num_documento'], ano_documento=REQUEST[
num_protocolo=REQUEST['txt_num_protocolo'], ind_tramitacao=REQUEST['rad_tramitando'], 'txt_ano_documento'],
des_assunto=REQUEST['txa_txt_assunto'], cod_status=REQUEST['lst_status'], num_protocolo=REQUEST[
txt_interessado=REQUEST['txa_txt_interessado'], dat_apres1=REQUEST['dt_apres1'], 'txt_num_protocolo'], ind_tramitacao=REQUEST['rad_tramitando'],
dat_apres2=REQUEST['dt_apres2'], rd_ordem=REQUEST['rd_ordenacao']): des_assunto=REQUEST[
dic={} 'txa_txt_assunto'], cod_status=REQUEST['lst_status'],
txt_interessado=REQUEST[
dic['titulo']=documento.sgl_tipo_documento+" "+str(documento.num_documento)+" "+str(documento.ano_documento)+" - "+documento.des_tipo_documento 'txa_txt_interessado'], dat_apres1=REQUEST['dt_apres1'],
dic['txt_assunto']=documento.txt_assunto dat_apres2=REQUEST['dt_apres2'], rd_ordem=REQUEST['rd_ordenacao']):
dic['txt_interessado']=documento.txt_interessado dic = {}
des_status = '' dic['titulo'] = documento.sgl_tipo_documento + " " + \
txt_tramitacao='' str(documento.num_documento) + " " + \
str(documento.ano_documento) + " - " + documento.des_tipo_documento
dic['localizacao_atual']=" " dic['txt_assunto'] = documento.txt_assunto
for tramitacao in context.zsql.tramitacao_administrativo_obter_zsql(cod_documento=documento.cod_documento,ind_ult_tramitacao=1): dic['txt_interessado'] = documento.txt_interessado
if tramitacao.cod_unid_tram_dest:
cod_unid_tram = tramitacao.cod_unid_tram_dest des_status = ''
txt_tramitacao = ''
dic['localizacao_atual'] = " "
for tramitacao in context.zsql.tramitacao_administrativo_obter_zsql(cod_documento=documento.cod_documento, ind_ult_tramitacao=1):
if tramitacao.cod_unid_tram_dest:
cod_unid_tram = tramitacao.cod_unid_tram_dest
else:
cod_unid_tram = tramitacao.cod_unid_tram_local
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao=cod_unid_tram):
if unidade_tramitacao.cod_orgao:
dic['localizacao_atual'] = unidade_tramitacao.nom_orgao
else: else:
cod_unid_tram = tramitacao.cod_unid_tram_local dic['localizacao_atual'] = unidade_tramitacao.nom_comissao
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = cod_unid_tram):
if unidade_tramitacao.cod_orgao:
dic['localizacao_atual']=unidade_tramitacao.nom_orgao
else:
dic['localizacao_atual']=unidade_tramitacao.nom_comissao
des_status=tramitacao.des_status
txt_tramitacao=tramitacao.txt_tramitacao
dic['des_situacao']=des_status des_status = tramitacao.des_status
dic['ultima_acao']=txt_tramitacao txt_tramitacao = tramitacao.txt_tramitacao
documentos.append(dic) dic['des_situacao'] = des_status
dic['ultima_acao'] = txt_tramitacao
filtro={} # Dicionário que conterá os dados do filtro documentos.append(dic)
filtro = {} # Dicionário que conterá os dados do filtro
# Atribuições diretas do REQUEST # Atribuições diretas do REQUEST
filtro['numero']=REQUEST.txt_num_documento filtro['numero'] = REQUEST.txt_num_documento
filtro['ano']=REQUEST.txt_ano_documento filtro['ano'] = REQUEST.txt_ano_documento
filtro['interessado']=REQUEST.txa_txt_interessado filtro['interessado'] = REQUEST.txa_txt_interessado
filtro['assunto']=REQUEST.txa_txt_assunto filtro['assunto'] = REQUEST.txa_txt_assunto
filtro['tipo_documento']='' filtro['tipo_documento'] = ''
if REQUEST.lst_tip_documento!='': if REQUEST.lst_tip_documento != '':
for tipo_documento in context.zsql.tipo_documento_administrativo_obter_zsql(ind_excluido=0, tip_documento=REQUEST.lst_tip_documento): for tipo_documento in context.zsql.tipo_documento_administrativo_obter_zsql(ind_excluido=0, tip_documento=REQUEST.lst_tip_documento):
filtro['tipo_documento']= tipo_documento.sgl_tipo_documento + ' - ' + tipo_documento.des_tipo_documento filtro['tipo_documento'] = tipo_documento.sgl_tipo_documento + \
' - ' + tipo_documento.des_tipo_documento
filtro['tramitando']=''
if REQUEST.rad_tramitando=='1': filtro['tramitando'] = ''
filtro['tramitacao']='Sim' if REQUEST.rad_tramitando == '1':
elif REQUEST['rad_tramitando']=='0': filtro['tramitacao'] = 'Sim'
filtro['tramitacao']='Não' elif REQUEST['rad_tramitando'] == '0':
filtro['tramitacao'] = 'Não'
filtro['situacao_atual']=''
if REQUEST.lst_status!='': filtro['situacao_atual'] = ''
for status in context.zsql.status_tramitacao_administrativo_obter_zsql(ind_exluido=0,cod_status=REQUEST.lst_status): if REQUEST.lst_status != '':
filtro['situacao_atual']=status.sgl_status + ' - ' + status.des_status for status in context.zsql.status_tramitacao_administrativo_obter_zsql(ind_exluido=0, cod_status=REQUEST.lst_status):
filtro['situacao_atual'] = status.sgl_status + \
sessao=session.id ' - ' + status.des_status
caminho = context.pdf_documento_administrativo_gerar(sessao,imagem,data,documentos,cabecalho,rodape,filtro)
if caminho=='aviso': sessao = session.id
return response.redirect('mensagem_emitir_proc') caminho = context.pdf_documento_administrativo_gerar(
sessao, imagem, data, documentos, cabecalho, rodape, filtro)
if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

241
sapl/relatorios/templates/pdf_espelho_gerar.py

@ -12,147 +12,147 @@ from trml2pdf import parseString
def cabecalho(dic_cabecalho, imagem): def cabecalho(dic_cabecalho, imagem):
"""Gera o codigo rml do cabecalho""" """Gera o codigo rml do cabecalho"""
tmp_data = '' tmp_data = ''
tmp_data += '\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + \ tmp_data += '\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + \
imagem + '"/>\n' imagem + '"/>\n'
tmp_data += '\t\t\t\t<lines>2cm 25cm 19cm 25cm</lines>\n' tmp_data += '\t\t\t\t<lines>2cm 25cm 19cm 25cm</lines>\n'
tmp_data += '\t\t\t\t<setFont name="Helvetica" size="18"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="18"/>\n'
tmp_data += '\t\t\t\t<drawString x="5cm" y="27.2cm">' + \ tmp_data += '\t\t\t\t<drawString x="5cm" y="27.2cm">' + \
dic_cabecalho['nom_casa'] + '</drawString>\n' dic_cabecalho['nom_casa'] + '</drawString>\n'
tmp_data += '\t\t\t\t<setFont name="Helvetica" size="16"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="16"/>\n'
tmp_data += '\t\t\t\t<drawString x="07cm" y="26.5cm">' + \ tmp_data += '\t\t\t\t<drawString x="07cm" y="26.5cm">' + \
dic_cabecalho['nom_estado'] + '</drawString>\n' dic_cabecalho['nom_estado'] + '</drawString>\n'
tmp_data += '\t\t\t\t<setFont name="Helvetica" size="15"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="15"/>\n'
tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">SECRETARIA</drawCentredString>\n' tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">SECRETARIA</drawCentredString>\n'
return tmp_data return tmp_data
def rodape(lst_rodape): def rodape(lst_rodape):
"""Gera o codigo rml do rodape""" """Gera o codigo rml do rodape"""
tmp_data = '' tmp_data = ''
tmp_data += '\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' tmp_data += '\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n'
tmp_data += '\t\t\t\t<setFont name="Helvetica" size="8"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="8"/>\n'
tmp_data += '\t\t\t\t<drawString x="2cm" y="3.3cm">' + \ tmp_data += '\t\t\t\t<drawString x="2cm" y="3.3cm">' + \
lst_rodape[2] + '</drawString>\n' lst_rodape[2] + '</drawString>\n'
tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + \ tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + \
lst_rodape[0] + '</drawCentredString>\n' lst_rodape[0] + '</drawCentredString>\n'
tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + \ tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + \
lst_rodape[1] + '</drawCentredString>\n' lst_rodape[1] + '</drawCentredString>\n'
return tmp_data return tmp_data
def paraStyle(): def paraStyle():
"""Gera o codigo rml que define o estilo dos paragrafos""" """Gera o codigo rml que define o estilo dos paragrafos"""
tmp_data = '' tmp_data = ''
tmp_data += '\t<stylesheet>\n' tmp_data += '\t<stylesheet>\n'
tmp_data += '\t\t<blockTableStyle id="Standard_Outline">\n' tmp_data += '\t\t<blockTableStyle id="Standard_Outline">\n'
tmp_data += '\t\t\t<blockAlignment value="LEFT"/>\n' tmp_data += '\t\t\t<blockAlignment value="LEFT"/>\n'
tmp_data += '\t\t\t<blockValign value="TOP"/>\n' tmp_data += '\t\t\t<blockValign value="TOP"/>\n'
tmp_data += '\t\t</blockTableStyle>\n' tmp_data += '\t\t</blockTableStyle>\n'
tmp_data += '\t\t<initialize>\n' tmp_data += '\t\t<initialize>\n'
tmp_data += '\t\t\t<paraStyle name="all" alignment="justify"/>\n' tmp_data += '\t\t\t<paraStyle name="all" alignment="justify"/>\n'
tmp_data += '\t\t</initialize>\n' tmp_data += '\t\t</initialize>\n'
tmp_data += '\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n' tmp_data += '\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n'
tmp_data += '\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="13.0" leading="13" alignment="LEFT"/>\n' tmp_data += '\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="13.0" leading="13" alignment="LEFT"/>\n'
tmp_data += '\t</stylesheet>\n' tmp_data += '\t</stylesheet>\n'
return tmp_data return tmp_data
def materias(lst_materias): def materias(lst_materias):
"""Gera o codigo rml do conteudo da pesquisa de materias""" """Gera o codigo rml do conteudo da pesquisa de materias"""
tmp_data = '' tmp_data = ''
# inicio do bloco que contem os flowables # inicio do bloco que contem os flowables
tmp_data += '\t<story>\n' tmp_data += '\t<story>\n'
for dic in lst_materias: for dic in lst_materias:
# espaco inicial # espaco inicial
# tmp_data+='\t\t<para style="P2">\n' # tmp_data+='\t\t<para style="P2">\n'
# tmp_data+='\t\t\t<font color="white"> </font>\n' # tmp_data+='\t\t\t<font color="white"> </font>\n'
# tmp_data+='\t\t</para>\n' # tmp_data+='\t\t</para>\n'
# tmp_data+='\t\t<para style="P2">\n' # tmp_data+='\t\t<para style="P2">\n'
# tmp_data+='\t\t\t<font color="white"> </font>\n' # tmp_data+='\t\t\t<font color="white"> </font>\n'
# tmp_data+='\t\t</para>\n' # tmp_data+='\t\t</para>\n'
# condicao para a quebra de pagina # condicao para a quebra de pagina
tmp_data += '\t\t<condPageBreak height="16cm"/>\n' tmp_data += '\t\t<condPageBreak height="16cm"/>\n'
# materias # materias
# if dic['titulo']!=None: # if dic['titulo']!=None:
# tmp_data+='\t\t<para style="P1">' + dic['titulo'] + '</para>\n' # tmp_data+='\t\t<para style="P1">' + dic['titulo'] + '</para>\n'
# tmp_data+='\t\t<para style="P1">\n' # tmp_data+='\t\t<para style="P1">\n'
# tmp_data+='\t\t\t<font color="white"> </font>\n' # tmp_data+='\t\t\t<font color="white"> </font>\n'
# tmp_data+='\t\t</para>\n' # tmp_data+='\t\t</para>\n'
if dic['materia'] != None: if dic['materia'] != None:
tmp_data += '\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data += '\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data += '\t\t</para>\n' tmp_data += '\t\t</para>\n'
tmp_data += '\t\t<para style="P2"><b>INDICAÇÃO:</b> ' + \ tmp_data += '\t\t<para style="P2"><b>INDICAÇÃO:</b> ' + \
dic['materia'] + '</para>\n' dic['materia'] + '</para>\n'
tmp_data += '\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data += '\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data += '\t\t</para>\n' tmp_data += '\t\t</para>\n'
if dic['dat_apresentacao'] != None: if dic['dat_apresentacao'] != None:
tmp_data += '\t\t<para style="P2"><b>DATA DE ENTRADA:</b> ' + \ tmp_data += '\t\t<para style="P2"><b>DATA DE ENTRADA:</b> ' + \
dic['dat_apresentacao'] + '</para>\n' dic['dat_apresentacao'] + '</para>\n'
tmp_data += '\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data += '\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data += '\t\t</para>\n' tmp_data += '\t\t</para>\n'
if dic['nom_autor'] != None: if dic['nom_autor'] != None:
tmp_data += '\t\t<para style="P2"><b>AUTOR:</b> ' + \ tmp_data += '\t\t<para style="P2"><b>AUTOR:</b> ' + \
dic['nom_autor'] + '</para>\n' dic['nom_autor'] + '</para>\n'
tmp_data += '\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data += '\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data += '\t\t</para>\n' tmp_data += '\t\t</para>\n'
if dic['txt_ementa'] != None: if dic['txt_ementa'] != None:
txt_ementa = dic['txt_ementa'].replace('&', '&amp;') txt_ementa = dic['txt_ementa'].replace('&', '&amp;')
tmp_data += '\t\t<para style="P2"><b>EMENTA:</b> ' + \ tmp_data += '\t\t<para style="P2"><b>EMENTA:</b> ' + \
dic['txt_ementa'] + '</para>\n' dic['txt_ementa'] + '</para>\n'
tmp_data += '\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data += '\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data += '\t\t</para>\n' tmp_data += '\t\t</para>\n'
tmp_data += '\t</story>\n' tmp_data += '\t</story>\n'
return tmp_data return tmp_data
def principal(imagem, lst_materias, dic_cabecalho, lst_rodape): def principal(imagem, lst_materias, dic_cabecalho, lst_rodape):
"""Funcao pricipal que gera a estrutura global do arquivo rml""" """Funcao pricipal que gera a estrutura global do arquivo rml"""
# if sessao: # if sessao:
# arquivoPdf=sessao+".pdf" # arquivoPdf=sessao+".pdf"
# else: # else:
# arquivoPdf=str(int(time.time()*100))+".pdf" # arquivoPdf=str(int(time.time()*100))+".pdf"
arquivoPdf = str(int(time.time() * 100)) + ".pdf" arquivoPdf = str(int(time.time() * 100)) + ".pdf"
tmp_data = '' tmp_data = ''
tmp_data += '<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' tmp_data += '<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n'
tmp_data += '<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' tmp_data += '<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n'
tmp_data += '<document filename="relatorio.pdf">\n' tmp_data += '<document filename="relatorio.pdf">\n'
tmp_data += '\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n' tmp_data += '\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n'
tmp_data += '\t\t<pageTemplate id="first">\n' tmp_data += '\t\t<pageTemplate id="first">\n'
tmp_data += '\t\t\t<pageGraphics>\n' tmp_data += '\t\t\t<pageGraphics>\n'
tmp_data += cabecalho(dic_cabecalho, imagem) tmp_data += cabecalho(dic_cabecalho, imagem)
tmp_data += rodape(lst_rodape) tmp_data += rodape(lst_rodape)
tmp_data += '\t\t\t</pageGraphics>\n' tmp_data += '\t\t\t</pageGraphics>\n'
tmp_data += '\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="21cm"/>\n' tmp_data += '\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="21cm"/>\n'
tmp_data += '\t\t</pageTemplate>\n' tmp_data += '\t\t</pageTemplate>\n'
tmp_data += '\t</template>\n' tmp_data += '\t</template>\n'
tmp_data += paraStyle() tmp_data += paraStyle()
tmp_data += materias(lst_materias) tmp_data += materias(lst_materias)
tmp_data += '</document>\n' tmp_data += '</document>\n'
tmp_pdf = parseString(tmp_data) tmp_pdf = parseString(tmp_data)
return tmp_pdf return tmp_pdf
# try: # try:
# tmp_pdf=parseString(unicode(tmp_data, 'utf-8')) # tmp_pdf=parseString(unicode(tmp_data, 'utf-8'))
# except: # except:
# tmp_pdf=parseString(unicode(tmp_data, 'utf-8')) # tmp_pdf=parseString(unicode(tmp_data, 'utf-8'))
# if hasattr(context.temp_folder,arquivoPdf): # if hasattr(context.temp_folder,arquivoPdf):
@ -163,4 +163,5 @@ def principal(imagem, lst_materias, dic_cabecalho, lst_rodape):
# return "/temp_folder/"+arquivoPdf # return "/temp_folder/"+arquivoPdf
# return principal(sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro) # return
# principal(sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro)

290
sapl/relatorios/templates/pdf_espelho_preparar_pysc.py

@ -1,200 +1,210 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
data=DateTime().strftime('%d/%m/%Y') data = DateTime().strftime('%d/%m/%Y')
#Abaixo é gerada a string para o rodapé da página # Abaixo é gerada a string para o rodapé da página
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
if len(casa["num_cep"])==8: cod_localidade=casa["cod_localidade"])
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] if len(casa["num_cep"]) == 8:
cep = casa["num_cep"][:4] + "-" + casa["num_cep"][5:]
else: else:
cep="" cep = ""
linha1=casa["end_casa"] linha1 = casa["end_casa"]
if cep!="": if cep != "":
if casa["end_casa"]!="" and casa["end_casa"]!=None: if casa["end_casa"] != "" and casa["end_casa"] != None:
linha1 = linha1 + " - " linha1 = linha1 + " - "
linha1 = linha1 + "CEP "+cep linha1 = linha1 + "CEP " + cep
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: if localidade[0].nom_localidade != "" and localidade[0].nom_localidade != None:
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf linha1 = linha1 + " - " + \
if casa["num_tel"]!="" and casa["num_tel"]!=None: localidade[0].nom_localidade + " " + localidade[0].sgl_uf
linha1 = linha1 + " Tel.: "+ casa["num_tel"] if casa["num_tel"] != "" and casa["num_tel"] != None:
linha1 = linha1 + " Tel.: " + casa["num_tel"]
linha2=casa["end_web_casa"]
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: linha2 = casa["end_web_casa"]
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: if casa["end_email_casa"] != "" and casa["end_email_casa"] != None:
linha2 = linha2 + " - " if casa["end_web_casa"] != "" and casa["end_web_casa"] != None:
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] linha2 = linha2 + " - "
linha2 = linha2 + "E-mail: " + casa["end_email_casa"]
data_emissao=DateTime().strftime("%d/%m/%Y")
rodape=[linha1,linha2,data_emissao] data_emissao = DateTime().strftime("%d/%m/%Y")
rodape = [linha1, linha2, data_emissao]
#Por fim, gera-se as entradas para o cabeçalho
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") # Por fim, gera-se as entradas para o cabeçalho
estados = context.zsql.localidade_obter_zsql(tip_localidade="u")
for uf in estados: for uf in estados:
if localidade[0].sgl_uf==uf.sgl_uf: if localidade[0].sgl_uf == uf.sgl_uf:
nom_estado=uf.nom_localidade nom_estado = uf.nom_localidade
break break
cabecalho={} cabecalho = {}
cabecalho["nom_casa"]=casa["nom_casa"] cabecalho["nom_casa"] = casa["nom_casa"]
cabecalho["nom_estado"]="Estado de "+nom_estado cabecalho["nom_estado"] = "Estado de " + nom_estado
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url()
else: else:
imagem = context.sapl_site.sapl_skin.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.sapl_site.sapl_skin.imagens.absolute_url() + "/brasao_transp.gif"
#Verifica o tamanho da lista das materias selecionadas vindas do form # Verifica o tamanho da lista das materias selecionadas vindas do form
REQUEST=context.REQUEST REQUEST = context.REQUEST
if REQUEST.txt_check=='1': if REQUEST.txt_check == '1':
cod_mat = REQUEST['check_ind'] cod_mat = REQUEST['check_ind']
materias=[] materias = []
REQUEST=context.REQUEST REQUEST = context.REQUEST
for materia in context.zsql.materia_obter_zsql(cod_materia=cod_mat): for materia in context.zsql.materia_obter_zsql(cod_materia=cod_mat):
dic={} dic = {}
dic['titulo']="INDICAÇÃO: "+str(materia.num_ident_basica)+" "+str(materia.ano_ident_basica) dic['titulo'] = "INDICAÇÃO: " + \
dic['materia']=str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) str(materia.num_ident_basica) + " " + str(materia.ano_ident_basica)
dic['dat_apresentacao']=materia.dat_apresentacao dic['materia'] = str(materia.num_ident_basica) + \
dic['txt_ementa']=materia.txt_ementa "/" + str(materia.ano_ident_basica)
dic['dat_apresentacao'] = materia.dat_apresentacao
dic['txt_ementa'] = materia.txt_ementa
dic['nom_autor'] = " " dic['nom_autor'] = " "
for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia, ind_primeiro_autor=1): for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia, ind_primeiro_autor=1):
for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor): for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor):
if autor.des_tipo_autor=='Parlamentar': if autor.des_tipo_autor == 'Parlamentar':
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar):
dic['nom_autor']=parlamentar.nom_completo dic['nom_autor'] = parlamentar.nom_completo
elif autor.des_tipo_autor=='Comissao': elif autor.des_tipo_autor == 'Comissao':
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao):
dic['nom_autor']=comissao.nom_comissao dic['nom_autor'] = comissao.nom_comissao
else: else:
dic['nom_autor']=autor.nom_autor dic['nom_autor'] = autor.nom_autor
des_status = '' des_status = ''
txt_tramitacao='' txt_tramitacao = ''
data_ultima_acao = '' data_ultima_acao = ''
dic['localizacao_atual']=" " dic['localizacao_atual'] = " "
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia,ind_ult_tramitacao=1): for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia, ind_ult_tramitacao=1):
if tramitacao.cod_unid_tram_dest: if tramitacao.cod_unid_tram_dest:
cod_unid_tram = tramitacao.cod_unid_tram_dest cod_unid_tram = tramitacao.cod_unid_tram_dest
else: else:
cod_unid_tram = tramitacao.cod_unid_tram_local cod_unid_tram = tramitacao.cod_unid_tram_local
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = cod_unid_tram): for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao=cod_unid_tram):
if unidade_tramitacao.cod_orgao: if unidade_tramitacao.cod_orgao:
dic['localizacao_atual']=unidade_tramitacao.nom_orgao dic['localizacao_atual'] = unidade_tramitacao.nom_orgao
elif unidade_tramitacao.cod_parlamentar: elif unidade_tramitacao.cod_parlamentar:
dic['localizacao_atual']=unidade_tramitacao.nom_parlamentar dic['localizacao_atual'] = unidade_tramitacao.nom_parlamentar
else: else:
dic['localizacao_atual']=unidade_tramitacao.nom_comissao dic['localizacao_atual'] = unidade_tramitacao.nom_comissao
des_status=tramitacao.des_status des_status = tramitacao.des_status
txt_tramitacao=tramitacao.txt_tramitacao txt_tramitacao = tramitacao.txt_tramitacao
data_ultima_acao = tramitacao.dat_tramitacao data_ultima_acao = tramitacao.dat_tramitacao
dic['des_situacao']=des_status dic['des_situacao'] = des_status
dic['ultima_acao']=txt_tramitacao dic['ultima_acao'] = txt_tramitacao
dic['data_ultima_acao']=data_ultima_acao dic['data_ultima_acao'] = data_ultima_acao
dic['norma_juridica_vinculada'] = "Não há nenhuma norma jurídica vinculada" dic['norma_juridica_vinculada'] = "Não há nenhuma norma jurídica vinculada"
for norma in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia): for norma in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia):
dic['norma_juridica_vinculada']=norma.des_norma+" "+str(norma.num_norma)+"/"+str(norma.ano_norma) dic['norma_juridica_vinculada'] = norma.des_norma + " " + \
str(norma.num_norma) + "/" + str(norma.ano_norma)
materias.append(dic) materias.append(dic)
else: else:
codigo = REQUEST.check_ind codigo = REQUEST.check_ind
materias=[] materias = []
REQUEST=context.REQUEST REQUEST = context.REQUEST
for cod_mat in codigo: for cod_mat in codigo:
for materia in context.zsql.materia_obter_zsql(cod_materia=cod_mat): for materia in context.zsql.materia_obter_zsql(cod_materia=cod_mat):
dic={} dic = {}
dic['titulo']="INDICAÇÃO: "+str(materia.num_ident_basica)+" "+str(materia.ano_ident_basica) dic['titulo'] = "INDICAÇÃO: " + \
dic['materia']=str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) str(materia.num_ident_basica) + " " + \
dic['dat_apresentacao']=materia.dat_apresentacao str(materia.ano_ident_basica)
dic['txt_ementa']=materia.txt_ementa dic['materia'] = str(materia.num_ident_basica) + \
"/" + str(materia.ano_ident_basica)
dic['nom_autor'] = " " dic['dat_apresentacao'] = materia.dat_apresentacao
for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia, ind_primeiro_autor=1): dic['txt_ementa'] = materia.txt_ementa
for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor):
if autor.des_tipo_autor=='Parlamentar': dic['nom_autor'] = " "
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia, ind_primeiro_autor=1):
dic['nom_autor']=parlamentar.nom_completo for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor):
elif autor.des_tipo_autor=='Comissao': if autor.des_tipo_autor == 'Parlamentar':
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar):
dic['nom_autor']=comissao.nom_comissao dic['nom_autor'] = parlamentar.nom_completo
elif autor.des_tipo_autor == 'Comissao':
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao):
dic['nom_autor'] = comissao.nom_comissao
else:
dic['nom_autor'] = autor.nom_autor
des_status = ''
txt_tramitacao = ''
data_ultima_acao = ''
dic['localizacao_atual'] = " "
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia, ind_ult_tramitacao=1):
if tramitacao.cod_unid_tram_dest:
cod_unid_tram = tramitacao.cod_unid_tram_dest
else: else:
dic['nom_autor']=autor.nom_autor cod_unid_tram = tramitacao.cod_unid_tram_local
des_status = ''
txt_tramitacao=''
data_ultima_acao = ''
dic['localizacao_atual']=" " for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao=cod_unid_tram):
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia,ind_ult_tramitacao=1): if unidade_tramitacao.cod_orgao:
if tramitacao.cod_unid_tram_dest: dic['localizacao_atual'] = unidade_tramitacao.nom_orgao
cod_unid_tram = tramitacao.cod_unid_tram_dest elif unidade_tramitacao.cod_parlamentar:
else: dic['localizacao_atual'] = unidade_tramitacao.nom_parlamentar
cod_unid_tram = tramitacao.cod_unid_tram_local else:
dic['localizacao_atual'] = unidade_tramitacao.nom_comissao
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = cod_unid_tram):
if unidade_tramitacao.cod_orgao:
dic['localizacao_atual']=unidade_tramitacao.nom_orgao
elif unidade_tramitacao.cod_parlamentar:
dic['localizacao_atual']=unidade_tramitacao.nom_parlamentar
else:
dic['localizacao_atual']=unidade_tramitacao.nom_comissao
des_status=tramitacao.des_status
txt_tramitacao=tramitacao.txt_tramitacao
data_ultima_acao = tramitacao.dat_tramitacao
dic['des_situacao']=des_status des_status = tramitacao.des_status
dic['ultima_acao']=txt_tramitacao txt_tramitacao = tramitacao.txt_tramitacao
dic['data_ultima_acao']=data_ultima_acao data_ultima_acao = tramitacao.dat_tramitacao
dic['norma_juridica_vinculada'] = "Não há nenhuma norma jurídica vinculada" dic['des_situacao'] = des_status
for norma in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia): dic['ultima_acao'] = txt_tramitacao
dic['norma_juridica_vinculada']=norma.des_norma+" "+str(norma.num_norma)+"/"+str(norma.ano_norma) dic['data_ultima_acao'] = data_ultima_acao
materias.append(dic) dic['norma_juridica_vinculada'] = "Não há nenhuma norma jurídica vinculada"
for norma in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia):
dic['norma_juridica_vinculada'] = norma.des_norma + " " + \
str(norma.num_norma) + "/" + str(norma.ano_norma)
materias.append(dic)
filtro={} # Dicionário que conterá os dados do filtro filtro = {} # Dicionário que conterá os dados do filtro
# Atribuições diretas do REQUEST # Atribuições diretas do REQUEST
#filtro['data_apres']=REQUEST.data # filtro['data_apres']=REQUEST.data
#filtro['tipo_materia']='' # filtro['tipo_materia']=''
#for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(ind_excluido=0, tip_materia=9): # for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(ind_excluido=0, tip_materia=9):
# filtro['tipo_materia']= tipo_materia.sgl_tipo_materia + ' - ' + tipo_materia.des_tipo_materia # filtro['tipo_materia']= tipo_materia.sgl_tipo_materia + ' - ' + tipo_materia.des_tipo_materia
#filtro['partido']='' # filtro['partido']=''
#if REQUEST.lst_cod_partido!='': # if REQUEST.lst_cod_partido!='':
# for partido in context.zsql.partido_obter_zsql(ind_excluido=0,cod_partido=REQUEST.lst_cod_partido): # for partido in context.zsql.partido_obter_zsql(ind_excluido=0,cod_partido=REQUEST.lst_cod_partido):
# filtro['partido']=partido.sgl_partido + ' - ' + partido.nom_partido # filtro['partido']=partido.sgl_partido + ' - ' + partido.nom_partido
#filtro['tramitando']='' # filtro['tramitando']=''
#if REQUEST.rad_tramitando=='1': # if REQUEST.rad_tramitando=='1':
# filtro['tramitacao']='Sim' # filtro['tramitacao']='Sim'
#elif REQUEST['rad_tramitando']=='0': # elif REQUEST['rad_tramitando']=='0':
# filtro['tramitacao']='Não' # filtro['tramitacao']='Não'
#filtro['situacao_atual']='' # filtro['situacao_atual']=''
#if REQUEST.lst_status!='': # if REQUEST.lst_status!='':
# for status in context.zsql.status_tramitacao_obter_zsql(ind_exluido=0,cod_status=REQUEST.lst_status): # for status in context.zsql.status_tramitacao_obter_zsql(ind_exluido=0,cod_status=REQUEST.lst_status):
# filtro['situacao_atual']=status.sgl_status + ' - ' + status.des_status # filtro['situacao_atual']=status.sgl_status + ' - ' + status.des_status
sessao=session.id sessao = session.id
caminho = context.pdf_espelho_gerar(sessao,imagem,data,materias,cabecalho,rodape,filtro) caminho = context.pdf_espelho_gerar(
if caminho=='aviso': sessao, imagem, data, materias, cabecalho, rodape, filtro)
return response.redirect('mensagem_emitir_proc') if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

210
sapl/relatorios/templates/pdf_etiqueta_protocolo_preparar_pysc.py

@ -1,127 +1,137 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
data=DateTime().strftime('%d/%m/%Y') data = DateTime().strftime('%d/%m/%Y')
#Abaixo é gerada a string para o rodapé da página # Abaixo é gerada a string para o rodapé da página
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
if len(casa["num_cep"])==8: cod_localidade=casa["cod_localidade"])
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] if len(casa["num_cep"]) == 8:
cep = casa["num_cep"][:4] + "-" + casa["num_cep"][5:]
else: else:
cep="" cep = ""
linha1=casa["end_casa"] linha1 = casa["end_casa"]
if cep!="": if cep != "":
if casa["end_casa"]!="" and casa["end_casa"]!=None: if casa["end_casa"] != "" and casa["end_casa"] != None:
linha1 = linha1 + " - " linha1 = linha1 + " - "
linha1 = linha1 + "CEP "+cep linha1 = linha1 + "CEP " + cep
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: if localidade[0].nom_localidade != "" and localidade[0].nom_localidade != None:
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf linha1 = linha1 + " - " + \
if casa["num_tel"]!="" and casa["num_tel"]!=None: localidade[0].nom_localidade + " " + localidade[0].sgl_uf
linha1 = linha1 + " Tel.: "+ casa["num_tel"] if casa["num_tel"] != "" and casa["num_tel"] != None:
linha1 = linha1 + " Tel.: " + casa["num_tel"]
linha2=casa["end_web_casa"]
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: linha2 = casa["end_web_casa"]
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: if casa["end_email_casa"] != "" and casa["end_email_casa"] != None:
linha2 = linha2 + " - " if casa["end_web_casa"] != "" and casa["end_web_casa"] != None:
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] linha2 = linha2 + " - "
linha2 = linha2 + "E-mail: " + casa["end_email_casa"]
data_emissao=DateTime().strftime("%d/%m/%Y")
rodape=[linha1,linha2,data_emissao] data_emissao = DateTime().strftime("%d/%m/%Y")
rodape = [linha1, linha2, data_emissao]
#Por fim, gera-se as entradas para o cabeçalho
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") # Por fim, gera-se as entradas para o cabeçalho
estados = context.zsql.localidade_obter_zsql(tip_localidade="u")
for uf in estados: for uf in estados:
if localidade[0].sgl_uf==uf.sgl_uf: if localidade[0].sgl_uf == uf.sgl_uf:
nom_estado=uf.nom_localidade nom_estado = uf.nom_localidade
break break
cabecalho={} cabecalho = {}
cabecalho["nom_casa"]=casa["nom_casa"] cabecalho["nom_casa"] = casa["nom_casa"]
cabecalho["nom_estado"]="Estado de "+nom_estado cabecalho["nom_estado"] = "Estado de " + nom_estado
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados # Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados
protocolos=[] protocolos = []
REQUEST=context.REQUEST REQUEST = context.REQUEST
for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'], for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'],
cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST['txt_ano_protocolo'], cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST[
tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST['rad_tip_processo'], 'txt_ano_protocolo'],
tip_materia=REQUEST['lst_tip_materia'], des_assunto=REQUEST['txt_assunto'], tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST[
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST['txa_txt_interessado'], 'rad_tip_processo'],
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']): tip_materia=REQUEST[
dic={} 'lst_tip_materia'], des_assunto=REQUEST['txt_assunto'],
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST[
'txa_txt_interessado'],
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']):
dic = {}
dic['titulo']=str(protocolo.cod_protocolo) dic['titulo'] = str(protocolo.cod_protocolo)
dic['data']='Data: '+context.pysc.iso_to_port_pysc(protocolo.dat_protocolo)+' Horário: '+protocolo.hor_protocolo[0:2]+':'+protocolo.hor_protocolo[3:5] dic['data'] = 'Data: ' + context.pysc.iso_to_port_pysc(
protocolo.dat_protocolo) + ' Horário: ' + protocolo.hor_protocolo[0:2] + ':' + protocolo.hor_protocolo[3:5]
dic['txt_assunto']=protocolo.txt_assunto_ementa dic['txt_assunto'] = protocolo.txt_assunto_ementa
dic['txt_interessado']=protocolo.txt_interessado dic['txt_interessado'] = protocolo.txt_interessado
dic['nom_autor'] = " " dic['nom_autor'] = " "
if protocolo.cod_autor!=None: if protocolo.cod_autor != None:
for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor): for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor):
if autor.des_tipo_autor=='Parlamentar': if autor.des_tipo_autor == 'Parlamentar':
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar):
dic['nom_autor']=parlamentar.nom_completo dic['nom_autor'] = parlamentar.nom_completo
elif autor.des_tipo_autor=='Comissao': elif autor.des_tipo_autor == 'Comissao':
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao):
dic['nom_autor']=comissao.nom_comissao dic['nom_autor'] = comissao.nom_comissao
else: else:
dic['nom_autor']=autor.nom_autor dic['nom_autor'] = autor.nom_autor
dic['natureza']='' dic['natureza'] = ''
if protocolo.tip_processo==0: if protocolo.tip_processo == 0:
dic['natureza']='Administrativo' dic['natureza'] = 'Administrativo'
if protocolo.tip_processo==1: if protocolo.tip_processo == 1:
dic['natureza']='Legislativo' dic['natureza'] = 'Legislativo'
dic['num_materia']=''
for materia in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo,ano_ident_basica=protocolo.ano_protocolo):
dic['num_materia']=materia.sgl_tipo_materia+' '+str(materia.num_ident_basica)+'/'+str(materia.ano_ident_basica)
dic['num_documento']='' dic['num_materia'] = ''
for documento in context.zsql.documento_administrativo_obter_zsql(num_protocolo=protocolo.cod_protocolo): for materia in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo, ano_ident_basica=protocolo.ano_protocolo):
dic['num_documento']=documento.sgl_tipo_documento+' '+str(documento.num_documento)+'/'+ str(documento.ano_documento) dic['num_materia'] = materia.sgl_tipo_materia + ' ' + \
str(materia.num_ident_basica) + '/' + str(materia.ano_ident_basica)
dic['ident_processo']=dic['num_materia'] or dic['num_documento'] dic['num_documento'] = ''
for documento in context.zsql.documento_administrativo_obter_zsql(num_protocolo=protocolo.cod_protocolo):
dic['num_documento'] = documento.sgl_tipo_documento + ' ' + \
str(documento.num_documento) + '/' + str(documento.ano_documento)
dic['processo']=protocolo.des_tipo_materia or protocolo.des_tipo_documento dic['ident_processo'] = dic['num_materia'] or dic['num_documento']
dic['anulado']='' dic['processo'] = protocolo.des_tipo_materia or protocolo.des_tipo_documento
if protocolo.ind_anulado==1:
dic['anulado']='Nulo'
protocolos.append(dic) dic['anulado'] = ''
if protocolo.ind_anulado == 1:
dic['anulado'] = 'Nulo'
filtro={} # Dicionário que conterá os dados do filtro protocolos.append(dic)
filtro = {} # Dicionário que conterá os dados do filtro
# Atribuições diretas do REQUEST # Atribuições diretas do REQUEST
filtro['numero']=REQUEST.txt_num_protocolo filtro['numero'] = REQUEST.txt_num_protocolo
filtro['ano']=REQUEST.txt_ano_protocolo filtro['ano'] = REQUEST.txt_ano_protocolo
filtro['tipo_protocolo']=REQUEST.rad_tip_protocolo filtro['tipo_protocolo'] = REQUEST.rad_tip_protocolo
filtro['tipo_processo']=REQUEST.rad_tip_processo filtro['tipo_processo'] = REQUEST.rad_tip_processo
filtro['assunto']=REQUEST.txt_assunto filtro['assunto'] = REQUEST.txt_assunto
filtro['autor']=REQUEST.hdn_cod_autor filtro['autor'] = REQUEST.hdn_cod_autor
filtro['interessado']=REQUEST.txa_txt_interessado filtro['interessado'] = REQUEST.txa_txt_interessado
sessao=session.id sessao = session.id
caminho = context.pdf_etiqueta_protocolo_gerar(sessao,imagem,data,protocolos,cabecalho,rodape,filtro) caminho = context.pdf_etiqueta_protocolo_gerar(
if caminho=='aviso': sessao, imagem, data, protocolos, cabecalho, rodape, filtro)
return response.redirect('mensagem_emitir_proc') if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

152
sapl/relatorios/templates/pdf_materia_gerar.py

@ -1,4 +1,4 @@
##parameters=sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro # parameters=sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro
"""relatorio_materia.py """relatorio_materia.py
External method para gerar o arquivo rml do resultado de uma pesquisa de matérias External method para gerar o arquivo rml do resultado de uma pesquisa de matérias
@ -11,100 +11,113 @@ import time
from trml2pdf import parseString from trml2pdf import parseString
def cabecalho(dic_cabecalho,imagem): def cabecalho(dic_cabecalho, imagem):
"""Gera o codigo rml do cabecalho""" """Gera o codigo rml do cabecalho"""
tmp_data='' tmp_data = ''
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' tmp_data += '\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n'
tmp_data+='\t\t\t\t<lines>2cm 25cm 19cm 25cm</lines>\n' tmp_data += '\t\t\t\t<lines>2cm 25cm 19cm 25cm</lines>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="16"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica-Bold" size="16"/>\n'
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.1cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' tmp_data += '\t\t\t\t<drawString x="5cm" y="27.1cm">' + \
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="13"/>\n' dic_cabecalho['nom_casa'] + '</drawString>\n'
tmp_data+='\t\t\t\t<drawString x="5cm" y="26.5cm">' + dic_cabecalho['nom_estado'] + '</drawString>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="13"/>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n' tmp_data += '\t\t\t\t<drawString x="5cm" y="26.5cm">' + \
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">Relatório de Matérias Legislativas</drawCentredString>\n' dic_cabecalho['nom_estado'] + '</drawString>\n'
tmp_data += '\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n'
tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">Relatório de Matérias Legislativas</drawCentredString>\n'
return tmp_data return tmp_data
def rodape(lst_rodape): def rodape(lst_rodape):
"""Gera o codigo rml do rodape""" """Gera o codigo rml do rodape"""
tmp_data='' tmp_data = ''
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' tmp_data += '\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="8"/>\n'
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' tmp_data += '\t\t\t\t<drawString x="2cm" y="3.3cm">' + \
tmp_data+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' lst_rodape[2] + '</drawString>\n'
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' tmp_data += '\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n'
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + \
lst_rodape[0] + '</drawCentredString>\n'
tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + \
lst_rodape[1] + '</drawCentredString>\n'
return tmp_data return tmp_data
def paraStyle(): def paraStyle():
"""Gera o codigo rml que define o estilo dos paragrafos""" """Gera o codigo rml que define o estilo dos paragrafos"""
tmp_data='' tmp_data = ''
tmp_data+='\t<stylesheet>\n' tmp_data += '\t<stylesheet>\n'
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' tmp_data += '\t\t<blockTableStyle id="Standard_Outline">\n'
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' tmp_data += '\t\t\t<blockAlignment value="LEFT"/>\n'
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' tmp_data += '\t\t\t<blockValign value="TOP"/>\n'
tmp_data+='\t\t</blockTableStyle>\n' tmp_data += '\t\t</blockTableStyle>\n'
tmp_data+='\t\t<initialize>\n' tmp_data += '\t\t<initialize>\n'
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' tmp_data += '\t\t\t<paraStyle name="all" alignment="justify"/>\n'
tmp_data+='\t\t</initialize>\n' tmp_data += '\t\t</initialize>\n'
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="12" spaceAfter="2" alignment="left"/>\n' tmp_data += '\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="12" spaceAfter="2" alignment="left"/>\n'
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="9.0" leading="12" spaceAfter="2" alignment="justify"/>\n' tmp_data += '\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="9.0" leading="12" spaceAfter="2" alignment="justify"/>\n'
tmp_data+='\t</stylesheet>\n' tmp_data += '\t</stylesheet>\n'
return tmp_data return tmp_data
def materias(lst_materias): def materias(lst_materias):
"""Gera o codigo rml do conteudo da pesquisa de materias""" """Gera o codigo rml do conteudo da pesquisa de materias"""
tmp_data='' tmp_data = ''
#inicio do bloco que contem os flowables # inicio do bloco que contem os flowables
tmp_data+='\t<story>\n' tmp_data += '\t<story>\n'
for dic in lst_materias: for dic in lst_materias:
#espaco inicial # espaco inicial
tmp_data+='\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data+='\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data+='\t\t</para>\n' tmp_data += '\t\t</para>\n'
#condicao para a quebra de pagina # condicao para a quebra de pagina
tmp_data+='\t\t<condPageBreak height="1.5cm"/>\n' tmp_data += '\t\t<condPageBreak height="1.5cm"/>\n'
#materias # materias
tmp_data+='\t\t<para style="P1"> <b>'+ dic['titulo'] +'</b> - <b>Autor: </b>' + dic['nom_autor'] + ' </para>\n' tmp_data += '\t\t<para style="P1"> <b>' + \
if dic['txt_ementa']!=None: dic['titulo'] + '</b> - <b>Autor: </b>' + \
txt_ementa = dic['txt_ementa'].replace('&','&amp;') dic['nom_autor'] + ' </para>\n'
tmp_data+='\t\t<para style="P2"> '+ txt_ementa +' </para>\n' if dic['txt_ementa'] != None:
tmp_data+='\t\t<para style="P2"><b>Situação:</b> ' + dic['des_situacao'] + '/ <b>Norma Jurídica Vinculada:</b> ' + dic['norma_vinculada'] + '</para>\n' txt_ementa = dic['txt_ementa'].replace('&', '&amp;')
tmp_data += '\t\t<para style="P2"> ' + txt_ementa + ' </para>\n'
tmp_data+='\t</story>\n' tmp_data += '\t\t<para style="P2"><b>Situação:</b> ' + \
dic['des_situacao'] + '/ <b>Norma Jurídica Vinculada:</b> ' + \
dic['norma_vinculada'] + '</para>\n'
tmp_data += '\t</story>\n'
return tmp_data return tmp_data
def principal(imagem, lst_materias, dic_cabecalho, lst_rodape): def principal(imagem, lst_materias, dic_cabecalho, lst_rodape):
"""Funcao pricipal que gera a estrutura global do arquivo rml""" """Funcao pricipal que gera a estrutura global do arquivo rml"""
arquivoPdf=str(int(time.time()*100))+".pdf" arquivoPdf = str(int(time.time() * 100)) + ".pdf"
tmp_data='' tmp_data = ''
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' tmp_data += '<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n'
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' tmp_data += '<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n'
tmp_data+='<document filename="relatorio.pdf">\n' tmp_data += '<document filename="relatorio.pdf">\n'
tmp_data+='\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n' tmp_data += '\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n'
tmp_data+='\t\t<pageTemplate id="first">\n' tmp_data += '\t\t<pageTemplate id="first">\n'
tmp_data+='\t\t\t<pageGraphics>\n' tmp_data += '\t\t\t<pageGraphics>\n'
tmp_data+=cabecalho(dic_cabecalho,imagem) tmp_data += cabecalho(dic_cabecalho, imagem)
tmp_data+=rodape(lst_rodape) tmp_data += rodape(lst_rodape)
tmp_data+='\t\t\t</pageGraphics>\n' tmp_data += '\t\t\t</pageGraphics>\n'
tmp_data+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="21cm"/>\n' tmp_data += '\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="21cm"/>\n'
tmp_data+='\t\t</pageTemplate>\n' tmp_data += '\t\t</pageTemplate>\n'
tmp_data+='\t</template>\n' tmp_data += '\t</template>\n'
tmp_data+=paraStyle() tmp_data += paraStyle()
tmp_data+=materias(lst_materias) tmp_data += materias(lst_materias)
tmp_data+='</document>\n' tmp_data += '</document>\n'
tmp_pdf=parseString(tmp_data) tmp_pdf = parseString(tmp_data)
return tmp_pdf return tmp_pdf
@ -116,4 +129,5 @@ def principal(imagem, lst_materias, dic_cabecalho, lst_rodape):
# return "/temp_folder/"+arquivoPdf # return "/temp_folder/"+arquivoPdf
# return principal(sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro) # return
# principal(sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro)

272
sapl/relatorios/templates/pdf_materia_preparar_pysc.py

@ -1,155 +1,169 @@
import os import os
request=context.REQUEST request = context.REQUEST
#print request # print request
#return printed # return printed
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
data=DateTime().strftime('%d/%m/%Y') data = DateTime().strftime('%d/%m/%Y')
#Abaixo é gerada a string para o rodapé da página # Abaixo é gerada a string para o rodapé da página
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
if len(casa["num_cep"])==8: cod_localidade=casa["cod_localidade"])
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] if len(casa["num_cep"]) == 8:
cep = casa["num_cep"][:4] + "-" + casa["num_cep"][5:]
else: else:
cep="" cep = ""
linha1=casa["end_casa"] linha1 = casa["end_casa"]
if cep!="": if cep != "":
if casa["end_casa"]!="" and casa["end_casa"]!=None: if casa["end_casa"] != "" and casa["end_casa"] != None:
linha1 = linha1 + " - " linha1 = linha1 + " - "
linha1 = linha1 + "CEP "+cep linha1 = linha1 + "CEP " + cep
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: if localidade[0].nom_localidade != "" and localidade[0].nom_localidade != None:
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf linha1 = linha1 + " - " + \
if casa["num_tel"]!="" and casa["num_tel"]!=None: localidade[0].nom_localidade + " " + localidade[0].sgl_uf
linha1 = linha1 + " Tel.: "+ casa["num_tel"] if casa["num_tel"] != "" and casa["num_tel"] != None:
linha1 = linha1 + " Tel.: " + casa["num_tel"]
linha2=casa["end_web_casa"]
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: linha2 = casa["end_web_casa"]
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: if casa["end_email_casa"] != "" and casa["end_email_casa"] != None:
linha2 = linha2 + " - " if casa["end_web_casa"] != "" and casa["end_web_casa"] != None:
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] linha2 = linha2 + " - "
linha2 = linha2 + "E-mail: " + casa["end_email_casa"]
data_emissao=DateTime().strftime("%d/%m/%Y")
rodape=[linha1,linha2,data_emissao] data_emissao = DateTime().strftime("%d/%m/%Y")
rodape = [linha1, linha2, data_emissao]
#Por fim, gera-se as entradas para o cabeçalho
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") # Por fim, gera-se as entradas para o cabeçalho
estados = context.zsql.localidade_obter_zsql(tip_localidade="u")
for uf in estados: for uf in estados:
if localidade[0].sgl_uf==uf.sgl_uf: if localidade[0].sgl_uf == uf.sgl_uf:
nom_estado=uf.nom_localidade nom_estado = uf.nom_localidade
break break
cabecalho={} cabecalho = {}
cabecalho["nom_casa"]=casa["nom_casa"] cabecalho["nom_casa"] = casa["nom_casa"]
cabecalho["nom_estado"]="Estado de "+nom_estado cabecalho["nom_estado"] = "Estado de " + nom_estado
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Por fim, utiliza o PythonScript para pesquisar as matérias e gerar os dados # Por fim, utiliza o PythonScript para pesquisar as matérias e gerar os dados
materias=[] materias = []
REQUEST=context.REQUEST REQUEST = context.REQUEST
for materia in context.zsql.materia_pesquisar_zsql(tip_id_basica=REQUEST['lst_tip_materia'], num_ident_basica=REQUEST['txt_numero'], for materia in context.zsql.materia_pesquisar_zsql(tip_id_basica=REQUEST['lst_tip_materia'], num_ident_basica=REQUEST['txt_numero'],
ano_ident_basica=REQUEST['txt_ano'], ind_tramitacao=REQUEST['rad_tramitando'], ano_ident_basica=REQUEST[
des_assunto=REQUEST['txt_assunto'], nom_relator=REQUEST['txt_relator'], 'txt_ano'], ind_tramitacao=REQUEST['rad_tramitando'],
cod_status=REQUEST['lst_status'], des_tipo_autor=REQUEST['lst_tip_autor'], des_assunto=REQUEST[
dat_apresentacao=REQUEST['dt_apres'], dat_apresentacao2=REQUEST['dt_apres2'], 'txt_assunto'], nom_relator=REQUEST['txt_relator'],
dat_publicacao=REQUEST['dt_public'], dat_publicacao2=REQUEST['dt_public2'], cod_status=REQUEST['lst_status'], des_tipo_autor=REQUEST[
cod_partido=REQUEST['lst_cod_partido'],cod_autor=REQUEST['hdn_cod_autor'], 'lst_tip_autor'],
rd_ordem=REQUEST['rd_ordenacao'],rd_ordem_td=REQUEST['rd_ordem_td']): dat_apresentacao=REQUEST[
'dt_apres'], dat_apresentacao2=REQUEST['dt_apres2'],
dic={} dat_publicacao=REQUEST[
'dt_public'], dat_publicacao2=REQUEST['dt_public2'],
dic['titulo']=materia.sgl_tipo_materia+" "+materia.des_tipo_materia+" "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) cod_partido=REQUEST['lst_cod_partido'], cod_autor=REQUEST[
dic['txt_ementa']=materia.txt_ementa 'hdn_cod_autor'],
dic['nom_autor'] = " " rd_ordem=REQUEST['rd_ordenacao'], rd_ordem_td=REQUEST['rd_ordem_td']):
for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia):
for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor): dic = {}
if autor.des_tipo_autor=='Parlamentar':
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): dic['titulo'] = materia.sgl_tipo_materia + " " + materia.des_tipo_materia + \
dic['nom_autor']=parlamentar.nom_completo " " + str(materia.num_ident_basica) + "/" + \
elif autor.des_tipo_autor=='Comissao': str(materia.ano_ident_basica)
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): dic['txt_ementa'] = materia.txt_ementa
dic['nom_autor']=comissao.nom_comissao dic['nom_autor'] = " "
else: for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia):
dic['nom_autor']=autor.nom_autor for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor):
if autor.des_tipo_autor == 'Parlamentar':
des_status = '' for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar):
txt_tramitacao='' dic['nom_autor'] = parlamentar.nom_completo
elif autor.des_tipo_autor == 'Comissao':
dic['localizacao_atual']=" " for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao):
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia,ind_ult_tramitacao=1): dic['nom_autor'] = comissao.nom_comissao
if tramitacao.cod_unid_tram_dest:
cod_unid_tram = tramitacao.cod_unid_tram_dest
else: else:
cod_unid_tram = tramitacao.cod_unid_tram_local dic['nom_autor'] = autor.nom_autor
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = cod_unid_tram):
if unidade_tramitacao.cod_orgao:
dic['localizacao_atual']=unidade_tramitacao.nom_orgao
else:
dic['localizacao_atual']=unidade_tramitacao.nom_comissao
des_status=tramitacao.des_status
txt_tramitacao=tramitacao.txt_tramitacao
dic['des_situacao']=des_status des_status = ''
dic['ultima_acao']=txt_tramitacao txt_tramitacao = ''
dic['localizacao_atual'] = " "
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia, ind_ult_tramitacao=1):
if tramitacao.cod_unid_tram_dest:
cod_unid_tram = tramitacao.cod_unid_tram_dest
else:
cod_unid_tram = tramitacao.cod_unid_tram_local
dic['norma_vinculada']=" " for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao=cod_unid_tram):
for norma_vinculada in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia): if unidade_tramitacao.cod_orgao:
dic['norma_vinculada']=norma_vinculada.des_norma+" "+str(norma_vinculada.num_norma)+"/"+str(norma_vinculada.ano_norma) dic['localizacao_atual'] = unidade_tramitacao.nom_orgao
else:
dic['localizacao_atual'] = unidade_tramitacao.nom_comissao
des_status = tramitacao.des_status
txt_tramitacao = tramitacao.txt_tramitacao
dic['des_situacao'] = des_status
dic['ultima_acao'] = txt_tramitacao
dic['norma_vinculada'] = " "
for norma_vinculada in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia):
dic['norma_vinculada'] = norma_vinculada.des_norma + " " + \
str(norma_vinculada.num_norma) + "/" + \
str(norma_vinculada.ano_norma)
materias.append(dic) materias.append(dic)
filtro={} # Dicionário que conterá os dados do filtro filtro = {} # Dicionário que conterá os dados do filtro
# Atribuições diretas do REQUEST # Atribuições diretas do REQUEST
filtro['numero']=REQUEST.txt_numero filtro['numero'] = REQUEST.txt_numero
filtro['ano']=REQUEST.txt_ano filtro['ano'] = REQUEST.txt_ano
filtro['autor']=REQUEST.hdn_txt_autor filtro['autor'] = REQUEST.hdn_txt_autor
filtro['tipo_autor']=REQUEST.lst_tip_autor filtro['tipo_autor'] = REQUEST.lst_tip_autor
filtro['relator']=REQUEST.txt_relator filtro['relator'] = REQUEST.txt_relator
filtro['assunto']=REQUEST.txt_assunto filtro['assunto'] = REQUEST.txt_assunto
# Atribuição do restante dos dados que precisam de processamento # Atribuição do restante dos dados que precisam de processamento
if REQUEST.hdn_txt_autor==' ': # Corrige bug do Netscape if REQUEST.hdn_txt_autor == ' ': # Corrige bug do Netscape
filtro['autor']='' filtro['autor'] = ''
filtro['tipo_materia']='' filtro['tipo_materia'] = ''
if REQUEST.lst_tip_materia!='': if REQUEST.lst_tip_materia != '':
for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(ind_excluido=0, tip_materia=REQUEST.lst_tip_materia): for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(ind_excluido=0, tip_materia=REQUEST.lst_tip_materia):
filtro['tipo_materia']= tipo_materia.sgl_tipo_materia + ' - ' + tipo_materia.des_tipo_materia filtro['tipo_materia'] = tipo_materia.sgl_tipo_materia + \
' - ' + tipo_materia.des_tipo_materia
filtro['partido']=''
if REQUEST.lst_cod_partido!='': filtro['partido'] = ''
for partido in context.zsql.partido_obter_zsql(ind_excluido=0,cod_partido=REQUEST.lst_cod_partido): if REQUEST.lst_cod_partido != '':
filtro['partido']=partido.sgl_partido + ' - ' + partido.nom_partido for partido in context.zsql.partido_obter_zsql(ind_excluido=0, cod_partido=REQUEST.lst_cod_partido):
filtro['partido'] = partido.sgl_partido + ' - ' + partido.nom_partido
filtro['tramitando']=''
if REQUEST.rad_tramitando=='1': filtro['tramitando'] = ''
filtro['tramitacao']='Sim' if REQUEST.rad_tramitando == '1':
elif REQUEST['rad_tramitando']=='0': filtro['tramitacao'] = 'Sim'
filtro['tramitacao']='Não' elif REQUEST['rad_tramitando'] == '0':
filtro['tramitacao'] = 'Não'
filtro['situacao_atual']=''
if REQUEST.lst_status!='': filtro['situacao_atual'] = ''
for status in context.zsql.status_tramitacao_obter_zsql(ind_excluido=0,cod_status=REQUEST.lst_status): if REQUEST.lst_status != '':
filtro['situacao_atual']=status.sgl_status + ' - ' + status.des_status for status in context.zsql.status_tramitacao_obter_zsql(ind_excluido=0, cod_status=REQUEST.lst_status):
filtro['situacao_atual'] = status.sgl_status + \
sessao=session.id ' - ' + status.des_status
caminho = context.pdf_materia_gerar(sessao,imagem,data,materias,cabecalho,rodape,filtro)
if caminho=='aviso': sessao = session.id
return response.redirect('mensagem_emitir_proc') caminho = context.pdf_materia_gerar(
sessao, imagem, data, materias, cabecalho, rodape, filtro)
if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

164
sapl/relatorios/templates/pdf_norma_gerar.py

@ -1,4 +1,4 @@
##parameters=sessao,imagem,data,lst_normas,dic_cabecalho,lst_rodape,dic_filtro # parameters=sessao,imagem,data,lst_normas,dic_cabecalho,lst_rodape,dic_filtro
"""relatorio_norma.py """relatorio_norma.py
External method para gerar o arquivo rml do resultado de uma pesquisa de normas External method para gerar o arquivo rml do resultado de uma pesquisa de normas
@ -11,108 +11,117 @@ import time
from trml2pdf import parseString from trml2pdf import parseString
def cabecalho(inf_basicas_dic,imagem): def cabecalho(inf_basicas_dic, imagem):
"""Gera o codigo rml do cabecalho""" """Gera o codigo rml do cabecalho"""
tmp_data='' tmp_data = ''
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' tmp_data += '\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n'
tmp_data+='\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n' tmp_data += '\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="15"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica-Bold" size="15"/>\n'
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' tmp_data += '\t\t\t\t<drawString x="5cm" y="27.2cm">' + \
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' dic_cabecalho['nom_casa'] + '</drawString>\n'
tmp_data+='\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="12"/>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n' tmp_data += '\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n'
tmp_data+='\t\t\t\t<drawString x="2.2cm" y="24.6cm">Relatório de Normas Jurídicas</drawString>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n'
tmp_data += '\t\t\t\t<drawString x="2.2cm" y="24.6cm">Relatório de Normas Jurídicas</drawString>\n'
return tmp_data return tmp_data
def rodape(lst_rodape): def rodape(lst_rodape):
"""Gera o codigo rml do rodape""" """Gera o codigo rml do rodape"""
tmp_data='' tmp_data = ''
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' tmp_data += '\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="8"/>\n'
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' tmp_data += '\t\t\t\t<drawString x="2cm" y="3.3cm">' + \
tmp_data+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' lst_rodape[2] + '</drawString>\n'
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' tmp_data += '\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n'
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + \
lst_rodape[0] + '</drawCentredString>\n'
tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + \
lst_rodape[1] + '</drawCentredString>\n'
return tmp_data return tmp_data
def paraStyle(): def paraStyle():
"""Gera o codigo rml que define o estilo dos paragrafos""" """Gera o codigo rml que define o estilo dos paragrafos"""
tmp_data='' tmp_data = ''
tmp_data+='\t<stylesheet>\n' tmp_data += '\t<stylesheet>\n'
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' tmp_data += '\t\t<blockTableStyle id="Standard_Outline">\n'
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' tmp_data += '\t\t\t<blockAlignment value="LEFT"/>\n'
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' tmp_data += '\t\t\t<blockValign value="TOP"/>\n'
tmp_data+='\t\t</blockTableStyle>\n' tmp_data += '\t\t</blockTableStyle>\n'
tmp_data+='\t\t<initialize>\n' tmp_data += '\t\t<initialize>\n'
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' tmp_data += '\t\t\t<paraStyle name="all" alignment="justify"/>\n'
tmp_data+='\t\t</initialize>\n' tmp_data += '\t\t</initialize>\n'
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n' tmp_data += '\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n'
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="13" alignment="justify"/>\n' tmp_data += '\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="13" alignment="justify"/>\n'
tmp_data+='\t</stylesheet>\n' tmp_data += '\t</stylesheet>\n'
return tmp_data return tmp_data
def normas(lst_normas): def normas(lst_normas):
"""Gera o codigo rml do conteudo da pesquisa de normas""" """Gera o codigo rml do conteudo da pesquisa de normas"""
tmp_data='' tmp_data = ''
#inicio do bloco que contem os flowables # inicio do bloco que contem os flowables
tmp_data+='\t<story>\n' tmp_data += '\t<story>\n'
for dic in lst_normas: for dic in lst_normas:
#espaco inicial # espaco inicial
tmp_data+='\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data+='\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data+='\t\t</para>\n' tmp_data += '\t\t</para>\n'
tmp_data+='\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data+='\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data+='\t\t</para>\n' tmp_data += '\t\t</para>\n'
#condicao para a quebra de pagina # condicao para a quebra de pagina
tmp_data+='\t\t<condPageBreak height="4cm"/>\n' tmp_data += '\t\t<condPageBreak height="4cm"/>\n'
#normas # normas
if dic['titulo']!=None: if dic['titulo'] != None:
tmp_data+='\t\t<para style="P1">' + dic['titulo'] + '</para>\n' tmp_data += '\t\t<para style="P1">' + dic['titulo'] + '</para>\n'
tmp_data+='\t\t<para style="P1">\n' tmp_data += '\t\t<para style="P1">\n'
tmp_data+='\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data+='\t\t</para>\n' tmp_data += '\t\t</para>\n'
if dic['txt_ementa']!=None: if dic['txt_ementa'] != None:
txt_ementa = dic['txt_ementa'].replace('&','&amp;') txt_ementa = dic['txt_ementa'].replace('&', '&amp;')
tmp_data+='\t\t<para style="P2">' + txt_ementa + '</para>\n' tmp_data += '\t\t<para style="P2">' + txt_ementa + '</para>\n'
if dic['materia_vinculada']!=None: if dic['materia_vinculada'] != None:
tmp_data+='\t\t<para style="P2"><b>Matéria Legislativa:</b> ' + dic['materia_vinculada'] + '</para>\n' tmp_data += '\t\t<para style="P2"><b>Matéria Legislativa:</b> ' + \
dic['materia_vinculada'] + '</para>\n'
tmp_data+='\t</story>\n'
tmp_data += '\t</story>\n'
return tmp_data return tmp_data
def principal(imagem, lst_normas, dic_cabecalho, lst_rodape): def principal(imagem, lst_normas, dic_cabecalho, lst_rodape):
"""Funcao pricipal que gera a estrutura global do arquivo rml""" """Funcao pricipal que gera a estrutura global do arquivo rml"""
arquivoPdf=str(int(time.time()*100))+".pdf" arquivoPdf = str(int(time.time() * 100)) + ".pdf"
tmp_data='' tmp_data = ''
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' tmp_data += '<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n'
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' tmp_data += '<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n'
tmp_data+='<document filename="relatorio.pdf">\n' tmp_data += '<document filename="relatorio.pdf">\n'
tmp_data+='\t<template pageSize="(21cm, 29.7cm)" title="Relatório de Normas Jurídicas" author="Luciano De Fazio" allowSplitting="20">\n' tmp_data += '\t<template pageSize="(21cm, 29.7cm)" title="Relatório de Normas Jurídicas" author="Luciano De Fazio" allowSplitting="20">\n'
tmp_data+='\t\t<pageTemplate id="first">\n' tmp_data += '\t\t<pageTemplate id="first">\n'
tmp_data+='\t\t\t<pageGraphics>\n' tmp_data += '\t\t\t<pageGraphics>\n'
tmp_data+=cabecalho(dic_cabecalho,imagem) tmp_data += cabecalho(dic_cabecalho, imagem)
tmp_data+=rodape(lst_rodape) tmp_data += rodape(lst_rodape)
tmp_data+='\t\t\t</pageGraphics>\n' tmp_data += '\t\t\t</pageGraphics>\n'
tmp_data+='\t\t\t<frame id="first" x1="2cm" y1="3cm" width="17cm" height="21cm"/>\n' tmp_data += '\t\t\t<frame id="first" x1="2cm" y1="3cm" width="17cm" height="21cm"/>\n'
tmp_data+='\t\t</pageTemplate>\n' tmp_data += '\t\t</pageTemplate>\n'
tmp_data+='\t</template>\n' tmp_data += '\t</template>\n'
tmp_data+=paraStyle() tmp_data += paraStyle()
tmp_data+=normas(lst_normas) tmp_data += normas(lst_normas)
tmp_data+='</document>\n' tmp_data += '</document>\n'
tmp_pdf=parseString(tmp_data) tmp_pdf = parseString(tmp_data)
return tmp_pdf return tmp_pdf
@ -124,4 +133,5 @@ def principal(imagem, lst_normas, dic_cabecalho, lst_rodape):
# return "/temp_folder/"+arquivoPdf # return "/temp_folder/"+arquivoPdf
# return principal(sessao,imagem,data,lst_normas,dic_cabecalho,lst_rodape,dic_filtro) # return
# principal(sessao,imagem,data,lst_normas,dic_cabecalho,lst_rodape,dic_filtro)

153
sapl/relatorios/templates/pdf_norma_preparar_pysc.py

@ -1,94 +1,105 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
data=DateTime().strftime('%d/%m/%Y') data = DateTime().strftime('%d/%m/%Y')
#Abaixo é gerada a string para o rodapé da página # Abaixo é gerada a string para o rodapé da página
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
if len(casa["num_cep"])==8: cod_localidade=casa["cod_localidade"])
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] if len(casa["num_cep"]) == 8:
cep = casa["num_cep"][:4] + "-" + casa["num_cep"][5:]
else: else:
cep="" cep = ""
linha1=casa["end_casa"] linha1 = casa["end_casa"]
if cep!="": if cep != "":
if casa["end_casa"]!="" and casa["end_casa"]!=None: if casa["end_casa"] != "" and casa["end_casa"] != None:
linha1 = linha1 + " - " linha1 = linha1 + " - "
linha1 = linha1 + "CEP "+cep linha1 = linha1 + "CEP " + cep
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: if localidade[0].nom_localidade != "" and localidade[0].nom_localidade != None:
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf linha1 = linha1 + " - " + \
if casa["num_tel"]!="" and casa["num_tel"]!=None: localidade[0].nom_localidade + " " + localidade[0].sgl_uf
linha1 = linha1 + " Tel.: "+ casa["num_tel"] if casa["num_tel"] != "" and casa["num_tel"] != None:
linha1 = linha1 + " Tel.: " + casa["num_tel"]
linha2=casa["end_web_casa"]
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: linha2 = casa["end_web_casa"]
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: if casa["end_email_casa"] != "" and casa["end_email_casa"] != None:
linha2 = linha2 + " - " if casa["end_web_casa"] != "" and casa["end_web_casa"] != None:
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] linha2 = linha2 + " - "
linha2 = linha2 + "E-mail: " + casa["end_email_casa"]
data_emissao=DateTime().strftime("%d/%m/%Y")
rodape=[linha1,linha2,data_emissao] data_emissao = DateTime().strftime("%d/%m/%Y")
rodape = [linha1, linha2, data_emissao]
#Por fim, gera-se as entradas para o cabeçalho
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") # Por fim, gera-se as entradas para o cabeçalho
estados = context.zsql.localidade_obter_zsql(tip_localidade="u")
for uf in estados: for uf in estados:
if localidade[0].sgl_uf==uf.sgl_uf: if localidade[0].sgl_uf == uf.sgl_uf:
nom_estado=uf.nom_localidade nom_estado = uf.nom_localidade
break break
cabecalho={} cabecalho = {}
cabecalho["nom_casa"]=casa["nom_casa"] cabecalho["nom_casa"] = casa["nom_casa"]
cabecalho["nom_estado"]="Estado de "+nom_estado cabecalho["nom_estado"] = "Estado de " + nom_estado
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Por fim, utiliza o PythonScript para pesquisar as normas e gerar os dados # Por fim, utiliza o PythonScript para pesquisar as normas e gerar os dados
normas=[] normas = []
REQUEST=context.REQUEST REQUEST = context.REQUEST
for norma in context.zsql.norma_juridica_obter_zsql(tip_norma=REQUEST['lst_tip_norma'], num_norma=REQUEST['txt_numero'], for norma in context.zsql.norma_juridica_obter_zsql(tip_norma=REQUEST['lst_tip_norma'], num_norma=REQUEST['txt_numero'],
ano_norma=REQUEST['txt_ano'], des_assunto=REQUEST['txt_assunto'], ano_norma=REQUEST['txt_ano'], des_assunto=REQUEST[
cod_assunto=REQUEST['lst_assunto_norma'], dat_norma=REQUEST['dt_norma'], 'txt_assunto'],
dat_norma2=REQUEST['dt_norma2'], dat_publicacao=REQUEST['dt_public'], cod_assunto=REQUEST[
dat_publicacao2=REQUEST['dt_public2'],rd_ordem=REQUEST['rd_ordenacao']): 'lst_assunto_norma'], dat_norma=REQUEST['dt_norma'],
dat_norma2=REQUEST[
'dt_norma2'], dat_publicacao=REQUEST['dt_public'],
dat_publicacao2=REQUEST['dt_public2'], rd_ordem=REQUEST['rd_ordenacao']):
dic={} dic = {}
dic['titulo']=norma.sgl_tipo_norma+""+str(norma.num_norma)+" de "+str(norma.dat_norma)+" - "+norma.des_tipo_norma dic['titulo'] = norma.sgl_tipo_norma + "" + \
dic['txt_ementa']=norma.txt_ementa str(norma.num_norma) + " de " + \
str(norma.dat_norma) + " - " + norma.des_tipo_norma
dic['txt_ementa'] = norma.txt_ementa
dic['materia_vinculada']=" " dic['materia_vinculada'] = " "
if norma.cod_materia!=None: if norma.cod_materia != None:
for materia_vinculada in context.zsql.materia_obter_zsql(cod_materia=str(norma.cod_materia)): for materia_vinculada in context.zsql.materia_obter_zsql(cod_materia=str(norma.cod_materia)):
dic['materia_vinculada']=materia_vinculada.sgl_tipo_materia+" "+str(materia_vinculada.num_ident_basica)+"/"+str(materia_vinculada.ano_ident_basica) dic['materia_vinculada'] = materia_vinculada.sgl_tipo_materia + " " + \
str(materia_vinculada.num_ident_basica) + "/" + \
str(materia_vinculada.ano_ident_basica)
normas.append(dic) normas.append(dic)
filtro={} # Dicionário que conterá os dados do filtro filtro = {} # Dicionário que conterá os dados do filtro
# Atribuições diretas do REQUEST # Atribuições diretas do REQUEST
filtro['numero']=REQUEST.txt_numero filtro['numero'] = REQUEST.txt_numero
filtro['ano']=REQUEST.txt_ano filtro['ano'] = REQUEST.txt_ano
filtro['assunto']=REQUEST.txt_assunto filtro['assunto'] = REQUEST.txt_assunto
filtro['tipo_norma']='' filtro['tipo_norma'] = ''
if REQUEST.lst_tip_norma!='': if REQUEST.lst_tip_norma != '':
for tipo_norma in context.zsql.tipo_norma_juridica_obter_zsql(ind_excluido=0, tip_norma=REQUEST.lst_tip_norma): for tipo_norma in context.zsql.tipo_norma_juridica_obter_zsql(ind_excluido=0, tip_norma=REQUEST.lst_tip_norma):
filtro['tipo_norma']= tipo_norma.sgl_tipo_norma + ' - ' + tipo_norma.des_tipo_norma filtro['tipo_norma'] = tipo_norma.sgl_tipo_norma + \
' - ' + tipo_norma.des_tipo_norma
sessao=session.id
caminho = context.pdf_norma_gerar(sessao,imagem,data,normas,cabecalho,rodape,filtro) sessao = session.id
if caminho=='aviso': caminho = context.pdf_norma_gerar(
return response.redirect('mensagem_emitir_proc') sessao, imagem, data, normas, cabecalho, rodape, filtro)
if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

180
sapl/relatorios/templates/pdf_ordem_dia_preparar_pysc.py

@ -1,97 +1,116 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
if context.REQUEST['cod_sessao_plen']!='': if context.REQUEST['cod_sessao_plen'] != '':
cod_sessao_plen = context.REQUEST['cod_sessao_plen'] cod_sessao_plen = context.REQUEST['cod_sessao_plen']
splen = [] # lista contendo as sessões plenárias na data indicada splen = [] # lista contendo as sessões plenárias na data indicada
pauta = [] # lista contendo a pauta da ordem do dia a ser impressa pauta = [] # lista contendo a pauta da ordem do dia a ser impressa
data = "" data = ""
for dat_sessao in context.zsql.sessao_plenaria_obter_zsql(cod_sessao_plen=cod_sessao_plen,ind_excluido=0): for dat_sessao in context.zsql.sessao_plenaria_obter_zsql(cod_sessao_plen=cod_sessao_plen, ind_excluido=0):
data = context.pysc.data_converter_pysc(dat_sessao.dat_inicio_sessao) # converte data para formato yyyy/mm/dd # converte data para formato yyyy/mm/dd
dat_ordem = context.pysc.data_converter_pysc(dat_sessao.dat_inicio_sessao) # converte data para formato yyyy/mm/dd data = context.pysc.data_converter_pysc(dat_sessao.dat_inicio_sessao)
dat_ordem = context.pysc.data_converter_pysc(
dat_sessao.dat_inicio_sessao) # converte data para formato yyyy/mm/dd
# seleciona dados da sessão plenária # seleciona dados da sessão plenária
for sp in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, ind_excluido=0): for sp in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, ind_excluido=0):
dicsp = {} # dicionário que armazenará os dados a serem impressos de uma sessão plenária dicsp = {} # dicionário que armazenará os dados a serem impressos de uma sessão plenária
ts = context.zsql.tipo_sessao_plenaria_obter_zsql(tip_sessao=sp.tip_sessao)[0] ts = context.zsql.tipo_sessao_plenaria_obter_zsql(
dicsp["sessao"] = str(sp.num_sessao_plen)+"ª Sessao "+ts.nom_sessao+" da "+str(sp.num_sessao_leg)+"ª Sessao Legislativa da "+str(sp.num_legislatura)+"ª Legislatura" tip_sessao=sp.tip_sessao)[0]
dia = context.pysc.data_converter_por_extenso_pysc(data=sp.dat_inicio_sessao) dicsp["sessao"] = str(sp.num_sessao_plen) + "ª Sessao " + ts.nom_sessao + " da " + str(
sp.num_sessao_leg) + "ª Sessao Legislativa da " + str(sp.num_legislatura) + "ª Legislatura"
dia = context.pysc.data_converter_por_extenso_pysc(
data=sp.dat_inicio_sessao)
hora = context.pysc.hora_formatar_pysc(hora=sp.hr_inicio_sessao) hora = context.pysc.hora_formatar_pysc(hora=sp.hr_inicio_sessao)
dicsp["datasessao"] = "Dia "+str(dia)+" ("+str(sp.dia_sessao)+") - Inicio as "+hora dicsp["datasessao"] = "Dia " + \
splen.append(dicsp) str(dia) + " (" + str(sp.dia_sessao) + ") - Inicio as " + hora
splen.append(dicsp)
# seleciona as matérias que compõem a pauta na data escolhida # seleciona as matérias que compõem a pauta na data escolhida
for ordem in context.zsql.ordem_dia_obter_zsql(dat_ordem=data, ind_excluido=0): for ordem in context.zsql.ordem_dia_obter_zsql(dat_ordem=data, ind_excluido=0):
# seleciona os detalhes de uma matéria # seleciona os detalhes de uma matéria
materia = context.zsql.materia_obter_zsql(cod_materia=ordem.cod_materia)[0] materia = context.zsql.materia_obter_zsql(
dic = {} # dicionário que armazenará os dados a serem impressos de uma matéria cod_materia=ordem.cod_materia)[0]
dic = {} # dicionário que armazenará os dados a serem impressos de uma matéria
dic["num_ordem"] = ordem.num_ordem dic["num_ordem"] = ordem.num_ordem
dic["id_materia"] = materia.des_tipo_materia+" - Nº "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) dic["id_materia"] = materia.des_tipo_materia + " - Nº " + \
str(materia.num_ident_basica) + "/" + str(materia.ano_ident_basica)
# dic["id_materia"] = materia.sgl_tipo_materia+" - "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica)+" - "+materia.des_tipo_materia # dic["id_materia"] = materia.sgl_tipo_materia+" - "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica)+" - "+materia.des_tipo_materia
dic["txt_ementa"] = ordem.txt_observacao dic["txt_ementa"] = ordem.txt_observacao
# numeracao do processo 26/02/2011 # numeracao do processo 26/02/2011
dic["des_numeracao"]="" dic["des_numeracao"] = ""
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=ordem.cod_materia) numeracao = context.zsql.numeracao_obter_zsql(
cod_materia=ordem.cod_materia)
if len(numeracao): if len(numeracao):
numeracao = numeracao[0] numeracao = numeracao[0]
dic["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) dic["des_numeracao"] = str(
dic["des_turno"]="" numeracao.num_materia) + "/" + str(numeracao.ano_materia)
dic["des_turno"] = ""
dic["des_situacao"] = "" dic["des_situacao"] = ""
tramitacao = context.zsql.tramitacao_obter_zsql(cod_materia=ordem.cod_materia, ind_ult_tramitacao=1) tramitacao = context.zsql.tramitacao_obter_zsql(
cod_materia=ordem.cod_materia, ind_ult_tramitacao=1)
if len(tramitacao): if len(tramitacao):
tramitacao = tramitacao[0] tramitacao = tramitacao[0]
if tramitacao.sgl_turno != "": if tramitacao.sgl_turno != "":
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("L","Suplementar"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações")]: for turno in [("P", "Primeiro"), ("S", "Segundo"), ("U", "Único"), ("L", "Suplementar"), ("A", "Votação Única em Regime de Urgência"), ("B", "1ª Votação"), ("C", "2ª e 3ª Votações")]:
if tramitacao.sgl_turno == turno[0]: if tramitacao.sgl_turno == turno[0]:
dic["des_turno"] = turno[1] dic["des_turno"] = turno[1]
dic["des_situacao"] = tramitacao.des_status dic["des_situacao"] = tramitacao.des_status
if dic["des_situacao"]==None: if dic["des_situacao"] == None:
dic["des_situacao"] = " " dic["des_situacao"] = " "
dic["nom_autor"] = '' dic["nom_autor"] = ''
autoria = context.zsql.autoria_obter_zsql(cod_materia=ordem.cod_materia, ind_primeiro_autor=1) autoria = context.zsql.autoria_obter_zsql(
if len(autoria): # se existe autor cod_materia=ordem.cod_materia, ind_primeiro_autor=1)
if len(autoria): # se existe autor
autoria = autoria[0] autoria = autoria[0]
try: try:
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor)
if len(autor): if len(autor):
autor = autor[0] autor = autor[0]
if autor.des_tipo_autor == "Parlamentar": if autor.des_tipo_autor == "Parlamentar":
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] parlamentar = context.zsql.parlamentar_obter_zsql(
dic["nom_autor"] = parlamentar.nom_parlamentar cod_parlamentar=autor.cod_parlamentar)[0]
dic["nom_autor"] = parlamentar.nom_parlamentar
elif autor.des_tipo_autor == "Comissao": elif autor.des_tipo_autor == "Comissao":
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] comissao = context.zsql.comissao_obter_zsql(
dic["nom_autor"] = comissao.nom_comissao cod_comissao=autor.cod_comissao)[0]
else: dic["nom_autor"] = comissao.nom_comissao
dic["nom_autor"] = autor.nom_autor else:
dic["nom_autor"] = autor.nom_autor
except: except:
pass pass
lst_relator = [] # lista contendo os relatores da matéria lst_relator = [] # lista contendo os relatores da matéria
for relatoria in context.zsql.relatoria_obter_zsql(cod_materia=ordem.cod_materia): for relatoria in context.zsql.relatoria_obter_zsql(cod_materia=ordem.cod_materia):
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=relatoria.cod_parlamentar)[0] parlamentar = context.zsql.parlamentar_obter_zsql(
comissao = context.zsql.comissao_obter_zsql(cod_comissao=relatoria.cod_comissao)[0] cod_parlamentar=relatoria.cod_parlamentar)[0]
lst_relator.append(parlamentar.nom_parlamentar+" - "+comissao.nom_comissao) comissao = context.zsql.comissao_obter_zsql(
cod_comissao=relatoria.cod_comissao)[0]
lst_relator.append(parlamentar.nom_parlamentar +
" - " + comissao.nom_comissao)
if not len(lst_relator): if not len(lst_relator):
lst_relator = [''] lst_relator = ['']
dic["lst_relator"] = lst_relator dic["lst_relator"] = lst_relator
# adiciona o dicionário na pauta # adiciona o dicionário na pauta
pauta.append(dic) pauta.append(dic)
# obtém as propriedades da casa legislativa para montar o cabeçalho e o rodapé da página # obtém as propriedades da casa legislativa para montar o cabeçalho e o
casa = {} # rodapé da página
aux=context.sapl_documentos.props_sapl.propertyItems() casa = {}
aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]] = item[1] casa[item[0]] = item[1]
# obtém a localidade # obtém a localidade
localidade = context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
cod_localidade=casa["cod_localidade"])
# monta o cabeçalho da página # monta o cabeçalho da página
cabecalho = {} cabecalho = {}
estado = context.zsql.localidade_obter_zsql(tip_localidade="U") estado = context.zsql.localidade_obter_zsql(tip_localidade="U")
for uf in estado: for uf in estado:
if localidade[0].sgl_uf == uf.sgl_uf: if localidade[0].sgl_uf == uf.sgl_uf:
@ -99,40 +118,43 @@ if context.REQUEST['cod_sessao_plen']!='':
break break
cabecalho["nom_casa"] = casa["nom_casa"] cabecalho["nom_casa"] = casa["nom_casa"]
cabecalho["nom_estado"] = "Estado do "+nom_estado cabecalho["nom_estado"] = "Estado do " + nom_estado
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl[
'logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
# monta o rodapé da página # monta o rodapé da página
num_cep = casa["num_cep"] num_cep = casa["num_cep"]
if len(casa["num_cep"]) == 8: if len(casa["num_cep"]) == 8:
num_cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] num_cep = casa["num_cep"][:4] + "-" + casa["num_cep"][5:]
linha1 = casa["end_casa"] linha1 = casa["end_casa"]
if num_cep!=None and num_cep!="": if num_cep != None and num_cep != "":
if casa["end_casa"]!="" and casa["end_casa"]!=None: if casa["end_casa"] != "" and casa["end_casa"] != None:
linha1 = linha1 +" " linha1 = linha1 + " "
linha1 = linha1 +" CEP: "+num_cep linha1 = linha1 + " CEP: " + num_cep
if localidade[0].nom_localidade!=None and localidade[0].nom_localidade!="": if localidade[0].nom_localidade != None and localidade[0].nom_localidade != "":
linha1 = linha1 +" "+localidade[0].nom_localidade +" - "+localidade[0].sgl_uf linha1 = linha1 + " " + \
if casa["num_tel"]!=None and casa["num_tel"]!="": localidade[0].nom_localidade + " - " + localidade[0].sgl_uf
linha1 = linha1 +" Tel.: "+casa["num_tel"] if casa["num_tel"] != None and casa["num_tel"] != "":
linha1 = linha1 + " Tel.: " + casa["num_tel"]
linha2 = casa["end_web_casa"] linha2 = casa["end_web_casa"]
if casa["end_email_casa"]!=None and casa["end_email_casa"]!="": if casa["end_email_casa"] != None and casa["end_email_casa"] != "":
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: if casa["end_web_casa"] != "" and casa["end_web_casa"] != None:
linha2= linha2 + " - " linha2 = linha2 + " - "
linha2 = linha2 +"E-mail: "+casa["end_email_casa"] linha2 = linha2 + "E-mail: " + casa["end_email_casa"]
dat_emissao = DateTime().strftime("%d/%m/%Y") dat_emissao = DateTime().strftime("%d/%m/%Y")
rodape = [linha1, linha2, dat_emissao] rodape = [linha1, linha2, dat_emissao]
sessao=session.id sessao = session.id
caminho = context.pdf_ordem_dia_gerar( sessao, imagem, dat_ordem, splen, pauta, cabecalho, rodape) caminho = context.pdf_ordem_dia_gerar(
if caminho=='aviso': sessao, imagem, dat_ordem, splen, pauta, cabecalho, rodape)
if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc') return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

4
sapl/relatorios/templates/pdf_pauta_sessao_gerar.py

@ -23,7 +23,9 @@ def cabecalho(inf_basicas_dic, imagem):
tmp += '\t\t\t\t<setFont name="Helvetica-Bold" size="12"/>\n' tmp += '\t\t\t\t<setFont name="Helvetica-Bold" size="12"/>\n'
tmp += '\t\t\t\t<drawString x="4.2cm" y="25cm">Pauta da ' + str(inf_basicas_dic['num_sessao_plen']) + 'ª Reunião ' + str(inf_basicas_dic['nom_sessao']) + ' da ' + str( tmp += '\t\t\t\t<drawString x="4.2cm" y="25cm">Pauta da ' + str(inf_basicas_dic['num_sessao_plen']) + 'ª Reunião ' + str(inf_basicas_dic['nom_sessao']) + ' da ' + str(
inf_basicas_dic['num_sessao_leg']) + 'ª Sessão Legislativa da </drawString>\n' inf_basicas_dic['num_sessao_leg']) + 'ª Sessão Legislativa da </drawString>\n'
tmp += '\t\t\t\t<drawString x="6.7cm" y="24.5cm">' + str(inf_basicas_dic['num_legislatura']) + ' Legislatura </drawString>\n' tmp += '\t\t\t\t<drawString x="6.7cm" y="24.5cm">' + \
str(inf_basicas_dic['num_legislatura']) + \
' Legislatura </drawString>\n'
return tmp return tmp

183
sapl/relatorios/templates/pdf_pauta_sessao_preparar_pysc.py

@ -1,20 +1,22 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
if context.REQUEST['data']!='': if context.REQUEST['data'] != '':
dat_inicio_sessao = context.REQUEST['data'] dat_inicio_sessao = context.REQUEST['data']
pauta = [] # lista contendo a pauta da ordem do dia a ser impressa pauta = [] # lista contendo a pauta da ordem do dia a ser impressa
data = context.pysc.data_converter_pysc(dat_inicio_sessao) # converte data para formato yyyy/mm/dd # converte data para formato yyyy/mm/dd
data = context.pysc.data_converter_pysc(dat_inicio_sessao)
codigo = context.REQUEST['cod_sessao_plen'] codigo = context.REQUEST['cod_sessao_plen']
# seleciona as matérias que compõem a pauta na data escolhida # seleciona as matérias que compõem a pauta na data escolhida
for sessao in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, cod_sessao_plen=codigo, ind_excluido=0): for sessao in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, cod_sessao_plen=codigo, ind_excluido=0):
inf_basicas_dic = {} # dicionário que armazenará as informacoes basicas da sessao plenaria inf_basicas_dic = {} # dicionário que armazenará as informacoes basicas da sessao plenaria
# seleciona o tipo da sessao plenaria # seleciona o tipo da sessao plenaria
tipo_sessao = context.zsql.tipo_sessao_plenaria_obter_zsql(tip_sessao=sessao.tip_sessao,ind_excluido=0)[0] tipo_sessao = context.zsql.tipo_sessao_plenaria_obter_zsql(
tip_sessao=sessao.tip_sessao, ind_excluido=0)[0]
inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao
inf_basicas_dic["num_sessao_plen"] = sessao.num_sessao_plen inf_basicas_dic["num_sessao_plen"] = sessao.num_sessao_plen
inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao
@ -24,139 +26,164 @@ if context.REQUEST['data']!='':
inf_basicas_dic["hr_inicio_sessao"] = sessao.hr_inicio_sessao inf_basicas_dic["hr_inicio_sessao"] = sessao.hr_inicio_sessao
inf_basicas_dic["dat_fim_sessao"] = sessao.dat_fim_sessao inf_basicas_dic["dat_fim_sessao"] = sessao.dat_fim_sessao
inf_basicas_dic["hr_fim_sessao"] = sessao.hr_fim_sessao inf_basicas_dic["hr_fim_sessao"] = sessao.hr_fim_sessao
# Lista das matérias do Expediente, incluindo o status da tramitação # Lista das matérias do Expediente, incluindo o status da tramitação
lst_expediente_materia=[] lst_expediente_materia = []
for expediente_materia in context.zsql.votacao_expediente_materia_obter_zsql(dat_ordem=data,cod_sessao_plen=codigo,ind_excluido=0): for expediente_materia in context.zsql.votacao_expediente_materia_obter_zsql(dat_ordem=data, cod_sessao_plen=codigo, ind_excluido=0):
# seleciona os detalhes de uma matéria # seleciona os detalhes de uma matéria
materia = context.zsql.materia_obter_zsql(cod_materia=expediente_materia.cod_materia)[0] materia = context.zsql.materia_obter_zsql(
cod_materia=expediente_materia.cod_materia)[0]
dic_expediente_materia = {} dic_expediente_materia = {}
dic_expediente_materia["num_ordem"] = expediente_materia.num_ordem dic_expediente_materia["num_ordem"] = expediente_materia.num_ordem
dic_expediente_materia["id_materia"] = materia.sgl_tipo_materia+" - "+materia.des_tipo_materia+" No. "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) dic_expediente_materia["id_materia"] = materia.sgl_tipo_materia + " - " + materia.des_tipo_materia + \
" No. " + str(materia.num_ident_basica) + "/" + \
str(materia.ano_ident_basica)
dic_expediente_materia["txt_ementa"] = materia.txt_ementa dic_expediente_materia["txt_ementa"] = materia.txt_ementa
dic_expediente_materia["ordem_observacao"] = expediente_materia.ordem_observacao dic_expediente_materia[
"ordem_observacao"] = expediente_materia.ordem_observacao
dic_expediente_materia["des_numeracao"]="" dic_expediente_materia["des_numeracao"] = ""
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=expediente_materia.cod_materia) numeracao = context.zsql.numeracao_obter_zsql(
cod_materia=expediente_materia.cod_materia)
if len(numeracao): if len(numeracao):
numeracao = numeracao[0] numeracao = numeracao[0]
dic_expediente_materia["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) dic_expediente_materia["des_numeracao"] = str(
numeracao.num_materia) + "/" + str(numeracao.ano_materia)
dic_expediente_materia["nom_autor"] = '' dic_expediente_materia["nom_autor"] = ''
autoria = context.zsql.autoria_obter_zsql(cod_materia=expediente_materia.cod_materia, ind_primeiro_autor=1) autoria = context.zsql.autoria_obter_zsql(
if len(autoria) > 0: # se existe autor cod_materia=expediente_materia.cod_materia, ind_primeiro_autor=1)
if len(autoria) > 0: # se existe autor
autoria = autoria[0] autoria = autoria[0]
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) autor = context.zsql.autor_obter_zsql(
cod_autor=autoria.cod_autor)
if len(autor) > 0: if len(autor) > 0:
autor = autor[0] autor = autor[0]
if autor.des_tipo_autor == "Parlamentar": if autor.des_tipo_autor == "Parlamentar":
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] parlamentar = context.zsql.parlamentar_obter_zsql(
dic_expediente_materia["nom_autor"] = parlamentar.nom_parlamentar cod_parlamentar=autor.cod_parlamentar)[0]
dic_expediente_materia[
"nom_autor"] = parlamentar.nom_parlamentar
elif autor.des_tipo_autor == "Comissao": elif autor.des_tipo_autor == "Comissao":
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] comissao = context.zsql.comissao_obter_zsql(
cod_comissao=autor.cod_comissao)[0]
dic_expediente_materia["nom_autor"] = comissao.nom_comissao dic_expediente_materia["nom_autor"] = comissao.nom_comissao
else: else:
dic_expediente_materia["nom_autor"] = autor.nom_autor dic_expediente_materia["nom_autor"] = autor.nom_autor
dic_expediente_materia["des_turno"]="" dic_expediente_materia["des_turno"] = ""
dic_expediente_materia["des_situacao"] = "" dic_expediente_materia["des_situacao"] = ""
tramitacao = context.zsql.tramitacao_obter_zsql(cod_materia=expediente_materia.cod_materia, ind_ult_tramitacao=1) tramitacao = context.zsql.tramitacao_obter_zsql(
cod_materia=expediente_materia.cod_materia, ind_ult_tramitacao=1)
if len(tramitacao): if len(tramitacao):
tramitacao = tramitacao[0] tramitacao = tramitacao[0]
if tramitacao.sgl_turno != "": if tramitacao.sgl_turno != "":
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("F","Final"), ("L","Suplementar"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações")]: for turno in [("P", "Primeiro"), ("S", "Segundo"), ("U", "Único"), ("F", "Final"), ("L", "Suplementar"), ("A", "Votação Única em Regime de Urgência"), ("B", "1ª Votação"), ("C", "2ª e 3ª Votações")]:
if tramitacao.sgl_turno == turno[0]: if tramitacao.sgl_turno == turno[0]:
dic_expediente_materia["des_turno"] = turno[1] dic_expediente_materia["des_turno"] = turno[1]
dic_expediente_materia["des_situacao"] = tramitacao.des_status dic_expediente_materia["des_situacao"] = tramitacao.des_status
if dic_expediente_materia["des_situacao"]==None: if dic_expediente_materia["des_situacao"] == None:
dic_expediente_materia["des_situacao"] = " " dic_expediente_materia["des_situacao"] = " "
lst_expediente_materia.append(dic_expediente_materia) lst_expediente_materia.append(dic_expediente_materia)
# Lista das matérias da Ordem do Dia, incluindo o status da tramitação # Lista das matérias da Ordem do Dia, incluindo o status da tramitação
lst_votacao=[] lst_votacao = []
for votacao in context.zsql.votacao_ordem_dia_obter_zsql(dat_ordem=data,cod_sessao_plen=codigo,ind_excluido=0): for votacao in context.zsql.votacao_ordem_dia_obter_zsql(dat_ordem=data, cod_sessao_plen=codigo, ind_excluido=0):
# seleciona os detalhes de uma matéria # seleciona os detalhes de uma matéria
materia = context.zsql.materia_obter_zsql(cod_materia=votacao.cod_materia)[0] materia = context.zsql.materia_obter_zsql(
cod_materia=votacao.cod_materia)[0]
dic_votacao = {} dic_votacao = {}
dic_votacao["num_ordem"] = votacao.num_ordem dic_votacao["num_ordem"] = votacao.num_ordem
dic_votacao["id_materia"] = materia.sgl_tipo_materia+" - "+materia.des_tipo_materia+" No. "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) dic_votacao["id_materia"] = materia.sgl_tipo_materia + " - " + materia.des_tipo_materia + \
" No. " + str(materia.num_ident_basica) + "/" + \
str(materia.ano_ident_basica)
dic_votacao["txt_ementa"] = materia.txt_ementa dic_votacao["txt_ementa"] = materia.txt_ementa
dic_votacao["ordem_observacao"] = votacao.ordem_observacao dic_votacao["ordem_observacao"] = votacao.ordem_observacao
dic_votacao["des_numeracao"]="" dic_votacao["des_numeracao"] = ""
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=votacao.cod_materia) numeracao = context.zsql.numeracao_obter_zsql(
cod_materia=votacao.cod_materia)
if len(numeracao): if len(numeracao):
numeracao = numeracao[0] numeracao = numeracao[0]
dic_votacao["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) dic_votacao["des_numeracao"] = str(
numeracao.num_materia) + "/" + str(numeracao.ano_materia)
dic_votacao["nom_autor"] = '' dic_votacao["nom_autor"] = ''
autoria = context.zsql.autoria_obter_zsql(cod_materia=votacao.cod_materia, ind_primeiro_autor=1) autoria = context.zsql.autoria_obter_zsql(
if len(autoria) > 0: # se existe autor cod_materia=votacao.cod_materia, ind_primeiro_autor=1)
if len(autoria) > 0: # se existe autor
autoria = autoria[0] autoria = autoria[0]
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) autor = context.zsql.autor_obter_zsql(
cod_autor=autoria.cod_autor)
if len(autor) > 0: if len(autor) > 0:
autor = autor[0] autor = autor[0]
if autor.des_tipo_autor == "Parlamentar": if autor.des_tipo_autor == "Parlamentar":
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] parlamentar = context.zsql.parlamentar_obter_zsql(
cod_parlamentar=autor.cod_parlamentar)[0]
dic_votacao["nom_autor"] = parlamentar.nom_parlamentar dic_votacao["nom_autor"] = parlamentar.nom_parlamentar
elif autor.des_tipo_autor == "Comissao": elif autor.des_tipo_autor == "Comissao":
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] comissao = context.zsql.comissao_obter_zsql(
cod_comissao=autor.cod_comissao)[0]
dic_votacao["nom_autor"] = comissao.nom_comissao dic_votacao["nom_autor"] = comissao.nom_comissao
else: else:
dic_votacao["nom_autor"] = autor.nom_autor dic_votacao["nom_autor"] = autor.nom_autor
dic_votacao["des_turno"]="" dic_votacao["des_turno"] = ""
dic_votacao["des_situacao"] = "" dic_votacao["des_situacao"] = ""
tramitacao = context.zsql.tramitacao_obter_zsql(cod_materia=votacao.cod_materia, ind_ult_tramitacao=1) tramitacao = context.zsql.tramitacao_obter_zsql(
cod_materia=votacao.cod_materia, ind_ult_tramitacao=1)
if len(tramitacao): if len(tramitacao):
tramitacao = tramitacao[0] tramitacao = tramitacao[0]
if tramitacao.sgl_turno != "": if tramitacao.sgl_turno != "":
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("L","Suplementar"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações")]: for turno in [("P", "Primeiro"), ("S", "Segundo"), ("U", "Único"), ("L", "Suplementar"), ("A", "Votação Única em Regime de Urgência"), ("B", "1ª Votação"), ("C", "2ª e 3ª Votações")]:
if tramitacao.sgl_turno == turno[0]: if tramitacao.sgl_turno == turno[0]:
dic_votacao["des_turno"] = turno[1] dic_votacao["des_turno"] = turno[1]
dic_votacao["des_situacao"] = tramitacao.des_status dic_votacao["des_situacao"] = tramitacao.des_status
if dic_votacao["des_situacao"]==None: if dic_votacao["des_situacao"] == None:
dic_votacao["des_situacao"] = " " dic_votacao["des_situacao"] = " "
lst_votacao.append(dic_votacao) lst_votacao.append(dic_votacao)
# obtém as propriedades da casa legislativa para montar o cabeçalho e o rodapé da página # obtém as propriedades da casa legislativa para montar o cabeçalho e o
cabecalho={} # rodapé da página
cabecalho = {}
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl[
'logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Abaixo é gerado o dic do rodapé da página (linha 7) # Abaixo é gerado o dic do rodapé da página (linha 7)
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
data_emissao= DateTime().strftime("%d/%m/%Y") cod_localidade=casa["cod_localidade"])
rodape= casa data_emissao = DateTime().strftime("%d/%m/%Y")
rodape['data_emissao']= data_emissao rodape = casa
rodape['data_emissao'] = data_emissao
inf_basicas_dic['nom_camara']= casa['nom_casa']
REQUEST=context.REQUEST inf_basicas_dic['nom_camara'] = casa['nom_casa']
for local in context.zsql.localidade_obter_zsql(cod_localidade = casa['cod_localidade']): REQUEST = context.REQUEST
rodape['nom_localidade']= " "+local.nom_localidade for local in context.zsql.localidade_obter_zsql(cod_localidade=casa['cod_localidade']):
rodape['sgl_uf']= local.sgl_uf rodape['nom_localidade'] = " " + local.nom_localidade
rodape['sgl_uf'] = local.sgl_uf
# return lst_votacao # return lst_votacao
sessao=session.id sessao = session.id
caminho = context.pdf_pauta_sessao_gerar(rodape, sessao, imagem, inf_basicas_dic, lst_votacao, lst_expediente_materia) caminho = context.pdf_pauta_sessao_gerar(
if caminho=='aviso': rodape, sessao, imagem, inf_basicas_dic, lst_votacao, lst_expediente_materia)
if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc') return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

189
sapl/relatorios/templates/pdf_protocolo_gerar.py

@ -1,4 +1,4 @@
##parameters=sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro # parameters=sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro
"""relatorio_protocolo.py """relatorio_protocolo.py
External method para gerar o arquivo rml do resultado de uma pesquisa de protocolos External method para gerar o arquivo rml do resultado de uma pesquisa de protocolos
@ -11,118 +11,132 @@ import time
from trml2pdf import parseString from trml2pdf import parseString
def cabecalho(dic_cabecalho,imagem): def cabecalho(dic_cabecalho, imagem):
"""Gera o codigo rml do cabecalho""" """Gera o codigo rml do cabecalho"""
tmp_data='' tmp_data = ''
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' tmp_data += '\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n'
tmp_data+='\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n' tmp_data += '\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="15"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica-Bold" size="15"/>\n'
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' tmp_data += '\t\t\t\t<drawString x="5cm" y="27.2cm">' + \
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' dic_cabecalho['nom_casa'] + '</drawString>\n'
tmp_data+='\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="12"/>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n' tmp_data += '\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n'
tmp_data+='\t\t\t\t<drawString x="2.2cm" y="24.6cm">Relatório de Controle do Protocolo</drawString>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n'
tmp_data += '\t\t\t\t<drawString x="2.2cm" y="24.6cm">Relatório de Controle do Protocolo</drawString>\n'
return tmp_data return tmp_data
def rodape(lst_rodape): def rodape(lst_rodape):
"""Gera o codigo rml do rodape""" """Gera o codigo rml do rodape"""
tmp_data='' tmp_data = ''
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' tmp_data += '\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n'
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' tmp_data += '\t\t\t\t<setFont name="Helvetica" size="8"/>\n'
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' tmp_data += '\t\t\t\t<drawString x="2cm" y="3.3cm">' + \
tmp_data+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' lst_rodape[2] + '</drawString>\n'
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' tmp_data += '\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n'
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + \
lst_rodape[0] + '</drawCentredString>\n'
tmp_data += '\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + \
lst_rodape[1] + '</drawCentredString>\n'
return tmp_data return tmp_data
def paraStyle(): def paraStyle():
"""Gera o codigo rml que define o estilo dos paragrafos""" """Gera o codigo rml que define o estilo dos paragrafos"""
tmp_data='' tmp_data = ''
tmp_data+='\t<stylesheet>\n' tmp_data += '\t<stylesheet>\n'
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' tmp_data += '\t\t<blockTableStyle id="Standard_Outline">\n'
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' tmp_data += '\t\t\t<blockAlignment value="LEFT"/>\n'
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' tmp_data += '\t\t\t<blockValign value="TOP"/>\n'
tmp_data+='\t\t</blockTableStyle>\n' tmp_data += '\t\t</blockTableStyle>\n'
tmp_data+='\t\t<initialize>\n' tmp_data += '\t\t<initialize>\n'
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' tmp_data += '\t\t\t<paraStyle name="all" alignment="justify"/>\n'
tmp_data+='\t\t</initialize>\n' tmp_data += '\t\t</initialize>\n'
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n' tmp_data += '\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n'
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="13" alignment="justify"/>\n' tmp_data += '\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="13" alignment="justify"/>\n'
tmp_data+='\t</stylesheet>\n' tmp_data += '\t</stylesheet>\n'
return tmp_data return tmp_data
def protocolos(lst_protocolos): def protocolos(lst_protocolos):
"""Gera o codigo rml do conteudo da pesquisa de protocolos""" """Gera o codigo rml do conteudo da pesquisa de protocolos"""
tmp_data='' tmp_data = ''
#inicio do bloco que contem os flowables # inicio do bloco que contem os flowables
tmp_data+='\t<story>\n' tmp_data += '\t<story>\n'
for dic in lst_protocolos: for dic in lst_protocolos:
#espaco inicial # espaco inicial
tmp_data+='\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data+='\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data+='\t\t</para>\n' tmp_data += '\t\t</para>\n'
tmp_data+='\t\t<para style="P2">\n' tmp_data += '\t\t<para style="P2">\n'
tmp_data+='\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
tmp_data+='\t\t</para>\n' tmp_data += '\t\t</para>\n'
#condicao para a quebra de pagina # condicao para a quebra de pagina
tmp_data+='\t\t<condPageBreak height="4cm"/>\n' tmp_data += '\t\t<condPageBreak height="4cm"/>\n'
#protocolos # protocolos
if dic['titulo']!=None: if dic['titulo'] != None:
tmp_data+='\t\t<para style="P1">Protocolo ' + dic['titulo'] + '</para>\n' tmp_data += '\t\t<para style="P1">Protocolo ' + \
tmp_data+='\t\t<para style="P1">\n' dic['titulo'] + '</para>\n'
tmp_data+='\t\t\t<font color="white"> </font>\n' tmp_data += '\t\t<para style="P1">\n'
tmp_data+='\t\t</para>\n' tmp_data += '\t\t\t<font color="white"> </font>\n'
if dic['txt_assunto']!=None: tmp_data += '\t\t</para>\n'
txt_assunto = dic['txt_assunto'].replace('&','&amp;') if dic['txt_assunto'] != None:
tmp_data+='\t\t<para style="P2">' + txt_assunto + '</para>\n' txt_assunto = dic['txt_assunto'].replace('&', '&amp;')
if dic['txt_interessado']!=None: tmp_data += '\t\t<para style="P2">' + txt_assunto + '</para>\n'
tmp_data+='\t\t<para style="P2"><b>Interessado:</b> ' + dic['txt_interessado'] + '</para>\n' if dic['txt_interessado'] != None:
elif dic['nom_autor']!=None: tmp_data += '\t\t<para style="P2"><b>Interessado:</b> ' + \
tmp_data+='\t\t<para style="P2"><b>Autor:</b> ' + dic['nom_autor'] + '</para>\n' dic['txt_interessado'] + '</para>\n'
if dic['natureza']!=None: elif dic['nom_autor'] != None:
tmp_data+='\t\t<para style="P2"><b>Natureza Processo:</b> ' + dic['natureza'] + '</para>\n' tmp_data += '\t\t<para style="P2"><b>Autor:</b> ' + \
if dic['processo']!=None: dic['nom_autor'] + '</para>\n'
tmp_data+='\t\t<para style="P2"><b>Classificação:</b> ' + dic['processo'] + '</para>\n' if dic['natureza'] != None:
if dic['data']!=None: tmp_data += '\t\t<para style="P2"><b>Natureza Processo:</b> ' + \
tmp_data+='\t\t<para style="P2"><b>Data Protocolo:</b> ' + dic['data'] + '</para>\n' dic['natureza'] + '</para>\n'
if dic['anulado']!="": if dic['processo'] != None:
tmp_data+='\t\t<para style="P2"><b>** PROTOCOLO ANULADO **</b> ' '</para>\n' tmp_data += '\t\t<para style="P2"><b>Classificação:</b> ' + \
dic['processo'] + '</para>\n'
tmp_data+='\t</story>\n' if dic['data'] != None:
tmp_data += '\t\t<para style="P2"><b>Data Protocolo:</b> ' + \
dic['data'] + '</para>\n'
if dic['anulado'] != "":
tmp_data += '\t\t<para style="P2"><b>** PROTOCOLO ANULADO **</b> ' '</para>\n'
tmp_data += '\t</story>\n'
return tmp_data return tmp_data
def principal(imagem, lst_protocolos, dic_cabecalho, lst_rodape): def principal(imagem, lst_protocolos, dic_cabecalho, lst_rodape):
"""Funcao pricipal que gera a estrutura global do arquivo rml""" """Funcao pricipal que gera a estrutura global do arquivo rml"""
arquivoPdf=str(int(time.time()*100))+".pdf" arquivoPdf = str(int(time.time() * 100)) + ".pdf"
tmp_data='' tmp_data = ''
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' tmp_data += '<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n'
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' tmp_data += '<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n'
tmp_data+='<document filename="relatorio.pdf">\n' tmp_data += '<document filename="relatorio.pdf">\n'
tmp_data+='\t<template pageSize="(21cm, 29.7cm)" title="Relatório de Protocolos" author="Luciano De Fazio" allowSplitting="20">\n' tmp_data += '\t<template pageSize="(21cm, 29.7cm)" title="Relatório de Protocolos" author="Luciano De Fazio" allowSplitting="20">\n'
tmp_data+='\t\t<pageTemplate id="first">\n' tmp_data += '\t\t<pageTemplate id="first">\n'
tmp_data+='\t\t\t<pageGraphics>\n' tmp_data += '\t\t\t<pageGraphics>\n'
tmp_data+=cabecalho(dic_cabecalho,imagem) tmp_data += cabecalho(dic_cabecalho, imagem)
tmp_data+=rodape(lst_rodape) tmp_data += rodape(lst_rodape)
tmp_data+='\t\t\t</pageGraphics>\n' tmp_data += '\t\t\t</pageGraphics>\n'
tmp_data+='\t\t\t<frame id="first" x1="2cm" y1="3cm" width="17cm" height="21cm"/>\n' tmp_data += '\t\t\t<frame id="first" x1="2cm" y1="3cm" width="17cm" height="21cm"/>\n'
tmp_data+='\t\t</pageTemplate>\n' tmp_data += '\t\t</pageTemplate>\n'
tmp_data+='\t</template>\n' tmp_data += '\t</template>\n'
tmp_data+=paraStyle() tmp_data += paraStyle()
tmp_data+=protocolos(lst_protocolos) tmp_data += protocolos(lst_protocolos)
tmp_data+='</document>\n' tmp_data += '</document>\n'
tmp_pdf=parseString(tmp_data) tmp_pdf = parseString(tmp_data)
return tmp_pdf return tmp_pdf
@ -134,4 +148,5 @@ def principal(imagem, lst_protocolos, dic_cabecalho, lst_rodape):
# return "/temp_folder/"+arquivoPdf # return "/temp_folder/"+arquivoPdf
# return principal(sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro) # return
# principal(sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro)

217
sapl/relatorios/templates/pdf_protocolo_preparar_pysc.py

@ -1,117 +1,126 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
data=DateTime().strftime('%d/%m/%Y') data = DateTime().strftime('%d/%m/%Y')
#Abaixo é gerada a string para o rodapé da página # Abaixo é gerada a string para o rodapé da página
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
if len(casa["num_cep"])==8: cod_localidade=casa["cod_localidade"])
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] if len(casa["num_cep"]) == 8:
cep = casa["num_cep"][:4] + "-" + casa["num_cep"][5:]
else: else:
cep="" cep = ""
linha1=casa["end_casa"] linha1 = casa["end_casa"]
if cep!="": if cep != "":
if casa["end_casa"]!="" and casa["end_casa"]!=None: if casa["end_casa"] != "" and casa["end_casa"] != None:
linha1 = linha1 + " - " linha1 = linha1 + " - "
linha1 = linha1 + "CEP "+cep linha1 = linha1 + "CEP " + cep
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: if localidade[0].nom_localidade != "" and localidade[0].nom_localidade != None:
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf linha1 = linha1 + " - " + \
if casa["num_tel"]!="" and casa["num_tel"]!=None: localidade[0].nom_localidade + " " + localidade[0].sgl_uf
linha1 = linha1 + " Tel.: "+ casa["num_tel"] if casa["num_tel"] != "" and casa["num_tel"] != None:
linha1 = linha1 + " Tel.: " + casa["num_tel"]
linha2=casa["end_web_casa"]
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: linha2 = casa["end_web_casa"]
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: if casa["end_email_casa"] != "" and casa["end_email_casa"] != None:
linha2 = linha2 + " - " if casa["end_web_casa"] != "" and casa["end_web_casa"] != None:
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] linha2 = linha2 + " - "
linha2 = linha2 + "E-mail: " + casa["end_email_casa"]
data_emissao=DateTime().strftime("%d/%m/%Y")
rodape=[linha1,linha2,data_emissao] data_emissao = DateTime().strftime("%d/%m/%Y")
rodape = [linha1, linha2, data_emissao]
#Por fim, gera-se as entradas para o cabeçalho
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") # Por fim, gera-se as entradas para o cabeçalho
estados = context.zsql.localidade_obter_zsql(tip_localidade="u")
for uf in estados: for uf in estados:
if localidade[0].sgl_uf==uf.sgl_uf: if localidade[0].sgl_uf == uf.sgl_uf:
nom_estado=uf.nom_localidade nom_estado = uf.nom_localidade
break break
cabecalho={} cabecalho = {}
cabecalho["nom_casa"]=casa["nom_casa"] cabecalho["nom_casa"] = casa["nom_casa"]
cabecalho["nom_estado"]="Estado de "+nom_estado cabecalho["nom_estado"] = "Estado de " + nom_estado
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados # Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados
protocolos=[] protocolos = []
REQUEST=context.REQUEST REQUEST = context.REQUEST
for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'], for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'],
cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST['txt_ano_protocolo'], cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST[
tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST['rad_tip_processo'], 'txt_ano_protocolo'],
tip_materia=REQUEST['lst_tip_materia'], des_assunto=REQUEST['txt_assunto'], tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST[
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST['txa_txt_interessado'], 'rad_tip_processo'],
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']): tip_materia=REQUEST[
dic={} 'lst_tip_materia'], des_assunto=REQUEST['txt_assunto'],
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST[
dic['titulo']=str(protocolo.cod_protocolo)+'/'+str(protocolo.ano_protocolo) 'txa_txt_interessado'],
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']):
dic['data']=context.pysc.iso_to_port_pysc(protocolo.dat_protocolo)+' - <b>Horário:</b>'+protocolo.hor_protocolo dic = {}
dic['txt_assunto']=protocolo.txt_assunto_ementa dic['titulo'] = str(protocolo.cod_protocolo) + '/' + \
str(protocolo.ano_protocolo)
dic['txt_interessado']=protocolo.txt_interessado
dic['data'] = context.pysc.iso_to_port_pysc(
dic['nom_autor'] = " " protocolo.dat_protocolo) + ' - <b>Horário:</b>' + protocolo.hor_protocolo
if protocolo.cod_autor!=None:
for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor): dic['txt_assunto'] = protocolo.txt_assunto_ementa
if autor.des_tipo_autor=='Parlamentar':
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): dic['txt_interessado'] = protocolo.txt_interessado
dic['nom_autor']=parlamentar.nom_completo
elif autor.des_tipo_autor=='Comissao': dic['nom_autor'] = " "
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): if protocolo.cod_autor != None:
dic['nom_autor']=comissao.nom_comissao for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor):
else: if autor.des_tipo_autor == 'Parlamentar':
dic['nom_autor']=autor.nom_autor for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar):
dic['nom_autor'] = parlamentar.nom_completo
dic['natureza']='' elif autor.des_tipo_autor == 'Comissao':
if protocolo.tip_processo==0: for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao):
dic['natureza']='Administrativo' dic['nom_autor'] = comissao.nom_comissao
if protocolo.tip_processo==1: else:
dic['natureza']='Legislativo' dic['nom_autor'] = autor.nom_autor
dic['processo']=protocolo.des_tipo_materia or protocolo.des_tipo_documento dic['natureza'] = ''
if protocolo.tip_processo == 0:
dic['anulado']='' dic['natureza'] = 'Administrativo'
if protocolo.ind_anulado==1: if protocolo.tip_processo == 1:
dic['anulado']='Nulo' dic['natureza'] = 'Legislativo'
protocolos.append(dic) dic['processo'] = protocolo.des_tipo_materia or protocolo.des_tipo_documento
filtro={} # Dicionário que conterá os dados do filtro dic['anulado'] = ''
if protocolo.ind_anulado == 1:
dic['anulado'] = 'Nulo'
protocolos.append(dic)
filtro = {} # Dicionário que conterá os dados do filtro
# Atribuições diretas do REQUEST # Atribuições diretas do REQUEST
filtro['numero']=REQUEST.txt_num_protocolo filtro['numero'] = REQUEST.txt_num_protocolo
filtro['ano']=REQUEST.txt_ano_protocolo filtro['ano'] = REQUEST.txt_ano_protocolo
filtro['tipo_protocolo']=REQUEST.rad_tip_protocolo filtro['tipo_protocolo'] = REQUEST.rad_tip_protocolo
filtro['tipo_processo']=REQUEST.rad_tip_processo filtro['tipo_processo'] = REQUEST.rad_tip_processo
filtro['assunto']=REQUEST.txt_assunto filtro['assunto'] = REQUEST.txt_assunto
filtro['autor']=REQUEST.hdn_cod_autor filtro['autor'] = REQUEST.hdn_cod_autor
filtro['interessado']=REQUEST.txa_txt_interessado filtro['interessado'] = REQUEST.txa_txt_interessado
sessao=session.id sessao = session.id
caminho = context.pdf_protocolo_gerar(sessao,imagem,data,protocolos,cabecalho,rodape,filtro) caminho = context.pdf_protocolo_gerar(
if caminho=='aviso': sessao, imagem, data, protocolos, cabecalho, rodape, filtro)
return response.redirect('mensagem_emitir_proc') if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

20
sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py

@ -26,7 +26,9 @@ def cabecalho(inf_basicas_dic, imagem):
tmp += '\t\t\t\t<setFont name="Helvetica-Bold" size="12"/>\n' tmp += '\t\t\t\t<setFont name="Helvetica-Bold" size="12"/>\n'
tmp += '\t\t\t\t<drawString x="4.2cm" y="25cm">Resumo da ' + str(inf_basicas_dic['num_sessao_plen']) + 'ª Reunião ' + str(inf_basicas_dic['nom_sessao']) + ' da ' + str( tmp += '\t\t\t\t<drawString x="4.2cm" y="25cm">Resumo da ' + str(inf_basicas_dic['num_sessao_plen']) + 'ª Reunião ' + str(inf_basicas_dic['nom_sessao']) + ' da ' + str(
inf_basicas_dic['num_sessao_leg']) + 'ª Sessão Legislativa da </drawString>\n' inf_basicas_dic['num_sessao_leg']) + 'ª Sessão Legislativa da </drawString>\n'
tmp += '\t\t\t\t<drawString x="6.7cm" y="24.5cm">' + str(inf_basicas_dic['num_legislatura']) + ' Legislatura </drawString>\n' tmp += '\t\t\t\t<drawString x="6.7cm" y="24.5cm">' + \
str(inf_basicas_dic['num_legislatura']) + \
' Legislatura </drawString>\n'
return tmp return tmp
@ -159,7 +161,7 @@ def expedientes(lst_expedientes):
for idx, expediente in enumerate(lst_expedientes): for idx, expediente in enumerate(lst_expedientes):
tmp += '\t\t<para style="P2"><b>' + '<br/> ' + \ tmp += '\t\t<para style="P2"><b>' + '<br/> ' + \
expediente['nom_expediente'] + ': </b></para>\n' + \ expediente['nom_expediente'] + ': </b></para>\n' + \
'<para style="P2">' + \ '<para style="P2">' + \
expediente['txt_expediente'] + '</para>\n' expediente['txt_expediente'] + '</para>\n'
tmp += '\t\t<para style="P2">\n' tmp += '\t\t<para style="P2">\n'
tmp += '\t\t\t<font color="white"> </font>\n' tmp += '\t\t\t<font color="white"> </font>\n'
@ -183,11 +185,12 @@ def expediente_materia(lst_expediente_materia):
txt_ementa = expediente_materia['txt_ementa'].replace('&', '&amp;') txt_ementa = expediente_materia['txt_ementa'].replace('&', '&amp;')
tmp += '<td><para style="P4">' + txt_ementa + '</para></td>\n' tmp += '<td><para style="P4">' + txt_ementa + '</para></td>\n'
tmp += '<td><para style="P3"><b>' + \ tmp += '<td><para style="P3"><b>' + \
str(expediente_materia['nom_resultado']) + '</b></para>\n' + '<para style="P3">' str(expediente_materia['nom_resultado']) + \
'</b></para>\n' + '<para style="P3">'
if expediente_materia['votacao_observacao'] != txt_ementa: if expediente_materia['votacao_observacao'] != txt_ementa:
tmp += str(expediente_materia['votacao_observacao']) tmp += str(expediente_materia['votacao_observacao'])
else: else:
tmp += ' ' tmp += ' '
tmp += '</para></td></tr>\n' tmp += '</para></td></tr>\n'
tmp += '\t\t</blockTable>\n' tmp += '\t\t</blockTable>\n'
@ -242,11 +245,12 @@ def votacao(lst_votacao):
txt_ementa = votacao['txt_ementa'].replace('&', '&amp;') txt_ementa = votacao['txt_ementa'].replace('&', '&amp;')
tmp += '<td><para style="P4">' + txt_ementa + '</para></td>\n' tmp += '<td><para style="P4">' + txt_ementa + '</para></td>\n'
tmp += '<td><para style="P3"><b>' + \ tmp += '<td><para style="P3"><b>' + \
str(votacao['nom_resultado']) + '</b></para>\n' + '<para style="P3">' str(votacao['nom_resultado']) + \
'</b></para>\n' + '<para style="P3">'
if votacao['votacao_observacao'] != txt_ementa: if votacao['votacao_observacao'] != txt_ementa:
tmp += str(votacao['votacao_observacao']) tmp += str(votacao['votacao_observacao'])
else: else:
tmp += ' ' tmp += ' '
tmp += '</para></td></tr>\n' tmp += '</para></td></tr>\n'
tmp += '\t\t</blockTable>\n' tmp += '\t\t</blockTable>\n'

285
sapl/relatorios/templates/pdf_sessao_plenaria_preparar_pysc.py

@ -1,20 +1,22 @@
import os import os
request=context.REQUEST request = context.REQUEST
response=request.RESPONSE response = request.RESPONSE
session= request.SESSION session = request.SESSION
if context.REQUEST['data']!='': if context.REQUEST['data'] != '':
dat_inicio_sessao = context.REQUEST['data'] dat_inicio_sessao = context.REQUEST['data']
pauta = [] # lista contendo a pauta da ordem do dia a ser impressa pauta = [] # lista contendo a pauta da ordem do dia a ser impressa
data = context.pysc.data_converter_pysc(dat_inicio_sessao) # converte data para formato yyyy/mm/dd # converte data para formato yyyy/mm/dd
data = context.pysc.data_converter_pysc(dat_inicio_sessao)
codigo = context.REQUEST['cod_sessao_plen'] codigo = context.REQUEST['cod_sessao_plen']
# seleciona as matérias que compõem a pauta na data escolhida # seleciona as matérias que compõem a pauta na data escolhida
for sessao in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, cod_sessao_plen=codigo, ind_excluido=0): for sessao in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, cod_sessao_plen=codigo, ind_excluido=0):
inf_basicas_dic = {} # dicionário que armazenará as informacoes basicas da sessao plenaria inf_basicas_dic = {} # dicionário que armazenará as informacoes basicas da sessao plenaria
# seleciona o tipo da sessao plenaria # seleciona o tipo da sessao plenaria
tipo_sessao = context.zsql.tipo_sessao_plenaria_obter_zsql(tip_sessao=sessao.tip_sessao,ind_excluido=0)[0] tipo_sessao = context.zsql.tipo_sessao_plenaria_obter_zsql(
tip_sessao=sessao.tip_sessao, ind_excluido=0)[0]
inf_basicas_dic["num_sessao_plen"] = sessao.num_sessao_plen inf_basicas_dic["num_sessao_plen"] = sessao.num_sessao_plen
inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao
inf_basicas_dic["num_legislatura"] = sessao.num_legislatura inf_basicas_dic["num_legislatura"] = sessao.num_legislatura
@ -23,11 +25,11 @@ if context.REQUEST['data']!='':
inf_basicas_dic["hr_inicio_sessao"] = sessao.hr_inicio_sessao inf_basicas_dic["hr_inicio_sessao"] = sessao.hr_inicio_sessao
inf_basicas_dic["dat_fim_sessao"] = sessao.dat_fim_sessao inf_basicas_dic["dat_fim_sessao"] = sessao.dat_fim_sessao
inf_basicas_dic["hr_fim_sessao"] = sessao.hr_fim_sessao inf_basicas_dic["hr_fim_sessao"] = sessao.hr_fim_sessao
# Lista da composicao da mesa diretora # Lista da composicao da mesa diretora
lst_mesa = [] lst_mesa = []
for composicao in context.zsql.composicao_mesa_sessao_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen,ind_excluido=0): for composicao in context.zsql.composicao_mesa_sessao_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0):
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=composicao.cod_parlamentar,ind_excluido=0): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=composicao.cod_parlamentar, ind_excluido=0):
for cargo in context.zsql.cargo_mesa_obter_zsql(cod_cargo=composicao.cod_cargo, ind_excluido=0): for cargo in context.zsql.cargo_mesa_obter_zsql(cod_cargo=composicao.cod_cargo, ind_excluido=0):
dic_mesa = {} dic_mesa = {}
dic_mesa['nom_parlamentar'] = parlamentar.nom_parlamentar dic_mesa['nom_parlamentar'] = parlamentar.nom_parlamentar
@ -38,80 +40,98 @@ if context.REQUEST['data']!='':
# Lista de presença na sessão # Lista de presença na sessão
lst_presenca_sessao = [] lst_presenca_sessao = []
for presenca in context.zsql.presenca_sessao_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): for presenca in context.zsql.presenca_sessao_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0):
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=presenca.cod_parlamentar,ind_excluido=0): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=presenca.cod_parlamentar, ind_excluido=0):
dic_presenca = {} dic_presenca = {}
dic_presenca["nom_parlamentar"] = parlamentar.nom_parlamentar dic_presenca["nom_parlamentar"] = parlamentar.nom_parlamentar
dic_presenca['sgl_partido'] = parlamentar.sgl_partido dic_presenca['sgl_partido'] = parlamentar.sgl_partido
lst_presenca_sessao.append(dic_presenca) lst_presenca_sessao.append(dic_presenca)
# Exibe os Expedientes # Exibe os Expedientes
lst_expedientes = [] lst_expedientes = []
dic_expedientes = None dic_expedientes = None
for tip_expediente in context.zsql.tipo_expediente_obter_zsql(): for tip_expediente in context.zsql.tipo_expediente_obter_zsql():
for expediente in context.zsql.expediente_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen,cod_expediente=tip_expediente.cod_expediente, ind_excluido=0): for expediente in context.zsql.expediente_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, cod_expediente=tip_expediente.cod_expediente, ind_excluido=0):
dic_expedientes = {} dic_expedientes = {}
dic_expedientes["nom_expediente"] = tip_expediente.nom_expediente dic_expedientes[
"nom_expediente"] = tip_expediente.nom_expediente
dic_expedientes["txt_expediente"] = expediente.txt_expediente dic_expedientes["txt_expediente"] = expediente.txt_expediente
if dic_expedientes: if dic_expedientes:
lst_expedientes.append(dic_expedientes) lst_expedientes.append(dic_expedientes)
# Lista das matérias do Expediente, incluindo o resultado das votacoes # Lista das matérias do Expediente, incluindo o resultado das votacoes
lst_expediente_materia=[] lst_expediente_materia = []
for expediente_materia in context.zsql.votacao_expediente_materia_obter_zsql(dat_ordem = data, cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): for expediente_materia in context.zsql.votacao_expediente_materia_obter_zsql(dat_ordem=data, cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0):
# seleciona os detalhes de uma matéria # seleciona os detalhes de uma matéria
materia = context.zsql.materia_obter_zsql(cod_materia=expediente_materia.cod_materia)[0] materia = context.zsql.materia_obter_zsql(
cod_materia=expediente_materia.cod_materia)[0]
dic_expediente_materia = {} dic_expediente_materia = {}
dic_expediente_materia["num_ordem"] = expediente_materia.num_ordem dic_expediente_materia["num_ordem"] = expediente_materia.num_ordem
dic_expediente_materia["id_materia"] = materia.sgl_tipo_materia+" "+materia.des_tipo_materia+" "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) dic_expediente_materia["id_materia"] = materia.sgl_tipo_materia + " " + materia.des_tipo_materia + \
dic_expediente_materia["des_numeracao"]="" " " + str(materia.num_ident_basica) + "/" + \
str(materia.ano_ident_basica)
dic_expediente_materia["des_numeracao"] = ""
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=expediente_materia.cod_materia) numeracao = context.zsql.numeracao_obter_zsql(
cod_materia=expediente_materia.cod_materia)
if len(numeracao): if len(numeracao):
numeracao = numeracao[0] numeracao = numeracao[0]
dic_expediente_materia["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) dic_expediente_materia["des_numeracao"] = str(
numeracao.num_materia) + "/" + str(numeracao.ano_materia)
tram = context.zsql.tramitacao_turno_obter_zsql(cod_materia=materia.cod_materia, dat_inicio_sessao=data) tram = context.zsql.tramitacao_turno_obter_zsql(
dic_expediente_materia["des_turno"]="" cod_materia=materia.cod_materia, dat_inicio_sessao=data)
dic_expediente_materia["des_turno"] = ""
if len(tram): if len(tram):
tram_turno = tram[0] tram_turno = tram[0]
if tram_turno.sgl_turno != "": if tram_turno.sgl_turno != "":
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("L","Suplementar"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações"), ("F", "Final")]: for turno in [("P", "Primeiro"), ("S", "Segundo"), ("U", "Único"), ("L", "Suplementar"), ("A", "Votação Única em Regime de Urgência"), ("B", "1ª Votação"), ("C", "2ª e 3ª Votações"), ("F", "Final")]:
if tram_turno.sgl_turno == turno[0]: if tram_turno.sgl_turno == turno[0]:
dic_expediente_materia["des_turno"] = turno[1] dic_expediente_materia["des_turno"] = turno[1]
dic_expediente_materia["txt_ementa"] = materia.txt_ementa dic_expediente_materia["txt_ementa"] = materia.txt_ementa
dic_expediente_materia["ordem_observacao"] = expediente_materia.ordem_observacao dic_expediente_materia[
"ordem_observacao"] = expediente_materia.ordem_observacao
dic_expediente_materia["nom_autor"] = "" dic_expediente_materia["nom_autor"] = ""
autoria = context.zsql.autoria_obter_zsql(cod_materia=expediente_materia.cod_materia, ind_primeiro_autor=1) autoria = context.zsql.autoria_obter_zsql(
if len(autoria) > 0: # se existe autor cod_materia=expediente_materia.cod_materia, ind_primeiro_autor=1)
if len(autoria) > 0: # se existe autor
autoria = autoria[0] autoria = autoria[0]
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) autor = context.zsql.autor_obter_zsql(
cod_autor=autoria.cod_autor)
if len(autor) > 0: if len(autor) > 0:
autor = autor[0] autor = autor[0]
try: try:
if autor.des_tipo_autor == "Parlamentar": if autor.des_tipo_autor == "Parlamentar":
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] parlamentar = context.zsql.parlamentar_obter_zsql(
dic_expediente_materia["nom_autor"] = parlamentar.nom_parlamentar cod_parlamentar=autor.cod_parlamentar)[0]
elif autor.des_tipo_autor == "Comissao": dic_expediente_materia[
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] "nom_autor"] = parlamentar.nom_parlamentar
dic_expediente_materia["nom_autor"] = comissao.nom_comissao elif autor.des_tipo_autor == "Comissao":
elif autor.nom_autor != "": comissao = context.zsql.comissao_obter_zsql(
dic_expediente_materia["nom_autor"] = autor.nom_autor cod_comissao=autor.cod_comissao)[0]
else: dic_expediente_materia[
dic_expediente_materia["nom_autor"] = autor.des_tipo_autor "nom_autor"] = comissao.nom_comissao
elif autor.nom_autor != "":
dic_expediente_materia[
"nom_autor"] = autor.nom_autor
else:
dic_expediente_materia[
"nom_autor"] = autor.des_tipo_autor
except: except:
dic_expediente_materia["nom_autor"] = "NC-em" dic_expediente_materia["nom_autor"] = "NC-em"
dic_expediente_materia["votacao_observacao"]="" dic_expediente_materia["votacao_observacao"] = ""
if expediente_materia.tip_resultado_votacao: if expediente_materia.tip_resultado_votacao:
resultado = context.zsql.tipo_resultado_votacao_obter_zsql(tip_resultado_votacao=expediente_materia.tip_resultado_votacao, ind_excluido=0) resultado = context.zsql.tipo_resultado_votacao_obter_zsql(
tip_resultado_votacao=expediente_materia.tip_resultado_votacao, ind_excluido=0)
for i in resultado: for i in resultado:
dic_expediente_materia["nom_resultado"] = i.nom_resultado dic_expediente_materia["nom_resultado"] = i.nom_resultado
if expediente_materia.votacao_observacao: if expediente_materia.votacao_observacao:
dic_expediente_materia["votacao_observacao"] = expediente_materia.votacao_observacao dic_expediente_materia[
"votacao_observacao"] = expediente_materia.votacao_observacao
else: else:
dic_expediente_materia["nom_resultado"] = "Matéria não votada" dic_expediente_materia["nom_resultado"] = "Matéria não votada"
dic_expediente_materia["votacao_observacao"] = "Vazio" dic_expediente_materia["votacao_observacao"] = "Vazio"
@ -120,78 +140,97 @@ if context.REQUEST['data']!='':
# Lista dos oradores do Expediente # Lista dos oradores do Expediente
lst_oradores_expediente = [] lst_oradores_expediente = []
for orador_expediente in context.zsql.oradores_expediente_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): for orador_expediente in context.zsql.oradores_expediente_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0):
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=orador_expediente.cod_parlamentar,ind_excluido=0): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=orador_expediente.cod_parlamentar, ind_excluido=0):
dic_oradores_expediente = {} dic_oradores_expediente = {}
dic_oradores_expediente["num_ordem"] = orador_expediente.num_ordem dic_oradores_expediente[
dic_oradores_expediente["nom_parlamentar"] = parlamentar.nom_parlamentar "num_ordem"] = orador_expediente.num_ordem
dic_oradores_expediente['sgl_partido'] = parlamentar.sgl_partido dic_oradores_expediente[
"nom_parlamentar"] = parlamentar.nom_parlamentar
dic_oradores_expediente[
'sgl_partido'] = parlamentar.sgl_partido
lst_oradores_expediente.append(dic_oradores_expediente) lst_oradores_expediente.append(dic_oradores_expediente)
# Lista presença na ordem do dia # Lista presença na ordem do dia
lst_presenca_ordem_dia = [] lst_presenca_ordem_dia = []
for presenca_ordem_dia in context.zsql.presenca_ordem_dia_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen,ind_excluido=0): for presenca_ordem_dia in context.zsql.presenca_ordem_dia_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0):
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=presenca_ordem_dia.cod_parlamentar,ind_excluido=0): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=presenca_ordem_dia.cod_parlamentar, ind_excluido=0):
dic_presenca_ordem_dia = {} dic_presenca_ordem_dia = {}
dic_presenca_ordem_dia['nom_parlamentar'] = parlamentar.nom_parlamentar dic_presenca_ordem_dia[
'nom_parlamentar'] = parlamentar.nom_parlamentar
dic_presenca_ordem_dia['sgl_partido'] = parlamentar.sgl_partido dic_presenca_ordem_dia['sgl_partido'] = parlamentar.sgl_partido
lst_presenca_ordem_dia.append(dic_presenca_ordem_dia) lst_presenca_ordem_dia.append(dic_presenca_ordem_dia)
# Lista das matérias da Ordem do Dia, incluindo o resultado das votacoes # Lista das matérias da Ordem do Dia, incluindo o resultado das
lst_votacao=[] # votacoes
for votacao in context.zsql.votacao_ordem_dia_obter_zsql(dat_ordem = data, cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): lst_votacao = []
for votacao in context.zsql.votacao_ordem_dia_obter_zsql(dat_ordem=data, cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0):
# seleciona os detalhes de uma matéria # seleciona os detalhes de uma matéria
materia = context.zsql.materia_obter_zsql(cod_materia=votacao.cod_materia)[0] materia = context.zsql.materia_obter_zsql(
cod_materia=votacao.cod_materia)[0]
dic_votacao = {} dic_votacao = {}
dic_votacao["num_ordem"] = votacao.num_ordem dic_votacao["num_ordem"] = votacao.num_ordem
dic_votacao["id_materia"] = materia.sgl_tipo_materia+" "+materia.des_tipo_materia+" "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) dic_votacao["id_materia"] = materia.sgl_tipo_materia + " " + materia.des_tipo_materia + \
dic_votacao["des_numeracao"]="" " " + str(materia.num_ident_basica) + "/" + \
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=votacao.cod_materia) str(materia.ano_ident_basica)
dic_votacao["des_numeracao"] = ""
numeracao = context.zsql.numeracao_obter_zsql(
cod_materia=votacao.cod_materia)
if len(numeracao): if len(numeracao):
numeracao = numeracao[0] numeracao = numeracao[0]
dic_votacao["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) dic_votacao["des_numeracao"] = str(
dic_votacao["des_turno"]="" numeracao.num_materia) + "/" + str(numeracao.ano_materia)
tramitacao = context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia, ind_ult_tramitacao=1) dic_votacao["des_turno"] = ""
tramitacao = context.zsql.tramitacao_obter_zsql(
cod_materia=materia.cod_materia, ind_ult_tramitacao=1)
if len(tramitacao): if len(tramitacao):
tramitacao = tramitacao[0] tramitacao = tramitacao[0]
tram = context.zsql.tramitacao_turno_obter_zsql(cod_materia=materia.cod_materia, dat_inicio_sessao=data) tram = context.zsql.tramitacao_turno_obter_zsql(
cod_materia=materia.cod_materia, dat_inicio_sessao=data)
if len(tram): if len(tram):
tram_turno = tram[0] tram_turno = tram[0]
if tram_turno.sgl_turno != "": if tram_turno.sgl_turno != "":
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("L","Suplementar"), ("F","Final"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações")]: for turno in [("P", "Primeiro"), ("S", "Segundo"), ("U", "Único"), ("L", "Suplementar"), ("F", "Final"), ("A", "Votação Única em Regime de Urgência"), ("B", "1ª Votação"), ("C", "2ª e 3ª Votações")]:
if tram_turno.sgl_turno == turno[0]: if tram_turno.sgl_turno == turno[0]:
dic_votacao["des_turno"] = turno[1] dic_votacao["des_turno"] = turno[1]
dic_votacao["txt_ementa"] = materia.txt_ementa dic_votacao["txt_ementa"] = materia.txt_ementa
dic_votacao["ordem_observacao"] = votacao.ordem_observacao dic_votacao["ordem_observacao"] = votacao.ordem_observacao
dic_votacao["nom_autor"] = "" dic_votacao["nom_autor"] = ""
autoria = context.zsql.autoria_obter_zsql(cod_materia=votacao.cod_materia, ind_primeiro_autor=1) autoria = context.zsql.autoria_obter_zsql(
if len(autoria) > 0: # se existe autor cod_materia=votacao.cod_materia, ind_primeiro_autor=1)
if len(autoria) > 0: # se existe autor
autoria = autoria[0] autoria = autoria[0]
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) autor = context.zsql.autor_obter_zsql(
cod_autor=autoria.cod_autor)
if len(autor) > 0: if len(autor) > 0:
autor = autor[0] autor = autor[0]
try: try:
if autor.des_tipo_autor == "Parlamentar": if autor.des_tipo_autor == "Parlamentar":
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] parlamentar = context.zsql.parlamentar_obter_zsql(
dic_votacao["nom_autor"] = parlamentar.nom_parlamentar cod_parlamentar=autor.cod_parlamentar)[0]
elif autor.des_tipo_autor == "Comissao": dic_votacao[
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] "nom_autor"] = parlamentar.nom_parlamentar
dic_votacao["nom_autor"] = comissao.nom_comissao elif autor.des_tipo_autor == "Comissao":
elif autor.nom_autor != "": comissao = context.zsql.comissao_obter_zsql(
dic_votacao["nom_autor"] = autor.nom_autor cod_comissao=autor.cod_comissao)[0]
else: dic_votacao["nom_autor"] = comissao.nom_comissao
dic_votacao["nom_autor"] = autor.des_tipo_autor elif autor.nom_autor != "":
except: dic_votacao["nom_autor"] = autor.nom_autor
dic_votacao["nom_autor"] = "NC-od" else:
dic_votacao["nom_autor"] = autor.des_tipo_autor
dic_votacao["votacao_observacao"]="" except:
dic_votacao["nom_autor"] = "NC-od"
dic_votacao["votacao_observacao"] = ""
if votacao.tip_resultado_votacao: if votacao.tip_resultado_votacao:
resultado = context.zsql.tipo_resultado_votacao_obter_zsql(tip_resultado_votacao=votacao.tip_resultado_votacao, ind_excluido=0) resultado = context.zsql.tipo_resultado_votacao_obter_zsql(
tip_resultado_votacao=votacao.tip_resultado_votacao, ind_excluido=0)
for i in resultado: for i in resultado:
dic_votacao["nom_resultado"] = i.nom_resultado dic_votacao["nom_resultado"] = i.nom_resultado
if votacao.votacao_observacao: if votacao.votacao_observacao:
dic_votacao["votacao_observacao"] = votacao.votacao_observacao dic_votacao[
"votacao_observacao"] = votacao.votacao_observacao
else: else:
dic_votacao["nom_resultado"] = "Matéria não votada" dic_votacao["nom_resultado"] = "Matéria não votada"
dic_votacao["votacao_observacao"] = "Vazio" dic_votacao["votacao_observacao"] = "Vazio"
@ -200,42 +239,46 @@ if context.REQUEST['data']!='':
# Lista dos oradores nas Explicações Pessoais # Lista dos oradores nas Explicações Pessoais
lst_oradores = [] lst_oradores = []
for orador in context.zsql.oradores_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): for orador in context.zsql.oradores_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0):
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=orador.cod_parlamentar,ind_excluido=0): for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=orador.cod_parlamentar, ind_excluido=0):
dic_oradores = {} dic_oradores = {}
dic_oradores["num_ordem"] = orador.num_ordem dic_oradores["num_ordem"] = orador.num_ordem
dic_oradores["nom_parlamentar"] = parlamentar.nom_parlamentar dic_oradores["nom_parlamentar"] = parlamentar.nom_parlamentar
dic_oradores['sgl_partido'] = parlamentar.sgl_partido dic_oradores['sgl_partido'] = parlamentar.sgl_partido
lst_oradores.append(dic_oradores) lst_oradores.append(dic_oradores)
# obtém as propriedades da casa legislativa para montar o cabeçalho e o rodapé da página # obtém as propriedades da casa legislativa para montar o cabeçalho e o
cabecalho={} # rodapé da página
cabecalho = {}
# tenta buscar o logotipo da casa LOGO_CASA # tenta buscar o logotipo da casa LOGO_CASA
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): if hasattr(context.sapl_documentos.props_sapl, 'logo_casa.gif'):
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() imagem = context.sapl_documentos.props_sapl[
'logo_casa.gif'].absolute_url()
else: else:
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" imagem = context.imagens.absolute_url() + "/brasao_transp.gif"
#Abaixo é gerado o dic do rodapé da página (linha 7) # Abaixo é gerado o dic do rodapé da página (linha 7)
casa={} casa = {}
aux=context.sapl_documentos.props_sapl.propertyItems() aux = context.sapl_documentos.props_sapl.propertyItems()
for item in aux: for item in aux:
casa[item[0]]=item[1] casa[item[0]] = item[1]
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) localidade = context.zsql.localidade_obter_zsql(
data_emissao= DateTime().strftime("%d/%m/%Y") cod_localidade=casa["cod_localidade"])
rodape= casa data_emissao = DateTime().strftime("%d/%m/%Y")
rodape['data_emissao']= data_emissao rodape = casa
rodape['data_emissao'] = data_emissao
inf_basicas_dic['nom_camara']= casa['nom_casa']
REQUEST=context.REQUEST inf_basicas_dic['nom_camara'] = casa['nom_casa']
for local in context.zsql.localidade_obter_zsql(cod_localidade = casa['cod_localidade']): REQUEST = context.REQUEST
rodape['nom_localidade']= " "+local.nom_localidade for local in context.zsql.localidade_obter_zsql(cod_localidade=casa['cod_localidade']):
rodape['sgl_uf']= local.sgl_uf rodape['nom_localidade'] = " " + local.nom_localidade
rodape['sgl_uf'] = local.sgl_uf
# return lst_votacao # return lst_votacao
sessao=session.id sessao = session.id
caminho = context.pdf_sessao_plenaria_gerar(rodape, sessao, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao, lst_expedientes, lst_expediente_materia, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_oradores) caminho = context.pdf_sessao_plenaria_gerar(rodape, sessao, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao,
if caminho=='aviso': lst_expedientes, lst_expediente_materia, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_oradores)
if caminho == 'aviso':
return response.redirect('mensagem_emitir_proc') return response.redirect('mensagem_emitir_proc')
else: else:
response.redirect(caminho) response.redirect(caminho)

35
sapl/relatorios/views.py

@ -15,11 +15,10 @@ from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo,
TramitacaoAdministrativo) TramitacaoAdministrativo)
from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao, from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
IntegranteMesa, Orador, OradorExpediente, IntegranteMesa, Orador, OradorExpediente,
OrdemDia, PresencaOrdemDia, RegistroVotacao, OrdemDia, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenaria, SessaoPlenariaPresenca, SessaoPlenariaPresenca)
TipoExpediente)
from sapl.settings import STATIC_ROOT from sapl.settings import STATIC_ROOT
from sapl.utils import filiacao_data, UF from sapl.utils import UF, filiacao_data
from .templates import (pdf_capa_processo_gerar, from .templates import (pdf_capa_processo_gerar,
pdf_documento_administrativo_gerar, pdf_espelho_gerar, pdf_documento_administrativo_gerar, pdf_espelho_gerar,
@ -505,20 +504,20 @@ def get_sessao_plenaria(sessao, casa):
# Lista de presença na sessão # Lista de presença na sessão
lst_presenca_sessao = [] lst_presenca_sessao = []
presenca = SessaoPlenariaPresenca.objects.filter( presenca = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar') sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for parlamentar in [p.parlamentar for p in presenca]: for parlamentar in [p.parlamentar for p in presenca]:
dic_presenca = {} dic_presenca = {}
dic_presenca["nom_parlamentar"] = parlamentar.nome_parlamentar dic_presenca["nom_parlamentar"] = parlamentar.nome_parlamentar
partido_sigla = filiacao_data(parlamentar, sessao.data_inicio) partido_sigla = filiacao_data(parlamentar, sessao.data_inicio)
dic_presenca['sgl_partido'] = partido_sigla dic_presenca['sgl_partido'] = partido_sigla
lst_presenca_sessao.append(dic_presenca) lst_presenca_sessao.append(dic_presenca)
# Exibe os Expedientes # Exibe os Expedientes
lst_expedientes = [] lst_expedientes = []
expedientes = ExpedienteSessao.objects.filter( expedientes = ExpedienteSessao.objects.filter(
sessao_plenaria=sessao).order_by('tipo__nome') sessao_plenaria=sessao).order_by('tipo__nome')
for e in expedientes: for e in expedientes:
@ -642,15 +641,15 @@ def get_sessao_plenaria(sessao, casa):
# Lista presença na ordem do dia # Lista presença na ordem do dia
lst_presenca_ordem_dia = [] lst_presenca_ordem_dia = []
presenca_ordem_dia = PresencaOrdemDia.objects.filter( presenca_ordem_dia = PresencaOrdemDia.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar') sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for parlamentar in [p.parlamentar for p in presenca_ordem_dia]: for parlamentar in [p.parlamentar for p in presenca_ordem_dia]:
dic_presenca_ordem_dia = {} dic_presenca_ordem_dia = {}
dic_presenca_ordem_dia['nom_parlamentar'] = ( dic_presenca_ordem_dia['nom_parlamentar'] = (
parlamentar.nome_parlamentar) parlamentar.nome_parlamentar)
sigla = filiacao_data(parlamentar, sessao.data_inicio) sigla = filiacao_data(parlamentar, sessao.data_inicio)
dic_presenca_ordem_dia['sgl_partido'] = sigla dic_presenca_ordem_dia['sgl_partido'] = sigla
lst_presenca_ordem_dia.append(dic_presenca_ordem_dia) lst_presenca_ordem_dia.append(dic_presenca_ordem_dia)
# Lista das matérias da Ordem do Dia, incluindo o resultado das votacoes # Lista das matérias da Ordem do Dia, incluindo o resultado das votacoes
lst_votacao = [] lst_votacao = []

14
sapl/sessao/forms.py

@ -10,8 +10,8 @@ from django.utils.translation import ugettext_lazy as _
from sapl.crispy_layout_mixin import form_actions, to_row from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.materia.forms import MateriaLegislativaFilterSet from sapl.materia.forms import MateriaLegislativaFilterSet
from sapl.materia.models import (MateriaLegislativa, TipoMateriaLegislativa, from sapl.materia.models import (MateriaLegislativa, StatusTramitacao,
StatusTramitacao) TipoMateriaLegislativa)
from sapl.parlamentares.models import Parlamentar from sapl.parlamentares.models import Parlamentar
from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
MateriaPesquisaOrderingFilter, autor_label, MateriaPesquisaOrderingFilter, autor_label,
@ -52,6 +52,7 @@ ORDENACAO_RESUMO = [('cont_mult', 'Conteúdo Multimídia'),
('oradores_exped', 'Oradores do Expediente'), ('oradores_exped', 'Oradores do Expediente'),
('oradores_expli', 'Oradores das Explicações Pessoais')] ('oradores_expli', 'Oradores das Explicações Pessoais')]
class SessaoPlenariaForm(ModelForm): class SessaoPlenariaForm(ModelForm):
class Meta: class Meta:
@ -70,21 +71,22 @@ class SessaoPlenariaForm(ModelForm):
sessoes = SessaoPlenaria.objects.filter(numero=num, sessoes = SessaoPlenaria.objects.filter(numero=num,
sessao_legislativa=sl, sessao_legislativa=sl,
legislatura=leg).\ legislatura=leg).\
values_list('id', flat=True) values_list('id', flat=True)
qtd_sessoes = len(sessoes) qtd_sessoes = len(sessoes)
error = ValidationError('Número de Sessão Plenária Existente') error = ValidationError('Número de Sessão Plenária Existente')
if qtd_sessoes > 0: if qtd_sessoes > 0:
if instance.pk: # update if instance.pk: # update
if not instance.pk in sessoes or qtd_sessoes > 1: if instance.pk not in sessoes or qtd_sessoes > 1:
raise error raise error
else: # create else: # create
raise error raise error
return self.cleaned_data return self.cleaned_data
class BancadaForm(ModelForm): class BancadaForm(ModelForm):
class Meta: class Meta:

13
sapl/sessao/models.py

@ -406,15 +406,14 @@ class RegistroVotacao(models.Model):
blank=True, verbose_name=_('Observações')) blank=True, verbose_name=_('Observações'))
data_hora_criacao = models.DateTimeField( data_hora_criacao = models.DateTimeField(
blank=True, null=True, blank=True, null=True,
auto_now_add=True, auto_now_add=True,
verbose_name=_('Data Criação')) verbose_name=_('Data Criação'))
data_hora_atualizacao = models.DateTimeField( data_hora_atualizacao = models.DateTimeField(
blank=True, null=True, blank=True, null=True,
auto_now=True, auto_now=True,
verbose_name=_('Data')) verbose_name=_('Data'))
class Meta: class Meta:
verbose_name = _('Votação') verbose_name = _('Votação')

1
sapl/sessao/serializers.py

@ -4,6 +4,7 @@ from .models import SessaoPlenaria
class SessaoPlenariaSerializer(serializers.Serializer): class SessaoPlenariaSerializer(serializers.Serializer):
class Meta: class Meta:
model = SessaoPlenaria model = SessaoPlenaria
fields = ('tipo', fields = ('tipo',

112
sapl/sessao/views.py

@ -30,22 +30,23 @@ from sapl.materia.models import (Autoria, DocumentoAcessorio,
TipoMateriaLegislativa, Tramitacao) TipoMateriaLegislativa, Tramitacao)
from sapl.materia.views import MateriaLegislativaPesquisaView from sapl.materia.views import MateriaLegislativaPesquisaView
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import (Filiacao, Legislatura, Parlamentar, from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato,
SessaoLegislativa, Mandato) Parlamentar, SessaoLegislativa)
from sapl.sessao.apps import AppConfig from sapl.sessao.apps import AppConfig
from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm
from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm, from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm,
ListMateriaForm, MesaForm, OradorExpedienteForm, ListMateriaForm, MesaForm, OradorExpedienteForm,
OradorForm, PautaSessaoFilterSet, PresencaForm, OradorForm, PautaSessaoFilterSet, PresencaForm,
ResumoOrdenacaoForm, SessaoPlenariaFilterSet, SessaoPlenariaForm, ResumoOrdenacaoForm, SessaoPlenariaFilterSet,
VotacaoEditForm, VotacaoForm, VotacaoNominalForm) SessaoPlenariaForm, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa, from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, IntegranteMesa, ExpedienteMateria, ExpedienteSessao, IntegranteMesa,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia, MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar)
VotoParlamentar)
TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria') TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
TipoExpedienteCrud = CrudAux.build(TipoExpediente, 'tipo_expediente') TipoExpedienteCrud = CrudAux.build(TipoExpediente, 'tipo_expediente')
@ -80,6 +81,7 @@ def reordernar_materias_ordem(request, pk):
return HttpResponseRedirect( return HttpResponseRedirect(
reverse('sapl.sessao:ordemdia_list', kwargs={'pk': pk})) reverse('sapl.sessao:ordemdia_list', kwargs={'pk': pk}))
def verifica_presenca(request, model, spk): def verifica_presenca(request, model, spk):
if not model.objects.filter(sessao_plenaria_id=spk).exists(): if not model.objects.filter(sessao_plenaria_id=spk).exists():
msg = _('Votação não pode ser aberta sem presenças') msg = _('Votação não pode ser aberta sem presenças')
@ -117,7 +119,7 @@ def abrir_votacao_expediente_view(request, pk, spk):
if verifica_presenca(request, SessaoPlenariaPresenca, spk): if verifica_presenca(request, SessaoPlenariaPresenca, spk):
verifica_votacoes_abertas(request, ExpedienteMateria, pk) verifica_votacoes_abertas(request, ExpedienteMateria, pk)
return HttpResponseRedirect( return HttpResponseRedirect(
reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': spk})) reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': spk}))
@permission_required('sessao.change_ordemdia') @permission_required('sessao.change_ordemdia')
@ -125,7 +127,7 @@ def abrir_votacao_ordem_view(request, pk, spk):
if verifica_presenca(request, PresencaOrdemDia, spk): if verifica_presenca(request, PresencaOrdemDia, spk):
verifica_votacoes_abertas(request, OrdemDia, pk) verifica_votacoes_abertas(request, OrdemDia, pk)
return HttpResponseRedirect( return HttpResponseRedirect(
reverse('sapl.sessao:ordemdia_list', kwargs={'pk': spk})) reverse('sapl.sessao:ordemdia_list', kwargs={'pk': spk}))
def put_link_materia(context): def put_link_materia(context):
@ -171,8 +173,10 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
self.initial['data_ordem'] = SessaoPlenaria.objects.get( self.initial['data_ordem'] = SessaoPlenaria.objects.get(
pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y') pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y')
max_numero_ordem = OrdemDia.objects.filter( max_numero_ordem = OrdemDia.objects.filter(
sessao_plenaria=self.kwargs['pk']).aggregate(Max('numero_ordem'))['numero_ordem__max'] sessao_plenaria=(self.kwargs['pk']).
self.initial['numero_ordem'] = (max_numero_ordem if max_numero_ordem else 0) + 1 aggregate(Max('numero_ordem'))['numero_ordem__max'])
self.initial['numero_ordem'] = (
max_numero_ordem if max_numero_ordem else 0) + 1
return self.initial return self.initial
def get_success_url(self): def get_success_url(self):
@ -369,7 +373,7 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
else: else:
url = '' url = ''
resultado = obj.registrovotacao_set.get( resultado = obj.registrovotacao_set.get(
materia_id=obj.materia_id) materia_id=obj.materia_id)
resultado_descricao = resultado.tipo_resultado_votacao.nome resultado_descricao = resultado.tipo_resultado_votacao.nome
resultado_observacao = resultado.observacao resultado_observacao = resultado.observacao
if self.request.user.has_module_perms(AppConfig.label): if self.request.user.has_module_perms(AppConfig.label):
@ -421,8 +425,10 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
self.initial['data_ordem'] = SessaoPlenaria.objects.get( self.initial['data_ordem'] = SessaoPlenaria.objects.get(
pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y') pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y')
max_numero_ordem = ExpedienteMateria.objects.filter( max_numero_ordem = ExpedienteMateria.objects.filter(
sessao_plenaria=self.kwargs['pk']).aggregate(Max('numero_ordem'))['numero_ordem__max'] sessao_plenaria=(self.kwargs['pk']).
self.initial['numero_ordem'] = (max_numero_ordem if max_numero_ordem else 0) + 1 aggregate(Max('numero_ordem'))['numero_ordem__max'])
self.initial['numero_ordem'] = (
max_numero_ordem if max_numero_ordem else 0) + 1
return self.initial return self.initial
def get_success_url(self): def get_success_url(self):
@ -617,12 +623,12 @@ class PresencaView(FormMixin, PresencaMixin, DetailView):
if form.is_valid(): if form.is_valid():
# Pegar os presentes salvos no banco # Pegar os presentes salvos no banco
presentes_banco = SessaoPlenariaPresenca.objects.filter( presentes_banco = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).values_list( sessao_plenaria_id=self.object.id).values_list(
'parlamentar_id', flat=True).distinct() 'parlamentar_id', flat=True).distinct()
# Id dos parlamentares presentes # Id dos parlamentares presentes
marcados = request.POST.getlist('presenca_ativos') \ marcados = request.POST.getlist('presenca_ativos') \
+ request.POST.getlist('presenca_inativos') + request.POST.getlist('presenca_inativos')
# Deletar os que foram desmarcados # Deletar os que foram desmarcados
deletar = set(presentes_banco) - set(marcados) deletar = set(presentes_banco) - set(marcados)
@ -722,17 +728,15 @@ class PresencaOrdemDiaView(FormMixin, PresencaMixin, DetailView):
self.object = self.get_object() self.object = self.get_object()
form = self.get_form() form = self.get_form()
pk = kwargs['pk']
if form.is_valid(): if form.is_valid():
# Pegar os presentes salvos no banco # Pegar os presentes salvos no banco
presentes_banco = PresencaOrdemDia.objects.filter( presentes_banco = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).values_list( sessao_plenaria_id=self.object.id).values_list(
'parlamentar_id', flat=True).distinct() 'parlamentar_id', flat=True).distinct()
# Id dos parlamentares presentes # Id dos parlamentares presentes
marcados = request.POST.getlist('presenca_ativos') \ marcados = request.POST.getlist('presenca_ativos') \
+ request.POST.getlist('presenca_inativos') + request.POST.getlist('presenca_inativos')
# Deletar os que foram desmarcados # Deletar os que foram desmarcados
deletar = set(presentes_banco) - set(marcados) deletar = set(presentes_banco) - set(marcados)
@ -1016,24 +1020,24 @@ def remove_parlamentar_composicao(request):
'%s.delete_%s' % ( '%s.delete_%s' % (
AppConfig.label, IntegranteMesa._meta.model_name)): AppConfig.label, IntegranteMesa._meta.model_name)):
if 'composicao_mesa' in request.POST: if 'composicao_mesa' in request.POST:
try: try:
composicao = IntegranteMesa.objects.get( composicao = IntegranteMesa.objects.get(
id=int(request.POST['composicao_mesa'])) id=int(request.POST['composicao_mesa']))
except ObjectDoesNotExist: except ObjectDoesNotExist:
return JsonResponse(
{'msg': (
'Composição da Mesa não pôde ser removida!', 0)})
composicao.delete()
return JsonResponse(
{'msg': (
'Parlamentar excluido com sucesso!', 1)})
else:
return JsonResponse( return JsonResponse(
{'msg': ( {'msg': (
'Selecione algum parlamentar para ser excluido!', 0)}) 'Composição da Mesa não pôde ser removida!', 0)})
composicao.delete()
return JsonResponse(
{'msg': (
'Parlamentar excluido com sucesso!', 1)})
else:
return JsonResponse(
{'msg': (
'Selecione algum parlamentar para ser excluido!', 0)})
class ResumoOrdenacaoView(PermissionRequiredMixin, FormView): class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
@ -1253,21 +1257,22 @@ class ResumoView(DetailView):
# ===================================================================== # =====================================================================
# Oradores nas Explicações Pessoais # Oradores nas Explicações Pessoais
oradores_explicacoes = [] oradores_explicacoes = []
for orador in Orador.objects.filter(sessao_plenaria_id=self.object.id).order_by('numero_ordem'): for orador in Orador.objects.filter(
for parlamentar in Parlamentar.objects.filter( sessao_plenaria_id=self.object.id).order_by('numero_ordem'):
id=orador.parlamentar.id): for parlamentar in Parlamentar.objects.filter(
partido_sigla = Filiacao.objects.filter( id=orador.parlamentar.id):
parlamentar=parlamentar).last() partido_sigla = Filiacao.objects.filter(
if not partido_sigla: parlamentar=parlamentar).last()
sigla = '' if not partido_sigla:
else: sigla = ''
sigla = partido_sigla.partido.sigla else:
oradores = { sigla = partido_sigla.partido.sigla
'numero_ordem': orador.numero_ordem, oradores = {
'parlamentar': parlamentar, 'numero_ordem': orador.numero_ordem,
'sgl_partido': sigla 'parlamentar': parlamentar,
} 'sgl_partido': sigla
oradores_explicacoes.append(oradores) }
oradores_explicacoes.append(oradores)
context.update({'oradores_explicacoes': oradores_explicacoes}) context.update({'oradores_explicacoes': oradores_explicacoes})
# ===================================================================== # =====================================================================
@ -2167,7 +2172,8 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
expediente_id = kwargs['oid'] expediente_id = kwargs['oid']
if(int(request.POST['anular_votacao']) == 1): if(int(request.POST['anular_votacao']) == 1):
for r in RegistroVotacao.objects.filter(expediente_id=expediente_id): for r in RegistroVotacao.objects.filter(
expediente_id=expediente_id):
r.delete() r.delete()
expediente = ExpedienteMateria.objects.get( expediente = ExpedienteMateria.objects.get(

1
sapl/settings.py

@ -22,7 +22,6 @@ from unipath import Path
from .temp_suppress_crispy_form_warnings import \ from .temp_suppress_crispy_form_warnings import \
SUPRESS_CRISPY_FORM_WARNINGS_LOGGING SUPRESS_CRISPY_FORM_WARNINGS_LOGGING
BASE_DIR = Path(__file__).ancestor(1) BASE_DIR = Path(__file__).ancestor(1)
PROJECT_DIR = Path(__file__).ancestor(2) PROJECT_DIR = Path(__file__).ancestor(2)

36
sapl/test_urls.py

@ -174,24 +174,24 @@ apps_url_patterns_prefixs_and_users = {
]}, ]},
'redireciona_urls': { 'redireciona_urls': {
'prefixs': [ 'prefixs': [
'/default_index_html', '/default_index_html',
'/consultas/parlamentar/parlamentar_', '/consultas/parlamentar/parlamentar_',
'/consultas/comissao/comissao_', '/consultas/comissao/comissao_',
'/consultas/pauta_sessao/pauta_sessao_', '/consultas/pauta_sessao/pauta_sessao_',
'/consultas/sessao_plenaria/', '/consultas/sessao_plenaria/',
'/relatorios_administrativos/relatorios_administrativos_index_html', '/relatorios_administrativos/relatorios_administrativos_index_html',
'/tramitacaoMaterias/tramitacaoMaterias', '/tramitacaoMaterias/tramitacaoMaterias',
'/tramitacaoMaterias/materia_mostrar_proc', '/tramitacaoMaterias/materia_mostrar_proc',
'/generico/materia_pesquisar_', '/generico/materia_pesquisar_',
'/consultas/mesa_diretora/mesa_diretora_index_html', '/consultas/mesa_diretora/mesa_diretora_index_html',
'/consultas/mesa_diretora/parlamentar/parlamentar_', '/consultas/mesa_diretora/parlamentar/parlamentar_',
'/generico/norma_juridica_pesquisar_', '/generico/norma_juridica_pesquisar_',
'/consultas/norma_juridica/norma_juridica_mostrar_proc', '/consultas/norma_juridica/norma_juridica_mostrar_proc',
'/historicoTramitacoes/historicoTramitacoes', '/historicoTramitacoes/historicoTramitacoes',
'/atasSessao', '/atasSessao',
'/presencaSessao', '/presencaSessao',
'/resumoPropositurasAutor', '/resumoPropositurasAutor',
'/propositurasAnoAutorTipo', '/propositurasAnoAutorTipo',
]}, ]},
'lexml': { 'lexml': {
'prefixs': [ 'prefixs': [

3
sapl/urls.py

@ -35,7 +35,8 @@ import sapl.relatorios.urls
import sapl.sessao.urls import sapl.sessao.urls
urlpatterns = [ urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='index.html'), name='sapl_index'), url(r'^$', TemplateView.as_view(template_name='index.html'),
name='sapl_index'),
url(r'^message$', TemplateView.as_view(template_name='base.html')), url(r'^message$', TemplateView.as_view(template_name='base.html')),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),

17
sapl/utils.py

@ -3,10 +3,7 @@ import logging
import os import os
import re import re
from datetime import date from datetime import date
from django_filters.filterset import STRICTNESS
from functools import wraps from functools import wraps
from subprocess import PIPE, call
from threading import Thread
from unicodedata import normalize as unicodedata_normalize from unicodedata import normalize as unicodedata_normalize
import django_filters import django_filters
@ -15,20 +12,20 @@ from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button from crispy_forms.layout import HTML, Button
from django import forms from django import forms
from django.apps import apps from django.apps import apps
from django.db.models import Q
from django.conf import settings from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes.fields import (GenericForeignKey, GenericRel, from django.contrib.contenttypes.fields import (GenericForeignKey, GenericRel,
GenericRelation) GenericRelation)
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db.models import Q
from django.utils import six from django.utils import six
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django_filters.filterset import STRICTNESS
from floppyforms import ClearableFileInput from floppyforms import ClearableFileInput
from reversion.admin import VersionAdmin from reversion.admin import VersionAdmin
from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row
from sapl.settings import BASE_DIR, PROJECT_DIR from sapl.settings import BASE_DIR
sapl_logger = logging.getLogger(BASE_DIR.name) sapl_logger = logging.getLogger(BASE_DIR.name)
@ -542,10 +539,12 @@ def texto_upload_path(instance, filename, subpath='', pk_first=False):
if isinstance(instance, (DocumentoAdministrativo, Proposicao)): if isinstance(instance, (DocumentoAdministrativo, Proposicao)):
prefix = 'private' prefix = 'private'
str_path = './sapl/%(prefix)s/%(model_name)s/%(subpath)s/%(pk)s/%(filename)s' str_path = ('./sapl/%(prefix)s/%(model_name)s/'
'%(subpath)s/%(pk)s/%(filename)s')
if pk_first: if pk_first:
str_path = './sapl/%(prefix)s/%(model_name)s/%(pk)s/%(subpath)s/%(filename)s' str_path = ('./sapl/%(prefix)s/%(model_name)s/'
'%(pk)s/%(subpath)s/%(filename)s')
path = str_path %\ path = str_path %\
{ {
@ -642,4 +641,4 @@ def parlamentares_ativos(data_inicio, data_fim=None):
'parlamentar_id', 'parlamentar_id',
flat=True).distinct('parlamentar_id') flat=True).distinct('parlamentar_id')
return Parlamentar.objects.filter(id__in=parlamentares_id) return Parlamentar.objects.filter(id__in=parlamentares_id)

2
scripts/set_inicio_mandato.py

@ -7,4 +7,4 @@ def popula_campo_data_inicio():
m.save() m.save()
if __name__ == '__main__': if __name__ == '__main__':
popula_campo_data_inicio() popula_campo_data_inicio()

Loading…
Cancel
Save